1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/*
2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2007-2008 Esmertec AG.
3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2007-2008 The Android Open Source Project
4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License");
6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License.
7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at
8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *      http://www.apache.org/licenses/LICENSE-2.0
10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software
12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS,
13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and
15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License.
16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */
17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage android.support.v7.mms.pdu;
19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.net.Uri;
21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.HashMap;
23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.Map;
24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/**
26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * The pdu part.
27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */
28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class PduPart {
29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * Well-Known Parameters.
31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_Q                  = 0x80;
33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_CHARSET            = 0x81;
34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_LEVEL              = 0x82;
35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_TYPE               = 0x83;
36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_DEP_NAME           = 0x85;
37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_DEP_FILENAME       = 0x86;
38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_DIFFERENCES        = 0x87;
39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_PADDING            = 0x88;
40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    // This value of "TYPE" s used with Content-Type: multipart/related
41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_CT_MR_TYPE         = 0x89;
42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_DEP_START          = 0x8A;
43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_DEP_START_INFO     = 0x8B;
44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_DEP_COMMENT        = 0x8C;
45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_DEP_DOMAIN         = 0x8D;
46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_MAX_AGE            = 0x8E;
47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_DEP_PATH           = 0x8F;
48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_SECURE             = 0x90;
49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_SEC                = 0x91;
50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_MAC                = 0x92;
51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_CREATION_DATE      = 0x93;
52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_MODIFICATION_DATE  = 0x94;
53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_READ_DATE          = 0x95;
54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_SIZE               = 0x96;
55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_NAME               = 0x97;
56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_FILENAME           = 0x98;
57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_START              = 0x99;
58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_START_INFO         = 0x9A;
59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_COMMENT            = 0x9B;
60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_DOMAIN             = 0x9C;
61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int P_PATH               = 0x9D;
62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     *  Header field names.
65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final int P_CONTENT_TYPE       = 0x91;
67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final int P_CONTENT_LOCATION   = 0x8E;
68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final int P_CONTENT_ID         = 0xC0;
69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final int P_DEP_CONTENT_DISPOSITION = 0xAE;
70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final int P_CONTENT_DISPOSITION = 0xC5;
71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    // The next header is unassigned header, use reserved header(0x48) value.
72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final int P_CONTENT_TRANSFER_ENCODING = 0xC8;
73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Content=Transfer-Encoding string.
76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final String CONTENT_TRANSFER_ENCODING =
78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             "Content-Transfer-Encoding";
79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Value of Content-Transfer-Encoding.
82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final String P_BINARY = "binary";
84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final String P_7BIT = "7bit";
85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final String P_8BIT = "8bit";
86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final String P_BASE64 = "base64";
87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final String P_QUOTED_PRINTABLE = "quoted-printable";
88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Value of disposition can be set to PduPart when the value is octet in
91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * the PDU.
92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * "from-data" instead of Form-data<Octet 128>.
93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * "attachment" instead of Attachment<Octet 129>.
94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * "inline" instead of Inline<Octet 130>.
95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     static final byte[] DISPOSITION_FROM_DATA = "from-data".getBytes();
97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     static final byte[] DISPOSITION_ATTACHMENT = "attachment".getBytes();
98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     static final byte[] DISPOSITION_INLINE = "inline".getBytes();
99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Content-Disposition value.
102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final int P_DISPOSITION_FROM_DATA  = 0x80;
104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final int P_DISPOSITION_ATTACHMENT = 0x81;
105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public static final int P_DISPOSITION_INLINE     = 0x82;
106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Header of part.
109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     private Map<Integer, Object> mPartHeader = null;
111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Data uri.
114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     private Uri mUri = null;
116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Part data.
119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     private byte[] mPartData = null;
121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     private static final String TAG = "PduPart";
123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Empty Constructor.
126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public PduPart() {
128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         mPartHeader = new HashMap<Integer, Object>();
129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Set part data. The data are stored as byte array.
133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @param data the data
135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public void setData(byte[] data) {
137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if(data == null) {
138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            return;
139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
141d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         mPartData = new byte[data.length];
142d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         System.arraycopy(data, 0, mPartData, 0, data.length);
143d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
144d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
145d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
146d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @return A copy of the part data or null if the data wasn't set or
147d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *         the data is stored as Uri.
148d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @see #getDataUri
149d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
150d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public byte[] getData() {
151d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if(mPartData == null) {
152d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            return null;
153d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         }
154d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
155d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         byte[] byteArray = new byte[mPartData.length];
156d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         System.arraycopy(mPartData, 0, byteArray, 0, mPartData.length);
157d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         return byteArray;
158d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
159d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
160d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
161d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @return The length of the data, if this object have data, else 0.
162d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
163d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public int getDataLength() {
164d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if(mPartData != null){
165d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             return mPartData.length;
166d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         } else {
167d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             return 0;
168d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         }
169d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
170d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
171d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
172d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
173d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Set data uri. The data are stored as Uri.
174d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
175d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @param uri the uri
176d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
177d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public void setDataUri(Uri uri) {
178d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         mUri = uri;
179d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
180d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
181d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
182d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @return The Uri of the part data or null if the data wasn't set or
183d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *         the data is stored as byte array.
184d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @see #getData
185d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
186d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public Uri getDataUri() {
187d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         return mUri;
188d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
189d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
190d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
191d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Set Content-id value
192d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
193d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @param contentId the content-id value
194d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @throws NullPointerException if the value is null.
195d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
196d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public void setContentId(byte[] contentId) {
197d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if((contentId == null) || (contentId.length == 0)) {
198d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             throw new IllegalArgumentException(
199d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                     "Content-Id may not be null or empty.");
200d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         }
201d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
202d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if ((contentId.length > 1)
203d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                 && ((char) contentId[0] == '<')
204d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                 && ((char) contentId[contentId.length - 1] == '>')) {
205d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             mPartHeader.put(P_CONTENT_ID, contentId);
206d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             return;
207d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         }
208d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
209d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         // Insert beginning '<' and trailing '>' for Content-Id.
210d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         byte[] buffer = new byte[contentId.length + 2];
211d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         buffer[0] = (byte) (0xff & '<');
212d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         buffer[buffer.length - 1] = (byte) (0xff & '>');
213d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         System.arraycopy(contentId, 0, buffer, 1, contentId.length);
214d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         mPartHeader.put(P_CONTENT_ID, buffer);
215d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
216d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
217d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
218d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Get Content-id value.
219d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
220d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @return the value
221d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
222d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public byte[] getContentId() {
223d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         return (byte[]) mPartHeader.get(P_CONTENT_ID);
224d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
225d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
226d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
227d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Set Char-set value.
228d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
229d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @param charset the value
230d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
231d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public void setCharset(int charset) {
232d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         mPartHeader.put(P_CHARSET, charset);
233d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
234d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
235d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
236d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Get Char-set value
237d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
238d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @return the charset value. Return 0 if charset was not set.
239d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
240d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public int getCharset() {
241d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         Integer charset = (Integer) mPartHeader.get(P_CHARSET);
242d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if(charset == null) {
243d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             return 0;
244d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         } else {
245d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             return charset.intValue();
246d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         }
247d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
248d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
249d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
250d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Set Content-Location value.
251d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
252d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @param contentLocation the value
253d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @throws NullPointerException if the value is null.
254d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
255d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public void setContentLocation(byte[] contentLocation) {
256d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if(contentLocation == null) {
257d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             throw new NullPointerException("null content-location");
258d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         }
259d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
260d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         mPartHeader.put(P_CONTENT_LOCATION, contentLocation);
261d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
262d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
263d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
264d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Get Content-Location value.
265d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
266d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @return the value
267d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *     return PduPart.disposition[0] instead of <Octet 128> (Form-data).
268d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *     return PduPart.disposition[1] instead of <Octet 129> (Attachment).
269d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *     return PduPart.disposition[2] instead of <Octet 130> (Inline).
270d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
271d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public byte[] getContentLocation() {
272d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         return (byte[]) mPartHeader.get(P_CONTENT_LOCATION);
273d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
274d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
275d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
276d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Set Content-Disposition value.
277d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Use PduPart.disposition[0] instead of <Octet 128> (Form-data).
278d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Use PduPart.disposition[1] instead of <Octet 129> (Attachment).
279d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Use PduPart.disposition[2] instead of <Octet 130> (Inline).
280d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
281d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @param contentDisposition the value
282d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @throws NullPointerException if the value is null.
283d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
284d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public void setContentDisposition(byte[] contentDisposition) {
285d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if(contentDisposition == null) {
286d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             throw new NullPointerException("null content-disposition");
287d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         }
288d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
289d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         mPartHeader.put(P_CONTENT_DISPOSITION, contentDisposition);
290d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
291d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
292d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
293d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Get Content-Disposition value.
294d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
295d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @return the value
296d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
297d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public byte[] getContentDisposition() {
298d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         return (byte[]) mPartHeader.get(P_CONTENT_DISPOSITION);
299d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
300d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
301d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
302d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *  Set Content-Type value.
303d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
304d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *  @param contentType the content type
305d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *  @throws NullPointerException if the value is null.
306d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
307d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public void setContentType(byte[] contentType) {
308d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if(contentType == null) {
309d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             throw new NullPointerException("null content-type");
310d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         }
311d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
312d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         mPartHeader.put(P_CONTENT_TYPE, contentType);
313d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
314d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
315d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
316d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Get Content-Type value of part.
317d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
318d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @return the value
319d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
320d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public byte[] getContentType() {
321d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         return (byte[]) mPartHeader.get(P_CONTENT_TYPE);
322d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
323d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
324d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
325d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Set Content-Transfer-Encoding value
326d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
327d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @param contentTransferEncoding the Content-Transfer-Encoding value
328d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @throws NullPointerException if the value is null.
329d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
330d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public void setContentTransferEncoding(byte[] contentTransferEncoding) {
331d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if(contentTransferEncoding == null) {
332d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             throw new NullPointerException("null content-transfer-encoding");
333d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         }
334d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
335d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         mPartHeader.put(P_CONTENT_TRANSFER_ENCODING, contentTransferEncoding);
336d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
337d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
338d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
339d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Get Content-Transfer-Encoding value.
340d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
341d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @return the value
342d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
343d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public byte[] getContentTransferEncoding() {
344d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         return (byte[]) mPartHeader.get(P_CONTENT_TRANSFER_ENCODING);
345d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
346d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
347d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
348d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Set Content-type parameter: name.
349d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
350d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @param name the name value
351d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @throws NullPointerException if the value is null.
352d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
353d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public void setName(byte[] name) {
354d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if(null == name) {
355d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             throw new NullPointerException("null content-id");
356d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         }
357d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
358d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         mPartHeader.put(P_NAME, name);
359d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
360d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
361d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
362d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *  Get content-type parameter: name.
363d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
364d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *  @return the name
365d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
366d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public byte[] getName() {
367d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         return (byte[]) mPartHeader.get(P_NAME);
368d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
369d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
370d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
371d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Get Content-disposition parameter: filename
372d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
373d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @param fileName the filename value
374d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @throws NullPointerException if the value is null.
375d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
376d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public void setFilename(byte[] fileName) {
377d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         if(null == fileName) {
378d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd             throw new NullPointerException("null content-id");
379d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         }
380d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
381d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         mPartHeader.put(P_FILENAME, fileName);
382d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
383d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
384d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     /**
385d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * Set Content-disposition parameter: filename
386d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      *
387d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      * @return the filename
388d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd      */
389d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     public byte[] getFilename() {
390d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd         return (byte[]) mPartHeader.get(P_FILENAME);
391d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     }
392d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
393d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public String generateLocation() {
394d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        // Assumption: At least one of the content-location / name / filename
395d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        // or content-id should be set. This is guaranteed by the PduParser
396d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        // for incoming messages and by MM composer for outgoing messages.
397d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        byte[] location = (byte[]) mPartHeader.get(P_NAME);
398d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        if(null == location) {
399d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            location = (byte[]) mPartHeader.get(P_FILENAME);
400d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
401d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            if (null == location) {
402d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                location = (byte[]) mPartHeader.get(P_CONTENT_LOCATION);
403d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            }
404d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
405d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
406d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        if (null == location) {
407d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            byte[] contentId = (byte[]) mPartHeader.get(P_CONTENT_ID);
408d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            return "cid:" + new String(contentId);
409d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        } else {
410d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            return new String(location);
411d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
412d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
413d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd}
414d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
415