--- jk_ajp_common.c.orig.c 2005-06-15 07:23:02.000000000 -0700 +++ jk_ajp_common.c 2005-06-15 07:29:00.000000000 -0700 @@ -1296,6 +1296,9 @@ jk_ws_service_t *r, jk_logger_t *l) { int code = (int)jk_b_get_byte(msg); + //KCADD + int bytesread = 0; + unsigned char buf1[AJP13_MAX_SEND_BODY_SZ]; JK_TRACE_ENTER(l); switch (code) { @@ -1309,6 +1312,14 @@ return JK_AJP13_ERROR; } + //KCADD + // make sure the entire request body has been read. + jk_log(l, JK_LOG_INFO, "KCDEBUG: this many bytes left: %d", ae->left_bytes_to_send); + while(ae->left_bytes_to_send > 0) { + r->read(r, buf1, AJP13_MAX_SEND_BODY_SZ, &bytesread); + ae->left_bytes_to_send -= bytesread; + } + r->start_response(r, res.status, res.msg, (const char *const *)res.header_names, (const char *const *)res.header_values,
> -----Original Message----- > From: jean-frederic clere > [mailto:[EMAIL PROTECTED] > Sent: Tuesday, June 14, 2005 11:53 PM > To: Tomcat Developers List > Subject: Re: Sun One/iPlanet nsapi_redirector issue > > > Kevin Convy (Contractor) wrote: > > I am having an issue posting a large request (that also requires > > authentication) through a Sun One/IPlanet 6.0sp5 webserver > to Tomcat > > 5.5 using the 1.2.8 nsapi_redirector. The client that is doing the > > posting gets a server write error if the request body is over a > > certain size (~150K). The issue occurs on both the Windows XP and > > Solaris versions.The issue does NOT occur using an Apache-mod_jk > > configuration. If I use the attached version of the > > ajp_process_callback method in jk_ajp_common.c (changes > from the 1.2.8 > > version of the code are marked with KCADD comments) it resolves the > > problem. > > A diff -u would help to see your changes. > > > It seems to resolve it by > > making sure the entire request body is read off the netbuf before > > turning around and starting the response (which occurs in this case > > because an authentication challenge is sent before the > entire request > > is read by tomcat). I don't mean to offer this as a fix, but I was > > wondering if this is a known issue and if there is a better fix > > somewhere. > > > > I sent a slightly different version of this email to the > tomcat-user > > list a couple of weeks ago and apologize for the cross-post. > > > > Thanks, > > > > Kevin Convy > > Icebox LLC > > > > > > > > static int ajp_process_callback(jk_msg_buf_t *msg, > > jk_msg_buf_t *pmsg, > > ajp_endpoint_t * ae, > > jk_ws_service_t *r, > jk_logger_t *l) { > > int code = (int)jk_b_get_byte(msg); > > // KCADD > > int bytesread = 0; > > unsigned char buf1[AJP13_MAX_SEND_BODY_SZ]; > > > > JK_TRACE_ENTER(l); > > switch (code) { > > case JK_AJP13_SEND_HEADERS: > > { > > jk_res_data_t res; > > if (!ajp_unmarshal_response(msg, &res, ae, l)) { > > jk_log(l, JK_LOG_ERROR, > > "ajp_unmarshal_response failed\n"); > > JK_TRACE_EXIT(l); > > return JK_AJP13_ERROR; > > } > > > > //KCADD > > // make sure the entire request body has been read. > > jk_log(l, JK_LOG_INFO, "KCDEBUG: this many bytes left: > > %d", > > ae->left_bytes_to_send); > > while(ae->left_bytes_to_send > 0) { > > r->read(r, buf1, AJP13_MAX_SEND_BODY_SZ, > &bytesread); > > ae->left_bytes_to_send -= bytesread; > > } > > > > r->start_response(r, res.status, res.msg, > > (const char *const *)res.header_names, > > (const char *const > *)res.header_values, > > res.num_headers); > > } > > return JK_AJP13_SEND_HEADERS; > > > > case JK_AJP13_SEND_BODY_CHUNK: > > { > > unsigned len = (unsigned)jk_b_get_int(msg); > > if (!r->write(r, jk_b_get_buff(msg) + jk_b_get_pos(msg), > > len)) { > > jk_log(l, JK_LOG_INFO, > > "Connection aborted or network problems\n"); > > JK_TRACE_EXIT(l); > > return JK_CLIENT_ERROR; > > } > > } > > break; > > > > case JK_AJP13_GET_BODY_CHUNK: > > { > > int len = (int)jk_b_get_int(msg); > > > > if (len < 0) { > > len = 0; > > } > > if (len > AJP13_MAX_SEND_BODY_SZ) { > > len = AJP13_MAX_SEND_BODY_SZ; > > } > > if ((unsigned int)len > ae->left_bytes_to_send) { > > len = ae->left_bytes_to_send; > > } > > > > /* the right place to add file storage for upload */ > > if ((len = ajp_read_into_msg_buff(ae, r, pmsg, > len, l)) >= > > 0) { > > r->content_read += len; > > JK_TRACE_EXIT(l); > > return JK_AJP13_HAS_RESPONSE; > > } > > > > jk_log(l, JK_LOG_INFO, > > "Connection aborted or network problems\n"); > > > > JK_TRACE_EXIT(l); > > return JK_CLIENT_ERROR; > > } > > break; > > > > case JK_AJP13_END_RESPONSE: > > { > > ae->reuse = (int)jk_b_get_byte(msg); > > > > if (!ae->reuse) { > > /* > > * Strange protocol error. > > */ > > if (JK_IS_DEBUG_LEVEL(l)) > > jk_log(l, JK_LOG_DEBUG, "Reuse: %d\n", > ae->reuse); > > ae->reuse = JK_FALSE; > > } > > /* Reuse in all cases */ > > ae->reuse = JK_TRUE; > > } > > JK_TRACE_EXIT(l); > > return JK_AJP13_END_RESPONSE; > > break; > > > > default: > > jk_log(l, JK_LOG_ERROR, > > "Invalid code: %d\n", code); > > JK_TRACE_EXIT(l); > > return JK_AJP13_ERROR; > > } > > > > JK_TRACE_EXIT(l); > > return JK_AJP13_NO_RESPONSE; > > } > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]