From a10ecefc100a6fcefa98d8bf6037bae1407102f5 Mon Sep 17 00:00:00 2001 From: Pekka Ervasti <pekka.ervasti@haltian.com> Date: Tue, 29 Sep 2015 15:15:03 +0300 Subject: [PATCH] Support for multiple custom URLs Signed-off-by: Pekka Ervasti <pekka.ervasti@haltian.com> --- apps/ts_engine/engine/libtsengine.a.nocleanup | Bin 150192 -> 150892 bytes apps/ts_engine/kii-connector/conn_comm.c | 31 ++++---- apps/ts_engine/kii-connector/conn_comm.h | 3 +- apps/ts_engine/kii-connector/connector.h | 8 +- apps/ts_engine/meshblu-connector/conn_comm.c | 31 ++++---- apps/ts_engine/meshblu-connector/conn_comm.h | 3 +- apps/ts_engine/meshblu-connector/connector.h | 8 +- apps/ts_engine/ts-connector/conn_comm.c | 31 ++++---- apps/ts_engine/ts-connector/conn_comm.h | 3 +- apps/ts_engine/ts-connector/connector.h | 8 +- apps/ts_engine/ts-connector/ts_connector.c | 73 ++++++++++++++---- 11 files changed, 126 insertions(+), 73 deletions(-) diff --git a/apps/ts_engine/engine/libtsengine.a.nocleanup b/apps/ts_engine/engine/libtsengine.a.nocleanup index 7a6abf87141b720d077b8eac6616f600cc81fad7..8626daa8bc0f74da5286378b6f3ed34144a005ec 100644 GIT binary patch delta 16266 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 delta 15356 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 XNI@hIY~>~=bRV6W$#y{prf6OO(~^?l diff --git a/apps/ts_engine/kii-connector/conn_comm.c b/apps/ts_engine/kii-connector/conn_comm.c index a57044cd..3fa33dab 100644 --- a/apps/ts_engine/kii-connector/conn_comm.c +++ b/apps/ts_engine/kii-connector/conn_comm.c @@ -443,6 +443,7 @@ static int execute_http_request(struct sockaddr_in *srv_addr, uint16_t port, cha size_t pos; char *host; struct timeval tv; + struct sockaddr_in *current_srv_ip4addr; DEBUGASSERT(srv_addr && hdr && pdata && pstatus_code && pcontent); @@ -450,28 +451,26 @@ static int execute_http_request(struct sockaddr_in *srv_addr, uint16_t port, cha http_con_dbg("HTTP:\n%s%s", hdr, pdata); - if (context->url.host) + if (context->url) { - con->srv_ip4addr.sin_addr.s_addr = 0; - host = context->url.host; - port = context->url.port; + host = context->url->host; + port = context->url->port; + current_srv_ip4addr = &context->url->srv_ip4addr; } else { host = con->host; + current_srv_ip4addr = &con->srv_ip4addr; } - if (srv_addr == &con->srv_ip4addr) + /* Fetch server IP address. */ + if (current_srv_ip4addr->sin_addr.s_addr == 0) { - /* Fetch server IP address. */ - if (con->srv_ip4addr.sin_addr.s_addr == 0) - { - con->network_ready = false; - if (get_server_address(&con->srv_ip4addr, host) != OK) - return NETWORK_ERROR; + con->network_ready = false; + if (get_server_address(current_srv_ip4addr, host) != OK) + return NETWORK_ERROR; - con->network_ready = true; - } + con->network_ready = true; } /* Open HTTP connection to server. */ @@ -485,11 +484,11 @@ static int execute_http_request(struct sockaddr_in *srv_addr, uint16_t port, cha ret = connect(sock, (struct sockaddr *)srv_addr, sizeof(*srv_addr)); if (ret < 0) { - if (srv_addr == &con->srv_ip4addr) + if (srv_addr == current_srv_ip4addr) { /* Could not connect to server. Try updating server IP address on * next try. */ - memset(&con->srv_ip4addr, 0, sizeof(con->srv_ip4addr)); + memset(current_srv_ip4addr, 0, sizeof(*current_srv_ip4addr)); } goto err_close; } @@ -822,8 +821,6 @@ void conn_complete_task_workflow(conn_workflow_context_s *context, int err) } conn_free_pointer((void**)&context->payload); - conn_free_pointer((void**)&context->url.host); - conn_free_pointer((void**)&context->url.api); conn_free_pointer((void**)&context); } } diff --git a/apps/ts_engine/kii-connector/conn_comm.h b/apps/ts_engine/kii-connector/conn_comm.h index e832daac..6c3ed612 100644 --- a/apps/ts_engine/kii-connector/conn_comm.h +++ b/apps/ts_engine/kii-connector/conn_comm.h @@ -81,8 +81,9 @@ typedef struct { char *payload; send_cb_t cb; - struct url url; + struct url *url; const void *priv; + struct sockaddr_in srv_ip4addr; } conn_workflow_context_s; typedef int (*conn_request_construct_t) diff --git a/apps/ts_engine/kii-connector/connector.h b/apps/ts_engine/kii-connector/connector.h index b284e580..e5115481 100644 --- a/apps/ts_engine/kii-connector/connector.h +++ b/apps/ts_engine/kii-connector/connector.h @@ -43,6 +43,8 @@ #include <stdbool.h> #include <time.h> +#include <netinet/in.h> + #include <apps/thingsee/ts_core.h> #include "engine/value.h" @@ -80,6 +82,8 @@ struct url char *host; uint16_t port; char *api; + struct ts_value http_header; + struct sockaddr_in srv_ip4addr; }; typedef bool @@ -115,11 +119,11 @@ typedef int const void *priv); typedef int -(*send_url_t) (struct ts_payload *payload, send_cb_t cb, const struct url * const url, const void *priv); +(*send_url_t) (struct ts_payload *payload, send_cb_t cb, struct url * const url, const void *priv); typedef int (*multisend_url_t) (struct ts_payload **payload, int number_of_payloads, - send_cb_t cb, const struct url * const url, const void *priv); + send_cb_t cb, struct url * const url, const void *priv); struct ts_connector { diff --git a/apps/ts_engine/meshblu-connector/conn_comm.c b/apps/ts_engine/meshblu-connector/conn_comm.c index 6545913a..d4a8b972 100644 --- a/apps/ts_engine/meshblu-connector/conn_comm.c +++ b/apps/ts_engine/meshblu-connector/conn_comm.c @@ -443,6 +443,7 @@ static int execute_http_request(struct sockaddr_in *srv_addr, uint16_t port, cha size_t pos; char *host; struct timeval tv; + struct sockaddr_in *current_srv_ip4addr; DEBUGASSERT(srv_addr && hdr && pdata && pstatus_code && pcontent); @@ -450,28 +451,26 @@ static int execute_http_request(struct sockaddr_in *srv_addr, uint16_t port, cha http_con_dbg("HTTP:\n%s%s", hdr, pdata); - if (context->url.host) + if (context->url) { - con->srv_ip4addr.sin_addr.s_addr = 0; - host = context->url.host; - port = context->url.port; + host = context->url->host; + port = context->url->port; + current_srv_ip4addr = &context->url->srv_ip4addr; } else { host = con->host; + current_srv_ip4addr = &con->srv_ip4addr; } - if (srv_addr == &con->srv_ip4addr) + /* Fetch server IP address. */ + if (current_srv_ip4addr->sin_addr.s_addr == 0) { - /* Fetch server IP address. */ - if (con->srv_ip4addr.sin_addr.s_addr == 0) - { - con->network_ready = false; - if (get_server_address(&con->srv_ip4addr, host) != OK) - return NETWORK_ERROR; + con->network_ready = false; + if (get_server_address(current_srv_ip4addr, host) != OK) + return NETWORK_ERROR; - con->network_ready = true; - } + con->network_ready = true; } /* Open HTTP connection to server. */ @@ -485,11 +484,11 @@ static int execute_http_request(struct sockaddr_in *srv_addr, uint16_t port, cha ret = connect(sock, (struct sockaddr *)srv_addr, sizeof(*srv_addr)); if (ret < 0) { - if (srv_addr == &con->srv_ip4addr) + if (srv_addr == current_srv_ip4addr) { /* Could not connect to server. Try updating server IP address on * next try. */ - memset(&con->srv_ip4addr, 0, sizeof(con->srv_ip4addr)); + memset(current_srv_ip4addr, 0, sizeof(*current_srv_ip4addr)); } goto err_close; } @@ -822,8 +821,6 @@ void conn_complete_task_workflow(conn_workflow_context_s *context, int err) } conn_free_pointer((void**)&context->payload); - conn_free_pointer((void**)&context->url.host); - conn_free_pointer((void**)&context->url.api); conn_free_pointer((void**)&context); } } diff --git a/apps/ts_engine/meshblu-connector/conn_comm.h b/apps/ts_engine/meshblu-connector/conn_comm.h index e0cc1832..0b456a7f 100644 --- a/apps/ts_engine/meshblu-connector/conn_comm.h +++ b/apps/ts_engine/meshblu-connector/conn_comm.h @@ -81,8 +81,9 @@ typedef struct { char *payload; send_cb_t cb; - struct url url; + struct url *url; const void *priv; + struct sockaddr_in srv_ip4addr; } conn_workflow_context_s; typedef int (*conn_request_construct_t) diff --git a/apps/ts_engine/meshblu-connector/connector.h b/apps/ts_engine/meshblu-connector/connector.h index ae5c3ac7..d222da0f 100644 --- a/apps/ts_engine/meshblu-connector/connector.h +++ b/apps/ts_engine/meshblu-connector/connector.h @@ -43,6 +43,8 @@ #include <stdbool.h> #include <time.h> +#include <netinet/in.h> + #include <apps/thingsee/ts_core.h> #include "engine/value.h" @@ -80,6 +82,8 @@ struct url char *host; uint16_t port; char *api; + struct ts_value http_header; + struct sockaddr_in srv_ip4addr; }; typedef bool @@ -115,11 +119,11 @@ typedef int const void *priv); typedef int -(*send_url_t) (struct ts_payload *payload, send_cb_t cb, const struct url * const url, const void *priv); +(*send_url_t) (struct ts_payload *payload, send_cb_t cb, struct url * const url, const void *priv); typedef int (*multisend_url_t) (struct ts_payload **payload, int number_of_payloads, - send_cb_t cb, const struct url * const url, const void *priv); + send_cb_t cb, struct url * const url, const void *priv); struct ts_connector { diff --git a/apps/ts_engine/ts-connector/conn_comm.c b/apps/ts_engine/ts-connector/conn_comm.c index 1f950467..ad5d4106 100644 --- a/apps/ts_engine/ts-connector/conn_comm.c +++ b/apps/ts_engine/ts-connector/conn_comm.c @@ -443,6 +443,7 @@ static int execute_http_request(struct sockaddr_in *srv_addr, uint16_t port, cha size_t pos; char *host; struct timeval tv; + struct sockaddr_in *current_srv_ip4addr; DEBUGASSERT(srv_addr && hdr && pdata && pstatus_code && pcontent); @@ -450,28 +451,26 @@ static int execute_http_request(struct sockaddr_in *srv_addr, uint16_t port, cha http_con_dbg("HTTP:\n%s%s", hdr, pdata); - if (context->url.host) + if (context->url) { - con->srv_ip4addr.sin_addr.s_addr = 0; - host = context->url.host; - port = context->url.port; + host = context->url->host; + port = context->url->port; + current_srv_ip4addr = &context->url->srv_ip4addr; } else { host = con->host; + current_srv_ip4addr = &con->srv_ip4addr; } - if (srv_addr == &con->srv_ip4addr) + /* Fetch server IP address. */ + if (current_srv_ip4addr->sin_addr.s_addr == 0) { - /* Fetch server IP address. */ - if (con->srv_ip4addr.sin_addr.s_addr == 0) - { - con->network_ready = false; - if (get_server_address(&con->srv_ip4addr, host) != OK) - return NETWORK_ERROR; + con->network_ready = false; + if (get_server_address(current_srv_ip4addr, host) != OK) + return NETWORK_ERROR; - con->network_ready = true; - } + con->network_ready = true; } /* Open HTTP connection to server. */ @@ -485,11 +484,11 @@ static int execute_http_request(struct sockaddr_in *srv_addr, uint16_t port, cha ret = connect(sock, (struct sockaddr *)srv_addr, sizeof(*srv_addr)); if (ret < 0) { - if (srv_addr == &con->srv_ip4addr) + if (srv_addr == current_srv_ip4addr) { /* Could not connect to server. Try updating server IP address on * next try. */ - memset(&con->srv_ip4addr, 0, sizeof(con->srv_ip4addr)); + memset(current_srv_ip4addr, 0, sizeof(*current_srv_ip4addr)); } goto err_close; } @@ -822,8 +821,6 @@ void conn_complete_task_workflow(conn_workflow_context_s *context, int err) } conn_free_pointer((void**)&context->payload); - conn_free_pointer((void**)&context->url.host); - conn_free_pointer((void**)&context->url.api); conn_free_pointer((void**)&context); } } diff --git a/apps/ts_engine/ts-connector/conn_comm.h b/apps/ts_engine/ts-connector/conn_comm.h index 9b6850ab..812b825d 100644 --- a/apps/ts_engine/ts-connector/conn_comm.h +++ b/apps/ts_engine/ts-connector/conn_comm.h @@ -81,8 +81,9 @@ typedef struct { char *payload; send_cb_t cb; - struct url url; + struct url *url; const void *priv; + struct sockaddr_in srv_ip4addr; } conn_workflow_context_s; typedef int (*conn_request_construct_t) diff --git a/apps/ts_engine/ts-connector/connector.h b/apps/ts_engine/ts-connector/connector.h index d04774f9..b8ff5702 100644 --- a/apps/ts_engine/ts-connector/connector.h +++ b/apps/ts_engine/ts-connector/connector.h @@ -43,6 +43,8 @@ #include <stdbool.h> #include <time.h> +#include <netinet/in.h> + #include <apps/thingsee/ts_core.h> #include "engine/value.h" @@ -80,6 +82,8 @@ struct url char *host; uint16_t port; char *api; + struct ts_value http_header; + struct sockaddr_in srv_ip4addr; }; typedef bool @@ -115,11 +119,11 @@ typedef int const void *priv); typedef int -(*send_url_t) (struct ts_payload *payload, send_cb_t cb, const struct url * const url, const void *priv); +(*send_url_t) (struct ts_payload *payload, send_cb_t cb, struct url * const url, const void *priv); typedef int (*multisend_url_t) (struct ts_payload **payload, int number_of_payloads, - send_cb_t cb, const struct url * const url, const void *priv); + send_cb_t cb, struct url * const url, const void *priv); struct ts_connector { diff --git a/apps/ts_engine/ts-connector/ts_connector.c b/apps/ts_engine/ts-connector/ts_connector.c index a6290318..6fe6fca8 100644 --- a/apps/ts_engine/ts-connector/ts_connector.c +++ b/apps/ts_engine/ts-connector/ts_connector.c @@ -84,9 +84,9 @@ static int tsc_send(struct ts_payload *payload, send_cb_t cb, const void *priv); static int tsc_multisend(struct ts_payload **payload, int number_of_payloads, send_cb_t cb, const void *priv); static int tsc_multisend_url(struct ts_payload **payload, int number_of_payloads, - send_cb_t cb, const struct url * const url, const void *priv); + send_cb_t cb, struct url * const url, const void *priv); static int tsc_send_url(struct ts_payload *payload, send_cb_t cb, - const struct url * const url, + struct url * const url, const void *priv); /**************************************************************************** @@ -125,6 +125,10 @@ static int tsc_post_data_construct(conn_workflow_context_s *context, char **outhdr, char **outdata) { int datalen = 0, hdrlen = 0; + char *header = NULL; + char *tmp; + int i; + int ret; /* Construct HTTP data */ *outdata = context->payload; @@ -133,6 +137,49 @@ static int tsc_post_data_construct(conn_workflow_context_s *context, if (datalen > 0) { /* Construct HTTP header */ + + if (context->url) + { + if (context->url->http_header.valuearray.number_of_items > 0) + { + for (i = 0; i < context->url->http_header.valuearray.number_of_items; i++) + { + if (context->url->http_header.valuearray.items[i].valuetype != VALUESTRING) + { + con_dbg("Invalid valuetype=%d\n", context->url->http_header.valuearray.items[i].valuetype); + free(header); + return ERROR; + } + tmp = header ? header : strdup(""); + + ret = asprintf(&header, "%s%s\r\n", tmp, context->url->http_header.valuearray.items[i].valuestring); + free(tmp); + if (ret < 0) + { + con_dbg("asprintf failed\n"); + return ERROR; + } + } + } + else + { + header = strdup(""); + if (!header) + { + con_dbg("strdup failed\n"); + return ERROR; + } + } + } + else /* default ts backend token authentication */ + { + ret = asprintf(&header, "Authorization: Bearer %s\r\n", ts_context.cloud_params.device_auth_token); + if (ret < 0) + { + return ERROR; + } + } + hdrlen = asprintf(outhdr, "POST /%s%s HTTP/1.1\r\n" "connectorId: %d\r\n" @@ -141,21 +188,23 @@ static int tsc_post_data_construct(conn_workflow_context_s *context, "User-Agent: %s\r\n" "Host: %s\r\n" "Accept: */*\r\n" - "Authorization: Bearer %s\r\n" + "%s" /* auth */ "Connection: close\r\n" "Content-Length: %d\r\n" "Content-Type: application/json\r\n" "\r\n", - (context->url.host ? (context->url.api ? context->url.api : "") : ts_context.cloud_params.api), - (context->url.host ? "" : "/events"), + (context->url ? (context->url->api ? context->url->api : "") : ts_context.cloud_params.api), + (context->url ? "" : "/events"), ts_context.cloud_params.connector_id, ts_context.cloud_params.connector_name, ts_context.cloud_params.device_auth_uuid, HTTP_USER_AGENT, - (context->url.host ? context->url.host : ts_context.con.host), - ts_context.cloud_params.device_auth_token, + (context->url ? context->url->host : ts_context.con.host), + header, strlen(*outdata) ); + + free(header); } if (datalen >= 0 && hdrlen >= 0) con_dbg("SENDINGDATA:\n%s%s\n", *outhdr, *outdata); @@ -368,7 +417,7 @@ static int tsc_uninit(void) } static conn_workflow_context_s *tsc_create_workflow_context(struct ts_payload **payload, int number_of_payloads, - send_cb_t cb, const struct url * const url, const void *priv) + send_cb_t cb, struct url * const url, const void *priv) { cJSON *root, *pload, *engine, *senses; conn_workflow_context_s *context = NULL; @@ -446,9 +495,7 @@ static conn_workflow_context_s *tsc_create_workflow_context(struct ts_payload ** context->cb = cb; if (url) { - context->url.host = strdup(url->host); - context->url.port = url->port; - context->url.api = strdup(url->api); + context->url = url; } context->priv = priv; } @@ -460,7 +507,7 @@ static conn_workflow_context_s *tsc_create_workflow_context(struct ts_payload ** } static int tsc_multisend_url(struct ts_payload **payload, int number_of_payloads, - send_cb_t cb, const struct url * const url, const void *priv) + send_cb_t cb, struct url * const url, const void *priv) { int ret = OK; struct conn_network_task_s *send_task = NULL; @@ -501,7 +548,7 @@ static int tsc_multisend_url(struct ts_payload **payload, int number_of_payloads } static int tsc_send_url(struct ts_payload *payload, send_cb_t cb, - const struct url * const url, + struct url * const url, const void *priv) { return tsc_multisend_url(&payload, 1, cb, url, priv); -- GitLab