Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of HTTPClient-SSL by
Diff: HTTPClient.cpp
- Revision:
- 4:c071b05ac026
- Parent:
- 3:5aef7584de4b
- Child:
- 5:791fc3dcb6c4
diff -r 5aef7584de4b -r c071b05ac026 HTTPClient.cpp --- a/HTTPClient.cpp Thu Apr 26 14:23:15 2012 +0000 +++ b/HTTPClient.cpp Thu May 24 16:27:32 2012 +0000 @@ -154,12 +154,6 @@ return NET_CONN; } - size_t recvContentLength = 0; - bool recvChunked = false; - char buf[CHUNK_SIZE]; - size_t trfLen; - int crlfPos; - //Send all headers //Send default headers @@ -191,6 +185,9 @@ ret = send("\r\n"); if(ret != OK) goto connerr; + char buf[CHUNK_SIZE]; + size_t trfLen; + //Send data (if POST) if( (method == HTTP_POST) && (pDataOut != NULL) ) { @@ -240,7 +237,7 @@ //Receive response DBG("Receiving response"); - ret = recv(buf, CHUNK_SIZE, CHUNK_SIZE, &trfLen); //Read n bytes + ret = recv(buf, CHUNK_SIZE - 1, CHUNK_SIZE - 1, &trfLen); //Read n bytes if(ret != OK) goto connerr; buf[trfLen] = '\0'; @@ -251,7 +248,7 @@ goto prtclerr; } - crlfPos = crlfPtr - buf; + int crlfPos = crlfPtr - buf; buf[crlfPos] = '\0'; //Parse HTTP response @@ -271,22 +268,24 @@ DBG("Reading headers"); - memmove(buf, &buf[crlfPos+2], trfLen - (crlfPos + 2)); + memmove(buf, &buf[crlfPos+2], trfLen - (crlfPos + 2) + 1); //Be sure to move NULL-terminating char as well trfLen -= (crlfPos + 2); + size_t recvContentLength = 0; + bool recvChunked = false; //Now get headers while( true ) { crlfPtr = strstr(buf, "\r\n"); if(crlfPtr == NULL) { - if( trfLen < CHUNK_SIZE ) + if( trfLen < CHUNK_SIZE - 1 ) { size_t newTrfLen; ret = recv(buf + trfLen, 1, CHUNK_SIZE - trfLen - 1, &newTrfLen); trfLen += newTrfLen; buf[trfLen] = '\0'; - DBG("In buf: [%s]", buf); + DBG("Read %d chars; In buf: [%s]", newTrfLen, buf); if(ret != OK) goto connerr; continue; } @@ -301,17 +300,20 @@ if(crlfPos == 0) //End of headers { DBG("Headers read"); - memmove(buf, &buf[2], trfLen - 2); + memmove(buf, &buf[2], trfLen - 2 + 1); //Be sure to move NULL-terminating char as well trfLen -= 2; break; } buf[crlfPos] = '\0'; - char key[16]; - char value[16]; + char key[32]; + char value[32]; - int n = sscanf(buf, "%16[^:]: %16[^\r\n]", key, value); + key[31] = '\0'; + value[31] = '\0'; + + int n = sscanf(buf, "%31[^:]: %31[^\r\n]", key, value); if ( n == 2 ) { DBG("Read header : %s: %s\n", key, value); @@ -333,7 +335,7 @@ pDataIn->setDataType(value); } - memmove(buf, &buf[crlfPos+2], trfLen - (crlfPos + 2)); + memmove(buf, &buf[crlfPos+2], trfLen - (crlfPos + 2) + 1); //Be sure to move NULL-terminating char as well trfLen -= (crlfPos + 2); } @@ -385,7 +387,7 @@ goto prtclerr; } - memmove(buf, &buf[crlfPos+2], trfLen - (crlfPos + 2)); + memmove(buf, &buf[crlfPos+2], trfLen - (crlfPos + 2)); //Not need to move NULL-terminating char any more trfLen -= (crlfPos + 2); if( readLen == 0 ) @@ -419,7 +421,6 @@ { ret = recv(buf, 1, CHUNK_SIZE - trfLen - 1, &trfLen); if(ret != OK) goto connerr; - } } while(readLen); @@ -454,18 +455,15 @@ return OK; connerr: - { socket::close(m_sock); ERR("Connection error (%d)", ret); - return NET_CONN; - } - + return NET_CONN; + prtclerr: - { socket::close(m_sock); ERR("Protocol error"); - return NET_PROTOCOL; - } + return NET_PROTOCOL; + } int HTTPClient::recv(char* buf, size_t minLen, size_t maxLen, size_t* pReadLen) //0 on success, err code on failure