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