1767a662ecde33c3979bf02b793d392aca0403162Wink Saville/* 2767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Copyright (C) 2008 The Android Open Source Project 3767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 4767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5767a662ecde33c3979bf02b793d392aca0403162Wink Saville * you may not use this file except in compliance with the License. 6767a662ecde33c3979bf02b793d392aca0403162Wink Saville * You may obtain a copy of the License at 7767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 8767a662ecde33c3979bf02b793d392aca0403162Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 9767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 10767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Unless required by applicable law or agreed to in writing, software 11767a662ecde33c3979bf02b793d392aca0403162Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12767a662ecde33c3979bf02b793d392aca0403162Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13767a662ecde33c3979bf02b793d392aca0403162Wink Saville * See the License for the specific language governing permissions and 14767a662ecde33c3979bf02b793d392aca0403162Wink Saville * limitations under the License. 15767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 16767a662ecde33c3979bf02b793d392aca0403162Wink Saville 17767a662ecde33c3979bf02b793d392aca0403162Wink Savillepackage com.android.internal.telephony; 18767a662ecde33c3979bf02b793d392aca0403162Wink Saville 19767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.SmsHeader; 20767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.util.Arrays; 21767a662ecde33c3979bf02b793d392aca0403162Wink Saville 22767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static android.telephony.SmsMessage.MessageClass; 23fdf3b26ba78ed308f45a2c6f79a5f977663ac3c8Wei Huangimport android.provider.Telephony; 24767a662ecde33c3979bf02b793d392aca0403162Wink Saville 25767a662ecde33c3979bf02b793d392aca0403162Wink Saville/** 26767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Base class declaring the specific methods and members for SmsMessage. 27767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@hide} 28767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 29767a662ecde33c3979bf02b793d392aca0403162Wink Savillepublic abstract class SmsMessageBase { 30767a662ecde33c3979bf02b793d392aca0403162Wink Saville private static final String LOG_TAG = "SMS"; 31767a662ecde33c3979bf02b793d392aca0403162Wink Saville 32767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} The address of the SMSC. May be null */ 33767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String scAddress; 34767a662ecde33c3979bf02b793d392aca0403162Wink Saville 35767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} The address of the sender */ 36767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected SmsAddress originatingAddress; 37767a662ecde33c3979bf02b793d392aca0403162Wink Saville 38767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} The message body as a string. May be null if the message isn't text */ 39767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String messageBody; 40767a662ecde33c3979bf02b793d392aca0403162Wink Saville 41767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} */ 42767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String pseudoSubject; 43767a662ecde33c3979bf02b793d392aca0403162Wink Saville 44767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} Non-null if this is an email gateway message */ 45767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String emailFrom; 46767a662ecde33c3979bf02b793d392aca0403162Wink Saville 47767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} Non-null if this is an email gateway message */ 48767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String emailBody; 49767a662ecde33c3979bf02b793d392aca0403162Wink Saville 50767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} */ 51767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected boolean isEmail; 52767a662ecde33c3979bf02b793d392aca0403162Wink Saville 53767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} */ 54767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected long scTimeMillis; 55767a662ecde33c3979bf02b793d392aca0403162Wink Saville 56767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} The raw PDU of the message */ 57767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected byte[] mPdu; 58767a662ecde33c3979bf02b793d392aca0403162Wink Saville 59767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} The raw bytes for the user data section of the message */ 60767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected byte[] userData; 61767a662ecde33c3979bf02b793d392aca0403162Wink Saville 62767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} */ 63767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected SmsHeader userDataHeader; 64767a662ecde33c3979bf02b793d392aca0403162Wink Saville 65767a662ecde33c3979bf02b793d392aca0403162Wink Saville // "Message Waiting Indication Group" 66767a662ecde33c3979bf02b793d392aca0403162Wink Saville // 23.038 Section 4 67767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} */ 68767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected boolean isMwi; 69767a662ecde33c3979bf02b793d392aca0403162Wink Saville 70767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} */ 71767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected boolean mwiSense; 72767a662ecde33c3979bf02b793d392aca0403162Wink Saville 73767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** {@hide} */ 74767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected boolean mwiDontStore; 75767a662ecde33c3979bf02b793d392aca0403162Wink Saville 76767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 77767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Indicates status for messages stored on the ICC. 78767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 79767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected int statusOnIcc = -1; 80767a662ecde33c3979bf02b793d392aca0403162Wink Saville 81767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 82767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Record index of message in the EF. 83767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 84767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected int indexOnIcc = -1; 85767a662ecde33c3979bf02b793d392aca0403162Wink Saville 86767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** TP-Message-Reference - Message Reference of sent message. @hide */ 87767a662ecde33c3979bf02b793d392aca0403162Wink Saville public int messageRef; 88767a662ecde33c3979bf02b793d392aca0403162Wink Saville 89fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink /** 90fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink * For a specific text string, this object describes protocol 91fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink * properties of encoding it for transmission as message user 92fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink * data. 93fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink */ 94fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink public static class TextEncodingDetails { 95fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink /** 96fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink *The number of SMS's required to encode the text. 97fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink */ 98fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink public int msgCount; 99fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink 100fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink /** 101fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink * The number of code units consumed so far, where code units 102fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink * are basically characters in the encoding -- for example, 103fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink * septets for the standard ASCII and GSM encodings, and 16 104fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink * bits for Unicode. 105fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink */ 106fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink public int codeUnitCount; 107fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink 108fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink /** 109fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink * How many code units are still available without spilling 110fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink * into an additional message. 111fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink */ 112fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink public int codeUnitsRemaining; 113fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink 114fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink /** 115fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink * The encoding code unit size (specified using 116fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink * android.telephony.SmsMessage ENCODING_*). 117fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink */ 118fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink public int codeUnitSize; 11995434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink 120b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby /** 121b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby * The GSM national language table to use, or 0 for the default 7-bit alphabet. 122b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby */ 123b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby public int languageTable; 124b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby 125b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby /** 126b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby * The GSM national language shift table to use, or 0 for the default 7-bit extension table. 127b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby */ 128b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby public int languageShiftTable; 129b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby 13095434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink @Override 13195434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink public String toString() { 13295434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink return "TextEncodingDetails " + 13395434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink "{ msgCount=" + msgCount + 13495434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink ", codeUnitCount=" + codeUnitCount + 13595434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink ", codeUnitsRemaining=" + codeUnitsRemaining + 13695434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink ", codeUnitSize=" + codeUnitSize + 137b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby ", languageTable=" + languageTable + 138b49a73dfc4c9817bba1f227e9330555acdf9b56fJake Hamby ", languageShiftTable=" + languageShiftTable + 13995434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink " }"; 14095434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink } 141fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink } 142fc78f358cb1d1cee99758bcd6ef998a122ef27c9Tammo Spalink 1430da3bdb476086db02a1076780676b21e239c79d6Jaikumar Ganesh // TODO(): This class is duplicated in SmsMessage.java. Refactor accordingly. 144767a662ecde33c3979bf02b793d392aca0403162Wink Saville public static abstract class SubmitPduBase { 145767a662ecde33c3979bf02b793d392aca0403162Wink Saville public byte[] encodedScAddress; // Null if not applicable. 146767a662ecde33c3979bf02b793d392aca0403162Wink Saville public byte[] encodedMessage; 147767a662ecde33c3979bf02b793d392aca0403162Wink Saville 148767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String toString() { 149767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "SubmitPdu: encodedScAddress = " 150767a662ecde33c3979bf02b793d392aca0403162Wink Saville + Arrays.toString(encodedScAddress) 151767a662ecde33c3979bf02b793d392aca0403162Wink Saville + ", encodedMessage = " 152767a662ecde33c3979bf02b793d392aca0403162Wink Saville + Arrays.toString(encodedMessage); 153767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 154767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 155767a662ecde33c3979bf02b793d392aca0403162Wink Saville 156767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 157767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the address of the SMS service center that relayed this message 158767a662ecde33c3979bf02b793d392aca0403162Wink Saville * or null if there is none. 159767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 160767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getServiceCenterAddress() { 161767a662ecde33c3979bf02b793d392aca0403162Wink Saville return scAddress; 162767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 163767a662ecde33c3979bf02b793d392aca0403162Wink Saville 164767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 165767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the originating address (sender) of this SMS message in String 166767a662ecde33c3979bf02b793d392aca0403162Wink Saville * form or null if unavailable 167767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 168767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getOriginatingAddress() { 169767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (originatingAddress == null) { 170767a662ecde33c3979bf02b793d392aca0403162Wink Saville return null; 171767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 172767a662ecde33c3979bf02b793d392aca0403162Wink Saville 173767a662ecde33c3979bf02b793d392aca0403162Wink Saville return originatingAddress.getAddressString(); 174767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 175767a662ecde33c3979bf02b793d392aca0403162Wink Saville 176767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 177767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the originating address, or email from address if this message 178767a662ecde33c3979bf02b793d392aca0403162Wink Saville * was from an email gateway. Returns null if originating address 179767a662ecde33c3979bf02b793d392aca0403162Wink Saville * unavailable. 180767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 181767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getDisplayOriginatingAddress() { 182767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (isEmail) { 183767a662ecde33c3979bf02b793d392aca0403162Wink Saville return emailFrom; 184767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 185767a662ecde33c3979bf02b793d392aca0403162Wink Saville return getOriginatingAddress(); 186767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 187767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 188767a662ecde33c3979bf02b793d392aca0403162Wink Saville 189767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 190767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the message body as a String, if it exists and is text based. 191767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @return message body is there is one, otherwise null 192767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 193767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getMessageBody() { 194767a662ecde33c3979bf02b793d392aca0403162Wink Saville return messageBody; 195767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 196767a662ecde33c3979bf02b793d392aca0403162Wink Saville 197767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 198767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the class of this message. 199767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 200767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract MessageClass getMessageClass(); 201767a662ecde33c3979bf02b793d392aca0403162Wink Saville 202767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 203767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the message body, or email message body if this message was from 204767a662ecde33c3979bf02b793d392aca0403162Wink Saville * an email gateway. Returns null if message body unavailable. 205767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 206767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getDisplayMessageBody() { 207767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (isEmail) { 208767a662ecde33c3979bf02b793d392aca0403162Wink Saville return emailBody; 209767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 210767a662ecde33c3979bf02b793d392aca0403162Wink Saville return getMessageBody(); 211767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 212767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 213767a662ecde33c3979bf02b793d392aca0403162Wink Saville 214767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 215767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Unofficial convention of a subject line enclosed in parens empty string 216767a662ecde33c3979bf02b793d392aca0403162Wink Saville * if not present 217767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 218767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getPseudoSubject() { 219767a662ecde33c3979bf02b793d392aca0403162Wink Saville return pseudoSubject == null ? "" : pseudoSubject; 220767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 221767a662ecde33c3979bf02b793d392aca0403162Wink Saville 222767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 223767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the service centre timestamp in currentTimeMillis() format 224767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 225767a662ecde33c3979bf02b793d392aca0403162Wink Saville public long getTimestampMillis() { 226767a662ecde33c3979bf02b793d392aca0403162Wink Saville return scTimeMillis; 227767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 228767a662ecde33c3979bf02b793d392aca0403162Wink Saville 229767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 230767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns true if message is an email. 231767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 232767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @return true if this message came through an email gateway and email 233767a662ecde33c3979bf02b793d392aca0403162Wink Saville * sender / subject / parsed body are available 234767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 235767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean isEmail() { 236767a662ecde33c3979bf02b793d392aca0403162Wink Saville return isEmail; 237767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 238767a662ecde33c3979bf02b793d392aca0403162Wink Saville 239767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 240767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @return if isEmail() is true, body of the email sent through the gateway. 241767a662ecde33c3979bf02b793d392aca0403162Wink Saville * null otherwise 242767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 243767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getEmailBody() { 244767a662ecde33c3979bf02b793d392aca0403162Wink Saville return emailBody; 245767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 246767a662ecde33c3979bf02b793d392aca0403162Wink Saville 247767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 248767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @return if isEmail() is true, email from address of email sent through 249767a662ecde33c3979bf02b793d392aca0403162Wink Saville * the gateway. null otherwise 250767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 251767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getEmailFrom() { 252767a662ecde33c3979bf02b793d392aca0403162Wink Saville return emailFrom; 253767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 254767a662ecde33c3979bf02b793d392aca0403162Wink Saville 255767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 256767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Get protocol identifier. 257767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 258767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract int getProtocolIdentifier(); 259767a662ecde33c3979bf02b793d392aca0403162Wink Saville 260767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 261767a662ecde33c3979bf02b793d392aca0403162Wink Saville * See TS 23.040 9.2.3.9 returns true if this is a "replace short message" 262767a662ecde33c3979bf02b793d392aca0403162Wink Saville * SMS 263767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 264767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract boolean isReplace(); 265767a662ecde33c3979bf02b793d392aca0403162Wink Saville 266767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 267767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns true for CPHS MWI toggle message. 268767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 269767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @return true if this is a CPHS MWI toggle message See CPHS 4.2 section 270767a662ecde33c3979bf02b793d392aca0403162Wink Saville * B.4.2 271767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 272767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract boolean isCphsMwiMessage(); 273767a662ecde33c3979bf02b793d392aca0403162Wink Saville 274767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 275767a662ecde33c3979bf02b793d392aca0403162Wink Saville * returns true if this message is a CPHS voicemail / message waiting 276767a662ecde33c3979bf02b793d392aca0403162Wink Saville * indicator (MWI) clear message 277767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 278767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract boolean isMWIClearMessage(); 279767a662ecde33c3979bf02b793d392aca0403162Wink Saville 280767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 281767a662ecde33c3979bf02b793d392aca0403162Wink Saville * returns true if this message is a CPHS voicemail / message waiting 282767a662ecde33c3979bf02b793d392aca0403162Wink Saville * indicator (MWI) set message 283767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 284767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract boolean isMWISetMessage(); 285767a662ecde33c3979bf02b793d392aca0403162Wink Saville 286767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 287767a662ecde33c3979bf02b793d392aca0403162Wink Saville * returns true if this message is a "Message Waiting Indication Group: 288767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Discard Message" notification and should not be stored. 289767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 290767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract boolean isMwiDontStore(); 291767a662ecde33c3979bf02b793d392aca0403162Wink Saville 292767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 293767a662ecde33c3979bf02b793d392aca0403162Wink Saville * returns the user data section minus the user data header if one was 294767a662ecde33c3979bf02b793d392aca0403162Wink Saville * present. 295767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 296767a662ecde33c3979bf02b793d392aca0403162Wink Saville public byte[] getUserData() { 297767a662ecde33c3979bf02b793d392aca0403162Wink Saville return userData; 298767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 299767a662ecde33c3979bf02b793d392aca0403162Wink Saville 300767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 301767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns an object representing the user data header 302767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 303767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@hide} 304767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 305767a662ecde33c3979bf02b793d392aca0403162Wink Saville public SmsHeader getUserDataHeader() { 306767a662ecde33c3979bf02b793d392aca0403162Wink Saville return userDataHeader; 307767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 308767a662ecde33c3979bf02b793d392aca0403162Wink Saville 309767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 31064c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink * TODO(cleanup): The term PDU is used in a seemingly non-unique 31164c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink * manner -- for example, what is the difference between this byte 31264c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink * array and the contents of SubmitPdu objects. Maybe a more 31364c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink * illustrative term would be appropriate. 31464c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink */ 31564c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink 31664c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink /** 317767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the raw PDU for the message. 318767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 319767a662ecde33c3979bf02b793d392aca0403162Wink Saville public byte[] getPdu() { 320767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mPdu; 321767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 322767a662ecde33c3979bf02b793d392aca0403162Wink Saville 323767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 324767a662ecde33c3979bf02b793d392aca0403162Wink Saville * For an SMS-STATUS-REPORT message, this returns the status field from 325767a662ecde33c3979bf02b793d392aca0403162Wink Saville * the status report. This field indicates the status of a previously 326767a662ecde33c3979bf02b793d392aca0403162Wink Saville * submitted SMS, if requested. See TS 23.040, 9.2.3.15 TP-Status for a 327767a662ecde33c3979bf02b793d392aca0403162Wink Saville * description of values. 328767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 329767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @return 0 indicates the previously sent message was received. 330767a662ecde33c3979bf02b793d392aca0403162Wink Saville * See TS 23.040, 9.9.2.3.15 for a description of other possible 331767a662ecde33c3979bf02b793d392aca0403162Wink Saville * values. 332767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 333767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract int getStatus(); 334767a662ecde33c3979bf02b793d392aca0403162Wink Saville 335767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 336767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Return true iff the message is a SMS-STATUS-REPORT message. 337767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 338767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract boolean isStatusReportMessage(); 339767a662ecde33c3979bf02b793d392aca0403162Wink Saville 340767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 341767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns true iff the <code>TP-Reply-Path</code> bit is set in 342767a662ecde33c3979bf02b793d392aca0403162Wink Saville * this message. 343767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 344767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract boolean isReplyPathPresent(); 345767a662ecde33c3979bf02b793d392aca0403162Wink Saville 346767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 347767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the status of the message on the ICC (read, unread, sent, unsent). 348767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 349767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @return the status of the message on the ICC. These are: 350767a662ecde33c3979bf02b793d392aca0403162Wink Saville * SmsManager.STATUS_ON_ICC_FREE 351767a662ecde33c3979bf02b793d392aca0403162Wink Saville * SmsManager.STATUS_ON_ICC_READ 352767a662ecde33c3979bf02b793d392aca0403162Wink Saville * SmsManager.STATUS_ON_ICC_UNREAD 353767a662ecde33c3979bf02b793d392aca0403162Wink Saville * SmsManager.STATUS_ON_ICC_SEND 354767a662ecde33c3979bf02b793d392aca0403162Wink Saville * SmsManager.STATUS_ON_ICC_UNSENT 355767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 356767a662ecde33c3979bf02b793d392aca0403162Wink Saville public int getStatusOnIcc() { 357767a662ecde33c3979bf02b793d392aca0403162Wink Saville return statusOnIcc; 358767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 359767a662ecde33c3979bf02b793d392aca0403162Wink Saville 360767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 361767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the record index of the message on the ICC (1-based index). 362767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @return the record index of the message on the ICC, or -1 if this 363767a662ecde33c3979bf02b793d392aca0403162Wink Saville * SmsMessage was not created from a ICC SMS EF record. 364767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 365767a662ecde33c3979bf02b793d392aca0403162Wink Saville public int getIndexOnIcc() { 366767a662ecde33c3979bf02b793d392aca0403162Wink Saville return indexOnIcc; 367767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 368767a662ecde33c3979bf02b793d392aca0403162Wink Saville 369767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected void parseMessageBody() { 370faf4413dffdc9079683b951736088ff2a01073a4jsh // originatingAddress could be null if this message is from a status 371faf4413dffdc9079683b951736088ff2a01073a4jsh // report. 372faf4413dffdc9079683b951736088ff2a01073a4jsh if (originatingAddress != null && originatingAddress.couldBeEmailGateway()) { 373767a662ecde33c3979bf02b793d392aca0403162Wink Saville extractEmailAddressFromMessageBody(); 374767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 375767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 376767a662ecde33c3979bf02b793d392aca0403162Wink Saville 377767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 378daccacb865947c00f277f1823333e2fbf91e652aWink Saville * Try to parse this message as an email gateway message 379daccacb865947c00f277f1823333e2fbf91e652aWink Saville * There are two ways specified in TS 23.040 Section 3.8 : 380145ff609de3206b585819ef974fab20cdc2d9f5eJake Hamby * - SMS message "may have its TP-PID set for Internet electronic mail - MT 381767a662ecde33c3979bf02b793d392aca0403162Wink Saville * SMS format: [<from-address><space>]<message> - "Depending on the 382767a662ecde33c3979bf02b793d392aca0403162Wink Saville * nature of the gateway, the destination/origination address is either 383767a662ecde33c3979bf02b793d392aca0403162Wink Saville * derived from the content of the SMS TP-OA or TP-DA field, or the 384767a662ecde33c3979bf02b793d392aca0403162Wink Saville * TP-OA/TP-DA field contains a generic gateway address and the to/from 385daccacb865947c00f277f1823333e2fbf91e652aWink Saville * address is added at the beginning as shown above." (which is supported here) 386145ff609de3206b585819ef974fab20cdc2d9f5eJake Hamby * - Multiple addresses separated by commas, no spaces, Subject field delimited 387daccacb865947c00f277f1823333e2fbf91e652aWink Saville * by '()' or '##' and '#' Section 9.2.3.24.11 (which are NOT supported here) 388767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 389767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected void extractEmailAddressFromMessageBody() { 390767a662ecde33c3979bf02b793d392aca0403162Wink Saville 391daccacb865947c00f277f1823333e2fbf91e652aWink Saville /* Some carriers may use " /" delimiter as below 392767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 393767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 1. [x@y][ ]/[subject][ ]/[body] 394767a662ecde33c3979bf02b793d392aca0403162Wink Saville * -or- 395767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 2. [x@y][ ]/[body] 396767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 397bd55b0cb156280f44e82c50e02f9a07d6b528dcdSatish Roddom String[] parts = messageBody.split("( /)|( )", 2); 398001d0abd3e523dce5c8a4c14e22bd1ea79976f03jsh if (parts.length < 2) return; 399daccacb865947c00f277f1823333e2fbf91e652aWink Saville emailFrom = parts[0]; 400bd55b0cb156280f44e82c50e02f9a07d6b528dcdSatish Roddom emailBody = parts[1]; 401fdf3b26ba78ed308f45a2c6f79a5f977663ac3c8Wei Huang isEmail = Telephony.Mms.isEmailAddress(emailFrom); 402767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 403767a662ecde33c3979bf02b793d392aca0403162Wink Saville 404767a662ecde33c3979bf02b793d392aca0403162Wink Saville} 405