Skip to content

Commit

Permalink
handle possible dead lock in HTTP client see: esp8266#1520
Browse files Browse the repository at this point in the history
  • Loading branch information
Links2004 committed Jan 29, 2016
1 parent 27f1a63 commit 1060db9
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ void HTTPClient::setAuthorization(const char * auth) {

/**
* set the timeout for the TCP connection
* @param timeout unsigned int
* @param timeout unsigned int
*/
void HTTPClient::setTimeout(uint16_t timeout) {
_tcpTimeout = timeout;
Expand All @@ -273,14 +273,12 @@ void HTTPClient::setTimeout(uint16_t timeout) {
}
}



/**
* use HTTP1.0
* @param timeout
*/
void HTTPClient::useHTTP10(bool useHTTP10) {
_useHTTP10 = useHTTP10;
_useHTTP10 = useHTTP10;
}

/**
Expand Down Expand Up @@ -392,7 +390,6 @@ int HTTPClient::sendRequest(const char * type, Stream * stream, size_t size) {
// create buffer for read
uint8_t * buff = (uint8_t *) malloc(buff_size);


if(buff) {
// read all data from stream and send it to server
while(connected() && (stream->available() > -1) && (len > 0 || len == -1)) {
Expand Down Expand Up @@ -471,8 +468,7 @@ int HTTPClient::sendRequest(const char * type, Stream * stream, size_t size) {
free(buff);

if(size && (int) size != bytesWritten) {
DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] Stream payload bytesWritten %d and size %d mismatch!.\n", bytesWritten, size);
DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] ERROR SEND PAYLOAD FAILED!");
DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] Stream payload bytesWritten %d and size %d mismatch!.\n", bytesWritten, size); DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] ERROR SEND PAYLOAD FAILED!");
return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED);
} else {
DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] Stream payload written: %d\n", bytesWritten);
Expand Down Expand Up @@ -829,17 +825,21 @@ int HTTPClient::handleHeaderResponse() {
if(!connected()) {
return HTTPC_ERROR_NOT_CONNECTED;
}

String transferEncoding;
_returnCode = -1;
_size = -1;
_transferEncoding = HTTPC_TE_IDENTITY;
unsigned long lastDataTime = millis();

while(connected()) {
size_t len = _tcp->available();
if(len > 0) {
String headerLine = _tcp->readStringUntil('\n');
headerLine.trim(); // remove \r

lastDataTime = millis();

DEBUG_HTTPCLIENT("[HTTP-Client][handleHeaderResponse] RX: '%s'\n", headerLine.c_str());

if(headerLine.startsWith("HTTP/1.")) {
Expand Down Expand Up @@ -895,15 +895,16 @@ int HTTPClient::handleHeaderResponse() {
}

} else {
if((millis() - lastDataTime) > _tcpTimeout) {
return HTTPC_ERROR_READ_TIMEOUT;
}
delay(0);
}
}

return HTTPC_ERROR_CONNECTION_LOST;
}



/**
* write one Data Block to Stream
* @param stream Stream *
Expand Down

0 comments on commit 1060db9

Please sign in to comment.