manoj       99/10/08 14:28:48

  Modified:    src/lib/apr/network_io/beos networkio.h sockets.c sockopt.c
               src/lib/apr/network_io/os2 networkio.h sockets.c sockopt.c
               src/lib/apr/network_io/unix sockopt.c
               src/lib/apr/network_io/win32 networkio.h sockets.c sockopt.c
  Log:
  Get rid of the per-connection name lookup on non-Unix platforms. This
  also adds an attempt at correct error handling for gethostbyaddr() for
  all platforms. Non-Unix maintainers should check to make sure this is
  done right.
  
  Revision  Changes    Path
  1.3       +0 -1      apache-2.0/src/lib/apr/network_io/beos/networkio.h
  
  Index: networkio.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/beos/networkio.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -d -u -r1.2 -r1.3
  --- networkio.h       1999/10/02 23:11:36     1.2
  +++ networkio.h       1999/10/08 21:27:37     1.3
  @@ -71,7 +71,6 @@
   struct socket_t {
       ap_context_t *cntxt;
       int socketdes;
  -    char *remote_hostname;
       struct sockaddr_in * addr;
       int addr_len;
       int timeout;
  
  
  
  1.6       +0 -10     apache-2.0/src/lib/apr/network_io/beos/sockets.c
  
  Index: sockets.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/beos/sockets.c,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -d -u -r1.5 -r1.6
  --- sockets.c 1999/10/08 20:04:15     1.5
  +++ sockets.c 1999/10/08 21:27:39     1.6
  @@ -90,7 +90,6 @@
       }
       
       (*new)->socketdes = socket(AF_INET ,SOCK_STREAM, 0);
  -     (*new)->remote_hostname=NULL;
        (*new)->addr->sin_family = AF_INET; 
       (*new)->addr_len = sizeof(*(*new)->addr);
        memset(&(*new)->addr->sin_zero, 0, sizeof((*new)->addr->sin_zero));
  @@ -172,8 +171,6 @@
   
   ap_status_t ap_accept(struct socket_t **new, const struct socket_t *sock) 
   { 
  -     struct hostent *hptr;
  -     
        (*new) = (struct socket_t *)ap_palloc(sock->cntxt,
                                sizeof(ap_socket_t)); 
   
  @@ -189,12 +186,6 @@
                return errno;
        }
   
  -     hptr = gethostbyaddr((char*)&(*new)->addr->sin_addr, 
  -                         sizeof(struct in_addr), AF_INET);
  -     if (hptr != NULL){
  -             (*new)->remote_hostname = strdup(hptr->h_name);
  -     }
  -         
       ap_register_cleanup((*new)->cntxt, (void *)new, 
                           socket_cleanup, NULL);
       return APR_SUCCESS;
  @@ -222,7 +213,6 @@
               return errno; 
       }
        
  -    sock->remote_hostname = strdup(hostname);
       return APR_SUCCESS; 
   } 
   
  
  
  
  1.4       +14 -4     apache-2.0/src/lib/apr/network_io/beos/sockopt.c
  
  Index: sockopt.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/beos/sockopt.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -d -u -r1.3 -r1.4
  --- sockopt.c 1999/10/04 16:37:06     1.3
  +++ sockopt.c 1999/10/08 21:27:41     1.4
  @@ -58,6 +58,7 @@
   #include <sys/socket.h>
   #include <unistd.h>
   #include <fcntl.h>
  +#include <netdb.h>
   #include "networkio.h"
   #include "apr_network_io.h"
   #include "apr_general.h"
  @@ -102,9 +103,18 @@
   
   ap_status_t ap_get_remote_hostname(char **name, struct socket_t *sock)
   {
  -    (*name) = (char*)ap_pstrdup(sock->cntxt, sock->remote_hostname);
  -    if (*name) {
  -        return APR_SUCCESS;
  +    struct hostent *hptr;
  +    
  +    hptr = gethostbyaddr((char *)&(sock->addr->sin_addr), 
  +                         sizeof(struct in_addr), AF_INET);
  +    if (hptr != NULL) {
  +        *name = ap_pstrdup(sock->cntxt, hptr->h_name);
  +        if (*name) {
  +            return APR_SUCCESS;
  +        }
  +        return APR_ENOMEM;
       }
  -    return APR_ENOMEM;
  +
  +    /* XXX - Is this threadsafe? - manoj */
  +    return h_errno;
   }
  
  
  
  1.2       +0 -1      apache-2.0/src/lib/apr/network_io/os2/networkio.h
  
  Index: networkio.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/os2/networkio.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -d -u -r1.1 -r1.2
  --- networkio.h       1999/08/17 15:59:43     1.1
  +++ networkio.h       1999/10/08 21:27:52     1.2
  @@ -62,7 +62,6 @@
   struct socket_t {
       ap_context_t *cntxt;
       int socketdes;
  -    char *remote_hostname;
       struct sockaddr_in *addr;
       int addr_len;
   };
  
  
  
  1.3       +0 -10     apache-2.0/src/lib/apr/network_io/os2/sockets.c
  
  Index: sockets.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/os2/sockets.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -d -u -r1.2 -r1.3
  --- sockets.c 1999/10/04 16:37:09     1.2
  +++ sockets.c 1999/10/08 21:27:55     1.3
  @@ -92,7 +92,6 @@
       }
    
       (*new)->socketdes = socket(AF_INET ,SOCK_STREAM, IPPROTO_TCP);
  -    (*new)->remote_hostname = NULL;
   
       (*new)->addr->sin_family = AF_INET;
   
  @@ -147,8 +146,6 @@
   
   ap_status_t ap_accept(struct socket_t **new, const struct socket_t *sock)
   {
  -    struct hostent *hptr;
  -    
       (*new) = (struct socket_t *)ap_palloc(sock->cntxt, 
                               sizeof(struct socket_t));
   
  @@ -164,12 +161,6 @@
           return errno;
       }
       
  -    hptr = gethostbyaddr((char *)&(*new)->addr->sin_addr, 
  -                         sizeof(struct in_addr), AF_INET);
  -    if (hptr != NULL) {
  -        (*new)->remote_hostname = strdup(hptr->h_name);
  -    }
  -    
       ap_register_cleanup((*new)->cntxt, (void *)(*new), 
                           socket_cleanup, NULL);
       return APR_SUCCESS;
  @@ -202,7 +193,6 @@
           return errno;
       }
       else {
  -        sock->remote_hostname = strdup(hostname);
           return APR_SUCCESS;
       }
   }
  
  
  
  1.3       +13 -4     apache-2.0/src/lib/apr/network_io/os2/sockopt.c
  
  Index: sockopt.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/os2/sockopt.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -d -u -r1.2 -r1.3
  --- sockopt.c 1999/10/04 16:37:09     1.2
  +++ sockopt.c 1999/10/08 21:27:58     1.3
  @@ -64,6 +64,7 @@
   #include <netinet/in.h>
   #include <unistd.h>
   #include <fcntl.h>
  +#include <netdb.h>
   
   int soblock(int sd)
   {
  @@ -164,11 +165,19 @@
   
   ap_status_t ap_get_remote_hostname(char **name, struct socket_t *sock)
   {
  -    (*name) = ap_pstrdup(sock->cntxt, sock->remote_hostname);
  -    if (*name) {
  -        return APR_SUCCESS;
  +    struct hostent *hptr;
  +    
  +    hptr = gethostbyaddr((char *)&(sock->addr->sin_addr), 
  +                         sizeof(struct in_addr), AF_INET);
  +    if (hptr != NULL) {
  +        *name = ap_pstrdup(sock->cntxt, hptr->h_name);
  +        if (*name) {
  +            return APR_SUCCESS;
  +        }
  +        return APR_ENOMEM;
       }
  -    return APR_ENOMEM;
  +    /* XXX - Is this threadsafe? - manoj */
  +    return h_errno;
   }
   
   
  
  
  
  1.7       +2 -2      apache-2.0/src/lib/apr/network_io/unix/sockopt.c
  
  Index: sockopt.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/unix/sockopt.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -d -u -r1.6 -r1.7
  --- sockopt.c 1999/10/08 19:44:32     1.6
  +++ sockopt.c 1999/10/08 21:28:24     1.7
  @@ -64,7 +64,6 @@
   #include <netinet/in.h>
   #include <unistd.h>
   #include <fcntl.h>
  -#include <arpa/inet.h>
   #include <netdb.h>
   
   static ap_status_t soblock(int sd)
  @@ -215,7 +214,8 @@
           return APR_ENOMEM;
       }
   
  -    return errno;
  +    /* XXX - Is this threadsafe? */
  +    return h_errno;
   }
   
   
  
  
  
  1.3       +0 -1      apache-2.0/src/lib/apr/network_io/win32/networkio.h
  
  Index: networkio.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/win32/networkio.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -d -u -r1.2 -r1.3
  --- networkio.h       1999/09/22 17:30:34     1.2
  +++ networkio.h       1999/10/08 21:28:36     1.3
  @@ -62,7 +62,6 @@
   struct socket_t {
       ap_context_t *cntxt;
       SOCKET sock;
  -    char *remote_hostname;
       struct sockaddr_in *addr;
       size_t addr_len;
       int timeout;
  
  
  
  1.8       +0 -11     apache-2.0/src/lib/apr/network_io/win32/sockets.c
  
  Index: sockets.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/win32/sockets.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -d -u -r1.7 -r1.8
  --- sockets.c 1999/10/08 20:04:24     1.7
  +++ sockets.c 1999/10/08 21:28:38     1.8
  @@ -93,7 +93,6 @@
        * No flags to use when creating a socket, so use 0 for that parameter 
as well.
        */
       (*new)->sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  -    (*new)->remote_hostname = NULL;
   
       (*new)->addr->sin_family = AF_INET;
   
  @@ -189,9 +188,6 @@
   
   ap_status_t ap_accept(struct socket_t **new, const struct socket_t *sock)
   {
  -    struct hostent *hptr;
  -    
  -  
       (*new) = (struct socket_t *)ap_palloc(sock->cntxt, 
                               sizeof(struct socket_t));
   
  @@ -207,12 +203,6 @@
           return errno;
       }
       
  -    hptr = gethostbyaddr((char *)&(*new)->addr->sin_addr, 
  -                         sizeof(struct in_addr), AF_INET);
  -    if (hptr != NULL) {
  -        (*new)->remote_hostname = strdup(hptr->h_name);
  -    }
  -    
       ap_register_cleanup((*new)->cntxt, (void *)(*new), 
                           socket_cleanup, NULL);
       return APR_SUCCESS;
  @@ -248,7 +238,6 @@
   
       if (connect(sock->sock, (const struct sockaddr *)sock->addr, 
                   sock->addr_len) == 0) {
  -        sock->remote_hostname = strdup(hostname);
           return APR_SUCCESS;
       }
       else {
  
  
  
  1.3       +19 -4     apache-2.0/src/lib/apr/network_io/win32/sockopt.c
  
  Index: sockopt.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/win32/sockopt.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -d -u -r1.2 -r1.3
  --- sockopt.c 1999/10/04 16:37:16     1.2
  +++ sockopt.c 1999/10/08 21:28:41     1.3
  @@ -136,11 +136,26 @@
   
   ap_status_t ap_get_remote_hostname(char **name, struct socket_t *sock)
   {
  -    (*name) = ap_pstrdup(sock->cntxt, sock->remote_hostname);
  -    if (*name) {
  -        return APR_SUCCESS;
  +    struct hostent *hptr;
  +
  +    hptr = gethostbyaddr((char *)&(sock->addr->sin_addr),
  +                         sizeof(struct in_addr), AF_INET);
  +
  +    if (hptr != NULL) {
  +        *name = ap_pstrdup(sock->cntxt, hptr->h_name);
  +        if (*name) {
  +            return APR_SUCCESS;
  +        }
  +        return APR_ENOMEM;
       }
  -    return APR_ENOMEM;
  +
  +    /* XXX - I don't know what the correct way to deal with host resolution
  +     * errors on Windows is. WSAGetLastError() seems to use a different set 
of
  +     * error numbers than APR does. The previous code didn't deal with them 
at
  +     * all.  - manoj
  +     */
  +
  +    return h_errno;
   }
   
   
  
  
  

Reply via email to