You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2002/05/11 02:02:00 UTC
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_channel_apr_socket.c
costin 02/05/10 17:02:00
Modified: jk/native2/common jk_channel_apr_socket.c
Log:
remove the unix socket code, clean up - now it's apr socket only.
Revision Changes Path
1.15 +44 -182 jakarta-tomcat-connectors/jk/native2/common/jk_channel_apr_socket.c
Index: jk_channel_apr_socket.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_channel_apr_socket.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- jk_channel_apr_socket.c 3 May 2002 22:12:17 -0000 1.14
+++ jk_channel_apr_socket.c 11 May 2002 00:02:00 -0000 1.15
@@ -56,17 +56,7 @@
* ========================================================================= */
/**
- * Channel using 'plain' TCP sockets or UNIX sockets.
- * Based on jk_sockbuf. It uses a an APR-based mechanism.
- * The UNIX sockets are not yet in APR (the code has to been written).
- *
- * Properties:
- * - host/filename
- * - port
- * - ndelay (Where the hell we set it?)
- *
- * This channel should 'live' as much as the workerenv. It is stateless.
- * It allocates memory for endpoint private data ( using endpoint's pool ).
+ * Channel using APR sockets.
*
* @author: Gal Shachor <sh...@il.ibm.com>
* @author: Costin Manolache
@@ -87,18 +77,12 @@
#define DEFAULT_HOST "127.0.0.1"
-#define TYPE_UNIX 1 /* to be move in APR. */
-#define TYPE_NET 2 /* to be move in APR. */
/** Information specific for the socket channel
*/
struct jk_channel_apr_private {
int ndelay;
apr_sockaddr_t *addr;
-#ifdef HAVE_UNIXSOCKETS
- struct sockaddr_un unix_addr;
-#endif
- int type; /* AF_INET or AF_UNIX */
char *host;
short port;
};
@@ -106,11 +90,7 @@
/** Informations for each connection
*/
typedef struct jk_channel_apr_data {
- int type; /* AF_INET or AF_UNIX */
apr_socket_t *sock;
-#ifdef HAVE_UNIXSOCKETS
- int unixsock;
-#endif
} jk_channel_apr_data_t;
typedef struct jk_channel_apr_private jk_channel_apr_private_t;
@@ -144,9 +124,6 @@
socketInfo->host=value;
} else if( strcmp( "port", name ) == 0 ) {
socketInfo->port=atoi( value );
- } else if( strcmp( "file", name ) == 0 ) {
- socketInfo->host=value;
- socketInfo->type=AF_UNIX;
} else {
if( ch->worker!=NULL ) {
return ch->worker->mbean->setAttribute( env, ch->worker->mbean, name, valueP );
@@ -159,28 +136,33 @@
/** resolve the host IP ( jk_resolve ) and initialize the channel.
*/
static int JK_METHOD jk2_channel_apr_init(jk_env_t *env,
- jk_channel_t *_this)
+ jk_channel_t *ch)
{
jk_channel_apr_private_t *socketInfo=
- (jk_channel_apr_private_t *)(_this->_privatePtr);
+ (jk_channel_apr_private_t *)(ch->_privatePtr);
int rc;
short port=socketInfo->port;
if( socketInfo->host==NULL ) {
- char *localName=_this->mbean->localName;
- jk_config_t *cfg=_this->workerEnv->config;
+ char *localName=ch->mbean->localName;
+ jk_config_t *cfg=ch->workerEnv->config;
- /* Set the 'name' property
- */
- localName = jk2_config_replaceProperties(env, cfg->map, cfg->map->pool, localName);
+ char *portIdx=strchr( localName, ':' );
- /* env->l->jkLog(env, env->l, JK_LOG_INFO, */
- /* "channelApr.init(): use name %s\n", localName ); */
-
- if (localName[0]=='/') {
- _this->mbean->setAttribute( env, _this->mbean, "file", localName );
+ if( portIdx==NULL || portIdx[1]=='\0' ) {
+ socketInfo->port=8009;
} else {
- _this->mbean->setAttribute( env, _this->mbean, "host", localName );
+ portIdx++;
+ socketInfo->port=atoi( portIdx );
+ }
+
+ if( socketInfo->host==NULL ) {
+ socketInfo->host=ch->mbean->pool->calloc( env, ch->mbean->pool, strlen( localName ) + 1 );
+ if( portIdx==NULL ) {
+ strcpy( socketInfo->host, localName );
+ } else {
+ strncpy( socketInfo->host, localName, portIdx-localName-1 );
+ }
}
}
@@ -205,34 +187,14 @@
char *host, short port,
jk_channel_apr_private_t *rc)
{
- /*
- * If the hostname is an absolut path, we want a UNIX socket.
- * otherwise it is a TCP/IP socket.
- */
- /* env->l->jkLog(env, env->l, JK_LOG_ERROR, */
- /* "jk2_channel_apr_resolve: %s %d\n", */
- /* host, port); */
-#ifdef HAVE_UNIXSOCKETS
- if (host[0]=='/') {
- rc->type = TYPE_UNIX;
- memset(&rc->unix_addr, 0, sizeof(struct sockaddr_un));
- rc->unix_addr.sun_family = AF_UNIX;
- strcpy(rc->unix_addr.sun_path, host);
- env->l->jkLog(env, env->l, JK_LOG_INFO,
- "channelApr.resolve(): create AF_UNIX %s\n", host );
- } else
-#endif
- {
- int err;
-
- rc->type = TYPE_NET;
- env->l->jkLog(env, env->l, JK_LOG_INFO,
- "channelApr.resolve(): create AF_NET %s %d\n", host, port );
- err=apr_sockaddr_info_get(&rc->addr, host, APR_UNSPEC, port, 0,
- (apr_pool_t *)env->globalPool->_private);
- if ( err != APR_SUCCESS) {
- return err;
- }
+ int err;
+
+ env->l->jkLog(env, env->l, JK_LOG_INFO,
+ "channelApr.resolve(): create AF_NET %s %d\n", host, port );
+ err=apr_sockaddr_info_get(&rc->addr, host, APR_UNSPEC, port, 0,
+ (apr_pool_t *)env->globalPool->_private);
+ if ( err != APR_SUCCESS) {
+ return err;
}
return JK_OK;
}
@@ -241,12 +203,12 @@
/** connect to Tomcat (jk_open_socket)
*/
static int JK_METHOD jk2_channel_apr_open(jk_env_t *env,
- jk_channel_t *_this,
+ jk_channel_t *ch,
jk_endpoint_t *endpoint)
{
int err;
jk_channel_apr_private_t *socketInfo=
- (jk_channel_apr_private_t *)(_this->_privatePtr);
+ (jk_channel_apr_private_t *)(ch->_privatePtr);
apr_sockaddr_t *remote_sa=socketInfo->addr;
int ndelay=socketInfo->ndelay;
@@ -257,46 +219,6 @@
apr_interval_time_t timeout = 2 * APR_USEC_PER_SEC;
char msg[128];
-#ifdef HAVE_UNIXSOCKETS
-
- int unixsock;
-
- /* UNIX socket (to be moved in APR) */
- if (socketInfo->type==TYPE_UNIX) {
- unixsock = socket(AF_UNIX, SOCK_STREAM, 0);
- if (unixsock<0) {
- env->l->jkLog(env, env->l, JK_LOG_ERROR,
- "channelApr.open(): can't create socket %d %s\n",
- errno, strerror( errno ) );
- return JK_ERR;
- }
- env->l->jkLog(env, env->l, JK_LOG_INFO,
- "channelApr.open(): create unix socket %s %d\n", socketInfo->host, unixsock );
- if (connect(unixsock,(struct sockaddr *)&(socketInfo->unix_addr),
- sizeof(struct sockaddr_un))<0) {
- close(unixsock);
- env->l->jkLog(env, env->l, JK_LOG_ERROR,
- "channelApr.connect() connect failed %d %s\n",
- errno, strerror( errno ) );
- return JK_ERR;
- }
- env->l->jkLog(env, env->l, JK_LOG_INFO,
- "channelApr.open(): connect unix socket %d %s\n", unixsock, socketInfo->host );
- /* store the channel information */
- if( sd==NULL ) {
- sd=(jk_channel_apr_data_t *)
- endpoint->pool->calloc( env, endpoint->pool,
- sizeof( jk_channel_apr_data_t ));
- endpoint->channelData=sd;
- }
-
- sd->unixsock = unixsock;
- sd->type = socketInfo->type;
- return JK_OK;
- }
-#endif
-
-
if (apr_socket_create(&sock, remote_sa->family, SOCK_STREAM,
(apr_pool_t *)env->globalPool->_private)
!= APR_SUCCESS) {
@@ -353,7 +275,6 @@
endpoint->channelData=sd;
}
sd->sock = sock;
- sd->type = socketInfo->type; /* APR should handle it. */
return JK_OK;
}
@@ -361,7 +282,7 @@
/** close the socket ( was: jk2_close_socket )
*/
-static int JK_METHOD jk2_channel_apr_close(jk_env_t *env,jk_channel_t *_this,
+static int JK_METHOD jk2_channel_apr_close(jk_env_t *env,jk_channel_t *ch,
jk_endpoint_t *endpoint)
{
apr_socket_t *sd;
@@ -371,12 +292,6 @@
if( chD==NULL )
return JK_ERR;
-#ifdef HAVE_UNIXSOCKETS
- if (chD->type==TYPE_UNIX) {
- close( chD->unixsock );
- return 0;
- }
-#endif
sd=chD->sock;
chD->sock=NULL; /* XXX check it. */
/* nothing else to clean, the socket_data was allocated ouf of
@@ -398,7 +313,7 @@
* protocol.
* @was: jk_tcp_socket_sendfull
*/
-static int JK_METHOD jk2_channel_apr_send(jk_env_t *env, jk_channel_t *_this,
+static int JK_METHOD jk2_channel_apr_send(jk_env_t *env, jk_channel_t *ch,
jk_endpoint_t *endpoint,
jk_msg_t *msg)
{
@@ -423,47 +338,16 @@
b=msg->buf;
sock=chD->sock;
-#ifdef HAVE_UNIXSOCKETS
- unixsock=chD->unixsock;
-#endif
-
- if (chD->type==TYPE_NET) {
- length = (apr_size_t) len;
- stat = apr_send(sock, b, &length);
- if (stat!= APR_SUCCESS) {
- env->l->jkLog(env, env->l, JK_LOG_ERROR,
- "jk2_channel_apr_send send failed %d %s\n",
- stat, apr_strerror( stat, data, sizeof(data) ) );
- return -3; /* -2 is not possible... */
- }
- return JK_OK;
- }
-#ifdef HAVE_UNIXSOCKETS
- while(sent < len) {
-/* this_time = send(unixsock, (char *)b + sent , len - sent, 0); */
- errno=0;
- this_time = write(unixsock, (char *)b + sent , len - sent);
-
- env->l->jkLog(env, env->l, JK_LOG_INFO,
- "channel.apr:send() write() %d %d %s\n", this_time, errno,
- strerror( errno));
-/* if( errno != 0 ) { */
-/* env->l->jkLog(env, env->l, JK_LOG_ERROR, */
-/* "channel.apr:send() send() %d %d %s\n", this_time, errno, */
-/* strerror( errno)); */
-/* return -2; */
-/* } */
- if(0 == this_time) {
- return -2;
- }
- if(this_time < 0) {
- return -3;
- }
- sent += this_time;
+
+ length = (apr_size_t) len;
+ stat = apr_send(sock, b, &length);
+ if (stat!= APR_SUCCESS) {
+ env->l->jkLog(env, env->l, JK_LOG_ERROR,
+ "jk2_channel_apr_send send failed %d %s\n",
+ stat, apr_strerror( stat, data, sizeof(data) ) );
+ return -3; /* -2 is not possible... */
}
- /* return sent; */
return JK_OK;
-#endif
}
@@ -476,7 +360,7 @@
* Was: tcp_socket_recvfull
*/
static int JK_METHOD jk2_channel_apr_readN( jk_env_t *env,
- jk_channel_t *_this,
+ jk_channel_t *ch,
jk_endpoint_t *endpoint,
char *b, int len )
{
@@ -493,29 +377,7 @@
return JK_ERR;
sock=chD->sock;
rdlen = 0;
-#ifdef HAVE_UNIXSOCKETS
- sd=chD->unixsock;
- /* this should be moved in APR */
- if (chD->type==TYPE_UNIX) {
- while(rdlen < len) {
- int this_time = recv(sd,
- (char *)b + rdlen,
- len - rdlen,
- 0);
- if(-1 == this_time) {
- if(EAGAIN == errno) {
- continue;
- }
- return -1;
- }
- if(0 == this_time) {
- return -1;
- }
- rdlen += this_time;
- }
- return rdlen;
- }
-#endif
+
length = (apr_size_t) len;
stat = apr_recv(sock, b, &length);
@@ -536,7 +398,7 @@
* >0: length of the received data.
* Was: tcp_socket_recvfull
*/
-static int JK_METHOD jk2_channel_apr_recv( jk_env_t *env, jk_channel_t *_this,
+static int JK_METHOD jk2_channel_apr_recv( jk_env_t *env, jk_channel_t *ch,
jk_endpoint_t *endpoint,
jk_msg_t *msg )
{
@@ -545,7 +407,7 @@
int rc;
- jk2_channel_apr_readN( env, _this, endpoint, msg->buf, hlen );
+ jk2_channel_apr_readN( env, ch, endpoint, msg->buf, hlen );
blen=msg->checkHeader( env, msg, endpoint );
if( blen < 0 ) {
@@ -554,7 +416,7 @@
return JK_ERR;
}
- rc= jk2_channel_apr_readN( env, _this, endpoint, msg->buf + hlen, blen);
+ rc= jk2_channel_apr_readN( env, ch, endpoint, msg->buf + hlen, blen);
if(rc < 0) {
env->l->jkLog(env, env->l, JK_LOG_ERROR,
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>