DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4121>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4121

BinHTTPUrlInputStream  needds to read entire HTTP header ...

           Summary: BinHTTPUrlInputStream  needds to read entire HTTP header
                    ...
           Product: Xerces-C++
           Version: 1.5.1
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Major
          Priority: Other
         Component: Utilities
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


Before the constructor 'completes' the ctor, it *must* read the entire HTTP 
header response from the socket.  I noticed that *sometimes* this would not 
occur, and then when the code managed to get into readBytes() it would return 
information from the HTTP header.  In my case, the made the scanDoc() method 
fail as that is expecting to see some sort of DECL statment I think.

The patch is attached.  It's not perfect for you - because I've also fixed up 
two other bugs (one is already fixed in CVS here:
 * $Log: BinHTTPURLInputStream.cpp,v $
 * Revision 1.7  2001/09/04 17:52:57  peiyongz
 * Bugzilla# 3170: patch from Kevin Philips to handle Query in XMLURL.

And another is tiny: the HTTP header does not separate the port and host with a 
colon - simple!

The diff is attached :

59,61d58
<  * Revision 1.7  2001/09/04 17:52:57  peiyongz
<  * Bugzilla# 3170: patch from Kevin Philips to handle Query in XMLURL.
<  *
109d105
< #include <util/Janitor.hpp>
110a107,108
> #include <util/Janitor.hpp>
> #include <crtdbg.h>
256d253
< 
279a277
> 
282d279
<     ArrayJanitor<char>  janBuf3(fragmentAsCharStar);
285,287c282
<     char*               queryAsCharStar = 0;
<     if (query)
<         queryAsCharStar = XMLString::transcode(query);
---
>       char *                          queryAsCharStar = XMLString::transcode
(query);
289a285,286
>     ArrayJanitor<char>  janBuf3(fragmentAsCharStar);
> 
337a335,336
>       // Set a flag so we know that the headers have not been read yet.
>       bool fHeaderRead = false;
342a342,344
> 
>       memset(fBuffer, 0, sizeof(fBuffer));
> 
346c348
<     if (queryAsCharStar != 0)
---
>     if (fragmentAsCharStar != 0)
348,349c350
<       fBuffer[strlen(fBuffer)] = chQuestion;
<         strcat(fBuffer, queryAsCharStar);
---
>         strcat(fBuffer, fragmentAsCharStar);
352c353
<     if (fragmentAsCharStar != 0)
---
>       if(queryAsCharStar != 0)
354c355,356
<         strcat(fBuffer, fragmentAsCharStar);
---
>               fBuffer[strlen(fBuffer)] = chQuestion;
>               strcat(fBuffer, queryAsCharStar);
355a358
> 
358d360
< 
362a365
>               strcat(fBuffer, ":");
378d380
< 
381a384
>       memset(fBuffer, 0, sizeof(fBuffer));
391a395,396
>       do
>       {
396a402
> 
400a407,408
> 
>                       fHeaderRead = true;
408a417,418
> 
>                               fHeaderRead = true;
411c421,428
<             fBufferPos = fBufferEnd;
---
>                       {
>                               // 
>                               // Header is not yet read, do another recv() to 
get more data...
>                               aLent = recv(s, fBufferEnd, (sizeof(fBuffer) - 
1) - (fBufferEnd - fBuffer), 0);
>                               if (aLent == SOCKET_ERROR || aLent == 0)
>                               {
>                                       // Call WSAGetLastError() to get the 
error number.
>                                       ThrowXML(NetAccessorException, 
XMLExcepts::NetAcc_ReadSocket);
413a431,436
>                               fBufferEnd = fBufferEnd + aLent;
>                           *fBufferEnd = 0;
>                       }
>               }
>       } while(fHeaderRead == false);
> 
448d470
< 
481d502
<

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to