diff --git a/configure.ac b/configure.ac index 89ac78b9..5db15087 100644 --- a/configure.ac +++ b/configure.ac @@ -174,6 +174,22 @@ AC_ARG_ENABLE([rdkb], AM_CONDITIONAL([ENABLE_RDKB], [test x$ENABLE_RDKB = xtrue]) AC_SUBST(RDKB_FLAG) +AC_ARG_ENABLE([rdkbextender], + AS_HELP_STRING([--enable-rdkbextender],[enable rdkbextender (default is no)]), + [ + case "${enableval}" in + yes) ENABLE_RDKBEXTENDER=true + RDKBEXTENDER_FLAG=" -DRDKB_EXTENDER_SUPPORT ";; + no) ENABLE_RDKBEXTENDER=false + AC_MSG_ERROR([RDKBEXTENDER is disabled]) ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-rdkbextender]) ;; + esac + ], + [echo "rdkbextender is disabled"]) + +AM_CONDITIONAL([ENABLE_RDKBEXTENDER], [test x$ENABLE_RDKBEXTENDER = xtrue]) +AC_SUBST(RDKBEXTENDER_FLAG) + # Check for breakpad BREAKPAD_CFLAGS=" " BREAKPAD_LFLAGS=" " diff --git a/rfcMgr/Makefile.am b/rfcMgr/Makefile.am index 3f91c625..2d6186bb 100644 --- a/rfcMgr/Makefile.am +++ b/rfcMgr/Makefile.am @@ -31,12 +31,16 @@ AM_LDFLAGS += -lIARMBus endif if ENABLE_RDKB -rfcMgr_CPPFLAGS += $(RDKB_FLAG) $(rbus_CFLAGS) +rfcMgr_CPPFLAGS += $(RDKB_FLAG) $(rbus_CFLAGS) $(RDKBEXTENDER_FLAG) AM_LDFLAGS += -lrbus else AM_LDFLAGS += ../rfcapi/.libs/librfcapi.la endif +if ENABLE_RDKBEXTENDER +rfcMgr_CPPFLAGS += $(RDKBEXTENDER_FLAG) +endif + if IS_LIBRDKCERTSEL_ENABLED rfcMgr_CPPFLAGS += $(LIBRDKCERTSEL_FLAG) rfcMgr_CFLAGS = $(LIBRDKCERTSEL_FLAG) diff --git a/rfcMgr/rfc_xconf_handler.cpp b/rfcMgr/rfc_xconf_handler.cpp index 2fe87222..015fb9c4 100644 --- a/rfcMgr/rfc_xconf_handler.cpp +++ b/rfcMgr/rfc_xconf_handler.cpp @@ -87,8 +87,8 @@ int RuntimeFeatureControlProcessor:: InitializeRuntimeFeatureControlProcessor(vo RDK_LOG(RDK_LOG_ERROR, LOG_RFCMGR, "[%s][%d] Xconf Initialization Failed for Experience\n", __FUNCTION__, __LINE__); return FAILURE; } - - /* last Firmware Version */ + + /* last Firmware Version */ if(SUCCESS != GetLastProcessedFirmware(RFC_LAST_VERSION)) { RDK_LOG(RDK_LOG_ERROR, LOG_RFCMGR, "[%s][%d] Xconf Initialization Failed for Last firmware\n", __FUNCTION__, __LINE__); @@ -96,6 +96,10 @@ int RuntimeFeatureControlProcessor:: InitializeRuntimeFeatureControlProcessor(vo GetAccountID(); GetOsClass(); +#if defined(RDKB_EXTENDER_SUPPORT) + GetExtenderMacAddress(); + GetSerialNumber(); +#endif #if !defined(RDKB_SUPPORT) _is_first_request = IsNewFirmwareFirstRequest(); @@ -925,6 +929,49 @@ void RuntimeFeatureControlProcessor::GetOsClass( void ) RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "GetOsClass: Exit\n"); } + +void RuntimeFeatureControlProcessor::GetSerialNumber(void) +{ + char serialBuf[256] = {0}; + FILE *fp = v_secure_popen("r", "/usr/sbin/deviceinfo.sh -sn"); + if (!fp) { + RDK_LOG(RDK_LOG_ERROR, LOG_RFCMGR, "GetSerialNumber: Failed to run deviceinfo.sh\n"); + return; + } + + if (fgets(serialBuf, sizeof(serialBuf), fp) != NULL) { + // Remove carriage return and newline characters + serialBuf[strcspn(serialBuf, "\r\n")] = 0; + _serialNumber = serialBuf; + RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "GetSerialNumber: Serial Number = %s\n", _serialNumber.c_str()); + } else { + RDK_LOG(RDK_LOG_ERROR, LOG_RFCMGR, "GetSerialNumber: Failed to read serial number\n"); + } + + v_secure_pclose(fp); +} + +void RuntimeFeatureControlProcessor::GetExtenderMacAddress(void) +{ + char macBuf[32] = {0}; + FILE *fp = v_secure_popen("r", "cat /sys/class/net/eth0/address | tr '[a-f]' '[A-F]'"); + if (!fp) { + RDK_LOG(RDK_LOG_ERROR, LOG_RFCMGR, "GetExtenderMacAddress: Failed to read MAC address\n"); + return; + } + + if (fgets(macBuf, sizeof(macBuf), fp) != NULL) { + // Remove carriage return and newline characters + macBuf[strcspn(macBuf, "\r\n")] = 0; + _extendermacAddress = macBuf; + RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "GetExtenderMacAddress: MAC Address = %s\n", _extendermacAddress.c_str()); + } else { + RDK_LOG(RDK_LOG_ERROR, LOG_RFCMGR, "GetExtenderMacAddress: Failed to read MAC address\n"); + } + + v_secure_pclose(fp); +} + int RuntimeFeatureControlProcessor::GetExperience( void ) { char tempbuf[1024] = {0}; @@ -1631,11 +1678,16 @@ std::stringstream RuntimeFeatureControlProcessor::CreateXconfHTTPUrl() std::stringstream url; url << _xconf_server_url << "?"; url << "estbMacAddress=" << _estb_mac_address << "&"; +#if defined(RDKB_EXTENDER_SUPPORT) + url << "estbMacAddress=" << _extendermacAddress << "&"; +#endif url << "firmwareVersion=" << _firmware_version << "&"; url << "env=" << _build_type_str << "&"; url << "model=" << _model_number << "&"; #if defined(RDKB_SUPPORT) url << "ecmMacAddress=" << _ecm_mac_address << "&"; +#elif defined(RDKB_EXTENDER_SUPPORT) + url << "ecmMacAddress=" << _extendermacAddress << "&"; #else url << "manufacturer=" << _manufacturer << "&"; #endif @@ -1647,6 +1699,10 @@ std::stringstream RuntimeFeatureControlProcessor::CreateXconfHTTPUrl() url << "osClass=" << _osclass << "&"; #endif url << "accountId=" << _accountId << "&"; +#if defined(RDKB_EXTENDER_SUPPORT) + url << "accountMgmt=" << "xpc" << "&"; + url << "serialNum=" << _serialNumber << "&"; +#endif #if defined(RDKB_SUPPORT) url << "experience=" << _experience << "&"; #else @@ -1659,11 +1715,16 @@ std::stringstream RuntimeFeatureControlProcessor::CreateXconfHTTPUrl() encodedUrl << _xconf_server_url << "?"; EncodeString("estbMacAddress=", _estb_mac_address, encodedUrl, "&"); +#if defined(RDKB_EXTENDER_SUPPORT) + EncodeString("estbMacAddress=", _extendermacAddress, encodedUrl, "&"); +#endif EncodeString("firmwareVersion=", _firmware_version, encodedUrl, "&"); EncodeString("env=", _build_type_str, encodedUrl, "&"); EncodeString("model=", _model_number, encodedUrl, "&"); #if defined(RDKB_SUPPORT) EncodeString("ecmMacAddress=", _ecm_mac_address, encodedUrl, "&"); +#elif defined(RDKB_EXTENDER_SUPPORT) + EncodeString("ecmMacAddress=", _extendermacAddress, encodedUrl, "&"); #else EncodeString("manufacturer=", _manufacturer, encodedUrl, "&"); #endif @@ -1677,6 +1738,10 @@ std::stringstream RuntimeFeatureControlProcessor::CreateXconfHTTPUrl() EncodeString("osClass=", _osclass, encodedUrl, "&"); #endif EncodeString("accountId=", _accountId, encodedUrl, "&"); +#if defined(RDKB_EXTENDER_SUPPORT) + EncodeString("accountMgmt=", "xpc", encodedUrl, "&"); + EncodeString("serialNum=", _serialNumber, encodedUrl, "&"); +#endif #if !defined(RDKB_SUPPORT) EncodeString("Experience=", _experience, encodedUrl, "&"); #else diff --git a/rfcMgr/rfc_xconf_handler.h b/rfcMgr/rfc_xconf_handler.h index 8289fcc8..8ca38571 100644 --- a/rfcMgr/rfc_xconf_handler.h +++ b/rfcMgr/rfc_xconf_handler.h @@ -129,6 +129,9 @@ class RuntimeFeatureControlProcessor : public xconf::XconfHandler std::string stashAccountId; std::string _partnerId; /* Device Partner ID */ std::string _bkPartnerId; /* Device Partner ID */ + std::string _accountMgmt; + std::string _serialNumber; + std::string _extendermacAddress; std::string _experience; std::string _osclass; bool isRebootRequired; @@ -145,6 +148,8 @@ class RuntimeFeatureControlProcessor : public xconf::XconfHandler void GetRFCPartnerID(); bool isMaintenanceEnabled(); void GetOsClass( void ); + void GetSerialNumber( void ); + void GetExtenderMacAddress( void ); int GetExperience( void ); int GetServURL(const char *rfcPropertiesFile); int GetBootstrapXconfUrl(std ::string &XconfUrl);