Compare commits

...

159 Commits

Author SHA1 Message Date
Vasuki
90d6d6d9d5 "Added null check as fix for parodus crash" 2023-06-15 14:17:36 +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
shilpa24balaji
34802d329d Merge pull request #394 from sadhyama/xmd_content
Add content_type validation for Xmidt method profiles
2022-05-27 23:07:53 +05:30
Sadhyama Vengilat
0297d994b5 Reduce debug log 2022-05-27 19:47:39 +05:30
Sadhyama Vengilat
ee7033c36c Add contentType list and validate 2022-05-27 12:59:38 +05:30
Sadhyama Vengilat
e35221efd2 Add content_type validation for Xmidt method profiles 2022-05-26 20:36:11 +05:30
sadhyama
c898fe6d0e Merge pull request #393 from sadhyama/def_profile
Handle Xmidt default profile events received before connection
2022-05-13 18:55:25 +05:30
Sadhyama Vengilat
0017e48f7d Remove content_type modification 2022-05-13 18:48:30 +05:30
Sadhyama Vengilat
285a461f42 Disable debug logs 2022-05-11 18:16:25 +05:30
Sadhyama Vengilat
bb0f49a8b3 Added delay on parodus init 2022-05-10 19:26:33 +05:30
Sadhyama Vengilat
ee20e1fcb8 Handle xmidt default profiles received before initial cloud connection 2022-05-09 20:31:07 +05:30
sadhyama
becacd8990 Merge pull request #392 from sadhyama/parodus_highqos
set cloud_status online after close_retry reset to fix Xmidt sendMsg failure
2022-04-20 16:13:53 +05:30
Sadhyama Vengilat
b05bfbe1fa Merge remote-tracking branch 'upstream/master' into parodus_highqos 2022-04-20 16:13:10 +05:30
sadhyama
9fb3f118b7 Merge pull request #391 from guruchandru/xmd_send
Error Number value change
2022-04-20 16:11:22 +05:30
Sadhyama Vengilat
a124aafc5f set cloud_status online after close_retry reset to fix sendMsg failure 2022-04-20 13:09:57 +05:30
Guru Chandru
0c4a2f407a Error Number value change 2022-04-18 12:25:20 +05:30
shilpa24balaji
523c9cc0d2 Merge pull request #390 from guruchandru/xmd_send
Changes to Send Success and Error ACK
2022-04-13 18:51:33 +05:30
Guru Chandru
58492950d6 Review comment changes 2022-04-13 13:18:21 +05:30
Guru Chandru
29906511b8 Changes to Send ACK for Success and Error Case 2022-04-12 17:56:34 +05:30
shilpa24balaji
c6fa4b2ce8 Merge pull request #388 from shilpa24balaji/wan_failover
Reconnect to cloud on every wan failover event
2022-04-12 16:43:59 +05:30
sadhyama
0640f3516f Merge pull request #386 from xmidt-org/xmidt_send
Xmidt send RBUS method to send events upstream
2022-04-08 20:35:23 +05:30
Sadhyama Vengilat
60c37daa18 Wrp-c git tag update 2022-04-08 20:30:03 +05:30
Sadhyama Vengilat
f51b4ef9c2 Fix valgrind leaks 2022-04-08 18:14:40 +05:30
Sadhyama Vengilat
254c9f6763 Start xmidt consumer only when method register is success 2022-04-08 13:31:24 +05:30
sadhyama
8876fa9239 Merge pull request #387 from guruchandru/xmd_send
Transaction uuid Crash Fix
2022-04-08 13:03:42 +05:30
Guru Chandru
42fc9eb26e Transaction uuid Crash Fix 2022-04-08 12:37:58 +05:30
sadhyama
e8e652b076 Merge pull request #385 from sadhyama/xmd_new
Log reduction and format
2022-04-07 21:09:05 +05:30
Sadhyama Vengilat
dc935f9a09 Debug log reduction and formatting 2022-04-07 21:04:55 +05:30
Sadhyama Vengilat
d1462de56a Convert device mac to lowercase 2022-04-07 15:03:00 +05:30
Shilpa Seshadri
13309a737e Reconnect to cloud on every wan failover event 2022-04-07 12:40:21 +05:30
Guru Chandru
223e7db81c Valgrind leak fix for cloud status and device_id 2022-04-05 20:00:19 +05:30
sadhyama
cd763823fc Merge pull request #383 from guruchandru/xmd_send
High QOS and ACK
2022-04-05 14:08:38 +05:30
Guru Chandru
8537f27ece Review comment changes 2022-04-05 14:04:21 +05:30
Guru Chandru
6381d9c55f Local PC Unit Test Build Failure Fix 2022-04-04 15:15:18 +05:30
Guru Chandru
980b7a88db Review comment Changes on ACK and Cloud status Cond signal 2022-04-04 15:05:24 +05:30
Guru Chandru
e3c37b6764 Review comment Changes 2022-04-04 12:10:30 +05:30
Guru Chandru
67d58441ef Revised changes 2022-04-04 11:02:21 +05:30
Guru Chandru
f6ffda05ad Merge remote-tracking branch 'upstream/xmidt_send' into xmd_send 2022-04-01 17:54:33 +05:30
Guru Chandru
6aee851944 Removing tempAsyncHandle 2022-04-01 14:59:29 +05:30
Sadhyama Vengilat
aaa93e137d Merge remote-tracking branch 'upstream/master' into xmidt_send 2022-04-01 14:17:36 +05:30
Sadhyama Vengilat
21e8c74f23 Add transaction id in outParams & fix PC build issues 2022-04-01 14:07:57 +05:30
Guru Chandru
0248e7b241 removed LTE distro in mutex 2022-03-31 17:10:28 +05:30
Guru Chandru
da019382c6 Async response 2022-03-31 14:01:55 +05:30
Guru Chandru
aecbd885d5 Remove wrp_free in Dequeue 2022-03-30 12:08:52 +05:30
Guru Chandru
0443c45924 Merge remote-tracking branch 'upstream/master' into xmd_send 2022-03-30 10:38:20 +05:30
sadhyama
314c840755 Merge pull request #382 from Thanusha-D/lte_wanfail
Support Wan failover/restore events for LTE backup
2022-03-29 18:54:44 +05:30
Guru Chandru
69f7e3eba0 Adding NULL checks for wrp struct free 2022-03-29 18:41:11 +05:30
Thanusha D
e643f9e2fc Support Wan failover/restore events for LTE backup 2022-03-29 18:14:29 +05:30
Guru Chandru
7d2e9733d0 Debug logs 2022-03-29 15:23:20 +05:30
Guru Chandru
23c18da03e Fix for Crash due to frequent ACK response trigger 2022-03-29 13:30:01 +05:30
Guru Chandru
2218637f2c Added ACK and Cond wait signal for connection not OK 2022-03-28 21:41:42 +05:30
Guru Chandru
54f9983eff High Qos Event ACK and Enqueue changes 2022-03-28 15:39:30 +05:30
Guru Chandru
a577854172 Merge remote-tracking branch 'upstream/parodusUS' into xmd_send 2022-03-28 13:11:40 +05:30
Guru Chandru
e054ef580f Merge remote-tracking branch 'upstream/xmd_send' into xmd_send 2022-03-28 13:04:05 +05:30
Sadhyama Vengilat
79eb7ba6ef To fix send ack crash due to OutParams NULL issue 2022-03-28 12:49:18 +05:30
Guru Chandru
a291b047b6 Enqueue option to add High Qos Events after Failure 2022-03-28 12:27:38 +05:30
Sadhyama Vengilat
656b1b0b58 To fix send ack crash due to OutParams NULL issue 2022-03-28 12:10:19 +05:30
vasuki01
22ecf0ef76 Review comments updated for wan fail over support 2022-03-25 19:40:00 +05:30
Sadhyama Vengilat
c97a3a3a20 Rbus async ack handling for xmidt send requests 2022-03-25 14:36:38 +05:30
Vasuki
46273d9766 Add cloud status mutex locks for Parodus send data US subtask 2022-03-23 14:57:39 +05:30
Sadhyama Vengilat
7efed14c20 Enable WAN_FAILOVER_SUPPORTED and fix build issues 2022-03-18 14:01:40 +05:30
Vasuki
6d39163d47 Parodus changes for Wanifailover support-2 2022-03-17 11:46:13 +05:30
sadhyama
5b0d3e19f3 Merge pull request #381 from sadhyama/xmd_send
Xmidt sendData method provider to send upstream events
2022-03-17 11:41:30 +05:30
Sadhyama Vengilat
0d8bb960f6 Merge remote-tracking branch 'upstream/master' into xmd_send 2022-03-17 11:13:23 +05:30
Sadhyama Vengilat
5d537fb139 Disabled async ack inParams release 2022-03-16 20:18:37 +05:30
Sadhyama Vengilat
47fcd6bdae Add rbusObject in xmidt queue 2022-03-16 17:29:11 +05:30
Sadhyama Vengilat
24e1790ccb Rbus inParams check method validation 2022-03-16 16:44:23 +05:30
Sadhyama Vengilat
89fdd97d44 Add more debug logs 2022-03-16 16:13:17 +05:30
Sadhyama Vengilat
5ae2325fb6 Parse rbus inParams into wrp event and send to server 2022-03-15 20:50:30 +05:30
Sadhyama Vengilat
9bad1142ab Xmidt Upstream queue to receive events from components 2022-03-08 19:58:05 +05:30
Vasuki
339b93cfd3 Merge remote-tracking branch 'upstream/master' into wanfailsupport 2022-03-03 14:30:51 +05:30
Vasuki
a34db44c90 Parodus changes for Wanifailover support-2 2022-03-02 19:13:44 +05:30
shilpa24balaji
bdec80dd07 Merge pull request #379 from Thanusha-D/time_diff
ConnectTime value in parodus in terms of device uptime
2022-02-28 19:23:17 +05:30
Vasuki
1833c30e83 Parodus changes for Wanifailover support 2022-02-28 15:57:02 +05:30
Thanusha D
5b26fe38f5 Time value in parodus is higher 2022-02-28 15:16:53 +05:30
Sadhyama Vengilat
f3a4daeb74 To extract inParams received from consumer 2022-02-23 19:49:38 +05:30
Sadhyama Vengilat
aaeb1f6612 To send parodus ack response back to caller 2022-02-11 17:52:16 +05:30
Sadhyama Vengilat
0fb6288255 Parodus to support rbus xmidtSendData provider 2022-01-21 17:10:55 +05:30
shilpa24balaji
0fd3b76f27 Merge pull request #375 from sadhyama/webcfg_binON
Fix parodus PC build issues when webconfig bin is ON
2021-12-07 10:22:13 +05:30
Sadhyama Vengilat
48722ffa7c Fix parodus PC build issues when webconfig bin is ON 2021-12-06 19:57:29 +05:30
shilpa24balaji
bf5d555d96 Merge pull request #374 from xmidt-org/webcfg_bin
Changes to support webconfig as separate binary in RBUS mode
2021-11-30 20:09:56 +05:30
Shilpa Seshadri
c02b141f7c Fixed license in new c file 2021-11-30 19:59:42 +05:30
shilpa24balaji
9f40b7efe5 Merge pull request #371 from krishnangnair/monotonic_clock
Use monotonic clock for heartBeat timer calculation.
2021-11-26 12:13:50 +05:30
shilpa24balaji
2a184e24c9 Merge pull request #372 from shilpa24balaji/webcfg_bin
Use rbus subscribe API instead of addListener API
2021-11-25 23:26:19 +05:30
Shilpa Seshadri
233a167cb4 Use rbus subscribe API instead of addListener API 2021-11-23 22:47:28 +05:30
knair410
5562d7ec48 Use monotonic clock for heartBeat timer calculation. 2021-11-10 23:15:07 +05:30
sadhyama
49513df8f8 Merge pull request #370 from Sreedevi29/bin_flag
Move webcfgbin distro flage to outside of BUILD_YOCTO check.
2021-09-29 10:58:18 +05:30
Sreedevi V
d0e6c5bd75 Move webcfgbin distro flage to outside of BUILD_YOCTO check. 2021-09-29 16:18:38 +05:30
sadhyama
66f1f4d4fb Merge pull request #368 from Sreedevi29/distro_check
Listener for webconfig upstream events when bin distro is on
2021-09-28 14:17:20 +05:30
sadhyama
19b4f56913 Merge pull request #367 from shilpa24balaji/notify_upstream
Listener for webconfig upstream events
2021-09-27 20:16:30 +05:30
Sreedevi V
c30d5a3362 Listener for webconfig upstream events when bin distro is on 2021-09-23 22:08:19 +05:30
Shilpa Seshadri
c98e2e2fb8 Listener for webconfig upstream events 2021-09-23 00:00:32 +05:30
39 changed files with 2619 additions and 93 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

