|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 MARIONETTE_TIMEOUT = 60000; |
|
5 MARIONETTE_HEAD_JS = 'head.js'; |
|
6 |
|
7 const PDU_SMSC_NONE = "00"; // no SMSC Address |
|
8 |
|
9 const PDU_FIRST_OCTET = "40"; // RP:no, UDHI:yes, SRI:no, MMS:no, MTI:SMS-DELIVER |
|
10 |
|
11 const PDU_SENDER = "0A912143658709"; // +1234567890 |
|
12 const SENDER = "+1234567890"; |
|
13 |
|
14 const PDU_PID_NORMAL = "00"; |
|
15 |
|
16 const PDU_DCS_NORMAL_UCS2 = "08"; |
|
17 const PDU_DCS_CLASS0_UCS2 = "18"; |
|
18 const PDU_DCS_NORMAL_8BIT = "04"; |
|
19 const PDU_DCS_CLASS0_8BIT = "14"; |
|
20 |
|
21 const PDU_TIMESTAMP = "00101000000000"; // 2000/01/01 |
|
22 |
|
23 function byteValueToHexString(aValue) { |
|
24 let str = Number(aValue).toString(16).toUpperCase(); |
|
25 return str.length == 1 ? "0" + str : str; |
|
26 } |
|
27 |
|
28 let ref_num = 0; |
|
29 function buildTextPdus(aDcs) { |
|
30 ref_num++; |
|
31 |
|
32 let IEI_CONCATE_1 = "0003" + byteValueToHexString(ref_num) + "0301"; |
|
33 let IEI_CONCATE_2 = "0003" + byteValueToHexString(ref_num) + "0302"; |
|
34 let IEI_CONCATE_3 = "0003" + byteValueToHexString(ref_num) + "0303"; |
|
35 let PDU_UDL = "08"; // UDHL(1) + UDH(5) + UCS2 Char (2) |
|
36 let PDU_UDHL = "05"; |
|
37 |
|
38 let PDU_UD_A = "0041"; // "A" |
|
39 let PDU_UD_B = "0042"; // "B" |
|
40 let PDU_UD_C = "0043"; // "C" |
|
41 |
|
42 let PDU_COMMON = PDU_SMSC_NONE + PDU_FIRST_OCTET + PDU_SENDER + |
|
43 PDU_PID_NORMAL + aDcs + PDU_TIMESTAMP + PDU_UDL + PDU_UDHL; |
|
44 |
|
45 return [ |
|
46 PDU_COMMON + IEI_CONCATE_1 + PDU_UD_A, |
|
47 PDU_COMMON + IEI_CONCATE_2 + PDU_UD_B, |
|
48 PDU_COMMON + IEI_CONCATE_3 + PDU_UD_C |
|
49 ]; |
|
50 } |
|
51 |
|
52 function buildBinaryPdus(aDcs) { |
|
53 ref_num++; |
|
54 let IEI_PORT = "05040B8423F0"; |
|
55 |
|
56 let PDU_DATA1 = "C106316170706C69636174696F6E2F76" + |
|
57 "6E642E7761702E6D6D732D6D65737361" + |
|
58 "676500B131302E382E3133302E313800" + |
|
59 "AF84B4818C82986B4430595538595347" + |
|
60 "77464E446741416B4876736C58303141" + |
|
61 "41414141414141008D90890380310096" + |
|
62 "05EA4D4D53008A808E02024188058103" + |
|
63 "015F9083687474703A2F2F6D6D732E65"; |
|
64 |
|
65 let PDU_DATA2 = "6D6F6D652E6E65743A383030322F6B44" + |
|
66 "3059553859534777464E446741416B48" + |
|
67 "76736C583031414141414141414100"; |
|
68 |
|
69 let PDU_COMMON = PDU_SMSC_NONE + PDU_FIRST_OCTET + PDU_SENDER + |
|
70 PDU_PID_NORMAL + aDcs + PDU_TIMESTAMP; |
|
71 |
|
72 function construstBinaryUserData(aBinaryData, aSeqNum) { |
|
73 let ieiConcat = "0003" + byteValueToHexString(ref_num) + "02" + |
|
74 byteValueToHexString(aSeqNum); |
|
75 |
|
76 let udh = IEI_PORT + ieiConcat; |
|
77 let udhl = byteValueToHexString(udh.length / 2); |
|
78 let ud = udhl + udh + aBinaryData; |
|
79 let udl = byteValueToHexString(ud.length / 2); |
|
80 |
|
81 return udl + ud; |
|
82 } |
|
83 |
|
84 return [ |
|
85 PDU_COMMON + construstBinaryUserData(PDU_DATA1, 1), |
|
86 PDU_COMMON + construstBinaryUserData(PDU_DATA2, 2) |
|
87 ]; |
|
88 } |
|
89 |
|
90 function verifyTextMessage(aMessage, aMessageClass) { |
|
91 is(aMessage.messageClass, aMessageClass, "SmsMessage class"); |
|
92 is(aMessage.sender, SENDER, "SmsMessage sender"); |
|
93 is(aMessage.body, "ABC", "SmsMessage body"); |
|
94 } |
|
95 |
|
96 function verifyBinaryMessage(aMessage) { |
|
97 is(aMessage.type, "mms", "MmsMessage type"); |
|
98 is(aMessage.delivery, "not-downloaded", "MmsMessage delivery"); |
|
99 |
|
100 // remove duplicated M-Notification.ind for next test. |
|
101 return deleteMessagesById([aMessage.id]); |
|
102 } |
|
103 |
|
104 function testText(aDcs, aClass) { |
|
105 log("testText(): aDcs = " + aDcs + ", aClass = " + aClass); |
|
106 return sendMultipleRawSmsToEmulatorAndWait(buildTextPdus(aDcs)) |
|
107 .then((results) => verifyTextMessage(results[0].message, aClass)); |
|
108 } |
|
109 |
|
110 function testBinary(aDcs) { |
|
111 log("testBinary(): aDcs = " + aDcs); |
|
112 return sendMultipleRawSmsToEmulatorAndWait(buildBinaryPdus(aDcs)) |
|
113 .then((results) => verifyBinaryMessage(results[0].message)); |
|
114 } |
|
115 |
|
116 SpecialPowers.pushPrefEnv( |
|
117 {"set": [["dom.mms.retrieval_mode", "manual"]]}, |
|
118 function startTest() { |
|
119 startTestCommon(function testCaseMain() { |
|
120 return Promise.resolve() |
|
121 .then(() => testText(PDU_DCS_NORMAL_UCS2, "normal")) |
|
122 .then(() => testText(PDU_DCS_CLASS0_UCS2, "class-0")) |
|
123 .then(() => testBinary(PDU_DCS_NORMAL_8BIT)) |
|
124 .then(() => testBinary(PDU_DCS_CLASS0_8BIT)); |
|
125 }); |
|
126 } |
|
127 ); |