Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd25329f authored by Taesu Lee's avatar Taesu Lee
Browse files

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: I97f357ffc5fda1b38db0388d0cd46e29ed7d2537
Signed-off-by: default avatarTaesu Lee <taesu82.lee@samsung.com>
parent da49c2c1
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -152,6 +152,12 @@ public class CdmaInboundSmsHandler extends InboundSmsHandler {
                mServiceCategoryProgramHandler.dispatchSmsMessage(sms);
                return Intents.RESULT_SMS_HANDLED;

            case SmsEnvelope.TELESERVICE_FDEA_WAP:
                if (!sms.preprocessCdmaFdeaWap()) {
                    return Intents.RESULT_SMS_HANDLED;
                }
                teleService = SmsEnvelope.TELESERVICE_WAP;
                // fall through
            case SmsEnvelope.TELESERVICE_WAP:
                // handled below, after storage check
                break;
+32 −0
Original line number Diff line number Diff line
@@ -22,9 +22,11 @@ import android.test.suitebuilder.annotation.SmallTest;

import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails;
import com.android.internal.telephony.SmsHeader;
import com.android.internal.telephony.SmsMessageBase;
import com.android.internal.telephony.cdma.SmsMessage;
import com.android.internal.util.HexDump;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;

@@ -1033,4 +1035,34 @@ public class CdmaSmsTest extends AndroidTestCase {
            }
        }
    }

    @SmallTest
    public void testPreprocessFdeaWdpUserData() throws Exception {
        // Refer to https://patents.google.com/patent/CN103906005A/en
        String wdpUserData =
                "0003156D60018103F80008011F805C26B031230B8383634B1B0BA34B7B717BB3732173BB0B81736B" +
                "6B996B6B2B9B9B0B3B2805A43D7C246414C212522A3A522BD31AD3931210046C841B43A3A381D179" +
                "798981719199A1718999B97189897A12522A3A522BD31AD393121004402C081815175C486C018999" +
                "9989B181C9B99991C80454047011AF78";

        SmsMessage cdmaSmsMessage = new SmsMessage();

        Field field = SmsMessageBase.class.getDeclaredField("mUserData");
        field.setAccessible(true);
        field.set(cdmaSmsMessage, HexDump.hexStringToByteArray(wdpUserData));

        BearerData bearerData = new BearerData();
        bearerData.userData = new UserData();

        field = SmsMessage.class.getDeclaredField("mBearerData");
        field.setAccessible(true);
        field.set(cdmaSmsMessage, bearerData);
        bearerData = (BearerData) field.get(cdmaSmsMessage);

        assertTrue(cdmaSmsMessage.preprocessCdmaFdeaWap());
        assertEquals(BearerData.MESSAGE_TYPE_DELIVER, bearerData.messageType);
        assertEquals(0x56D6, bearerData.messageId);
        assertEquals(0x7F, bearerData.userData.numFields);
        assertNotNull(bearerData.userData.payload);
    }
}