From 794d2333e520c0159b0f238fec93660e2fb8abf0 Mon Sep 17 00:00:00 2001 From: Amit Mahajan Date: Wed, 13 Aug 2014 16:54:01 +0000 Subject: Revert "Revert "add apn setting parameters, and set apn parameters to bp"" This reverts commit 87540b6318016540030421a5c2bc41b759bf33cd. Change-Id: I7f6043ad55299ecc01cbcadc81c281b133755b86 --- include/telephony/ril.h | 50 +++++++++++++++++++++++++++++++- libril/ril.cpp | 76 +++++++++++++++++++++++++++++++++++++++++++++++++ libril/ril_commands.h | 1 + 3 files changed, 126 insertions(+), 1 deletion(-) diff --git a/include/telephony/ril.h b/include/telephony/ril.h index c78526d..1518d81 100644 --- a/include/telephony/ril.h +++ b/include/telephony/ril.h @@ -1165,6 +1165,40 @@ typedef struct { RIL_DcPowerStates powerState; // Current power state } RIL_DcRtInfo; +/** + * Data profile to modem + */ +typedef struct { + /* id of the data profile */ + int profileId; + /* the APN to connect to */ + char* apn; + /** one of the PDP_type values in TS 27.007 section 10.1.1. + * For example, "IP", "IPV6", "IPV4V6", or "PPP". + */ + char* protocol; + /** authentication protocol used for this PDP context + * (None: 0, PAP: 1, CHAP: 2, PAP&CHAP: 3) + */ + int authType; + /* the username for APN, or NULL */ + char* user; + /* the password for APN, or NULL */ + char* password; + /* the profile type, TYPE_COMMON-0, TYPE_3GPP-1, TYPE_3GPP2-2 */ + int type; + /* the period in seconds to limit the maximum connections */ + int maxConnsTime; + /* the maximum connections during maxConnsTime */ + int maxConns; + /** the required wait time in seconds after a successful UE initiated + * disconnect of a given PDN connection before the device can send + * a new PDN connection request for that given PDN + */ + int waitTime; + /* true to enable the profile, 0 to disable, 1 to enable */ + int enabled; +} RIL_DataProfileInfo; /** * RIL_REQUEST_GET_SIM_STATUS @@ -4020,7 +4054,21 @@ typedef struct { */ #define RIL_REQUEST_SET_DC_RT_INFO_RATE 127 - +/** + * RIL_REQUEST_SET_DATA_PROFILE + * + * Set data profile in modem + * "data" is an const RIL_DataProfileInfo ** + * "datalen" is count * sizeof(const RIL_DataProfileInfo *) + * "response" is NULL + * + * Valid errors: + * SUCCESS + * RADIO_NOT_AVAILABLE (radio resetting) + * GENERIC_FAILURE + * SUBSCRIPTION_NOT_AVAILABLE + */ +#define RIL_REQUEST_SET_DATA_PROFILE 128 /***********************************************************************/ diff --git a/libril/ril.cpp b/libril/ril.cpp index 6b3fc6c..4b3e1b8 100644 --- a/libril/ril.cpp +++ b/libril/ril.cpp @@ -276,6 +276,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 void dispatchDataProfile(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); @@ -1877,6 +1878,80 @@ invalid: return; } +static void dispatchDataProfile(Parcel &p, RequestInfo *pRI) { + int32_t t; + status_t status; + int32_t num; + + status = p.readInt32(&num); + if (status != NO_ERROR) { + goto invalid; + } + + { + RIL_DataProfileInfo dataProfiles[num]; + RIL_DataProfileInfo *dataProfilePtrs[num]; + + startRequest; + for (int i = 0 ; i < num ; i++ ) { + dataProfilePtrs[i] = &dataProfiles[i]; + + status = p.readInt32(&t); + dataProfiles[i].profileId = (int) t; + + dataProfiles[i].apn = strdupReadString(p); + dataProfiles[i].protocol = strdupReadString(p); + status = p.readInt32(&t); + dataProfiles[i].authType = (int) t; + + dataProfiles[i].user = strdupReadString(p); + dataProfiles[i].password = strdupReadString(p); + + status = p.readInt32(&t); + dataProfiles[i].type = (int) t; + + status = p.readInt32(&t); + dataProfiles[i].maxConnsTime = (int) t; + status = p.readInt32(&t); + dataProfiles[i].maxConns = (int) t; + status = p.readInt32(&t); + dataProfiles[i].waitTime = (int) t; + + status = p.readInt32(&t); + dataProfiles[i].enabled = (int) t; + + appendPrintBuf("%s [%d: profileId=%d, apn =%s, protocol =%s, authType =%d, \ + user =%s, password =%s, type =%d, maxConnsTime =%d, maxConns =%d, \ + waitTime =%d, enabled =%d]", printBuf, i, dataProfiles[i].profileId, + dataProfiles[i].apn, dataProfiles[i].protocol, dataProfiles[i].authType, + dataProfiles[i].user, dataProfiles[i].password, dataProfiles[i].type, + dataProfiles[i].maxConnsTime, dataProfiles[i].maxConns, + dataProfiles[i].waitTime, dataProfiles[i].enabled); + } + closeRequest; + printRequest(pRI->token, pRI->pCI->requestNumber); + + if (status != NO_ERROR) { + goto invalid; + } + CALL_ONREQUEST(pRI->pCI->requestNumber, + dataProfilePtrs, + num * sizeof(RIL_DataProfileInfo *), + pRI, pRI->socket_id); + +#ifdef MEMSET_FREED + memset(dataProfiles, 0, num * sizeof(RIL_DataProfileInfo)); + memset(dataProfilePtrs, 0, num * sizeof(RIL_DataProfileInfo *)); +#endif + } + + return; + +invalid: + invalidCommandBlock(pRI); + return; +} + static int blockingWrite(int fd, const void *buffer, size_t len) { size_t writeOffset = 0; @@ -4593,6 +4668,7 @@ requestToString(int request) { case RIL_REQUEST_SIM_AUTHENTICATION: return "SIM_AUTHENTICATION"; case RIL_REQUEST_GET_DC_RT_INFO: return "GET_DC_RT_INFO"; case RIL_REQUEST_SET_DC_RT_INFO_RATE: return "SET_DC_RT_INFO_RATE"; + case RIL_REQUEST_SET_DATA_PROFILE: return "SET_DATA_PROFILE"; case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED"; case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED"; case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED"; diff --git a/libril/ril_commands.h b/libril/ril_commands.h index dfcaf4f..1d96abb 100644 --- a/libril/ril_commands.h +++ b/libril/ril_commands.h @@ -142,3 +142,4 @@ {RIL_REQUEST_SIM_AUTHENTICATION, dispatchSimAuthentication, responseSIM_IO}, {RIL_REQUEST_GET_DC_RT_INFO, dispatchVoid, responseDcRtInfo}, {RIL_REQUEST_SET_DC_RT_INFO_RATE, dispatchInts, responseVoid}, + {RIL_REQUEST_SET_DATA_PROFILE, dispatchDataProfile, responseVoid}, -- cgit v1.2.3