hgomez 2003/07/24 01:17:10 Modified: jk/native/common jk_connect.h jk_ajp12_worker.c jk_ajp_common.c jk_connect.c Log: Make use of APR gethostbyname equivalent when APR is available. Remove AS/400 specific code and fix some short to int in port. We'll use integer everywhere and cast to short only in jk_resolve Revision Changes Path 1.4 +2 -2 jakarta-tomcat-connectors/jk/native/common/jk_connect.h Index: jk_connect.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_connect.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- jk_connect.h 25 Jun 2002 07:06:59 -0000 1.3 +++ jk_connect.h 24 Jul 2003 08:17:10 -0000 1.4 @@ -76,7 +76,7 @@ #endif /* __cplusplus */ int jk_resolve(char *host, - short port, + int port, struct sockaddr_in *rc); int jk_open_socket(struct sockaddr_in *addr, 1.11 +2 -2 jakarta-tomcat-connectors/jk/native/common/jk_ajp12_worker.c Index: jk_ajp12_worker.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp12_worker.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- jk_ajp12_worker.c 16 May 2003 00:36:18 -0000 1.10 +++ jk_ajp12_worker.c 24 Jul 2003 08:17:10 -0000 1.11 @@ -213,7 +213,7 @@ p->name, host, port); if(port > 1024 && host) { - if(jk_resolve(host, (short)port, &p->worker_inet_addr)) { + if(jk_resolve(host, port, &p->worker_inet_addr)) { return JK_TRUE; } jk_log(l, JK_LOG_ERROR, "In jk_worker_t::validate, resolve failed\n"); 1.38 +2 -2 jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.c Index: jk_ajp_common.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- jk_ajp_common.c 15 Jul 2003 12:15:17 -0000 1.37 +++ jk_ajp_common.c 24 Jul 2003 08:17:10 -0000 1.38 @@ -1366,7 +1366,7 @@ p->name, host, port); if(port > 1024 && host) { - if(jk_resolve(host, (short)port, &p->worker_inet_addr)) { + if(jk_resolve(host, port, &p->worker_inet_addr)) { return JK_TRUE; } jk_log(l, JK_LOG_ERROR, 1.9 +39 -19 jakarta-tomcat-connectors/jk/native/common/jk_connect.c Index: jk_connect.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_connect.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- jk_connect.c 17 Feb 2003 16:59:47 -0000 1.8 +++ jk_connect.c 24 Jul 2003 08:17:10 -0000 1.9 @@ -95,18 +95,24 @@ #include <novsock2.h> #endif +#ifdef HAVE_APR +#include "apr_network_io.h" +#include "apr_errno.h" +#include "apr_general.h" +#endif + /** resolve the host IP */ int jk_resolve(char *host, - short port, + int port, struct sockaddr_in *rc) { int x; - u_long laddr; -#ifdef AS400 - memset(rc, 0, sizeof(struct sockaddr_in)); -#endif + /* TODO: Should be updated for IPV6 support. */ + /* for now use the correct type, in_addr_t */ + in_addr_t laddr; + rc->sin_port = htons((short)port); rc->sin_family = AF_INET; @@ -117,26 +123,40 @@ } } + /* If we found also characters we shoud make name to IP resolution */ if(host[x] != '\0') { -#ifdef AS400 - /* If we found also characters we use gethostbyname_r()*/ - struct hostent hostentry; - struct hostent *hoste = &hostentry; - struct hostent_data hd; - memset( &hd, 0, sizeof(struct hostent_data) ); - if ( (gethostbyname_r( host, hoste, &hd )) != 0 ) { - return JK_FALSE; - } -#else /* If we found also characters we use gethostbyname()*/ - /* XXX : WARNING : We should really use gethostbyname_r in multi-threaded env */ - /* take a look at APR which handle gethostbyname in apr/network_io/unix/sa_common.c */ + +#ifdef HAVE_APR + apr_pool_t *context; + apr_sockaddr_t *remote_sa; + char *remote_ipaddr; + + /* May be we could avoid to recreate it each time ? */ + if (apr_pool_create(&context, NULL) != APR_SUCCESS) + return JK_FALSE; + + if (apr_sockaddr_info_get(&remote_sa, host, APR_UNSPEC, (apr_port_t)port, 0, context) + != APR_SUCCESS) + return JK_FALSE; + + apr_sockaddr_ip_get(&remote_ipaddr, remote_sa); + laddr = inet_addr(remote_ipaddr); + + /* May be we could avoid to delete it each time ? */ + apr_pool_destroy(context); + +#else /* HAVE_APR */ + + /* XXX : WARNING : We should really use gethostbyname_r in multi-threaded env */ + /* Fortunatly when APR is available, ie under Apache 2.0, we use it */ struct hostent *hoste = gethostbyname(host); if(!hoste) { return JK_FALSE; } -#endif laddr = ((struct in_addr *)hoste->h_addr_list[0])->s_addr; + +#endif /* HAVE_APR */ } else { /* If we found only digits we use inet_addr() */ laddr = inet_addr(host);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]