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:
- 34:13920d48893d
- Parent:
- 33:3b2809748a9e
- Child:
- 37:293e8eae4230
--- a/HTTPClient.cpp Wed Dec 31 22:26:17 2014 +0000
+++ b/HTTPClient.cpp Tue Jan 06 15:31:45 2015 +0000
@@ -78,14 +78,16 @@
static int SocketSend(CYASSL* ssl, char *buf, int sz, void *ctx)
{
int n ;
-
- wait(0.1) ;
+
+ wait(0.1);
n = m_sock->send(buf, sz);
if(n > 0) {
- wait(0.3) ;
- return n ;
- } else ERR("SocketSend:%d/%d\n", n, sz);
- return n ;
+ wait(0.3);
+ return n;
+ } else {
+ ERR("SocketSend:%d/%d\n", n, sz);
+ }
+ return n;
}
static void base64enc(char *out, const char *in) {
@@ -278,6 +280,9 @@
for(retry=0; retry<MAX_RETRY; retry++) {
int ret = m_sock->connect(host, port);
if(ret == 0)break ;
+ if(m_sock->is_connected()) {
+ m_sock->close(true);
+ }
}
if(retry == MAX_RETRY) {
m_sock->close();
@@ -314,7 +319,7 @@
}
}
- DBG("ctx=%x, ssl=%x, ssl->ctx->CBIORecv, CBIOSend=%x, %x\n",
+ DBG("ctx=%x, ssl=%x, ssl->ctx->CBIORecv, CBIOSend=%x, %x\r\n",
ctx, ssl, SocketReceive, SocketSend ) ;
if (CyaSSL_connect(ssl) != SSL_SUCCESS) {
ERR("SSL_connect failed");
@@ -611,7 +616,7 @@
}
cyassl_free() ;
- m_sock->close();
+ m_sock->close(true);
DBG("Completed HTTP transaction");
if(redirect)return HTTP_REDIRECT ;
else return HTTP_OK;
@@ -677,6 +682,7 @@
}
DBG("Read %d bytes", readLen);
*pReadLen = readLen;
+ m_sock->set_blocking(false, m_timeout);
return HTTP_OK;
}
@@ -821,14 +827,20 @@
HTTPResult ret ;
char b_auth[(int)((AUTHB_SIZE+3)*4/3+1)] ;
char base64buff[AUTHB_SIZE+3] ;
-
+
ret = send("Authorization: Basic ") ;
CHECK_CONN_ERR(ret);
sprintf(base64buff, "%s:%s", m_basicAuthUser, m_basicAuthPassword) ;
DBG("bAuth: %s", base64buff) ;
base64enc(b_auth, base64buff) ;
- b_auth[strlen(b_auth)+1] = '\0' ;
- b_auth[strlen(b_auth)] = '\n' ;
+ printf("size of b_auth %d, strlen of b_auth %d\r\n", sizeof(b_auth), strlen(b_auth));
+ int b_auth_len = strlen(b_auth);
+ if(b_auth_len + 3 >= sizeof(b_auth)) { //\r\n\0 characters make up the +3
+ ERR("The encoded line is larger than the buffer that holds it");
+ }
+ b_auth[b_auth_len + 2] = '\0' ;
+ b_auth[b_auth_len + 1] = '\n' ;
+ b_auth[b_auth_len] = '\r' ;
DBG("b_auth:%s", b_auth) ;
ret = send(b_auth) ;
CHECK_CONN_ERR(ret);