@@ -43,6 +43,13 @@ include_directories(${INCLUDE_DIR}
${INCLUDE_DIR}/cjwt
)
if (ENABLE_WEBCFGBIN)
include_directories(${INCLUDE_DIR}/rbus
${INCLUDE_DIR}/rbus-core
${INCLUDE_DIR}/rtmessage
)
endif (ENABLE_WEBCFGBIN)
# Get git commit hash
#-------------------------------------------------------------------------------
execute_process(
@@ -165,8 +172,8 @@ add_dependencies(libcimplog cimplog)
ExternalProject_Add(wrp-c
DEPENDS trower-base64 msgpack cimplog
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/_prefix/wrp-c
GIT_REPOSITORY https://github.com/Comcast/wrp-c.git
GIT_TAG "1.0.1"
GIT_REPOSITORY https://github.com/xmidt-org/wrp-c.git
GIT_TAG "b5ef4d10cb39905908788bc89ab3e4dab201db8a"
CMAKE_ARGS += -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}
-DMSGPACK_ENABLE_CXX=OFF
-DMSGPACK_BUILD_EXAMPLES=OFF
@@ -229,6 +236,51 @@ 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
CMAKE_ARGS += -DBUILD_FOR_DESKTOP=ON -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DBUILD_TESTING=OFF
)
add_library(librbus STATIC SHARED IMPORTED)
add_dependencies(librbus rbus)
endif (ENABLE_WEBCFGBIN)
if (BUILD_TESTING)
# cmocka external dependency
#-------------------------------------------------------------------------------
@@ -253,6 +305,14 @@ if (FEATURE_DNS_QUERY)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFEATURE_DNS_QUERY ")
endif (FEATURE_DNS_QUERY)
if (ENABLE_WEBCFGBIN)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DENABLE_WEBCFGBIN ")
endif (ENABLE_WEBCFGBIN)
if (WAN_FAILOVER_SUPPORTED)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWAN_FAILOVER_SUPPORTED ")
endif (WAN_FAILOVER_SUPPORTED)
link_directories ( ${LIBRARY_DIR} ${COMMON_LIBRARY_DIR} ${LIBRARY_DIR64} )
add_subdirectory(src)
if (BUILD_TESTING)

