net: http: Refactor because of timeout overhaul

Use k_timeout_t internally, no change to user API.
Clarify the documentation of the timeout parameter that it is
in milliseconds.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This commit is contained in:
Jukka Rissanen 2020-04-02 21:07:27 +03:00
commit 1b04d44247
3 changed files with 15 additions and 6 deletions

View file

@ -174,7 +174,7 @@ struct http_client_internal_data {
int sock; int sock;
/** Request timeout */ /** Request timeout */
s32_t timeout; k_timeout_t timeout;
}; };
/** /**
@ -271,6 +271,7 @@ struct http_request {
* @param req HTTP request information * @param req HTTP request information
* @param timeout Max timeout to wait for the data. The timeout value cannot be * @param timeout Max timeout to wait for the data. The timeout value cannot be
* 0 as there would be no time to receive the data. * 0 as there would be no time to receive the data.
* The timeout value is in milliseconds.
* @param user_data User specified data that is passed to the callback. * @param user_data User specified data that is passed to the callback.
* *
* @return <0 if error, >=0 amount of data sent to the server * @return <0 if error, >=0 amount of data sent to the server

View file

@ -152,7 +152,7 @@ void main(void)
struct sockaddr_in6 addr6; struct sockaddr_in6 addr6;
struct sockaddr_in addr4; struct sockaddr_in addr4;
int sock4 = -1, sock6 = -1; int sock4 = -1, sock6 = -1;
s32_t timeout = K_SECONDS(3); s32_t timeout = 3 * MSEC_PER_SEC;
int ret; int ret;
int port = HTTP_PORT; int port = HTTP_PORT;

View file

@ -490,9 +490,14 @@ int http_client_req(int sock, struct http_request *req,
req->internal.response.recv_buf = req->recv_buf; req->internal.response.recv_buf = req->recv_buf;
req->internal.response.recv_buf_len = req->recv_buf_len; req->internal.response.recv_buf_len = req->recv_buf_len;
req->internal.user_data = user_data; req->internal.user_data = user_data;
req->internal.timeout = timeout;
req->internal.sock = sock; req->internal.sock = sock;
if (timeout == NET_WAIT_FOREVER) {
req->internal.timeout = K_FOREVER;
} else {
req->internal.timeout = K_MSEC(timeout);
}
method = http_method_str(req->method); method = http_method_str(req->method);
ret = http_send_data(sock, send_buf, send_buf_max_len, &send_buf_pos, ret = http_send_data(sock, send_buf, send_buf_max_len, &send_buf_pos,
@ -635,9 +640,11 @@ int http_client_req(int sock, struct http_request *req,
http_client_init_parser(&req->internal.parser, http_client_init_parser(&req->internal.parser,
&req->internal.parser_settings); &req->internal.parser_settings);
if (timeout != K_FOREVER && timeout != K_NO_WAIT) { if (!K_TIMEOUT_EQ(req->internal.timeout, K_FOREVER) &&
!K_TIMEOUT_EQ(req->internal.timeout, K_NO_WAIT)) {
k_delayed_work_init(&req->internal.work, http_timeout); k_delayed_work_init(&req->internal.work, http_timeout);
(void)k_delayed_work_submit(&req->internal.work, timeout); (void)k_delayed_work_submit(&req->internal.work,
req->internal.timeout);
} }
/* Request is sent, now wait data to be received */ /* Request is sent, now wait data to be received */
@ -648,7 +655,8 @@ int http_client_req(int sock, struct http_request *req,
NET_DBG("Received %d bytes", total_recv); NET_DBG("Received %d bytes", total_recv);
} }
if (timeout != K_FOREVER && timeout != K_NO_WAIT) { if (!K_TIMEOUT_EQ(req->internal.timeout, K_FOREVER) &&
!K_TIMEOUT_EQ(req->internal.timeout, K_NO_WAIT)) {
(void)k_delayed_work_cancel(&req->internal.work); (void)k_delayed_work_cancel(&req->internal.work);
} }