hgomez 2004/07/27 06:46:32 Modified: ajp/ajplib/test ajp_link.c Log: *** keyword substitution change *** Revision Changes Path 1.2 +267 -267 jakarta-tomcat-connectors/ajp/ajplib/test/ajp_link.c Index: ajp_link.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/ajp/ajplib/test/ajp_link.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ajp_link.c 27 Jul 2004 13:46:16 -0000 1.1 +++ ajp_link.c 27 Jul 2004 13:46:32 -0000 1.2 @@ -1,267 +1,267 @@ -/* Copyright 1999-2004 The Apache Software Foundation
- * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "ajp.h" - -/** - Resolve host -**/ -int ajp_idef_resolve(ajp_env_t *env, char *host, apr_port_t port, ajp_idef_t * idef) -{ - int err; - - err = apr_sockaddr_info_get(&idef->addr, host, APR_UNSPEC, port, 0, env->pool); - - if (err != APR_SUCCESS) { - return err; - } - return 0; -} - - -/** - Create (connect) instance link -**/ - -int ajp_ilink_connect(ajp_env_t *env, ajp_idef_t * idef, ajp_ilink_t *link) -{ - apr_sockaddr_t *remote_sa = idef->addr; - int ndelay = idef->ndelay; - int keepalive = idef->keepalive; - - apr_socket_t *sock; - apr_status_t ret; - apr_int32_t timeout = (apr_int32_t) (idef->timeout * APR_USEC_PER_SEC); - char msg[128]; - int connected = 0; - - while (remote_sa && !connected) { - if ((ret = apr_socket_create(&sock, remote_sa->family, SOCK_STREAM, -#if (APR_MAJOR_VERSION > 0) - APR_PROTO_TCP, -#endif - env->pool)) != APR_SUCCESS) { - if (remote_sa->next) { - fprintf(stderr, - "ajp_ilink_connect() error %d creating socket to %s\n", - ret, idef->host); - } - else { - fprintf(stderr, - "ajp_ilink_connect() error %d creating socket to %s, no more addr\n", - ret, idef->host); - } - remote_sa = remote_sa->next; - continue; - } - /* store the socket information */ - link->sock = sock; - /* no requests yet */ - link->requests = 0; - - fprintf(stdout, "ajp_ilink_connect() create tcp socket %d\n", sock); - - /* the default timeout (0) will set the socket to blocking with - infinite timeouts. - */ - - if (timeout <= 0) - apr_socket_timeout_set(sock, -1); - else - apr_socket_timeout_set(sock, timeout); - - /* make the connection out of the socket */ - do { - ret = apr_socket_connect(sock, remote_sa); - } while (APR_STATUS_IS_EINTR(ret)); - - /* if an error occurred, loop round and try again */ - if (ret != APR_SUCCESS) { - apr_socket_close(sock); - if (remote_sa->next) { - fprintf(stderr, - "ajp_ilink_connect() attempt to connect to %pI (%s) failed %d\n", - remote_sa, idef->host, ret); - } - else { - fprintf(stderr, - "ajp_ilink_connect() attempt to connect to %pI (%s) failed %d, no more addr\n", - remote_sa, idef->host, ret); - } - remote_sa = remote_sa->next; - continue; - } - connected = 1; - } - - if (!connected) { - apr_socket_close(sock); - return -1; - } - /* enable the use of keep-alive packets on TCP connection */ - if (keepalive) { - int set = 1; - if ((ret = - apr_socket_opt_set(sock, APR_SO_KEEPALIVE, set)) != APR_SUCCESS) { - apr_socket_close(sock); - fprintf(stderr, "ajp_ilink_connect() keepalive failed %d %s\n", - ret, apr_strerror(ret, msg, sizeof(msg))); - return -1; - } - } - - /* Disable the Nagle algorithm if ndelay is set */ - if (ndelay) { - int set = 1; - if ((ret = - apr_socket_opt_set(sock, APR_TCP_NODELAY, set)) != APR_SUCCESS) { - apr_socket_close(sock); - fprintf(stderr, "ajp_ilink_connect() nodelay failed %d %s\n", - ret, apr_strerror(ret, msg, sizeof(msg))); - return -1; - } - } - - fprintf(stdout, "ajp_ilink_connect(), sock = %d\n", sock); - - return 0; -} - - -/** - Close instance link -**/ - -int ajp_ilink_close(ajp_env_t *env, ajp_ilink_t *link) -{ - apr_socket_t *sd; - apr_status_t rc; - - sd = link->sock; - - if (sd == NULL) - return -1; - - fprintf(stdout, - "ajp_ilink_close() closing sock = %d after %d requests\n", - sd, link->requests); - - rc = apr_socket_close(sd); - return rc; -} - - -int ajp_ilink_send(ajp_env_t *env, ajp_ilink_t *link, ajp_msg_t *msg) -{ - char *b; - int len; - apr_socket_t *sock; - apr_status_t stat; - apr_size_t length; - char data[128]; - - sock = link->sock; - - if (sock == NULL) - return -1; - - ajp_msg_end(env, msg); - - len = msg->len; - b = msg->buf; - - length = (apr_size_t) len; - do { - apr_size_t written = length; - - stat = apr_socket_send(sock, b, &written); - if (stat != APR_SUCCESS) { - fprintf(stderr, - "ajp_ilink_send() send failed %d %s\n", - stat, apr_strerror(stat, data, sizeof(data))); - return -3; /* -2 is not possible... */ - } - length -= written; - b += written; - } while (length); - - return 0; -} - - -static int ajp_ilink_readN(ajp_env_t *env, ajp_ilink_t *link, char * buf, apr_size_t len) -{ - apr_socket_t *sock; - apr_size_t length; - apr_status_t stat; - int rdlen; - - sock = link->sock; - - if (sock == NULL) - return -1; - - rdlen = 0; - length = len; - while (rdlen < len) { - - stat = apr_socket_recv(sock, buf + rdlen, &length); - - if (stat == APR_EOF) - return -1; /* socket closed. */ - else if (APR_STATUS_IS_EAGAIN(stat)) - continue; - else if (stat != APR_SUCCESS) - return -1; /* any error. */ - rdlen += length; - length = (apr_size_t) (len - rdlen); - } - return rdlen; -} - - -int ajp_ilink_receive(ajp_env_t *env, ajp_ilink_t *link, ajp_msg_t *msg) -{ - int hlen = msg->headerLen; - int blen; - int rc; - - - ajp_ilink_channel_apr_readN(env, link, msg->buf, hlen); - - blen = ajp_msg_check_header(env, msg); - - if (blen < 0) { - fprintf(stderr, - "ajp_ilink_receive() received bad header\n"); - return -1; - } - - rc = jk2_channel_apr_readN(env, link, msg->buf + hlen, blen); - - if (rc < 0) { - fprintf(stderr, - "ajp_ilink_receive() error while receiving message body %d %d\n", - rc, errno); - return -2; - } - - fprintf(stdout, - "ajp_ilink_receive() received packet len=%d type=%d\n", - blen, (int)msg->buf[hlen]); - return 0; - -} - +/* Copyright 1999-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ajp.h" + +/** + Resolve host +**/ +int ajp_idef_resolve(ajp_env_t *env, char *host, apr_port_t port, ajp_idef_t * idef) +{ + int err; + + err = apr_sockaddr_info_get(&idef->addr, host, APR_UNSPEC, port, 0, env->pool); + + if (err != APR_SUCCESS) { + return err; + } + return 0; +} + + +/** + Create (connect) instance link +**/ + +int ajp_ilink_connect(ajp_env_t *env, ajp_idef_t * idef, ajp_ilink_t *link) +{ + apr_sockaddr_t *remote_sa = idef->addr; + int ndelay = idef->ndelay; + int keepalive = idef->keepalive; + + apr_socket_t *sock; + apr_status_t ret; + apr_int32_t timeout = (apr_int32_t) (idef->timeout * APR_USEC_PER_SEC); + char msg[128]; + int connected = 0; + + while (remote_sa && !connected) { + if ((ret = apr_socket_create(&sock, remote_sa->family, SOCK_STREAM, +#if (APR_MAJOR_VERSION > 0) + APR_PROTO_TCP, +#endif + env->pool)) != APR_SUCCESS) { + if (remote_sa->next) { + fprintf(stderr, + "ajp_ilink_connect() error %d creating socket to %s\n", + ret, idef->host); + } + else { + fprintf(stderr, + "ajp_ilink_connect() error %d creating socket to %s, no more addr\n", + ret, idef->host); + } + remote_sa = remote_sa->next; + continue; + } + /* store the socket information */ + link->sock = sock; + /* no requests yet */ + link->requests = 0; + + fprintf(stdout, "ajp_ilink_connect() create tcp socket %d\n", sock); + + /* the default timeout (0) will set the socket to blocking with + infinite timeouts. + */ + + if (timeout <= 0) + apr_socket_timeout_set(sock, -1); + else + apr_socket_timeout_set(sock, timeout); + + /* make the connection out of the socket */ + do { + ret = apr_socket_connect(sock, remote_sa); + } while (APR_STATUS_IS_EINTR(ret)); + + /* if an error occurred, loop round and try again */ + if (ret != APR_SUCCESS) { + apr_socket_close(sock); + if (remote_sa->next) { + fprintf(stderr, + "ajp_ilink_connect() attempt to connect to %pI (%s) failed %d\n", + remote_sa, idef->host, ret); + } + else { + fprintf(stderr, + "ajp_ilink_connect() attempt to connect to %pI (%s) failed %d, no more addr\n", + remote_sa, idef->host, ret); + } + remote_sa = remote_sa->next; + continue; + } + connected = 1; + } + + if (!connected) { + apr_socket_close(sock); + return -1; + } + /* enable the use of keep-alive packets on TCP connection */ + if (keepalive) { + int set = 1; + if ((ret = + apr_socket_opt_set(sock, APR_SO_KEEPALIVE, set)) != APR_SUCCESS) { + apr_socket_close(sock); + fprintf(stderr, "ajp_ilink_connect() keepalive failed %d %s\n", + ret, apr_strerror(ret, msg, sizeof(msg))); + return -1; + } + } + + /* Disable the Nagle algorithm if ndelay is set */ + if (ndelay) { + int set = 1; + if ((ret = + apr_socket_opt_set(sock, APR_TCP_NODELAY, set)) != APR_SUCCESS) { + apr_socket_close(sock); + fprintf(stderr, "ajp_ilink_connect() nodelay failed %d %s\n", + ret, apr_strerror(ret, msg, sizeof(msg))); + return -1; + } + } + + fprintf(stdout, "ajp_ilink_connect(), sock = %d\n", sock); + + return 0; +} + + +/** + Close instance link +**/ + +int ajp_ilink_close(ajp_env_t *env, ajp_ilink_t *link) +{ + apr_socket_t *sd; + apr_status_t rc; + + sd = link->sock; + + if (sd == NULL) + return -1; + + fprintf(stdout, + "ajp_ilink_close() closing sock = %d after %d requests\n", + sd, link->requests); + + rc = apr_socket_close(sd); + return rc; +} + + +int ajp_ilink_send(ajp_env_t *env, ajp_ilink_t *link, ajp_msg_t *msg) +{ + char *b; + int len; + apr_socket_t *sock; + apr_status_t stat; + apr_size_t length; + char data[128]; + + sock = link->sock; + + if (sock == NULL) + return -1; + + ajp_msg_end(env, msg); + + len = msg->len; + b = msg->buf; + + length = (apr_size_t) len; + do { + apr_size_t written = length; + + stat = apr_socket_send(sock, b, &written); + if (stat != APR_SUCCESS) { + fprintf(stderr, + "ajp_ilink_send() send failed %d %s\n", + stat, apr_strerror(stat, data, sizeof(data))); + return -3; /* -2 is not possible... */ + } + length -= written; + b += written; + } while (length); + + return 0; +} + + +static int ajp_ilink_readN(ajp_env_t *env, ajp_ilink_t *link, char * buf, apr_size_t len) +{ + apr_socket_t *sock; + apr_size_t length; + apr_status_t stat; + int rdlen; + + sock = link->sock; + + if (sock == NULL) + return -1; + + rdlen = 0; + length = len; + while (rdlen < len) { + + stat = apr_socket_recv(sock, buf + rdlen, &length); + + if (stat == APR_EOF) + return -1; /* socket closed. */ + else if (APR_STATUS_IS_EAGAIN(stat)) + continue; + else if (stat != APR_SUCCESS) + return -1; /* any error. */ + rdlen += length; + length = (apr_size_t) (len - rdlen); + } + return rdlen; +} + + +int ajp_ilink_receive(ajp_env_t *env, ajp_ilink_t *link, ajp_msg_t *msg) +{ + int hlen = msg->headerLen; + int blen; + int rc; + + + ajp_ilink_channel_apr_readN(env, link, msg->buf, hlen); + + blen = ajp_msg_check_header(env, msg); + + if (blen < 0) { + fprintf(stderr, + "ajp_ilink_receive() received bad header\n"); + return -1; + } + + rc = jk2_channel_apr_readN(env, link, msg->buf + hlen, blen); + + if (rc < 0) { + fprintf(stderr, + "ajp_ilink_receive() error while receiving message body %d %d\n", + rc, errno); + return -2; + } + + fprintf(stdout, + "ajp_ilink_receive() received packet len=%d type=%d\n", + blen, (int)msg->buf[hlen]); + return 0; + +} + --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]