View File

@@ -23,6 +23,15 @@ else()
set(SOURCES ${SOURCES} seshat_interface_stub.c)
endif (ENABLE_SESHAT)
if (ENABLE_WEBCFGBIN)
set(SOURCES ${SOURCES} upstream_rbus.c xmidtsend_rbus.c)
endif (ENABLE_WEBCFGBIN)
if (WAN_FAILOVER_SUPPORTED)
message(STATUS "WAN_FAILOVER_SUPPORTED is supported")
else()
message(STATUS "WAN_FAILOVER_SUPPORTED is not supported")
endif (WAN_FAILOVER_SUPPORTED)
add_executable(parodus ${SOURCES})
@@ -53,5 +62,7 @@ if (ENABLE_SESHAT)
target_link_libraries (parodus -llibseshat)
endif (ENABLE_SESHAT)
if (ENABLE_WEBCFGBIN)
target_link_libraries (parodus -lrbus -lrbus-core -lrtMessage)
endif (ENABLE_WEBCFGBIN)
install (TARGETS parodus DESTINATION bin)

View File

@@ -69,9 +69,9 @@ char* getWebpaConveyHeader()
cJSON_AddStringToObject(response, WEBPA_PROTOCOL, get_parodus_cfg()->webpa_protocol);
}
if(strlen(get_parodus_cfg()->webpa_interface_used)!=0)
if(strlen(getWebpaInterface())!=0)
{
cJSON_AddStringToObject(response, WEBPA_INTERFACE, get_parodus_cfg()->webpa_interface_used);
cJSON_AddStringToObject(response, WEBPA_INTERFACE, getWebpaInterface());
}
if(strlen(get_parodus_cfg()->hw_last_reboot_reason)!=0)

View File

@@ -161,7 +161,13 @@ int readFromFile(const char *file_name, char **data);
void timespec_diff(struct timespec *start, struct timespec *stop,
struct timespec *result);
#ifdef ENABLE_WEBCFGBIN
void subscribeRBUSevent();
int regXmidtSendDataMethod();
#endif
#ifdef WAN_FAILOVER_SUPPORTED
void setWebpaInterface(char *value);
#endif
/*------------------------------------------------------------------------------*/
/* For interface_down_event Flag */
/*------------------------------------------------------------------------------*/
@@ -178,7 +184,12 @@ void set_interface_down_event();
pthread_cond_t *get_interface_down_con();
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
}

View File

@@ -64,6 +64,7 @@ int requestNewAuthToken(char *newToken, size_t len, int r_count)
struct curl_slist *list = NULL;
struct curl_slist *headers_list = NULL;
char webpa_interface[64]={'\0'};
double total;
struct token_data data;
@@ -80,9 +81,10 @@ int requestNewAuthToken(char *newToken, size_t len, int r_count)
curl_easy_setopt(curl, CURLOPT_URL, get_parodus_cfg()->token_server_url);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, CURL_TIMEOUT_SEC);
if(get_parodus_cfg()->webpa_interface_used !=NULL && strlen(get_parodus_cfg()->webpa_interface_used) >0)
parStrncpy(webpa_interface, getWebpaInterface(), sizeof(webpa_interface));
if(webpa_interface !=NULL && strlen(webpa_interface) >0)
{
curl_easy_setopt(curl, CURLOPT_INTERFACE, get_parodus_cfg()->webpa_interface_used);
curl_easy_setopt(curl, CURLOPT_INTERFACE, webpa_interface);
}
/* set callback for writing received data */
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback_fn);
@@ -304,7 +306,7 @@ void createCurlheader(struct curl_slist *list, struct curl_slist **header_list)
snprintf(buf, MAX_BUF_SIZE, "X-Midt-Protocol: %s", get_parodus_cfg()->webpa_protocol);
list = curl_slist_append(list, buf);
snprintf(buf, MAX_BUF_SIZE, "X-Midt-Interface-Used: %s", get_parodus_cfg()->webpa_interface_used);
snprintf(buf, MAX_BUF_SIZE, "X-Midt-Interface-Used: %s", getWebpaInterface());
list = curl_slist_append(list, buf);
snprintf(buf, MAX_BUF_SIZE, "X-Midt-Last-Reboot-Reason: %s", get_parodus_cfg()->hw_last_reboot_reason);

View File

@@ -33,13 +33,30 @@
/*----------------------------------------------------------------------------*/
/* File Scoped Variables */
/*----------------------------------------------------------------------------*/
pthread_mutex_t config_mut=PTHREAD_MUTEX_INITIALIZER;
//For sending cond signal when cloud status is ONLINE
pthread_mutex_t cloud_status_mut=PTHREAD_MUTEX_INITIALIZER;
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);
/*----------------------------------------------------------------------------*/
/* External Functions */
/*----------------------------------------------------------------------------*/
pthread_cond_t *get_global_cloud_status_cond(void)
{
return &cloud_status_cond;
}
pthread_mutex_t *get_global_cloud_status_mut(void)
{
return &cloud_status_mut;
}
ParodusCfg *get_parodus_cfg(void)
{
@@ -61,6 +78,27 @@ void reset_cloud_disconnect_reason(ParodusCfg *cfg)
cfg->cloud_disconnect = NULL;
}
void set_cloud_status(char *status)
{
if(status != NULL)
{
pthread_mutex_lock(&config_mut);
get_parodus_cfg()->cloud_status = status;
if(strcmp (status, CLOUD_STATUS_ONLINE) == 0)
{
pthread_cond_signal(&cloud_status_cond);
}
pthread_mutex_unlock(&config_mut);
}
}
char *get_cloud_status(void)
{
pthread_mutex_lock(&config_mut);
parStrncpy(cloud_status, get_parodus_cfg()->cloud_status, sizeof(cloud_status));
pthread_mutex_unlock(&config_mut);
return cloud_status;
}
const char *get_tok (const char *src, int delim, char *result, int resultsize)
{
@@ -146,9 +184,9 @@ void read_key_from_file (const char *fname, char *buf, size_t buflen)
int parse_mac_address (char *target, const char *arg)
{
int count = 0;
int i;
int i, j;
char c;
char *mac = target;
for (i=0; (c=arg[i]) != 0; i++) {
if (c !=':')
count++;
@@ -160,9 +198,48 @@ int parse_mac_address (char *target, const char *arg)
*(target++) = c;
}
*target = 0; // terminating null
//convert mac to lowercase
for(j = 0; mac[j]; j++)
{
mac[j] = tolower(mac[j]);
}
ParodusPrint("mac in lowercase is %s\n", mac);
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)
{
@@ -355,6 +432,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'},
@@ -402,7 +482,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. */
@@ -417,8 +497,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':
@@ -488,6 +568,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
@@ -724,7 +814,7 @@ void loadParodusCfg(ParodusCfg * config,ParodusCfg *cfg)
}
if(strlen(config->webpa_interface_used )!=0)
{
parStrncpy(cfg->webpa_interface_used, config->webpa_interface_used,sizeof(cfg->webpa_interface_used));
parStrncpy(getWebpaInterface(), config->webpa_interface_used,sizeof(getWebpaInterface()));
}
else
{
@@ -792,7 +882,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;
@@ -848,4 +940,26 @@ void loadParodusCfg(ParodusCfg * config,ParodusCfg *cfg)
}
}
#ifdef WAN_FAILOVER_SUPPORTED
void setWebpaInterface(char *value)
{
pthread_mutex_lock (&config_mut);
parStrncpy(get_parodus_cfg()->webpa_interface_used, value, sizeof(get_parodus_cfg()->webpa_interface_used));
pthread_mutex_unlock (&config_mut);
}
#endif
char *getWebpaInterface(void)
{
#ifdef WAN_FAILOVER_SUPPORTED
ParodusPrint("WAN_FAILOVER_SUPPORTED mode \n");
pthread_mutex_lock (&config_mut);
parStrncpy(webpa_interface, get_parodus_cfg()->webpa_interface_used, sizeof(webpa_interface));
pthread_mutex_unlock (&config_mut);
#else
parStrncpy(webpa_interface, get_parodus_cfg()->webpa_interface_used, sizeof(webpa_interface));
#endif
ParodusPrint("webpa_interface:%s\n", webpa_interface);
return webpa_interface;
}

