1526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen/* 2526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Copyright (C) 2007 Esmertec AG. 3526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Copyright (C) 2007 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 com.google.android.mms.InvalidHeaderValueException; 21526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 22526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenimport java.util.ArrayList; 23526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenimport java.util.HashMap; 24526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 25526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenpublic class PduHeaders { 26526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 27526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * All pdu header fields. 28526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 29526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int BCC = 0x81; 30526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CC = 0x82; 31526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT_LOCATION = 0x83; 32526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT_TYPE = 0x84; 33526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int DATE = 0x85; 34526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int DELIVERY_REPORT = 0x86; 35526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int DELIVERY_TIME = 0x87; 36526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int EXPIRY = 0x88; 37526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int FROM = 0x89; 38526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_CLASS = 0x8A; 39526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_ID = 0x8B; 40526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE = 0x8C; 41526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MMS_VERSION = 0x8D; 42526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_SIZE = 0x8E; 43526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int PRIORITY = 0x8F; 44526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 45526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int READ_REPLY = 0x90; 46526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int READ_REPORT = 0x90; 47526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int REPORT_ALLOWED = 0x91; 48526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS = 0x92; 49526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_TEXT = 0x93; 50526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int SENDER_VISIBILITY = 0x94; 51526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STATUS = 0x95; 52526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int SUBJECT = 0x96; 53526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int TO = 0x97; 54526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int TRANSACTION_ID = 0x98; 55526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RETRIEVE_STATUS = 0x99; 56526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RETRIEVE_TEXT = 0x9A; 57526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int READ_STATUS = 0x9B; 58526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int REPLY_CHARGING = 0x9C; 59526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int REPLY_CHARGING_DEADLINE = 0x9D; 60526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int REPLY_CHARGING_ID = 0x9E; 61526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int REPLY_CHARGING_SIZE = 0x9F; 62526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 63526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int PREVIOUSLY_SENT_BY = 0xA0; 64526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int PREVIOUSLY_SENT_DATE = 0xA1; 65526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE = 0xA2; 66526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MM_STATE = 0xA3; 67526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MM_FLAGS = 0xA4; 68526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE_STATUS = 0xA5; 69526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE_STATUS_TEXT = 0xA6; 70526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORED = 0xA7; 71526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ATTRIBUTES = 0xA8; 72526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int TOTALS = 0xA9; 73526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MBOX_TOTALS = 0xAA; 74526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int QUOTAS = 0xAB; 75526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MBOX_QUOTAS = 0xAC; 76526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_COUNT = 0xAD; 77526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT = 0xAE; 78526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int START = 0xAF; 79526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 80526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ADDITIONAL_HEADERS = 0xB0; 81526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int DISTRIBUTION_INDICATOR = 0xB1; 82526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ELEMENT_DESCRIPTOR = 0xB2; 83526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int LIMIT = 0xB3; 84526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RECOMMENDED_RETRIEVAL_MODE = 0xB4; 85526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RECOMMENDED_RETRIEVAL_MODE_TEXT = 0xB5; 86526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STATUS_TEXT = 0xB6; 87526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int APPLIC_ID = 0xB7; 88526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int REPLY_APPLIC_ID = 0xB8; 89526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int AUX_APPLIC_ID = 0xB9; 90526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT_CLASS = 0xBA; 91526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int DRM_CONTENT = 0xBB; 92526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int ADAPTATION_ALLOWED = 0xBC; 93526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int REPLACE_ID = 0xBD; 94526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CANCEL_ID = 0xBE; 95526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CANCEL_STATUS = 0xBF; 96526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 97526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 98526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Message-Type field types. 99526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 100526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_SEND_REQ = 0x80; 101526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_SEND_CONF = 0x81; 102526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_NOTIFICATION_IND = 0x82; 103526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_NOTIFYRESP_IND = 0x83; 104526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_RETRIEVE_CONF = 0x84; 105526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_ACKNOWLEDGE_IND = 0x85; 106526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_DELIVERY_IND = 0x86; 107526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_READ_REC_IND = 0x87; 108526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_READ_ORIG_IND = 0x88; 109526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_FORWARD_REQ = 0x89; 110526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_FORWARD_CONF = 0x8A; 111526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_MBOX_STORE_REQ = 0x8B; 112526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_MBOX_STORE_CONF = 0x8C; 113526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_MBOX_VIEW_REQ = 0x8D; 114526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_MBOX_VIEW_CONF = 0x8E; 115526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_MBOX_UPLOAD_REQ = 0x8F; 116526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_MBOX_UPLOAD_CONF = 0x90; 117526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_MBOX_DELETE_REQ = 0x91; 118526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_MBOX_DELETE_CONF = 0x92; 119526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_MBOX_DESCR = 0x93; 120526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_DELETE_REQ = 0x94; 121526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_DELETE_CONF = 0x95; 122526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_CANCEL_REQ = 0x96; 123526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_TYPE_CANCEL_CONF = 0x97; 124526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 125526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 126526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Delivery-Report | 127526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Read-Report | 128526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Report-Allowed | 129526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Sender-Visibility | 130526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Store | 131526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Stored | 132526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Totals | 133526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Quotas | 134526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Distribution-Indicator | 135526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-DRM-Content | 136526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Adaptation-Allowed | 137526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * field types. 138526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 139526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int VALUE_YES = 0x80; 140526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int VALUE_NO = 0x81; 141526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 142526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 143526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Delivery-Time | 144526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Expiry and Reply-Charging-Deadline | 145526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * field type components. 146526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 147526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int VALUE_ABSOLUTE_TOKEN = 0x80; 148526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int VALUE_RELATIVE_TOKEN = 0x81; 149526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 150526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 151526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-MMS-Version field types. 152526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 153526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MMS_VERSION_1_3 = ((1 << 4) | 3); 154526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MMS_VERSION_1_2 = ((1 << 4) | 2); 155526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MMS_VERSION_1_1 = ((1 << 4) | 1); 156526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MMS_VERSION_1_0 = ((1 << 4) | 0); 157526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 158526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Current version is 1.2. 159526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CURRENT_MMS_VERSION = MMS_VERSION_1_2; 160526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 161526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 162526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * From field type components. 163526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 164526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int FROM_ADDRESS_PRESENT_TOKEN = 0x80; 165526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int FROM_INSERT_ADDRESS_TOKEN = 0x81; 166526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 167526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String FROM_ADDRESS_PRESENT_TOKEN_STR = "address-present-token"; 168526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String FROM_INSERT_ADDRESS_TOKEN_STR = "insert-address-token"; 169526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 170526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 171526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Status Field. 172526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 173526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STATUS_EXPIRED = 0x80; 174526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STATUS_RETRIEVED = 0x81; 175526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STATUS_REJECTED = 0x82; 176526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STATUS_DEFERRED = 0x83; 177526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STATUS_UNRECOGNIZED = 0x84; 178526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STATUS_INDETERMINATE = 0x85; 179526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STATUS_FORWARDED = 0x86; 180526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STATUS_UNREACHABLE = 0x87; 181526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 182526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 183526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * MM-Flags field type components. 184526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 185526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MM_FLAGS_ADD_TOKEN = 0x80; 186526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MM_FLAGS_REMOVE_TOKEN = 0x81; 187526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MM_FLAGS_FILTER_TOKEN = 0x82; 188526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 189526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 190526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Message-Class field types. 191526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 192526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_CLASS_PERSONAL = 0x80; 193526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_CLASS_ADVERTISEMENT = 0x81; 194526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_CLASS_INFORMATIONAL = 0x82; 195526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MESSAGE_CLASS_AUTO = 0x83; 196526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 197526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MESSAGE_CLASS_PERSONAL_STR = "personal"; 198526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MESSAGE_CLASS_ADVERTISEMENT_STR = "advertisement"; 199526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MESSAGE_CLASS_INFORMATIONAL_STR = "informational"; 200526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MESSAGE_CLASS_AUTO_STR = "auto"; 201526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 202526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 203526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Priority field types. 204526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 205526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int PRIORITY_LOW = 0x80; 206526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int PRIORITY_NORMAL = 0x81; 207526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int PRIORITY_HIGH = 0x82; 208526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 209526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 210526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Response-Status field types. 211526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 212526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_OK = 0x80; 213526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_UNSPECIFIED = 0x81; 214526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_SERVICE_DENIED = 0x82; 215526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 216526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_MESSAGE_FORMAT_CORRUPT = 0x83; 217526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_SENDING_ADDRESS_UNRESOLVED = 0x84; 218526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 219526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_MESSAGE_NOT_FOUND = 0x85; 220526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_NETWORK_PROBLEM = 0x86; 221526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_CONTENT_NOT_ACCEPTED = 0x87; 222526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE = 0x88; 223526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE = 0xC0; 224526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 225526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_TRANSIENT_SENDNG_ADDRESS_UNRESOLVED = 0xC1; 226526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND = 0xC2; 227526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM = 0xC3; 228526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_TRANSIENT_PARTIAL_SUCCESS = 0xC4; 229526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 230526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_FAILURE = 0xE0; 231526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_SERVICE_DENIED = 0xE1; 232526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT = 0xE2; 233526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_SENDING_ADDRESS_UNRESOLVED = 0xE3; 234526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND = 0xE4; 235526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_CONTENT_NOT_ACCEPTED = 0xE5; 236526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_LIMITATIONS_NOT_MET = 0xE6; 237526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_REQUEST_NOT_ACCEPTED = 0xE6; 238526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_FORWARDING_DENIED = 0xE8; 239526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_NOT_SUPPORTED = 0xE9; 240526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_ADDRESS_HIDING_NOT_SUPPORTED = 0xEA; 241526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID = 0xEB; 242526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RESPONSE_STATUS_ERROR_PERMANENT_END = 0xFF; 243526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 244526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 245526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Retrieve-Status field types. 246526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 247526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RETRIEVE_STATUS_OK = 0x80; 248526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE = 0xC0; 249526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND = 0xC1; 250526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM = 0xC2; 251526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE = 0xE0; 252526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RETRIEVE_STATUS_ERROR_PERMANENT_SERVICE_DENIED = 0xE1; 253526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RETRIEVE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND = 0xE2; 254526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RETRIEVE_STATUS_ERROR_PERMANENT_CONTENT_UNSUPPORTED = 0xE3; 255526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RETRIEVE_STATUS_ERROR_END = 0xFF; 256526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 257526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 258526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Sender-Visibility field types. 259526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 260526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int SENDER_VISIBILITY_HIDE = 0x80; 261526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int SENDER_VISIBILITY_SHOW = 0x81; 262526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 263526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 264526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Read-Status field types. 265526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 266526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int READ_STATUS_READ = 0x80; 267526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int READ_STATUS__DELETED_WITHOUT_BEING_READ = 0x81; 268526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 269526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 270526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Cancel-Status field types. 271526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 272526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CANCEL_STATUS_REQUEST_SUCCESSFULLY_RECEIVED = 0x80; 273526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CANCEL_STATUS_REQUEST_CORRUPTED = 0x81; 274526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 275526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 276526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Reply-Charging field types. 277526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 278526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int REPLY_CHARGING_REQUESTED = 0x80; 279526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int REPLY_CHARGING_REQUESTED_TEXT_ONLY = 0x81; 280526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int REPLY_CHARGING_ACCEPTED = 0x82; 281526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int REPLY_CHARGING_ACCEPTED_TEXT_ONLY = 0x83; 282526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 283526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 284526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-MM-State field types. 285526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 286526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MM_STATE_DRAFT = 0x80; 287526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MM_STATE_SENT = 0x81; 288526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MM_STATE_NEW = 0x82; 289526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MM_STATE_RETRIEVED = 0x83; 290526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int MM_STATE_FORWARDED = 0x84; 291526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 292526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 293526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Recommended-Retrieval-Mode field types. 294526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 295526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int RECOMMENDED_RETRIEVAL_MODE_MANUAL = 0x80; 296526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 297526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 298526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Content-Class field types. 299526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 300526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT_CLASS_TEXT = 0x80; 301526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT_CLASS_IMAGE_BASIC = 0x81; 302526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT_CLASS_IMAGE_RICH = 0x82; 303526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT_CLASS_VIDEO_BASIC = 0x83; 304526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT_CLASS_VIDEO_RICH = 0x84; 305526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT_CLASS_MEGAPIXEL = 0x85; 306526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT_CLASS_CONTENT_BASIC = 0x86; 307526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int CONTENT_CLASS_CONTENT_RICH = 0x87; 308526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 309526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 310526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * X-Mms-Store-Status field types. 311526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 312526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE_STATUS_SUCCESS = 0x80; 313526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE_STATUS_ERROR_TRANSIENT_FAILURE = 0xC0; 314526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM = 0xC1; 315526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE_STATUS_ERROR_PERMANENT_FAILURE = 0xE0; 316526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE_STATUS_ERROR_PERMANENT_SERVICE_DENIED = 0xE1; 317526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT = 0xE2; 318526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND = 0xE3; 319526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL = 0xE4; 320526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final int STORE_STATUS_ERROR_END = 0xFF; 321526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 322526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 323526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * The map contains the value of all headers. 324526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 325526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen private HashMap<Integer, Object> mHeaderMap = null; 326526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 327526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 328526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Constructor of PduHeaders. 329526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 330526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public PduHeaders() { 331526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mHeaderMap = new HashMap<Integer, Object>(); 332526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 333526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 334526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 335526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get octet value by header field. 336526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 337526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param field the field 338526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the octet value of the pdu header 339526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * with specified header field. Return 0 if 340526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * the value is not set. 341526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 342526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen protected int getOctet(int field) { 343526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen Integer octet = (Integer) mHeaderMap.get(field); 344526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (null == octet) { 345526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return 0; 346526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 347526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 348526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return octet; 349526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 350526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 351526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 352526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set octet value to pdu header by header field. 353526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 354526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param value the value 355526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param field the field 356526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws InvalidHeaderValueException if the value is invalid. 357526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 358526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen protected void setOctet(int value, int field) 359526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throws InvalidHeaderValueException{ 360526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 361526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Check whether this field can be set for specific 362526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * header and check validity of the field. 363526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 364526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen switch (field) { 365526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case REPORT_ALLOWED: 366526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case ADAPTATION_ALLOWED: 367526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case DELIVERY_REPORT: 368526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case DRM_CONTENT: 369526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case DISTRIBUTION_INDICATOR: 370526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case QUOTAS: 371526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case READ_REPORT: 372526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case STORE: 373526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case STORED: 374526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case TOTALS: 375526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case SENDER_VISIBILITY: 376526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((VALUE_YES != value) && (VALUE_NO != value)) { 377526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Invalid value. 378526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new InvalidHeaderValueException("Invalid Octet value!"); 379526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 380526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 381526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case READ_STATUS: 382526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((READ_STATUS_READ != value) && 383526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (READ_STATUS__DELETED_WITHOUT_BEING_READ != value)) { 384526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Invalid value. 385526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new InvalidHeaderValueException("Invalid Octet value!"); 386526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 387526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 388526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case CANCEL_STATUS: 389526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((CANCEL_STATUS_REQUEST_SUCCESSFULLY_RECEIVED != value) && 390526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (CANCEL_STATUS_REQUEST_CORRUPTED != value)) { 391526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Invalid value. 392526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new InvalidHeaderValueException("Invalid Octet value!"); 393526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 394526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 395526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case PRIORITY: 396526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((value < PRIORITY_LOW) || (value > PRIORITY_HIGH)) { 397526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Invalid value. 398526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new InvalidHeaderValueException("Invalid Octet value!"); 399526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 400526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 401526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case STATUS: 402526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((value < STATUS_EXPIRED) || (value > STATUS_UNREACHABLE)) { 403526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Invalid value. 404526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new InvalidHeaderValueException("Invalid Octet value!"); 405526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 406526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 407526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case REPLY_CHARGING: 408526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((value < REPLY_CHARGING_REQUESTED) 409526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen || (value > REPLY_CHARGING_ACCEPTED_TEXT_ONLY)) { 410526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Invalid value. 411526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new InvalidHeaderValueException("Invalid Octet value!"); 412526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 413526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 414526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case MM_STATE: 415526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((value < MM_STATE_DRAFT) || (value > MM_STATE_FORWARDED)) { 416526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Invalid value. 417526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new InvalidHeaderValueException("Invalid Octet value!"); 418526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 419526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 420526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case RECOMMENDED_RETRIEVAL_MODE: 421526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (RECOMMENDED_RETRIEVAL_MODE_MANUAL != value) { 422526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Invalid value. 423526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new InvalidHeaderValueException("Invalid Octet value!"); 424526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 425526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 426526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case CONTENT_CLASS: 427526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((value < CONTENT_CLASS_TEXT) 428526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen || (value > CONTENT_CLASS_CONTENT_RICH)) { 429526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Invalid value. 430526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new InvalidHeaderValueException("Invalid Octet value!"); 431526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 432526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 433526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case RETRIEVE_STATUS: 434526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // According to oma-ts-mms-enc-v1_3, section 7.3.50, we modify the invalid value. 435526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((value > RETRIEVE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM) && 436526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value < RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE)) { 437526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen value = RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE; 438526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } else if ((value > RETRIEVE_STATUS_ERROR_PERMANENT_CONTENT_UNSUPPORTED) && 439526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value <= RETRIEVE_STATUS_ERROR_END)) { 440526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen value = RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE; 441526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } else if ((value < RETRIEVE_STATUS_OK) || 442526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ((value > RETRIEVE_STATUS_OK) && 443526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value < RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE)) || 444526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value > RETRIEVE_STATUS_ERROR_END)) { 445526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen value = RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE; 446526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 447526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 448526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case STORE_STATUS: 449526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // According to oma-ts-mms-enc-v1_3, section 7.3.58, we modify the invalid value. 450526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((value > STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM) && 451526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value < STORE_STATUS_ERROR_PERMANENT_FAILURE)) { 452526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen value = STORE_STATUS_ERROR_TRANSIENT_FAILURE; 453526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } else if ((value > STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL) && 454526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value <= STORE_STATUS_ERROR_END)) { 455526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen value = STORE_STATUS_ERROR_PERMANENT_FAILURE; 456526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } else if ((value < STORE_STATUS_SUCCESS) || 457526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ((value > STORE_STATUS_SUCCESS) && 458526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value < STORE_STATUS_ERROR_TRANSIENT_FAILURE)) || 459526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value > STORE_STATUS_ERROR_END)) { 460526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen value = STORE_STATUS_ERROR_PERMANENT_FAILURE; 461526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 462526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 463526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case RESPONSE_STATUS: 464526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // According to oma-ts-mms-enc-v1_3, section 7.3.48, we modify the invalid value. 465526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((value > RESPONSE_STATUS_ERROR_TRANSIENT_PARTIAL_SUCCESS) && 466526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value < RESPONSE_STATUS_ERROR_PERMANENT_FAILURE)) { 467526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen value = RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE; 468526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } else if (((value > RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID) && 469526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value <= RESPONSE_STATUS_ERROR_PERMANENT_END)) || 470526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value < RESPONSE_STATUS_OK) || 471526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ((value > RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE) && 472526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value < RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE)) || 473526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (value > RESPONSE_STATUS_ERROR_PERMANENT_END)) { 474526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen value = RESPONSE_STATUS_ERROR_PERMANENT_FAILURE; 475526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 476526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 477526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case MMS_VERSION: 478526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((value < MMS_VERSION_1_0)|| (value > MMS_VERSION_1_3)) { 479526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen value = CURRENT_MMS_VERSION; // Current version is the default value. 480526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 481526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 482526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case MESSAGE_TYPE: 483526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if ((value < MESSAGE_TYPE_SEND_REQ) || (value > MESSAGE_TYPE_CANCEL_CONF)) { 484526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // Invalid value. 485526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new InvalidHeaderValueException("Invalid Octet value!"); 486526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 487526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 488526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen default: 489526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // This header value should not be Octect. 490526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new RuntimeException("Invalid header field!"); 491526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 492526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mHeaderMap.put(field, value); 493526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 494526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 495526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 496526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get TextString value by header field. 497526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 498526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param field the field 499526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the TextString value of the pdu header 500526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * with specified header field 501526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 502526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen protected byte[] getTextString(int field) { 503526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return (byte[]) mHeaderMap.get(field); 504526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 505526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 506526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 507526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set TextString value to pdu header by header field. 508526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 509526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param value the value 510526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param field the field 511526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the TextString value of the pdu header 512526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * with specified header field 513526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws NullPointerException if the value is null. 514526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 515526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen protected void setTextString(byte[] value, int field) { 516526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 517526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Check whether this field can be set for specific 518526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * header and check validity of the field. 519526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 520526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (null == value) { 521526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new NullPointerException(); 522526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 523526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 524526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen switch (field) { 525526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case TRANSACTION_ID: 526526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case REPLY_CHARGING_ID: 527526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case AUX_APPLIC_ID: 528526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case APPLIC_ID: 529526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case REPLY_APPLIC_ID: 530526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case MESSAGE_ID: 531526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case REPLACE_ID: 532526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case CANCEL_ID: 533526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case CONTENT_LOCATION: 534526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case MESSAGE_CLASS: 535526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case CONTENT_TYPE: 536526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 537526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen default: 538526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // This header value should not be Text-String. 539526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new RuntimeException("Invalid header field!"); 540526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 541526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mHeaderMap.put(field, value); 542526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 543526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 544526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 545526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get EncodedStringValue value by header field. 546526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 547526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param field the field 548526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the EncodedStringValue value of the pdu header 549526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * with specified header field 550526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 551526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen protected EncodedStringValue getEncodedStringValue(int field) { 552526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return (EncodedStringValue) mHeaderMap.get(field); 553526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 554526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 555526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 556526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get TO, CC or BCC header value. 557526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 558526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param field the field 559526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the EncodeStringValue array of the pdu header 560526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * with specified header field 561526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 562526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen protected EncodedStringValue[] getEncodedStringValues(int field) { 563526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ArrayList<EncodedStringValue> list = 564526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (ArrayList<EncodedStringValue>) mHeaderMap.get(field); 565526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (null == list) { 566526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return null; 567526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 568526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen EncodedStringValue[] values = new EncodedStringValue[list.size()]; 569526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return list.toArray(values); 570526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 571526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 572526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 573526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set EncodedStringValue value to pdu header by header field. 574526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 575526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param value the value 576526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param field the field 577526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the EncodedStringValue value of the pdu header 578526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * with specified header field 579526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws NullPointerException if the value is null. 580526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 581526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen protected void setEncodedStringValue(EncodedStringValue value, int field) { 582526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 583526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Check whether this field can be set for specific 584526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * header and check validity of the field. 585526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 586526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (null == value) { 587526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new NullPointerException(); 588526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 589526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 590526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen switch (field) { 591526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case SUBJECT: 592526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case RECOMMENDED_RETRIEVAL_MODE_TEXT: 593526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case RETRIEVE_TEXT: 594526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case STATUS_TEXT: 595526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case STORE_STATUS_TEXT: 596526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case RESPONSE_TEXT: 597526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case FROM: 598526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case PREVIOUSLY_SENT_BY: 599526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case MM_FLAGS: 600526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 601526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen default: 602526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // This header value should not be Encoded-String-Value. 603526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new RuntimeException("Invalid header field!"); 604526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 605526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 606526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mHeaderMap.put(field, value); 607526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 608526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 609526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 610526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set TO, CC or BCC header value. 611526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 612526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param value the value 613526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param field the field 614526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the EncodedStringValue value array of the pdu header 615526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * with specified header field 616526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws NullPointerException if the value is null. 617526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 618526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen protected void setEncodedStringValues(EncodedStringValue[] value, int field) { 619526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 620526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Check whether this field can be set for specific 621526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * header and check validity of the field. 622526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 623526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (null == value) { 624526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new NullPointerException(); 625526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 626526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 627526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen switch (field) { 628526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case BCC: 629526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case CC: 630526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case TO: 631526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 632526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen default: 633526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // This header value should not be Encoded-String-Value. 634526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new RuntimeException("Invalid header field!"); 635526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 636526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 637526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ArrayList<EncodedStringValue> list = new ArrayList<EncodedStringValue>(); 638526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen for (int i = 0; i < value.length; i++) { 639526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen list.add(value[i]); 640526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 641526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mHeaderMap.put(field, list); 642526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 643526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 644526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 645526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Append one EncodedStringValue to another. 646526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 647526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param value the EncodedStringValue to append 648526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param field the field 649526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @throws NullPointerException if the value is null. 650526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 651526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen protected void appendEncodedStringValue(EncodedStringValue value, 652526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen int field) { 653526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (null == value) { 654526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new NullPointerException(); 655526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 656526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 657526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen switch (field) { 658526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case BCC: 659526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case CC: 660526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case TO: 661526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 662526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen default: 663526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new RuntimeException("Invalid header field!"); 664526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 665526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 666526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen ArrayList<EncodedStringValue> list = 667526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen (ArrayList<EncodedStringValue>) mHeaderMap.get(field); 668526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (null == list) { 669526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen list = new ArrayList<EncodedStringValue>(); 670526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 671526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen list.add(value); 672526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mHeaderMap.put(field, list); 673526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 674526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 675526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 676526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Get LongInteger value by header field. 677526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 678526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param field the field 679526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return the LongInteger value of the pdu header 680526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * with specified header field. if return -1, the 681526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * field is not existed in pdu header. 682526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 683526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen protected long getLongInteger(int field) { 684526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen Long longInteger = (Long) mHeaderMap.get(field); 685526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (null == longInteger) { 686526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return -1; 687526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 688526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 689526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return longInteger.longValue(); 690526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 691526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 692526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 693526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Set LongInteger value to pdu header by header field. 694526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 695526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param value the value 696526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param field the field 697526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 698526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen protected void setLongInteger(long value, int field) { 699526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 700526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Check whether this field can be set for specific 701526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * header and check validity of the field. 702526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 703526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen switch (field) { 704526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case DATE: 705526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case REPLY_CHARGING_SIZE: 706526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case MESSAGE_SIZE: 707526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case MESSAGE_COUNT: 708526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case START: 709526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case LIMIT: 710526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case DELIVERY_TIME: 711526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case EXPIRY: 712526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case REPLY_CHARGING_DEADLINE: 713526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen case PREVIOUSLY_SENT_DATE: 714526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen break; 715526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen default: 716526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen // This header value should not be LongInteger. 717526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen throw new RuntimeException("Invalid header field!"); 718526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 719526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen mHeaderMap.put(field, value); 720526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 721526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen} 722