diff options
author | Wink Saville <wink@google.com> | 2009-12-22 15:35:41 -0800 |
---|---|---|
committer | Wink Saville <wink@google.com> | 2009-12-22 15:35:41 -0800 |
commit | 74fa38884320698c1623764850e3131b9769dff0 (patch) | |
tree | d632c43fd96f9d022b15454f435e763c6aadd2f2 /libril | |
parent | 8ebaff8bec727eab4cdc2ae3090dde9465a16081 (diff) | |
download | android_hardware_ril-74fa38884320698c1623764850e3131b9769dff0.tar.gz android_hardware_ril-74fa38884320698c1623764850e3131b9769dff0.tar.bz2 android_hardware_ril-74fa38884320698c1623764850e3131b9769dff0.zip |
ril interface: Add support for User-User Signaling Information during call setup
Define the UUS data structures and add a pointer to it in RIL_Call for
MT Calls and RIL_Dial for MO calls. UUS information can be used to pass
the skypeId on some networks. Make the corresponding changes to
serialize and deserialize the data at the RIL interface.
Change-Id: Ibbd471cd062910fd4c365f76e809cfb224bd34a2
Diffstat (limited to 'libril')
-rw-r--r-- | libril/ril.cpp | 64 |
1 files changed, 61 insertions, 3 deletions
diff --git a/libril/ril.cpp b/libril/ril.cpp index 6f36b8d..8a93a54 100644 --- a/libril/ril.cpp +++ b/libril/ril.cpp @@ -570,7 +570,9 @@ invalid: static void dispatchDial (Parcel &p, RequestInfo *pRI) { RIL_Dial dial; + RIL_UUS_Info uusInfo; int32_t t; + int32_t uusPresent; status_t status; memset (&dial, 0, sizeof(dial)); @@ -584,8 +586,53 @@ dispatchDial (Parcel &p, RequestInfo *pRI) { goto invalid; } + if (s_callbacks.version < 3) { // STOP_SHIP: Remove when partners upgrade to version 3 + uusPresent = 0; + } else { + status = p.readInt32(&uusPresent); + + if (status != NO_ERROR) { + goto invalid; + } + + if (uusPresent == 0) { + dial.uusInfo = NULL; + } else { + int32_t len; + + memset(&uusInfo, 0, sizeof(RIL_UUS_Info)); + + status = p.readInt32(&t); + uusInfo.uusType = (RIL_UUS_Type) t; + + status = p.readInt32(&t); + uusInfo.uusDcs = (RIL_UUS_DCS) t; + + status = p.readInt32(&len); + if (status != NO_ERROR) { + goto invalid; + } + + // The java code writes -1 for null arrays + if (((int) len) == -1) { + uusInfo.uusData = NULL; + len = 0; + } else { + uusInfo.uusData = (char*) p.readInplace(len); + } + + uusInfo.uusLength = len; + dial.uusInfo = &uusInfo; + } + } + startRequest; appendPrintBuf("%snum=%s,clir=%d", printBuf, dial.address, dial.clir); + if (uusPresent) { + appendPrintBuf("%s,uusType=%d,uusDcs=%d,uusLen=%d", printBuf, + dial.uusInfo->uusType, dial.uusInfo->uusDcs, + dial.uusInfo->uusLength); + } closeRequest; printRequest(pRI->token, pRI->pCI->requestNumber); @@ -598,6 +645,7 @@ dispatchDial (Parcel &p, RequestInfo *pRI) { free (dial.address); #ifdef MEMSET_FREED + memset(&uusInfo, 0, sizeof(RIL_UUS_Info)); memset(&dial, 0, sizeof(dial)); #endif @@ -1323,6 +1371,17 @@ static int responseCallList(Parcel &p, void *response, size_t responselen) { p.writeInt32(p_cur->numberPresentation); writeStringToParcel(p, p_cur->name); p.writeInt32(p_cur->namePresentation); + // STOP_SHIP: Remove when partners upgrade to version 3 + if ((s_callbacks.version < 3) || (p_cur->uusInfo == NULL || p_cur->uusInfo->uusData == NULL)) { + p.writeInt32(0); /* UUS Information is absent */ + } else { + RIL_UUS_Info *uusInfo = p_cur->uusInfo; + p.writeInt32(1); /* UUS Information is present */ + p.writeInt32(uusInfo->uusType); + p.writeInt32(uusInfo->uusDcs); + p.writeInt32(uusInfo->uusLength); + p.write(uusInfo->uusData, uusInfo->uusLength); + } appendPrintBuf("%s[id=%d,%s,toa=%d,", printBuf, p_cur->index, @@ -2463,9 +2522,8 @@ RIL_register (const RIL_RadioFunctions *callbacks) { int ret; int flags; - if (callbacks == NULL - || ! (callbacks->version == RIL_VERSION || callbacks->version == 1) - ) { + if (callbacks == NULL || ((callbacks->version != RIL_VERSION) + && (callbacks->version != 2))) } // STOP_SHIP: Remove when partners upgrade to version 3 LOGE( "RIL_register: RIL_RadioFunctions * null or invalid version" " (expected %d)", RIL_VERSION); |