1 /* 2 * Copyright (C) 2007-2008 Esmertec AG. 3 * Copyright (C) 2007-2008 The Android Open Source Project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package com.example.android.mmslib.pdu; 19 20 import android.util.Log; 21 22 import com.example.android.mmslib.InvalidHeaderValueException; 23 24 public class SendReq extends MultimediaMessagePdu { 25 private static final String TAG = "SendReq"; 26 SendReq()27 public SendReq() { 28 super(); 29 30 try { 31 setMessageType(PduHeaders.MESSAGE_TYPE_SEND_REQ); 32 setMmsVersion(PduHeaders.CURRENT_MMS_VERSION); 33 // FIXME: Content-type must be decided according to whether 34 // SMIL part present. 35 setContentType("application/vnd.wap.multipart.related".getBytes()); 36 setFrom(new EncodedStringValue(PduHeaders.FROM_INSERT_ADDRESS_TOKEN_STR.getBytes())); 37 setTransactionId(generateTransactionId()); 38 } catch (InvalidHeaderValueException e) { 39 // Impossible to reach here since all headers we set above are valid. 40 Log.e(TAG, "Unexpected InvalidHeaderValueException.", e); 41 throw new RuntimeException(e); 42 } 43 } 44 generateTransactionId()45 private byte[] generateTransactionId() { 46 String transactionId = "T" + Long.toHexString(System.currentTimeMillis()); 47 return transactionId.getBytes(); 48 } 49 50 /** 51 * Constructor, used when composing a M-Send.req pdu. 52 * 53 * @param contentType the content type value 54 * @param from the from value 55 * @param mmsVersion current viersion of mms 56 * @param transactionId the transaction-id value 57 * @throws InvalidHeaderValueException if parameters are invalid. 58 * NullPointerException if contentType, form or transactionId is null. 59 */ SendReq(byte[] contentType, EncodedStringValue from, int mmsVersion, byte[] transactionId)60 public SendReq(byte[] contentType, 61 EncodedStringValue from, 62 int mmsVersion, 63 byte[] transactionId) throws InvalidHeaderValueException { 64 super(); 65 setMessageType(PduHeaders.MESSAGE_TYPE_SEND_REQ); 66 setContentType(contentType); 67 setFrom(from); 68 setMmsVersion(mmsVersion); 69 setTransactionId(transactionId); 70 } 71 72 /** 73 * Constructor with given headers. 74 * 75 * @param headers Headers for this PDU. 76 */ SendReq(PduHeaders headers)77 SendReq(PduHeaders headers) { 78 super(headers); 79 } 80 81 /** 82 * Constructor with given headers and body 83 * 84 * @param headers Headers for this PDU. 85 * @param body Body of this PDu. 86 */ SendReq(PduHeaders headers, PduBody body)87 SendReq(PduHeaders headers, PduBody body) { 88 super(headers, body); 89 } 90 91 /** 92 * Get Bcc value. 93 * 94 * @return the value 95 */ getBcc()96 public EncodedStringValue[] getBcc() { 97 return mPduHeaders.getEncodedStringValues(PduHeaders.BCC); 98 } 99 100 /** 101 * Add a "BCC" value. 102 * 103 * @param value the value 104 * @throws NullPointerException if the value is null. 105 */ addBcc(EncodedStringValue value)106 public void addBcc(EncodedStringValue value) { 107 mPduHeaders.appendEncodedStringValue(value, PduHeaders.BCC); 108 } 109 110 /** 111 * Set "BCC" value. 112 * 113 * @param value the value 114 * @throws NullPointerException if the value is null. 115 */ setBcc(EncodedStringValue[] value)116 public void setBcc(EncodedStringValue[] value) { 117 mPduHeaders.setEncodedStringValues(value, PduHeaders.BCC); 118 } 119 120 /** 121 * Get CC value. 122 * 123 * @return the value 124 */ getCc()125 public EncodedStringValue[] getCc() { 126 return mPduHeaders.getEncodedStringValues(PduHeaders.CC); 127 } 128 129 /** 130 * Add a "CC" value. 131 * 132 * @param value the value 133 * @throws NullPointerException if the value is null. 134 */ addCc(EncodedStringValue value)135 public void addCc(EncodedStringValue value) { 136 mPduHeaders.appendEncodedStringValue(value, PduHeaders.CC); 137 } 138 139 /** 140 * Set "CC" value. 141 * 142 * @param value the value 143 * @throws NullPointerException if the value is null. 144 */ setCc(EncodedStringValue[] value)145 public void setCc(EncodedStringValue[] value) { 146 mPduHeaders.setEncodedStringValues(value, PduHeaders.CC); 147 } 148 149 /** 150 * Get Content-type value. 151 * 152 * @return the value 153 */ getContentType()154 public byte[] getContentType() { 155 return mPduHeaders.getTextString(PduHeaders.CONTENT_TYPE); 156 } 157 158 /** 159 * Set Content-type value. 160 * 161 * @param value the value 162 * @throws NullPointerException if the value is null. 163 */ setContentType(byte[] value)164 public void setContentType(byte[] value) { 165 mPduHeaders.setTextString(value, PduHeaders.CONTENT_TYPE); 166 } 167 168 /** 169 * Get X-Mms-Delivery-Report value. 170 * 171 * @return the value 172 */ getDeliveryReport()173 public int getDeliveryReport() { 174 return mPduHeaders.getOctet(PduHeaders.DELIVERY_REPORT); 175 } 176 177 /** 178 * Set X-Mms-Delivery-Report value. 179 * 180 * @param value the value 181 * @throws InvalidHeaderValueException if the value is invalid. 182 */ setDeliveryReport(int value)183 public void setDeliveryReport(int value) throws InvalidHeaderValueException { 184 mPduHeaders.setOctet(value, PduHeaders.DELIVERY_REPORT); 185 } 186 187 /** 188 * Get X-Mms-Expiry value. 189 * 190 * Expiry-value = Value-length 191 * (Absolute-token Date-value | Relative-token Delta-seconds-value) 192 * 193 * @return the value 194 */ getExpiry()195 public long getExpiry() { 196 return mPduHeaders.getLongInteger(PduHeaders.EXPIRY); 197 } 198 199 /** 200 * Set X-Mms-Expiry value. 201 * 202 * @param value the value 203 */ setExpiry(long value)204 public void setExpiry(long value) { 205 mPduHeaders.setLongInteger(value, PduHeaders.EXPIRY); 206 } 207 208 /** 209 * Get X-Mms-MessageSize value. 210 * 211 * Expiry-value = size of message 212 * 213 * @return the value 214 */ getMessageSize()215 public long getMessageSize() { 216 return mPduHeaders.getLongInteger(PduHeaders.MESSAGE_SIZE); 217 } 218 219 /** 220 * Set X-Mms-MessageSize value. 221 * 222 * @param value the value 223 */ setMessageSize(long value)224 public void setMessageSize(long value) { 225 mPduHeaders.setLongInteger(value, PduHeaders.MESSAGE_SIZE); 226 } 227 228 /** 229 * Get X-Mms-Message-Class value. 230 * Message-class-value = Class-identifier | Token-text 231 * Class-identifier = Personal | Advertisement | Informational | Auto 232 * 233 * @return the value 234 */ getMessageClass()235 public byte[] getMessageClass() { 236 return mPduHeaders.getTextString(PduHeaders.MESSAGE_CLASS); 237 } 238 239 /** 240 * Set X-Mms-Message-Class value. 241 * 242 * @param value the value 243 * @throws NullPointerException if the value is null. 244 */ setMessageClass(byte[] value)245 public void setMessageClass(byte[] value) { 246 mPduHeaders.setTextString(value, PduHeaders.MESSAGE_CLASS); 247 } 248 249 /** 250 * Get X-Mms-Read-Report value. 251 * 252 * @return the value 253 */ getReadReport()254 public int getReadReport() { 255 return mPduHeaders.getOctet(PduHeaders.READ_REPORT); 256 } 257 258 /** 259 * Set X-Mms-Read-Report value. 260 * 261 * @param value the value 262 * @throws InvalidHeaderValueException if the value is invalid. 263 */ setReadReport(int value)264 public void setReadReport(int value) throws InvalidHeaderValueException { 265 mPduHeaders.setOctet(value, PduHeaders.READ_REPORT); 266 } 267 268 /** 269 * Set "To" value. 270 * 271 * @param value the value 272 * @throws NullPointerException if the value is null. 273 */ setTo(EncodedStringValue[] value)274 public void setTo(EncodedStringValue[] value) { 275 mPduHeaders.setEncodedStringValues(value, PduHeaders.TO); 276 } 277 278 /** 279 * Get X-Mms-Transaction-Id field value. 280 * 281 * @return the X-Mms-Report-Allowed value 282 */ getTransactionId()283 public byte[] getTransactionId() { 284 return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID); 285 } 286 287 /** 288 * Set X-Mms-Transaction-Id field value. 289 * 290 * @param value the value 291 * @throws NullPointerException if the value is null. 292 */ setTransactionId(byte[] value)293 public void setTransactionId(byte[] value) { 294 mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID); 295 } 296 297 /* 298 * Optional, not supported header fields: 299 * 300 * public byte getAdaptationAllowed() {return 0}; 301 * public void setAdaptationAllowed(btye value) {}; 302 * 303 * public byte[] getApplicId() {return null;} 304 * public void setApplicId(byte[] value) {} 305 * 306 * public byte[] getAuxApplicId() {return null;} 307 * public void getAuxApplicId(byte[] value) {} 308 * 309 * public byte getContentClass() {return 0x00;} 310 * public void setApplicId(byte value) {} 311 * 312 * public long getDeliveryTime() {return 0}; 313 * public void setDeliveryTime(long value) {}; 314 * 315 * public byte getDrmContent() {return 0x00;} 316 * public void setDrmContent(byte value) {} 317 * 318 * public MmFlagsValue getMmFlags() {return null;} 319 * public void setMmFlags(MmFlagsValue value) {} 320 * 321 * public MmStateValue getMmState() {return null;} 322 * public void getMmState(MmStateValue value) {} 323 * 324 * public byte[] getReplyApplicId() {return 0x00;} 325 * public void setReplyApplicId(byte[] value) {} 326 * 327 * public byte getReplyCharging() {return 0x00;} 328 * public void setReplyCharging(byte value) {} 329 * 330 * public byte getReplyChargingDeadline() {return 0x00;} 331 * public void setReplyChargingDeadline(byte value) {} 332 * 333 * public byte[] getReplyChargingId() {return 0x00;} 334 * public void setReplyChargingId(byte[] value) {} 335 * 336 * public long getReplyChargingSize() {return 0;} 337 * public void setReplyChargingSize(long value) {} 338 * 339 * public byte[] getReplyApplicId() {return 0x00;} 340 * public void setReplyApplicId(byte[] value) {} 341 * 342 * public byte getStore() {return 0x00;} 343 * public void setStore(byte value) {} 344 */ 345 } 346