Compare commits

...

99 Commits

Author SHA1 Message Date
Weston Schmidt
85a0d9b71d Merge pull request #425 from shilpa24balaji/memFreeMetadata
Free memory in Parodus during exit/shutdown
2023-07-19 17:48:29 -07:00
Shilpa Seshadri
03a5b96e0c To fix security warnings 2023-07-14 12:02:29 +05:30
Mohamed Shaikh
066bdc180d "Memory hardening in Parodus in exit scenarios"
Signed-off-by: Mohamed Shaikh <mohamed.shaikh@t-systems.com>
2023-07-12 17:34:22 +05:30
sadhyama
118e8ee32f Merge pull request #413 from shilpa24balaji/xmidt_send_loop
Xmidt send loop
2023-04-11 12:26:39 +05:30
Shilpa Seshadri
f7c9f483f9 Merge branch 'master' of https://github.com/xmidt-org/parodus into xmidt_send_loop 2023-04-05 19:04:56 +05:30
shilpa24balaji
502f56400e Merge pull request #418 from sadhyama/lowqos_retry
XmidtSendData to handle higher priority low qos
2023-03-30 20:24:10 +05:30
Sadhyama Vengilat
3e557ae4b0 To skip max queue size delete for higher priority low qos 2023-03-30 18:34:55 +05:30
Sadhyama Vengilat
0602fb243b XmidtSendData to handle higher priority low qos msgs to confirm send success 2023-03-28 18:45:31 +05:30
shilpa24balaji
1a7ae0b785 Merge pull request #417 from sadhyama/rbus_log
Enable rbus logs in parodus
2023-03-23 11:53:46 +05:30
Sadhyama Vengilat
bc655cf9ba Parodus to enable rbus ERROR level logging 2023-03-17 17:28:40 +05:30
Sadhyama Vengilat
ad0491179d Remove threadId from rbus log 2023-03-16 18:31:02 +05:30
Sadhyama Vengilat
fa49a52a94 Register rbus logger to enable more debug logs from rbus 2023-03-16 11:19:11 +05:30
shilpa24balaji
25baef78a8 Merge pull request #416 from sadhyama/max_queue
Fix parodus crash when xmidtSend reaches max queue size during WFO
2023-03-13 23:41:07 +05:30
Sadhyama Vengilat
9034ef9d10 To fix low qos msgs immediate delete during max queue size 2023-03-03 21:03:51 +05:30
Sadhyama Vengilat
9020089016 To skip max queue size callback for already processed msgs 2023-02-28 17:39:33 +05:30
sadhyama
664690e6a6 Merge pull request #415 from sadhyama/wfo_subscribe
Subscribe to CurrentActiveInterfaceEvent before initial cloud connection
2023-02-22 09:57:42 +05:30
shilpa24balaji
4aed47b730 Merge pull request #414 from Mike0893/master
RDKC-13073 : Remove camera specific patch from parodus
2023-02-21 13:22:16 +05:30
Sadhyama Vengilat
2f3f1424b4 Subscribe to CurrentActiveInterfaceEvent before initial cloud connection 2023-02-17 19:11:03 +05:30
mmikhi643
91ae0e82e2 RDKC-13073 : Remove camera specific patch from parodus 2023-02-15 16:20:20 +00:00
mmikhi643
bfc2659bbb RDKC-13073 : Remove camera specific patch from parodus 2023-02-14 14:43:29 +00:00
shilpa24balaji
f9c2878cbf Merge pull request #412 from vasuki01/null_check
"Added null check as fix for parodus crash"
2023-01-17 19:56:53 +05:30
Vasuki
c84a1bdfad "Added null check as fix for parodus crash" 2023-01-11 22:42:23 +05:30
Shilpa Seshadri
0b0ba77bd6 Wait until close retry is in progress for xmidtEventSendToServer 2023-01-06 00:16:27 +05:30
shilpa24balaji
0b0309c3dd Merge pull request #410 from Thanusha-D/traceContext_api
Log traceParent & traceState value in upstream request & event messages
2022-12-22 08:57:51 +05:30
Thanusha D
f4e358c179 Log traceParent & traceState value in upstream request & event messages 2022-12-21 16:04:32 +05:30
Shilpa Seshadri
0561c67e5c To avoid continuous xmidtEventSendToServer retry loop 2022-12-15 20:42:34 +05:30
shilpa24balaji
c1fc8d877b Merge pull request #409 from shilpa24balaji/rbus
Use rdkcentral RBUS repo & resolve dependencies
2022-12-06 23:10:36 +05:30
Shilpa Seshadri
581d7fc966 Unit test fixes 2022-11-18 18:28:40 +05:30
Shilpa Seshadri
0673d2624e Use rdkcentral RBUS repo & resolve dependencies 2022-11-11 21:08:03 +05:30
shilpa24balaji
0f82e7c2d9 Merge pull request #408 from vasuki01/seriallog
Serial-number configuration incorrect in parodus log
2022-11-03 16:51:10 +05:30
Vasuki
4acf7f63ba Serial-number configuration incorrect in parodus log 2022-11-02 15:10:57 +05:30
shilpa24balaji
df67b95244 Merge pull request #406 from shilpa24balaji/webcfg_signal11
To fix webconfig upstream event crash
2022-10-22 22:18:55 +05:30
Shilpa Seshadri
e6e37053d3 To fix webconfig upstream event crash 2022-10-21 20:06:32 +05:30
shilpa24balaji
d5a9ff36f6 Merge pull request #403 from guruchandru/retry_stuck
Moving from Realtime clock to monotonic clock in backoff delay
2022-09-28 23:09:16 +05:30
Guru Chandru
f4536b778e Fix for updating parconnhealth file 2022-09-28 18:41:20 +05:30
shilpa24balaji
b65b3ab3b0 Merge pull request #404 from sadhyama/xmidt_src
Modify outparams source based on status and handle cloud failure
2022-09-26 17:16:12 +05:30
Sadhyama Vengilat
954080bbd1 Modify outparams source based on status and handle cloud failure 2022-09-23 20:56:12 +05:30
Guru Chandru
c8a2c95ae4 Switch to use the sonarcloud installer action 2022-09-22 12:30:57 +05:30
shilpa24balaji
59bba50bee Merge pull request #402 from sadhyama/exp_callback
send rbus callback on xmidt msg expiry and queue optimize
2022-09-21 20:07:02 +05:30
Sadhyama Vengilat
3090e50b02 Msg optimized callback when low qos deletion on max queue 2022-09-21 19:35:02 +05:30
Guru Chandru
af4eeb9199 Merge remote-tracking branch 'upstream/master' into retry_stuck 2022-09-21 18:53:42 +05:30
Guru Chandru
2dd392dac6 Adding cond attribute for MONOTONIC wait 2022-09-21 18:02:05 +05:30
Sadhyama Vengilat
7eae3da3f2 send rbus callback when queue optimized 2022-09-20 17:54:07 +05:30
Sadhyama Vengilat
6e5ecc87f9 send rbus callback to caller during msg expiry 2022-09-20 17:14:26 +05:30
shilpa24balaji
893c1c7547 Merge pull request #401 from sadhyama/cloudack_serv
Implement cloud ack for provider of Device.X_RDK_Xmidt.SendData
2022-09-19 20:12:57 +05:30
Sadhyama Vengilat
3e30328738 Update latest wrp-c git tag 2022-09-19 20:03:18 +05:30
Thanusha D
f7412f9710 Changed Realtime clock to monotonic clock in backoff delay 2022-09-19 19:41:48 +05:30
Sadhyama Vengilat
2e11d7e3ba To skip DELETE state and logging multiple times during expiry 2022-09-19 16:49:16 +05:30
Sadhyama Vengilat
5ddac7dc47 Reduce debug log 2022-09-16 20:18:42 +05:30
Sadhyama Vengilat
79d8a84c2e Add sleep 1s to avoid cpu load 2022-09-15 20:03:01 +05:30
Sadhyama Vengilat
6f7332d054 To add 200ms sleep to process ack and handle partnerid mismatch case 2022-09-15 16:51:04 +05:30
Sadhyama Vengilat
26d409d884 To fix local pc build failure in tests 2022-09-13 16:48:39 +05:30
Sadhyama Vengilat
d3e758ccb4 Remove test simulation and addional debug logs 2022-09-12 21:06:33 +05:30
Sadhyama Vengilat
4af1aaf418 To fix crash when partner id mismatch and fix msg processing before init 2022-09-09 20:29:18 +05:30
Sadhyama Vengilat
8e00ec8e5e Fix unknown dest error during downstream cloud ack processing 2022-08-29 20:33:00 +05:30
Sadhyama Vengilat
43f55f9a99 Reduce cloud ack processing time delay 2022-08-25 19:53:48 +05:30
Sadhyama Vengilat
bf3ee65360 Enable debug logs 2022-08-25 18:01:24 +05:30
Sadhyama Vengilat
9ebe011cb0 Reduce xmidt send consumer sleep on processing msgs 2022-08-25 16:07:09 +05:30
Sadhyama Vengilat
2bfc0a3c32 Merge remote-tracking branch 'upstream/master' into cloudack_serv 2022-08-03 14:08:38 +05:30
Sadhyama Vengilat
37bb19eeaa Remove test simulation for sendresponse 2022-08-03 14:05:41 +05:30
Sadhyama Vengilat
2c4980cf9e Enable more debug logs in validate partner id 2022-08-02 18:09:12 +05:30
Sadhyama Vengilat
2248f31658 Remove test simulation for cloud ack to test with cd server 2022-08-02 16:22:19 +05:30
Sadhyama Vengilat
b97643ec42 Optimize xmidtQ when connection down and reset to head 2022-07-21 18:38:28 +05:30
Sadhyama Vengilat
66b16aa58f Modify xmidt state flow based on next node 2022-07-18 20:37:44 +05:30
Sadhyama Vengilat
d3a56df184 Handle enqueued msg expiry when cloud connection is down 2022-07-14 20:09:04 +05:30
Sadhyama Vengilat
8b5346e69b To test high qos wan down scenarios locally 2022-07-11 19:58:31 +05:30
Sadhyama Vengilat
2a28e5d3e8 Log qos , transaction id during expiry and delete 2022-07-07 18:34:50 +05:30
Sadhyama Vengilat
33af3f3eec Modify xmidtQsize logs and test simulation transid 2022-07-06 18:19:43 +05:30
Sadhyama Vengilat
c9b34d3c3f Reduce debug logs 2022-07-06 13:07:04 +05:30
Sadhyama Vengilat
4add1c07ca Test simulation to generate cloud acks for each transid 2022-07-05 16:33:34 +05:30
Sadhyama Vengilat
75c833e3a8 To handle max queue size 0 and qos disabled 2022-07-04 18:09:33 +05:30
Sadhyama Vengilat
5359fc79cf Remove transaction id checks from delete func 2022-07-04 17:33:55 +05:30
Sadhyama Vengilat
623192e301 Fix ping received time logging 2022-07-04 14:05:52 +05:30
Sadhyama Vengilat
b6490ba5b3 Check xmidt state as DELETE along with transid when deleting a node 2022-07-01 20:16:10 +05:30
shilpa24balaji
20ccd81086 Merge pull request #400 from vasuki01/serial_fix
"Parodus crash due to invalid serial number"
2022-07-01 17:15:58 +05:30
Vasuki
f9ac95642c "Parodus crash due to invalid serial number" 2022-07-01 16:54:29 +05:30
Sadhyama Vengilat
ae5d027612 Fix time value logging 2022-06-30 20:07:58 +05:30
Sadhyama Vengilat
e139a2d6b6 Fix delete node traversal and debug enqueueTime 2022-06-30 18:45:56 +05:30
Sadhyama Vengilat
f655d6382b Fix lock stuck issue during delete and enqueuetime logging 2022-06-30 14:14:30 +05:30
Sadhyama Vengilat
267e0eb796 Merge remote-tracking branch 'upstream/master' into cloudack_xmdQ 2022-06-29 20:45:49 +05:30
Sadhyama Vengilat
00251153a4 Handle xmidt size when max queue size argument is not available 2022-06-29 20:40:38 +05:30
Sadhyama Vengilat
d328a56e1a Fix build error on max queue size argument 2022-06-29 17:30:53 +05:30
Sadhyama Vengilat
1a169561e4 Merge remote-tracking branch 'upstream/cmd_queSize' into cloudack_xmdQ 2022-06-29 15:56:18 +05:30
Sadhyama Vengilat
8019489b86 Handle xmidt event validation failures and delete from queue 2022-06-29 14:13:37 +05:30
Sadhyama Vengilat
ee3e006908 Xmidt rdr status to error message mapping to send callback 2022-06-28 20:18:38 +05:30
Sadhyama Vengilat
797c9de17f Add mutex locks for xmidtQsize 2022-06-28 17:18:46 +05:30
Sadhyama Vengilat
0bf4d754e5 DELETE state to delete processed xmidt msgs 2022-06-24 20:42:59 +05:30
Sadhyama Vengilat
3d98b4a80b Traverse xmidtQ locally and reset to headnode 2022-06-24 20:18:33 +05:30
Sadhyama Vengilat
80a50dead6 check expiry based on qos and handle maxQueue 2022-06-24 20:09:03 +05:30
Sadhyama Vengilat
dd69d5ec5d Use existing getCurrentTime func to set time values 2022-06-23 20:20:20 +05:30
Sadhyama Vengilat
1b23de5a12 SENT state cloud ack timeout retry handling and ping detection 2022-06-22 20:25:58 +05:30
Sadhyama Vengilat
8ea342b537 Xmidt SENT state to process cloud ACK 2022-06-21 20:29:36 +05:30
Sadhyama Vengilat
124fc11232 Add xmidt states and process PENDING messages 2022-06-20 20:29:04 +05:30
shilpa24balaji
9abb37a005 Merge pull request #398 from Thanusha-D/log_change
Added NULL checks in value change event & Logging transaction_uuid in msg send
2022-06-17 12:17:47 +05:30
Thanusha D
c0edaaf31c Added logs for debugging 2022-06-16 21:16:00 +05:30
Thanusha D
32138613bb To get max-queue-size from startparodus 2022-06-16 12:02:07 +05:30
Sadhyama Vengilat
4cb167e8dd Fix xmidtQ head node NULL issue while cloud ack processing 2022-06-03 20:50:14 +05:30
Sadhyama Vengilat
454ec26065 Xmidt msg status update based on cloud ack 2022-06-03 13:04:02 +05:30
Sadhyama Vengilat
47af275929 Xmidt cloud ack handling with xmidtMsgQ 2022-06-01 20:40:22 +05:30
31 changed files with 1456 additions and 232 deletions

