Changes to correctly process EAP-SIM req parameters in ril

Change-Id: I393c18f878fe3e5efcd81543a9a38a4c353b6e03
diff --git a/include/telephony/ril.h b/include/telephony/ril.h
index c0cfd09..7cb3496 100644
--- a/include/telephony/ril.h
+++ b/include/telephony/ril.h
@@ -4685,12 +4685,6 @@
                                    NULL if no value. */
 } RIL_SimAuthentication;
 
-typedef struct {
-    int sw1;
-    int sw2;
-    char *simResponse;          /* Response in Base64 format, see 3GPP TS 31.102 7.1.2 */
-} RIL_SimAuthenticationResponse;
-
 #ifdef RIL_SHLIB
 struct RIL_Env {
     /**
diff --git a/libril/ril.cpp b/libril/ril.cpp
index bccc8d2..f526294 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -275,6 +275,7 @@
 static void dispatchNVReadItem(Parcel &p, RequestInfo *pRI);
 static void dispatchNVWriteItem(Parcel &p, RequestInfo *pRI);
 static void dispatchUiccSubscripton(Parcel &p, RequestInfo *pRI);
+static void dispatchSimAuthentication(Parcel &p, RequestInfo *pRI);
 static int responseInts(Parcel &p, void *response, size_t responselen);
 static int responseStrings(Parcel &p, void *response, size_t responselen);
 static int responseString(Parcel &p, void *response, size_t responselen);
@@ -1835,6 +1836,47 @@
     return;
 }
 
+static void dispatchSimAuthentication(Parcel &p, RequestInfo *pRI)
+{
+    RIL_SimAuthentication pf;
+    int32_t  t;
+    status_t status;
+
+    memset(&pf, 0, sizeof(pf));
+
+    status = p.readInt32(&t);
+    pf.authContext = (int) t;
+    pf.authData = strdupReadString(p);
+    pf.aid = strdupReadString(p);
+
+    startRequest;
+    appendPrintBuf("authContext=%s, authData=%s, aid=%s", pf.authContext, pf.authData, pf.aid);
+    closeRequest;
+    printRequest(pRI->token, pRI->pCI->requestNumber);
+
+    if (status != NO_ERROR) {
+        goto invalid;
+    }
+    CALL_ONREQUEST(pRI->pCI->requestNumber, &pf, sizeof(pf), pRI, pRI->socket_id);
+
+#ifdef MEMSET_FREED
+    memsetString(pf.authData);
+    memsetString(pf.aid);
+#endif
+
+    free(pf.authData);
+    free(pf.aid);
+
+#ifdef MEMSET_FREED
+    memset(&pf, 0, sizeof(pf));
+#endif
+
+    return;
+invalid:
+    invalidCommandBlock(pRI);
+    return;
+}
+
 static int
 blockingWrite(int fd, const void *buffer, size_t len) {
     size_t writeOffset = 0;
diff --git a/libril/ril_commands.h b/libril/ril_commands.h
index d0affe7..dfcaf4f 100644
--- a/libril/ril_commands.h
+++ b/libril/ril_commands.h
@@ -139,6 +139,6 @@
     {RIL_REQUEST_SET_UICC_SUBSCRIPTION, dispatchUiccSubscripton, responseVoid},
     {RIL_REQUEST_ALLOW_DATA, dispatchInts, responseVoid},
     {RIL_REQUEST_GET_HARDWARE_CONFIG, dispatchVoid, responseHardwareConfig},
-    {RIL_REQUEST_SIM_AUTHENTICATION, dispatchString, responseString},
+    {RIL_REQUEST_SIM_AUTHENTICATION, dispatchSimAuthentication, responseSIM_IO},
     {RIL_REQUEST_GET_DC_RT_INFO, dispatchVoid, responseDcRtInfo},
     {RIL_REQUEST_SET_DC_RT_INFO_RATE, dispatchInts, responseVoid},