You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by tr...@apache.org on 2002/10/18 14:04:00 UTC

cvs commit: apr/test server.c

trawick     2002/10/18 05:04:00

  Modified:    .        CHANGES
               include  apr_network_io.h apr_portable.h
               include/arch/os2 networkio.h
               include/arch/unix networkio.h
               include/arch/win32 networkio.h
               network_io/os2 sockets.c
               network_io/unix sockets.c
               network_io/win32 sockets.c
               test     server.c
  Log:
  Add apr_socket_create_ex() to allow protocol to be specified for the
  socket.  With APR 1.0, this function will be removed and apr_socket_create()
  will have the additional parameter.
  
  Submitted by:        Randall Stewart <ra...@stewart.chicago.il.us>
  Reviewed/mangled by: Jeff Trawick
  
  Revision  Changes    Path
  1.346     +5 -0      apr/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apr/CHANGES,v
  retrieving revision 1.345
  retrieving revision 1.346
  diff -u -r1.345 -r1.346
  --- CHANGES	16 Oct 2002 11:47:53 -0000	1.345
  +++ CHANGES	18 Oct 2002 12:03:59 -0000	1.346
  @@ -1,5 +1,10 @@
   Changes with APR 0.9.2
   
  +  *) Add apr_socket_create_ex() to allow protocol to be specified for the
  +     socket.  With APR 1.0, this function will be removed and apr_socket_create()
  +     will have the additional parameter.
  +     [Randall Stewart <ra...@stewart.chicago.il.us>]
  +
     *) Fix the detection of INT64_C() when defined in <stdint.h>.
        [Joe Orton <jo...@manyfish.co.uk>]
   
  
  
  
  1.130     +33 -0     apr/include/apr_network_io.h
  
  Index: apr_network_io.h
  ===================================================================
  RCS file: /home/cvs/apr/include/apr_network_io.h,v
  retrieving revision 1.129
  retrieving revision 1.130
  diff -u -r1.129 -r1.130
  --- apr_network_io.h	11 Oct 2002 20:41:23 -0000	1.129
  +++ apr_network_io.h	18 Oct 2002 12:03:59 -0000	1.130
  @@ -168,6 +168,16 @@
   #endif
   
   /**
  + * @defgroup IP_Proto IP Protocol Definitions for use when creating sockets
  + * @{
  + */
  +#define APR_PROTO_TCP       6
  +#define APR_PROTO_UDP      17
  +#define APR_PROTO_SCTP    132
  +/** @} */
  +
  +
  +/**
    * Enum to tell us if we're interested in remote or local socket
    */
   typedef enum {
  @@ -265,6 +275,7 @@
   
   /**
    * Create a socket.
  + * @remark With APR 1.0, this function will pick up a new protocol parameter.
    * @param new_sock The new socket that has been set up.
    * @param family The address family of the socket (e.g., APR_INET).
    * @param type The type of the socket (e.g., SOCK_STREAM).
  @@ -275,6 +286,20 @@
                                               apr_pool_t *cont);
   
   /**
  + * Create a socket.
  + * @remark With APR 1.0, this function will be removed.
  + * @param new_sock The new socket that has been set up.
  + * @param family The address family of the socket (e.g., APR_INET).
  + * @param type The type of the socket (e.g., SOCK_STREAM).
  + * @param protocol The protocol of the socket (e.g., APR_PROTO_TCP).
  + * @param cont The pool to use
  + */
  +APR_DECLARE(apr_status_t) apr_socket_create_ex(apr_socket_t **new_sock, 
  +                                               int family, int type,
  +                                               int protocol,
  +                                               apr_pool_t *cont);
  +
  +/**
    * Shutdown either reading, writing, or both sides of a socket.
    * @param thesocket The socket to close 
    * @param how How to shutdown the socket.  One of:
  @@ -728,6 +753,14 @@
   apr_status_t apr_socket_accept_filter(apr_socket_t *sock, char *name,
                                         char *args);
   #endif
  +
  +/**
  + * Return the protocol of the socket.
  + * @param sock The socket to query.
  + * @param protocol The returned protocol (e.g., APR_PROTO_TCP).
  + */
  +APR_DECLARE(apr_status_t) apr_socket_protocol_get(apr_socket_t *sock,
  +                                                  int *protocol);
   
   /**
    * Set a socket to be inherited by child processes.
  
  
  
  1.82      +6 -3      apr/include/apr_portable.h
  
  Index: apr_portable.h
  ===================================================================
  RCS file: /home/cvs/apr/include/apr_portable.h,v
  retrieving revision 1.81
  retrieving revision 1.82
  diff -u -r1.81 -r1.82
  --- apr_portable.h	3 Oct 2002 17:55:42 -0000	1.81
  +++ apr_portable.h	18 Oct 2002 12:03:59 -0000	1.82
  @@ -201,7 +201,7 @@
   #endif
   
   /**
  - * @typedef apr_os_sock_t
  + * @typedef apr_os_sock_info_t
    * @brief alias for local OS socket
    */
   /**
  @@ -212,8 +212,11 @@
       apr_os_sock_t *os_sock; /**< always required */
       struct sockaddr *local; /**< NULL if not yet bound */
       struct sockaddr *remote; /**< NULL if not connected */
  -    int family;             /**< always required (APR_INET, APR_INET6, etc. */
  -    int type;               /**< always required (SOCK_STREAM, SOCK_DGRAM, etc. */
  +    int family;             /**< always required (APR_INET, APR_INET6, etc.) */
  +    int type;               /**< always required (SOCK_STREAM, SOCK_DGRAM, etc.) */
  +#ifdef APR_ENABLE_FOR_1_0   /**< enable with APR 1.0 */
  +    int protocol;           /**< 0 or actual protocol (APR_PROTO_SCTP, APR_PROTO_TCP, etc.) */
  +#endif
   };
   
   typedef struct apr_os_sock_info_t apr_os_sock_info_t;
  
  
  
  1.27      +1 -0      apr/include/arch/os2/networkio.h
  
  Index: networkio.h
  ===================================================================
  RCS file: /home/cvs/apr/include/arch/os2/networkio.h,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- networkio.h	11 Jul 2002 06:28:40 -0000	1.26
  +++ networkio.h	18 Oct 2002 12:03:59 -0000	1.27
  @@ -67,6 +67,7 @@
       apr_pool_t *cntxt;
       int socketdes;
       int type;
  +    int protocol;
       apr_sockaddr_t *local_addr;
       apr_sockaddr_t *remote_addr;
       apr_interval_time_t timeout;
  
  
  
  1.55      +1 -0      apr/include/arch/unix/networkio.h
  
  Index: networkio.h
  ===================================================================
  RCS file: /home/cvs/apr/include/arch/unix/networkio.h,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- networkio.h	11 Jul 2002 05:19:44 -0000	1.54
  +++ networkio.h	18 Oct 2002 12:03:59 -0000	1.55
  @@ -120,6 +120,7 @@
       apr_pool_t *cntxt;
       int socketdes;
       int type;
  +    int protocol;
       apr_sockaddr_t *local_addr;
       apr_sockaddr_t *remote_addr;
       apr_interval_time_t timeout; 
  
  
  
  1.29      +1 -0      apr/include/arch/win32/networkio.h
  
  Index: networkio.h
  ===================================================================
  RCS file: /home/cvs/apr/include/arch/win32/networkio.h,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- networkio.h	15 Jul 2002 07:26:12 -0000	1.28
  +++ networkio.h	18 Oct 2002 12:03:59 -0000	1.29
  @@ -62,6 +62,7 @@
       apr_pool_t         *cntxt;
       SOCKET              socketdes;
       int                 type; /* SOCK_STREAM, SOCK_DGRAM */
  +    int                 protocol;
       apr_sockaddr_t     *local_addr;
       apr_sockaddr_t     *remote_addr;
       int                 timeout_ms; /* MUST MATCH if timeout > 0 */
  
  
  
  1.57      +26 -9     apr/network_io/os2/sockets.c
  
  Index: sockets.c
  ===================================================================
  RCS file: /home/cvs/apr/network_io/os2/sockets.c,v
  retrieving revision 1.56
  retrieving revision 1.57
  diff -u -r1.56 -r1.57
  --- sockets.c	30 Jul 2002 13:56:14 -0000	1.56
  +++ sockets.c	18 Oct 2002 12:03:59 -0000	1.57
  @@ -84,9 +84,10 @@
       }
   }
   
  -static void set_socket_vars(apr_socket_t *sock, int family, int type)
  +static void set_socket_vars(apr_socket_t *sock, int family, int type, int protocol)
   {
       sock->type = type;
  +    sock->protocol = protocol;
       apr_sockaddr_vars_set(sock->local_addr, family, 0);
       apr_sockaddr_vars_set(sock->remote_addr, family, 0);
   }
  @@ -103,8 +104,14 @@
       (*new)->remote_addr->pool = p;
   }
   
  -APR_DECLARE(apr_status_t) apr_socket_create(apr_socket_t **new, int family, int type,
  -                                            apr_pool_t *cont)
  +APR_DECLARE(apr_status_t) apr_socket_protocol_get(apr_socket_t *sock, int *protocol)
  +{
  +    *protocol = sock->protocol;
  +    return APR_SUCCESS;
  +}
  +
  +APR_DECLARE(apr_status_t) apr_socket_create_ex(apr_socket_t **new, int family, int type,
  +                                               int protocol, apr_pool_t *cont)
   {
       int downgrade = (family == AF_UNSPEC);
   
  @@ -118,18 +125,18 @@
   
       alloc_socket(new, cont);
   
  -    (*new)->socketdes = socket(family, type, 0);
  +    (*new)->socketdes = socket(family, type, protocol);
   #if APR_HAVE_IPV6
       if ((*new)->socketdes < 0 && downgrade) {
           family = AF_INET;
  -        (*new)->socketdes = socket(family, type, 0);
  +        (*new)->socketdes = socket(family, type, protocol);
       }
   #endif
   
       if ((*new)->socketdes < 0) {
           return APR_OS2_STATUS(sock_errno());
       }
  -    set_socket_vars(*new, family, type);
  +    set_socket_vars(*new, family, type, protocol);
   
       (*new)->timeout = -1;
       (*new)->nonblock = FALSE;
  @@ -138,6 +145,12 @@
       return APR_SUCCESS;
   } 
   
  +APR_DECLARE(apr_status_t) apr_socket_create(apr_socket_t **new, int family, int type,
  +                                            apr_pool_t *cont)
  +{
  +    return apr_socket_create_ex(new, family, type, 0, cont);
  +}
  +
   APR_DECLARE(apr_status_t) apr_shutdown(apr_socket_t *thesocket, apr_shutdown_how_e how)
   {
       if (shutdown(thesocket->socketdes, how) == 0) {
  @@ -177,7 +190,7 @@
   APR_DECLARE(apr_status_t) apr_accept(apr_socket_t **new, apr_socket_t *sock, apr_pool_t *connection_context)
   {
       alloc_socket(new, connection_context);
  -    set_socket_vars(*new, sock->local_addr->sa.sin.sin_family, SOCK_STREAM);
  +    set_socket_vars(*new, sock->local_addr->sa.sin.sin_family, SOCK_STREAM, sock->protocol);
   
       (*new)->timeout = -1;
       (*new)->nonblock = FALSE;
  @@ -246,7 +259,11 @@
                                              apr_pool_t *cont)
   {
       alloc_socket(apr_sock, cont);
  -    set_socket_vars(*apr_sock, os_sock_info->family, os_sock_info->type);
  +#ifdef APR_ENABLE_FOR_1_0 /* no protocol field yet */
  +    set_socket_vars(*apr_sock, os_sock_info->family, os_sock_info->type, 0);
  +#else
  +    set_socket_vars(*apr_sock, os_sock_info->family, os_sock_info->type, os_sock_info->protocol);
  +#endif
       (*apr_sock)->timeout = -1;
       (*apr_sock)->socketdes = *os_sock_info->os_sock;
       if (os_sock_info->local) {
  @@ -280,7 +297,7 @@
       }
       if ((*sock) == NULL) {
           alloc_socket(sock, cont);
  -        set_socket_vars(*sock, AF_INET, SOCK_STREAM);
  +        set_socket_vars(*sock, AF_INET, SOCK_STREAM, APR_PROTO_TCP);
           (*sock)->timeout = -1;
       }
   
  
  
  
  1.102     +26 -9     apr/network_io/unix/sockets.c
  
  Index: sockets.c
  ===================================================================
  RCS file: /home/cvs/apr/network_io/unix/sockets.c,v
  retrieving revision 1.101
  retrieving revision 1.102
  diff -u -r1.101 -r1.102
  --- sockets.c	30 Jul 2002 13:56:14 -0000	1.101
  +++ sockets.c	18 Oct 2002 12:03:59 -0000	1.102
  @@ -77,9 +77,10 @@
       }
   }
   
  -static void set_socket_vars(apr_socket_t *sock, int family, int type)
  +static void set_socket_vars(apr_socket_t *sock, int family, int type, int protocol)
   {
       sock->type = type;
  +    sock->protocol = protocol;
       apr_sockaddr_vars_set(sock->local_addr, family, 0);
       apr_sockaddr_vars_set(sock->remote_addr, family, 0);
       sock->netmask = 0;
  @@ -103,8 +104,14 @@
       (*new)->remote_addr->pool = p;
   }
   
  -apr_status_t apr_socket_create(apr_socket_t **new, int ofamily, int type,
  -                               apr_pool_t *cont)
  +apr_status_t apr_socket_protocol_get(apr_socket_t *sock, int *protocol)
  +{
  +    *protocol = sock->protocol;
  +    return APR_SUCCESS;
  +}
  +
  +apr_status_t apr_socket_create_ex(apr_socket_t **new, int ofamily, int type,
  +                                  int protocol, apr_pool_t *cont)
   {
       int family = ofamily;
   
  @@ -118,19 +125,19 @@
   
       alloc_socket(new, cont);
   
  -    (*new)->socketdes = socket(family, type, 0);
  +    (*new)->socketdes = socket(family, type, protocol);
   
   #if APR_HAVE_IPV6
       if ((*new)->socketdes < 0 && ofamily == APR_UNSPEC) {
           family = APR_INET;
  -        (*new)->socketdes = socket(family, type, 0);
  +        (*new)->socketdes = socket(family, type, protocol);
       }
   #endif
   
       if ((*new)->socketdes < 0) {
           return errno;
       }
  -    set_socket_vars(*new, family, type);
  +    set_socket_vars(*new, family, type, protocol);
   
       (*new)->timeout = -1;
       (*new)->inherit = 0;
  @@ -139,6 +146,12 @@
       return APR_SUCCESS;
   } 
   
  +apr_status_t apr_socket_create(apr_socket_t **new, int family, int type,
  +                               apr_pool_t *cont)
  +{
  +    return apr_socket_create_ex(new, family, type, 0, cont);
  +}
  +
   apr_status_t apr_shutdown(apr_socket_t *thesocket, apr_shutdown_how_e how)
   {
       return (shutdown(thesocket->socketdes, how) == -1) ? errno : APR_SUCCESS;
  @@ -176,7 +189,7 @@
   apr_status_t apr_accept(apr_socket_t **new, apr_socket_t *sock, apr_pool_t *connection_context)
   {
       alloc_socket(new, connection_context);
  -    set_socket_vars(*new, sock->local_addr->sa.sin.sin_family, SOCK_STREAM);
  +    set_socket_vars(*new, sock->local_addr->sa.sin.sin_family, SOCK_STREAM, sock->protocol);
   
   #ifndef HAVE_POLL
       (*new)->connected = 1;
  @@ -322,7 +335,11 @@
                                 apr_pool_t *cont)
   {
       alloc_socket(apr_sock, cont);
  -    set_socket_vars(*apr_sock, os_sock_info->family, os_sock_info->type);
  +#ifdef APR_ENABLE_FOR_1_0 /* no protocol field yet */
  +    set_socket_vars(*apr_sock, os_sock_info->family, os_sock_info->type, os_sock_info->protocol);
  +#else
  +    set_socket_vars(*apr_sock, os_sock_info->family, os_sock_info->type, 0);
  +#endif
       (*apr_sock)->timeout = -1;
       (*apr_sock)->socketdes = *os_sock_info->os_sock;
       if (os_sock_info->local) {
  @@ -360,7 +377,7 @@
           /* XXX IPv6 figure out the family here! */
           /* XXX figure out the actual socket type here */
           /* *or* just decide that apr_os_sock_put() has to be told the family and type */
  -        set_socket_vars(*sock, APR_INET, SOCK_STREAM);
  +        set_socket_vars(*sock, APR_INET, SOCK_STREAM, APR_PROTO_TCP);
           (*sock)->timeout = -1;
       }
       (*sock)->local_port_unknown = (*sock)->local_interface_unknown = 1;
  
  
  
  1.86      +29 -9     apr/network_io/win32/sockets.c
  
  Index: sockets.c
  ===================================================================
  RCS file: /home/cvs/apr/network_io/win32/sockets.c,v
  retrieving revision 1.85
  retrieving revision 1.86
  diff -u -r1.85 -r1.86
  --- sockets.c	30 Jul 2002 13:56:17 -0000	1.85
  +++ sockets.c	18 Oct 2002 12:04:00 -0000	1.86
  @@ -76,9 +76,10 @@
       return APR_SUCCESS;
   }
   
  -static void set_socket_vars(apr_socket_t *sock, int family, int type)
  +static void set_socket_vars(apr_socket_t *sock, int family, int type, int protocol)
   {
       sock->type = type;
  +    sock->protocol = protocol;
       apr_sockaddr_vars_set(sock->local_addr, family, 0);
       apr_sockaddr_vars_set(sock->remote_addr, family, 0);
   }                                                                                                  
  @@ -94,8 +95,16 @@
       (*new)->remote_addr->pool = p;
   }
   
  -APR_DECLARE(apr_status_t) apr_socket_create(apr_socket_t **new, int family,
  -                                            int type, apr_pool_t *cont)
  +APR_DECLARE(apr_status_t) apr_socket_protocol_get(apr_socket_t *sock,
  +                                                  int *protocol)
  +{
  +    *protocol = sock->protocol;
  +    return APR_SUCCESS;
  +}
  +
  +APR_DECLARE(apr_status_t) apr_socket_create_ex(apr_socket_t **new, int family,
  +                                               int type, int protocol, 
  +                                               apr_pool_t *cont)
   {
       int downgrade = (family == AF_UNSPEC);
   
  @@ -112,11 +121,11 @@
       /* For right now, we are not using socket groups.  We may later.
        * No flags to use when creating a socket, so use 0 for that parameter as well.
        */
  -    (*new)->socketdes = socket(family, type, 0);
  +    (*new)->socketdes = socket(family, type, protocol);
   #if APR_HAVE_IPV6
       if ((*new)->socketdes == INVALID_SOCKET && downgrade) {
           family = AF_INET;
  -        (*new)->socketdes = socket(family, type, 0);
  +        (*new)->socketdes = socket(family, type, protocol);
       }
   #endif
   
  @@ -159,7 +168,7 @@
   
   #endif /* def WIN32 */
   
  -    set_socket_vars(*new, family, type);
  +    set_socket_vars(*new, family, type, protocol);
   
       (*new)->timeout = -1;
       (*new)->disconnected = 0;
  @@ -170,6 +179,12 @@
       return APR_SUCCESS;
   } 
   
  +APR_DECLARE(apr_status_t) apr_socket_create(apr_socket_t **new, int family,
  +                                            int type, apr_pool_t *cont)
  +{
  +    return apr_socket_create_ex(new, family, type, protocol, cont);
  +}
  +
   APR_DECLARE(apr_status_t) apr_shutdown(apr_socket_t *thesocket,
                                          apr_shutdown_how_e how)
   {
  @@ -246,7 +261,8 @@
       }
   
       alloc_socket(new, p);
  -    set_socket_vars(*new, sock->local_addr->sa.sin.sin_family, SOCK_STREAM);
  +    set_socket_vars(*new, sock->local_addr->sa.sin.sin_family, SOCK_STREAM, 
  +                    sock->protocol);
   
       (*new)->timeout = -1;   
       (*new)->disconnected = 0;
  @@ -408,7 +424,11 @@
                                              apr_pool_t *cont)
   {
       alloc_socket(apr_sock, cont);
  -    set_socket_vars(*apr_sock, os_sock_info->family, os_sock_info->type);
  +#ifdef APR_ENABLE_FOR_1_0 /* no protocol field yet */
  +    set_socket_vars(*apr_sock, os_sock_info->family, os_sock_info->type, 0);
  +#else
  +    set_socket_vars(*apr_sock, os_sock_info->family, os_sock_info->type, os_sock_info->protocol);
  +#endif
       (*apr_sock)->timeout = -1;
       (*apr_sock)->disconnected = 0;
       (*apr_sock)->socketdes = *os_sock_info->os_sock;
  @@ -446,7 +466,7 @@
           alloc_socket(sock, cont);
           /* XXX figure out the actual socket type here */
           /* *or* just decide that apr_os_sock_put() has to be told the family and type */
  -        set_socket_vars(*sock, AF_INET, SOCK_STREAM);
  +        set_socket_vars(*sock, AF_INET, SOCK_STREAM, APR_PROTO_TCP);
           (*sock)->timeout = -1;
           (*sock)->disconnected = 0;
       }
  
  
  
  1.37      +8 -1      apr/test/server.c
  
  Index: server.c
  ===================================================================
  RCS file: /home/cvs/apr/test/server.c,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- server.c	15 Jul 2002 07:56:13 -0000	1.36
  +++ server.c	18 Oct 2002 12:04:00 -0000	1.37
  @@ -79,6 +79,7 @@
       apr_sockaddr_t *localsa = NULL, *remotesa;
       apr_status_t stat;
       int family = APR_UNSPEC;
  +    int protocol;
       apr_getopt_t *opt;
       const char *optarg;
       char optchar;
  @@ -113,7 +114,7 @@
       }
   
       APR_TEST_SUCCESS(rv, "Creating new socket", 
  -        apr_socket_create(&sock, family, SOCK_STREAM, context))
  +        apr_socket_create_ex(&sock, family, SOCK_STREAM, APR_PROTO_TCP, context))
   
       APR_TEST_SUCCESS(rv, "Setting option APR_SO_NONBLOCK",
           apr_socket_opt_set(sock, APR_SO_NONBLOCK, 1))
  @@ -153,6 +154,12 @@
       APR_TEST_SUCCESS(rv, "Accepting a connection",
           apr_accept(&sock2, sock, context))
   
  +    apr_socket_protocol_get(sock2, &protocol);
  +    if (protocol != APR_PROTO_TCP) {
  +        fprintf(stderr, "Error: protocol not conveyed from listening socket "
  +                "to connected socket!\n");
  +        exit(1);
  +    }
       apr_socket_addr_get(&remotesa, APR_REMOTE, sock2);
       apr_sockaddr_ip_get(&remote_ipaddr, remotesa);
       apr_sockaddr_port_get(&remote_port, remotesa);