diff --git a/src/hostif/profiles/wifi/Device_WiFi_EndPoint.cpp b/src/hostif/profiles/wifi/Device_WiFi_EndPoint.cpp index 628d76742..39598dfa2 100644 --- a/src/hostif/profiles/wifi/Device_WiFi_EndPoint.cpp +++ b/src/hostif/profiles/wifi/Device_WiFi_EndPoint.cpp @@ -490,58 +490,24 @@ int hostIf_WiFi_EndPoint::refreshCache() if (jsonObj) { cJSON *ssid = cJSON_GetObjectItem(jsonObj, "ssid"); + cJSON *strength = cJSON_GetObjectItem(jsonObj, "strength"); if (!(cJSON_IsString(ssid) && ssid->valuestring)) { RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "[%s] ConnectedSSID result missing valid ssid\n", __FUNCTION__); cJSON_Delete(root); return NOK; } - //ASSIGN TO OP HERE - strncpy (SSIDReference, ssid->valuestring, BUFF_LENGTH_256); - SSIDReference[BUFF_LENGTH_256 - 1] = '\0'; - } - else - { - RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "[%s] json parse error, no \"result\" in the output from Thunder plugin\n", __FUNCTION__); - cJSON_Delete(root); - return NOK; - } - cJSON_Delete(root); - } - else - { - RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: json parse error\n", __FUNCTION__); - return NOK; - } - } - else - { - RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: getJsonRPCData() failed or returned empty response\n", __FUNCTION__); - return NOK; - } - - postData = "{\"jsonrpc\":\"2.0\",\"id\":\"42\",\"method\": \"org.rdk.NetworkManager.GetWiFiSignalStrength\"}"; - response = getJsonRPCData(std::move(postData)); - - if(!response.empty()) - { - RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: curl response string = %s\n", __FUNCTION__, response.c_str()); - cJSON* root = cJSON_Parse(response.c_str()); - if(root) - { - cJSON* jsonObj = cJSON_GetObjectItem(root, "result"); - - if (jsonObj) - { - cJSON *sigstr = cJSON_GetObjectItem(jsonObj, "signalStrength"); - if (!cJSON_IsNumber(sigstr)) + if (!cJSON_IsNumber(strength)) { - RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "[%s] GetWiFiSignalStrength result missing numeric signalStrength\n", __FUNCTION__); + RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "[%s] ConnectedSSID result missing numeric strength\n", __FUNCTION__); cJSON_Delete(root); return NOK; } //ASSIGN TO OP HERE - stats.SignalStrength = sigstr->valueint; + strncpy (SSIDReference, ssid->valuestring, BUFF_LENGTH_256); + SSIDReference[BUFF_LENGTH_256 - 1] = '\0'; + stats.SignalStrength = strength->valueint; + RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: strength = %d\n", __FUNCTION__, stats.SignalStrength); } else { @@ -559,10 +525,9 @@ int hostIf_WiFi_EndPoint::refreshCache() } else { - RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: getJsonRPCData() failed or returned empty response\n", __FUNCTION__); - return NOK; + RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: getJsonRPCData() failed or returned empty response\n", __FUNCTION__); + return NOK; } - time_of_last_successful_query = time (0); //strncpy (Alias, param.data.endPointInfo.alias, BUFF_LENGTH_64); diff --git a/src/hostif/profiles/wifi/Device_WiFi_SSID.cpp b/src/hostif/profiles/wifi/Device_WiFi_SSID.cpp index 6c9e82096..1bcfa97d8 100644 --- a/src/hostif/profiles/wifi/Device_WiFi_SSID.cpp +++ b/src/hostif/profiles/wifi/Device_WiFi_SSID.cpp @@ -196,55 +196,71 @@ int hostIf_WiFi_SSID::get_Device_WiFi_SSID_Fields(int ssidIndex) { std::string postData = "{\"jsonrpc\":\"2.0\",\"id\":\"42\",\"method\": \"org.rdk.NetworkManager.GetConnectedSSID\"}"; string response = getJsonRPCData(std::move(postData)); - if(response.c_str()) + if (response.empty()) { - RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: curl response string = %s\n", __FUNCTION__, response.c_str()); - cJSON* root = cJSON_Parse(response.c_str()); - if(root) + RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: Empty response received from NetworkManager.GetConnectedSSID JSON-RPC request\n", __FUNCTION__); + return NOK; + } + RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: curl response string = %s\n", __FUNCTION__, response.c_str()); + cJSON* root = cJSON_Parse(response.c_str()); + if(root) + { + cJSON* jsonObj = cJSON_GetObjectItem(root, "result"); + + if (jsonObj) { - cJSON* jsonObj = cJSON_GetObjectItem(root, "result"); + cJSON *bssid = cJSON_GetObjectItem(jsonObj, "bssid"); + cJSON *ssid = cJSON_GetObjectItem(jsonObj, "ssid"); - if (jsonObj) + if (!bssid || !cJSON_IsString(bssid) || !bssid->valuestring) { - cJSON *bssid = cJSON_GetObjectItem(jsonObj, "bssid"); - cJSON *ssid = cJSON_GetObjectItem(jsonObj, "ssid"); - //ASSIGN TO OP HERE - rc=strcpy_s(BSSID,sizeof(BSSID),bssid->valuestring); - RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: BSSID = %s \n", __FUNCTION__, BSSID); - if(rc!=EOK) - { - ERR_CHK(rc); - } - rc=strcpy_s(SSID,sizeof(SSID),ssid->valuestring); - if(rc!=EOK) - { - ERR_CHK(rc); - } - } - else - { - RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "[%s] json parse error, no \"result\" in the output from Thunder plugin\n", __FUNCTION__); + RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: Invalid or missing BSSID\n", __FUNCTION__); cJSON_Delete(root); return NOK; - } - cJSON_Delete(root); - } + } + + if (!ssid || !cJSON_IsString(ssid) || !ssid->valuestring) + { + RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: Invalid or missing SSID\n", __FUNCTION__); + cJSON_Delete(root); + return NOK; + } + //ASSIGN TO OP HERE + rc=strcpy_s(BSSID,sizeof(BSSID),bssid->valuestring); + RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: BSSID = %s \n", __FUNCTION__, BSSID); + if(rc!=EOK) + { + ERR_CHK(rc); + } + rc=strcpy_s(SSID,sizeof(SSID),ssid->valuestring); + if(rc!=EOK) + { + ERR_CHK(rc); + } + rc = strcpy_s(name, sizeof(name), ssid->valuestring); + if (rc != EOK) + { + ERR_CHK(rc); + } + } else { - RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: json parse error\n", __FUNCTION__); + RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "[%s] json parse error, no \"result\" in the output from Thunder plugin\n", __FUNCTION__); + cJSON_Delete(root); return NOK; } - } + cJSON_Delete(root); + } else { - RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: curl init failed\n", __FUNCTION__); + RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: json parse error\n", __FUNCTION__); return NOK; } postData = "{\"jsonrpc\":\"2.0\",\"id\":\"42\",\"method\": \"org.rdk.NetworkManager.GetAvailableInterfaces\"}"; response = getJsonRPCData(postData); - if(response.c_str()) + if(!response.empty()) { RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: curl response string = %s\n", __FUNCTION__, response.c_str()); cJSON* root = cJSON_Parse(response.c_str()); @@ -255,28 +271,69 @@ int hostIf_WiFi_SSID::get_Device_WiFi_SSID_Fields(int ssidIndex) if (jsonObj) { cJSON *interfaces = cJSON_GetObjectItem(jsonObj, "interfaces"); - cJSON *interface = NULL; - cJSON *interfaceType = NULL; + cJSON *interface = NULL; + cJSON *interfaceType = NULL; + + if (!cJSON_IsArray(interfaces)) + { + RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: Invalid or missing interfaces array\n", __FUNCTION__); + cJSON_Delete(root); + return NOK; + } - for (int i = 0; i < cJSON_GetArraySize(interfaces); i++) { + for (int i = 0; i < cJSON_GetArraySize(interfaces); i++) + { interface = cJSON_GetArrayItem(interfaces, i); - interfaceType = cJSON_GetObjectItem(interface, "type"); - if (strcmp(interfaceType->valuestring, "WIFI") == 0) { - RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: Found WiFi Interface\n", __FUNCTION__); - break; - } - } + if (!cJSON_IsObject(interface)) + { + interface = NULL; + continue; + } + interfaceType = cJSON_GetObjectItem(interface, "type"); + if (cJSON_IsString(interfaceType) && interfaceType->valuestring && (strcmp(interfaceType->valuestring, "WIFI") == 0)) + { + RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: Found WiFi Interface\n", __FUNCTION__); + break; + } + interface = NULL; + } + + if (!interface) + { + RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: WIFI interface not found\n", __FUNCTION__); + cJSON_Delete(root); + return NOK; + } //ASSIGN TO OP HERE - cJSON *result = cJSON_GetObjectItem(interface, "mac"); - rc=strcpy_s(MACAddress,sizeof(MACAddress),result->valuestring); - RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: MACAddress = %s \n", __FUNCTION__, MACAddress); - if(rc!=EOK) - { - ERR_CHK(rc); - } - cJSON *isEnabled = cJSON_GetObjectItem(interface, "enabled"); - enable=isEnabled->type; - RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: ENABLE = %d \n", __FUNCTION__, enable); + cJSON *result = cJSON_GetObjectItem(interface, "mac"); + if (!cJSON_IsString(result) || !result->valuestring) + { + RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: Invalid or missing mac\n", __FUNCTION__); + cJSON_Delete(root); + return NOK; + } + rc = strcpy_s(MACAddress, sizeof(MACAddress), result->valuestring); + RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: MACAddress = %s \n", __FUNCTION__, MACAddress); + if (rc != EOK) + { + ERR_CHK(rc); + } + cJSON *isEnabled = cJSON_GetObjectItem(interface, "enabled"); + if (cJSON_IsBool(isEnabled)) + { + enable = cJSON_IsTrue(isEnabled); + } + else if (cJSON_IsNumber(isEnabled)) + { + enable = (0 != isEnabled->valueint); + } + else + { + RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: Invalid or missing enabled\n", __FUNCTION__); + cJSON_Delete(root); + return NOK; + } + RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: ENABLE = %d \n", __FUNCTION__, enable); } else { @@ -294,14 +351,14 @@ int hostIf_WiFi_SSID::get_Device_WiFi_SSID_Fields(int ssidIndex) } else { - RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: curl init failed\n", __FUNCTION__); + RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: Empty response received from NetworkManager.GetAvailableInterfaces JSON-RPC request\n", __FUNCTION__); return NOK; } postData = "{\"jsonrpc\":\"2.0\",\"id\":\"42\",\"method\": \"org.rdk.NetworkManager.GetWifiState\"}"; response = getJsonRPCData(std::move(postData)); - if(response.c_str()) + if(!response.empty()) { RDK_LOG (RDK_LOG_INFO, LOG_TR69HOSTIF, "%s: curl response string = %s\n", __FUNCTION__, response.c_str()); cJSON* root = cJSON_Parse(response.c_str()); @@ -311,10 +368,15 @@ int hostIf_WiFi_SSID::get_Device_WiFi_SSID_Fields(int ssidIndex) if (jsonObj) { - cJSON *state = cJSON_GetObjectItem(jsonObj, "state"); - //ASSIGN TO OP HERE - int res = state->valueint; - switch (res) { + cJSON *state = cJSON_GetObjectItem(jsonObj, "state"); + if (!state || !cJSON_IsNumber(state)) + { + RDK_LOG(RDK_LOG_ERROR, LOG_TR69HOSTIF, "[%s] json parse error, \"state\" field missing or not a number\n", __FUNCTION__); + cJSON_Delete(root); + return NOK; + } + int res = state->valueint; + switch (res) { case 0: rc=strcpy_s(status,sizeof(status),"UNINSTALLED"); break; @@ -380,7 +442,7 @@ int hostIf_WiFi_SSID::get_Device_WiFi_SSID_Fields(int ssidIndex) } else { - RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: getJsonRPCData() failed\n", __FUNCTION__); + RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF, "%s: Empty response received from NetworkManager.GetWifiState JSON-RPC request\n", __FUNCTION__); return NOK; }