|
|
@ -65,7 +65,7 @@ static int webclient_recv(struct webclient_session* session, unsigned char *buff
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return mbedtls_client_read(session->tls_session, buffer, len);
|
|
|
|
return mbedtls_client_read(session->tls_session, buffer, len);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
return recv(session->socket, buffer, len, flag);
|
|
|
|
return recv(session->socket, buffer, len, flag);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -86,8 +86,8 @@ static int webclient_read_line(struct webclient_session *session, char *buffer,
|
|
|
|
if (session->is_tls && (rc == MBEDTLS_ERR_SSL_WANT_READ || rc == MBEDTLS_ERR_SSL_WANT_WRITE))
|
|
|
|
if (session->is_tls && (rc == MBEDTLS_ERR_SSL_WANT_READ || rc == MBEDTLS_ERR_SSL_WANT_WRITE))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (rc <= 0)
|
|
|
|
if (rc <= 0)
|
|
|
|
return rc;
|
|
|
|
return rc;
|
|
|
|
|
|
|
|
|
|
|
@ -195,7 +195,7 @@ static int webclient_resolve_address(struct webclient_session *session, struct a
|
|
|
|
}
|
|
|
|
}
|
|
|
|
host_addr_len = ptr - host_addr;
|
|
|
|
host_addr_len = ptr - host_addr;
|
|
|
|
*request = (char *) ptr;
|
|
|
|
*request = (char *) ptr;
|
|
|
|
|
|
|
|
|
|
|
|
/* resolve port */
|
|
|
|
/* resolve port */
|
|
|
|
port_ptr = rt_strstr(host_addr, ":");
|
|
|
|
port_ptr = rt_strstr(host_addr, ":");
|
|
|
|
if (port_ptr && port_ptr < ptr)
|
|
|
|
if (port_ptr && port_ptr < ptr)
|
|
|
@ -241,7 +241,7 @@ static int webclient_resolve_address(struct webclient_session *session, struct a
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return -WEBCLIENT_NOMEM;
|
|
|
|
return -WEBCLIENT_NOMEM;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return rc;
|
|
|
|
return rc;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -356,7 +356,7 @@ static int webclient_connect(struct webclient_session *session, const char *URI)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
LOG_E("connect failed, https client open URI(%s) failed!", URI);
|
|
|
|
LOG_E("connect failed, https client open URI(%s) failed!", URI);
|
|
|
|
return -WEBCLIENT_ERROR;
|
|
|
|
return -WEBCLIENT_ERROR;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
session->is_tls = RT_TRUE;
|
|
|
|
session->is_tls = RT_TRUE;
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
LOG_E("not support https connect, please enable webclient https configure!");
|
|
|
|
LOG_E("not support https connect, please enable webclient https configure!");
|
|
|
@ -673,17 +673,17 @@ static int webclient_send_header(struct webclient_session *session, int method)
|
|
|
|
webclient_write(session, (unsigned char *) session->header->buffer, session->header->length);
|
|
|
|
webclient_write(session, (unsigned char *) session->header->buffer, session->header->length);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* get and echo request header data */
|
|
|
|
/* get and echo request header data */
|
|
|
|
{
|
|
|
|
{
|
|
|
|
char *header_str, *header_ptr;
|
|
|
|
char *header_str, *header_ptr;
|
|
|
|
int header_line_len;
|
|
|
|
int header_line_len;
|
|
|
|
LOG_D("request header:");
|
|
|
|
LOG_D("request header:");
|
|
|
|
|
|
|
|
|
|
|
|
for(header_str = session->header->buffer; (header_ptr = rt_strstr(header_str, "\r\n")) != RT_NULL; )
|
|
|
|
for(header_str = session->header->buffer; (header_ptr = rt_strstr(header_str, "\r\n")) != RT_NULL; )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
header_line_len = header_ptr - header_str;
|
|
|
|
header_line_len = header_ptr - header_str;
|
|
|
|
|
|
|
|
|
|
|
|
if (header_line_len > 0)
|
|
|
|
if (header_line_len > 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
LOG_D("%.*s", header_line_len, header_str);
|
|
|
|
LOG_D("%.*s", header_line_len, header_str);
|
|
|
@ -694,7 +694,7 @@ static int webclient_send_header(struct webclient_session *session, int method)
|
|
|
|
LOG_RAW("\n");
|
|
|
|
LOG_RAW("\n");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
__exit:
|
|
|
|
__exit:
|
|
|
|
return rc;
|
|
|
|
return rc;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -746,7 +746,7 @@ int webclient_handle_response(struct webclient_session *session)
|
|
|
|
|
|
|
|
|
|
|
|
/* echo response header data */
|
|
|
|
/* echo response header data */
|
|
|
|
LOG_D("%s", mime_buffer);
|
|
|
|
LOG_D("%s", mime_buffer);
|
|
|
|
|
|
|
|
|
|
|
|
session->header->length += rc;
|
|
|
|
session->header->length += rc;
|
|
|
|
|
|
|
|
|
|
|
|
if (session->header->length >= session->header->size)
|
|
|
|
if (session->header->length >= session->header->size)
|
|
|
@ -843,7 +843,7 @@ struct webclient_session *webclient_session_create(size_t header_sz)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
session->header->size = header_sz;
|
|
|
|
session->header->size = header_sz;
|
|
|
|
session->header->buffer = (char *) web_malloc(header_sz);
|
|
|
|
session->header->buffer = (char *) web_calloc(1, header_sz);
|
|
|
|
if (session->header->buffer == RT_NULL)
|
|
|
|
if (session->header->buffer == RT_NULL)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
LOG_E("webclient create failed, no memory for session header buffer!");
|
|
|
|
LOG_E("webclient create failed, no memory for session header buffer!");
|
|
|
@ -893,7 +893,7 @@ int webclient_get(struct webclient_session *session, const char *URI)
|
|
|
|
/* handle the response header of webclient server */
|
|
|
|
/* handle the response header of webclient server */
|
|
|
|
resp_status = webclient_handle_response(session);
|
|
|
|
resp_status = webclient_handle_response(session);
|
|
|
|
|
|
|
|
|
|
|
|
LOG_D("get position handle response(%d).", resp_status);
|
|
|
|
LOG_D("get position handle response(%d).", resp_status);
|
|
|
|
|
|
|
|
|
|
|
|
if (resp_status > 0)
|
|
|
|
if (resp_status > 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -970,7 +970,7 @@ int webclient_get_position(struct webclient_session *session, const char *URI, i
|
|
|
|
/* handle the response header of webclient server */
|
|
|
|
/* handle the response header of webclient server */
|
|
|
|
resp_status = webclient_handle_response(session);
|
|
|
|
resp_status = webclient_handle_response(session);
|
|
|
|
|
|
|
|
|
|
|
|
LOG_D("get position handle response(%d).", resp_status);
|
|
|
|
LOG_D("get position handle response(%d).", resp_status);
|
|
|
|
|
|
|
|
|
|
|
|
if (resp_status > 0)
|
|
|
|
if (resp_status > 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -1049,7 +1049,7 @@ int webclient_post(struct webclient_session *session, const char *URI, const cha
|
|
|
|
|
|
|
|
|
|
|
|
/* resolve response data, get http status code */
|
|
|
|
/* resolve response data, get http status code */
|
|
|
|
resp_status = webclient_handle_response(session);
|
|
|
|
resp_status = webclient_handle_response(session);
|
|
|
|
LOG_D("post handle response(%d).", resp_status);
|
|
|
|
LOG_D("post handle response(%d).", resp_status);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return resp_status;
|
|
|
|
return resp_status;
|
|
|
@ -1219,13 +1219,13 @@ int webclient_read(struct webclient_session *session, unsigned char *buffer, siz
|
|
|
|
if (bytes_read <= 0)
|
|
|
|
if (bytes_read <= 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined(WEBCLIENT_USING_SAL_TLS) || defined(WEBCLIENT_USING_MBED_TLS)
|
|
|
|
#if defined(WEBCLIENT_USING_SAL_TLS) || defined(WEBCLIENT_USING_MBED_TLS)
|
|
|
|
if(session->is_tls &&
|
|
|
|
if(session->is_tls &&
|
|
|
|
(bytes_read == MBEDTLS_ERR_SSL_WANT_READ || bytes_read == MBEDTLS_ERR_SSL_WANT_WRITE))
|
|
|
|
(bytes_read == MBEDTLS_ERR_SSL_WANT_READ || bytes_read == MBEDTLS_ERR_SSL_WANT_WRITE))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
LOG_D("receive data error(%d).", bytes_read);
|
|
|
|
LOG_D("receive data error(%d).", bytes_read);
|
|
|
|
|
|
|
|
|
|
|
|
if (total_read)
|
|
|
|
if (total_read)
|
|
|
@ -1298,7 +1298,7 @@ int webclient_write(struct webclient_session *session, const unsigned char *buff
|
|
|
|
if (bytes_write <= 0)
|
|
|
|
if (bytes_write <= 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined(WEBCLIENT_USING_SAL_TLS) || defined(WEBCLIENT_USING_MBED_TLS)
|
|
|
|
#if defined(WEBCLIENT_USING_SAL_TLS) || defined(WEBCLIENT_USING_MBED_TLS)
|
|
|
|
if(session->is_tls &&
|
|
|
|
if(session->is_tls &&
|
|
|
|
(bytes_write == MBEDTLS_ERR_SSL_WANT_READ || bytes_write == MBEDTLS_ERR_SSL_WANT_WRITE))
|
|
|
|
(bytes_write == MBEDTLS_ERR_SSL_WANT_READ || bytes_write == MBEDTLS_ERR_SSL_WANT_WRITE))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
@ -1346,7 +1346,7 @@ int webclient_write(struct webclient_session *session, const unsigned char *buff
|
|
|
|
int webclient_close(struct webclient_session *session)
|
|
|
|
int webclient_close(struct webclient_session *session)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
RT_ASSERT(session);
|
|
|
|
RT_ASSERT(session);
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef WEBCLIENT_USING_MBED_TLS
|
|
|
|
#ifdef WEBCLIENT_USING_MBED_TLS
|
|
|
|
if (session->tls_session)
|
|
|
|
if (session->tls_session)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -1356,7 +1356,7 @@ int webclient_close(struct webclient_session *session)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (session->socket >= 0)
|
|
|
|
if (session->socket >= 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
closesocket(session->socket);
|
|
|
|
closesocket(session->socket);
|
|
|
|
session->socket = -1;
|
|
|
|
session->socket = -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1485,7 +1485,7 @@ int webclient_response(struct webclient_session *session, unsigned char **respon
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* add request(GET/POST) header data.
|
|
|
|
* add request(GET/POST) header data.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param request_header add request buffer address
|
|
|
|
* @param request_header add request buffer address
|
|
|
|
* @param fmt fields format
|
|
|
|
* @param fmt fields format
|
|
|
@ -1583,7 +1583,7 @@ int webclient_request(const char *URI, const char *header, const char *post_data
|
|
|
|
|
|
|
|
|
|
|
|
for(header_str = (char *)header; (header_ptr = rt_strstr(header_str, "\r\n")) != RT_NULL; )
|
|
|
|
for(header_str = (char *)header; (header_ptr = rt_strstr(header_str, "\r\n")) != RT_NULL; )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
header_line_length = header_ptr + rt_strlen("\r\n") - header_str;
|
|
|
|
header_line_length = header_ptr + rt_strlen("\r\n") - header_str;
|
|
|
|
webclient_header_fields_add(session, "%.*s", header_line_length, header_str);
|
|
|
|
webclient_header_fields_add(session, "%.*s", header_line_length, header_str);
|
|
|
|
header_str += header_line_length;
|
|
|
|
header_str += header_line_length;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1619,7 +1619,7 @@ int webclient_request(const char *URI, const char *header, const char *post_data
|
|
|
|
|
|
|
|
|
|
|
|
for(header_str = (char *)header; (header_ptr = rt_strstr(header_str, "\r\n")) != RT_NULL; )
|
|
|
|
for(header_str = (char *)header; (header_ptr = rt_strstr(header_str, "\r\n")) != RT_NULL; )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
header_line_length = header_ptr + rt_strlen("\r\n") - header_str;
|
|
|
|
header_line_length = header_ptr + rt_strlen("\r\n") - header_str;
|
|
|
|
webclient_header_fields_add(session, "%.*s", header_line_length, header_str);
|
|
|
|
webclient_header_fields_add(session, "%.*s", header_line_length, header_str);
|
|
|
|
header_str += header_line_length;
|
|
|
|
header_str += header_line_length;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1640,7 +1640,7 @@ int webclient_request(const char *URI, const char *header, const char *post_data
|
|
|
|
rc = -WEBCLIENT_ERROR;
|
|
|
|
rc = -WEBCLIENT_ERROR;
|
|
|
|
goto __exit;
|
|
|
|
goto __exit;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
totle_length = webclient_response(session, response);
|
|
|
|
totle_length = webclient_response(session, response);
|
|
|
|
if (totle_length <= 0)
|
|
|
|
if (totle_length <= 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|