// // No complexity is needed to parse the URC received for Coexistence purpose (+XMETRIC/+XNRTCWS). // The goal is just to extract the URC name/value and notify the up-layer (CWS Manager) about it. // BOOL CSilo_rfcoexistence::ParseCoexReportURC(CResponse* const pResponse, const char*& rszPointer, const char* pUrcPrefix) { RIL_LOG_VERBOSE("CSilo_rfcoexistence::ParseCoexReportURC() - Enter\r\n"); BOOL bRet = FALSE; // prefix can be "+XMETRIC: " or "+XNRTCWSI: " const int MAX_PREFIX_SIZE = 12; // KW fix, total size of pData->response is COEX_INFO_BUFFER_SIZE // pData->response is made by pUrcPrefix + szExtInfo char szExtInfo[COEX_INFO_BUFFER_SIZE - MAX_PREFIX_SIZE] = {0}; sOEM_HOOK_RAW_UNSOL_COEX_REPORT* pData = NULL; if (NULL == pResponse) { RIL_LOG_CRITICAL("CSilo_rfcoexistence::ParseCoexReportURC() - pResponse is NULL.\r\n"); goto Error; } pResponse->SetUnsolicitedFlag(TRUE); // Extract the URC string (rszPointer) into szExtInfo, to not modify rszPointer ExtractUnquotedString(rszPointer, '\r', szExtInfo, (COEX_INFO_BUFFER_SIZE - MAX_PREFIX_SIZE), rszPointer); RIL_LOG_VERBOSE("CSilo_rfcoexistence::ParseCoexReportURC()- URC prefix=[%s] URC value=[%s]\r\n", pUrcPrefix, szExtInfo); // Creating the response pData = (sOEM_HOOK_RAW_UNSOL_COEX_REPORT*) malloc(sizeof(sOEM_HOOK_RAW_UNSOL_COEX_REPORT)); if (NULL == pData) { RIL_LOG_CRITICAL("CSilo_rfcoexistence::ParseCoexReportURC() -" " Could not allocate memory for pData.\r\n"); goto Error; } memset(pData, 0, sizeof(sOEM_HOOK_RAW_UNSOL_COEX_REPORT)); // pData.response will contain the final result (URC name + URC value) // Adding the prefix of the URC (+XMETRIC or +XNRTCWS) to pData->response if (!CopyStringNullTerminate(pData->response, pUrcPrefix, MAX_PREFIX_SIZE)) { RIL_LOG_CRITICAL("CSilo_rfcoexistence:ParseCoexReportURC - Copy of URC prefix failed\r\n"); goto Error; } // Adding the value of the URC to pData->response if (!ConcatenateStringNullTerminate(pData->response, sizeof(pData->response), szExtInfo)) { RIL_LOG_CRITICAL("CSilo_rfcoexistence::ParseCoexReportURC() : Failed to concat the URC " "prefix to its value!\r\n"); goto Error; } RIL_LOG_INFO("CSilo_rfcoexistence::ParseCoexReportURC() - Final Response=[%s]\r\n", pData->response); pData->commandId = RIL_OEM_HOOK_RAW_UNSOL_COEX_REPORT; pData->responseSize = strlen(pData->response); pResponse->SetResultCode(RIL_UNSOL_OEM_HOOK_RAW); if (!pResponse->SetData(pData, sizeof(sOEM_HOOK_RAW_UNSOL_COEX_REPORT), FALSE)) { goto Error; } bRet = TRUE; Error: if (!bRet) { free(pData); pData = NULL; } RIL_LOG_VERBOSE("CSilo_rfcoexistence::ParseCoexReportURC() - Exit\r\n"); return bRet; }
// // No complexity is needed to parse the URC received for Coexistence purpose (+XMETRIC/+XNRTCWS). // The goal is just to extract the URC name/value and notify the up-layer (CWS Manager) about it. // BOOL CSilo_MISC::ParseCoexURC(CResponse* const pResponse, const char*& rszPointer, const char* pUrcPrefix) { RIL_LOG_VERBOSE("CSilo_MISC::ParseCoexURC() - Enter\r\n"); BOOL fRet = FALSE; char szExtInfo[MAX_BUFFER_SIZE] = {0}; sOEM_HOOK_RAW_UNSOL_COEX_INFO* pData = NULL; if (NULL == pResponse) { RIL_LOG_CRITICAL("CSilo_MISC::ParseCoexURC() - pResponse is NULL.\r\n"); goto Error; } pResponse->SetUnsolicitedFlag(TRUE); // Performing a backup of the URC string (rszPointer) into szExtInfo, to not modify rszPointer ExtractUnquotedString(rszPointer, '\r', szExtInfo, MAX_BUFFER_SIZE, rszPointer); RIL_LOG_VERBOSE("CSilo_MISC::ParseCoexURC() - URC prefix=[%s] URC value=[%s]\r\n", pUrcPrefix, szExtInfo); // Creating the response pData = (sOEM_HOOK_RAW_UNSOL_COEX_INFO*)malloc( sizeof(sOEM_HOOK_RAW_UNSOL_COEX_INFO)); if (NULL == pData) { RIL_LOG_CRITICAL("CSilo_MISC::ParseCoexURC() -" " Could not allocate memory for pData.\r\n"); goto Error; } memset(pData, 0, sizeof(sOEM_HOOK_RAW_UNSOL_COEX_INFO)); // pData.response will contain the final result (URC name + URC value) // Adding the prefix of the URC (+XMETRIC or +XNRTCWS) to pData->response if (!CopyStringNullTerminate(pData->response, pUrcPrefix, COEX_INFO_BUFFER_SIZE)) { RIL_LOG_CRITICAL("CSilo_MISC:ParseCoexURC - Copy of URC prefix failed\r\n"); goto Error; } // Adding the value of the URC to pData->response if (!ConcatenateStringNullTerminate(pData->response, sizeof(pData->response), szExtInfo)) { RIL_LOG_CRITICAL("CSilo_MISC::ParseCoexURC() : Failed to concat the URC " "prefix to its value!\r\n"); goto Error; } RIL_LOG_INFO("CSilo_MISC::ParseCoexURC() - Final Response=[%s]\r\n", pData->response); pData->command = RIL_OEM_HOOK_RAW_UNSOL_COEX_INFO; pData->responseSize = strnlen(pData->response, COEX_INFO_BUFFER_SIZE); pResponse->SetResultCode(RIL_UNSOL_OEM_HOOK_RAW); if (!pResponse->SetData((void*)pData, sizeof(sOEM_HOOK_RAW_UNSOL_COEX_INFO), FALSE)) { goto Error; } fRet = TRUE; Error: if (!fRet) { free(pData); pData = NULL; } RIL_LOG_VERBOSE("CSilo_MISC::ParseCoexURC() - Exit\r\n"); return fRet; }
// // IMS-Register notification // BOOL CSilo_IMS::ParseCIREGU(CResponse* const pResponse, const char*& rszPointer) { RIL_LOG_VERBOSE("CSilo_IMS::ParseCIREGU() - Enter\r\n"); BOOL fRet = FALSE; UINT32 uiRegInfo = 0; char szExtInfo[MAX_BUFFER_SIZE]; char szAlpha[MAX_BUFFER_SIZE]; int pos = 0; sOEM_HOOK_RAW_UNSOL_IMS_REG_STATUS data; if (NULL == pResponse) { RIL_LOG_CRITICAL("CSilo_IMS::ParseCIREGU() - pResponse is NULL.\r\n"); goto Error; } pResponse->SetUnsolicitedFlag(TRUE); // Throw out the alpha chars if there are any (void)ExtractQuotedString(rszPointer, szAlpha, MAX_BUFFER_SIZE, rszPointer); // Parse "<reg_info>" if (!ExtractUInt32(rszPointer, uiRegInfo, rszPointer)) { RIL_LOG_CRITICAL("CSilo_IMS::ParseCIREGU() - Could not parse IMS registration" "status indication\r\n"); goto Error; } // Parse ",<ext_info>" if any. Debug purpose only. if (SkipString(rszPointer, ",", rszPointer) && ExtractUnquotedString(rszPointer, m_cTerminator, szExtInfo, MAX_BUFFER_SIZE, rszPointer)) { RIL_LOG_INFO("CSilo_IMS::ParseCIREGU() - IMS capabilities: %s", szExtInfo); } data.command = RIL_OEM_HOOK_RAW_UNSOL_IMS_REG_STATUS; data.status = uiRegInfo; CTE::GetTE().SetImsRegistrationStatus(uiRegInfo); RIL_LOG_VERBOSE("CSilo_IMS::ParseCIREGU() - CIREGU=[%d]\r\n", uiRegInfo); pResponse->SetResultCode(RIL_UNSOL_OEM_HOOK_RAW); if (!pResponse->SetData((void*)&data, sizeof(sOEM_HOOK_RAW_UNSOL_IMS_REG_STATUS), TRUE)) { goto Error; } /* * When the IMS registration status change force the framework to query the data * registration state by completing RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED. */ RIL_onUnsolicitedResponse(RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED, NULL, 0); fRet = TRUE; Error: RIL_LOG_VERBOSE("CSilo_IMS::ParseCIREGU() - Exit\r\n"); return fRet; }