Fixed custom headers and Basic authorization, added support for redirection, functional file download interface can be used for SW updates and more.
Dependents: Sample_HTTPClient Sample_HTTPClient LWM2M_NanoService_Ethernet LWM2M_NanoService_Ethernet ... more
Fork of HTTPClient by
More recent changes - added iCal processing.
Derivative of a derivative, however this one works when it comes to supplying Basic authorization to access a protected resource. Some additional changes to the debug interface to clean it up for consistency with many other components I have.
Revision 37:74c1c4527f70, committed 2016-12-17
- Comitter:
- WiredHome
- Date:
- Sat Dec 17 15:19:55 2016 +0000
- Parent:
- 36:a5c13e512b78
- Child:
- 38:2ef07232f65c
- Commit message:
- Integrated the Json interface.
Changed in this revision
--- a/HTTPClient.cpp Tue Jan 26 11:44:35 2016 +0000 +++ b/HTTPClient.cpp Sat Dec 17 15:19:55 2016 +0000 @@ -271,10 +271,11 @@ //Send data (if available) if( pDataOut != NULL ) { - DBG("Sending data"); + DBG("Sending data [%s]", buf); while(true) { size_t writtenLen = 0; pDataOut->read(buf, CHUNK_SIZE, &trfLen); + DBG(" trfLen: %d", trfLen); if( pDataOut->getIsChunked() ) { //Write chunk header char chunkHeader[16]; @@ -564,15 +565,16 @@ if(len == 0) { len = strlen(buf); } - DBG("send(%s,%d)", buf, len); + DBG("send(\r\n%s,%d)", buf, len); size_t writtenLen = 0; if(!m_sock.is_connected()) { WARN("Connection was closed by server"); return HTTP_CLOSED; //Connection was closed by server } - + DBG("a"); m_sock.set_blocking(false, m_timeout); + DBG("b"); int ret = m_sock.send_all(buf, len); if(ret > 0) { writtenLen += ret; @@ -583,7 +585,6 @@ ERR("Connection error (send returned %d)", ret); return HTTP_CONN; } - DBG("Written %d bytes", writtenLen); return HTTP_OK; } @@ -592,6 +593,8 @@ { char* schemePtr = (char*) url; char* hostPtr = (char*) strstr(url, "://"); + INFO("parseURL(%s,%s,%d,%s,%d,%d,%s,%d", + url, scheme, maxSchemeLen, host, maxHostLen, *port, path, maxPathLen); if(hostPtr == NULL) { WARN("Could not find host"); return HTTP_PARSE; //URL is invalid @@ -619,6 +622,8 @@ } else { *port=0; } + INFO(" hostPtr: %s", hostPtr); + INFO(" hostLen: %d", hostLen); char* pathPtr = strchr(hostPtr, '/'); if( hostLen == 0 ) { hostLen = pathPtr - hostPtr;
--- a/HTTPClient.h Tue Jan 26 11:44:35 2016 +0000 +++ b/HTTPClient.h Sat Dec 17 15:19:55 2016 +0000 @@ -195,5 +195,6 @@ #include "data/HTTPText.h" #include "data/HTTPMap.h" #include "data/HTTPFile.h" +#include "data/HTTPJson.h" #endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/HTTPJson.cpp Sat Dec 17 15:19:55 2016 +0000 @@ -0,0 +1,41 @@ +/* HTTPJson.cpp */ +/* Copyright (C) 2012 mbed.org, MIT License + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "HTTPJson.h" + +#define OK 0 + +using std::strncpy; + +HTTPJson::HTTPJson(char* json_str) : HTTPText(json_str) +{ + +} + +HTTPJson::HTTPJson(char* json_str, size_t size) : HTTPText(json_str,size) +{ + +} + +/*virtual*/ int HTTPJson::getDataType(char* type, size_t maxTypeLen) //Internet media type for Content-Type header +{ + strncpy(type, "application/json", maxTypeLen-1); + type[maxTypeLen-1] = '\0'; + return OK; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/HTTPJson.h Sat Dec 17 15:19:55 2016 +0000 @@ -0,0 +1,46 @@ +/* HTTPJson.h */ +/* Copyright (C) 2012 mbed.org, MIT License + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef HTTPJSON_H_ +#define HTTPJSON_H_ + +#include "HTTPText.h" + +/** A data endpoint to store JSON text +*/ +class HTTPJson : public HTTPText +{ +public: + /** Create an HTTPJson instance for output + * @param json_str JSON string to be transmitted + */ + HTTPJson(char* json_str); + + /** Create an HTTPText instance for input + * @param json_str Buffer to store the incoming JSON string + * @param size Size of the buffer + */ + HTTPJson(char* json_str, size_t size); + +protected: + virtual int getDataType(char* type, size_t maxTypeLen); //Internet media type for Content-Type header +}; + +#endif /* HTTPJSON_H_ */