mturk 2004/08/02 09:47:44 Modified: ajp/proxy proxy_ajp.c Log: Something weired happened with my CVS, repatching... Revision Changes Path 1.8 +25 -21 jakarta-tomcat-connectors/ajp/proxy/proxy_ajp.c Index: proxy_ajp.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/ajp/proxy/proxy_ajp.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- proxy_ajp.c 2 Aug 2004 16:38:11 -0000 1.7 +++ proxy_ajp.c 2 Aug 2004 16:47:44 -0000 1.8 @@ -13,9 +13,10 @@ * limitations under the License. */ -/* HTTP routines for Apache proxy */ +/* AJP routines for Apache proxy */ #include "mod_proxy.h" +#include "ajp.h" module AP_MODULE_DECLARE_DATA proxy_ajp_module; @@ -33,7 +34,7 @@ void *data; /* To store ajp data */ } proxy_ajp_conn_t; -static apr_status_t ap_proxy_http_cleanup(request_rec *r, +static apr_status_t ap_proxy_ajp_cleanup(request_rec *r, proxy_ajp_conn_t *p_conn, proxy_conn_rec *backend); @@ -277,7 +278,7 @@ * For now we do nothing, ie we get DNS round robin. * XXX FIXME */ - failed = ap_proxy_connect_to_backend(&p_conn->sock, "HTTP", + failed = ap_proxy_connect_to_backend(&p_conn->sock, "AJP", p_conn->addr, p_conn->name, conf, r->server, c->pool); @@ -379,10 +380,9 @@ } if (1) { /* XXXX only when something to send ? */ - void *msg; + ajp_msg_t *msg; apr_size_t bufsiz; char *buff; - long len; status = ajp_alloc_data_msg(r, &buff, &bufsiz, &msg); if (status != APR_SUCCESS) { return status; @@ -412,7 +412,8 @@ } /* read the response */ - status = ajp_read_header(p_conn->sock, r, &(p_conn->data)); + status = ajp_read_header(p_conn->sock, r, + (ajp_msg_t **)&(p_conn->data)); if (status != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_ERR, status, r->server, "proxy: request failed to %pI (%s)", @@ -421,8 +422,8 @@ } /* parse the reponse */ - result = ajp_parse_type(r,p_conn->data); - if (result == 4) { + result = ajp_parse_type(r, p_conn->data); + if (result == CMD_AJP13_SEND_HEADERS) { ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, "proxy: got response from %pI (%s)", p_conn->addr, p_conn->name); @@ -463,16 +464,16 @@ type = ajp_parse_type(r, p_conn->data); status = APR_SUCCESS; - while (type != 5) { - if (type == 4) { + while (type != CMD_AJP13_END_RESPONSE) { + if (type == CMD_AJP13_SEND_HEADERS) { /* AJP13_SEND_HEADERS: process them */ status = ajp_parse_header(r, p_conn->data); if (status != APR_SUCCESS) { break; } - } else if (type == 3) { + } else if (type == CMD_AJP13_SEND_BODY_CHUNK) { /* AJP13_SEND_BODY_CHUNK: piece of data */ - apr_size_t size; + apr_uint16_t size; char *buff; status = ajp_parse_data(r, p_conn->data, &size, &buff); @@ -483,7 +484,8 @@ break; } /* Read the next message */ - status = ajp_read_header(p_conn->sock, r, &(p_conn->data)); + status = ajp_read_header(p_conn->sock, r, + (ajp_msg_t **)&(p_conn->data)); if (status != APR_SUCCESS) { break; } @@ -511,19 +513,18 @@ } static -apr_status_t ap_proxy_http_cleanup(request_rec *r, proxy_ajp_conn_t *p_conn, +apr_status_t ap_proxy_ajp_cleanup(request_rec *r, proxy_ajp_conn_t *p_conn, proxy_conn_rec *backend) { - /* If there are no KeepAlives, or if the connection has been signalled + /* If the connection has been signalled * to close, close the socket and clean up */ /* if the connection is < HTTP/1.1, or Connection: close, * we close the socket, otherwise we leave it open for KeepAlive support */ - if (p_conn->close || (r->proto_num < HTTP_VERSION(1,1))) { - ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, - "ap_proxy_http_cleanup closing %d %d %d %s", - p_conn->sock, p_conn->close, r->proto_num, apr_table_get(r->headers_out, "Connection")); + if (p_conn->close) { + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, + "ap_proxy_ajp_cleanup closing"); if (p_conn->sock) { apr_socket_close(p_conn->sock); p_conn->sock = NULL; @@ -639,6 +640,8 @@ status = ap_proxy_ajp_request(p, r, p_conn, origin, conf, uri, url, server_portstr); if ( status != OK ) { + p_conn->close++; + ap_proxy_ajp_cleanup(r, p_conn, backend); return status; } @@ -647,12 +650,13 @@ server_portstr); if ( status != OK ) { /* clean up even if there is an error */ - ap_proxy_http_cleanup(r, p_conn, backend); + p_conn->close++; + ap_proxy_ajp_cleanup(r, p_conn, backend); return status; } /* Step Five: Clean Up */ - status = ap_proxy_http_cleanup(r, p_conn, backend); + status = ap_proxy_ajp_cleanup(r, p_conn, backend); if ( status != OK ) { return status; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]