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