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