View File

@@ -39,9 +39,9 @@ jobs:
run: mkdir build
- name: Get Sonarcloud Binaries
working-directory: build
run: |
../.github/scripts/get_sonarcloud.sh
uses: xmidt-org/sonarcloud-installer-action@v1
with:
working-directory: build
- name: CMake
working-directory: build

View File

@@ -44,12 +44,10 @@ include_directories(${INCLUDE_DIR}
)
if (ENABLE_WEBCFGBIN)
include_directories(${INCLUDE_DIR}/rbus
${INCLUDE_DIR}/rbus-core
${INCLUDE_DIR}/rtmessage
)
include_directories(${INCLUDE_DIR}/rbus)
endif (ENABLE_WEBCFGBIN)
# Get git commit hash
#-------------------------------------------------------------------------------
execute_process(
@@ -66,9 +64,18 @@ add_definitions("-DGIT_COMMIT_TAG=\"${GIT_COMMIT_TAG}\"")
add_definitions(-std=c99)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -DNOPOLL_LOGGER ")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-missing-field-initializers")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall")
if (DEVICE_CAMERA)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=all -Wno-missing-field-initializers")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=all")
add_definitions(-DDEVICE_CAMERA)
else ()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=all -Wno-missing-field-initializers")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=all")
endif (DEVICE_CAMERA)
if (INCLUDE_BREAKPAD)
add_definitions(-DINCLUDE_BREAKPAD)
endif (INCLUDE_BREAKPAD)
# pthread external dependency
#-------------------------------------------------------------------------------
@@ -173,7 +180,7 @@ ExternalProject_Add(wrp-c
DEPENDS trower-base64 msgpack cimplog
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/_prefix/wrp-c
GIT_REPOSITORY https://github.com/xmidt-org/wrp-c.git
GIT_TAG "71f8a39fe39f98da007ed4cdabbb192be1da1685"
GIT_TAG "b5ef4d10cb39905908788bc89ab3e4dab201db8a"
CMAKE_ARGS += -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}
-DMSGPACK_ENABLE_CXX=OFF
-DMSGPACK_BUILD_EXAMPLES=OFF
@@ -237,46 +244,21 @@ include_directories(${INCLUDE_DIR}
endif (FEATURE_DNS_QUERY)
if (ENABLE_WEBCFGBIN)
# rtMessage external dependency
#-------------------------------------------------------------------------------
ExternalProject_Add(rtMessage
DEPENDS cJSON
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/_prefix/rtMessage
GIT_REPOSITORY https://github.com/rdkcmf/rdk-rtmessage.git
GIT_TAG rdk-next
CMAKE_ARGS += -DBUILD_RTMESSAGE_LIB=ON
-DBUILD_RTMESSAGE_SAMPLE_APP=ON
-DBUILD_FOR_DESKTOP=OFF
-DCJSON_BUILD=OFF
-DBUILD_DATAPROVIDER_LIB=ON
-DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DBUILD_TESTING=OFF
)
add_library(librtMessage STATIC SHARED IMPORTED)
add_dependencies(librtMessage rtMessage)
# rbus-core external dependency
#-------------------------------------------------------------------------------
ExternalProject_Add(rbus-core
DEPENDS rtMessage
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/_prefix/rbus-core
GIT_REPOSITORY https://github.com/rdkcmf/rbuscore.git
GIT_TAG rdk-next
CMAKE_ARGS += -DBUILD_FOR_DESKTOP=ON -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}
-DBUILD_TESTING=OFF
)
add_library(librbus-core STATIC SHARED IMPORTED)
add_dependencies(librbus-core rbus-core)
# rbus external dependency
#-------------------------------------------------------------------------------
ExternalProject_Add(rbus
DEPENDS rtMessage rbus-core
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/_prefix/rbus
GIT_REPOSITORY https://github.com/rdkcmf/rbus.git
GIT_TAG rdk-next
GIT_REPOSITORY https://github.com/rdkcentral/rbus.git
GIT_TAG main
CMAKE_ARGS += -DBUILD_FOR_DESKTOP=ON -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DBUILD_TESTING=OFF
)
add_library(librbuscore STATIC SHARED IMPORTED)
add_dependencies(librbuscore rbuscore)
add_library(librtMessage STATIC SHARED IMPORTED)
add_dependencies(librtMessage rtMessage)
add_library(librbus STATIC SHARED IMPORTED)
add_dependencies(librbus rbus)
endif (ENABLE_WEBCFGBIN)

