summaryrefslogtreecommitdiffstats
path: root/aclk
diff options
context:
space:
mode:
Diffstat (limited to 'aclk')
-rw-r--r--aclk/aclk_lws_https_client.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/aclk/aclk_lws_https_client.c b/aclk/aclk_lws_https_client.c
index 5d54c79583..c1856ed2c0 100644
--- a/aclk/aclk_lws_https_client.c
+++ b/aclk/aclk_lws_https_client.c
@@ -12,6 +12,8 @@
struct simple_hcc_data {
char *data;
size_t data_size;
+ size_t written;
+ char lws_work_buffer[1024 + LWS_PRE];
char *payload;
int response_code;
int done;
@@ -28,6 +30,10 @@ static int simple_https_client_callback(struct lws *wsi, enum lws_callback_reaso
switch (reason) {
case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ:
debug(D_ACLK, "LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ");
+ if (perconn_data->data_size - 1 - perconn_data->written < len)
+ return 1;
+ memcpy(&perconn_data->data[perconn_data->written], in, len);
+ perconn_data->written += len;
return 0;
case LWS_CALLBACK_RECEIVE_CLIENT_HTTP:
debug(D_ACLK, "LWS_CALLBACK_RECEIVE_CLIENT_HTTP");
@@ -35,11 +41,11 @@ static int simple_https_client_callback(struct lws *wsi, enum lws_callback_reaso
error("Missing Per Connect Data");
return -1;
}
- ptr = perconn_data->data;
- n = perconn_data->data_size - 1;
+ n = sizeof(perconn_data->lws_work_buffer) - LWS_PRE;
+ ptr = perconn_data->lws_work_buffer + LWS_PRE;
if (lws_http_client_read(wsi, &ptr, &n) < 0)
return -1;
- ptr[n] = '\0';
+ perconn_data->data[perconn_data->written] = '\0';
return 0;
case LWS_CALLBACK_WSI_DESTROY:
debug(D_ACLK, "LWS_CALLBACK_WSI_DESTROY");