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.
Dependencies: CyaSSL
Dependents: MTS-Socket MTS-Socket
Diff: HTTPClient.cpp
- Revision:
- 19:1e2f05809eb1
- Parent:
- 18:d89df40b4cf3
- Child:
- 20:bec882d85856
--- a/HTTPClient.cpp Mon Apr 07 23:41:06 2014 +0000
+++ b/HTTPClient.cpp Tue Apr 08 09:09:54 2014 +0000
@@ -51,16 +51,7 @@
#include "HTTPClient.h"
#include "TCPSocketConnection.h"
-class TCPSocketConnection_fd: public TCPSocketConnection
-{
-public:
- int get_fd() {
- return _sock_fd ;
- }
-} ;
-
-static TCPSocketConnection_fd m_sock;
-
+static TCPSocketConnection m_sock;
#define CHUNK_SIZE 256
#define SEND_BUF_SIZE 512
static char send_buf[SEND_BUF_SIZE] ;
@@ -169,10 +160,14 @@
void HTTPClient::cyassl_free(void)
{
- if(ssl)
+ if(ssl) {
CyaSSL_free(ssl) ;
- if(ctx)
+ ssl = NULL ;
+ }
+ if(ctx) {
CyaSSL_CTX_free(ctx) ;
+ ctx = NULL ;
+ }
}
@@ -213,7 +208,6 @@
//Connect
DBG("Connecting socket to server");
- sockfd = m_sock.get_fd() ;
#define MAX_RETRY 5
int retry ;
@@ -230,27 +224,28 @@
if(port == HTTPS_PORT) {
/* Start SSL connect */
- ctx = CyaSSL_CTX_new(
- CyaTLSv1_2_client_method
- //CyaSSLv3_client_method
- ());
- if (ctx == NULL) {
- ERR("unable to get ctx");
- return HTTP_CONN;
+ if(ctx == NULL) {
+ ctx = CyaSSL_CTX_new(
+ CyaTLSv1_2_client_method
+ //CyaSSLv3_client_method
+ ());
+ if (ctx == NULL) {
+ ERR("unable to get ctx");
+ return HTTP_CONN;
+ }
+ CyaSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
+ CyaSSL_SetIORecv(ctx, SocketReceive) ;
+ CyaSSL_SetIOSend(ctx, SocketSend) ;
}
- CyaSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
-
- ssl = CyaSSL_new(ctx);
if (ssl == NULL) {
- ERR("unable to get SSL object");
- cyassl_free() ;
- return HTTP_CONN;
+ ssl = CyaSSL_new(ctx);
+ if (ssl == NULL) {
+ ERR("unable to get SSL object");
+ cyassl_free() ;
+ return HTTP_CONN;
+ }
}
- CyaSSL_SetVersion(ssl, CYASSL_TLSV1_2) ;
- CyaSSL_set_fd(ssl, sockfd);
- CyaSSL_SetIORecv(ctx, SocketReceive) ;
- CyaSSL_SetIOSend(ctx, SocketSend) ;
DBG("ctx=%x, ssl=%x, ssl->ctx->CBIORecv, CBIOSend=%x, %x\n",
ctx, ssl, SocketReceive, SocketSend ) ;
if (CyaSSL_connect(ssl) != SSL_SUCCESS) {
@@ -532,15 +527,15 @@
}
}
-
- cyassl_free() ;
+ CyaSSL_free(ssl) ;
+ ssl = NULL ;
m_sock.close();
DBG("Completed HTTP transaction");
return HTTP_OK;
}
-HTTPResult HTTPClient::recv(char* buf, size_t minLen, size_t maxLen, size_t* pReadLen) //0 on success, err code on failure
+HTTPResult HTTPClient::recv(char* buf, size_t minLen, size_t maxLen, size_t* pReadLen) //0 on success, err code on failure
{
DBG("Trying to read between %d and %d bytes", minLen, maxLen);
size_t readLen = 0;
@@ -603,7 +598,7 @@
return HTTP_OK;
}
-HTTPResult HTTPClient::send(char* buf, size_t len) //0 on success, err code on failure
+HTTPResult HTTPClient::send(char* buf, size_t len) //0 on success, err code on failure
{
HTTPResult ret ;
int cp_len ;
@@ -630,7 +625,7 @@
return HTTP_OK ;
}
-HTTPResult HTTPClient::flush() //0 on success, err code on failure
+HTTPResult HTTPClient::flush() //0 on success, err code on failure
{
int len ;
char * buf ;
@@ -672,7 +667,7 @@
return HTTP_OK;
}
-HTTPResult HTTPClient::parseURL(const char* url, char* scheme, size_t maxSchemeLen, char* host, size_t maxHostLen, uint16_t* port, char* path, size_t maxPathLen) //Parse URL
+HTTPResult HTTPClient::parseURL(const char* url, char* scheme, size_t maxSchemeLen, char* host, size_t maxHostLen, uint16_t* port, char* path, size_t maxPathLen) //Parse URL
{
char* schemePtr = (char*) url;
char* hostPtr = (char*) strstr(url, "://");