Commit 1e29ffc6 authored by DidntRead's avatar DidntRead
Browse files

ril: fix imei

parent 18b60e20
Loading
Loading
Loading
Loading
+22 −16
Original line number Diff line number Diff line
@@ -268,8 +268,14 @@ static size_t s_prevEcopsDataSize[SIM_COUNT];
static int pendingUSRcnt = 0;
static USRbuffer pendingUSR[MAX_PENDING_USR];
#endif
// device identity
static char* Device_ID[SIM_COUNT * 4];
typedef struct {
    char *imei;
    char *imeisv;
    char *esnHex;
    char *meidHex;
} RIL_IDENTITY;

static RIL_IDENTITY Device_ID[SIM_COUNT];
#if (SIM_COUNT > 3)
  #define MAX_RIL_CHANNELS	24
#elif (SIM_COUNT > 2)
@@ -1282,28 +1288,28 @@ RIL_onRequestComplete(RIL_Token t, RIL_Errno s_e, void *s_response, size_t s_res
	RLOGD("C[locl]< %s", requestToString(pRI->pCI->requestNumber));
	if (pRI->pCI->requestNumber == RIL_REQUEST_GET_IMEI) {
	    int i = (int)socket_id;
	    Device_ID[i*4] = (char*) response;
	    RLOGD("IMEI= %s", Device_ID[i*4]);
	    RLOGD("SOCKET_ID_IMEI= %d", i);
            Device_ID[i].imei = (char*) response;
	    RLOGD("IMEI=%s", Device_ID[i].imei);
	}
	else if (pRI->pCI->requestNumber == RIL_REQUEST_GET_IMEISV) {
	    int i = (int)socket_id;
	    Device_ID[i*4 + 1] = (char*) response;
	    RLOGD("IMEISV= %s", Device_ID[i*4 + 1]);
	    RLOGD("SOCKET_ID_IMEI_SV= %d", i);
            Device_ID[i].imeisv = (char*) response;
	    RLOGD("IMEISV=%s", Device_ID[i].imeisv);
	}
	goto done;
    }

// *** handle unsupport but necessary requests
    if(e == RIL_E_REQUEST_NOT_SUPPORTED) {
// *** handle unsupported but necessary requests
    if (pRI->pCI->requestNumber == RIL_REQUEST_DEVICE_IDENTITY) {
	RLOGD("Overriding RIL_REQUEST_DEVICE_IDENTITY");
	int i = (int)socket_id;
	    sprintf(Device_ID[i*4 + 2], "");
	    sprintf(Device_ID[i*4 + 3], "");
	    response = (void *) &Device_ID[i*4];
	    responselen = sizeof(char *) * 4;
	RLOGD("SOCKET_ID_IDENTITY= %d", i);
	response = &(Device_ID[i]);
	responselen = 4 * sizeof(char*);
	e = RIL_E_SUCCESS;
    }
    }

    appendPrintBuf("[%04d]< %s",
	pRI->token, requestToString(pRI->pCI->requestNumber));
+23 −7
Original line number Diff line number Diff line
@@ -542,6 +542,15 @@ hidl_string convertCharPtrToHidlString(const char *ptr) {
    return ret;
}

hidl_string convertCharPtrToHidlStringWithLength(const char *ptr, size_t size) {
    hidl_string ret;
    if (ptr != NULL) {
	// TODO: replace this with strnlen
	ret.setToExternal(ptr, size);
    }
    return ret;
}

bool dispatchVoid(int serial, int slotId, int request) {
    RequestInfo *pRI = android::addRequestToList(serial, slotId, request);
    if (pRI == NULL) {
@@ -5574,12 +5583,17 @@ int radio::deleteSmsOnRuimResponse(int slotId,
    return 0;
}

typedef struct {
    char *imei;
    char *imeisv;
    char *esnHex;
    char *meidHex;
} RIL_IDENTITY;

int radio::getDeviceIdentityResponse(int slotId,
				    int responseType, int serial, RIL_Errno e, void *response,
				    size_t responseLen) {
#if VDBG
    RLOGD("getDeviceIdentityResponse: serial %d", serial);
#endif

    if (radioService[slotId]->mRadioResponse != NULL) {
	RadioResponseInfo responseInfo = {};
@@ -5595,13 +5609,15 @@ int radio::getDeviceIdentityResponse(int slotId,
		    emptyString, emptyString, emptyString, emptyString);
	    radioService[slotId]->checkReturnStatus(retStatus);
	} else {
	    char **resp = (char **) response;
	    RIL_IDENTITY identity = *((RIL_IDENTITY *) response);
            RLOGD("getDeviceIdentityResponse: IMEI=%s", identity.imei);
            RLOGD("getDeviceIdentityResponse: IMEISV=%s", identity.imeisv);
	    Return<void> retStatus
		    = radioService[slotId]->mRadioResponse->getDeviceIdentityResponse(responseInfo,
		    convertCharPtrToHidlString(resp[0]),
		    convertCharPtrToHidlString(resp[1]),	// IMEISV
		    convertCharPtrToHidlString(resp[2]),
		    convertCharPtrToHidlString(resp[3]));
		    convertCharPtrToHidlString(identity.imei),
		    convertCharPtrToHidlString(identity.imeisv),	// IMEISV
		    convertCharPtrToHidlString(identity.esnHex),
		    convertCharPtrToHidlString(identity.meidHex));
	    radioService[slotId]->checkReturnStatus(retStatus);
	}
    } else {