diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6328f828d..b488ee233 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,12 +4,21 @@ All notable changes to this project will be documented in this file. Dates are d
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
+#### [1.5.0](https://github.com/rdkcentral/tr69hostif/compare/1.4.9...1.5.0)
+
+- update license year and doxygen comment [`#521`](https://github.com/rdkcentral/tr69hostif/pull/521)
+- RDKEMW-19163:Migrate to Existing Thunder Plugin for libds Methods and… [`#502`](https://github.com/rdkcentral/tr69hostif/pull/502)
+- Merge tag '1.4.9' into develop [`34bc947`](https://github.com/rdkcentral/tr69hostif/commit/34bc9478d193ee19f3728dc423b75561a0f83f5a)
+
#### [1.4.9](https://github.com/rdkcentral/tr69hostif/compare/1.4.8...1.4.9)
+> 21 July 2026
+
- RDK-61871: Add OTEL source code and recipe changes to RDKE [`#511`](https://github.com/rdkcentral/tr69hostif/pull/511)
- RDKEMW-20790 : L2 Coverage for tr69hostif update [`#513`](https://github.com/rdkcentral/tr69hostif/pull/513)
- RDKEMW-20790 : Improve L2 Coverage for tr69hostif [`#507`](https://github.com/rdkcentral/tr69hostif/pull/507)
- RDKEMW-21374: Fix L2 Upload Results to Automatics Error [`#508`](https://github.com/rdkcentral/tr69hostif/pull/508)
+- tr69hostif 1.4.9 release changelog updates [`ea476f9`](https://github.com/rdkcentral/tr69hostif/commit/ea476f92ec83bc7141d174e79196a12e2f60ada8)
- Merge tag '1.4.8' into develop [`78e90eb`](https://github.com/rdkcentral/tr69hostif/commit/78e90eb7cfb0bfe74597e3be7d80f9a0af761c73)
#### [1.4.8](https://github.com/rdkcentral/tr69hostif/compare/1.4.7...1.4.8)
diff --git a/configure.ac b/configure.ac
index 1754514c4..8d9f1a171 100644
--- a/configure.ac
+++ b/configure.ac
@@ -387,6 +387,19 @@ AC_ARG_ENABLE([libsoup3],
esac],[libsoup3=false])
AM_CONDITIONAL([LIBSOUP3_ENABLE], [test x$libsoup3 = xtrue])
+# Enable Thunder-backed STBService implementation
+AC_ARG_ENABLE([thunder],
+ AS_HELP_STRING([--enable-thunder],[enable Thunder-backed STBService implementation (default is no)]),
+ [
+ case "${enableval}" in
+ yes) THUNDER_CLIENT_ENABLE=true ;;
+ no) THUNDER_CLIENT_ENABLE=false ;;
+ *) AC_MSG_ERROR([bad value ${enableval} for --enable-thunder]) ;;
+ esac
+ ],
+ [THUNDER_CLIENT_ENABLE=false; echo "Thunder STBService client is disabled"])
+AM_CONDITIONAL([WITH_THUNDER_CLIENT], [test x$THUNDER_CLIENT_ENABLE = xtrue])
+
AM_CONDITIONAL([WITH_MOCA_PROFILE], [test "x$enable_moca" = "xyes"])
AM_CONDITIONAL([WITH_MOCA20], [test "x$enable_moca2" = "xyes"])
AM_CONDITIONAL([WITH_WIFI_PROFILE], [test x$WIFI_PROFILE_ENABLE = xtrue])
diff --git a/cov_build.sh b/cov_build.sh
index 23fe41a19..d66a1a6a8 100644
--- a/cov_build.sh
+++ b/cov_build.sh
@@ -92,10 +92,10 @@ cd $WORKDIR
sed -i '/PKG_CHECK_MODULES(\[PROCPS\], \[libproc >= 3.2.8\])/s/^/#/' ./configure.ac
autoreconf -i
-./configure --enable-IPv6=yes --enable-wifi=yes
+./configure --enable-IPv6=yes --enable-wifi=yes --enable-thunder=yes
make AM_CXXFLAGS="-I$WORKDIR/src/unittest/stubs -I$WORKDIR/src/hostif/include -I/usr/include/cjson -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I$WORKDIR/src/hostif/handlers/include -I$WORKDIR/src/hostif/parodusClient/waldb -I$WORKDIR/src/hostif/profiles/DeviceInfo -I/usr/include/cjson -I$WORKDIR/src/hostif/profiles/Time -I$WORKDIR/src/hostif/profiles/Device -I/usr/include/libsoup-3.0 -I/usr/include/yajl -I$WORKDIR/src/hostif/profiles/STBService -I$WORKDIR/src/unittest/stubs/ds -I/usr/devicesettings/ds -I/usr/local/include -I$WORKDIR/src/hostif/profiles/IP -I$WORKDIR/src/hostif/profiles/Ethernet -I$WORKDIR/src/hostif/profiles/wifi -I/usr/local/include/rbus -I$WORKDIR/src/hostif/parodusClient/pal -I/usr/rdk-halif-device_settings/include -I/usr/local/include/libparodus -I/usr/local/include -I/usr/rdkvhal-devicesettings-raspberrypi4 -I/usr/local/include/ -I/usr/include/yajl -I/usr/tinyxml2 -I/usr/devicesettings/ds -I/$WORKDIR/src/hostif/httpserver/include -I/usr/remote_debugger/src/ -DIPV6_SUPPORT -DUSE_WIFI_PROFILE -DMEDIA_CLIENT -DPRIVACYMODES_CONTROL" \
-AM_LDFLAGS="-L/usr/local/lib -lrbus -lsecure_wrapper -lcurl -lrfcapi -lrdkloggers -llibparodus -lglib-2.0 -lnanomsg -lIARMBus -lWPEFrameworkPowerController -lds -ldshalcli -ldshalsrv -lwrp-c -lwdmp-c -lprocps -ltrower-base64 -lcimplog -lsoup-3.0 -L/usr/lib/x86_64-linux-gnu -lyajl -L/usr/local/lib/x86_64-linux-gnu -ltinyxml2" CXXFLAGS="-fpermissive -DPARODUS_ENABLE -DUSE_REMOTE_DEBUGGER" \
+AM_LDFLAGS="-L/usr/local/lib -lrbus -lsecure_wrapper -lcurl -lrfcapi -lrdkloggers -llibparodus -lglib-2.0 -lnanomsg -lIARMBus -lWPEFrameworkPowerController -lwrp-c -lwdmp-c -lprocps -ltrower-base64 -lcimplog -lsoup-3.0 -L/usr/lib/x86_64-linux-gnu -lyajl -L/usr/local/lib/x86_64-linux-gnu -ltinyxml2" CXXFLAGS="-fpermissive -DPARODUS_ENABLE -DUSE_REMOTE_DEBUGGER -DUSE_THUNDER_CLIENT" \
install
cd ./src/hostif/parodusClient/pal/mock-parodus/
diff --git a/docs/troubleshooting/common-errors.md b/docs/troubleshooting/common-errors.md
index 4c10b021c..2ca5a2b1a 100644
--- a/docs/troubleshooting/common-errors.md
+++ b/docs/troubleshooting/common-errors.md
@@ -94,6 +94,38 @@ The update handler uses a polling loop and sleeps for 60 seconds between passes.
- verify the affected profile participates in `registerUpdateCallback()` and `checkForUpdates()`
- account for the poll interval when interpreting latency
+## STBService Thunder Method Not Found
+
+### Symptom
+
+STBService GET/SET requests begin returning backend failures after migration to Thunder-backed handlers.
+
+### Why it happens
+
+The selected plugin method name or request key does not match the Thunder plugin interface (for example wrong callsign, wrong field name, or wrong port argument key).
+
+### What to check
+
+- verify the method string includes the full callsign and method name (for example `org.rdk.DisplaySettings.getVolumeLevel`)
+- verify request keys match plugin expectations (`audioPort`, `videoDisplay`, or no port key for singleton domains)
+- verify response field extraction uses the correct typed field name
+
+## STBService Instance Count Drift After Thunder Migration
+
+### Symptom
+
+Component table instance counts differ from previous behavior (for example AudioOutput/SPDIF/HDMI instance numbers change).
+
+### Why it happens
+
+Port-based components now derive instances from Thunder port discovery, and plugin-reported port lists can differ from legacy DS HAL ordering or naming.
+
+### What to check
+
+- verify port enumeration result from Thunder (`getSupportedAudioPorts` or `getSupportedVideoDisplays`)
+- verify component-level filtering rules (for example SPDIF-only filtering) are applied consistently
+- verify invalid instance handling returns an explicit invalid-parameter style fault
+
## See Also
- [Threading Model](../architecture/threading-model.md)
diff --git a/run_l2.sh b/run_l2.sh
index ca0ba69e8..ad43b8da2 100644
--- a/run_l2.sh
+++ b/run_l2.sh
@@ -95,6 +95,7 @@ pytest --json-report --json-report-summary --json-report-file $RESULT_DIR/webpa_
pytest --json-report --json-report-summary --json-report-file $RESULT_DIR/custom.json test/functional-tests/tests/tr69hostif_custom.py
pytest --json-report --json-report-summary --json-report-file $RESULT_DIR/dhcpv4.json test/functional-tests/tests/tr69hostif_dhcpv4.py
pytest --json-report --json-report-summary --json-report-file $RESULT_DIR/moca.json test/functional-tests/tests/tr69hostif_moca.py
+pytest --json-report --json-report-summary --json-report-file $RESULT_DIR/stbservice_thunder.json test/functional-tests/tests/tr69hostif_stbservice_thunder.py
pytest --json-report --json-report-summary --json-report-file $RESULT_DIR/device_info.json test/functional-tests/tests/tr69hostif_device_info.py
pytest --json-report --json-report-summary --json-report-file $RESULT_DIR/interfacestack.json test/functional-tests/tests/tr69hostif_interfacestack.py
diff --git a/run_ut.sh b/run_ut.sh
index 23a4b3e65..7e0b7938f 100644
--- a/run_ut.sh
+++ b/run_ut.sh
@@ -42,6 +42,9 @@ if [ "x$1" = "x--enable-cov" ]; then
ENABLE_COV=true
fi
+# Force Thunder mode for production builds
+CONFIGURE_THUNDER_OPT="--enable-thunder=yes"
+
apt-get update
apt-get -y install libtinyxml2-dev
apt-get -y install libsoup-3.0-dev
@@ -171,12 +174,30 @@ make
./devieInfo_gtest
echo "********************"
+echo "**** Compiling STBService Thunder gtest ****"
+cd $TOP_DIR/src/hostif/profiles/STBService/gtest
+rm -f stbservice_thunder_gtest
+make || { echo "ERROR: STBService Thunder gtest build failed"; exit 1; }
+./stbservice_thunder_gtest || { echo "ERROR: STBService Thunder gtest execution failed"; exit 1; }
+echo "********************"
+
cd $TOP_DIR
if [ "$ENABLE_COV" = true ]; then
lcov --capture --directory . --output-file coverage.info
lcov --remove coverage.info '/usr/*' '*/gtest/*' '*/mocks/*' --output-file filtered.info
- lcov --extract filtered.info '*/src/hostif/httpserver/*' '*/src/hostif/parodusClient/*' '*/src/hostif/src/*' '*/src/hostif/profiles/DHCPv4/*' '*/src/hostif/profiles/Device/*' '*/src/hostif/profiles/DeviceInfo/*' '*/src/hostif/profiles/Ethernet/*' '*/src/hostif/profiles/Time/*' --output-file tr69hostif_coverage.info
+ lcov --extract filtered.info '*/src/hostif/httpserver/*' '*/src/hostif/parodusClient/*' '*/src/hostif/src/*' '*/src/hostif/profiles/DHCPv4/*' '*/src/hostif/profiles/Device/*' '*/src/hostif/profiles/DeviceInfo/*' '*/src/hostif/profiles/Ethernet/*' '*/src/hostif/profiles/Time/*' '*/src/hostif/profiles/STBService/*' --output-file tr69hostif_coverage_temp.info
+ # Remove non-Thunder STBService files (libds versions no longer used) and untested Thunder files
+ lcov --remove tr69hostif_coverage_temp.info \
+ '*/STBService/Components_AudioOutput.cpp' \
+ '*/STBService/Components_DisplayDevice.cpp' \
+ '*/STBService/Components_HDMI.cpp' \
+ '*/STBService/Components_SPDIF.cpp' \
+ '*/STBService/Components_VideoDecoder.cpp' \
+ '*/STBService/Components_VideoOutput.cpp' \
+ '*/STBService/Capabilities.cpp' \
+ --output-file tr69hostif_coverage.info
+ rm -f tr69hostif_coverage_temp.info
lcov --list tr69hostif_coverage.info
fi
diff --git a/src/Makefile.am b/src/Makefile.am
index d26b2a3f3..142dacd91 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -81,14 +81,18 @@ if XRELIB_FLAG
AM_LDFLAGS = $(GLIB_LDFLAGS) $(GLIB_LIBS) \
$(G_THREAD_LIBS) -lyajl $(SOUP_LIBS) \
$(NEXUS_LIB) -ldbus-1 \
- -lIARMBus -lrdkloggers\
- -lds -ldshalcli -ltr69ProfileXcaliber -lrbus
+ -lIARMBus -lrdkloggers \
+ -ltr69ProfileXcaliber -lrbus
else
AM_LDFLAGS = $(GLIB_LDFLAGS) $(GLIB_LIBS) \
$(G_THREAD_LIBS) -lyajl $(SOUP_LIBS) \
$(NEXUS_LIB) -ldbus-1 \
- -lIARMBus -lrdkloggers\ -lrbus
- -lds -ldshalcli
+ -lIARMBus -lrdkloggers -lrbus
+endif
+
+if WITH_THUNDER_CLIENT
+else
+AM_LDFLAGS += -lds -ldshalcli
endif
if POWERCONTROLLER_ENABLE
diff --git a/src/configure.ac b/src/configure.ac
index 5a4d58d68..42a904c7c 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -70,6 +70,7 @@ AC_SUBST(T2_EVENT_FLAG)
hostif/profiles/Time/gtest/Makefile
hostif/profiles/DeviceInfo/gtest/Makefile
hostif/handlers/src/gtest/Makefile
+ hostif/profiles/STBService/gtest/Makefile
])
# Generate the configure script
diff --git a/src/hostif/handlers/Makefile.am b/src/hostif/handlers/Makefile.am
index 19f5ecd69..98f324ded 100644
--- a/src/hostif/handlers/Makefile.am
+++ b/src/hostif/handlers/Makefile.am
@@ -41,8 +41,6 @@ AM_CXXFLAGS = -I$(top_srcdir)/src/hostif/include \
$(WIFI_PROFILE_FLAG) $(XRDK_SDCARD_PROFILE_FLAG) $(XRDK_EMMC_PROFILE_FLAG) \
-I=/usr/include/rdk/iarmbus/ \
-I=/usr/include/rdk/iarmmgrs/sysmgr/ \
- -I=/usr/include/rdk/ds/ \
- -I=/usr/include/rdk/ds-hal/ \
-I$(PKG_CONFIG_SYSROOT_DIR)/usr/include/rbus/ \
-I=/usr/include/libsoup-3.0/
@@ -74,7 +72,16 @@ AM_CXXFLAGS += -DBTMGR_ENABLE_IARM_INTERFACE
AM_CXXFLAGS += -I$(top_srcdir)/src/hostif/profiles/DeviceInfo
endif
-AM_LDFLAGS = $(GLIB_LIBS) $(G_THREAD_LIBS) $(SOUP_LIBS) $(PROCPS_LIBS) -lIARMBus -lyajl -lds -ldshalcli -ldbus-1 -lsoup-3.0 -lgobject-2.0 -lsecure_wrapper
+AM_LDFLAGS = $(GLIB_LIBS) $(G_THREAD_LIBS) $(SOUP_LIBS) $(PROCPS_LIBS) -lIARMBus -lyajl -ldbus-1 -lsoup-3.0 -lgobject-2.0 -lsecure_wrapper
+
+if !WITH_THUNDER_CLIENT
+AM_CXXFLAGS += -I=/usr/include/rdk/ds/ \
+ -I=/usr/include/rdk/ds-hal/
+AM_LDFLAGS += -lds -ldshalcli
+endif
+if WITH_THUNDER_CLIENT
+AM_CXXFLAGS += -DUSE_THUNDER_CLIENT
+endif
if WIFI_CLIENT_ROAMING
AM_CXXFLAGS += -DWIFI_CLIENT_ROAMING
endif
diff --git a/src/hostif/handlers/src/gtest/Makefile.am b/src/hostif/handlers/src/gtest/Makefile.am
index 279fb4966..d1ff02945 100644
--- a/src/hostif/handlers/src/gtest/Makefile.am
+++ b/src/hostif/handlers/src/gtest/Makefile.am
@@ -23,7 +23,7 @@ bin_PROGRAMS = handlers_gtest
# Define the include directories
-COMMON_CPPFLAGS = -std=c++11 -DGTEST_ENABLE -DYOCTO_BUILD -DUSE_DEV_PROPERTIES_CONF -DUSE_REMOTE_DEBUGGER -I/usr/include -I/usr/include/cjson -I$(TOP_DIR)/src/hostif/include -I$(TOP_DIR)/src/hostif/profiles/DeviceInfo -I$(TOP_DIR)/src/unittest/stubs -I$(TOP_DIR)/src/unittest/stubs/ds -I$(TOP_DIR)/src/unittest/stubs/rbus/include -I$(TOP_DIR)/src/hostif/handlers/include -I$(TOP_DIR)/src/hostif/parodusClient/pal -I$(TOP_DIR)/src/hostif/parodusClient/waldb -I$(TOP_DIR)/src/hostif/httpserver/include -I$(TOP_DIR)/src/hostif/handlers/src -I/usr/include/rbus -I/usr/local/include/rbus -Isrc/unittest/stubs/rbus/include/ -I$(TOP_DIR)/src/hostif/profiles/Time -I$(TOP_DIR)/src/hostif/profiles/Device -I$(TOP_DIR)/src/hostif/profiles/IP -I$(TOP_DIR)/src/hostif/profiles/STBService -I/usr/rdk-halif-device_settings/include/ -I/usr/rdkvhal-devicesettings-raspberrypi4/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I$(TOP_DIR)/src/hostif/profiles/Ethernet -I/usr/remote_debugger/src/ -I/usr/local/include/libparodus/ -I/usr/local/include/wrp-c/ -I$(TOP_DIR)/src/hostif/parodusClient/startParodus/ -I$(TOP_DIR)/src/hostif/profiles/DHCPv4 -I/usr/include/libsoup-3.0
+COMMON_CPPFLAGS = -std=c++11 -DGTEST_ENABLE -DYOCTO_BUILD -DUSE_DEV_PROPERTIES_CONF -DUSE_REMOTE_DEBUGGER -DUSE_THUNDER_CLIENT -I/usr/include -I/usr/include/cjson -I$(TOP_DIR)/src/hostif/include -I$(TOP_DIR)/src/hostif/profiles/DeviceInfo -I$(TOP_DIR)/src/unittest/stubs -I$(TOP_DIR)/src/unittest/stubs/rbus/include -I$(TOP_DIR)/src/hostif/handlers/include -I$(TOP_DIR)/src/hostif/parodusClient/pal -I$(TOP_DIR)/src/hostif/parodusClient/waldb -I$(TOP_DIR)/src/hostif/httpserver/include -I$(TOP_DIR)/src/hostif/handlers/src -I/usr/include/rbus -I/usr/local/include/rbus -Isrc/unittest/stubs/rbus/include/ -I$(TOP_DIR)/src/hostif/profiles/Time -I$(TOP_DIR)/src/hostif/profiles/Device -I$(TOP_DIR)/src/hostif/profiles/IP -I$(TOP_DIR)/src/hostif/profiles/STBService -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I$(TOP_DIR)/src/hostif/profiles/Ethernet -I/usr/remote_debugger/src/ -I/usr/local/include/libparodus/ -I/usr/local/include/wrp-c/ -I$(TOP_DIR)/src/hostif/parodusClient/startParodus/ -I$(TOP_DIR)/src/hostif/profiles/DHCPv4 -I/usr/include/libsoup-3.0
# Define the libraries to link against
COMMON_LDADD = -lgtest -lgtest_main -lgmock_main -lgmock -lgcov $(GLIB_LIBS) -ltinyxml2 -lcjson -lcurl -lglib-2.0 -llibparodus -lwrp-c -lnanomsg -lmsgpackc -ltrower-base64 -lcimplog -lsoup-3.0
@@ -31,7 +31,7 @@ COMMON_LDADD = -lgtest -lgtest_main -lgmock_main -lgmock -lgcov $(GLIB_LIBS) -l
# Define the compiler flags
COMMON_CXXFLAGS = -frtti $(GLIB_CFLAGS) -fprofile-arcs -ftest-coverage
-handlers_gtest_SOURCES = handlers_test.cpp $(TOP_DIR)/src/hostif/parodusClient/startParodus/startParodus.cpp $(TOP_DIR)/src/hostif/src/hostIf_utils.cpp $(TOP_DIR)/src/hostif/src/IniFile.cpp $(TOP_DIR)/src/unittest/stubs/secure_wrapper.c $(TOP_DIR)/src/hostif/profiles/DeviceInfo/XrdkCentralComRFCStore.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/XrdkCentralComRFC.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/XrdkCentralComBSStore.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/XrdkCentralComBSStoreJournal.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/Device_DeviceInfo.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_NotificationHandler.cpp $(TOP_DIR)/src/hostif/parodusClient/pal/webpa_notification.cpp $(TOP_DIR)/src/hostif/parodusClient/pal/webpa_attribute.cpp $(TOP_DIR)/src/hostif/parodusClient/pal/webpa_parameter.cpp $(TOP_DIR)/src/hostif/parodusClient/pal/libpd.cpp $(TOP_DIR)/src/hostif/parodusClient/pal/webpa_adapter.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_msgHandler.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_XrdkCentralT2_ReqHandler.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_IPClient_ReqHandler.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_DeviceClient_ReqHandler.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/Device_DeviceInfo_ProcessStatus_Process.cpp $(TOP_DIR)/src/hostif/profiles/Ethernet/Device_Ethernet_Interface.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_DisplayDevice.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_EthernetClient_ReqHandler.cpp $(TOP_DIR)/src/hostif/profiles/Ethernet/Device_Ethernet_Interface_Stats.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_TimeClient_ReqHandler.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP_Interface.cpp $(TOP_DIR)/src/hostif/profiles/Time/Device_Time.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_updateHandler.cpp $(TOP_DIR)/src/hostif/profiles/Device/x_rdk_profile.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_dsClient_ReqHandler.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_rbus_Dml_Provider.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Capabilities.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_SPDIF.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_VideoDecoder.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_AudioOutput.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_HDMI.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_VideoOutput.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP_Interface_Stats.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP_ActivePort.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP_Diagnostics_IPPing.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP_Interface_IPv4Address.cpp $(TOP_DIR)/src/hostif/handlers/src/x_rdk_req_handler.cpp $(TOP_DIR)/src/unittest/stubs/dm_stubs.cpp $(TOP_DIR)/src/hostif/parodusClient/waldb/waldb.cpp $(TOP_DIR)/src/unittest/stubs/wdmp-c.c $(TOP_DIR)/src/unittest/stubs/wdmp_internal.c $(TOP_DIR)/src/hostif/httpserver/src/http_server.cpp $(TOP_DIR)/src/hostif/httpserver/src/request_handler.cpp $(TOP_DIR)/src/hostif/httpserver/src/XrdkCentralComRFCVar.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/Device_DeviceInfo_Processor.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/Device_DeviceInfo_ProcessStatus.cpp $(TOP_DIR)/src/unittest/stubs/ds/libprocps.cpp $(TOP_DIR)/src/unittest/stubs/file_writer.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_DHCPv4Client_ReqHandler.cpp $(TOP_DIR)/src/hostif/profiles/DHCPv4/Device_DHCPv4_Client.cpp
+handlers_gtest_SOURCES = handlers_test.cpp $(TOP_DIR)/src/hostif/parodusClient/startParodus/startParodus.cpp $(TOP_DIR)/src/hostif/src/hostIf_utils.cpp $(TOP_DIR)/src/hostif/src/IniFile.cpp $(TOP_DIR)/src/unittest/stubs/secure_wrapper.c $(TOP_DIR)/src/hostif/profiles/DeviceInfo/XrdkCentralComRFCStore.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/XrdkCentralComRFC.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/XrdkCentralComBSStore.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/XrdkCentralComBSStoreJournal.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/Device_DeviceInfo.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_NotificationHandler.cpp $(TOP_DIR)/src/hostif/parodusClient/pal/webpa_notification.cpp $(TOP_DIR)/src/hostif/parodusClient/pal/webpa_attribute.cpp $(TOP_DIR)/src/hostif/parodusClient/pal/webpa_parameter.cpp $(TOP_DIR)/src/hostif/parodusClient/pal/libpd.cpp $(TOP_DIR)/src/hostif/parodusClient/pal/webpa_adapter.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_msgHandler.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_XrdkCentralT2_ReqHandler.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_IPClient_ReqHandler.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_DeviceClient_ReqHandler.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/Device_DeviceInfo_ProcessStatus_Process.cpp $(TOP_DIR)/src/hostif/profiles/Ethernet/Device_Ethernet_Interface.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_DisplayDevice_Thunder.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_HDMI_Thunder.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_EthernetClient_ReqHandler.cpp $(TOP_DIR)/src/hostif/profiles/Ethernet/Device_Ethernet_Interface_Stats.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_TimeClient_ReqHandler.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP_Interface.cpp $(TOP_DIR)/src/hostif/profiles/Time/Device_Time.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_updateHandler.cpp $(TOP_DIR)/src/hostif/profiles/Device/x_rdk_profile.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_dsClient_ReqHandler.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_rbus_Dml_Provider.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Capabilities_Thunder.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_SPDIF_Thunder.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_VideoDecoder_Thunder.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_AudioOutput_Thunder.cpp $(TOP_DIR)/src/hostif/profiles/STBService/Components_VideoOutput_Thunder.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP_Interface_Stats.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP_ActivePort.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP_Diagnostics_IPPing.cpp $(TOP_DIR)/src/hostif/profiles/IP/Device_IP_Interface_IPv4Address.cpp $(TOP_DIR)/src/hostif/handlers/src/x_rdk_req_handler.cpp $(TOP_DIR)/src/unittest/stubs/dm_stubs.cpp $(TOP_DIR)/src/hostif/parodusClient/waldb/waldb.cpp $(TOP_DIR)/src/unittest/stubs/wdmp-c.c $(TOP_DIR)/src/unittest/stubs/wdmp_internal.c $(TOP_DIR)/src/hostif/httpserver/src/http_server.cpp $(TOP_DIR)/src/hostif/httpserver/src/request_handler.cpp $(TOP_DIR)/src/hostif/httpserver/src/XrdkCentralComRFCVar.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/Device_DeviceInfo_Processor.cpp $(TOP_DIR)/src/hostif/profiles/DeviceInfo/Device_DeviceInfo_ProcessStatus.cpp $(TOP_DIR)/src/unittest/stubs/ds/libprocps.cpp $(TOP_DIR)/src/unittest/stubs/file_writer.cpp $(TOP_DIR)/src/hostif/handlers/src/hostIf_DHCPv4Client_ReqHandler.cpp $(TOP_DIR)/src/hostif/profiles/DHCPv4/Device_DHCPv4_Client.cpp
# Apply common properties to each program
handlers_gtest_CPPFLAGS = $(COMMON_CPPFLAGS)
diff --git a/src/hostif/handlers/src/hostIf_DeviceClient_ReqHandler.cpp b/src/hostif/handlers/src/hostIf_DeviceClient_ReqHandler.cpp
index 51104e4d6..ee84dab77 100644
--- a/src/hostif/handlers/src/hostIf_DeviceClient_ReqHandler.cpp
+++ b/src/hostif/handlers/src/hostIf_DeviceClient_ReqHandler.cpp
@@ -34,8 +34,6 @@
#include "hostIf_main.h"
#include "hostIf_DeviceClient_ReqHandler.h"
#include "hostIf_utils.h"
-#include "host.hpp"
-#include "dsError.h"
#include "libIBus.h"
#include "Device_DeviceInfo.h"
#include "Device_DeviceInfo_Processor.h"
diff --git a/src/hostif/handlers/src/hostIf_dsClient_ReqHandler.cpp b/src/hostif/handlers/src/hostIf_dsClient_ReqHandler.cpp
index b4321b7f2..4df4c7d0f 100644
--- a/src/hostif/handlers/src/hostIf_dsClient_ReqHandler.cpp
+++ b/src/hostif/handlers/src/hostIf_dsClient_ReqHandler.cpp
@@ -47,9 +47,11 @@
#include "Components_VideoOutput.h"
#include "Components_VideoDecoder.h"
#include "hostIf_utils.h"
+#ifndef USE_THUNDER_CLIENT
#include "host.hpp"
#include "manager.hpp"
#include "dsError.h"
+#endif /* USE_THUNDER_CLIENT */
#include "libIBus.h"
#define CAPABILTIES_OBJ "Device.Services.STBService.1.Capabilities."
@@ -79,6 +81,12 @@ bool DSClientReqHandler::init()
{
RDK_LOG(RDK_LOG_TRACE1,LOG_TR69HOSTIF,"[%s:%s] Entering..\n", __FUNCTION__, __FILE__);
RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,"[%s()] Device manager Initializing\n", __FUNCTION__);
+#ifdef USE_THUNDER_CLIENT
+ RDK_LOG(RDK_LOG_INFO,LOG_TR69HOSTIF,"[%s()] STBService interface: Thunder (WPEFramework)\n", __FUNCTION__);
+#else
+ RDK_LOG(RDK_LOG_INFO,LOG_TR69HOSTIF,"[%s()] STBService interface: IARM/libds\n", __FUNCTION__);
+#endif
+#ifndef USE_THUNDER_CLIENT
while(true)
{
try
@@ -94,6 +102,7 @@ bool DSClientReqHandler::init()
RDK_LOG(RDK_LOG_INFO,LOG_TR69HOSTIF,"[%s()] Device manager Initialized success break loop \n", __FUNCTION__);
break;
}
+#endif /* USE_THUNDER_CLIENT */
RDK_LOG(RDK_LOG_INFO,LOG_TR69HOSTIF,"[%s:%s] Exiting..\n", __FUNCTION__, __FILE__);
return true;
}
@@ -118,7 +127,9 @@ bool DSClientReqHandler::unInit()
hostIf_STBServiceVideoDecoder::closeAllInstances();
hostIf_STBServiceAudioInterface::closeAllInstances();
hostIf_STBServiceSPDIF::closeAllInstances();
+#ifndef USE_THUNDER_CLIENT
device::Manager::DeInitialize();
+#endif /* USE_THUNDER_CLIENT */
RDK_LOG(RDK_LOG_TRACE1,LOG_TR69HOSTIF,"[%s:%s] Exiting..\n", __FUNCTION__, __FILE__);
return true;
}
diff --git a/src/hostif/handlers/src/hostIf_rbus_Dml_Provider.cpp b/src/hostif/handlers/src/hostIf_rbus_Dml_Provider.cpp
index 26a3f0d36..660e1ba2b 100644
--- a/src/hostif/handlers/src/hostIf_rbus_Dml_Provider.cpp
+++ b/src/hostif/handlers/src/hostIf_rbus_Dml_Provider.cpp
@@ -49,8 +49,7 @@ extern "C"
#include "hostIf_msgHandler.h"
#include "waldb.h"
//#include "rbus.h"
-#include "exception.hpp"
-#include "illegalArgumentException.hpp"
+
#define MAX_NUM_PARAMETERS 2048
diff --git a/src/hostif/include/hostIf_utils.h b/src/hostif/include/hostIf_utils.h
index 5420c96c1..e48284f1b 100755
--- a/src/hostif/include/hostIf_utils.h
+++ b/src/hostif/include/hostIf_utils.h
@@ -284,6 +284,13 @@ bool invokeThunderPluginMethodAndExtractDelimitedStringArrayField(const std::str
bool invokeThunderPluginMethodAndExtractScalarStringResult(const std::string& method,
const std::string& paramsJson, std::string& value);
+/**
+ * Invoke a Thunder JSON-RPC method and extract the top-level "result" field as a plain bool.
+ * Use this when the response shape is {"result": true} rather than {"result": {"field": true}}.
+ */
+bool invokeThunderPluginMethodAndExtractScalarBoolResult(const std::string& method,
+ const std::string& paramsJson, bool& value);
+
#endif /* HOSTIF_UTILS_H_*/
diff --git a/src/hostif/parodusClient/pal/mock-parodus/Makefile.am b/src/hostif/parodusClient/pal/mock-parodus/Makefile.am
index 1e789bd95..018d3ea0a 100644
--- a/src/hostif/parodusClient/pal/mock-parodus/Makefile.am
+++ b/src/hostif/parodusClient/pal/mock-parodus/Makefile.am
@@ -71,5 +71,5 @@ parodus_SOURCES = \
parodus_CPPFLAGS = -I../ -I../../../../unittest/stubs/ -I/usr/local/include/wrp-c/ -I../../waldb/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/local/include/wdmp-c/ -I/usr/local/include/rbus -I../../../include/ -I../../../../unittest/stubs/ -I../../../handlers/src/ -I/usr/local/include/cjson/ -I/usr/local/include/libparodus/ -I./ -I../../waldb/ -I../../../handlers/include/ -I../../../profiles/Time/ -I../../../profiles/DeviceInfo/ -I../../../profiles/Device -I../../../handlers/include/ -I../../../../unittest/stubs/ds -I../../../profiles/Ethernet/ -I../../../include/ -I../../../profiles/IP/ -I../../../profiles/STBService/ -I/usr/rdk-halif-device_settings/include/ -I/usr/rdkvhal-devicesettings-raspberrypi4/ -DUSE_REMOTE_DEBUGGER -I/usr/remote_debugger/src/
-parodus_LDADD = -llibparodus -lrdkloggers -lwdmp-c -lwrp-c -lmsgpackc -lprocps -ltrower-base64 -lcimplog -lsoup-3.0 -lcjson -lpthread -lglib-2.0 -lnanomsg -lrbus -lIARMBus -lyajl -lds -ldshalcli -ldbus-1 -lsecure_wrapper -lcurl -L../../waldb/.libs/ -l:libwaldb.a -L../../../profiles/Time/.libs/ -l:libhostIfTime.a -ltinyxml2 -lIARMBus
+parodus_LDADD = -llibparodus -lrdkloggers -lwdmp-c -lwrp-c -lmsgpackc -lprocps -ltrower-base64 -lcimplog -lsoup-3.0 -lcjson -lpthread -lglib-2.0 -lnanomsg -lrbus -lIARMBus -lyajl -ldbus-1 -lsecure_wrapper -lcurl -L../../waldb/.libs/ -l:libwaldb.a -L../../../profiles/Time/.libs/ -l:libhostIfTime.a -ltinyxml2 -lIARMBus
diff --git a/src/hostif/parodusClient/waldb/data-model/data-model-generic.xml b/src/hostif/parodusClient/waldb/data-model/data-model-generic.xml
index 76c4e9202..ade87bbc7 100644
--- a/src/hostif/parodusClient/waldb/data-model/data-model-generic.xml
+++ b/src/hostif/parodusClient/waldb/data-model/data-model-generic.xml
@@ -2012,11 +2012,6 @@