View File

@@ -63,6 +63,6 @@ target_link_libraries (parodus -llibseshat)
endif (ENABLE_SESHAT)
if (ENABLE_WEBCFGBIN)
target_link_libraries (parodus -lrbus -lrbus-core -lrtMessage)
target_link_libraries (parodus -lrbus)
endif (ENABLE_WEBCFGBIN)
install (TARGETS parodus DESTINATION bin)

View File

@@ -164,6 +164,7 @@ void timespec_diff(struct timespec *start, struct timespec *stop,
#ifdef ENABLE_WEBCFGBIN
void subscribeRBUSevent();
int regXmidtSendDataMethod();
void registerRbusLogger();
#endif
#ifdef WAN_FAILOVER_SUPPORTED
void setWebpaInterface(char *value);
@@ -188,7 +189,9 @@ pthread_mutex_t *get_interface_down_mut();
pthread_cond_t *get_global_cloud_status_cond(void);
pthread_mutex_t *get_global_cloud_status_mut(void);
int cloud_status_is_online (void);
#ifdef __cplusplus
}
#endif

View File

@@ -223,8 +223,14 @@ void getAuthToken(ParodusCfg *cfg)
* @param[in] nmemb size of delivered data
* @param[out] data curl response data saved.
*/
#ifndef DEVICE_CAMERA
size_t write_callback_fn(void *buffer, size_t size, size_t nmemb, struct token_data *data)
{
#else
size_t write_callback_fn(void *buffer, size_t size, size_t nmemb, void *datain)
{
struct token_data *data = (struct token_data*) datain;
#endif //DEVICE_CAMERA
ParodusCfg *cfg;
size_t max_data_size = sizeof (cfg->webpa_auth_token);
size_t index = data->size;

View File

@@ -47,7 +47,11 @@ struct token_data {
int requestNewAuthToken(char *newToken, size_t len, int r_count);
void getAuthToken(ParodusCfg *cfg);
#ifndef DEVICE_CAMERA
size_t write_callback_fn(void *buffer, size_t size, size_t nmemb, struct token_data *data);
#else
size_t write_callback_fn(void *buffer, size_t size, size_t nmemb, void *data);
#endif
char* generate_trans_uuid();
#ifdef __cplusplus

View File

@@ -41,7 +41,6 @@ pthread_cond_t cloud_status_cond=PTHREAD_COND_INITIALIZER;
char webpa_interface[64]={'\0'};
char cloud_status[32]={'\0'};
static ParodusCfg parodusCfg;
static unsigned int rsa_algorithms =
(1<<alg_rs256) | (1<<alg_rs384) | (1<<alg_rs512);
@@ -94,10 +93,14 @@ void set_cloud_status(char *status)
char *get_cloud_status(void)
{
char *status = NULL;
pthread_mutex_lock(&config_mut);
parStrncpy(cloud_status, get_parodus_cfg()->cloud_status, sizeof(cloud_status));
pthread_mutex_unlock(&config_mut);
return cloud_status;
if(NULL != get_parodus_cfg()->cloud_status)
{
status = get_parodus_cfg()->cloud_status;
}
pthread_mutex_unlock(&config_mut);
return status;
}
const char *get_tok (const char *src, int delim, char *result, int resultsize)
@@ -208,6 +211,38 @@ int parse_mac_address (char *target, const char *arg)
return 0;
}
int parse_serial_num(char *target, const char *arg)
{
char ch;
if(arg != NULL)
{
if(strlen(arg) == 0)
{
ParodusError("Empty serial number, setting to default unknown\n");
strcpy(target,"unknown");
}
for(int i=0; (ch = arg[i]) != '\0'; i++)
{
// check if character is ascii, a-z --> 97 to 122, A-Z --> 65 to 90, digits(0 to 9) --> 48 to 57
if((ch >= 97 && ch <= 122) || (ch >= 65 && ch <= 90) || (ch >=48 && ch <= 57))
{
target[i] = ch;
}
else
{
ParodusError("Invalid serial number, setting to default unknown\n");
strcpy(target,"unknown");
break;
}
}
}
else
{
ParodusError("serial number argument is NULL\n");
}
return 0;
}
int server_is_http (const char *full_url,
const char **server_ptr)
{
@@ -400,6 +435,9 @@ int parseCommandLine(int argc,char **argv,ParodusCfg * cfg)
{"webpa-backoff-max", required_argument, 0, 'o'},
{"webpa-interface-used", required_argument, 0, 'i'},
{"parodus-local-url", required_argument, 0, 'l'},
#ifdef ENABLE_WEBCFGBIN
{"max-queue-size", required_argument, 0, 'q'},
#endif
{"partner-id", required_argument, 0, 'p'},
#ifdef ENABLE_SESHAT
{"seshat-url", required_argument, 0, 'e'},
@@ -447,7 +485,7 @@ int parseCommandLine(int argc,char **argv,ParodusCfg * cfg)
/* getopt_long stores the option index here. */
int option_index = 0;
c = getopt_long (argc, argv,
"m:s:f:d:r:n:b:u:t:o:i:l:p:e:D:j:a:k:c:T:w:J:46:C:S:R:K:M",
"m:s:f:d:r:n:b:u:t:o:i:l:q:p:e:D:j:a:k:c:T:w:J:46:C:S:R:K:M",
long_options, &option_index);
/* Detect the end of the options. */
@@ -462,8 +500,8 @@ int parseCommandLine(int argc,char **argv,ParodusCfg * cfg)
break;
case 's':
parStrncpy(cfg->hw_serial_number,optarg,sizeof(cfg->hw_serial_number));
ParodusInfo("hw_serial_number is %s\n",cfg->hw_serial_number);
if(parse_serial_num(cfg->hw_serial_number, optarg) == 0)
ParodusInfo ("hw_serial_number is %s\n",cfg->hw_serial_number);
break;
case 'f':
@@ -533,6 +571,16 @@ int parseCommandLine(int argc,char **argv,ParodusCfg * cfg)
parStrncpy(cfg->local_url, optarg,sizeof(cfg->local_url));
ParodusInfo("parodus local_url is %s\n",cfg->local_url);
break;
#ifdef ENABLE_WEBCFGBIN
case 'q':
cfg->max_queue_size = parse_num_arg (optarg, "max-queue-size");
if (cfg->max_queue_size == (unsigned int) -1)
return -1;
ParodusInfo("max_queue_size is %d\n",cfg->max_queue_size);
break;
#endif
case 'D':
// like 'fabric' or 'test'
// this parameter is used, along with the hw_mac parameter
@@ -663,6 +711,53 @@ int parseCommandLine(int argc,char **argv,ParodusCfg * cfg)
return 0;
}
void free_cfg(ParodusCfg *cfg)
{
if(cfg != NULL)
{
if (cfg->mtls_client_cert_path != NULL )
{
free(cfg->mtls_client_cert_path);
cfg->mtls_client_cert_path = NULL;
}
if(cfg->connection_health_file != NULL)
{
free(cfg->connection_health_file);
cfg->connection_health_file = NULL;
}
if(cfg->token_server_url != NULL)
{
free(cfg->token_server_url );
cfg->token_server_url = NULL;
}
if(cfg->mtls_client_key_path != NULL)
{
free(cfg->mtls_client_key_path);
cfg->mtls_client_key_path = NULL;
}
if(cfg->client_cert_path != NULL)
{
free(cfg->client_cert_path);
cfg->client_cert_path = NULL;
}
if(cfg->crud_config_file != NULL)
{
free(cfg->crud_config_file);
cfg->crud_config_file = NULL;
}
if(cfg->close_reason_file != NULL)
{
free(cfg->close_reason_file);
cfg->close_reason_file = NULL;
}
if(cfg->cloud_disconnect != NULL)
{
free(cfg->cloud_disconnect);
cfg->cloud_disconnect = NULL;
}
}
}
void setDefaultValuesToCfg(ParodusCfg *cfg)
{
if(cfg == NULL)
@@ -837,7 +932,9 @@ void loadParodusCfg(ParodusCfg * config,ParodusCfg *cfg)
parStrncpy(cfg->cert_path, "\0", sizeof(cfg->cert_path));
ParodusPrint("cert_path is NULL. set to empty\n");
}
#ifdef ENABLE_WEBCFGBIN
cfg->max_queue_size = config->max_queue_size;
#endif
cfg->boot_time = config->boot_time;
cfg->webpa_ping_timeout = config->webpa_ping_timeout;
cfg->webpa_backoff_max = config->webpa_backoff_max;

View File

@@ -88,6 +88,9 @@ typedef struct
char webpa_uuid[64];
unsigned int flags;
char local_url[124];
#ifdef ENABLE_WEBCFGBIN
unsigned int max_queue_size;
#endif
char partner_id[64];
#ifdef ENABLE_SESHAT
char seshat_url[128];
@@ -132,7 +135,7 @@ void loadParodusCfg(ParodusCfg * config,ParodusCfg *cfg);
* or -1 if error
*/
int parseCommandLine(int argc,char **argv,ParodusCfg * cfg);
void free_cfg(ParodusCfg *cfg);
void setDefaultValuesToCfg(ParodusCfg *cfg);
// Accessor for the global config structure.
ParodusCfg *get_parodus_cfg(void);

View File

@@ -99,7 +99,9 @@ void createSocketConnection(void (* initKeypress)())
#endif
EventHandler();
#ifdef WAN_FAILOVER_SUPPORTED
subscribeCurrentActiveInterfaceEvent();
#endif
set_server_list_null (&server_list);
create_conn_rtn = createNopollConnection(ctx, &server_list);
if(!create_conn_rtn)
@@ -113,9 +115,6 @@ void createSocketConnection(void (* initKeypress)())
UpStreamMsgQ = NULL;
StartThread(handle_upstream, &upstream_tid);
StartThread(processUpstreamMessage, &upstream_msg_tid);
#ifdef WAN_FAILOVER_SUPPORTED
subscribeCurrentActiveInterfaceEvent();
#endif
ParodusMsgQ = NULL;
StartThread(messageHandlerTask, &downstream_tid);
StartThread(serviceAliveTask, &svc_alive_tid);
@@ -232,6 +231,9 @@ void createSocketConnection(void (* initKeypress)())
nopoll_ctx_unref(ctx);
nopoll_cleanup_library();
curl_global_cleanup();
clear_metadata();
rdk_logger_deinit();
free_server_list(&server_list);
}
void shutdownSocketConnection(char *reason) {

View File

@@ -239,7 +239,7 @@ void init_backoff_timer (backoff_timer_t *timer, int max_count)
timer->count = 1;
timer->max_count = max_count;
timer->delay = 1;
clock_gettime (CLOCK_REALTIME, &timer->ts);
clock_gettime (CLOCK_MONOTONIC, &timer->ts);
timer->start_time = time(NULL);
}
@@ -325,8 +325,14 @@ static int backoff_delay (backoff_timer_t *timer)
struct timespec ts;
int rtn;
pthread_condattr_t backoff_delay_cond_attr;
pthread_condattr_init (&backoff_delay_cond_attr);
pthread_condattr_setclock (&backoff_delay_cond_attr, CLOCK_MONOTONIC);
pthread_cond_init (&backoff_delay_con, &backoff_delay_cond_attr);
// periodically update the health file.
clock_gettime (CLOCK_REALTIME, &ts);
clock_gettime (CLOCK_MONOTONIC, &ts);
if ((ts.tv_sec - timer->ts.tv_sec) >= UPDATE_HEALTH_FILE_INTERVAL_SECS) {
start_conn_in_progress (timer->start_time);
timer->ts.tv_sec += UPDATE_HEALTH_FILE_INTERVAL_SECS;
@@ -339,6 +345,8 @@ static int backoff_delay (backoff_timer_t *timer)
rtn = pthread_cond_timedwait (&backoff_delay_con, &backoff_delay_mut, &ts);
pthread_mutex_unlock (&backoff_delay_mut);
pthread_condattr_destroy(&backoff_delay_cond_attr);
if (g_shutdown)
return BACKOFF_SHUTDOWN;
if ((rtn != 0) && (rtn != ETIMEDOUT)) {
@@ -775,8 +783,7 @@ int createNopollConnection(noPollCtx *ctx, server_list_t *server_list)
}
#endif
}
if(conn_ctx.current_server->allow_insecure <= 0)
if(conn_ctx.current_server != NULL && conn_ctx.current_server->allow_insecure <= 0)
{
ParodusInfo("Connected to server over SSL\n");
OnboardLog("Connected to server over SSL\n");

View File

@@ -27,6 +27,9 @@
#include "partners_check.h"
#include "ParodusInternal.h"
#include "crud_interface.h"
#ifdef ENABLE_WEBCFGBIN
#include "xmidtsend_rbus.h"
#endif
/*----------------------------------------------------------------------------*/
/* Function Prototypes */
/*----------------------------------------------------------------------------*/
@@ -91,6 +94,7 @@ void listenerOnMessage(void * msg, size_t msgSize)
{
ParodusPrint("numOfClients registered is %d\n", get_numOfClients());
int ret = validate_partner_id(message, NULL);
ParodusPrint("validate_partner_id returns %d\n", ret);
if(ret < 0)
{
response = cJSON_CreateObject();
@@ -98,7 +102,6 @@ void listenerOnMessage(void * msg, size_t msgSize)
cJSON_AddStringToObject(response, "message", "Invalid partner_id");
}
destVal = strdup(((WRP_MSG_TYPE__EVENT == msgType) ? message->u.event.dest :
((WRP_MSG_TYPE__REQ == msgType) ? message->u.req.dest : message->u.crud.dest)));
@@ -120,10 +123,10 @@ void listenerOnMessage(void * msg, size_t msgSize)
}
ParodusInfo("Received downstream dest as :%s and transaction_uuid :%s\n", dest,
((WRP_MSG_TYPE__REQ == msgType) ? message->u.req.transaction_uuid :
((WRP_MSG_TYPE__EVENT == msgType) ? "NA" : message->u.crud.transaction_uuid)));
((WRP_MSG_TYPE__EVENT == msgType) ? message->u.event.transaction_uuid : message->u.crud.transaction_uuid)));
OnboardLog("%s\n",
((WRP_MSG_TYPE__REQ == msgType) ? message->u.req.transaction_uuid :
((WRP_MSG_TYPE__EVENT == msgType) ? "NA" : message->u.crud.transaction_uuid)));
((WRP_MSG_TYPE__EVENT == msgType) ? message->u.event.transaction_uuid : message->u.crud.transaction_uuid)));
free(destVal);
@@ -168,13 +171,16 @@ void listenerOnMessage(void * msg, size_t msgSize)
destFlag =1;
}
//if any unknown dest received sending error response to server
if(destFlag ==0)
{
ParodusError("Unknown dest:%s\n", dest);
response = cJSON_CreateObject();
cJSON_AddNumberToObject(response, "statusCode", 531);
cJSON_AddStringToObject(response, "message", "Service Unavailable");
}
if (WRP_MSG_TYPE__EVENT != msgType)
{
if(destFlag ==0)
{
ParodusError("Unknown dest:%s\n", dest);
response = cJSON_CreateObject();
cJSON_AddNumberToObject(response, "statusCode", 531);
cJSON_AddStringToObject(response, "message", "Service Unavailable");
}
}
}
if( (WRP_MSG_TYPE__EVENT != msgType) &&
@@ -235,6 +241,37 @@ void listenerOnMessage(void * msg, size_t msgSize)
}
free(resp_msg);
}
#ifdef ENABLE_WEBCFGBIN
//To handle cloud ack events received from server for the xmidt sent messages.
if((WRP_MSG_TYPE__EVENT == msgType) && (ret >= 0))
{
if(get_parodus_cfg()->max_queue_size > 0)
{
//Process cloud ack only when qos > 24
if(highQosValueCheck(message->u.event.qos))
{
if(message->u.event.transaction_uuid !=NULL)
{
ParodusInfo("Received cloud ack from server: transaction_uuid %s qos %d, rdr %d source %s\n", message->u.event.transaction_uuid, message->u.event.qos, message->u.event.rdr, message->u.event.source);
addToCloudAckQ(message->u.event.transaction_uuid, message->u.event.qos, message->u.event.rdr, message->u.event.source);
ParodusPrint("Added to cloud ack Q\n");
}
else
{
ParodusError("cloud ack transaction id is NULL\n");
}
}
else
{
ParodusInfo("cloud ack received with low qos %d, ignoring it\n", message->u.event.qos);
}
}
else
{
ParodusInfo("cloud ack is ignored as max queue size is %d\n", get_parodus_cfg()->max_queue_size );
}
}
#endif
break;
}

