mturk 2005/06/30 01:20:56 Modified: jni/native/include tcn.h jni/native/os/win32 ntpipe.c jni/native/src network.c sslnetwork.c Log: Add abstracts for getting and setting the socket options. We need that becasue nt pipes or unix sockets can not use the apr functions directly, and we have some extra params. In general, this is still function trough pointer call. Revision Changes Path 1.28 +3 -1 jakarta-tomcat-connectors/jni/native/include/tcn.h Index: tcn.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/include/tcn.h,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- tcn.h 30 Jun 2005 07:10:29 -0000 1.27 +++ tcn.h 30 Jun 2005 08:20:56 -0000 1.28 @@ -127,6 +127,8 @@ apr_status_t (*cleanup)(void *); apr_status_t (APR_THREAD_FUNC *tmset)(apr_socket_t *, apr_interval_time_t); apr_status_t (APR_THREAD_FUNC *tmget)(apr_socket_t *, apr_interval_time_t *); + apr_status_t (APR_THREAD_FUNC *set)(apr_socket_t *, apr_int32_t, apr_int32_t); + apr_status_t (APR_THREAD_FUNC *get)(apr_socket_t *, apr_int32_t, apr_int32_t *); apr_status_t (APR_THREAD_FUNC *send) (apr_socket_t *, const char *, apr_size_t *); apr_status_t (APR_THREAD_FUNC *sendv)(apr_socket_t *, const struct iovec *, apr_int32_t, apr_size_t *); apr_status_t (APR_THREAD_FUNC *recv) (apr_socket_t *, char *, apr_size_t *); 1.2 +49 -3 jakarta-tomcat-connectors/jni/native/os/win32/ntpipe.c Index: ntpipe.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/os/win32/ntpipe.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ntpipe.c 24 Jun 2005 08:21:29 -0000 1.1 +++ ntpipe.c 30 Jun 2005 08:20:56 -0000 1.2 @@ -69,6 +69,8 @@ DWORD timeout; int mode; /* Client or server mode */ int nmax; + DWORD sndbuf; + DWORD rcvbuf; char name[MAX_PATH+1]; SECURITY_ATTRIBUTES sa; } tcn_ntp_conn_t; @@ -105,6 +107,44 @@ return APR_SUCCESS; } +static APR_INLINE apr_status_t APR_THREAD_FUNC +ntp_socket_opt_set(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on) +{ + tcn_ntp_conn_t *con = (tcn_ntp_conn_t *)sock; + apr_status_t rv = APR_SUCCESS; + switch (opt) { + case APR_SO_SNDBUF: + con->sndbuf = (DWORD)on; + break; + case APR_SO_RCVBUF: + con->rcvbuf = (DWORD)on; + break; + default: + rv = APR_EINVAL; + break; + } + return rv; +} + +static APR_INLINE apr_status_t APR_THREAD_FUNC +ntp_socket_opt_get(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on) +{ + tcn_ntp_conn_t *con = (tcn_ntp_conn_t *)sock; + apr_status_t rv = APR_SUCCESS; + switch (opt) { + case APR_SO_SNDBUF: + *on = con->sndbuf; + break; + case APR_SO_RCVBUF: + *on = con->rcvbuf; + break; + default: + rv = APR_EINVAL; + break; + } + return rv; +} + static apr_status_t ntp_cleanup(void *data) { tcn_ntp_conn_t *con = (tcn_ntp_conn_t *)data; @@ -264,6 +304,8 @@ con->mode = TCN_NTP_UNKNOWN; con->nmax = PIPE_UNLIMITED_INSTANCES; con->timeout = DEFTIMEOUT; + con->sndbuf = DEFSIZE; + con->rcvbuf = DEFSIZE; if (J2S(name)) { strncpy(con->name, J2S(name), MAX_PATH); con->name[MAX_PATH] = '\0'; @@ -288,6 +330,8 @@ s->shutdown = ntp_socket_shutdown; s->tmget = ntp_socket_timeout_get; s->tmset = ntp_socket_timeout_set; + s->get = ntp_socket_opt_get; + s->set = ntp_socket_opt_set; s->close = ntp_socket_close; s->opaque = con; apr_pool_cleanup_register(p, (const void *)s, @@ -358,8 +402,8 @@ PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, con->nmax, - DEFSIZE, - DEFSIZE, + con->sndbuf, + con->rcvbuf, con->timeout, &c->sa); if (con->h_pipe == INVALID_HANDLE_VALUE) { @@ -399,6 +443,8 @@ a->shutdown = ntp_socket_shutdown; a->tmget = ntp_socket_timeout_get; a->tmset = ntp_socket_timeout_set; + a->get = ntp_socket_opt_get; + a->set = ntp_socket_opt_set; a->close = ntp_socket_close; a->opaque = con; apr_pool_cleanup_register(p, (const void *)a, 1.41 +25 -5 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.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- network.c 24 Jun 2005 08:21:29 -0000 1.40 +++ network.c 30 Jun 2005 08:20:56 -0000 1.41 @@ -221,6 +221,18 @@ return apr_socket_timeout_get(sock, t); } +static APR_INLINE apr_status_t APR_THREAD_FUNC +APR_socket_opt_set(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on) +{ + return apr_socket_opt_set(sock, opt, on); +} + +static APR_INLINE apr_status_t APR_THREAD_FUNC +APR_socket_opt_get(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on) +{ + return apr_socket_opt_get(sock, opt, on); +} + #else #define APR_socket_send apr_socket_send #define APR_socket_recv apr_socket_recv @@ -228,6 +240,8 @@ #define APR_socket_shutdown apr_socket_shutdown #define APR_socket_timeout_set apr_socket_timeout_set #define APR_socket_timeout_get apr_socket_timeout_get +#define APR_socket_opt_set apr_socket_opt_set +#define APR_socket_opt_get apr_socket_opt_get #endif TCN_IMPLEMENT_CALL(jlong, Socket, create)(TCN_STDARGS, jint family, @@ -262,6 +276,8 @@ a->shutdown = APR_socket_shutdown; a->tmget = APR_socket_timeout_get; a->tmset = APR_socket_timeout_set; + a->get = APR_socket_opt_get; + a->set = APR_socket_opt_set; a->close = NULL; } a->opaque = s; @@ -402,6 +418,8 @@ a->shutdown = APR_socket_shutdown; a->tmget = APR_socket_timeout_get; a->tmset = APR_socket_timeout_set; + a->get = APR_socket_opt_get; + a->set = APR_socket_opt_set; a->close = NULL; a->opaque = n; apr_pool_cleanup_register(p, (const void *)a, @@ -446,6 +464,8 @@ a->shutdown = APR_socket_shutdown; a->tmget = APR_socket_timeout_get; a->tmset = APR_socket_timeout_set; + a->get = APR_socket_opt_get; + a->set = APR_socket_opt_set; a->close = NULL; a->opaque = n; apr_pool_cleanup_register(p, (const void *)a, @@ -867,7 +887,7 @@ if (!s->sock) return APR_EINVAL; else - return (jint)apr_socket_opt_set(s->sock, (apr_int32_t)opt, (apr_int32_t)on); + return (jint)(*s->set)(s->opaque, (apr_int32_t)opt, (apr_int32_t)on); } TCN_IMPLEMENT_CALL(jint, Socket, optGet)(TCN_STDARGS, jlong sock, @@ -881,8 +901,8 @@ if (s->sock) tcn_ThrowAPRException(e, APR_EINVAL); else { - TCN_THROW_IF_ERR(apr_socket_opt_get(s->sock, (apr_int32_t)opt, - &on), on); + TCN_THROW_IF_ERR((*s->get)(s->opaque, (apr_int32_t)opt, + &on), on); } cleanup: return (jint)on; @@ -907,7 +927,7 @@ UNREFERENCED(o); TCN_ASSERT(sock != 0); TCN_ASSERT(s->opaque != NULL); - TCN_THROW_IF_ERR((*s->tmget)(s->sock, &timeout), timeout); + TCN_THROW_IF_ERR((*s->tmget)(s->opaque, &timeout), timeout); cleanup: return (jlong)timeout; } 1.20 +17 -1 jakarta-tomcat-connectors/jni/native/src/sslnetwork.c Index: sslnetwork.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/sslnetwork.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- sslnetwork.c 24 Jun 2005 08:21:29 -0000 1.19 +++ sslnetwork.c 30 Jun 2005 08:20:56 -0000 1.20 @@ -219,6 +219,20 @@ return apr_socket_timeout_get(con->sock, t); } +static APR_INLINE apr_status_t APR_THREAD_FUNC +ssl_socket_opt_set(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on) +{ + tcn_ssl_conn_t *con = (tcn_ssl_conn_t *)sock; + return apr_socket_opt_set(con->sock, opt, on); +} + +static APR_INLINE apr_status_t APR_THREAD_FUNC +ssl_socket_opt_get(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on) +{ + tcn_ssl_conn_t *con = (tcn_ssl_conn_t *)sock; + return apr_socket_opt_get(con->sock, opt, on); +} + static apr_status_t APR_THREAD_FUNC ssl_socket_shutdown(apr_socket_t *sock, apr_shutdown_how_e how) { @@ -469,6 +483,8 @@ s->shutdown = ssl_socket_shutdown; s->tmget = ssl_socket_timeout_get; s->tmset = ssl_socket_timeout_set; + s->get = ssl_socket_opt_get; + s->set = ssl_socket_opt_set; s->close = ssl_socket_close; s->opaque = con;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]