[Feature]add MT2731_MP2_MR2_SVN388 baseline version
Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/src/lynq/lib/liblynq-tele-ril/lynq-riltel/ss.cpp b/src/lynq/lib/liblynq-tele-ril/lynq-riltel/ss.cpp
new file mode 100644
index 0000000..78f0113
--- /dev/null
+++ b/src/lynq/lib/liblynq-tele-ril/lynq-riltel/ss.cpp
@@ -0,0 +1,716 @@
+ /*
+ * Copyright (C) 2006 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <alloca.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <cutils/jstring.h>
+#include <stdlib.h>
+#include <binder/Parcel.h>
+#include <string.h>
+#include <strings.h>
+#include <log/log.h>
+#include<iconv.h>
+
+#include "common.h"
+#include "ss.h"
+
+#undef LOG_TAG
+#define LOG_TAG "DEMO_SS"
+
+static int TOA_International = 0x91;
+static int TOA_Unknown = 0x81;
+
+static const int SERVICE_CLASS_NONE = 0; // no user input
+static const int SERVICE_CLASS_VOICE = (1 << 0);
+static const int SERVICE_CLASS_DATA = (1 << 1); //synonym for 16+32+64+128
+static const int SERVICE_CLASS_FAX = (1 << 2);
+static const int SERVICE_CLASS_SMS = (1 << 3);
+static const int SERVICE_CLASS_DATA_SYNC = (1 << 4);
+static const int SERVICE_CLASS_DATA_ASYNC = (1 << 5);
+static const int SERVICE_CLASS_PACKET = (1 << 6);
+static const int SERVICE_CLASS_PAD = (1 << 7);
+static const int SERVICE_CLASS_MAX = (1 << 9); // Max SERVICE_CLASS value
+
+// Used for call barring methods below
+static char* CB_FACILITY_BAOC = "AO";
+static char* CB_FACILITY_BAOIC = "OI";
+static char* CB_FACILITY_BAOICxH = "OX";
+static char* CB_FACILITY_BAIC = "AI";
+static char* CB_FACILITY_BAICr = "IR";
+static char* CB_FACILITY_BA_ALL = "AB";
+static char* CB_FACILITY_BA_MO = "AG";
+static char* CB_FACILITY_BA_MT = "AC";
+static char* CB_FACILITY_BA_SIM = "SC";
+static char* CB_FACILITY_BA_FD = "FD";
+
+
+// Used as parameters for call forward methods below
+static const int CF_ACTION_DISABLE = 0;
+static const int CF_ACTION_ENABLE = 1;
+static const int CF_ACTION_INTERROGATE = 2;
+static const int CF_ACTION_REGISTRATION = 3;
+static const int CF_ACTION_ERASURE = 4;
+
+static const int CF_REASON_UNCONDITIONAL = 0;
+static const int CF_REASON_BUSY = 1;
+static const int CF_REASON_NO_REPLY = 2;
+static const int CF_REASON_NOT_REACHABLE = 3;
+static const int CF_REASON_ALL = 4;
+static const int CF_REASON_ALL_CONDITIONAL = 5;
+static const int CF_REASON_NOT_REGISTERED = 6;
+
+//Called line presentation
+static const char* SC_CLIP = "30";
+static const char* SC_CLIR = "31";
+
+// Call Forwarding
+static const char* SC_CFU = "21";
+static const char* SC_CFB = "67";
+static const char* SC_CFNRy = "61";
+static const char* SC_CFNR = "62";
+
+static const char* SC_CF_All = "002";
+static const char* SC_CF_All_Conditional = "004";
+
+// Call Waiting
+static const char* SC_WAIT = "43";
+
+// Call Barring
+static const char* SC_BAOC = "33";
+static const char* SC_BAOIC = "331";
+static const char* SC_BAOICxH = "332";
+static const char* SC_BAIC = "35";
+static const char* SC_BAICr = "351";
+
+static const char* SC_BA_ALL = "330";
+static const char* SC_BA_MO = "333";
+static const char* SC_BA_MT = "353";
+
+// Supp Service Password registration
+static const char* SC_PWD = "03";
+
+// PIN/PIN2/PUK/PUK2
+static const char* SC_PIN = "04";
+static const char* SC_PIN2 = "042";
+static const char* SC_PUK = "05";
+static const char* SC_PUK2 = "052";
+
+///M:For query CNAP
+static const char* SC_CNAP = "300";
+
+int toaFromString(char* s) {
+ if (s != NULL && strlen(s) > 0 && *s == '+') {
+ return TOA_International;
+ }
+
+ return TOA_Unknown;
+}
+
+char* scToBarringFacility(char* sc) {
+ if (sc == NULL) {
+ RLOGE("invalid call barring sc");
+ return NULL;
+ }
+
+ if (strcmp(sc, SC_BAOC) == 0) {
+ return CB_FACILITY_BAOC;
+ } else if (strcmp(sc, SC_BAOIC) == 0) {
+ return CB_FACILITY_BAOIC;
+ } else if (strcmp(sc, SC_BAOICxH) == 0) {
+ return CB_FACILITY_BAOICxH;
+ } else if (strcmp(sc, SC_BAIC) == 0) {
+ return CB_FACILITY_BAIC;
+ } else if (strcmp(sc, SC_BAICr) == 0) {
+ return CB_FACILITY_BAICr;
+ } else if (strcmp(sc, SC_BA_ALL) == 0) {
+ return CB_FACILITY_BA_ALL;
+ } else if (strcmp(sc, SC_BA_MO) == 0) {
+ return CB_FACILITY_BA_MO;
+ } else if (strcmp(sc, SC_BA_MT) == 0) {
+ return CB_FACILITY_BA_MT;
+ } else if (strcasecmp(sc, CB_FACILITY_BA_FD) == 0 ) {
+ return CB_FACILITY_BA_FD;
+ } else if (strcasecmp(sc, CB_FACILITY_BA_SIM) == 0 ) {
+ return CB_FACILITY_BA_SIM;
+ } else {
+ RLOGE("invalid call barring sc");
+ return NULL;
+ }
+}
+
+
+int scToCallForwardReason(char* sc) {
+ if (sc == NULL) {
+ RLOGE("invalid call forward sc");
+ return -1;
+ }
+
+ if (strcmp(sc, SC_CF_All) == 0) {
+ return CF_REASON_ALL;
+ } else if (strcmp(sc, SC_CFU) == 0) {
+ return CF_REASON_UNCONDITIONAL;
+ } else if (strcmp(sc, SC_CFB) == 0) {
+ return CF_REASON_BUSY;
+ } else if (strcmp(sc, SC_CFNR) == 0) {
+ return CF_REASON_NOT_REACHABLE;
+ } else if (strcmp(sc, SC_CFNRy) == 0) {
+ return CF_REASON_NO_REPLY;
+ } else if (strcmp(sc, SC_CF_All_Conditional) == 0) {
+ return CF_REASON_ALL_CONDITIONAL;
+ } else {
+ RLOGE("invalid call forward sc");
+ return -1;
+ }
+}
+
+int siToServiceClass(char* si)
+{
+ if (si == NULL || strcmp(si, "null") == 0)
+ {
+ return SERVICE_CLASS_NONE;
+ } else {
+ // NumberFormatException should cause MMI fail
+ int serviceCode = atoi(si);
+
+ switch (serviceCode) {
+ case 10: return SERVICE_CLASS_SMS + SERVICE_CLASS_FAX + SERVICE_CLASS_VOICE;
+ case 11: return SERVICE_CLASS_VOICE;
+ case 12: return SERVICE_CLASS_SMS + SERVICE_CLASS_FAX;
+ case 13: return SERVICE_CLASS_FAX;
+
+ case 16: return SERVICE_CLASS_SMS;
+
+ case 19: return SERVICE_CLASS_FAX + SERVICE_CLASS_VOICE;
+/*
+ Note for code 20:
+ From TS 22.030 Annex C:
+ "All GPRS bearer services" are not included in "All tele and bearer services"
+ and "All bearer services"."
+....so SERVICE_CLASS_DATA, which (according to 27.007) includes GPRS
+*/
+ case 20: return SERVICE_CLASS_DATA_ASYNC + SERVICE_CLASS_DATA_SYNC;
+
+ case 21: return SERVICE_CLASS_PAD + SERVICE_CLASS_DATA_ASYNC;
+ case 22: return SERVICE_CLASS_PACKET + SERVICE_CLASS_DATA_SYNC;
+ case 24: return SERVICE_CLASS_DATA_SYNC;
+ //don't support video
+ //case 24: return SERVICE_CLASS_DATA_SYNC + SERVICE_CLASS_VIDEO;
+ case 25: return SERVICE_CLASS_DATA_ASYNC;
+ case 26: return SERVICE_CLASS_DATA_SYNC + SERVICE_CLASS_VOICE;
+ case 99: return SERVICE_CLASS_PACKET;
+
+ default:
+ RLOGW("unsupported MMI service code:%s ", si);
+ return SERVICE_CLASS_NONE;
+ }
+ }
+}
+
+int siToTime (char* si) {
+ if (si == NULL || strcmp(si, "null") == 0) {
+ return 0;
+ } else {
+ // NumberFormatException should cause MMI fail
+ return atoi(si);
+ }
+}
+
+bool isGBK(unsigned char* data, int len)
+{
+ return false;
+ int i = 0;
+ while(i < len)
+ {
+ if(data[i] <= 0x7f)
+ {
+ //one byte encode
+ i++;
+ continue;
+ }
+ else
+ {
+ //two byte encode
+ if(data[i] >= 0x81 && data[i] <= 0xfe && data[i + 1] >= 0x40
+ &&data[i + 1] <= 0xfe && data[i + 1] != 0xf7)
+ {
+ i += 2;
+ continue;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+int gbkToUtf8(char* src_str, size_t src_len, char* dst_str, size_t dst_len)
+{
+ iconv_t cd;
+ char **pin = &src_str;
+ char **pout = &dst_str;
+ cd = iconv_open("UTF-8", "GBK");
+ if(cd == (iconv_t) - 1)
+ {
+ printf("iconv_open error\n");
+ RLOGE("iconv_open error");
+ return -1;
+ }
+ memset(dst_str, 0, dst_len);
+ if(iconv(cd, pin, &src_len, pout, &dst_len) == -1){
+ printf("format error or nosupport\n");
+ RLOGE("format error or nosupport");
+ return -1;
+ }
+
+ iconv_close(cd);
+// **pout = '\0';
+
+ return 0;
+}
+//xxx ussiString
+int sendUSSI(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 3)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+ char* srcstr = argv[2];
+ char utf8str[64];
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ p.writeInt32(2);
+ writeStringToParcel(p, (const char *)argv[1]);//ussdaction
+
+ printf("srcstr:%s\n", srcstr);
+ printf("srcstr:%s\n", argv[2]);
+ if(isGBK((unsigned char *)srcstr, strlen(srcstr)))
+ {
+ if(gbkToUtf8(srcstr, strlen(srcstr), utf8str, sizeof(utf8str)) < 0)
+ {
+ RLOGE("format change error");
+ }
+ printf("gbk to utf8:%s\n", utf8str);
+ writeStringToParcel(p, (const char *)utf8str);//ussdString
+ }
+ else
+ {
+ printf("--------utf8:%s\n", srcstr);
+ writeStringToParcel(p, (const char *)srcstr);//ussdString
+ }
+ p.setDataPosition(pos);
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+int cancelPendingUssi(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 1)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+ android::Parcel p;
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+//xxx ussdString
+int sendUSSD(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 2)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ writeStringToParcel(p, (const char *)argv[1]);//ussdString
+ p.setDataPosition(pos);
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+int cancelPendingUssd(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 1)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+ android::Parcel p;
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+int getCLIR(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 1)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+ android::Parcel p;
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+//xxx clirMode
+int setCLIR(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 2)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ p.writeInt32(1);
+ //0: "user subscription default value; 1:restrict CLI presentation; 2: allow CLI presentation
+ p.writeInt32(atoi(argv[1]));//clirMode
+ p.setDataPosition(pos);
+
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+int queryCLIP(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 1)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+ android::Parcel p;
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+//xxx cfReason serviceClass number
+// mCi.queryCallForwardStatus(commandInterfaceCFReason,0,null,resp);
+int queryCallForwardStatus(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 4)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+
+ int cfReason = scToCallForwardReason(argv[1]);
+ RLOGD("queryCallForwardStatus() cfReason: %d", cfReason);
+ if(cfReason == -1) return -1;
+ p.writeInt32(2);
+ p.writeInt32(cfReason); //cfReason
+ p.writeInt32(siToServiceClass(argv[2])); //serviceClass
+ p.writeInt32(toaFromString(argv[3])); //number
+ writeStringToParcel(p, argv[3]);//number
+ p.writeInt32(0);
+
+ p.setDataPosition(pos);
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+//xxx action cfReason serviceClass number timeSeconds
+int setCallForward(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 6 )
+ {
+ RLOGD("the paremeters isn't enough!");
+ return -1;
+ }
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ int action = atoi(argv[1]); //status
+ int reason = scToCallForwardReason(argv[2]);
+ if(reason == -1) return -1;
+ char* number = argv[3];
+ int time = siToTime(argv[4]);
+ int serviceClass = siToServiceClass(argv[5]);
+ p.writeInt32(action); //action
+ p.writeInt32(reason); //cfReason
+ p.writeInt32(serviceClass); //serviceClass
+ p.writeInt32(toaFromString(number)); //number
+ writeStringToParcel(p, number);
+ p.writeInt32(time); //timeSeconds
+
+ p.setDataPosition(pos);
+
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+
+
+//xxx serviceClass
+int queryCallWaiting(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 2)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ p.writeInt32(1);
+ p.writeInt32(siToServiceClass(argv[1]));//serviceClass
+
+ p.setDataPosition(pos);
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+
+//xxx enable serviceClass
+int setCallWaiting(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 3)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ p.writeInt32(2);
+ p.writeInt32(atoi(argv[1])? 1 : 0);//enable
+ p.writeInt32(siToServiceClass(argv[2])); //serviceClass
+
+ p.setDataPosition(pos);
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+//xxx facility oldPwd newPwd
+int changeBarringPassword(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 4)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ p.writeInt32(3);
+ char* facility = scToBarringFacility(argv[1]);
+ if(facility == NULL) return -1;
+ writeStringToParcel(p, facility); //facility
+ writeStringToParcel(p, (const char *)argv[2]); //oldPwd
+ writeStringToParcel(p, (const char *)argv[3]); //newPwd
+
+ p.setDataPosition(pos);
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+//xxx enable
+int setSuppServiceNotifications(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 2)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ p.writeInt32(1);
+ p.writeInt32(atoi(argv[1])? 1 : 0);//enable
+
+ p.setDataPosition(pos);
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}
+
+int setCLIP(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 2)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ p.writeInt32(1);
+ p.writeInt32(atoi(argv[1])? 1 : 0);//enable
+
+ p.setDataPosition(pos);
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+
+}
+
+int getCOLP(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 1)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+ android::Parcel p;
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+
+}
+
+int setCOLP(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 2)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ p.writeInt32(1);
+ p.writeInt32(atoi(argv[1])? 1 : 0);//enable
+
+ p.setDataPosition(pos);
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+
+}
+
+int getCOLR(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 1)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+ android::Parcel p;
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+
+}
+
+int queryFacilityLockForApp(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ if(argc != 4)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+ char* facility = scToBarringFacility(argv[1]);
+ if(facility == NULL) return -1;
+
+ char *password = argv[2];
+ if(strcmp(password, "null") == 0){
+ password = "";
+ }
+
+ int serviceClassX = SERVICE_CLASS_NONE;
+ if (strcmp(facility, CB_FACILITY_BA_FD) == 0) {
+ serviceClassX = SERVICE_CLASS_VOICE + SERVICE_CLASS_DATA + SERVICE_CLASS_FAX;
+ } else if(strcmp(facility, CB_FACILITY_BA_SIM) == 0) {
+ serviceClassX = SERVICE_CLASS_VOICE + SERVICE_CLASS_DATA + SERVICE_CLASS_FAX;
+ } else {
+ serviceClassX = siToServiceClass(argv[3]);
+ }
+ char serviceclass[16] = {0};
+ sprintf(serviceclass, "%d", serviceClassX);
+
+ char* appId = "";
+ if (strcmp(facility, CB_FACILITY_BA_FD) == 0) {
+ appId = getAid(socket_id);
+ } else if(strcmp(facility, CB_FACILITY_BA_SIM) == 0) {
+ appId = getAid(socket_id);
+ }
+
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ p.writeInt32(4);
+ writeStringToParcel(p, facility);
+ writeStringToParcel(p, password);
+ writeStringToParcel(p, serviceclass);
+ writeStringToParcel(p, appId);
+
+ p.setDataPosition(pos);
+
+ pRI->pCI->dispatchFunction(p, pRI);
+ return 0;
+}
+
+
+int setFacilityLockForApp(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI) {
+ RLOGD("setFacilityLockForApp %d: " , pRI->pCI->requestNumber);
+ if(argc != 5)
+ {
+ RLOGD("the peremeters numbers isn't right , so return");
+ return -1;
+ }
+
+
+ char* facility = scToBarringFacility(argv[1]);
+ if(facility == NULL) return -1;
+
+ char *password = argv[2];
+ if(strcmp(password, "null") == 0){
+ password = "";
+ }
+
+ int serviceClassX = SERVICE_CLASS_NONE;
+ if (strcmp(facility, CB_FACILITY_BA_FD) == 0) {
+ serviceClassX = SERVICE_CLASS_VOICE + SERVICE_CLASS_DATA + SERVICE_CLASS_FAX;
+ } else if(strcmp(facility, CB_FACILITY_BA_SIM) == 0) {
+ serviceClassX = SERVICE_CLASS_VOICE + SERVICE_CLASS_DATA + SERVICE_CLASS_FAX;
+ } else {
+ serviceClassX = siToServiceClass(argv[3]);
+ }
+ char serviceclass[16] = {0};
+ sprintf(serviceclass, "%d", serviceClassX);
+
+ char* appId = "";
+ if (strcmp(facility, CB_FACILITY_BA_FD) == 0) {
+ appId = getAid(socket_id);
+ } else if(strcmp(facility, CB_FACILITY_BA_SIM) == 0) {
+ appId = getAid(socket_id);
+ }
+
+
+ const char *lockStrings = argv[4];
+
+ android::Parcel p;
+ size_t pos = p.dataPosition();
+ p.writeInt32(5);
+ writeStringToParcel(p, facility);
+ writeStringToParcel(p, lockStrings);
+ writeStringToParcel(p, password);
+ writeStringToParcel(p, serviceclass);
+ writeStringToParcel(p, appId);
+ p.setDataPosition(pos);
+ pRI->pCI->dispatchFunction(p, pRI);
+
+ return 0;
+}