View File

@@ -24,6 +24,7 @@
#ifndef _CONFIG_H_
#define _CONFIG_H_
#include <pthread.h>
#ifdef __cplusplus
extern "C" {
#endif
@@ -87,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];
@@ -139,6 +143,10 @@ 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);
char *getWebpaInterface(void);
void set_cloud_status(char *status);
char *get_cloud_status(void);
int get_parodus_init();
/**
* parse a webpa url. Extract the server address, the port
* and return whether it's secure or not

View File

@@ -77,6 +77,7 @@ void createSocketConnection(void (* initKeypress)())
server_list_t server_list;
bool seshat_registered = false;
int create_conn_rtn = 0;
int nopoll_returnvalue = 0;
unsigned int webpa_ping_timeout_ms = 1000 * get_parodus_cfg()->webpa_ping_timeout;
unsigned int heartBeatTimer = 0;
struct timespec start_svc_alive_timer;
@@ -112,6 +113,9 @@ 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);
@@ -131,14 +135,17 @@ void createSocketConnection(void (* initKeypress)())
struct timespec start, stop, diff;
int time_taken_ms;
clock_gettime(CLOCK_REALTIME, &start);
nopoll_loop_wait(ctx, 5000000);
clock_gettime(CLOCK_REALTIME, &stop);
clock_gettime(CLOCK_MONOTONIC, &start);
nopoll_returnvalue = nopoll_loop_wait(ctx, 5000000);
clock_gettime(CLOCK_MONOTONIC, &stop);
timespec_diff(&start, &stop, &diff);
time_taken_ms = diff.tv_sec * 1000 + (diff.tv_nsec / 1000000);
// ParodusInfo("nopoll_loop_wait() time %d msec\n", time_taken_ms);
if(time_taken_ms/1000 != 5)
{
ParodusInfo("nopoll_loop_wait value %d,nopoll_loop_wait() time %d msec\n",nopoll_returnvalue, time_taken_ms);
}
ParodusPrint("webpa_ping_timeout_ms %d msec\n", webpa_ping_timeout_ms);
heartBeatTimer = get_heartBeatTimer();
if(heartBeatTimer >= webpa_ping_timeout_ms)
{

View File

@@ -132,7 +132,10 @@ void set_cloud_disconnect_time(int disconnTime)
cloud_disconnect_max_time = disconnTime;
}
int get_parodus_init()
{
return init;
}
//--------------------------------------------------------------------
// createNopollConnection_logic:
@@ -236,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);
}
@@ -322,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;
@@ -336,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)) {
@@ -717,10 +728,9 @@ int createNopollConnection(noPollCtx *ctx, server_list_t *server_list)
{
create_connection_ctx_t conn_ctx;
int max_retry_count;
struct timespec connect_time,*connectTimePtr;
connectTimePtr = &connect_time;
backoff_timer_t backoff_timer;
static int init_conn_failure=1;
struct sysinfo l_sSysInfo;
if(ctx == NULL) {
return nopoll_false;
@@ -773,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");
@@ -784,9 +793,6 @@ int createNopollConnection(noPollCtx *ctx, server_list_t *server_list)
ParodusInfo("Connected to server\n");
OnboardLog("Connected to server\n");
}
get_parodus_cfg()->cloud_status = CLOUD_STATUS_ONLINE;
ParodusInfo("cloud_status set as %s after successful connection\n", get_parodus_cfg()->cloud_status);
/* On initial connect success, invoke conn status change event as "success" */
if((NULL != on_conn_status_change) && init)
@@ -800,9 +806,9 @@ int createNopollConnection(noPollCtx *ctx, server_list_t *server_list)
on_ping_status_change("received");
}
if((get_parodus_cfg()->boot_time != 0) && init) {
getCurrentTime(connectTimePtr);
ParodusInfo("connect_time-diff-boot_time=%d\n", connectTimePtr->tv_sec - get_parodus_cfg()->boot_time);
if(init) {
sysinfo(&l_sSysInfo);
ParodusInfo("connect_time-diff-boot_time=%ld\n", l_sSysInfo.uptime);
init = 0; //set init to 0 so that this is logged only during process start up and not during reconnect
}
@@ -818,6 +824,9 @@ int createNopollConnection(noPollCtx *ctx, server_list_t *server_list)
ParodusPrint("LastReasonStatus reset after successful connection\n");
setMessageHandlers();
stop_conn_in_progress ();
ParodusPrint("set cloud_status\n");
set_cloud_status(CLOUD_STATUS_ONLINE);
ParodusInfo("cloud_status set as %s after successful connection\n", get_cloud_status());
return nopoll_true;
}
@@ -862,7 +871,7 @@ static noPollConnOpts * createConnOpts (char * extra_headers, bool secure)
nopoll_conn_opts_ssl_peer_verify (opts, nopoll_true);
nopoll_conn_opts_set_ssl_protocol (opts, NOPOLL_METHOD_TLSV1_2);
}
nopoll_conn_opts_set_interface (opts,get_parodus_cfg()->webpa_interface_used);
nopoll_conn_opts_set_interface (opts,getWebpaInterface());
nopoll_conn_opts_set_extra_headers (opts,extra_headers);
return opts;
}
@@ -902,8 +911,8 @@ void close_and_unref_connection(noPollConn *conn, bool is_shutting_down)
{
if (conn) {
close_conn (conn, is_shutting_down);
get_parodus_cfg()->cloud_status = CLOUD_STATUS_OFFLINE;
ParodusInfo("cloud_status set as %s after connection close\n", get_parodus_cfg()->cloud_status);
set_cloud_status(CLOUD_STATUS_OFFLINE);
ParodusInfo("cloud_status set as %s after connection close\n", get_cloud_status());
}
}

View File

