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