]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Make sure the AJP message is between 8 and 64K.
authorMladen Turk <mturk@apache.org>
Tue, 24 Oct 2006 06:33:13 +0000 (06:33 +0000)
committerMladen Turk <mturk@apache.org>
Tue, 24 Oct 2006 06:33:13 +0000 (06:33 +0000)
Use the provided message size when using get_brigade.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@467257 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/ajp.h
modules/proxy/mod_proxy_ajp.c

index 60e503c7cf5ca174b3f17e5f2b18918823717738..90ea325a2949dfb25f5c909f49c743a97b3d6423 100644 (file)
@@ -130,8 +130,10 @@ struct ajp_msg
 #define AJP13_WS_HEADER             0x1234
 #define AJP_HEADER_LEN              4
 #define AJP_HEADER_SZ_LEN           2
-#define AJP_MSG_BUFFER_SZ           (8*1024)
-#define AJP13_MAX_SEND_BODY_SZ      (AJP_MSG_BUFFER_SZ - 6)
+#define AJP_HEADER_SZ               6
+#define AJP_MSG_BUFFER_SZ           8192
+#define AJP_MAX_BUFFER_SZ           16384
+#define AJP13_MAX_SEND_BODY_SZ      (AJP_MAX_BUFFER_SZ - AJP_HEADER_SZ)
 
 /** Send a request from web server to container*/
 #define CMD_AJP13_FORWARD_REQUEST   (unsigned char)2
index 92e5c51ada93ab134beca6d5747ca3c4059ed54a..bd06184187324ed7d5b7cc36f32dcaa83202bd42 100644 (file)
@@ -135,14 +135,15 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
     apr_pollfd_t *conn_poll;
     proxy_server_conf *psf =
     ap_get_module_config(r->server->module_config, &proxy_module);
-    apr_size_t maxsize = AP_IOBUFSIZE;
+    apr_size_t maxsize = AJP_MSG_BUFFER_SZ;
 
     if (psf->io_buffer_size_set)
        maxsize = psf->io_buffer_size;
-    if (maxsize > 65536)
-       maxsize = 65536;
-    if (maxsize%1024)
-        maxsize = ((maxsize/1024) + 1 ) * 1024;
+    if (maxsize > AJP_MAX_BUFFER_SZ)
+       maxsize = AJP_MAX_BUFFER_SZ;
+    else if (maxsize < AJP_MSG_BUFFER_SZ)
+       maxsize = AJP_MSG_BUFFER_SZ;
+    maxsize = APR_ALIGN(maxsize, 1024);
 
     /*
      * Send the AJP request to the remote server
@@ -183,7 +184,7 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
     } else {
         status = ap_get_brigade(r->input_filters, input_brigade,
                                 AP_MODE_READBYTES, APR_BLOCK_READ,
-                                AJP13_MAX_SEND_BODY_SZ);
+                                maxsize - AJP_HEADER_SZ);
 
         if (status != APR_SUCCESS) {
             /* We had a failure: Close connection to backend */
@@ -277,7 +278,7 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
                         status = ap_get_brigade(r->input_filters, input_brigade,
                                                 AP_MODE_READBYTES,
                                                 APR_BLOCK_READ,
-                                                AJP13_MAX_SEND_BODY_SZ);
+                                                maxsize - AJP_HEADER_SZ);
                         if (status != APR_SUCCESS) {
                             ap_log_error(APLOG_MARK, APLOG_DEBUG, status,
                                          r->server,