You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2004/04/03 08:47:23 UTC

cvs commit: jakarta-tomcat-connectors/jk/native2/server/isapi jk_service_iis.c

mturk       2004/04/02 22:47:23

  Modified:    jk/native2/server/isapi jk_service_iis.c
  Log:
  Read from client in the loop until all the requested data is read or timeout
  occurs. This fixes random errors during read large post data.
  
  Revision  Changes    Path
  1.30      +19 -11    jakarta-tomcat-connectors/jk/native2/server/isapi/jk_service_iis.c
  
  Index: jk_service_iis.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/isapi/jk_service_iis.c,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- jk_service_iis.c	21 Mar 2004 09:45:16 -0000	1.29
  +++ jk_service_iis.c	3 Apr 2004 06:47:23 -0000	1.30
  @@ -156,6 +156,7 @@
   
           if ((DWORD) s->content_read < lpEcb->cbTotalBytes) {
               DWORD rdlen, toread = len;
  +            DWORD cblen = 0;
               LPBYTE buff = (LPBYTE) b;
   
               /* 
  @@ -199,19 +200,26 @@
               /*
                * Now try to read from the client ...
                */
  -            if (lpEcb->ReadClient(lpEcb->ConnID, buff, &rdlen)) {
  -                *actually_read += rdlen;
  -                env->l->jkLog(env, env->l, JK_LOG_DEBUG,
  -                              "jk_ws_service_t::read ReadClient readed %d (actually %d) bytes\n",
  -                              rdlen, *actually_read);
  +            
  +            while (cblen < rdlen) {
  +                toread = rdlen - cblen;
  +                if (lpEcb->ReadClient(lpEcb->ConnID, buff + cblen, &toread)) {
  +                    if (toread == 0)
  +                        break;
  +                    cblen += toread;
  +                    env->l->jkLog(env, env->l, JK_LOG_DEBUG,
  +                                  "jk_ws_service_t::read ReadClient readed %d (actually %d) bytes\n",
  +                                  toread, *actually_read + cblen);
   
  +                }
  +                else {
  +                    env->l->jkLog(env, env->l, JK_LOG_ERROR,
  +                                  "jk_ws_service_t::read, ReadClient failed\n");
  +                    /* XXX: We should return here HSE_STATUS_ERROR */
  +                    break;
  +                }
               }
  -            else {
  -                env->l->jkLog(env, env->l, JK_LOG_ERROR,
  -                              "jk_ws_service_t::read, ReadClient failed\n");
  -                /* XXX: We should return here HSE_STATUS_ERROR */
  -                return JK_OK;
  -            }
  +            *actually_read += cblen;
           }
           env->l->jkLog(env, env->l, JK_LOG_DEBUG,
                         "jk_ws_service_t::read actually readed %d from already %d of total %d bytes\n",
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org