Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f7c75aa4 authored by Martin Bouchet's avatar Martin Bouchet Committed by Christopher N. Hesse
Browse files

libril: fix network operator search

The number of mQANElements should be defined in the system
prop ro.ril.telephony.mqanelements

Change-Id: Ie5bb8ba80c5ac93b7502da3b1bb3d2b4404ecd5e
parent d9123964
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <hidl/HidlTransportSupport.h>
#include <utils/SystemClock.h>
#include <inttypes.h>
#include <cutils/properties.h>

#define INVALID_HEX_CHAR 16

@@ -3700,6 +3701,10 @@ int radio::getOperatorResponse(int slotId,
#if VDBG
    RLOGD("getOperatorResponse: serial %d", serial);
#endif
    int mqanelements;
    char value[PROPERTY_VALUE_MAX];
    property_get("ro.ril.telephony.mqanelements", value, "4");
    mqanelements = atoi(value);

    if (radioService[slotId]->mRadioResponse != NULL) {
        RadioResponseInfo responseInfo = {};
@@ -3708,14 +3713,14 @@ int radio::getOperatorResponse(int slotId,
        hidl_string shortName;
        hidl_string numeric;
        int numStrings = responseLen / sizeof(char *);
        if (response == NULL || numStrings != 3) {
        if (response == NULL || numStrings != mqanelements - 2) {
            RLOGE("getOperatorResponse Invalid response: NULL");
            if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;

        } else {
            char **resp = (char **) response;
            longName = convertCharPtrToHidlString(resp[0]);
            shortName = convertCharPtrToHidlString(resp[1]);
            shortName = convertCharPtrToHidlString(resp[0]);
            numeric = convertCharPtrToHidlString(resp[2]);
        }
        Return<void> retStatus = radioService[slotId]->mRadioResponse->getOperatorResponse(
@@ -4344,22 +4349,26 @@ int radio::getAvailableNetworksResponse(int slotId,
#if VDBG
    RLOGD("getAvailableNetworksResponse: serial %d", serial);
#endif
    int mqanelements;
    char value[PROPERTY_VALUE_MAX];
    property_get("ro.ril.telephony.mqanelements", value, "4");
	mqanelements = atoi(value);

    if (radioService[slotId]->mRadioResponse != NULL) {
        RadioResponseInfo responseInfo = {};
        populateResponseInfo(responseInfo, serial, responseType, e);
        hidl_vec<OperatorInfo> networks;
        if ((response == NULL && responseLen != 0)
                || responseLen % (4 * sizeof(char *))!= 0) {
                || responseLen % (mqanelements * sizeof(char *))!= 0) {
            RLOGE("getAvailableNetworksResponse Invalid response: NULL");
            if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
        } else {
            char **resp = (char **) response;
            int numStrings = responseLen / sizeof(char *);
            networks.resize(numStrings/4);
            for (int i = 0, j = 0; i < numStrings; i = i + 4, j++) {
            networks.resize(numStrings/mqanelements);
            for (int i = 0, j = 0; i < numStrings; i = i + mqanelements, j++) {
                networks[j].alphaLong = convertCharPtrToHidlString(resp[i]);
                networks[j].alphaShort = convertCharPtrToHidlString(resp[i + 1]);
                networks[j].alphaShort = convertCharPtrToHidlString(resp[i]);
                networks[j].operatorNumeric = convertCharPtrToHidlString(resp[i + 2]);
                int status = convertOperatorStatusToInt(resp[i + 3]);
                if (status == -1) {