@@ -537,13 +537,13 @@ int retrieveFromMemory(char *keyName, cJSON **jsonresponse)
}
else if(strcmp(WEBPA_INTERFACE, keyName)==0)
{
if((get_parodus_cfg()->webpa_interface_used !=NULL)&& (strlen(get_parodus_cfg()->fw_name)==0))
if((getWebpaInterface() !=NULL)&& (strlen(get_parodus_cfg()->fw_name)==0))
{
ParodusError("retrieveFromMemory: webpa_interface_used value is NULL\n");
return -1;
}
ParodusInfo("retrieveFromMemory: keyName:%s value:%s\n",keyName,get_parodus_cfg()->webpa_interface_used);
cJSON_AddItemToObject( *jsonresponse, WEBPA_INTERFACE , cJSON_CreateString(get_parodus_cfg()->webpa_interface_used));
ParodusInfo("retrieveFromMemory: keyName:%s value:%s\n",keyName,getWebpaInterface());
cJSON_AddItemToObject( *jsonresponse, WEBPA_INTERFACE , cJSON_CreateString(getWebpaInterface()));
}
else if(strcmp(WEBPA_URL, keyName)==0)
{
@@ -577,20 +577,20 @@ int retrieveFromMemory(char *keyName, cJSON **jsonresponse)
}
else if(strcmp(CLOUD_STATUS, keyName)==0)
{
if(get_parodus_cfg()->cloud_status ==NULL)
if(get_cloud_status() ==NULL)
{
ParodusError("retrieveFromMemory: cloud_status value is NULL\n");
return -1;
}
else if((get_parodus_cfg()->cloud_status !=NULL) && (strlen(get_parodus_cfg()->cloud_status)==0))
else if((get_cloud_status() !=NULL) && (strlen(get_cloud_status())==0))
{
ParodusError("retrieveFromMemory: cloud_status value is empty\n");
return -1;
}
else
{
ParodusInfo("retrieveFromMemory: keyName:%s value:%s\n", keyName, get_parodus_cfg()->cloud_status);
cJSON_AddItemToObject( *jsonresponse, CLOUD_STATUS , cJSON_CreateString(get_parodus_cfg()->cloud_status));
ParodusInfo("retrieveFromMemory: keyName:%s value:%s\n", keyName, get_cloud_status());
cJSON_AddItemToObject( *jsonresponse, CLOUD_STATUS , cJSON_CreateString(get_cloud_status()));
}
}
else if(strcmp(BOOT_TIME, keyName)==0)

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

