1526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen/* 2526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Copyright (C) 2007-2008 Esmertec AG. 3526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Copyright (C) 2007-2008 The Android Open Source Project 4526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 5526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Licensed under the Apache License, Version 2.0 (the "License"); 6526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * you may not use this file except in compliance with the License. 7526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * You may obtain a copy of the License at 8526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 9526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * http://www.apache.org/licenses/LICENSE-2.0 10526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 11526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Unless required by applicable law or agreed to in writing, software 12526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * distributed under the License is distributed on an "AS IS" BASIS, 13526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * See the License for the specific language governing permissions and 15526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * limitations under the License. 16526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 17526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 18526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenpackage com.google.android.mms.pdu; 19526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 20526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenimport android.net.Uri; 21526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 22526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenimport java.util.HashMap; 23526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenimport java.util.Map; 24526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 25526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen/** 26526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * The pdu part. 27526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 28526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenpublic class PduPart { 29526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 30526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Well-Known Parameters. 31526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 32526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_Q = 0x80; 33526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_CHARSET = 0x81; 34526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_LEVEL = 0x82; 35526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_TYPE = 0x83; 36526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DEP_NAME = 0x85; 37526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DEP_FILENAME = 0x86; 38526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DIFFERENCES = 0x87; 39526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_PADDING = 0x88; 40526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // This value of "TYPE" s used with Content-Type: multipart/related 41526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_CT_MR_TYPE = 0x89; 42526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DEP_START = 0x8A; 43526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DEP_START_INFO = 0x8B; 44526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DEP_COMMENT = 0x8C; 45526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DEP_DOMAIN = 0x8D; 46526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_MAX_AGE = 0x8E; 47526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DEP_PATH = 0x8F; 48526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_SECURE = 0x90; 49526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_SEC = 0x91; 50526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_MAC = 0x92; 51526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_CREATION_DATE = 0x93; 52526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_MODIFICATION_DATE = 0x94; 53526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_READ_DATE = 0x95; 54526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_SIZE = 0x96; 55526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_NAME = 0x97; 56526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_FILENAME = 0x98; 57526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_START = 0x99; 58526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_START_INFO = 0x9A; 59526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_COMMENT = 0x9B; 60526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DOMAIN = 0x9C; 61526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_PATH = 0x9D; 62526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 63526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 64526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Header field names. 65526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 66526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_CONTENT_TYPE = 0x91; 67526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_CONTENT_LOCATION = 0x8E; 68526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_CONTENT_ID = 0xC0; 69526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DEP_CONTENT_DISPOSITION = 0xAE; 70526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_CONTENT_DISPOSITION = 0xC5; 71526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // The next header is unassigned header, use reserved header(0x48) value. 72526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_CONTENT_TRANSFER_ENCODING = 0xC8; 73526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 74526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 75526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Content=Transfer-Encoding string. 76526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 77526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String CONTENT_TRANSFER_ENCODING = 78526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen "Content-Transfer-Encoding"; 79526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 80526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 81526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Value of Content-Transfer-Encoding. 82526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 83526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String P_BINARY = "binary"; 84526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String P_7BIT = "7bit"; 85526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String P_8BIT = "8bit"; 86526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String P_BASE64 = "base64"; 87526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String P_QUOTED_PRINTABLE = "quoted-printable"; 88526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 89526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 90526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Value of disposition can be set to PduPart when the value is octet in 91526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * the PDU. 92526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * "from-data" instead of Form-data<Octet 128>. 93526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * "attachment" instead of Attachment<Octet 129>. 94526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * "inline" instead of Inline<Octet 130>. 95526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 96526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen static final byte[] DISPOSITION_FROM_DATA = "from-data".getBytes(); 97526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen static final byte[] DISPOSITION_ATTACHMENT = "attachment".getBytes(); 98526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen static final byte[] DISPOSITION_INLINE = "inline".getBytes(); 99526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 100526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 101526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Content-Disposition value. 102526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 103526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DISPOSITION_FROM_DATA = 0x80; 104526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DISPOSITION_ATTACHMENT = 0x81; 105526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int P_DISPOSITION_INLINE = 0x82; 106526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 107526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 108526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Header of part. 109526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 110526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen private Map<Integer, Object> mPartHeader = null; 111526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 112526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 113526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Data uri. 114526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 115526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen private Uri mUri = null; 116526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 117526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 118526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Part data. 119526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 120526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen private byte[] mPartData = null; 121526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 122526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen private static final String TAG = "PduPart"; 123526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 124526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 125526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Empty Constructor. 126526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 127526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public PduPart() { 128526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mPartHeader = new HashMap<Integer, Object>(); 129526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 130526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 131526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 132526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set part data. The data are stored as byte array. 133526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 134526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param data the data 135526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 136526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public void setData(byte[] data) { 137526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if(data == null) { 138526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return; 139526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 140526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 141526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mPartData = new byte[data.length]; 142526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen System.arraycopy(data, 0, mPartData, 0, data.length); 143526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 144526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 145526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 146526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return A copy of the part data or null if the data wasn't set or 147526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * the data is stored as Uri. 148526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @see #getDataUri 149526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 150526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public byte[] getData() { 151526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if(mPartData == null) { 152526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return null; 153526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 154526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 155526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen byte[] byteArray = new byte[mPartData.length]; 156526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen System.arraycopy(mPartData, 0, byteArray, 0, mPartData.length); 157526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return byteArray; 158526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 159526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 160089a13f65c9bac16543ec2270152649bb3c77127kschulz /** 161089a13f65c9bac16543ec2270152649bb3c77127kschulz * @return The length of the data, if this object have data, else 0. 162089a13f65c9bac16543ec2270152649bb3c77127kschulz */ 163089a13f65c9bac16543ec2270152649bb3c77127kschulz public int getDataLength() { 164089a13f65c9bac16543ec2270152649bb3c77127kschulz if(mPartData != null){ 165089a13f65c9bac16543ec2270152649bb3c77127kschulz return mPartData.length; 166089a13f65c9bac16543ec2270152649bb3c77127kschulz } else { 167089a13f65c9bac16543ec2270152649bb3c77127kschulz return 0; 168089a13f65c9bac16543ec2270152649bb3c77127kschulz } 169089a13f65c9bac16543ec2270152649bb3c77127kschulz } 170089a13f65c9bac16543ec2270152649bb3c77127kschulz 171089a13f65c9bac16543ec2270152649bb3c77127kschulz 172526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 173526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set data uri. The data are stored as Uri. 174526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 175526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param uri the uri 176526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 177526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public void setDataUri(Uri uri) { 178526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mUri = uri; 179526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 180526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 181526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 182526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return The Uri of the part data or null if the data wasn't set or 183526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * the data is stored as byte array. 184526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @see #getData 185526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 186526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public Uri getDataUri() { 187526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return mUri; 188526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 189526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 190526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 191526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set Content-id value 192526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 193526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param contentId the content-id value 194526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws NullPointerException if the value is null. 195526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 196526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public void setContentId(byte[] contentId) { 197526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if((contentId == null) || (contentId.length == 0)) { 198526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new IllegalArgumentException( 199526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen "Content-Id may not be null or empty."); 200526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 201526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 202526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((contentId.length > 1) 203526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen && ((char) contentId[0] == '<') 204526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen && ((char) contentId[contentId.length - 1] == '>')) { 205526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mPartHeader.put(P_CONTENT_ID, contentId); 206526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return; 207526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 208526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 209526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Insert beginning '<' and trailing '>' for Content-Id. 210526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen byte[] buffer = new byte[contentId.length + 2]; 211526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen buffer[0] = (byte) (0xff & '<'); 212526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen buffer[buffer.length - 1] = (byte) (0xff & '>'); 213526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen System.arraycopy(contentId, 0, buffer, 1, contentId.length); 214526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mPartHeader.put(P_CONTENT_ID, buffer); 215526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 216526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 217526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 218526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get Content-id value. 219526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 220526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the value 221526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 222526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public byte[] getContentId() { 223526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return (byte[]) mPartHeader.get(P_CONTENT_ID); 224526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 225526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 226526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 227526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set Char-set value. 228526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 229526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param charset the value 230526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 231526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public void setCharset(int charset) { 232526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mPartHeader.put(P_CHARSET, charset); 233526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 234526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 235526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 236526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get Char-set value 237526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 238526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the charset value. Return 0 if charset was not set. 239526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 240526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public int getCharset() { 241526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen Integer charset = (Integer) mPartHeader.get(P_CHARSET); 242526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if(charset == null) { 243526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return 0; 244526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } else { 245526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return charset.intValue(); 246526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 247526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 248526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 249526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 250526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set Content-Location value. 251526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 252526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param contentLocation the value 253526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws NullPointerException if the value is null. 254526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 255526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public void setContentLocation(byte[] contentLocation) { 256526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if(contentLocation == null) { 257526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new NullPointerException("null content-location"); 258526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 259526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 260526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mPartHeader.put(P_CONTENT_LOCATION, contentLocation); 261526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 262526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 263526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 264526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get Content-Location value. 265526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 266526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the value 267526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * return PduPart.disposition[0] instead of <Octet 128> (Form-data). 268526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * return PduPart.disposition[1] instead of <Octet 129> (Attachment). 269526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * return PduPart.disposition[2] instead of <Octet 130> (Inline). 270526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 271526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public byte[] getContentLocation() { 272526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return (byte[]) mPartHeader.get(P_CONTENT_LOCATION); 273526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 274526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 275526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 276526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set Content-Disposition value. 277526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Use PduPart.disposition[0] instead of <Octet 128> (Form-data). 278526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Use PduPart.disposition[1] instead of <Octet 129> (Attachment). 279526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Use PduPart.disposition[2] instead of <Octet 130> (Inline). 280526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 281526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param contentDisposition the value 282526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws NullPointerException if the value is null. 283526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 284526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public void setContentDisposition(byte[] contentDisposition) { 285526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if(contentDisposition == null) { 286526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new NullPointerException("null content-disposition"); 287526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 288526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 289526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mPartHeader.put(P_CONTENT_DISPOSITION, contentDisposition); 290526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 291526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 292526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 293526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get Content-Disposition value. 294526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 295526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the value 296526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 297526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public byte[] getContentDisposition() { 298526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return (byte[]) mPartHeader.get(P_CONTENT_DISPOSITION); 299526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 300526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 301526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 302526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set Content-Type value. 303526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 304526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param value the value 305526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws NullPointerException if the value is null. 306526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 307526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public void setContentType(byte[] contentType) { 308526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if(contentType == null) { 309526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new NullPointerException("null content-type"); 310526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 311526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 312526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mPartHeader.put(P_CONTENT_TYPE, contentType); 313526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 314526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 315526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 316526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get Content-Type value of part. 317526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 318526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the value 319526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 320526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public byte[] getContentType() { 321526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return (byte[]) mPartHeader.get(P_CONTENT_TYPE); 322526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 323526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 324526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 325526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set Content-Transfer-Encoding value 326526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 327526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param contentId the content-id value 328526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws NullPointerException if the value is null. 329526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 330526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public void setContentTransferEncoding(byte[] contentTransferEncoding) { 331526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if(contentTransferEncoding == null) { 332526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new NullPointerException("null content-transfer-encoding"); 333526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 334526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 335526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mPartHeader.put(P_CONTENT_TRANSFER_ENCODING, contentTransferEncoding); 336526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 337526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 338526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 339526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get Content-Transfer-Encoding value. 340526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 341526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the value 342526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 343526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public byte[] getContentTransferEncoding() { 344526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return (byte[]) mPartHeader.get(P_CONTENT_TRANSFER_ENCODING); 345526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 346526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 347526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 348526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set Content-type parameter: name. 349526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 350526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param name the name value 351526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws NullPointerException if the value is null. 352526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 353526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public void setName(byte[] name) { 354526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if(null == name) { 355526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new NullPointerException("null content-id"); 356526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 357526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 358526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mPartHeader.put(P_NAME, name); 359526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 360526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 361526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 362526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get content-type parameter: name. 363526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 364526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the name 365526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 366526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public byte[] getName() { 367526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return (byte[]) mPartHeader.get(P_NAME); 368526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 369526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 370526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 371526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get Content-disposition parameter: filename 372526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 373526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param fileName the filename value 374526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws NullPointerException if the value is null. 375526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 376526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public void setFilename(byte[] fileName) { 377526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if(null == fileName) { 378526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new NullPointerException("null content-id"); 379526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 380526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 381526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mPartHeader.put(P_FILENAME, fileName); 382526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 383526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 384526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 385526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set Content-disposition parameter: filename 386526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 387526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the filename 388526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 389526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public byte[] getFilename() { 390526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return (byte[]) mPartHeader.get(P_FILENAME); 391526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 392526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 393526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public String generateLocation() { 394526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Assumption: At least one of the content-location / name / filename 395526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // or content-id should be set. This is guaranteed by the PduParser 396526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // for incoming messages and by MM composer for outgoing messages. 397526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen byte[] location = (byte[]) mPartHeader.get(P_NAME); 398526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if(null == location) { 399526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen location = (byte[]) mPartHeader.get(P_FILENAME); 400526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 401526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (null == location) { 402526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen location = (byte[]) mPartHeader.get(P_CONTENT_LOCATION); 403526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 404526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 405526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 406526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (null == location) { 407526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen byte[] contentId = (byte[]) mPartHeader.get(P_CONTENT_ID); 408526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return "cid:" + new String(contentId); 409526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } else { 410526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return new String(location); 411526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 412526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 413526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen} 414526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 415