View File

@@ -22,12 +22,15 @@
*/
#include "heartBeat.h"
#include "time.h"
#include <stdbool.h>
volatile unsigned int heartBeatTimer = 0;
volatile bool paused = false;
volatile long long pingTimeStamp = 0;
pthread_mutex_t heartBeat_mut=PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t ping_mut=PTHREAD_MUTEX_INITIALIZER;
// Get value of heartBeatTimer
unsigned int get_heartBeatTimer()
@@ -73,5 +76,22 @@ void resume_heartBeatTimer()
pthread_mutex_unlock (&heartBeat_mut);
}
// Set ping received timeStamp
void set_pingTimeStamp()
{
struct timespec ts;
getCurrentTime(&ts);
pthread_mutex_lock (&ping_mut);
pingTimeStamp = (long long)ts.tv_sec;
pthread_mutex_unlock (&ping_mut);
}
// Get ping received timeStamp
long long get_pingTimeStamp()
{
long long tmp = 0;
pthread_mutex_lock (&ping_mut);
tmp = pingTimeStamp;
pthread_mutex_unlock (&ping_mut);
return tmp;
}

View File

@@ -45,6 +45,10 @@ void pause_heartBeatTimer();
// Resume heartBeatTimer, i.e. resume incrementing
void resume_heartBeatTimer();
void set_pingTimeStamp();
long long get_pingTimeStamp();
#ifdef __cplusplus
}
#endif

