cvs commit: jakarta-tomcat-connectors/jni/native/src info.c network.c
mturk 2005/04/16 08:46:36 Modified:jni/java/org/apache/tomcat/jni Address.java Sockaddr.java jni/native/src info.c network.c Log: Add missing Address.getip - apr_sockaddr_ip_get call and remove unneeded fields for Sockaddr. Revision ChangesPath 1.3 +11 -1 jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Address.java Index: Address.java === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Address.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Address.java 14 Jan 2005 14:42:37 - 1.2 +++ Address.java 16 Apr 2005 15:46:36 - 1.3 @@ -24,6 +24,7 @@ public class Address { +static public String APR_ANYADDR = 0.0.0.0; /** * Fill the Address class from apr_sockaddr_t * @param info Sockaddr class to fill @@ -65,6 +66,15 @@ */ public static native String getnameinfo(long sa, int flags); +/** + * Return the IP address (in numeric address string format) in + * an APR socket address. APR will allocate storage for the IP address + * string from the pool of the apr_sockaddr_t. + * @param ss The socket address to reference. + * @return The IP address. + */ +public static native String getip(long sa); + /** * Given an apr_sockaddr_t and a service name, set the port for the service * @param sockaddr The apr_sockaddr_t that will have its port set 1.3 +1 -11 jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Sockaddr.java Index: Sockaddr.java === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Sockaddr.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Sockaddr.java 14 Jan 2005 14:42:37 - 1.2 +++ Sockaddr.java 16 Apr 2005 15:46:36 - 1.3 @@ -34,16 +34,6 @@ public int port; /** The family */ public int family; -/** How big is the sockaddr we're using? */ -public int salen; -/** How big is the ip address structure we're using? */ -public int ipaddr_len; -/** How big should the address buffer be? 16 for v4 or 46 for v6 - * used in inet_ntop... */ -public int addr_str_len; -/** This points to the IP address structure within the appropriate - * sockaddr structure. */ -public long ipaddr_ptr; /** If multiple addresses were found by apr_sockaddr_info_get(), this * points to a representation of the next address. */ public long next; 1.3 +0 -12 jakarta-tomcat-connectors/jni/native/src/info.c Index: info.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/info.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- info.c17 Jan 2005 07:21:13 - 1.2 +++ info.c16 Apr 2005 15:46:36 - 1.3 @@ -115,10 +115,6 @@ DECLARE_AINFO_FIELD(servname); DECLARE_AINFO_FIELD(port); DECLARE_AINFO_FIELD(family); -DECLARE_AINFO_FIELD(salen); -DECLARE_AINFO_FIELD(ipaddr_len); -DECLARE_AINFO_FIELD(addr_str_len); -DECLARE_AINFO_FIELD(ipaddr_ptr); DECLARE_AINFO_FIELD(next); static int finfo_class_initialized = 0; @@ -173,10 +169,6 @@ GET_AINFO_S(servname); GET_AINFO_I(port); GET_AINFO_I(family); -GET_AINFO_I(salen); -GET_AINFO_I(ipaddr_len); -GET_AINFO_I(addr_str_len); -GET_AINFO_J(ipaddr_ptr); GET_AINFO_J(next); ainfo_class_initialized = 1; @@ -215,10 +207,6 @@ SET_AINFO_S(servname, info-servname); SET_AINFO_I(port, info-port); SET_AINFO_I(family, info-family); -SET_AINFO_I(salen, info-salen); -SET_AINFO_I(ipaddr_len, info-ipaddr_len); -SET_AINFO_I(addr_str_len, info-addr_str_len); -SET_AINFO_J(ipaddr_ptr, P2J(info-ipaddr_ptr)); SET_AINFO_J(next, P2J(info-next)); } 1.10 +12 -0 jakarta-tomcat-connectors/jni/native/src/network.c Index: network.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/network.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- network.c 16 Apr 2005 14:53:36 - 1.9 +++ network.c 16 Apr 2005 15:46:36 - 1.10 @@ -69,6 +69,18 @@ return NULL; } +TCN_IMPLEMENT_CALL(jstring, Address, getip)(TCN_STDARGS, jlong sa) +{ +apr_sockaddr_t *s = J2P(sa, apr_sockaddr_t *); +char *ipaddr; + +UNREFERENCED(o); +if (apr_sockaddr_ip_get(ipaddr, s) == APR_SUCCESS) +
cvs commit: jakarta-tomcat-connectors/jni/native/src info.c network.c
mturk 2005/04/16 09:45:13 Modified:jni/examples/org/apache/tomcat/jni Echo.java jni/java/org/apache/tomcat/jni Address.java jni/native/src info.c network.c Log: Add Address.getInfo that creates the Sockaddr object. Revision ChangesPath 1.6 +12 -3 jakarta-tomcat-connectors/jni/examples/org/apache/tomcat/jni/Echo.java Index: Echo.java === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/examples/org/apache/tomcat/jni/Echo.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Echo.java 16 Apr 2005 15:47:42 - 1.5 +++ Echo.java 16 Apr 2005 16:45:13 - 1.6 @@ -75,6 +75,14 @@ pool); serverSock = Socket.create(Socket.APR_INET, Socket.SOCK_STREAM, Socket.APR_PROTO_TCP, pool); +long sa = Address.get(Socket.APR_LOCAL, serverSock); +Sockaddr addr = new Sockaddr(); +if (Address.fill(addr, sa)) { +System.out.println(Host: + addr.hostname); +System.out.println(Server: + addr.servname); +System.out.println(IP: + Address.getip(sa) + + : + addr.port); +} Socket.bind(serverSock, inetAddress); Socket.listen(serverSock, 5); } @@ -90,11 +98,12 @@ while (true) { long clientSock = Socket.accept(serverSock, pool); System.out.println(Accepted id: + i); + try { long sa = Address.get(Socket.APR_REMOTE, clientSock); Sockaddr addr = new Sockaddr(); if (Address.fill(addr, sa)) { -System.out.println(Host: + Address.getnameinfo(clientSock, 0)); +System.out.println(Host: + Address.getnameinfo(sa, 0)); System.out.println(IP: + Address.getip(sa) + : + addr.port); } @@ -102,7 +111,7 @@ // Ignore e.printStackTrace(); } - + Socket.timeoutSet(clientSock, 1000); Worker worker = new Worker(clientSock, i++, this.getClass().getName()); 1.4 +8 -2 jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Address.java Index: Address.java === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Address.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Address.java 16 Apr 2005 15:46:36 - 1.3 +++ Address.java 16 Apr 2005 16:45:13 - 1.4 @@ -26,13 +26,19 @@ static public String APR_ANYADDR = 0.0.0.0; /** - * Fill the Address class from apr_sockaddr_t + * Fill the Sockaddr class from apr_sockaddr_t * @param info Sockaddr class to fill * @param sa Structure pointer */ public static native boolean fill(Sockaddr info, long sa); /** + * Create the Sockaddr object from apr_sockaddr_t + * @param sa Structure pointer + */ +public static native Sockaddr getInfo(long sa); + +/** * Create apr_sockaddr_t from hostname, address family, and port. * @param hostname The hostname or numeric address string to resolve/parse, or * NULL to build an address that corresponds to 0.0.0.0 or :: 1.4 +29 -0 jakarta-tomcat-connectors/jni/native/src/info.c Index: info.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/info.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- info.c16 Apr 2005 15:46:36 - 1.3 +++ info.c16 Apr 2005 16:45:13 - 1.4 @@ -291,3 +291,32 @@ } return rv; } + +TCN_IMPLEMENT_CALL(jobject, Address, getInfo)(TCN_STDARGS, jlong info) +{ +apr_sockaddr_t *i = J2P(info, apr_sockaddr_t *); +jclass aprSockaddrClass; +jmethodID constructorID = 0; +jobject sockaddrObj = NULL; + +UNREFERENCED(o); + +aprSockaddrClass = (*e)-FindClass(e, TCN_AINFO_CLASS); +if (aprSockaddrClass == NULL) +return NULL; + +/* Find the constructor ID */ +constructorID =