@@ -106,6 +106,10 @@ int main( int argc, char **argv)
ParodusInfo("********** Starting component: Parodus **********\n ");
drop_root_privilege();
#ifdef ENABLE_WEBCFGBIN
subscribeRBUSevent();
regXmidtSendDataMethod();
#endif
setDefaultValuesToCfg(cfg);
if (0 != parseCommandLine(argc,argv,cfg)) {
abort();

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,9 +50,9 @@ 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_parodus_cfg()->cloud_status;
const char *status = get_cloud_status();
if (NULL == status)
return false;
return (strcmp (status, CLOUD_STATUS_ONLINE) == 0);
@@ -60,14 +60,14 @@ static int cloud_status_is_online (void)
/** To send upstream msgs to server ***/
void sendMessage(noPollConn *conn, void *msg, size_t len)
int sendMessage(noPollConn *conn, void *msg, size_t len)
{
int bytesWritten = 0;
if (!cloud_status_is_online ()) {
ParodusError("Failed to send msg upstream as connection is not OK\n");
OnboardLog("Failed to send msg upstream as connection is not OK\n");
return;
return 1;
}
ParodusInfo("sendMessage length %zu\n", len);
@@ -77,7 +77,9 @@ void sendMessage(noPollConn *conn, void *msg, size_t len)
if (bytesWritten != (int) len)
{
ParodusError("Failed to send bytes %zu, bytes written were=%d (errno=%d, %s)..\n", len, bytesWritten, errno, strerror(errno));
return 1;
}
return 0;
}
int sendResponse(noPollConn * conn, void * buffer, size_t length)

View File

@@ -41,7 +41,7 @@ extern "C" {
*/
int sendResponse(noPollConn * conn,void *str, size_t bufferSize);
void setMessageHandlers();
void sendMessage(noPollConn *conn, void *msg, size_t len);
int sendMessage(noPollConn *conn, void *msg, size_t len);
/**
* @brief __report_log Nopoll log handler

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)
@@ -34,7 +38,7 @@ uint64_t getCurrentTimeInMicroSeconds(struct timespec *timer)
ParodusPrint("timer->tv_sec : %lu\n",timer->tv_sec);
ParodusPrint("timer->tv_nsec : %lu\n",timer->tv_nsec);
systime = (uint64_t)timer->tv_sec * 1000000L + timer->tv_nsec/ 1000;
return systime;
return systime;
}
long timeValDiff(struct timespec *starttime, struct timespec *finishtime)

View File

@@ -40,7 +40,7 @@
/*----------------------------------------------------------------------------*/
void *metadataPack;
size_t metaPackSize=-1;
size_t metaPackSize=0;
UpStreamMsg *UpStreamMsgQ = NULL;
@@ -83,7 +83,6 @@ void packMetaData()
//Pack the metadata initially to reuse for every upstream msg sending to server
ParodusPrint("-------------- Packing metadata ----------------\n");
sprintf(boot_time, "%d", get_parodus_cfg()->boot_time);
struct data meta_pack[METADATA_COUNT] = {
{HW_MODELNAME, get_parodus_cfg()->hw_model},
{HW_SERIALNUMBER, get_parodus_cfg()->hw_serial_number},
@@ -95,10 +94,9 @@ void packMetaData()
{LAST_RECONNECT_REASON, get_global_reconnect_reason()},
{WEBPA_PROTOCOL, get_parodus_cfg()->webpa_protocol},
{WEBPA_UUID,get_parodus_cfg()->webpa_uuid},
{WEBPA_INTERFACE, get_parodus_cfg()->webpa_interface_used},
{WEBPA_INTERFACE, getWebpaInterface()},
{PARTNER_ID, get_parodus_cfg()->partner_id}
};
const data_t metapack = {METADATA_COUNT, meta_pack};
metaPackSize = wrp_pack_metadata( &metapack , &metadataPack );
@@ -330,6 +328,7 @@ void *processUpstreamMessage()
if(ret == 1)
{
wrp_msg_t *eventMsg = (wrp_msg_t *) malloc(sizeof(wrp_msg_t));
memset( eventMsg, 0, sizeof( wrp_msg_t ) );
eventMsg->msg_type = msgType;
eventMsg->u.event.content_type=msg->u.event.content_type;
eventMsg->u.event.source=msg->u.event.source;
@@ -339,6 +338,15 @@ void *processUpstreamMessage()
eventMsg->u.event.headers=msg->u.event.headers;
eventMsg->u.event.metadata=msg->u.event.metadata;
eventMsg->u.event.partner_ids = partnersList;
if(msg->u.event.transaction_uuid)
{
ParodusPrint("Inside Trans id in PARODUS\n");
}
else
{
ParodusPrint("Assigning NULL to trans id\n");
eventMsg->u.event.transaction_uuid = NULL;
}
int size = wrp_struct_to( eventMsg, WRP_BYTES, &bytes );
if(size > 0)
@@ -596,11 +604,12 @@ void getServiceNameAndSendResponse(wrp_msg_t *msg, void **msg_bytes, size_t msg_
}
}
void sendUpstreamMsgToServer(void **resp_bytes, size_t resp_size)
int sendUpstreamMsgToServer(void **resp_bytes, size_t resp_size)
{
void *appendData;
size_t encodedSize;
bool close_retry = false;
int sendRetStatus = 1;
//appending response with metadata
if(metaPackSize > 0)
{
@@ -615,12 +624,13 @@ void sendUpstreamMsgToServer(void **resp_bytes, size_t resp_size)
//TODO: Upstream and downstream messages in queue should be handled and queue should be empty before parodus forcefully disconnect from cloud.
if(!close_retry || (get_parodus_cfg()->cloud_disconnect !=NULL))
{
sendMessage(get_global_conn(),appendData, encodedSize);
sendRetStatus = sendMessage(get_global_conn(),appendData, encodedSize);
}
else
{
ParodusInfo("close_retry is %d, unable to send response as connection retry is in progress\n", close_retry);
OnboardLog("close_retry is %d, unable to send response as connection retry is in progress\n", close_retry);
sendRetStatus = 1;
}
free(appendData);
appendData =NULL;
@@ -628,6 +638,9 @@ void sendUpstreamMsgToServer(void **resp_bytes, size_t resp_size)
else
{
ParodusError("Failed to send upstream as metadata packing is not successful\n");
sendRetStatus = 1;
}
ParodusPrint("sendRetStatus is %d\n", sendRetStatus);
return sendRetStatus;
}

View File

@@ -47,11 +47,15 @@ typedef struct UpStreamMsg__
void packMetaData();
void *handle_upstream();
void *processUpstreamMessage();
void registerRBUSlistener();
int getDeviceId(char **device_id, size_t *device_id_len);
void sendUpstreamMsgToServer(void **resp_bytes, size_t resp_size);
int sendUpstreamMsgToServer(void **resp_bytes, size_t resp_size);
void getServiceNameAndSendResponse(wrp_msg_t *msg, void **msg_bytes, size_t msg_size);
void createUpstreamRetrieveMsg(wrp_msg_t *message, wrp_msg_t **retrieve_msg);
void set_global_UpStreamMsgQ(UpStreamMsg * UpStreamQ);
#ifdef WAN_FAILOVER_SUPPORTED
int subscribeCurrentActiveInterfaceEvent();
#endif
UpStreamMsg * get_global_UpStreamMsgQ(void);
pthread_cond_t *get_global_nano_con(void);
pthread_mutex_t *get_global_nano_mut(void);

211
src/upstream_rbus.c Normal file
View File

@@ -0,0 +1,211 @@
/**
* Copyright 2021 Comcast Cable Communications Management, LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* @file upstream_rbus.c
*
* @description This is used for parodus-RBUS communication
* to send notification events upstream to cloud.
*
*/
#include <stdlib.h>
#include <rbus.h>
#include "upstream.h"
#include "ParodusInternal.h"
#include "partners_check.h"
#include "close_retry.h"
#include "connection.h"
#include "heartBeat.h"
#define WEBCFG_UPSTREAM_EVENT "Webconfig.Upstream"
#ifdef WAN_FAILOVER_SUPPORTED
#define WEBPA_INTERFACE "Device.X_RDK_WanManager.CurrentActiveInterface"
#endif
rbusHandle_t rbus_Handle;
rbusError_t err;
void processWebconfigUpstreamEvent(rbusHandle_t handle, rbusEvent_t const* event, rbusEventSubscription_t* subscription);
void subscribeAsyncHandler( rbusHandle_t handle, rbusEventSubscription_t* subscription, rbusError_t error);
rbusHandle_t get_parodus_rbus_Handle(void)
{
return rbus_Handle;
}
#ifdef WAN_FAILOVER_SUPPORTED
void eventReceiveHandler( rbusHandle_t rbus_Handle, rbusEvent_t const* event, rbusEventSubscription_t* subscription );
#endif
/* API to register RBUS listener to receive messages from webconfig */
void subscribeRBUSevent()
{
int rc = RBUS_ERROR_SUCCESS;
err = rbus_open(&rbus_Handle, "parodus");
if (err)
{
ParodusError("rbus_open failed :%s\n", rbusError_ToString(err));
return;
}
rc = rbusEvent_SubscribeAsync(rbus_Handle,WEBCFG_UPSTREAM_EVENT,processWebconfigUpstreamEvent,subscribeAsyncHandler,"parodus",10*60);
if(rc != RBUS_ERROR_SUCCESS)
ParodusError("rbusEvent_Subscribe failed: %d, %s\n", rc, rbusError_ToString(rc));
else
ParodusInfo("rbusEvent_Subscribe was successful\n");
}
#ifdef WAN_FAILOVER_SUPPORTED
/* API to subscribe Active Interface name on value change event*/
int subscribeCurrentActiveInterfaceEvent()
{
int rc = RBUS_ERROR_SUCCESS;
ParodusPrint("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)
{
ParodusError("%s subscribe failed : %d - %s\n", WEBPA_INTERFACE, rc, rbusError_ToString(rc));
}
return rc;
}
#endif
void processWebconfigUpstreamEvent(rbusHandle_t handle, rbusEvent_t const* event, rbusEventSubscription_t* subscription)
{
(void)handle;
(void)subscription;
int rv=-1;
wrp_msg_t *event_msg;
void *bytes;
const uint8_t* bytesVal = NULL;
int len;
rbusValue_t value = NULL;
value = rbusObject_GetValue(event->data, "value");
bytesVal = rbusValue_GetBytes(value, &len);
bytes = (void*) bytesVal;
rv = wrp_to_struct( bytes, len, WRP_BYTES, &event_msg );
if(rv > 0)
{
ParodusInfo(" Received upstream event data: dest '%s'\n", event_msg->u.event.dest);
partners_t *partnersList = NULL;
int j = 0;
int ret = validate_partner_id(event_msg, &partnersList);
if(ret == 1)
{
wrp_msg_t *eventMsg = (wrp_msg_t *) malloc(sizeof(wrp_msg_t));
memset( eventMsg, 0, sizeof( wrp_msg_t ) );
eventMsg->msg_type = event_msg->msg_type;
eventMsg->u.event.content_type=event_msg->u.event.content_type;
eventMsg->u.event.source=event_msg->u.event.source;
eventMsg->u.event.dest=event_msg->u.event.dest;
eventMsg->u.event.payload=event_msg->u.event.payload;
eventMsg->u.event.payload_size=event_msg->u.event.payload_size;
eventMsg->u.event.headers=event_msg->u.event.headers;
eventMsg->u.event.metadata=event_msg->u.event.metadata;
eventMsg->u.event.partner_ids = partnersList;
if(event_msg->u.event.transaction_uuid)
{
ParodusPrint("Inside Trans id in PARODUS_rbus\n");
}
else
{
ParodusPrint("Assigning NULL to trans id RBUS\n");
eventMsg->u.event.transaction_uuid = NULL;
}
int size = wrp_struct_to( eventMsg, WRP_BYTES, &bytes );
if(size > 0)
{
sendUpstreamMsgToServer(&bytes, size);
}
free(eventMsg);
free(bytes);
bytes = NULL;
}
else
{
sendUpstreamMsgToServer((void **)(&bytes), len);
}
if(partnersList != NULL)
{
for(j=0; j<(int)partnersList->count; j++)
{
if(NULL != partnersList->partner_ids[j])
{
free(partnersList->partner_ids[j]);
}
}
free(partnersList);
}
partnersList = NULL;
}
}
void subscribeAsyncHandler( rbusHandle_t handle, rbusEventSubscription_t* subscription, rbusError_t error)
{
(void)handle;
ParodusInfo("subscribeAsyncHandler event %s, error %d - %s\n",subscription->eventName, error, rbusError_ToString(error));
}
#ifdef WAN_FAILOVER_SUPPORTED
void eventReceiveHandler( rbusHandle_t rbus_Handle, rbusEvent_t const* event, rbusEventSubscription_t* subscription )
{
(void)subscription;
ParodusPrint("Handling event inside eventReceiveHandler\n");
(void)rbus_Handle;
char * interface = NULL;
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);
// If interface is already down then reset it and reconnect cloud conn as wan failover event is received
if(get_interface_down_event())
{
reset_interface_down_event();
ParodusInfo("Interface_down_event is reset\n");
resume_heartBeatTimer();
}
// Close cloud conn and reconnect with the new interface as wan failover event is received
set_global_reconnect_reason("WAN_FAILOVER");
set_global_reconnect_status(true);
set_close_retry();
}
else {
if(oldValue == NULL) {
ParodusError("oldValue is NULL\n");
}
if(interface == NULL) {
ParodusError("interface is NULL\n");
}
}
}
#endif

1731
src/xmidtsend_rbus.c Normal file

File diff suppressed because it is too large Load Diff

127
src/xmidtsend_rbus.h Normal file
View File

@@ -0,0 +1,127 @@
/**
* Copyright 2022 Comcast Cable Communications Management, LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* @file xmidtsend_rbus.h
*
* @description This header defines functions required to manage xmidt send messages via rbus.
*
*/
#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 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 */
/*----------------------------------------------------------------------------*/
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,
INVALID_MSG_TYPE,
MISSING_SOURCE,
MISSING_DEST,
MISSING_CONTENT_TYPE,
MISSING_PAYLOAD,
MISSING_PAYLOADLEN,
INVALID_CONTENT_TYPE,
ENQUEUE_FAILURE = 100,
CLIENT_DISCONNECT = 101,
QUEUE_SIZE_EXCEEDED = 102,
WRP_ENCODE_FAILURE = 103,
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 */
/*----------------------------------------------------------------------------*/
rbusHandle_t get_parodus_rbus_Handle(void);
void addToXmidtUpstreamQ(wrp_msg_t * msg, rbusMethodAsyncHandle_t asyncHandle);
void* processXmidtUpstreamMsg();
void processXmidtData();
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, char *cloudsource, rbusError_t error);
int validateXmidtData(wrp_msg_t * eventMsg, char **errorMsg, int *statusCode);
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();
void checkMsgExpiry();
void mapXmidtStatusToStatusMessage(int status, char **message);
int xmidtQOptmize();
#ifdef __cplusplus
}
#endif
#endif /* _XMIDTSEND_RBUS_H_ */