View File

@@ -24,7 +24,11 @@
#include "parodus_log.h"
#include <curl/curl.h>
#ifdef INCLUDE_BREAKPAD
#ifndef DEVICE_CAMERA
#include "breakpad_wrapper.h"
#else
#include "breakpadwrap.h"
#endif //DEVICE_CAMERA
#endif
#include "signal.h"
#include "privilege.h"
@@ -87,8 +91,17 @@ int main( int argc, char **argv)
signal(SIGHUP, sig_handler);
signal(SIGALRM, sig_handler);
#ifdef INCLUDE_BREAKPAD
#ifndef DEVICE_CAMERA
/* breakpad handles the signals SIGSEGV, SIGBUS, SIGFPE, and SIGILL */
breakpad_ExceptionHandler();
#else
/* breakpad handles the signals SIGSEGV, SIGBUS, SIGFPE, and SIGILL */
BreakPadWrapExceptionHandler eh;
eh = newBreakPadWrapExceptionHandler();
if(NULL != eh) {
ParodusInfo("Breakpad Initialized\n");
}
#endif //DEVICE_CAMERA
#else
signal(SIGSEGV, sig_handler);
signal(SIGBUS, sig_handler);
@@ -107,6 +120,7 @@ int main( int argc, char **argv)
ParodusInfo("********** Starting component: Parodus **********\n ");
drop_root_privilege();
#ifdef ENABLE_WEBCFGBIN
registerRbusLogger();
subscribeRBUSevent();
regXmidtSendDataMethod();
#endif
@@ -117,7 +131,7 @@ int main( int argc, char **argv)
curl_global_init(CURL_GLOBAL_DEFAULT);
createSocketConnection( NULL);
free_cfg(cfg);
return 0;
}

View File

@@ -149,6 +149,7 @@ void listenerOnPingMessage (noPollCtx * ctx, noPollConn * conn, noPollMsg * msg,
if (nopoll_msg_opcode(msg) == NOPOLL_PING_FRAME)
{
reset_heartBeatTimer();
set_pingTimeStamp();
}
}
}

View File

