Okundu Omeni
/
wifi-https-ble-sm-uart-atcmd-5-13-1
this is using the mbed os version 5-13-1
Diff: source/WiFiManager.cpp
- Revision:
- 102:9748f290a1a5
- Parent:
- 101:1cfd468e5009
- Child:
- 103:7b566b522427
--- a/source/WiFiManager.cpp Mon Apr 22 19:36:31 2019 +0000 +++ b/source/WiFiManager.cpp Wed Apr 24 17:34:17 2019 +0000 @@ -691,7 +691,7 @@ } else { if(http_response_hdr_sent == false && chunkNum==1){ // only do this for first chunk - bool status = copyResponseHdr2Queue(); + bool status = copyResponseHdr2Queue(buf); if(status == true){ printf("[WIFI-MAN] Http Response header copied to response buffer [bytes = %d] \r\n",at_data_resp->dataLen); hdrLen = at_data_resp->dataLen; @@ -719,58 +719,40 @@ at_data_resp = NULL; } -bool WiFiManager::copyResponseHdr2Queue() +bool WiFiManager::copyResponseHdr2Queue(const uint8_t * buf) { - int numChars = 0; - // create message pointer for response header generation - char * msgPtr = (char *)at_data_resp->buffer; - // do status line - int wait_cnt = 0; - while(http_response == NULL && wait_cnt<100) + const char *arbPtr = (const char *)buf - MAX_HTTP_HDR_LEN; + const char *hdrPtr; + int len; + bool hdrFound = false; + int i; + for(i=0;i<(MAX_HTTP_HDR_LEN-50);i++) { - printf("[WIFI-MAN] response pointer NULL waiting for %dms so far!!\r\n", 10*wait_cnt++); - wait_ms(10); - //return false; + // get location of start of the http header string + hdrPtr = strstr(&arbPtr[i], HTTP_HEADER_START_LINE); + len = strlen(HTTP_HEADER_START_LINE); + // validate that header string + if((strstr(&arbPtr[i+len], HTTP_HEADER_START_LINE) == NULL || + (strstr(&arbPtr[i+len], HTTP_HEADER_START_LINE) > (const char*)buf)) && // + strstr(&arbPtr[i+len], HTTP_HEADER_CONTENT_TYPE) != NULL && + strstr(&arbPtr[i+len], HTTP_HEADER_CONTENT_LEN) != NULL && + hdrPtr != NULL) + { + hdrFound = true; + break; + } } - if(http_response == NULL) + // calculate header length + int hdrLen = (const char*) buf -hdrPtr; + // copy header + memcpy(at_data_resp->buffer, (const uint8_t *) hdrPtr, hdrLen); + printf("[i = %d] This is the header\r\n%s\r\n", i, hdrPtr); + if(hdrFound == false) { - printf("[WIFI-MAN] copy failed: response pointer NULL!!\r\n"); + printf("[WIFI-MAN] copy failed: HTTP header not found!!\r\n"); return false; } - printf("before getting HTTP status line http_response = 0x%08X\n", http_response); - numChars = sprintf(msgPtr, "HTTP/1.1 %d %s\r\n", http_response->get_status_code(), - http_response->get_status_message().c_str()); - msgPtr += numChars; - printf("before getting HTTP headers length\n"); - - int hdrsLen = http_response->get_headers_length(); - printf("after getting HTTP headers length = %d\n", hdrsLen); - //print_memory_info(); - if(hdrsLen <= 1) - { - printf("copy failed: Header Line = [%s]", msgPtr); - return false; - } - char * hdrField; - char * hdrValue; - for (size_t ix = 0; ix < hdrsLen; ix++) { - int sLen = http_response->get_headers_fields()[ix]->size()+1; - hdrField = new char [sLen]; - std::strcpy (hdrField, http_response->get_headers_fields()[ix]->c_str()); - hdrValue = new char [sLen]; - std::strcpy (hdrValue, http_response->get_headers_values()[ix]->c_str()); - numChars = sprintf(msgPtr, "%s: %s\r\n", hdrField, hdrValue); - delete hdrField; - delete hdrValue; - msgPtr += numChars; - } - numChars = sprintf(msgPtr, "\r\n"); - msgPtr += numChars; - // print out generated header - printf("[WiFi MAN] generated response header:\n"); - printf("%s\r\n", (char *)at_data_resp->buffer); - // calculate header length - at_data_resp->dataLen = (msgPtr - (char *)at_data_resp->buffer); + at_data_resp->dataLen = hdrLen; return true; } @@ -829,6 +811,14 @@ void WiFiManager::body_callback(const char *at, uint32_t length) { printf("\n Chunked response: Chunk %d : Total Bytes = %d\n", chunkNum , length); chunkNum++; + if(http_response == NULL) + { + printf("[WIFI-MAN] response pointer NULL!!\r\n"); + } + else + { + printf("[WIFI-MAN] response pointer NULL not!!\r\n"); + } sendResponseDownloadData(AT_HTTPS_RESP_DOWNLOAD, (uint8_t *)at, length); } @@ -1021,6 +1011,7 @@ } //_wmutex.lock(); http_response = https_request->send(http_req_cfg->body, bodyLen); + //https_request->send(http_req_cfg->body, bodyLen); //_wmutex.unlock(); } #else