25 #include <curl/curl.h>
27 #include "XrdkCentralComBSStore.h"
28 #include "hostIf_utils.h"
31 #include <sys/types.h>
32 #define BS_STORE_KEY "BS_STORE_FILENAME"
33 #define BS_JOURNAL_KEY "BS_JOURNAL_FILENAME"
34 #define RFC_PROPERTIES_FILE "/etc/rfc.properties"
35 #define BS_JSON_FILE "/etc/partners_defaults.json"
36 #define BS_JSON_DEVICE_FILE "/etc/partners_defaults_device.json"
37 #define TR181_PARTNER_ID_KEY "Device.DeviceInfo.X_RDKCENTRAL-COM_Syndication.PartnerId"
38 #define BS_CLEAR_DB_START "Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Bootstrap.Control.ClearDB"
39 #define BS_CLEAR_DB_END "Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Bootstrap.Control.ClearDBEnd"
40 #define RFC_SERVICE_LOCK "/tmp/.rfcServiceLock"
42 #define CURL_EASY_SETOPT(CURL , CURLoption , Value)\
43 if (curl_easy_setopt(CURL , CURLoption , Value) != CURLE_OK ) {\
44 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: curl_easy_setopt setopt failed ...\n", __FUNCTION__);\
49 XBSStore* XBSStore::xbsInstance = NULL;
51 recursive_mutex XBSStore::mtx;
52 thread XBSStore::partnerIdThread;
53 bool XBSStore::m_stopped =
false;
54 mutex XBSStore::mtx_stopped;
55 condition_variable XBSStore::cv;
56 mutex XBSStore::g_instance_mutex;
58 size_t static writeCurlResponse(
void *ptr,
size_t size,
size_t nmemb,
string stream)
60 size_t realsize = size * nmemb;
61 string temp(
static_cast<const char*
>(ptr), realsize);
65 void XBSStore::getAuthServicePartnerID()
67 bool partnerIdChanged =
false;
68 auto sec = chrono::seconds(1);
72 if ( partnerIdChanged )
74 ifstream f(RFC_SERVICE_LOCK);
77 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: RFC service in progress. Retry after 30 sec\n", __FUNCTION__);
78 unique_lock<mutex> lck(mtx_stopped);
79 cv.wait_for(lck, 30*sec, [] {
return m_stopped;});
85 WDMP_STATUS status = setRFCParameter(
"tr69hostif",
"Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Control.ConfigSetHash",
"INVALIDATE", WDMP_STRING);
86 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: RFC SET to Invalidate Hash status = %d \n", __FUNCTION__, status);
88 status = setRFCParameter(
"tr69hostif",
"Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Control.RetrieveNow",
"1", WDMP_UINT);
89 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: RFC SET to retrieveNow status = %d \n", __FUNCTION__, status);
94 string newPartnerId =
"";
99 CURL *curl = curl_easy_init();
102 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: call curl to get partner ID..\n", __FUNCTION__);
105 RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: Thunder security token is empty..\n", __FUNCTION__);
107 tokenheader =
"Authorization: Bearer " + sToken;
109 postData =
"{\"jsonrpc\":\"2.0\",\"id\":\"3\",\"method\": \"org.rdk.AuthService.getDeviceId\" }";
111 struct curl_slist *list = NULL;
113 list = curl_slist_append(list, tokenheader.c_str());
114 list = curl_slist_append(list,
"Content-Type: application/json");
116 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
117 curl_easy_setopt(curl, CURLOPT_POST, 1L);
118 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData.c_str());
119 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCurlResponse);
120 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
121 curl_easy_setopt(curl, CURLOPT_URL, JSONRPC_URL);
123 CURLcode res = curl_easy_perform(curl);
125 curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);
126 RDK_LOG(RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: curl response : %d http response code: %ld\n", __FUNCTION__, res, http_code);
127 curl_easy_cleanup(curl);
128 curl_slist_free_all(list);
132 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: curl response string = %s\n", __FUNCTION__, response.c_str());
133 cJSON* root = cJSON_Parse(response.c_str());
136 cJSON* jsonObj = cJSON_GetObjectItem(root,
"result");
139 cJSON* partnerID = cJSON_GetObjectItem(jsonObj,
"partnerId");
140 if(partnerID && partnerID->type == cJSON_String && partnerID->valuestring && strlen(partnerID->valuestring) > 0)
142 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"Found partnerID value = %s\n", partnerID->valuestring);
143 newPartnerId = partnerID->valuestring;
147 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"[%s] json parse error, no \"partnerId\" in the output from Thunder plugin\n", __FUNCTION__);
154 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"[%s] json parse error, no \"result\" in the output from Thunder plugin\n", __FUNCTION__);
163 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: json parse error\n", __FUNCTION__);
169 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: curl init failed\n", __FUNCTION__);
171 if(newPartnerId.length() > 0)
173 string storedPartnerId = xbsInstance->getRawValue(TR181_PARTNER_ID_KEY);
174 if (newPartnerId.compare(storedPartnerId) != 0)
176 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"partnerId has changed\n");
177 partnerIdChanged =
true;
179 xbsInstance->resetCacheAndStore();
180 xbsInstance->setRawValue(TR181_PARTNER_ID_KEY, newPartnerId.c_str(), HOSTIF_SRC_DEFAULT);
181 xbsInstance->m_initDone =
false;
190 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: partnerId not found. Retry after 30 sec\n", __FUNCTION__);
191 unique_lock<mutex> lck(mtx_stopped);
192 cv.wait_for(lck, 30*sec, [] {
return m_stopped;});
197 void XBSStore::resetCacheAndStore()
200 if (!m_filename.empty())
202 if(remove(m_filename.c_str()) != 0)
204 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: Error occured ,File is not removed.\n", __FUNCTION__);
207 xbsJournalInstance->resetCacheAndStore();
212 bool XBSStore::getPartnerDeviceConfig(cJSON* partnerConfig,
const string & partnerId)
214 ifstream ifs_json_device(BS_JSON_DEVICE_FILE);
215 if(!ifs_json_device.is_open())
217 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: Device specific file [%s] does not exist\n", __FUNCTION__, BS_JSON_DEVICE_FILE);
221 ifs_json_device.seekg(0, std::ios::end);
222 size_t size = ifs_json_device.tellg();
223 string buffer_device(size,
' ');
224 ifs_json_device.seekg(0);
225 ifs_json_device.read(&buffer_device[0], size);
226 const char *jsonTextDevice = buffer_device.c_str();
228 cJSON *jsonDevice = cJSON_Parse(jsonTextDevice);
231 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: json parse error for device file \n", __FUNCTION__);
235 cJSON* partnerDeviceConfig = cJSON_GetObjectItem(jsonDevice, partnerId.c_str());
236 if (!partnerDeviceConfig)
238 RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: Unknown partner:%s, using default.\n", __FUNCTION__, partnerId.c_str() );
239 partnerDeviceConfig = cJSON_GetObjectItem(jsonDevice,
"default" );
241 if (!partnerDeviceConfig)
243 RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: Error for partner:%s, error = [%s]\n", __FUNCTION__, partnerId.c_str(), cJSON_GetErrorPtr());
248 cJSON *configDeviceObject = partnerDeviceConfig->child;
249 while( configDeviceObject )
251 char *configDeviceKey = configDeviceObject->string;
252 char *configDeviceValue = configDeviceObject->valuestring;
254 if (cJSON_GetObjectItem(partnerConfig, configDeviceKey)) {
255 RDK_LOG(RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: key %s exist in generic json...replace entry\n", __FUNCTION__, configDeviceKey );
256 cJSON_ReplaceItemInObject(partnerConfig, configDeviceKey, cJSON_CreateString(configDeviceValue));
260 RDK_LOG(RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: key %s does NOT exist generic json...add new entry\n", __FUNCTION__, configDeviceKey );
261 cJSON_AddItemToObject(partnerConfig, configDeviceKey, cJSON_CreateString(configDeviceValue));
263 configDeviceObject = configDeviceObject->next;
268 bool XBSStore::loadFromJson()
270 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Entering %s \n", __FUNCTION__);
272 string partnerId = getRawValue(TR181_PARTNER_ID_KEY);
274 if (partnerId.length() == 0)
276 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: waiting on partnerId..\n", __FUNCTION__);
280 ifstream ifs_json(BS_JSON_FILE);
281 ifs_json.seekg(0, std::ios::end);
282 size_t size = ifs_json.tellg();
283 string buffer(size,
' ');
285 ifs_json.read(&buffer[0], size);
286 const char *jsonText = buffer.c_str();
288 cJSON *json = cJSON_Parse(jsonText);
291 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: json parse error \n", __FUNCTION__);
295 cJSON* partnerConfig = cJSON_GetObjectItem(json, partnerId.c_str());
298 RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF,
"Unknown partner:%s, using default.\n", partnerId.c_str() );
299 partnerConfig = cJSON_GetObjectItem(json,
"default" );
303 RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF,
"Error for partner:%s, error = [%s]\n", partnerId.c_str(), cJSON_GetErrorPtr());
307 if(partnerConfig->type == cJSON_Object) {
308 if(!getPartnerDeviceConfig(partnerConfig, partnerId))
310 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: error reading partners_defaults_device.json \n", __FUNCTION__);
314 ifstream ifs_bsini(m_filename);
315 if (ifs_bsini.is_open()) {
316 RDK_LOG (RDK_LOG_DEBUG, LOG_TR69HOSTIF,
"%s: File [%s] exist. Look for any default parameter changes.\n", __FUNCTION__, m_filename.c_str());
321 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: Initial Update of Bootstrap stores\n", __FUNCTION__);
322 m_initialUpdate =
true;
323 xbsJournalInstance->setInitialUpdate(
true);
326 cJSON *configObject = partnerConfig->child;
329 bool removedEntries =
false;
330 for (unordered_map<string, string>::iterator it=m_dict.begin(); it!=m_dict.end();)
332 string key = it->first;
333 if (!cJSON_GetObjectItem(partnerConfig, key.c_str()) && key.compare(TR181_PARTNER_ID_KEY) != 0 && xbsJournalInstance->getJournalSource(key) == HOSTIF_SRC_DEFAULT)
335 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: Remove param %s from bootstrap store, size=%d\n", __FUNCTION__, key.c_str(), m_dict.size());
336 removedEntries =
true;
337 it = m_dict.erase(it);
338 xbsJournalInstance->removeRecord(key);
347 ofstream ofs(m_filename, ios::trunc | ios::out);
350 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"Failed to open : %s \n", m_filename.c_str());
353 for (unordered_map<string, string>::iterator it=m_dict.begin(); it!=m_dict.end(); ++it)
355 ofs << it->first <<
'=' << it->second << endl;
359 xbsJournalInstance->rfcUpdateEnd();
362 while( configObject )
364 char *configKey = configObject->string;
365 char *configValue = configObject->valuestring;
366 RDK_LOG(RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"bootstrap json parser: key=%s value=%s\n",configKey, configValue);
367 setRawValue(configKey, configValue, HOSTIF_SRC_DEFAULT);
368 configObject = configObject->next;
370 m_initialUpdate =
false;
371 xbsJournalInstance->setInitialUpdate(
false);
374 RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF,
"partnerConfig->type not of object type...");
379 string XBSStore::getRawValue(
const string &key)
381 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Entering %s \n", __FUNCTION__);
384 unordered_map<string,string>::const_iterator it = m_dict.find(key);
385 if (it == m_dict.end()) {
390 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Leaving %s : Value = %s \n", __FUNCTION__, it->second.c_str());
395 bool XBSStore::setRawValue(
const string &key,
const string &value,
HostIf_Source_Type_t sourceType)
397 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Entering %s \n", __FUNCTION__);
399 RDK_LOG (RDK_LOG_DEBUG, LOG_TR69HOSTIF,
" %s: m_initialUpdate=%d\n", __FUNCTION__, m_initialUpdate);
400 std::string outputDir=
"/opt/secure/RFC";
402 if(stat(outputDir.c_str(),&st) != 0)
404 mkdir(outputDir.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
408 ofstream ofs(m_filename, ios::out | ios::app);
412 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"Failed to open : %s \n", m_filename.c_str());
416 ofs << key <<
'=' << value << endl;
422 const string ¤tValue = getRawValue(key);
423 RDK_LOG (RDK_LOG_DEBUG, LOG_TR69HOSTIF,
"Given Value : %s ---- Current value : %s \n", value.c_str(), currentValue.c_str());
425 if(strlen(currentValue.c_str()) > 0)
427 if(!strcasecmp(currentValue.c_str(), value.c_str()))
429 RDK_LOG (RDK_LOG_DEBUG, LOG_TR69HOSTIF,
"Property value exists, don't have to overwrite\n");
430 if(sourceType != xbsJournalInstance->getJournalSource(key))
431 xbsJournalInstance->setJournalValue(key, value, sourceType);
437 if(sourceType == HOSTIF_SRC_DEFAULT &&
438 (xbsJournalInstance->getJournalSource(key) == HOSTIF_SRC_RFC || xbsJournalInstance->getJournalSource(key) == HOSTIF_SRC_WEBPA) )
440 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"Update firmware value in journal even though it is not active..\n");
441 xbsJournalInstance->setJournalValue(key, value, sourceType);
444 ofstream ofs(m_filename, ios::trunc | ios::out);
447 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"Failed to open : %s \n", m_filename.c_str());
452 for (unordered_map<string, string>::iterator it=m_dict.begin(); it!=m_dict.end(); ++it)
454 ofs << it->first <<
'=' << it->second << endl;
458 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"Bootstrap config update: %s, %s, %s, %d-%s \n", key.c_str(), value.c_str(), currentValue.c_str(), sourceType, xbsJournalInstance->getUpdatedSourceString(sourceType).c_str());
460 xbsJournalInstance->setJournalValue(key, value, sourceType);
462 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Leaving %s \n", __FUNCTION__);
468 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Entering %s \n", __FUNCTION__);
471 RDK_LOG(RDK_LOG_INFO, LOG_TR69HOSTIF,
"Init not complete...value may not be for latest partner ID\n");
473 string rawValue = getRawValue(stMsgData->
paramName);
474 if(rawValue.length() > 0)
476 putValue(stMsgData, rawValue.c_str());
481 RDK_LOG(RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s : Parameter Not Found in %s\n", stMsgData->
paramName, m_filename.c_str());
484 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Leaving %s\n", __FUNCTION__);
488 bool XBSStore::clearRfcValues()
490 ofstream ofs(m_filename, ios::trunc | ios::out);
493 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"Failed to open : %s \n", m_filename.c_str());
497 for (unordered_map<string, string>::iterator it=m_dict.begin(); it!=m_dict.end(); ++it)
499 string key = it->first;
500 string defaultValue =
"";
501 if(xbsJournalInstance->clearRfcAndGetDefaultValue(key, defaultValue))
503 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"%s: key=%s, defaultValue=%s\n", __FUNCTION__, key.c_str(), defaultValue.c_str());
504 m_dict[key] = defaultValue;
508 for (unordered_map<string, string>::iterator it=m_dict.begin(); it!=m_dict.end(); ++it)
510 ofs << it->first <<
'=' << it->second << endl;
519 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Entering %s \n", __FUNCTION__);
522 RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF,
"Init Failed, can't handle the request\n");
523 return fcInternalError;
526 if (strcasecmp(stMsgData->
paramName,BS_CLEAR_DB_START) == 0)
528 m_rfcUpdateInProgress =
true;
529 xbsJournalInstance->rfcUpdateStarted();
533 else if (strcasecmp(stMsgData->
paramName,BS_CLEAR_DB_END) == 0)
536 xbsJournalInstance->rfcUpdateEnd();
537 m_rfcUpdateInProgress =
false;
543 if (m_dict.find(stMsgData->
paramName) == m_dict.end())
545 RDK_LOG(RDK_LOG_INFO, LOG_TR69HOSTIF,
"Param does not exist in bootstrap store. Allowing override.\n");
548 const string &givenValue = getStringValue(stMsgData);
551 if(stMsgData->
requestor == HOSTIF_SRC_WEBPA)
553 sourceType = HOSTIF_SRC_WEBPA;
555 else if(stMsgData->
requestor == HOSTIF_SRC_RFC && xbsJournalInstance->getJournalSource(stMsgData->
paramName) != HOSTIF_SRC_WEBPA)
557 sourceType = HOSTIF_SRC_RFC;
561 RDK_LOG(RDK_LOG_INFO, LOG_TR69HOSTIF,
"Bootstrap override rules not met: [requestor=%d]\n");
563 return fcInternalError;
566 if (m_rfcUpdateInProgress)
567 xbsJournalInstance->resetClearRfc(stMsgData->
paramName);
569 if(setRawValue(stMsgData->
paramName, givenValue, sourceType))
575 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"Unable to Set Value for given Param\n");
579 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Leaving %s \n", __FUNCTION__);
583 void XBSStore::initBSPropertiesFileName()
585 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Entering %s \n", __FUNCTION__);
586 ifstream ifs_rfc(RFC_PROPERTIES_FILE);
587 if(!ifs_rfc.is_open())
589 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: Trying to open a non-existent file [%s] \n", __FUNCTION__, RFC_PROPERTIES_FILE);
594 while (getline(ifs_rfc, line)) {
595 size_t splitterPos = line.find(
'=');
596 if (splitterPos < line.length()) {
597 string key = line.substr(0, splitterPos);
598 string value = line.substr(splitterPos+1, line.length());
599 if(!strcmp(key.c_str(), BS_STORE_KEY))
602 RDK_LOG(RDK_LOG_DEBUG, LOG_TR69HOSTIF,
"Bootstrap Properties FileName = %s\n", m_filename.c_str());
604 else if(!strcmp(key.c_str(), BS_JOURNAL_KEY))
606 RDK_LOG(RDK_LOG_DEBUG, LOG_TR69HOSTIF,
"Bootstrap Journal FileName = %s\n", value.c_str());
607 xbsJournalInstance = XBSStoreJournal::getInstance(value.c_str());
613 if(m_filename.empty())
615 RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF,
"Didn't find %s in %s\n", BS_STORE_KEY, RFC_PROPERTIES_FILE);
618 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Leaving %s \n", __FUNCTION__);
621 bool XBSStore::loadBSPropertiesIntoCache()
623 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Entering %s \n", __FUNCTION__);
624 if(m_filename.empty())
626 RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF,
"Invalid Bootstrap Properties filename, Unable to load properties\n");
630 m_filename.erase(remove(m_filename.begin(), m_filename.end(),
'\"'), m_filename.end());
632 RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF,
"Bootstrap Properties File : %s \n", m_filename.c_str());
634 ifstream ifs_bsini(m_filename);
635 if (ifs_bsini.is_open())
638 while (getline(ifs_bsini, line)) {
639 size_t splitterPos = line.find(
'=');
640 if (splitterPos < line.length()) {
641 string key = line.substr(0, splitterPos);
642 string value = line.substr(splitterPos+1, line.length());
650 RDK_LOG(RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: bootstrap ini does not exist...\n", __FUNCTION__);
655 RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF,
"%s: loadFromJson() failed \n", __FUNCTION__);
659 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Leaving %s \n", __FUNCTION__);
663 bool XBSStore::init()
665 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Entering %s \n", __FUNCTION__);
672 initBSPropertiesFileName();
674 m_initDone = loadBSPropertiesIntoCache();
676 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Leaving %s \n", __FUNCTION__);
683 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Entering %s \n", __FUNCTION__);
686 m_initialUpdate =
false;
687 m_rfcUpdateInProgress =
false;
691 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Leaving %s \n", __FUNCTION__);
696 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Entering %s \n", __FUNCTION__);
700 std::lock_guard<std::mutex> guard(g_instance_mutex);
704 RDK_LOG(RDK_LOG_INFO, LOG_TR69HOSTIF,
"%s: Start thread getAuthServicePartnerID \n", __FUNCTION__);
705 partnerIdThread = thread(getAuthServicePartnerID);
706 partnerIdThread.detach();
710 RDK_LOG (RDK_LOG_TRACE1, LOG_TR69HOSTIF,
"Leaving %s \n", __FUNCTION__);
714 void XBSStore::stop()