View File

@@ -32,6 +32,10 @@ if (FEATURE_DNS_QUERY)
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)
endif (ENABLE_WEBCFGBIN)
if(NOT DISABLE_VALGRIND)
set (MEMORY_CHECK valgrind --leak-check=full --show-reachable=yes -v)
endif ()
@@ -42,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)
#-------------------------------------------------------------------------------
@@ -105,7 +109,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)
@@ -113,7 +117,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)
#-------------------------------------------------------------------------------
@@ -154,7 +158,11 @@ set(CLIST_SRC ${CLIST_SRC} ../src/seshat_interface.c)
else()
set(CLIST_SRC ${CLIST_SRC} ../src/seshat_interface_stub.c)
endif (ENABLE_SESHAT)
if (ENABLE_WEBCFGBIN)
set(CLIST_SRC ${CLIST_SRC} ../src/upstream_rbus.c ../src/xmidtsend_rbus.c)
endif (ENABLE_WEBCFGBIN)
add_executable(test_client_list ${CLIST_SRC})
#target_link_libraries (test_client_list ${PARODUS_CONN_LIBS} ${PARODUS_COMMON_LIBS})
target_link_libraries (test_client_list ${PARODUS_COMMON_LIBS} -lcurl -luuid)
@@ -172,6 +180,10 @@ else()
set(SVA_SRC ${SVA_SRC} ../src/seshat_interface_stub.c)
endif (ENABLE_SESHAT)
if (ENABLE_WEBCFGBIN)
set(SVA_SRC ${SVA_SRC} ../src/upstream_rbus.c ../src/xmidtsend_rbus.c)
endif (ENABLE_WEBCFGBIN)
add_executable(test_service_alive ${SVA_SRC})
#target_link_libraries (test_service_alive ${PARODUS_CONN_LIBS} ${PARODUS_COMMON_LIBS})
target_link_libraries (test_service_alive ${PARODUS_COMMON_LIBS} -lcurl -luuid)
@@ -200,7 +212,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
@@ -253,7 +265,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
@@ -263,7 +275,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} )
#-------------------------------------------------------------------------------
@@ -284,6 +296,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
@@ -294,6 +307,9 @@ set(CONIFC_SRC ${CONIFC_SRC} ../src/seshat_interface.c)
else()
set(CONIFC_SRC ${CONIFC_SRC} ../src/seshat_interface_stub.c)
endif (ENABLE_SESHAT)
if (ENABLE_WEBCFGBIN)
set(CONIFC_SRC ${CONIFC_SRC} ../src/upstream_rbus.c ../src/xmidtsend_rbus.c)
endif (ENABLE_WEBCFGBIN)
add_executable(test_conn_interface ${CONIFC_SRC})
target_link_libraries (test_conn_interface -lcmocka ${PARODUS_COMMON_LIBS} -lcurl -luuid )
@@ -340,6 +356,10 @@ else()
set(TOKEN_SRC test_token_stub.c ${TOKEN_SRC})
endif (FEATURE_DNS_QUERY)
if (ENABLE_WEBCFGBIN)
set(TOKEN_SRC ${TOKEN_SRC} ../src/upstream_rbus.c ../src/xmidtsend_rbus.c)
endif (ENABLE_WEBCFGBIN)
add_executable(test_token ${TOKEN_SRC} )
#target_link_libraries (test_token ${PARODUS_COMMON_LIBS} ${PARODUS_JWT_LIBS} -lcmocka )
target_link_libraries (test_token ${PARODUS_COMMON_LIBS} -lcmocka -lcurl -luuid)

View File

