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