summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Taesu Lee <taesu82.lee@samsung.com> 2019-03-07 18:45:34 +0900
committer Taesu Lee <taesu82.lee@samsung.com> 2019-08-28 14:13:46 +0900
commitbc7abc3e5ac101c46dda66c500b504b38b23fbfa (patch)
treed4da7b01376c8ccd0d6e8f34e0f81662044260b3
parentc53985fc51a64346e0a3eb71779b1bbd0b67605b (diff)
Preprocessing Teleservice Id 0xFDEA SMS WAP
The SMS WAP specified Teleservice Id 0xFDEA requires an additional header parsing to extract new Message Identifier and new User Data from WDP SMS User Data. Test: MT MMS in China Telecom N/W and atest CdmaSmsTest Change-Id: I8c0edd53c0da7c5b54fe6aa5a05f5577676383d8 Signed-off-by: Taesu Lee <taesu82.lee@samsung.com>
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/SmsMessage.java83
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/sms/SmsEnvelope.java3
2 files changed, 86 insertions, 0 deletions
diff --git a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
index e2a8913b91e6..ebc98d61547e 100644
--- a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
+++ b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
@@ -678,6 +678,89 @@ public class SmsMessage extends SmsMessageBase {
}
/**
+ * Pre-processes an SMS WAP for Teleservice Id 0xFDEA(65002).
+ *
+ * It requires an additional header parsing to extract new Message Identifier and new User Data
+ * from WDP SMS User Data.
+ *
+ * - WDP SMS User Data Subparameter =
+ * |User Data SUBPARAMETER_ID ~ NUM_FIELDS| + |CHARi| + |RESERVED|
+ *
+ * - WDP SMS User Data Subparameter CHARi =
+ * |New Message Identifier Subparameter(HEADER_IND = 0)| +
+ * |New User Data Subparameter(MSG_ENCODING = ENCODING_OCTET)|
+ *
+ * @return true if preprocessing is successful, false otherwise.
+ */
+ public boolean preprocessCdmaFdeaWap() {
+ try {
+ BitwiseInputStream inStream = new BitwiseInputStream(mUserData);
+
+ // Message Identifier SUBPARAMETER_ID(0x00)
+ if (inStream.read(8) != 0x00) {
+ Rlog.e(LOG_TAG, "Invalid FDEA WDP Header Message Identifier SUBPARAMETER_ID");
+ return false;
+ }
+
+ // Message Identifier SUBPARAM_LEN(0x03)
+ if (inStream.read(8) != 0x03) {
+ Rlog.e(LOG_TAG, "Invalid FDEA WDP Header Message Identifier SUBPARAM_LEN");
+ return false;
+ }
+
+ // Message Identifier MESSAGE_TYPE
+ mBearerData.messageType = inStream.read(4);
+
+ // Message Identifier MESSAGE_ID
+ int msgId = inStream.read(8) << 8;
+ msgId |= inStream.read(8);
+ mBearerData.messageId = msgId;
+ mMessageRef = msgId;
+
+ // Message Identifier HEADER_IND
+ mBearerData.hasUserDataHeader = (inStream.read(1) == 1);
+ if (mBearerData.hasUserDataHeader) {
+ Rlog.e(LOG_TAG, "Invalid FDEA WDP Header Message Identifier HEADER_IND");
+ return false;
+ }
+
+ // Message Identifier RESERVED
+ inStream.skip(3);
+
+ // User Data SUBPARAMETER_ID(0x01)
+ if (inStream.read(8) != 0x01) {
+ Rlog.e(LOG_TAG, "Invalid FDEA WDP Header User Data SUBPARAMETER_ID");
+ return false;
+ }
+
+ // User Data SUBPARAM_LEN
+ int userDataLen = inStream.read(8) * 8;
+
+ // User Data MSG_ENCODING
+ mBearerData.userData.msgEncoding = inStream.read(5);
+ int consumedBits = 5;
+ if (mBearerData.userData.msgEncoding != UserData.ENCODING_OCTET) {
+ Rlog.e(LOG_TAG, "Invalid FDEA WDP Header User Data MSG_ENCODING");
+ return false;
+ }
+
+ // User Data NUM_FIELDS
+ mBearerData.userData.numFields = inStream.read(8);
+ consumedBits += 8;
+
+ int remainingBits = userDataLen - consumedBits;
+ int dataBits = mBearerData.userData.numFields * 8;
+ dataBits = dataBits < remainingBits ? dataBits : remainingBits;
+ mBearerData.userData.payload = inStream.readByteArray(dataBits);
+ mUserData = mBearerData.userData.payload;
+ return true;
+ } catch (BitwiseInputStream.AccessException ex) {
+ Rlog.e(LOG_TAG, "Fail to preprocess FDEA WAP: " + ex);
+ }
+ return false;
+ }
+
+ /**
* Parses a SMS message from its BearerData stream.
*/
public void parseSms() {
diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/SmsEnvelope.java b/telephony/java/com/android/internal/telephony/cdma/sms/SmsEnvelope.java
index de93b573f215..bed2de197435 100644
--- a/telephony/java/com/android/internal/telephony/cdma/sms/SmsEnvelope.java
+++ b/telephony/java/com/android/internal/telephony/cdma/sms/SmsEnvelope.java
@@ -39,6 +39,9 @@ public final class SmsEnvelope {
static public final int TELESERVICE_WEMT = 0x1005;
static public final int TELESERVICE_SCPT = 0x1006;
+ /** Carriers specific Teleservice IDs. */
+ public static final int TELESERVICE_FDEA_WAP = 0xFDEA; // 65002
+
/**
* The following are defined as extensions to the standard teleservices
*/