@@ -92,7 +92,7 @@ void test_set_parodus_cfg()
CU_ASSERT_STRING_EQUAL(cfg.hw_last_reboot_reason,get_parodus_cfg()->hw_last_reboot_reason);
CU_ASSERT_STRING_EQUAL(cfg.fw_name,get_parodus_cfg()->fw_name);
CU_ASSERT_STRING_EQUAL(cfg.webpa_url, get_parodus_cfg()->webpa_url);
CU_ASSERT_STRING_EQUAL(cfg.webpa_interface_used , get_parodus_cfg()->webpa_interface_used);
CU_ASSERT_STRING_EQUAL(cfg.webpa_interface_used , getWebpaInterface());
CU_ASSERT_STRING_EQUAL(cfg.webpa_protocol, get_parodus_cfg()->webpa_protocol);
CU_ASSERT_EQUAL(cfg.boot_time, get_parodus_cfg()->boot_time);
CU_ASSERT_EQUAL(cfg.webpa_ping_timeout, get_parodus_cfg()->webpa_ping_timeout);
@@ -113,7 +113,7 @@ void test_getWebpaConveyHeader()
CU_ASSERT_STRING_EQUAL(get_parodus_cfg()->hw_manufacturer, cJSON_GetObjectItem(payload, HW_MANUFACTURER)->valuestring);
CU_ASSERT_STRING_EQUAL(get_parodus_cfg()->hw_last_reboot_reason, cJSON_GetObjectItem(payload, HW_LAST_REBOOT_REASON)->valuestring);
CU_ASSERT_STRING_EQUAL(get_parodus_cfg()->fw_name, cJSON_GetObjectItem(payload, FIRMWARE_NAME)->valuestring);
CU_ASSERT_STRING_EQUAL(get_parodus_cfg()->webpa_interface_used, cJSON_GetObjectItem(payload, WEBPA_INTERFACE)->valuestring);
CU_ASSERT_STRING_EQUAL(getWebpaInterface(), cJSON_GetObjectItem(payload, WEBPA_INTERFACE)->valuestring);
CU_ASSERT_STRING_EQUAL(get_parodus_cfg()->webpa_protocol, cJSON_GetObjectItem(payload, WEBPA_PROTOCOL)->valuestring);
CU_ASSERT_EQUAL((int)get_parodus_cfg()->boot_time, cJSON_GetObjectItem(payload, BOOT_TIME)->valueint);

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,
@@ -103,7 +104,7 @@ void test_setParodusConfig()
assert_string_equal(cfg.hw_last_reboot_reason, temp->hw_last_reboot_reason);
assert_string_equal(cfg.webpa_path_url, temp->webpa_path_url);
assert_string_equal(cfg.webpa_url, temp->webpa_url);
assert_string_equal(cfg.webpa_interface_used, temp->webpa_interface_used);
assert_string_equal(cfg.webpa_interface_used, getWebpaInterface());
assert_string_equal(cfg.webpa_protocol, temp->webpa_protocol);
assert_string_equal(cfg.webpa_uuid, temp->webpa_uuid);
assert_string_equal(cfg.partner_id, temp->partner_id);
@@ -208,13 +209,11 @@ void test_parseCommandLine()
ParodusCfg parodusCfg;
memset(&parodusCfg,0,sizeof(parodusCfg));
#ifdef FEATURE_DNS_QUERY
write_key_to_file ("../../tests/jwt_key.tst", jwt_key);
#endif
create_token_script("/tmp/token.sh");
assert_int_equal (parseCommandLine(argc,command,&parodusCfg), 0);
assert_string_equal( parodusCfg.hw_model, "TG1682");
assert_string_equal( parodusCfg.hw_serial_number, "Fer23u948590");
assert_string_equal( parodusCfg.hw_manufacturer, "ARRISGroup,Inc.");
@@ -469,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;
@@ -589,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);
@@ -103,6 +106,11 @@ void set_global_shutdown_reason(char *reason)
UNUSED(reason);
}
int getDeviceId(char **device_id, size_t *device_id_len)
{
UNUSED(device_id); UNUSED(device_id_len);
return 0;
}
void start_conn_in_progress (unsigned long start_time)
{
UNUSED(start_time);
@@ -139,6 +147,10 @@ void packMetaData()
function_called();
}
int get_parodus_init()
{
return 0;
}
int get_cloud_disconnect_time(void)
{
@@ -172,6 +184,18 @@ int serviceAliveTask()
return 0;
}
int validate_partner_id(wrp_msg_t *msg, partners_t **partnerIds)
{
UNUSED(msg); UNUSED(partnerIds);
return 0;
}
int sendUpstreamMsgToServer(void **resp_bytes, size_t resp_size)
{
UNUSED(resp_bytes); UNUSED(resp_size);
return 0;
}
int nopoll_loop_wait(noPollCtx * ctx,long timeout)
{
UNUSED(ctx); UNUSED(timeout);

View File

@@ -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, CLOUD_STATUS_ONLINE);
assert_string_equal(get_cloud_status(), CLOUD_STATUS_ONLINE);
free(cfg);
if (g_jwt_server_ip !=NULL)
{

View File

@@ -125,6 +125,10 @@ int processCrudRequest(wrp_msg_t *reqMsg, wrp_msg_t **responseMsg )
return (int)mock();
}
char* getWebpaInterface(void)
{
return NULL;
}
/*----------------------------------------------------------------------------*/
/* Tests */
/*----------------------------------------------------------------------------*/

View File

@@ -1530,7 +1530,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, CLOUD_STATUS_ONLINE);
assert_string_equal(get_cloud_status(), CLOUD_STATUS_ONLINE);
assert_int_equal (respMsg->u.crud.payload_size, 25);
fp = fopen(cfg.crud_config_file, "r");

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

@@ -131,6 +131,11 @@ bool get_interface_down_event()
return false;
}
char *get_cloud_status(void)
{
return NULL;
}
/*----------------------------------------------------------------------------*/
/* Tests */
/*----------------------------------------------------------------------------*/

View File

@@ -44,10 +44,12 @@ extern size_t metaPackSize;
extern UpStreamMsg *UpStreamMsgQ;
int numLoops = 1;
int deviceIDNull =0;
char webpa_interface[64]={'\0'};
wrp_msg_t *temp = NULL;
extern pthread_mutex_t nano_mut;
extern pthread_cond_t nano_con;
static int crud_test = 0;
pthread_mutex_t config_mut=PTHREAD_MUTEX_INITIALIZER;
/*----------------------------------------------------------------------------*/
/* Mocks */
/*----------------------------------------------------------------------------*/
@@ -116,6 +118,27 @@ ParodusCfg *get_parodus_cfg(void)
return &parodusCfg;
}
char *getWebpaInterface(void)
{
ParodusCfg cfg;
memset(&cfg,0,sizeof(cfg));
#ifdef WAN_FAILOVER_SUPPORTED
parStrncpy(cfg.webpa_interface_used , "wl0", sizeof(cfg.webpa_interface_used));
#else
parStrncpy(cfg.webpa_interface_used , "eth0", sizeof(cfg.webpa_interface_used));
#endif
set_parodus_cfg(&cfg);
#ifdef WAN_FAILOVER_SUPPORTED
ParodusPrint("WAN_FAILOVER_SUPPORTED mode \n");
pthread_mutex_lock (&config_mut);
parStrncpy(webpa_interface, get_parodus_cfg()->webpa_interface_used, sizeof(webpa_interface));
pthread_mutex_unlock (&config_mut);
#else
parStrncpy(webpa_interface, get_parodus_cfg()->webpa_interface_used, sizeof(webpa_interface));
#endif
return webpa_interface;
}
ssize_t wrp_pack_metadata( const data_t *packData, void **data )
{
(void) packData; (void) data;

View File

@@ -46,10 +46,11 @@ extern size_t metaPackSize;
extern UpStreamMsg *UpStreamMsgQ;
int numLoops = 1;
int deviceIDNull =0;
char webpa_interface[64]={'\0'};
wrp_msg_t *reg_msg = NULL;
extern pthread_mutex_t nano_mut;
extern pthread_cond_t nano_con;
pthread_mutex_t config_mut=PTHREAD_MUTEX_INITIALIZER;
/*----------------------------------------------------------------------------*/
/* Mocks */
/*----------------------------------------------------------------------------*/
@@ -101,6 +102,27 @@ ParodusCfg *get_parodus_cfg(void)
return &parodusCfg;
}
char *getWebpaInterface(void)
{
ParodusCfg cfg;
memset(&cfg,0,sizeof(cfg));
#ifdef WAN_FAILOVER_SUPPORTED
parStrncpy(cfg.webpa_interface_used , "wl0", sizeof(cfg.webpa_interface_used));
#else
parStrncpy(cfg.webpa_interface_used , "eth0", sizeof(cfg.webpa_interface_used));
#endif
set_parodus_cfg(&cfg);
#ifdef WAN_FAILOVER_SUPPORTED
ParodusPrint("WAN_FAILOVER_SUPPORTED mode \n");
pthread_mutex_lock (&config_mut);
parStrncpy(webpa_interface, get_parodus_cfg()->webpa_interface_used, sizeof(webpa_interface));
pthread_mutex_unlock (&config_mut);
#else
parStrncpy(webpa_interface, get_parodus_cfg()->webpa_interface_used, sizeof(webpa_interface));
#endif
return webpa_interface;
}
/*-------------------------------------------
int nn_connect (int s, const char *addr)
{