Index: srclib/apr/include/apr_network_io.h =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/include/apr_network_io.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/include/apr_network_io.h 21 Jan 2003 14:45:19 -0000 1.1.1.1 +++ srclib/apr/include/apr_network_io.h 29 Jan 2003 17:24:56 -0000 1.2 @@ -208,6 +208,8 @@ /** A structure to represent sockets */ typedef struct apr_socket_t apr_socket_t; +typedef struct apr_socket_iol_t apr_socket_iol_t; + /** * A structure to encapsulate headers and trailers for apr_socket_sendfile */ @@ -846,6 +848,103 @@ /** @deprecated @see apr_socket_inherit_unset */ APR_DECLARE(void) apr_socket_unset_inherit(apr_socket_t *skt); + +/* + * Socket IOL + */ + +APR_DECLARE(apr_status_t) apr_socket_iol_push(apr_socket_iol_t **newiol, + apr_socket_t *sock, + apr_socket_iol_t *iol, + const char *name); +typedef apr_status_t (*apr_shutdown_fn_t) (apr_socket_t *thesocket, + apr_shutdown_how_e how); +typedef apr_status_t (*apr_socket_close_fn_t) (apr_socket_t *thesocket); +typedef apr_status_t (*apr_bind_fn_t) (apr_socket_t *sock, apr_sockaddr_t *sa); +typedef apr_status_t (*apr_listen_fn_t) (apr_socket_t *sock, apr_int32_t backlog); +typedef apr_status_t (*apr_accept_fn_t) (apr_socket_t **new_sock, + apr_socket_t *sock, + apr_pool_t *connection_pool); +typedef apr_status_t (*apr_connect_fn_t) (apr_socket_t *sock, apr_sockaddr_t *sa); +typedef apr_status_t (*apr_socket_data_get_fn_t) (void **data, const char *key, + apr_socket_t *sock); +typedef apr_status_t (*apr_socket_data_set_fn_t) (apr_socket_t *sock, void *data, + const char *key, + apr_status_t (*cleanup)(void*)); +typedef apr_status_t (*apr_send_fn_t) (apr_socket_t *sock, const char *buf, + apr_size_t *len); +typedef apr_status_t (*apr_sendv_fn_t) (apr_socket_t *sock, + const struct iovec *vec, + apr_int32_t nvec, apr_size_t *len); +typedef apr_status_t (*apr_sendto_fn_t) (apr_socket_t *sock, apr_sockaddr_t *where, + apr_int32_t flags, const char *buf, + apr_size_t *len); +typedef apr_status_t (*apr_recvfrom_fn_t) (apr_sockaddr_t *from, apr_socket_t *sock, + apr_int32_t flags, char *buf, + apr_size_t *len); +#if APR_HAS_SENDFILE +typedef apr_status_t (*apr_sendfile_fn_t) (apr_socket_t *sock, apr_file_t *file, + apr_hdtr_t *hdtr, apr_off_t *offset, + apr_size_t *len, apr_int32_t flags); +#endif /* APR_HAS_SENDFILE */ +typedef apr_status_t (*apr_recv_fn_t) (apr_socket_t *sock, + char *buf, apr_size_t *len); +typedef apr_status_t (*apr_setsocketopt_fn_t) (apr_socket_t *sock, + apr_int32_t opt, apr_int32_t on); +typedef apr_status_t (*apr_getsocketopt_fn_t) (apr_socket_t *sock, + apr_int32_t opt, apr_int32_t *on); +typedef apr_status_t (*apr_socket_opt_set_fn_t) (apr_socket_t *sock, + apr_int32_t opt, apr_int32_t on); +typedef apr_status_t (*apr_socket_opt_get_fn_t) (apr_socket_t *sock, + apr_int32_t opt, apr_int32_t *on); +typedef apr_status_t (*apr_socket_timeout_set_fn_t) (apr_socket_t *sock, + apr_interval_time_t t); +typedef apr_status_t (*apr_socket_timeout_get_fn_t) (apr_socket_t *sock, + apr_interval_time_t *t); +typedef apr_status_t (*apr_socket_addr_get_fn_t) (apr_sockaddr_t **sa, + apr_interface_e which, + apr_socket_t *sock); +typedef void (*apr_socket_set_inherit_fn_t) (apr_socket_t *sock); +typedef void (*apr_socket_unset_inherit_fn_t) (apr_socket_t *sock); +#if APR_HAS_SO_ACCEPTFILTER +typedef apr_status_t (*apr_socket_accept_filter_fn_t) (apr_socket_t *sock, char *name, + char *args); +#endif + + +struct apr_socket_iol_t +{ + struct apr_socket_iol_t *next; + const char *name; + apr_shutdown_fn_t iol_socket_shutdown; + apr_socket_close_fn_t iol_socket_close; + apr_bind_fn_t iol_socket_bind; + apr_listen_fn_t iol_socket_listen; + apr_accept_fn_t iol_socket_accept; + apr_connect_fn_t iol_socket_connect; + apr_socket_data_get_fn_t iol_socket_data_get; + apr_socket_data_set_fn_t iol_socket_data_set; + apr_send_fn_t iol_socket_send; + apr_sendv_fn_t iol_socket_sendv; + apr_sendto_fn_t iol_socket_sendto; + apr_recvfrom_fn_t iol_socket_recvfrom; +#if APR_HAS_SENDFILE + apr_sendfile_fn_t iol_socket_sendfile; +#endif /* APR_HAS_SENDFILE */ + apr_recv_fn_t iol_socket_recv; + apr_setsocketopt_fn_t iol_socket_setsocketopt; + apr_getsocketopt_fn_t iol_socket_getsocketopt; + apr_socket_opt_set_fn_t iol_socket_opt_set; + apr_socket_opt_get_fn_t iol_socket_opt_get; + apr_socket_timeout_set_fn_t iol_socket_timeout_set; + apr_socket_timeout_get_fn_t iol_socket_timeout_get; + apr_socket_addr_get_fn_t iol_socket_addr_get; + apr_socket_set_inherit_fn_t iol_socket_set_inherit; + apr_socket_unset_inherit_fn_t iol_socket_unset_inherit; +#if APR_HAS_SO_ACCEPTFILTER + apr_socket_accept_filter_fn_t iol_socket_accept_filter; +#endif +}; #ifdef __cplusplus } #endif Index: srclib/apr/include/arch/unix/apr_arch_networkio.h =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/include/arch/unix/apr_arch_networkio.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/include/arch/unix/apr_arch_networkio.h 21 Jan 2003 14:45:20 -0000 1.1.1.1 +++ srclib/apr/include/arch/unix/apr_arch_networkio.h 29 Jan 2003 17:24:56 -0000 1.2 @@ -55,6 +55,8 @@ #ifndef NETWORK_IO_H #define NETWORK_IO_H +#define APR_DEBUG_NET /* IBM: save input data for problem diagnosis */ + #include "apr.h" #include "apr_private.h" #include "apr_network_io.h" @@ -122,6 +124,15 @@ #define POLLNVAL 32 #endif +#ifdef APR_DEBUG_NET +struct apr_debug_net_buffer { + struct apr_debug_net_buffer *next; + apr_int32_t saved_len; + apr_int32_t actual_len; + char data[1]; /* actual data starts here */ +}; +#endif + struct apr_socket_t { apr_pool_t *cntxt; int socketdes; @@ -138,6 +149,12 @@ int remote_addr_unknown; apr_int32_t netmask; apr_int32_t inherit; +#ifdef APR_DEBUG_NET + struct apr_debug_net_buffer *head; + int num_saved_buffers; +#endif + /* IBM: added for socket IOLs */ + apr_socket_iol_t *iol; }; const char *apr_inet_ntop(int af, const void *src, char *dst, apr_size_t size); Index: srclib/apr/include/arch/win32/apr_arch_networkio.h =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/include/arch/win32/apr_arch_networkio.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/include/arch/win32/apr_arch_networkio.h 21 Jan 2003 14:45:20 -0000 1.1.1.1 +++ srclib/apr/include/arch/win32/apr_arch_networkio.h 29 Jan 2003 17:24:57 -0000 1.2 @@ -73,6 +73,7 @@ int remote_addr_unknown; apr_int32_t netmask; apr_int32_t inherit; + apr_socket_iol_t *iol; /* IBM: socket iols */ }; #ifdef _WIN32_WCE Index: srclib/apr/network_io/unix/Makefile.in =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/network_io/unix/Makefile.in,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/network_io/unix/Makefile.in 21 Jan 2003 14:45:20 -0000 1.1.1.1 +++ srclib/apr/network_io/unix/Makefile.in 29 Jan 2003 17:24:57 -0000 1.2 @@ -6,6 +6,7 @@ sockets.lo \ sockopt.lo \ sockaddr.lo \ + aprsockapi.lo \ inet_ntop.lo \ inet_pton.lo Index: srclib/apr/network_io/unix/sendrecv.c =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/network_io/unix/sendrecv.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/network_io/unix/sendrecv.c 21 Jan 2003 14:45:20 -0000 1.1.1.1 +++ srclib/apr/network_io/unix/sendrecv.c 29 Jan 2003 17:24:57 -0000 1.2 @@ -54,6 +54,12 @@ #include "apr_arch_networkio.h" #include "apr_support.h" +/* IBM add in socket IOLs */ +#include "../../include/arch/rename.h" + +#ifdef APR_DEBUG_NET +#include +#endif #if APR_HAS_SENDFILE /* This file is needed to allow us access to the apr_file_t internals. */ @@ -141,6 +147,20 @@ sock->netmask |= APR_INCOMPLETE_READ; } (*len) = rv; +#ifdef APR_DEBUG_NET + if (sock->num_saved_buffers < 20) + { + apr_size_t bytes_to_save = (*len > 1024) ? 1024 : *len; + struct apr_debug_net_buffer *new = apr_palloc(sock->cntxt, + offsetof(struct apr_debug_net_buffer, data) + bytes_to_save); + memcpy(new->data, buf, bytes_to_save); + new->saved_len = bytes_to_save; + new->actual_len = *len; + new->next = sock->head; + sock->head = new; + ++sock->num_saved_buffers; + } +#endif if (rv == 0) { return APR_EOF; } Index: srclib/apr/network_io/unix/sockaddr.c =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/network_io/unix/sockaddr.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/network_io/unix/sockaddr.c 21 Jan 2003 14:45:20 -0000 1.1.1.1 +++ srclib/apr/network_io/unix/sockaddr.c 29 Jan 2003 17:24:57 -0000 1.2 @@ -54,6 +54,9 @@ #include "apr_arch_networkio.h" #include "apr_strings.h" +/* IBM add in socket IOLs */ +#include "../../include/arch/rename.h" + #include "apr.h" #include "apr_lib.h" #include "apr_strings.h" Index: srclib/apr/network_io/unix/sockets.c =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/network_io/unix/sockets.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/network_io/unix/sockets.c 21 Jan 2003 14:45:20 -0000 1.1.1.1 +++ srclib/apr/network_io/unix/sockets.c 29 Jan 2003 17:24:57 -0000 1.2 @@ -57,6 +57,8 @@ #include "apr_support.h" #include "apr_portable.h" #include "apr_arch_inherit.h" +/* IBM add in socket IOLs */ +#include "../../include/arch/rename.h" #if defined(BEOS) && !defined(BEOS_BONE) #define close closesocket Index: srclib/apr/network_io/unix/sockopt.c =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/network_io/unix/sockopt.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/network_io/unix/sockopt.c 21 Jan 2003 14:45:20 -0000 1.1.1.1 +++ srclib/apr/network_io/unix/sockopt.c 29 Jan 2003 17:24:57 -0000 1.2 @@ -54,6 +54,8 @@ #include "apr_arch_networkio.h" #include "apr_strings.h" +/* IBM add in socket IOLs */ +#include "../../include/arch/rename.h" static apr_status_t soblock(int sd) { Index: srclib/apr/network_io/win32/sendrecv.c =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/network_io/win32/sendrecv.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/network_io/win32/sendrecv.c 21 Jan 2003 14:45:20 -0000 1.1.1.1 +++ srclib/apr/network_io/win32/sendrecv.c 29 Jan 2003 17:24:58 -0000 1.2 @@ -62,6 +62,9 @@ #include #endif +/* IBM add in socket IOLs */ +#include "../../include/arch/rename.h" + /* MAX_SEGMENT_SIZE is the maximum amount of data that will be sent to a client * in one call of TransmitFile. This number must be small enough to give the * slowest client time to receive the data before the socket timeout triggers. Index: srclib/apr/network_io/win32/sockets.c =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/network_io/win32/sockets.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/network_io/win32/sockets.c 21 Jan 2003 14:45:20 -0000 1.1.1.1 +++ srclib/apr/network_io/win32/sockets.c 29 Jan 2003 17:24:58 -0000 1.2 @@ -57,6 +57,8 @@ #include "apr_general.h" #include "apr_lib.h" #include "apr_portable.h" +/* IBM add in socket IOLs */ +#include "../../include/arch/rename.h" #include #include "apr_arch_inherit.h" #include "apr_arch_misc.h" @@ -172,6 +174,7 @@ (*new)->timeout = -1; (*new)->disconnected = 0; + (*new)->iol = NULL; apr_pool_cleanup_register((*new)->cntxt, (void *)(*new), socket_cleanup, apr_pool_cleanup_null); Index: srclib/apr/network_io/win32/sockopt.c =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/network_io/win32/sockopt.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/network_io/win32/sockopt.c 21 Jan 2003 14:45:20 -0000 1.1.1.1 +++ srclib/apr/network_io/win32/sockopt.c 29 Jan 2003 17:24:58 -0000 1.2 @@ -57,6 +57,8 @@ #include "apr_general.h" #include "apr_strings.h" #include +/* IBM add in socket IOLs */ +#include "../../include/arch/rename.h" apr_status_t soblock(SOCKET sd) { Index: srclib/apr/poll/unix/poll.c =================================================================== RCS file: /cvs/phoenix/2.0.44/srclib/apr/poll/unix/poll.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- srclib/apr/poll/unix/poll.c 21 Jan 2003 14:45:20 -0000 1.1.1.1 +++ srclib/apr/poll/unix/poll.c 29 Jan 2003 17:24:58 -0000 1.2 @@ -67,6 +67,8 @@ #if HAVE_ALLOCA_H #include #endif +/*IBM add in socket iols */ +#include "../../include/arch/rename.h" #ifdef NETWARE #define HAS_SOCKETS(dt) (dt == APR_POLL_SOCKET) ? 1 : 0 Index: srclib/apr/network_io/unix/aprsockapi.c =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2000-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . */ #include "apr_arch_networkio.h" #include "apr_network_io.h" #include "apr_portable.h" #include "apr_strings.h" #include "apr_arch_inherit.h" /* * This file contains the common entry point, on all OSes, into APR for * each apr_socket_* call */ /* Forward declarations for the native APR socket API. */ APR_DECLARE(apr_status_t) uapr_shutdown(apr_socket_t *sock, apr_shutdown_how_e how); APR_DECLARE(apr_status_t) uapr_socket_shutdown(apr_socket_t *sock, apr_shutdown_how_e how); APR_DECLARE(apr_status_t) uapr_socket_close(apr_socket_t *sock); APR_DECLARE(apr_status_t) uapr_bind(apr_socket_t *sock, apr_sockaddr_t *sa); APR_DECLARE(apr_status_t) uapr_socket_bind(apr_socket_t *sock, apr_sockaddr_t *sa); APR_DECLARE(apr_status_t) uapr_listen(apr_socket_t *sock, apr_int32_t backlog); APR_DECLARE(apr_status_t) uapr_socket_listen(apr_socket_t *sock, apr_int32_t backlog); APR_DECLARE(apr_status_t) uapr_accept(apr_socket_t **new_sock, apr_socket_t *sock, apr_pool_t *p); APR_DECLARE(apr_status_t) uapr_socket_accept(apr_socket_t **new_sock, apr_socket_t *sock, apr_pool_t *p); APR_DECLARE(apr_status_t) uapr_connect(apr_socket_t *sock, apr_sockaddr_t *sa); APR_DECLARE(apr_status_t) uapr_socket_connect(apr_socket_t *sock, apr_sockaddr_t *sa); APR_DECLARE(apr_status_t) uapr_socket_data_get(void **data, const char *key, apr_socket_t *sock); APR_DECLARE(apr_status_t) uapr_socket_data_set(apr_socket_t *sock, void *data, const char *key, apr_status_t (*cleanup)(void*)); APR_DECLARE(apr_status_t) uapr_send(apr_socket_t *sock, const char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_socket_send(apr_socket_t *sock, const char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_sendv(apr_socket_t *sock, const struct iovec *vec, apr_int32_t nvec, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_socket_sendv(apr_socket_t *sock, const struct iovec *vec, apr_int32_t nvec, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_sendto(apr_socket_t *sock, apr_sockaddr_t *where, apr_int32_t flags, const char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_socket_sendto(apr_socket_t *sock, apr_sockaddr_t *where, apr_int32_t flags, const char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, apr_int32_t flags, char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, apr_int32_t flags, char *buf, apr_size_t *len); #if APR_HAS_SENDFILE APR_DECLARE(apr_status_t) uapr_sendfile(apr_socket_t *sock, apr_file_t *file, apr_hdtr_t *hdtr, apr_off_t *offset, apr_size_t *len, apr_int32_t flags); APR_DECLARE(apr_status_t) uapr_socket_sendfile(apr_socket_t *sock, apr_file_t *file, apr_hdtr_t *hdtr, apr_off_t *offset, apr_size_t *len, apr_int32_t flags); #endif /* APR_HAS_SENDFILE */ APR_DECLARE(apr_status_t) uapr_recv(apr_socket_t *sock, char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_socket_recv(apr_socket_t *sock, char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_setsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on); APR_DECLARE(apr_status_t) uapr_getsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on); APR_DECLARE(apr_status_t) uapr_socket_opt_set(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on); APR_DECLARE(apr_status_t) uapr_socket_opt_get(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on); APR_DECLARE(apr_status_t) uapr_socket_timeout_set(apr_socket_t *sock, apr_interval_time_t t); APR_DECLARE(apr_status_t) uapr_socket_timeout_get(apr_socket_t *sock, apr_interval_time_t *t); APR_DECLARE(apr_status_t) uapr_socket_addr_get(apr_sockaddr_t **sa, apr_interface_e which, apr_socket_t *sock); #if APR_HAS_SO_ACCEPTFILTER APR_DECLARE(apr_status_t) uapr_socket_accept_filter(apr_socket_t *sock, char *name, char *args); #endif void socket_set_inherit(apr_socket_t *sock); void socket_unset_inherit(apr_socket_t *sock); /* The APR IOL (rarely used) can't reference the uapr_ routines directly * because those routines have external API linkage. These shims are * referenced from the APR IOL. */ static apr_status_t call_shutdown(apr_socket_t *sock, apr_shutdown_how_e how) { return uapr_socket_shutdown(sock, how); } static apr_status_t call_socket_close(apr_socket_t *sock) { return uapr_socket_close(sock); } static apr_status_t call_bind(apr_socket_t *sock, apr_sockaddr_t *sa) { return uapr_socket_bind(sock, sa); } static apr_status_t call_listen(apr_socket_t *sock, apr_int32_t backlog) { return uapr_socket_listen(sock, backlog); } static apr_status_t call_accept(apr_socket_t **new_sock, apr_socket_t *sock, apr_pool_t *p) { return uapr_socket_accept(new_sock, sock, p); } static apr_status_t call_connect(apr_socket_t *sock, apr_sockaddr_t *sa) { return uapr_socket_connect(sock, sa); } static apr_status_t call_socket_data_get(void **data, const char *key, apr_socket_t *sock) { return uapr_socket_data_get(data, key, sock); } static apr_status_t call_socket_data_set(apr_socket_t *sock, void *data, const char *key, apr_status_t (*cleanup)(void *)) { return uapr_socket_data_set(sock, data, key, cleanup); } static apr_status_t call_send(apr_socket_t *sock, const char *buf, apr_size_t *len) { return uapr_socket_send(sock, buf, len); } static apr_status_t call_sendv(apr_socket_t *sock, const struct iovec *vec, apr_int32_t nvec, apr_size_t *len) { return uapr_socket_sendv(sock, vec, nvec, len); } static apr_status_t call_sendto(apr_socket_t *sock, apr_sockaddr_t *where, apr_int32_t flags, const char *buf, apr_size_t *len) { return uapr_socket_sendto(sock, where, flags, buf, len); } static apr_status_t call_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, apr_int32_t flags, char *buf, apr_size_t *len) { return uapr_socket_recvfrom(from, sock, flags, buf, len); } #if APR_HAS_SENDFILE static apr_status_t call_sendfile(apr_socket_t *sock, apr_file_t *file, apr_hdtr_t *hdtr, apr_off_t *offset, apr_size_t *len, apr_int32_t flags) { return uapr_socket_sendfile(sock, file, hdtr, offset, len, flags); } #endif static apr_status_t call_recv(apr_socket_t *sock, char *buf, apr_size_t *len) { return uapr_socket_recv(sock, buf, len); } /* Do we really need call_set/getsocketopt? */ static apr_status_t call_setsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on) { return uapr_setsocketopt(sock, opt, on); } static apr_status_t call_getsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on) { return uapr_getsocketopt(sock, opt, on); } static apr_status_t call_socket_opt_set(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on) { return uapr_socket_opt_set(sock, opt, on); } static apr_status_t call_socket_opt_get(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on) { return uapr_socket_opt_get(sock, opt, on); } static apr_status_t call_socket_timeout_set(apr_socket_t *sock, apr_interval_time_t t) { return uapr_socket_timeout_set(sock, t); } static apr_status_t call_socket_timeout_get(apr_socket_t *sock, apr_interval_time_t *t) { return uapr_socket_timeout_get(sock, t); } static apr_status_t call_socket_addr_get(apr_sockaddr_t **sa, apr_interface_e which, apr_socket_t *sock) { return uapr_socket_addr_get(sa, which, sock); } static const apr_socket_iol_t apr_iol = { 0, "APR", call_shutdown, call_socket_close, call_bind, call_listen, call_accept, call_connect, call_socket_data_get, call_socket_data_set, call_send, call_sendv, call_sendto, call_recvfrom, #if APR_HAS_SENDFILE call_sendfile, #endif call_recv, call_setsocketopt, call_getsocketopt, call_socket_opt_set, call_socket_opt_get, call_socket_timeout_set, call_socket_timeout_get, call_socket_addr_get, 0, /* what about this??? there is no uapr_socket_set_inherit, */ 0, /* what about this??? there is no uapr_socket_unset_inherit */ #if APR_HAS_SO_ACCEPTFILTER ,call_socket_accept_filter #endif }; /* * APR network API */ APR_DECLARE(apr_status_t) apr_shutdown(apr_socket_t *sock, apr_shutdown_how_e how) { if (!sock->iol || !sock->iol->iol_socket_shutdown) { return uapr_socket_shutdown(sock, how); } return sock->iol->iol_socket_shutdown(sock, how); } APR_DECLARE(apr_status_t) apr_socket_shutdown(apr_socket_t *sock, apr_shutdown_how_e how) { if (!sock->iol || !sock->iol->iol_socket_shutdown) { return uapr_socket_shutdown(sock, how); } return sock->iol->iol_socket_shutdown(sock, how); } APR_DECLARE(apr_status_t) apr_socket_close(apr_socket_t *sock) { if (!sock->iol || !sock->iol->iol_socket_close) { return uapr_socket_close(sock); } return sock->iol->iol_socket_close(sock); } APR_DECLARE(apr_status_t) apr_bind(apr_socket_t *sock, apr_sockaddr_t *sa) { if (!sock->iol || !sock->iol->iol_socket_bind) { return uapr_socket_bind(sock, sa); } return sock->iol->iol_socket_bind(sock, sa); } APR_DECLARE(apr_status_t) apr_socket_bind(apr_socket_t *sock, apr_sockaddr_t *sa) { if (!sock->iol || !sock->iol->iol_socket_bind) { return uapr_socket_bind(sock, sa); } return sock->iol->iol_socket_bind(sock, sa); } APR_DECLARE(apr_status_t) apr_listen(apr_socket_t *sock, apr_int32_t backlog) { if (!sock->iol || !sock->iol->iol_socket_listen) { return uapr_socket_listen(sock, backlog); } return sock->iol->iol_socket_listen(sock, backlog); } APR_DECLARE(apr_status_t) apr_socket_listen(apr_socket_t *sock, apr_int32_t backlog) { if (!sock->iol || !sock->iol->iol_socket_listen) { return uapr_socket_listen(sock, backlog); } return sock->iol->iol_socket_listen(sock, backlog); } APR_DECLARE(apr_status_t) apr_accept(apr_socket_t **new_sock, apr_socket_t *sock, apr_pool_t *p) { if (!sock->iol || !sock->iol->iol_socket_accept) { return uapr_socket_accept(new_sock, sock, p); } return sock->iol->iol_socket_accept(new_sock, sock, p); } APR_DECLARE(apr_status_t) apr_socket_accept(apr_socket_t **new_sock, apr_socket_t *sock, apr_pool_t *p) { if (!sock->iol || !sock->iol->iol_socket_accept) { return uapr_socket_accept(new_sock, sock, p); } return sock->iol->iol_socket_accept(new_sock, sock, p); } APR_DECLARE(apr_status_t) apr_connect(apr_socket_t *sock, apr_sockaddr_t *sa) { if (!sock->iol || !sock->iol->iol_socket_connect) { return uapr_socket_connect(sock, sa); } return sock->iol->iol_socket_connect(sock, sa); } APR_DECLARE(apr_status_t) apr_socket_connect(apr_socket_t *sock, apr_sockaddr_t *sa) { if (!sock->iol || !sock->iol->iol_socket_connect) { return uapr_socket_connect(sock, sa); } return sock->iol->iol_socket_connect(sock, sa); } APR_DECLARE(apr_status_t) apr_socket_data_get(void **data, const char *key, apr_socket_t *sock) { if (!sock->iol || !sock->iol->iol_socket_data_get) { return uapr_socket_data_get(data, key, sock); } return sock->iol->iol_socket_data_get(data, key, sock); } APR_DECLARE(apr_status_t) apr_socket_data_set(apr_socket_t *sock, void *data, const char *key, apr_status_t (*cleanup)(void*)) { if (!sock->iol || !sock->iol->iol_socket_data_set) { return uapr_socket_data_set(sock, data, key, cleanup); } return sock->iol->iol_socket_data_set(sock, data, key, cleanup); } APR_DECLARE(apr_status_t) apr_send(apr_socket_t *sock, const char *buf, apr_size_t *len) { if (!sock->iol || !sock->iol->iol_socket_send) { return uapr_socket_send(sock, buf, len); } return sock->iol->iol_socket_send(sock, buf, len); } APR_DECLARE(apr_status_t) apr_socket_send(apr_socket_t *sock, const char *buf, apr_size_t *len) { if (!sock->iol || !sock->iol->iol_socket_send) { return uapr_socket_send(sock, buf, len); } return sock->iol->iol_socket_send(sock, buf, len); } APR_DECLARE(apr_status_t) apr_sendv(apr_socket_t *sock, const struct iovec *vec, apr_int32_t nvec, apr_size_t *len) { if (!sock->iol || !sock->iol->iol_socket_sendv) { return uapr_socket_sendv(sock, vec, nvec, len); } return sock->iol->iol_socket_sendv(sock, vec, nvec, len); } APR_DECLARE(apr_status_t) apr_socket_sendv(apr_socket_t *sock, const struct iovec *vec, apr_int32_t nvec, apr_size_t *len) { if (!sock->iol || !sock->iol->iol_socket_sendv) { return uapr_socket_sendv(sock, vec, nvec, len); } return sock->iol->iol_socket_sendv(sock, vec, nvec, len); } APR_DECLARE(apr_status_t) apr_sendto(apr_socket_t *sock, apr_sockaddr_t *where, apr_int32_t flags, const char *buf, apr_size_t *len) { if (!sock->iol || !sock->iol->iol_socket_sendto) { return uapr_socket_sendto(sock, where, flags, buf, len); } return sock->iol->iol_socket_sendto(sock, where, flags, buf, len); } APR_DECLARE(apr_status_t) apr_socket_sendto(apr_socket_t *sock, apr_sockaddr_t *where, apr_int32_t flags, const char *buf, apr_size_t *len) { if (!sock->iol || !sock->iol->iol_socket_sendto) { return uapr_socket_sendto(sock, where, flags, buf, len); } return sock->iol->iol_socket_sendto(sock, where, flags, buf, len); } APR_DECLARE(apr_status_t) apr_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, apr_int32_t flags, char *buf, apr_size_t *len) { if (!sock->iol || !sock->iol->iol_socket_recvfrom) { return uapr_socket_recvfrom(from, sock, flags, buf, len); } return sock->iol->iol_socket_recvfrom(from, sock, flags, buf, len); } APR_DECLARE(apr_status_t) apr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, apr_int32_t flags, char *buf, apr_size_t *len) { if (!sock->iol || !sock->iol->iol_socket_recvfrom) { return uapr_socket_recvfrom(from, sock, flags, buf, len); } return sock->iol->iol_socket_recvfrom(from, sock, flags, buf, len); } #if APR_HAS_SENDFILE APR_DECLARE(apr_status_t) apr_sendfile(apr_socket_t *sock, apr_file_t *file, apr_hdtr_t *hdtr, apr_off_t *offset, apr_size_t *len, apr_int32_t flags) { if (!sock->iol || !sock->iol->iol_socket_sendfile) { return uapr_socket_sendfile(sock, file, hdtr, offset, len, flags); } return sock->iol->iol_socket_sendfile(sock, file, hdtr, offset, len, flags); } APR_DECLARE(apr_status_t) apr_socket_sendfile(apr_socket_t *sock, apr_file_t *file, apr_hdtr_t *hdtr, apr_off_t *offset, apr_size_t *len, apr_int32_t flags) { if (!sock->iol || !sock->iol->iol_socket_sendfile) { return uapr_socket_sendfile(sock, file, hdtr, offset, len, flags); } return sock->iol->iol_socket_sendfile(sock, file, hdtr, offset, len, flags); } #endif /* APR_HAS_SENDFILE */ APR_DECLARE(apr_status_t) apr_recv(apr_socket_t *sock, char *buf, apr_size_t *len) { if (!sock->iol || !sock->iol->iol_socket_recv) { return uapr_socket_recv(sock, buf, len); } return sock->iol->iol_socket_recv(sock, buf, len); } APR_DECLARE(apr_status_t) apr_socket_recv(apr_socket_t *sock, char *buf, apr_size_t *len) { if (!sock->iol || !sock->iol->iol_socket_recv) { return uapr_socket_recv(sock, buf, len); } return sock->iol->iol_socket_recv(sock, buf, len); } APR_DECLARE(apr_status_t) apr_setsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on) { if (!sock->iol || !sock->iol->iol_socket_setsocketopt) { return uapr_setsocketopt(sock, opt, on); } return sock->iol->iol_socket_setsocketopt(sock, opt, on); } APR_DECLARE(apr_status_t) apr_getsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on) { if (!sock->iol || !sock->iol->iol_socket_getsocketopt) { return uapr_getsocketopt(sock, opt, on); } return sock->iol->iol_socket_getsocketopt(sock, opt, on); } APR_DECLARE(apr_status_t) apr_socket_opt_set(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on) { if (!sock->iol || !sock->iol->iol_socket_opt_set) { return uapr_socket_opt_set(sock, opt, on); } return sock->iol->iol_socket_opt_set(sock, opt, on); } APR_DECLARE(apr_status_t) apr_socket_opt_get(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on) { if (!sock->iol || !sock->iol->iol_socket_opt_get) { return uapr_socket_opt_get(sock, opt, on); } return sock->iol->iol_socket_opt_get(sock, opt, on); } APR_DECLARE(apr_status_t) apr_socket_timeout_set(apr_socket_t *sock, apr_interval_time_t t) { if (!sock->iol || !sock->iol->iol_socket_timeout_set) { return uapr_socket_timeout_set(sock, t); } return sock->iol->iol_socket_timeout_set(sock, t); } APR_DECLARE(apr_status_t) apr_socket_timeout_get(apr_socket_t *sock, apr_interval_time_t *t) { if (!sock->iol || !sock->iol->iol_socket_timeout_get) { return uapr_socket_timeout_get(sock, t); } return sock->iol->iol_socket_timeout_get(sock, t); } /* XXX: Do we really need this function to be iol'ized */ APR_DECLARE(apr_status_t) apr_socket_addr_get(apr_sockaddr_t **sa, apr_interface_e which, apr_socket_t *sock) { if (!sock->iol || !sock->iol->iol_socket_addr_get) { return uapr_socket_addr_get(sa, which, sock); } return sock->iol->iol_socket_addr_get(sa, which, sock); } #if APR_HAS_SO_ACCEPTFILTER APR_DECLARE(apr_status_t) apr_socket_accept_filter(apr_socket_t *sock, char *name, char *args) { if (!sock->iol || !sock->iol->iol_socket_accept_filter) { return uapr_socket_accept_filter(sock, name, args); } return sock->iol->iol_socket_accept_filter(sock, name, args); } #endif APR_DECLARE(apr_status_t) apr_socket_iol_push(apr_socket_iol_t **newiol, apr_socket_t *sock, apr_socket_iol_t *iol, const char *name) { apr_pool_t *p = sock->cntxt; if (!sock->iol) { /* didn't need this before this call because there were no iols... * also, it keeps the patch smaller to initialize it here :) */ sock->iol = (apr_socket_iol_t *)&apr_iol; } *newiol = apr_palloc(p, sizeof(*iol)); memcpy(*newiol, iol, sizeof(*iol)); (*newiol)->name = apr_pstrdup(p, name); (*newiol)->next = sock->iol; /* last one to push gets called first */ sock->iol = *newiol; return APR_SUCCESS; } Index: srclib/apr/include/arch/rename.h =================================================================== #define apr_shutdown uapr_shutdown #define apr_socket_shutdown uapr_socket_shutdown #define apr_socket_close uapr_socket_close #define apr_bind uapr_bind #define apr_socket_bind uapr_socket_bind #define apr_listen uapr_listen #define apr_socket_listen uapr_socket_listen #define apr_accept uapr_accept #define apr_socket_accept uapr_socket_accept #define apr_connect uapr_connect #define apr_socket_connect uapr_socket_connect #define apr_socket_data_get uapr_socket_data_get #define apr_socket_data_set uapr_socket_data_set #define apr_send uapr_send #define apr_socket_send uapr_socket_send #define apr_sendv uapr_sendv #define apr_socket_sendv uapr_socket_sendv #define apr_sendto uapr_sendto #define apr_socket_sendto uapr_socket_sendto #define apr_recvfrom uapr_recvfrom #define apr_socket_recvfrom uapr_socket_recvfrom #define apr_sendfile uapr_sendfile #define apr_socket_sendfile uapr_socket_sendfile #define apr_recv uapr_recv #define apr_socket_recv uapr_socket_recv #define apr_setsocketopt uapr_setsocketopt #define apr_getsocketopt uapr_getsocketopt #define apr_socket_opt_set uapr_socket_opt_set #define apr_socket_opt_get uapr_socket_opt_get #define apr_socket_timeout_set uapr_socket_timeout_set #define apr_socket_timeout_get uapr_socket_timeout_get #define apr_socket_addr_get uapr_socket_addr_get #define apr_socket_accept_filter uapr_socket_accept_filter #define apr_socket_iol_push uapr_socket_iol_push APR_DECLARE(apr_status_t) uapr_shutdown(apr_socket_t *thesocket, apr_shutdown_how_e how); APR_DECLARE(apr_status_t) uapr_socket_shutdown(apr_socket_t *thesocket, apr_shutdown_how_e how); APR_DECLARE(apr_status_t) uapr_socket_close(apr_socket_t *thesocket); APR_DECLARE(apr_status_t) uapr_bind(apr_socket_t *sock, apr_sockaddr_t *sa); APR_DECLARE(apr_status_t) uapr_socket_bind(apr_socket_t *sock, apr_sockaddr_t *sa); APR_DECLARE(apr_status_t) uapr_listen(apr_socket_t *sock, apr_int32_t backlog); APR_DECLARE(apr_status_t) uapr_socket_listen(apr_socket_t *sock, apr_int32_t backlog); APR_DECLARE(apr_status_t) uapr_accept(apr_socket_t **new_sock, apr_socket_t *sock, apr_pool_t *connection_pool); APR_DECLARE(apr_status_t) uapr_socket_accept(apr_socket_t **new_sock, apr_socket_t *sock, apr_pool_t *connection_pool); APR_DECLARE(apr_status_t) uapr_connect(apr_socket_t *sock, apr_sockaddr_t *sa); APR_DECLARE(apr_status_t) uapr_socket_connect(apr_socket_t *sock, apr_sockaddr_t *sa); APR_DECLARE(apr_status_t) uapr_socket_data_get(void **data, const char *key, apr_socket_t *sock); APR_DECLARE(apr_status_t) uapr_socket_data_set(apr_socket_t *sock, void *data, const char *key, apr_status_t (*cleanup)(void*)); APR_DECLARE(apr_status_t) uapr_send(apr_socket_t *sock, const char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_socket_send(apr_socket_t *sock, const char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_sendv(apr_socket_t *sock, const struct iovec *vec, apr_int32_t nvec, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_socket_sendv(apr_socket_t *sock, const struct iovec *vec, apr_int32_t nvec, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_sendto(apr_socket_t *sock, apr_sockaddr_t *where, apr_int32_t flags, const char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_socket_sendto(apr_socket_t *sock, apr_sockaddr_t *where, apr_int32_t flags, const char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, apr_int32_t flags, char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, apr_int32_t flags, char *buf, apr_size_t *len); #if APR_HAS_SENDFILE APR_DECLARE(apr_status_t) uapr_sendfile(apr_socket_t *sock, apr_file_t *file, apr_hdtr_t *hdtr, apr_off_t *offset, apr_size_t *len, apr_int32_t flags); APR_DECLARE(apr_status_t) uapr_socket_sendfile(apr_socket_t *sock, apr_file_t *file, apr_hdtr_t *hdtr, apr_off_t *offset, apr_size_t *len, apr_int32_t flags); #endif APR_DECLARE(apr_status_t) uapr_recv(apr_socket_t *sock, char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_socket_recv(apr_socket_t *sock, char *buf, apr_size_t *len); APR_DECLARE(apr_status_t) uapr_setsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on); APR_DECLARE(apr_status_t) uapr_getsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on); APR_DECLARE(apr_status_t) uapr_socket_opt_set(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on); APR_DECLARE(apr_status_t) uapr_socket_opt_get(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on); APR_DECLARE(apr_status_t) uapr_socket_timeout_set(apr_socket_t *sock, apr_interval_time_t t); APR_DECLARE(apr_status_t) uapr_socket_timeout_get(apr_socket_t *sock, apr_interval_time_t *t); APR_DECLARE(apr_status_t) uapr_socket_addr_get(apr_sockaddr_t **sa, apr_interface_e which, apr_socket_t *sock);