19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007-2008 Esmertec AG. 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007-2008 The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18a87afd07c0093cab638e9ef9bc2c53c8200ca711Tom Taylorpackage com.google.android.mms.pdu; 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashMap; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Map; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The pdu part. 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PduPart { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Well-Known Parameters. 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_Q = 0x80; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_CHARSET = 0x81; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_LEVEL = 0x82; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_TYPE = 0x83; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DEP_NAME = 0x85; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DEP_FILENAME = 0x86; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DIFFERENCES = 0x87; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_PADDING = 0x88; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This value of "TYPE" s used with Content-Type: multipart/related 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_CT_MR_TYPE = 0x89; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DEP_START = 0x8A; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DEP_START_INFO = 0x8B; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DEP_COMMENT = 0x8C; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DEP_DOMAIN = 0x8D; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_MAX_AGE = 0x8E; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DEP_PATH = 0x8F; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_SECURE = 0x90; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_SEC = 0x91; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_MAC = 0x92; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_CREATION_DATE = 0x93; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_MODIFICATION_DATE = 0x94; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_READ_DATE = 0x95; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_SIZE = 0x96; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_NAME = 0x97; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_FILENAME = 0x98; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_START = 0x99; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_START_INFO = 0x9A; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_COMMENT = 0x9B; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DOMAIN = 0x9C; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_PATH = 0x9D; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Header field names. 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_CONTENT_TYPE = 0x91; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_CONTENT_LOCATION = 0x8E; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_CONTENT_ID = 0xC0; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DEP_CONTENT_DISPOSITION = 0xAE; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_CONTENT_DISPOSITION = 0xC5; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The next header is unassigned header, use reserved header(0x48) value. 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_CONTENT_TRANSFER_ENCODING = 0xC8; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Content=Transfer-Encoding string. 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_TRANSFER_ENCODING = 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Content-Transfer-Encoding"; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Value of Content-Transfer-Encoding. 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String P_BINARY = "binary"; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String P_7BIT = "7bit"; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String P_8BIT = "8bit"; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String P_BASE64 = "base64"; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String P_QUOTED_PRINTABLE = "quoted-printable"; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Value of disposition can be set to PduPart when the value is octet in 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PDU. 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "from-data" instead of Form-data<Octet 128>. 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "attachment" instead of Attachment<Octet 129>. 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "inline" instead of Inline<Octet 130>. 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final byte[] DISPOSITION_FROM_DATA = "from-data".getBytes(); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final byte[] DISPOSITION_ATTACHMENT = "attachment".getBytes(); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final byte[] DISPOSITION_INLINE = "inline".getBytes(); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Content-Disposition value. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DISPOSITION_FROM_DATA = 0x80; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DISPOSITION_ATTACHMENT = 0x81; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int P_DISPOSITION_INLINE = 0x82; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Header of part. 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Map<Integer, Object> mPartHeader = null; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Data uri. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Uri mUri = null; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Part data. 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private byte[] mPartData = null; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "PduPart"; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Empty Constructor. 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PduPart() { 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartHeader = new HashMap<Integer, Object>(); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set part data. The data are stored as byte array. 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data the data 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setData(byte[] data) { 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(data == null) { 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartData = new byte[data.length]; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project System.arraycopy(data, 0, mPartData, 0, data.length); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A copy of the part data or null if the data wasn't set or 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the data is stored as Uri. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getDataUri 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public byte[] getData() { 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(mPartData == null) { 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] byteArray = new byte[mPartData.length]; 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project System.arraycopy(mPartData, 0, byteArray, 0, mPartData.length); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return byteArray; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set data uri. The data are stored as Uri. 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param uri the uri 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDataUri(Uri uri) { 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUri = uri; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The Uri of the part data or null if the data wasn't set or 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the data is stored as byte array. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getData 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Uri getDataUri() { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mUri; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set Content-id value 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param contentId the content-id value 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws NullPointerException if the value is null. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentId(byte[] contentId) { 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if((contentId == null) || (contentId.length == 0)) { 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException( 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Content-Id may not be null or empty."); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((contentId.length > 1) 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && ((char) contentId[0] == '<') 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && ((char) contentId[contentId.length - 1] == '>')) { 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartHeader.put(P_CONTENT_ID, contentId); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Insert beginning '<' and trailing '>' for Content-Id. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] buffer = new byte[contentId.length + 2]; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer[0] = (byte) (0xff & '<'); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer[buffer.length - 1] = (byte) (0xff & '>'); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project System.arraycopy(contentId, 0, buffer, 1, contentId.length); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartHeader.put(P_CONTENT_ID, buffer); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get Content-id value. 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the value 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public byte[] getContentId() { 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (byte[]) mPartHeader.get(P_CONTENT_ID); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set Char-set value. 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param charset the value 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCharset(int charset) { 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartHeader.put(P_CHARSET, charset); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get Char-set value 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the charset value. Return 0 if charset was not set. 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getCharset() { 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Integer charset = (Integer) mPartHeader.get(P_CHARSET); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(charset == null) { 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return charset.intValue(); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set Content-Location value. 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param contentLocation the value 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws NullPointerException if the value is null. 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentLocation(byte[] contentLocation) { 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(contentLocation == null) { 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("null content-location"); 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartHeader.put(P_CONTENT_LOCATION, contentLocation); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get Content-Location value. 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the value 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return PduPart.disposition[0] instead of <Octet 128> (Form-data). 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return PduPart.disposition[1] instead of <Octet 129> (Attachment). 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return PduPart.disposition[2] instead of <Octet 130> (Inline). 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public byte[] getContentLocation() { 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (byte[]) mPartHeader.get(P_CONTENT_LOCATION); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set Content-Disposition value. 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use PduPart.disposition[0] instead of <Octet 128> (Form-data). 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use PduPart.disposition[1] instead of <Octet 129> (Attachment). 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use PduPart.disposition[2] instead of <Octet 130> (Inline). 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param contentDisposition the value 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws NullPointerException if the value is null. 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentDisposition(byte[] contentDisposition) { 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(contentDisposition == null) { 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("null content-disposition"); 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartHeader.put(P_CONTENT_DISPOSITION, contentDisposition); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get Content-Disposition value. 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the value 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public byte[] getContentDisposition() { 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (byte[]) mPartHeader.get(P_CONTENT_DISPOSITION); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set Content-Type value. 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param value the value 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws NullPointerException if the value is null. 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentType(byte[] contentType) { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(contentType == null) { 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("null content-type"); 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartHeader.put(P_CONTENT_TYPE, contentType); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get Content-Type value of part. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the value 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public byte[] getContentType() { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (byte[]) mPartHeader.get(P_CONTENT_TYPE); 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set Content-Transfer-Encoding value 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param contentId the content-id value 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws NullPointerException if the value is null. 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentTransferEncoding(byte[] contentTransferEncoding) { 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(contentTransferEncoding == null) { 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("null content-transfer-encoding"); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartHeader.put(P_CONTENT_TRANSFER_ENCODING, contentTransferEncoding); 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get Content-Transfer-Encoding value. 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the value 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public byte[] getContentTransferEncoding() { 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (byte[]) mPartHeader.get(P_CONTENT_TRANSFER_ENCODING); 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set Content-type parameter: name. 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name the name value 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws NullPointerException if the value is null. 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setName(byte[] name) { 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(null == name) { 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("null content-id"); 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartHeader.put(P_NAME, name); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get content-type parameter: name. 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the name 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public byte[] getName() { 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (byte[]) mPartHeader.get(P_NAME); 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get Content-disposition parameter: filename 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fileName the filename value 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws NullPointerException if the value is null. 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFilename(byte[] fileName) { 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(null == fileName) { 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("null content-id"); 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartHeader.put(P_FILENAME, fileName); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set Content-disposition parameter: filename 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the filename 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public byte[] getFilename() { 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (byte[]) mPartHeader.get(P_FILENAME); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String generateLocation() { 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Assumption: At least one of the content-location / name / filename 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // or content-id should be set. This is guaranteed by the PduParser 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // for incoming messages and by MM composer for outgoing messages. 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] location = (byte[]) mPartHeader.get(P_NAME); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(null == location) { 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project location = (byte[]) mPartHeader.get(P_FILENAME); 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (null == location) { 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project location = (byte[]) mPartHeader.get(P_CONTENT_LOCATION); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (null == location) { 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] contentId = (byte[]) mPartHeader.get(P_CONTENT_ID); 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "cid:" + new String(contentId); 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new String(location); 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 403