From 19056ddfecce8e143ff8d42b5cc0ae6bf8335856 Mon Sep 17 00:00:00 2001 From: Sadhyama Vengilat Date: Thu, 16 Jul 2020 16:20:18 +0530 Subject: [PATCH] Webconfig communication to aker via parodus --- src/client_list.c | 21 +++++++++++++++++++++ src/client_list.h | 2 +- src/crud_internal.c | 31 +++++++++++++++++++++++++++++++ src/upstream.c | 37 ++++++++++++++++++++++++++++++++++--- tests/CMakeLists.txt | 5 +++-- tests/test_conn_interface.c | 3 --- 6 files changed, 90 insertions(+), 9 deletions(-) diff --git a/src/client_list.c b/src/client_list.c index ea50d30..c7c1ded 100644 --- a/src/client_list.c +++ b/src/client_list.c @@ -294,3 +294,24 @@ int sendMsgtoRegisteredClients(char *dest,const char **Msg,size_t msgSize) release_global_node (); return 0; } + +//To check client registration status with parodus. +int checkClientStatus(char *serviceName) +{ + reg_list_item_t *temp = NULL; + temp = get_global_node(); + while (NULL != temp) + { + ParodusPrint("node is pointing to temp->service_name %s \n",temp->service_name); + // Sending message to registered clients + if( strcmp(serviceName, temp->service_name) == 0) + { + release_global_node (); + return 1; + } + ParodusPrint("checking the next item in the list\n"); + temp= temp->next; + } + release_global_node (); + return 0; +} diff --git a/src/client_list.h b/src/client_list.h index a06dcc6..13dbaf3 100644 --- a/src/client_list.h +++ b/src/client_list.h @@ -56,7 +56,7 @@ int sendMsgtoRegisteredClients(char *dest,const char **Msg,size_t msgSize); reg_list_item_t * get_global_node(void); void release_global_node (void); - +int checkClientStatus(); #ifdef __cplusplus } #endif diff --git a/src/crud_internal.c b/src/crud_internal.c index 62c9e70..be91092 100644 --- a/src/crud_internal.c +++ b/src/crud_internal.c @@ -26,6 +26,9 @@ #include "config.h" #include "connection.h" #include "close_retry.h" +#include "client_list.h" + +#define SERVICE_STATUS "service-status" static void freeObjArray(char *(*obj)[], int size); static int writeIntoCrudJson(cJSON *res_obj, char * object, cJSON *objValue, int freeFlag); @@ -589,6 +592,34 @@ int retrieveFromMemory(char *keyName, cJSON **jsonresponse) cJSON_AddItemToObject( *jsonresponse, CLOUD_STATUS , cJSON_CreateString(get_parodus_cfg()->cloud_status)); } } + else if(strstr(keyName, "status") !=NULL) + { + char *service = NULL; + const char s[2] = "-"; + service = strtok(keyName, s); + if(service !=NULL) + { + ParodusPrint("service is %s\n", service); + char *regstatus = NULL; + + if(checkClientStatus(service)) + { + regstatus = strdup("online"); + } + else + { + regstatus = strdup("offline"); + } + ParodusInfo("retrieveFromMemory: keyName:%s value:%s\n", keyName, regstatus); + cJSON_AddItemToObject( *jsonresponse, SERVICE_STATUS , cJSON_CreateString(regstatus)); + free(regstatus); + regstatus = NULL; + } + else + { + ParodusError("Failed to get service name\n"); + } + } else if(strcmp(BOOT_TIME, keyName)==0) { ParodusInfo("retrieveFromMemory: keyName:%s value:%d\n",keyName,get_parodus_cfg()->boot_time); diff --git a/src/upstream.c b/src/upstream.c index 799427e..0f13df0 100644 --- a/src/upstream.c +++ b/src/upstream.c @@ -417,12 +417,43 @@ void *processUpstreamMessage() { ParodusError("Failed to get device_id\n"); } - } else if (WRP_MSG_TYPE__SVC_ALIVE != msgType) { + } + else if((WRP_MSG_TYPE__UPDATE == msgType) || (WRP_MSG_TYPE__DELETE == msgType)) + { + ParodusPrint("UPDATE/DELETE request\n"); + ret = getDeviceId(&device_id, &device_id_len); + if(ret == 0) + { + ParodusPrint("device_id %s device_id_len %lu\n", device_id, device_id_len); + /* Match dest based on device_id. Check dest start with: "mac:112233445xxx" ? */ + if( 0 == strncasecmp(device_id, msg->u.crud.dest, device_id_len-1) ) + { + /* For this device. For nanomsg clients.*/ + getServiceNameAndSendResponse(msg, &message->msg, message->len); + } + else + { + /* Not for this device. Send upstream */ + ParodusInfo("sendUpstreamMsgToServer \n"); + sendUpstreamMsgToServer(&message->msg, message->len); + } + if(device_id != NULL) + { + free(device_id); + device_id = NULL; + } + } + else + { + ParodusError("Failed to get device_id\n"); + } + } + else if (WRP_MSG_TYPE__SVC_ALIVE != msgType) { /* Don't reply to service alive message */ sendUpstreamMsgToServer(&message->msg, message->len); - } } - } + } + } } else { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 616195f..b9a9472 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -225,7 +225,7 @@ target_link_libraries (test_crud_tasks -lcmocka ${PARODUS_COMMON_LIBS} ) #------------------------------------------------------------------------------- add_test(NAME test_crud_internal COMMAND ${MEMORY_CHECK} ./test_crud_internal) add_executable(test_crud_internal test_crud_internal.c ../src/config.c ../src/close_retry.c - ../src/ParodusInternal.c ../src/string_helpers.c ../src/crud_internal.c ) + ../src/ParodusInternal.c ../src/string_helpers.c ../src/crud_internal.c ../src/client_list.c) target_link_libraries (test_crud_internal -lcmocka ${PARODUS_COMMON_LIBS} -lcurl -luuid) #------------------------------------------------------------------------------- @@ -236,7 +236,7 @@ add_executable(test_upstream test_upstream.c ../src/upstream.c ../src/close_retr target_link_libraries (test_upstream -lcmocka gcov -lcunit -lcimplog -lwrp-c -luuid -lpthread -lmsgpackc -lnopoll -Wl,--no-as-needed -lcjson -lcjwt -ltrower-base64 - -lssl -lcrypto -lrt -lm) + -lssl -lcrypto -lrt -lm -lnanomsg) #------------------------------------------------------------------------------- # test_upstream_sock @@ -287,6 +287,7 @@ set(CONIFC_SRC test_conn_interface.c ../src/heartBeat.c ../src/close_retry.c ../src/event_handler.c + ../src/client_list.c ) if (ENABLE_SESHAT) set(CONIFC_SRC ${CONIFC_SRC} ../src/seshat_interface.c) diff --git a/tests/test_conn_interface.c b/tests/test_conn_interface.c index c88eeb4..181c04d 100644 --- a/tests/test_conn_interface.c +++ b/tests/test_conn_interface.c @@ -291,9 +291,6 @@ void timespec_diff(struct timespec *start, struct timespec *stop, diff->tv_nsec = 1000; } -void deleteAllClients (void) -{ -} /*----------------------------------------------------------------------------*/ /* Tests */