From e40af91fa710a9b1b2e2638da2f9e0b3ca929005 Mon Sep 17 00:00:00 2001 From: Sadhyama Vengilat Date: Wed, 25 Jul 2018 18:25:58 +0530 Subject: [PATCH] Incorporated review comments on crud additional fields --- src/config.c | 12 +++++++++++- src/config.h | 6 +++++- src/conn_interface.c | 9 +++++---- src/connection.c | 2 +- src/crud_internal.c | 17 ++++++++++------- src/upstream.c | 16 +++++++++------- tests/test_config.c | 2 +- tests/test_conn_interface.c | 2 +- tests/test_createConnection.c | 2 +- tests/test_crud_internal.c | 5 ++--- 10 files changed, 46 insertions(+), 27 deletions(-) diff --git a/src/config.c b/src/config.c index 0db8f64..5932f60 100644 --- a/src/config.c +++ b/src/config.c @@ -51,6 +51,16 @@ void set_parodus_cfg(ParodusCfg *cfg) memcpy(&parodusCfg, cfg, sizeof(ParodusCfg)); } +void set_cloud_disconnect_reason(ParodusCfg *cfg, char *disconn_reason) +{ + cfg->cloud_disconnect = strdup(disconn_reason); +} + +void reset_cloud_disconnect_reason(ParodusCfg *cfg) +{ + cfg->cloud_disconnect = NULL; +} + static void execute_token_script(char *token, char *name, size_t len, char *mac, char *serNum); const char *get_tok (const char *src, int delim, char *result, int resultsize) @@ -639,7 +649,7 @@ void setDefaultValuesToCfg(ParodusCfg *cfg) ParodusPrint("cfg->webpa_uuid is :%s\n", cfg->webpa_uuid); cfg->crud_config_file = strdup("parodus_cfg.json"); ParodusPrint("Default crud_config_file is %s\n", cfg->crud_config_file); - cfg->cloud_status = "offline"; + cfg->cloud_status = CLOUD_STATUS_OFFLINE; ParodusInfo("Default cloud_status is %s\n", cfg->cloud_status); } diff --git a/src/config.h b/src/config.h index 87348a2..b37f8ec 100644 --- a/src/config.h +++ b/src/config.h @@ -51,6 +51,9 @@ extern "C" { #define CERT_PATH "ssl-cert-path" #define CLOUD_STATUS "cloud-status" #define CLOUD_DISCONNECT "cloud-disconnect" +#define CLOUD_STATUS_ONLINE "online" +#define CLOUD_STATUS_OFFLINE "offline" +#define CLOUD_DISCONNECT_REASON "disconnection-reason" #define PROTOCOL_VALUE "PARODUS-2.0" #define WEBPA_PATH_URL "/api/v2/device" @@ -128,7 +131,8 @@ void getAuthToken(ParodusCfg *cfg); ParodusCfg *get_parodus_cfg(void); void set_parodus_cfg(ParodusCfg *); char *get_token_application(void) ; - +void set_cloud_disconnect_reason(ParodusCfg *cfg, char *disconn_reason); +void reset_cloud_disconnect_reason(ParodusCfg *cfg); /** * parse a webpa url. Extract the server address, the port * and return whether it's secure or not diff --git a/src/conn_interface.c b/src/conn_interface.c index 065f466..6b5a083 100644 --- a/src/conn_interface.c +++ b/src/conn_interface.c @@ -45,6 +45,7 @@ /*----------------------------------------------------------------------------*/ #define HEARTBEAT_RETRY_SEC 30 /* Heartbeat (ping/pong) timeout in seconds */ +#define CLOUD_RECONNECT_TIME 5 /* Cloud disconnect max time in minutes */ /*----------------------------------------------------------------------------*/ /* File Scoped Variables */ @@ -155,18 +156,18 @@ void createSocketConnection(void (* initKeypress)()) close_and_unref_connection(get_global_conn()); set_global_conn(NULL); - get_parodus_cfg()->cloud_status = "offline"; + get_parodus_cfg()->cloud_status = CLOUD_STATUS_OFFLINE; ParodusInfo("cloud_status set as %s after connection close\n", get_parodus_cfg()->cloud_status); if(get_parodus_cfg()->cloud_disconnect !=NULL) { ParodusPrint("get_parodus_cfg()->cloud_disconnect is %s\n", get_parodus_cfg()->cloud_disconnect); - set_cloud_disconnect_time(5); + set_cloud_disconnect_time(CLOUD_RECONNECT_TIME); ParodusInfo("Waiting for %d minutes for reconnecting .. \n", get_cloud_disconnect_time()); sleep( get_cloud_disconnect_time() * 60 ); - ParodusInfo("get_parodus_cfg()->cloud_disconnect reset after %d minutes\n", get_cloud_disconnect_time()); + ParodusInfo("cloud-disconnect reason reset after %d minutes\n", get_cloud_disconnect_time()); free(get_parodus_cfg()->cloud_disconnect); - get_parodus_cfg()->cloud_disconnect = NULL; + reset_cloud_disconnect_reason(get_parodus_cfg()); } createNopollConnection(ctx); } diff --git a/src/connection.c b/src/connection.c index e0ed701..573c1c2 100644 --- a/src/connection.c +++ b/src/connection.c @@ -430,7 +430,7 @@ int createNopollConnection(noPollCtx *ctx) ParodusInfo("Connected to server\n"); } - get_parodus_cfg()->cloud_status = "online"; + get_parodus_cfg()->cloud_status = CLOUD_STATUS_ONLINE; ParodusInfo("cloud_status set as %s after successful connection\n", get_parodus_cfg()->cloud_status); if (NULL != jwt_server_url) diff --git a/src/crud_internal.c b/src/crud_internal.c index 1a8986b..2875f72 100644 --- a/src/crud_internal.c +++ b/src/crud_internal.c @@ -876,6 +876,7 @@ int updateObject( wrp_msg_t *reqMsg, wrp_msg_t **response ) int status =0, valid =0; int expireFlag = 0; int disconnStatus = 0; + char *disconn_str = NULL; status = readFromJSON(&jsonData); ParodusPrint("read status %d\n", status); @@ -1218,11 +1219,12 @@ int updateObject( wrp_msg_t *reqMsg, wrp_msg_t **response ) jsonPayload = cJSON_Parse( reqMsg->u.crud.payload ); if(jsonPayload !=NULL) { - if((cJSON_GetObjectItem( jsonPayload, "disconnection-reason" )) !=NULL) + if((cJSON_GetObjectItem( jsonPayload, CLOUD_DISCONNECT_REASON )) !=NULL) { - if (cJSON_String == cJSON_GetObjectItem( jsonPayload, "disconnection-reason" )->type) + if (cJSON_String == cJSON_GetObjectItem( jsonPayload, CLOUD_DISCONNECT_REASON )->type) { - if(cJSON_GetObjectItem( jsonPayload, "disconnection-reason" )->valuestring != NULL && strlen(cJSON_GetObjectItem( jsonPayload, "disconnection-reason" )->valuestring) == 0) + disconn_str = cJSON_GetObjectItem( jsonPayload, CLOUD_DISCONNECT_REASON )->valuestring; + if (disconn_str != NULL && strlen(disconn_str) == 0) { ParodusError("Invalid cloud-disconnect request. disconnect reason is NULL\n"); (*response)->u.crud.status = 400; @@ -1237,12 +1239,13 @@ int updateObject( wrp_msg_t *reqMsg, wrp_msg_t **response ) { //check disconnection reason is character string of [a-zA-Z0-9 ]* - valid = validateDisconnectString(cJSON_GetObjectItem( jsonPayload,"disconnection-reason" )->valuestring); + valid = validateDisconnectString(disconn_str); if(valid >0) { - //set the disconnection-reason value to in-memory - get_parodus_cfg()->cloud_disconnect = strdup(cJSON_GetObjectItem( jsonPayload,"disconnection-reason" )->valuestring); - ParodusInfo("get_parodus_cfg()->cloud_disconnect value set as %s\n", get_parodus_cfg()->cloud_disconnect); + //set the disconnection reason value to in-memory + set_cloud_disconnect_reason(get_parodus_cfg(), disconn_str); + ParodusInfo("set cloud-disconnect reason as %s \n", get_parodus_cfg()->cloud_disconnect); + } else { diff --git a/src/upstream.c b/src/upstream.c index f598625..f300bc4 100644 --- a/src/upstream.c +++ b/src/upstream.c @@ -71,7 +71,7 @@ pthread_mutex_t *get_global_nano_mut(void) /*----------------------------------------------------------------------------*/ /* Internal Functions */ /*----------------------------------------------------------------------------*/ -static char *get_src_dest_from_sub_req(char *upstreamDest); +static char *get_src_dest_from_req(char *upstreamDest); /*----------------------------------------------------------------------------*/ /* External functions */ /*----------------------------------------------------------------------------*/ @@ -337,9 +337,9 @@ void *processUpstreamMessage() if(WRP_MSG_TYPE__RETREIVE == msgType && msg->u.crud.dest !=NULL && msg->u.crud.source != NULL) { destVal = strdup(msg->u.crud.dest); - upstreamDest = get_src_dest_from_sub_req(destVal); + upstreamDest = get_src_dest_from_req(destVal); upstreamSrc = strdup(msg->u.crud.source); - subsSource = get_src_dest_from_sub_req(upstreamSrc); + subsSource = get_src_dest_from_req(upstreamSrc); /* Handle cloud-status retrieve request here Expecting dest format as mac:xxxxxxxxxxxx/parodus/cloud-status @@ -362,7 +362,7 @@ void *processUpstreamMessage() Strip src field to get "parodus/cloud-status" */ crudDest = strdup(msg->u.crud.dest); - serviceName = get_src_dest_from_sub_req(crudDest); + serviceName = get_src_dest_from_req(crudDest); if ( serviceName != NULL) { //Send Client cloud-status response back to registered client @@ -463,17 +463,19 @@ void sendUpstreamMsgToServer(void **resp_bytes, size_t resp_size) /* Internal function to parse wrp src/dest + (e.g parodus/cloud-status parsing from mac:44aaf59b18xx/parodus/cloud-status) */ -static char *get_src_dest_from_sub_req(char *upstreamDest) +static char *get_src_dest_from_req(char *upstreamDest) { char * endValue = NULL; char * tempValue = NULL; if(upstreamDest !=NULL) { - tempValue = strtok(upstreamDest , "/"); + tempValue = strchr(upstreamDest , '/'); if(tempValue !=NULL) { - endValue = strtok(NULL , ""); + tempValue++; + endValue = tempValue; } } return endValue; diff --git a/tests/test_config.c b/tests/test_config.c index 2bd2659..350b612 100644 --- a/tests/test_config.c +++ b/tests/test_config.c @@ -413,7 +413,7 @@ void test_setDefaultValuesToCfg() assert_int_equal((int)cfg->flags, 0); assert_string_equal(cfg->webpa_path_url, WEBPA_PATH_URL); assert_string_equal(cfg->webpa_uuid, "1234567-345456546"); - assert_string_equal(cfg->cloud_status, "offline"); + assert_string_equal(cfg->cloud_status, CLOUD_STATUS_OFFLINE); } void err_setDefaultValuesToCfg() diff --git a/tests/test_conn_interface.c b/tests/test_conn_interface.c index 3bd18c7..42e1c50 100644 --- a/tests/test_conn_interface.c +++ b/tests/test_conn_interface.c @@ -282,7 +282,7 @@ void test_createSocketConnection1() expect_function_call(nopoll_ctx_unref); expect_function_call(nopoll_cleanup_library); createSocketConnection(NULL); - assert_string_equal(get_parodus_cfg()->cloud_status, "offline"); + assert_string_equal(get_parodus_cfg()->cloud_status, CLOUD_STATUS_OFFLINE); } diff --git a/tests/test_createConnection.c b/tests/test_createConnection.c index 09f2d3b..88d90ea 100644 --- a/tests/test_createConnection.c +++ b/tests/test_createConnection.c @@ -341,7 +341,7 @@ void test_createConnection() int ret = createNopollConnection(ctx); assert_int_equal(ret, nopoll_true); - assert_string_equal(get_parodus_cfg()->cloud_status, "online"); + assert_string_equal(get_parodus_cfg()->cloud_status, CLOUD_STATUS_ONLINE); free(cfg); if (g_jwt_server_ip !=NULL) { diff --git a/tests/test_crud_internal.c b/tests/test_crud_internal.c index e2571c7..0d53220 100644 --- a/tests/test_crud_internal.c +++ b/tests/test_crud_internal.c @@ -1515,7 +1515,7 @@ void test_retrieveObject_cloud_status() memset(respMsg, 0, sizeof(wrp_msg_t)); ParodusCfg cfg; memset(&cfg,0,sizeof(cfg)); - cfg.cloud_status = strdup("online"); + cfg.cloud_status = CLOUD_STATUS_ONLINE; cfg.crud_config_file = strdup("parodus_cfg.json"); set_parodus_cfg(&cfg); testdata=strdup("{\"tags\":{\"test1\":{\"expires\":1522451870}}}"); @@ -1528,7 +1528,7 @@ void test_retrieveObject_cloud_status() ret = retrieveObject(reqMsg, &respMsg); assert_int_equal (respMsg->u.crud.status, 200); assert_int_equal (ret, 0); - assert_string_equal(get_parodus_cfg()->cloud_status, "online"); + assert_string_equal(get_parodus_cfg()->cloud_status, CLOUD_STATUS_ONLINE); assert_int_equal (respMsg->u.crud.payload_size, 25); fp = fopen(cfg.crud_config_file, "r"); @@ -3021,7 +3021,6 @@ int main(void) cmocka_unit_test(test_deleteObject_NonExistObj), cmocka_unit_test(test_deleteObject_withTagsEmpty), cmocka_unit_test(test_deleteObject_tagsFailure) - }; return cmocka_run_group_tests(tests, NULL, NULL);