Diffstat (limited to 'noncore/net/ubrowser/httpcomm.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/net/ubrowser/httpcomm.cpp | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/noncore/net/ubrowser/httpcomm.cpp b/noncore/net/ubrowser/httpcomm.cpp index 51068db..54f7acf 100644 --- a/noncore/net/ubrowser/httpcomm.cpp +++ b/noncore/net/ubrowser/httpcomm.cpp @@ -115,108 +115,147 @@ void HttpComm::incoming() bRead++; // printf("bRead1: %d\n", bRead); } } else { body += tempString; bRead+=ba; // printf("bRead2: %d\n", bRead); } if(bRead >= length) { printf("HttpComm::incoming: finished reading body\n"); processBody(); socket->close(); } } else { QString tempQString = tempString; //remove the http header, if one exists if(j != 0) { - tempQString.remove(0, j); + tempQString.remove(0, j+1); + printf("HttpComm::incoming: removing http header. Result: \n%s", tempQString.latin1()); } while(!done) { switch(status) { //case 0=need to read chunk length case 0: j = tempQString.find('\n'); sclength = tempQString; sclength.truncate(j); clength = sclength.toUInt(0, 16); printf("HttpComm::Incoming: chunk length: %d\n", clength); + //end of data if(clength==0) { processBody(); done=true; } + //still more, but it hasnt been recieved yet if(ba <= j) { status=1; done=true; -// break; + break; } + //still more data waiting else { done=false; + //remove the chunk length header + tempQString.remove(0,j+1); } bRead=0; - break; +// break; //if there is more fall through to: //chunk length just read, still more in tempQstring case 1: //the current data extends beyond the end of the chunk if(bRead + tempQString.length() > clength) { QString newTQstring = tempQString; newTQstring.truncate(clength-bRead); + bRead+=newTQstring.length(); body+=newTQstring; printf("HttpComm::incoming: start new body piece 1: \n"); printf("%s", newTQstring.latin1() ); printf("HttpComm::incoming: end new body piece 1.\n"); status=0; j=clength-bRead; done=false; - break; +// break; } //the chunk extends beyond the current data; else { body+=tempQString; bRead+=ba; printf("HttpComm::incoming: start new body piece 2: \n"); printf("%s", tempQString.latin1() ); printf("HttpComm::incoming: end new body piece 2.\n"); done=true; + status=2; +// break; + } break; + //just got data in, continue reading chunk + case 2: + //the current data extends beyond the end of the chunk + if(bRead + tempQString.length() > clength) + { + QString newTQstring = tempQString; + newTQstring.truncate(clength-bRead); + bRead+=newTQstring.length(); + body+=newTQstring; + printf("HttpComm::incoming: start new body piece 3: \n"); + printf("%s", newTQstring.latin1() ); + printf("HttpComm::incoming: end new body piece 3.\n"); + status=0; + j=clength-bRead; + done=false; +// break; + } + //the chunk extends beyond the current data; + else + { + body+=tempQString; + bRead+=ba; + printf("HttpComm::incoming: start new body piece 4: \n"); + printf("%s", tempQString.latin1() ); + printf("HttpComm::incoming: end new body piece 4.\n"); + done=true; + status=2; +// break; } break; } + printf("HttpComm::incoming: chunked encoding: bRead: %d\n", bRead); } } } delete tempString; } void HttpComm::connectionClosed() { printf("HttpComm::connectionClosed: connection closed\n"); processBody(); } void HttpComm::parseHeader() { QStringList headerLines, tempList; int i; printf("HttpComm::parseHeader: start header\n\n"); printf("%s", header.latin1()); printf("HttpComm::parseHeader: end header\n"); headerLines = QStringList::split('\n', header); for(i=0; i<headerLines.count(); i++) |