19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007-2008 Esmertec AG.
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007-2008 The Android Open Source Project
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18a87afd07c0093cab638e9ef9bc2c53c8200ca711Tom Taylorpackage com.google.android.mms.pdu;
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashMap;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Map;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The pdu part.
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PduPart {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Well-Known Parameters.
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_Q                  = 0x80;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_CHARSET            = 0x81;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_LEVEL              = 0x82;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_TYPE               = 0x83;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_DEP_NAME           = 0x85;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_DEP_FILENAME       = 0x86;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_DIFFERENCES        = 0x87;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_PADDING            = 0x88;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // This value of "TYPE" s used with Content-Type: multipart/related
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_CT_MR_TYPE         = 0x89;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_DEP_START          = 0x8A;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_DEP_START_INFO     = 0x8B;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_DEP_COMMENT        = 0x8C;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_DEP_DOMAIN         = 0x8D;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_MAX_AGE            = 0x8E;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_DEP_PATH           = 0x8F;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_SECURE             = 0x90;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_SEC                = 0x91;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_MAC                = 0x92;
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_CREATION_DATE      = 0x93;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_MODIFICATION_DATE  = 0x94;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_READ_DATE          = 0x95;
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_SIZE               = 0x96;
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_NAME               = 0x97;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_FILENAME           = 0x98;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_START              = 0x99;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_START_INFO         = 0x9A;
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_COMMENT            = 0x9B;
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_DOMAIN             = 0x9C;
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int P_PATH               = 0x9D;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  Header field names.
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final int P_CONTENT_TYPE       = 0x91;
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final int P_CONTENT_LOCATION   = 0x8E;
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final int P_CONTENT_ID         = 0xC0;
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final int P_DEP_CONTENT_DISPOSITION = 0xAE;
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final int P_CONTENT_DISPOSITION = 0xC5;
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // The next header is unassigned header, use reserved header(0x48) value.
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final int P_CONTENT_TRANSFER_ENCODING = 0xC8;
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Content=Transfer-Encoding string.
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final String CONTENT_TRANSFER_ENCODING =
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             "Content-Transfer-Encoding";
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Value of Content-Transfer-Encoding.
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final String P_BINARY = "binary";
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final String P_7BIT = "7bit";
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final String P_8BIT = "8bit";
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final String P_BASE64 = "base64";
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final String P_QUOTED_PRINTABLE = "quoted-printable";
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Value of disposition can be set to PduPart when the value is octet in
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * the PDU.
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * "from-data" instead of Form-data<Octet 128>.
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * "attachment" instead of Attachment<Octet 129>.
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * "inline" instead of Inline<Octet 130>.
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     static final byte[] DISPOSITION_FROM_DATA = "from-data".getBytes();
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     static final byte[] DISPOSITION_ATTACHMENT = "attachment".getBytes();
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     static final byte[] DISPOSITION_INLINE = "inline".getBytes();
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Content-Disposition value.
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final int P_DISPOSITION_FROM_DATA  = 0x80;
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final int P_DISPOSITION_ATTACHMENT = 0x81;
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public static final int P_DISPOSITION_INLINE     = 0x82;
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Header of part.
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     private Map<Integer, Object> mPartHeader = null;
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Data uri.
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     private Uri mUri = null;
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Part data.
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     private byte[] mPartData = null;
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     private static final String TAG = "PduPart";
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Empty Constructor.
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public PduPart() {
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         mPartHeader = new HashMap<Integer, Object>();
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Set part data. The data are stored as byte array.
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @param data the data
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void setData(byte[] data) {
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         if(data == null) {
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         mPartData = new byte[data.length];
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         System.arraycopy(data, 0, mPartData, 0, data.length);
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @return A copy of the part data or null if the data wasn't set or
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *         the data is stored as Uri.
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @see #getDataUri
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public byte[] getData() {
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         if(mPartData == null) {
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         }
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         byte[] byteArray = new byte[mPartData.length];
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         System.arraycopy(mPartData, 0, byteArray, 0, mPartData.length);
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         return byteArray;
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Set data uri. The data are stored as Uri.
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @param uri the uri
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void setDataUri(Uri uri) {
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         mUri = uri;
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @return The Uri of the part data or null if the data wasn't set or
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *         the data is stored as byte array.
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @see #getData
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public Uri getDataUri() {
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         return mUri;
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Set Content-id value
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @param contentId the content-id value
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @throws NullPointerException if the value is null.
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void setContentId(byte[] contentId) {
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         if((contentId == null) || (contentId.length == 0)) {
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             throw new IllegalArgumentException(
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                     "Content-Id may not be null or empty.");
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         }
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         if ((contentId.length > 1)
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                 && ((char) contentId[0] == '<')
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                 && ((char) contentId[contentId.length - 1] == '>')) {
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             mPartHeader.put(P_CONTENT_ID, contentId);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             return;
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         }
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Insert beginning '<' and trailing '>' for Content-Id.
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         byte[] buffer = new byte[contentId.length + 2];
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         buffer[0] = (byte) (0xff & '<');
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         buffer[buffer.length - 1] = (byte) (0xff & '>');
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         System.arraycopy(contentId, 0, buffer, 1, contentId.length);
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         mPartHeader.put(P_CONTENT_ID, buffer);
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Get Content-id value.
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @return the value
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public byte[] getContentId() {
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         return (byte[]) mPartHeader.get(P_CONTENT_ID);
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Set Char-set value.
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @param charset the value
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void setCharset(int charset) {
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         mPartHeader.put(P_CHARSET, charset);
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Get Char-set value
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @return the charset value. Return 0 if charset was not set.
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public int getCharset() {
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         Integer charset = (Integer) mPartHeader.get(P_CHARSET);
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         if(charset == null) {
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             return 0;
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         } else {
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             return charset.intValue();
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         }
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Set Content-Location value.
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @param contentLocation the value
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @throws NullPointerException if the value is null.
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void setContentLocation(byte[] contentLocation) {
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         if(contentLocation == null) {
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             throw new NullPointerException("null content-location");
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         }
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         mPartHeader.put(P_CONTENT_LOCATION, contentLocation);
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Get Content-Location value.
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @return the value
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *     return PduPart.disposition[0] instead of <Octet 128> (Form-data).
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *     return PduPart.disposition[1] instead of <Octet 129> (Attachment).
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *     return PduPart.disposition[2] instead of <Octet 130> (Inline).
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public byte[] getContentLocation() {
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         return (byte[]) mPartHeader.get(P_CONTENT_LOCATION);
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Set Content-Disposition value.
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Use PduPart.disposition[0] instead of <Octet 128> (Form-data).
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Use PduPart.disposition[1] instead of <Octet 129> (Attachment).
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Use PduPart.disposition[2] instead of <Octet 130> (Inline).
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @param contentDisposition the value
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @throws NullPointerException if the value is null.
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void setContentDisposition(byte[] contentDisposition) {
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         if(contentDisposition == null) {
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             throw new NullPointerException("null content-disposition");
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         }
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         mPartHeader.put(P_CONTENT_DISPOSITION, contentDisposition);
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Get Content-Disposition value.
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @return the value
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public byte[] getContentDisposition() {
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         return (byte[]) mPartHeader.get(P_CONTENT_DISPOSITION);
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *  Set Content-Type value.
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *  @param value the value
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *  @throws NullPointerException if the value is null.
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void setContentType(byte[] contentType) {
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         if(contentType == null) {
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             throw new NullPointerException("null content-type");
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         }
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         mPartHeader.put(P_CONTENT_TYPE, contentType);
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Get Content-Type value of part.
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @return the value
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public byte[] getContentType() {
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         return (byte[]) mPartHeader.get(P_CONTENT_TYPE);
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Set Content-Transfer-Encoding value
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @param contentId the content-id value
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @throws NullPointerException if the value is null.
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void setContentTransferEncoding(byte[] contentTransferEncoding) {
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         if(contentTransferEncoding == null) {
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             throw new NullPointerException("null content-transfer-encoding");
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         }
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         mPartHeader.put(P_CONTENT_TRANSFER_ENCODING, contentTransferEncoding);
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Get Content-Transfer-Encoding value.
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @return the value
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public byte[] getContentTransferEncoding() {
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         return (byte[]) mPartHeader.get(P_CONTENT_TRANSFER_ENCODING);
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Set Content-type parameter: name.
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @param name the name value
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @throws NullPointerException if the value is null.
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void setName(byte[] name) {
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         if(null == name) {
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             throw new NullPointerException("null content-id");
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         }
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         mPartHeader.put(P_NAME, name);
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *  Get content-type parameter: name.
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *  @return the name
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public byte[] getName() {
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         return (byte[]) mPartHeader.get(P_NAME);
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Get Content-disposition parameter: filename
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @param fileName the filename value
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @throws NullPointerException if the value is null.
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void setFilename(byte[] fileName) {
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         if(null == fileName) {
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             throw new NullPointerException("null content-id");
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         }
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         mPartHeader.put(P_FILENAME, fileName);
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * Set Content-disposition parameter: filename
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      *
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      * @return the filename
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      */
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public byte[] getFilename() {
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         return (byte[]) mPartHeader.get(P_FILENAME);
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String generateLocation() {
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Assumption: At least one of the content-location / name / filename
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // or content-id should be set. This is guaranteed by the PduParser
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // for incoming messages and by MM composer for outgoing messages.
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        byte[] location = (byte[]) mPartHeader.get(P_NAME);
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if(null == location) {
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            location = (byte[]) mPartHeader.get(P_FILENAME);
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (null == location) {
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                location = (byte[]) mPartHeader.get(P_CONTENT_LOCATION);
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (null == location) {
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            byte[] contentId = (byte[]) mPartHeader.get(P_CONTENT_ID);
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return "cid:" + new String(contentId);
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new String(location);
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
403