--- 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]