@@ -50,7 +50,7 @@ void setMessageHandlers()
nopoll_conn_set_on_close(get_global_conn(), (noPollOnCloseHandler)listenerOnCloseMessage, NULL);
}
static int cloud_status_is_online (void)
int cloud_status_is_online (void)
{
const char *status = get_cloud_status();
if (NULL == status)

View File

@@ -114,7 +114,7 @@ int validate_partner_id(wrp_msg_t *msg, partners_t **partnerIds)
}
/* Commandline input partner_ids not matching with partner_ids from request, appending to request partner_ids*/
if(matchFlag != 1)
if(matchFlag != 1 && partnerIds !=NULL)
{
(*partnerIds) = (partners_t *) malloc(sizeof(partners_t) + (sizeof(char *) * (count+partnersList->count)));
(*partnerIds)->count = count+partnersList->count;
@@ -132,6 +132,23 @@ int validate_partner_id(wrp_msg_t *msg, partners_t **partnerIds)
i++;
}
}
else if (matchFlag != 1 && partnerIds == NULL)
{
ParodusError("partner_id match not found: command line input %s , msg partner_id %s\n", temp, msg->u.event.partner_ids->partner_ids[0]);
if(partnersList != NULL)
{
for(j=0; j<partnersList->count; j++)
{
if(NULL != partnersList->partner_ids[j])
{
free(partnersList->partner_ids[j]);
}
}
free(partnersList);
}
free(partnerId);
return 1;
}
}
else
{

View File

@@ -17,6 +17,7 @@
#include "time.h"
#include "parodus_log.h"
#include <errno.h>
/*----------------------------------------------------------------------------*/
/* External Functions */
@@ -24,7 +25,10 @@
void getCurrentTime(struct timespec *timer)
{
clock_gettime(CLOCK_REALTIME, timer);
if( clock_gettime(CLOCK_REALTIME, timer) == -1 )
{
ParodusError("clock gettime returns errno %d\n", errno );
}
}
uint64_t getCurrentTimeInMicroSeconds(struct timespec *timer)

View File

@@ -40,7 +40,7 @@
/*----------------------------------------------------------------------------*/
void *metadataPack;
size_t metaPackSize=-1;
size_t metaPackSize=0;
UpStreamMsg *UpStreamMsgQ = NULL;
@@ -110,6 +110,11 @@ void packMetaData()
ParodusError("Failed to encode metadata\n");
}
}
void clear_metadata(){
if(metadataPack != NULL)
free(metadataPack);
}
/*
* @brief To handle UpStream messages which is received from nanomsg server socket
@@ -320,7 +325,10 @@ void *processUpstreamMessage()
}
else if(msgType == WRP_MSG_TYPE__EVENT)
{
ParodusInfo(" Received upstream event data: dest '%s'\n", msg->u.event.dest);
(msg->u.event.headers != NULL && msg->u.event.headers->headers[0] != NULL && msg->u.event.headers->headers[1] != NULL) ? ParodusInfo(" Received upstream event data: dest '%s' traceParent: %s traceState: %s\n", msg->u.event.dest, msg->u.event.headers->headers[0], msg->u.event.headers->headers[1]) : ParodusInfo(" Received upstream event data: dest '%s'\n", msg->u.event.dest);
if(msg->u.event.transaction_uuid != NULL) {
ParodusInfo("transaction_uuid in event: %s\n", msg->u.event.transaction_uuid);
}
partners_t *partnersList = NULL;
int j = 0;
@@ -379,7 +387,7 @@ void *processUpstreamMessage()
//Sending to server for msgTypes 3, 5, 6, 7, 8.
if( WRP_MSG_TYPE__REQ == msgType )
{
ParodusInfo(" Received upstream data with MsgType: %d dest: '%s' transaction_uuid: %s\n", msgType, msg->u.req.dest, msg->u.req.transaction_uuid );
(msg->u.req.headers != NULL && msg->u.req.headers->headers[0] != NULL && msg->u.req.headers->headers[1] != NULL) ? ParodusInfo(" Received upstream data with MsgType: %d dest: '%s' transaction_uuid: %s traceParent: %s traceState: %s\n", msgType, msg->u.req.dest, msg->u.req.transaction_uuid, msg->u.req.headers->headers[0], msg->u.req.headers->headers[1]) : ParodusInfo(" Received upstream data with MsgType: %d dest: '%s' transaction_uuid: %s\n", msgType, msg->u.req.dest, msg->u.req.transaction_uuid);
sendUpstreamMsgToServer(&message->msg, message->len);
}
else

View File

@@ -59,6 +59,7 @@ int subscribeCurrentActiveInterfaceEvent();
UpStreamMsg * get_global_UpStreamMsgQ(void);
pthread_cond_t *get_global_nano_con(void);
pthread_mutex_t *get_global_nano_mut(void);
void clear_metadata();
#ifdef __cplusplus
}

View File

@@ -47,6 +47,38 @@ rbusHandle_t get_parodus_rbus_Handle(void)
{
return rbus_Handle;
}
/* Enables rbus ERROR level logs in parodus. Modify RBUS_LOG_ERROR check if more debug logs are needed from rbus. */
void rbus_log_handler(
rbusLogLevel level,
const char* file,
int line,
int threadId,
char* message)
{
ParodusPrint("threadId %d\n", threadId);
const char* slevel = "";
if(level < RBUS_LOG_ERROR)
return;
switch(level)
{
case RBUS_LOG_DEBUG: slevel = "DEBUG"; break;
case RBUS_LOG_INFO: slevel = "INFO"; break;
case RBUS_LOG_WARN: slevel = "WARN"; break;
case RBUS_LOG_ERROR: slevel = "ERROR"; break;
case RBUS_LOG_FATAL: slevel = "FATAL"; break;
}
ParodusInfo("%5s %s:%d -- %s\n", slevel, file, line, message);
}
void registerRbusLogger()
{
rbus_registerLogHandler(rbus_log_handler);
ParodusPrint("Registered rbus log handler\n");
}
#ifdef WAN_FAILOVER_SUPPORTED
void eventReceiveHandler( rbusHandle_t rbus_Handle, rbusEvent_t const* event, rbusEventSubscription_t* subscription );
#endif
@@ -73,7 +105,7 @@ void subscribeRBUSevent()
int subscribeCurrentActiveInterfaceEvent()
{
int rc = RBUS_ERROR_SUCCESS;
ParodusPrint("Subscribing to Device.X_RDK_WanManager.CurrentActiveInterface Event\n");
ParodusInfo("Subscribing to Device.X_RDK_WanManager.CurrentActiveInterface Event\n");
rc = rbusEvent_SubscribeAsync(rbus_Handle,WEBPA_INTERFACE,eventReceiveHandler,subscribeAsyncHandler,"parodusInterface",10*20);
if(rc != RBUS_ERROR_SUCCESS)
{
@@ -174,11 +206,15 @@ void eventReceiveHandler( rbusHandle_t rbus_Handle, rbusEvent_t const* event, rb
rbusValue_t newValue = rbusObject_GetValue(event->data, "value");
rbusValue_t oldValue = rbusObject_GetValue(event->data, "oldValue");
ParodusInfo("Consumer received ValueChange event for param %s\n", event->name);
if(newValue) {
interface = (char *) rbusValue_GetString(newValue, NULL);
setWebpaInterface(interface);
}
}
else {
ParodusError("newValue is NULL\n");
}
if(newValue !=NULL && oldValue!=NULL && interface!=NULL) {
ParodusInfo("New Value: %s Old Value: %s New Interface Value: %s\n", rbusValue_GetString(newValue, NULL), rbusValue_GetString(oldValue, NULL), interface);
@@ -195,5 +231,13 @@ void eventReceiveHandler( rbusHandle_t rbus_Handle, rbusEvent_t const* event, rb
set_close_retry();
}
else {
if(oldValue == NULL) {
ParodusError("oldValue is NULL\n");
}
if(interface == NULL) {
ParodusError("interface is NULL\n");
}
}
}
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -24,14 +24,22 @@
#ifndef _XMIDTSEND_RBUS_H_
#define _XMIDTSEND_RBUS_H_
#include <rbus.h>
#include "config.h"
#include <uuid/uuid.h>
#ifdef __cplusplus
extern "C" {
#endif
#define XMIDT_SEND_METHOD "Device.X_RDK_Xmidt.SendData"
#define MAX_QUEUE_SIZE 10
#define INPARAMS_PATH "/tmp/inparams.txt"
#define CLOUD_ACK_TIMEOUT_SEC 7
#define CRITICAL_QOS_EXPIRE_TIME 30*60
#define HIGH_QOS_EXPIRE_TIME 25*60
#define MEDIUM_QOS_EXPIRE_TIME 20*60
#define LOW_QOS_EXPIRE_TIME 15*60
#define EXPIRY_CHECK_TIME 5*60 //To check expiry in every 5 mins when cloud connection is down.
/*----------------------------------------------------------------------------*/
/* Data Structures */
/*----------------------------------------------------------------------------*/
@@ -39,9 +47,21 @@ typedef struct XmidtMsg__
{
wrp_msg_t *msg;
rbusMethodAsyncHandle_t asyncHandle;
int state;
long long enqueueTime;
long long sentTime;
struct XmidtMsg__ *next;
} XmidtMsg;
typedef struct CloudAck__
{
char *transaction_id;
int qos;
int rdr;
char *source;
struct CloudAck__ *next;
} CloudAck;
typedef enum
{
DELIVERED_SUCCESS = 0,
@@ -56,8 +76,18 @@ typedef enum
CLIENT_DISCONNECT = 101,
QUEUE_SIZE_EXCEEDED = 102,
WRP_ENCODE_FAILURE = 103,
MSG_PROCESSING_FAILED = 104
MSG_PROCESSING_FAILED = 104,
QOS_SEMANTICS_DISABLED = 105,
MSG_EXPIRED = 106,
QUEUE_OPTIMIZED = 107
} XMIDT_STATUS;
typedef enum
{
PENDING = 0,
SENT,
DELETE
} MSG_STATUS;
/*----------------------------------------------------------------------------*/
/* Function Prototypes */
/*----------------------------------------------------------------------------*/
@@ -66,17 +96,28 @@ rbusHandle_t get_parodus_rbus_Handle(void);
void addToXmidtUpstreamQ(wrp_msg_t * msg, rbusMethodAsyncHandle_t asyncHandle);
void* processXmidtUpstreamMsg();
void processXmidtData();
int processData(wrp_msg_t * msg, rbusMethodAsyncHandle_t asyncHandle);
void sendXmidtEventToServer(wrp_msg_t * msg, rbusMethodAsyncHandle_t asyncHandle);
int processData(XmidtMsg *Datanode, wrp_msg_t * msg, rbusMethodAsyncHandle_t asyncHandle);
int sendXmidtEventToServer(XmidtMsg *msgnode, wrp_msg_t * msg, rbusMethodAsyncHandle_t asyncHandle);
int checkInputParameters(rbusObject_t inParams);
char* generate_transaction_uuid();
void parseRbusInparamsToWrp(rbusObject_t inParams, char *trans_id, wrp_msg_t **eventMsg);
void createOutParamsandSendAck(wrp_msg_t *msg, rbusMethodAsyncHandle_t asyncHandle, char *errorMsg, int statuscode, rbusError_t error);
void createOutParamsandSendAck(wrp_msg_t *msg, rbusMethodAsyncHandle_t asyncHandle, char *errorMsg, int statuscode, char *cloudsource, rbusError_t error);
int validateXmidtData(wrp_msg_t * eventMsg, char **errorMsg, int *statusCode);
void xmidtQDequeue();
void printSendMsgData(char* status, int qos, char* dest, char* transaction_uuid);
bool highQosValueCheck(int qos);
void waitTillConnectionIsUp();
void printRBUSParams(rbusObject_t params, char* file_path);
void addToCloudAckQ(char *transaction_id, int qos, int rdr, char *source);
int checkCloudACK(XmidtMsg *xmdnode, rbusMethodAsyncHandle_t asyncHandle);
int updateXmidtState(XmidtMsg * temp, int state);
void print_xmidMsg_list();
int deleteCloudACKNode(char* trans_id);
int deleteFromXmidtQ(XmidtMsg **next_node);
int checkCloudConn();
void checkMaxQandOptimize(XmidtMsg *xmdMsg);
void checkMsgExpiry(XmidtMsg *xmdMsg);
void mapXmidtStatusToStatusMessage(int status, char **message);
int xmidtQOptmize();
#ifdef __cplusplus
}
#endif

View File

@@ -33,7 +33,7 @@ set (PARODUS_COMMON_LIBS ${PARODUS_COMMON_LIBS} -lucresolv -lresolv)
endif (FEATURE_DNS_QUERY)
if (ENABLE_WEBCFGBIN)
set (PARODUS_COMMON_LIBS ${PARODUS_COMMON_LIBS} -lrbus -lrbus-core)
set (PARODUS_COMMON_LIBS ${PARODUS_COMMON_LIBS} -lrbus)
endif (ENABLE_WEBCFGBIN)
if(NOT DISABLE_VALGRIND)
@@ -46,7 +46,7 @@ link_directories ( ${LIBRARY_DIR} )
# test_heartBeatTimer
#-------------------------------------------------------------------------------
add_test(NAME test_heartBeatTimer COMMAND ${MEMORY_CHECK} ./test_heartBeatTimer)
add_executable(test_heartBeatTimer test_heartBeatTimer.c ../src/heartBeat.c)
add_executable(test_heartBeatTimer test_heartBeatTimer.c ../src/heartBeat.c ../src/time.c)
target_link_libraries (test_heartBeatTimer ${PARODUS_COMMON_LIBS} -lcmocka)
#-------------------------------------------------------------------------------
@@ -61,7 +61,10 @@ target_link_libraries (test_close_retry ${PARODUS_COMMON_LIBS} -lcmocka)
#-------------------------------------------------------------------------------
add_test(NAME test_mutex COMMAND ${MEMORY_CHECK} ./test_mutex)
add_executable(test_mutex test_mutex.c ../src/mutex.c)
target_link_libraries (test_mutex ${PARODUS_COMMON_LIBS} -lcmocka)
target_link_libraries (test_mutex gcov -lcunit -lcimplog -lwrp-c
-luuid -lmsgpackc -lnopoll -lnanomsg -lpthread
-Wl,--no-as-needed -lcjson -lcjwt -ltrower-base64
-lssl -lcrypto -lrt -lm -lcmocka)
#-------------------------------------------------------------------------------
# test_networking
@@ -74,8 +77,8 @@ target_link_libraries (test_networking ${PARODUS_COMMON_LIBS})
# test_nopoll_helpers
#-------------------------------------------------------------------------------
add_test(NAME test_nopoll_helpers COMMAND ${MEMORY_CHECK} ./test_nopoll_helpers)
add_executable(test_nopoll_helpers test_nopoll_helpers.c ../src/nopoll_helpers.c)
target_link_libraries (test_nopoll_helpers -Wl,--no-as-needed -lrt -lcmocka -lcimplog -lnopoll)
add_executable(test_nopoll_helpers test_nopoll_helpers.c ../src/nopoll_helpers.c ../src/string_helpers.c ../src/config.c)
target_link_libraries (test_nopoll_helpers -Wl,--no-as-needed -lrt -lcmocka -lcimplog -lnopoll ${PARODUS_COMMON_LIBS})
#-------------------------------------------------------------------------------
# test_time
@@ -109,7 +112,7 @@ target_link_libraries (test_spin_thread_e ${PARODUS_COMMON_LIBS} )
# test_nopoll_handlers
#-------------------------------------------------------------------------------
add_test(NAME test_nopoll_handlers COMMAND ${MEMORY_CHECK} ./test_nopoll_handlers)
add_executable(test_nopoll_handlers test_nopoll_handlers.c ../src/nopoll_handlers.c ../src/heartBeat.c ../src/close_retry.c)
add_executable(test_nopoll_handlers test_nopoll_handlers.c ../src/nopoll_handlers.c ../src/heartBeat.c ../src/close_retry.c ../src/time.c)
target_link_libraries (test_nopoll_handlers -lnopoll -lcunit -lcimplog -Wl,--no-as-needed -lrt -lpthread -lm)
@@ -117,7 +120,7 @@ target_link_libraries (test_nopoll_handlers -lnopoll -lcunit -lcimplog -Wl,--no-
# test_nopoll_handlers_fragment
#-------------------------------------------------------------------------------
add_test(NAME test_nopoll_handlers_fragment COMMAND ${MEMORY_CHECK} ./test_nopoll_handlers_fragment)
add_executable(test_nopoll_handlers_fragment test_nopoll_handlers_fragment.c ../src/nopoll_handlers.c ../src/heartBeat.c ../src/close_retry.c)
add_executable(test_nopoll_handlers_fragment test_nopoll_handlers_fragment.c ../src/nopoll_handlers.c ../src/heartBeat.c ../src/close_retry.c ../src/time.c)
target_link_libraries (test_nopoll_handlers_fragment -lnopoll -lcunit -lcimplog -Wl,--no-as-needed -lrt -lpthread -lm -lcmocka)
#-------------------------------------------------------------------------------
@@ -212,7 +215,7 @@ target_link_libraries (test_auth_token -lcmocka
# test_auth_token_more
#-------------------------------------------------------------------------------
add_test(NAME test_auth_token_more COMMAND ${MEMORY_CHECK} ./test_auth_token_more)
add_executable(test_auth_token_more test_auth_token_more.c ../src/config.c ../src/auth_token.c ../src/string_helpers.c)
add_executable(test_auth_token_more test_auth_token_more.c ../src/config.c ../src/auth_token.c ../src/string_helpers.c ../src/config.c)
target_link_libraries (test_auth_token_more -lcmocka
-Wl,--no-as-needed -lcimplog
-lcjson -lcjwt -ltrower-base64 -lssl -lcrypto -lrt -lm -lcurl -luuid
@@ -265,7 +268,7 @@ target_link_libraries (test_upstream_sock -lcmocka gcov -lcunit -lcimplog
# test_downstream
#-------------------------------------------------------------------------------
add_test(NAME test_downstream COMMAND ${MEMORY_CHECK} ./test_downstream)
add_executable(test_downstream test_downstream.c ../src/downstream.c ../src/string_helpers.c)
add_executable(test_downstream test_downstream.c ../src/downstream.c ../src/string_helpers.c ../src/config.c)
target_link_libraries (test_downstream -lcmocka gcov -lcunit -lcimplog
-lwrp-c -luuid -lpthread -lmsgpackc -lnopoll
-Wl,--no-as-needed -lcjson -lcjwt -ltrower-base64
@@ -275,7 +278,7 @@ target_link_libraries (test_downstream -lcmocka gcov -lcunit -lcimplog
# test_downstream_more
#-------------------------------------------------------------------------------
add_test(NAME test_downstream_more COMMAND ${MEMORY_CHECK} ./test_downstream_more)
add_executable(test_downstream_more test_downstream_more.c ../src/downstream.c ../src/string_helpers.c)
add_executable(test_downstream_more test_downstream_more.c ../src/downstream.c ../src/string_helpers.c ../src/config.c)
target_link_libraries (test_downstream_more -lcmocka ${PARODUS_COMMON_LIBS} )
#-------------------------------------------------------------------------------
@@ -296,6 +299,7 @@ set(CONIFC_SRC test_conn_interface.c
../src/token.c
../src/string_helpers.c
../src/mutex.c
../src/time.c
../src/heartBeat.c
../src/close_retry.c
../src/event_handler.c

View File

@@ -29,6 +29,7 @@
#include "../src/ParodusInternal.h"
extern int parse_mac_address (char *target, const char *arg);
extern int parse_serial_num(char *target, const char *arg);
extern int server_is_http (const char *full_url,
const char **server_ptr);
extern int parse_webpa_url__(const char *full_url,
@@ -467,6 +468,14 @@ void test_parse_mac_address ()
assert_int_equal (parse_mac_address (result, ""), -1);
}
void test_parse_serial_num()
{
char result[14];
assert_int_equal (parse_serial_num (result, "1234ABC00ab"), 0);
assert_int_equal (parse_serial_num (result, "$@@"), 0);
assert_int_equal (parse_serial_num (result, ""), 0);
}
void test_server_is_http ()
{
const char *server_ptr;
@@ -587,6 +596,7 @@ int main(void)
cmocka_unit_test(err_loadParodusCfg),
cmocka_unit_test(test_parse_num_arg),
cmocka_unit_test(test_parse_mac_address),
cmocka_unit_test(test_parse_serial_num),
cmocka_unit_test(test_get_algo_mask),
cmocka_unit_test(test_server_is_http),
cmocka_unit_test(test_parse_webpa_url__),

View File

@@ -71,7 +71,10 @@ void nopoll_log_set_handler (noPollCtx *ctx, noPollLogHandler handler, noPollPtr
UNUSED(ctx); UNUSED(handler); UNUSED(user_data);
function_called();
}
int cloud_status_is_online (void)
{
return 0;
}
void __report_log (noPollCtx * ctx, noPollDebugLevel level, const char * log_msg, noPollPtr user_data)
{
UNUSED(ctx); UNUSED(level); UNUSED(log_msg); UNUSED(user_data);
@@ -144,6 +147,10 @@ void packMetaData()
function_called();
}
int get_parodus_init()
{
return 0;
}
int get_cloud_disconnect_time(void)
{

View File

@@ -64,7 +64,18 @@ reg_list_item_t * get_global_node(void)
void release_global_node (void)
{
}
void addToCloudAckQ(char *transaction_id, int qos, int rdr)
{
(void)transaction_id;
(void)qos;
(void)rdr;
return;
}
bool highQosValueCheck(int qos)
{
(void)qos;
return false;
}
ssize_t wrp_to_struct( const void *bytes, const size_t length,
const enum wrp_format fmt, wrp_msg_t **msg )
{

View File

@@ -192,6 +192,20 @@ int validate_partner_id(wrp_msg_t *msg, partners_t **partnerIds)
return 1;
}
void addToCloudAckQ(char *transaction_id, int qos, int rdr)
{
(void)transaction_id;
(void)qos;
(void)rdr;
return;
}
bool highQosValueCheck(int qos)
{
(void)qos;
return false;
}
ssize_t wrp_to_struct( const void *bytes, const size_t length, const enum wrp_format fmt,
wrp_msg_t **msg )
{

View File

@@ -79,7 +79,6 @@ void test_mutexHeartBeatTimer() {
ParodusInfo("heartBeatTimer reset to: %d\n", heartBeatTimer);
assert_int_equal(heartBeatTimer, 0);
}
/*----------------------------------------------------------------------------*/
/* External Functions */
/*----------------------------------------------------------------------------*/

View File

@@ -68,7 +68,6 @@ nopoll_bool nopoll_msg_is_final(noPollMsg *msg)
function_called();
return (nopoll_bool) mock();
}
const unsigned char *nopoll_msg_get_payload(noPollMsg *msg)
{
(void)msg;

View File

@@ -24,6 +24,9 @@
#include "../src/parodus_log.h"
#include "../src/nopoll_helpers.h"
#include "../src/config.h"
#include <cjwt/cjwt.h>
#include "../src/connection.h"
#include "../src/ParodusInternal.h"
/*----------------------------------------------------------------------------*/
/* Macros */
@@ -34,7 +37,6 @@
/* File Scoped Variables */
/*----------------------------------------------------------------------------*/
static noPollConn *conn = NULL;
static ParodusCfg cfg;
/*----------------------------------------------------------------------------*/
/* Mocks */
@@ -57,12 +59,6 @@ nopoll_bool nopoll_conn_is_ready( noPollConn *conn )
return (nopoll_bool)mock();
}
ParodusCfg *get_parodus_cfg(void)
{
function_called();
return &cfg;
}
int __nopoll_conn_send_common (noPollConn * conn, const char * content, long length, nopoll_bool has_fin, long sleep_in_header, noPollOpCode frame_type)
{
UNUSED(has_fin); UNUSED(sleep_in_header); UNUSED(frame_type); UNUSED(content);
@@ -131,10 +127,6 @@ bool get_interface_down_event()
return false;
}
char *get_cloud_status(void)
{
return NULL;
}
/*----------------------------------------------------------------------------*/
/* Tests */
@@ -226,8 +218,7 @@ void test_sendMessage()
{
int len = strlen("Hello Parodus!");
cfg.cloud_status = CLOUD_STATUS_ONLINE;
expect_function_calls (get_parodus_cfg, 1);
get_parodus_cfg()->cloud_status = CLOUD_STATUS_ONLINE;
expect_value(__nopoll_conn_send_common, (intptr_t)conn, (intptr_t)conn);
expect_value(__nopoll_conn_send_common, length, len);
@@ -241,8 +232,7 @@ void test_sendMessageOffline()
{
int len = strlen("Hello Parodus!");
cfg.cloud_status = CLOUD_STATUS_OFFLINE;
expect_function_calls (get_parodus_cfg, 1);
get_parodus_cfg()->cloud_status = CLOUD_STATUS_OFFLINE;
sendMessage(conn, "Hello Parodus!", len);
}
@@ -251,8 +241,7 @@ void err_sendMessage()
{
int len = strlen("Hello Parodus!");
cfg.cloud_status = CLOUD_STATUS_ONLINE;
expect_function_calls (get_parodus_cfg, 1);
get_parodus_cfg()->cloud_status = CLOUD_STATUS_ONLINE;
expect_value(__nopoll_conn_send_common, (intptr_t)conn,(intptr_t) conn);
expect_value(__nopoll_conn_send_common, length, len);
@@ -271,8 +260,7 @@ void err_sendMessageConnNull()
{
int len = strlen("Hello Parodus!");
cfg.cloud_status = CLOUD_STATUS_ONLINE;
expect_function_calls (get_parodus_cfg, 1);
get_parodus_cfg()->cloud_status = CLOUD_STATUS_ONLINE;
expect_value(__nopoll_conn_send_common, (intptr_t)conn, NULL);
expect_value(__nopoll_conn_send_common, length, len);