1d02a064168ae5c916b977182b764580e601cb084Wink Saville/*
2d02a064168ae5c916b977182b764580e601cb084Wink Saville * Copyright (C) 2007 Esmertec AG.
3d02a064168ae5c916b977182b764580e601cb084Wink Saville * Copyright (C) 2007 The Android Open Source Project
4d02a064168ae5c916b977182b764580e601cb084Wink Saville *
5d02a064168ae5c916b977182b764580e601cb084Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
6d02a064168ae5c916b977182b764580e601cb084Wink Saville * you may not use this file except in compliance with the License.
7d02a064168ae5c916b977182b764580e601cb084Wink Saville * You may obtain a copy of the License at
8d02a064168ae5c916b977182b764580e601cb084Wink Saville *
9d02a064168ae5c916b977182b764580e601cb084Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
10d02a064168ae5c916b977182b764580e601cb084Wink Saville *
11d02a064168ae5c916b977182b764580e601cb084Wink Saville * Unless required by applicable law or agreed to in writing, software
12d02a064168ae5c916b977182b764580e601cb084Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
13d02a064168ae5c916b977182b764580e601cb084Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14d02a064168ae5c916b977182b764580e601cb084Wink Saville * See the License for the specific language governing permissions and
15d02a064168ae5c916b977182b764580e601cb084Wink Saville * limitations under the License.
16d02a064168ae5c916b977182b764580e601cb084Wink Saville */
17d02a064168ae5c916b977182b764580e601cb084Wink Saville
18d02a064168ae5c916b977182b764580e601cb084Wink Savillepackage com.google.android.mms.pdu;
19d02a064168ae5c916b977182b764580e601cb084Wink Saville
20d02a064168ae5c916b977182b764580e601cb084Wink Savilleimport com.google.android.mms.InvalidHeaderValueException;
21d02a064168ae5c916b977182b764580e601cb084Wink Saville
22d02a064168ae5c916b977182b764580e601cb084Wink Savilleimport java.util.ArrayList;
23d02a064168ae5c916b977182b764580e601cb084Wink Savilleimport java.util.HashMap;
24d02a064168ae5c916b977182b764580e601cb084Wink Saville
25d02a064168ae5c916b977182b764580e601cb084Wink Savillepublic class PduHeaders {
26d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
27d02a064168ae5c916b977182b764580e601cb084Wink Saville     * All pdu header fields.
28d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
29d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int BCC                             = 0x81;
30d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CC                              = 0x82;
31d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT_LOCATION                = 0x83;
32d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT_TYPE                    = 0x84;
33d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int DATE                            = 0x85;
34d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int DELIVERY_REPORT                 = 0x86;
35d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int DELIVERY_TIME                   = 0x87;
36d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int EXPIRY                          = 0x88;
37d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int FROM                            = 0x89;
38d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_CLASS                   = 0x8A;
39d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_ID                      = 0x8B;
40d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE                    = 0x8C;
41d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MMS_VERSION                     = 0x8D;
42d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_SIZE                    = 0x8E;
43d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int PRIORITY                        = 0x8F;
44d02a064168ae5c916b977182b764580e601cb084Wink Saville
45d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int READ_REPLY                      = 0x90;
46d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int READ_REPORT                     = 0x90;
47d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int REPORT_ALLOWED                  = 0x91;
48d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS                 = 0x92;
49d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_TEXT                   = 0x93;
50d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int SENDER_VISIBILITY               = 0x94;
51d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STATUS                          = 0x95;
52d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int SUBJECT                         = 0x96;
53d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int TO                              = 0x97;
54d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int TRANSACTION_ID                  = 0x98;
55d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RETRIEVE_STATUS                 = 0x99;
56d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RETRIEVE_TEXT                   = 0x9A;
57d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int READ_STATUS                     = 0x9B;
58d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int REPLY_CHARGING                  = 0x9C;
59d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int REPLY_CHARGING_DEADLINE         = 0x9D;
60d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int REPLY_CHARGING_ID               = 0x9E;
61d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int REPLY_CHARGING_SIZE             = 0x9F;
62d02a064168ae5c916b977182b764580e601cb084Wink Saville
63d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int PREVIOUSLY_SENT_BY              = 0xA0;
64d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int PREVIOUSLY_SENT_DATE            = 0xA1;
65d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE                           = 0xA2;
66d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MM_STATE                        = 0xA3;
67d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MM_FLAGS                        = 0xA4;
68d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE_STATUS                    = 0xA5;
69d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE_STATUS_TEXT               = 0xA6;
70d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORED                          = 0xA7;
71d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int ATTRIBUTES                      = 0xA8;
72d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int TOTALS                          = 0xA9;
73d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MBOX_TOTALS                     = 0xAA;
74d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int QUOTAS                          = 0xAB;
75d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MBOX_QUOTAS                     = 0xAC;
76d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_COUNT                   = 0xAD;
77d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT                         = 0xAE;
78d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int START                           = 0xAF;
79d02a064168ae5c916b977182b764580e601cb084Wink Saville
80d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int ADDITIONAL_HEADERS              = 0xB0;
81d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int DISTRIBUTION_INDICATOR          = 0xB1;
82d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int ELEMENT_DESCRIPTOR              = 0xB2;
83d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int LIMIT                           = 0xB3;
84d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RECOMMENDED_RETRIEVAL_MODE      = 0xB4;
85d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RECOMMENDED_RETRIEVAL_MODE_TEXT = 0xB5;
86d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STATUS_TEXT                     = 0xB6;
87d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int APPLIC_ID                       = 0xB7;
88d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int REPLY_APPLIC_ID                 = 0xB8;
89d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int AUX_APPLIC_ID                   = 0xB9;
90d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT_CLASS                   = 0xBA;
91d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int DRM_CONTENT                     = 0xBB;
92d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int ADAPTATION_ALLOWED              = 0xBC;
93d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int REPLACE_ID                      = 0xBD;
94d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CANCEL_ID                       = 0xBE;
95d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CANCEL_STATUS                   = 0xBF;
96d02a064168ae5c916b977182b764580e601cb084Wink Saville
97d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
98d02a064168ae5c916b977182b764580e601cb084Wink Saville     * X-Mms-Message-Type field types.
99d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
100d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_SEND_REQ           = 0x80;
101d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_SEND_CONF          = 0x81;
102d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_NOTIFICATION_IND   = 0x82;
103d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_NOTIFYRESP_IND     = 0x83;
104d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_RETRIEVE_CONF      = 0x84;
105d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_ACKNOWLEDGE_IND    = 0x85;
106d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_DELIVERY_IND       = 0x86;
107d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_READ_REC_IND       = 0x87;
108d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_READ_ORIG_IND      = 0x88;
109d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_FORWARD_REQ        = 0x89;
110d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_FORWARD_CONF       = 0x8A;
111d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_MBOX_STORE_REQ     = 0x8B;
112d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_MBOX_STORE_CONF    = 0x8C;
113d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_MBOX_VIEW_REQ      = 0x8D;
114d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_MBOX_VIEW_CONF     = 0x8E;
115d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_MBOX_UPLOAD_REQ    = 0x8F;
116d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_MBOX_UPLOAD_CONF   = 0x90;
117d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_MBOX_DELETE_REQ    = 0x91;
118d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_MBOX_DELETE_CONF   = 0x92;
119d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_MBOX_DESCR         = 0x93;
120d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_DELETE_REQ         = 0x94;
121d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_DELETE_CONF        = 0x95;
122d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_CANCEL_REQ         = 0x96;
123d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_TYPE_CANCEL_CONF        = 0x97;
124d02a064168ae5c916b977182b764580e601cb084Wink Saville
125d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
126d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Delivery-Report |
127d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Read-Report |
128d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Report-Allowed |
129d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Sender-Visibility |
130d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Store |
131d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Stored |
132d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Totals |
133d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Quotas |
134d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Distribution-Indicator |
135d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-DRM-Content |
136d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Adaptation-Allowed |
137d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  field types.
138d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
139d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int VALUE_YES                       = 0x80;
140d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int VALUE_NO                        = 0x81;
141d02a064168ae5c916b977182b764580e601cb084Wink Saville
142d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
143d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  Delivery-Time |
144d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  Expiry and Reply-Charging-Deadline |
145d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  field type components.
146d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
147d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int VALUE_ABSOLUTE_TOKEN            = 0x80;
148d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int VALUE_RELATIVE_TOKEN            = 0x81;
149d02a064168ae5c916b977182b764580e601cb084Wink Saville
150d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
151d02a064168ae5c916b977182b764580e601cb084Wink Saville     * X-Mms-MMS-Version field types.
152d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
153d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MMS_VERSION_1_3                 = ((1 << 4) | 3);
154d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MMS_VERSION_1_2                 = ((1 << 4) | 2);
155d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MMS_VERSION_1_1                 = ((1 << 4) | 1);
156d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MMS_VERSION_1_0                 = ((1 << 4) | 0);
157d02a064168ae5c916b977182b764580e601cb084Wink Saville
158d02a064168ae5c916b977182b764580e601cb084Wink Saville    // Current version is 1.2.
159d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CURRENT_MMS_VERSION             = MMS_VERSION_1_2;
160d02a064168ae5c916b977182b764580e601cb084Wink Saville
161d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
162d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  From field type components.
163d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
164d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int FROM_ADDRESS_PRESENT_TOKEN      = 0x80;
165d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int FROM_INSERT_ADDRESS_TOKEN       = 0x81;
166d02a064168ae5c916b977182b764580e601cb084Wink Saville
167d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final String FROM_ADDRESS_PRESENT_TOKEN_STR = "address-present-token";
168d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final String FROM_INSERT_ADDRESS_TOKEN_STR = "insert-address-token";
169d02a064168ae5c916b977182b764580e601cb084Wink Saville
170d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
171d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Status Field.
172d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
173d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STATUS_EXPIRED                  = 0x80;
174d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STATUS_RETRIEVED                = 0x81;
175d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STATUS_REJECTED                 = 0x82;
176d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STATUS_DEFERRED                 = 0x83;
177d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STATUS_UNRECOGNIZED             = 0x84;
178d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STATUS_INDETERMINATE            = 0x85;
179d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STATUS_FORWARDED                = 0x86;
180d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STATUS_UNREACHABLE              = 0x87;
181d02a064168ae5c916b977182b764580e601cb084Wink Saville
182d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
183d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  MM-Flags field type components.
184d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
185d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MM_FLAGS_ADD_TOKEN              = 0x80;
186d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MM_FLAGS_REMOVE_TOKEN           = 0x81;
187d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MM_FLAGS_FILTER_TOKEN           = 0x82;
188d02a064168ae5c916b977182b764580e601cb084Wink Saville
189d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
190d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Message-Class field types.
191d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
192d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_CLASS_PERSONAL          = 0x80;
193d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_CLASS_ADVERTISEMENT     = 0x81;
194d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_CLASS_INFORMATIONAL     = 0x82;
195d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MESSAGE_CLASS_AUTO              = 0x83;
196d02a064168ae5c916b977182b764580e601cb084Wink Saville
197d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final String MESSAGE_CLASS_PERSONAL_STR = "personal";
198d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final String MESSAGE_CLASS_ADVERTISEMENT_STR = "advertisement";
199d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final String MESSAGE_CLASS_INFORMATIONAL_STR = "informational";
200d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final String MESSAGE_CLASS_AUTO_STR = "auto";
201d02a064168ae5c916b977182b764580e601cb084Wink Saville
202d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
203d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Priority field types.
204d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
205d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int PRIORITY_LOW                    = 0x80;
206d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int PRIORITY_NORMAL                 = 0x81;
207d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int PRIORITY_HIGH                   = 0x82;
208d02a064168ae5c916b977182b764580e601cb084Wink Saville
209d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
210d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Response-Status field types.
211d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
212d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_OK                   = 0x80;
213d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_UNSPECIFIED    = 0x81;
214d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_SERVICE_DENIED = 0x82;
215d02a064168ae5c916b977182b764580e601cb084Wink Saville
216d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_MESSAGE_FORMAT_CORRUPT     = 0x83;
217d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_SENDING_ADDRESS_UNRESOLVED = 0x84;
218d02a064168ae5c916b977182b764580e601cb084Wink Saville
219d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_MESSAGE_NOT_FOUND    = 0x85;
220d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_NETWORK_PROBLEM      = 0x86;
221d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_CONTENT_NOT_ACCEPTED = 0x87;
222d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE  = 0x88;
223d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE    = 0xC0;
224d02a064168ae5c916b977182b764580e601cb084Wink Saville
225d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_SENDNG_ADDRESS_UNRESOLVED = 0xC1;
226d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND         = 0xC2;
227d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM           = 0xC3;
228d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_PARTIAL_SUCCESS           = 0xC4;
229d02a064168ae5c916b977182b764580e601cb084Wink Saville
230d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_FAILURE                             = 0xE0;
231d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_SERVICE_DENIED                      = 0xE1;
232d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT              = 0xE2;
233d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_SENDING_ADDRESS_UNRESOLVED          = 0xE3;
234d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND                   = 0xE4;
235d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_CONTENT_NOT_ACCEPTED                = 0xE5;
236d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_LIMITATIONS_NOT_MET  = 0xE6;
237d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_REQUEST_NOT_ACCEPTED = 0xE6;
238d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_FORWARDING_DENIED    = 0xE8;
239d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_NOT_SUPPORTED        = 0xE9;
240d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_ADDRESS_HIDING_NOT_SUPPORTED        = 0xEA;
241d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID                     = 0xEB;
242d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RESPONSE_STATUS_ERROR_PERMANENT_END                                 = 0xFF;
243d02a064168ae5c916b977182b764580e601cb084Wink Saville
244d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
245d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Retrieve-Status field types.
246d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
247d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RETRIEVE_STATUS_OK                                  = 0x80;
248d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE             = 0xC0;
249d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND   = 0xC1;
250d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM     = 0xC2;
251d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE             = 0xE0;
252d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_SERVICE_DENIED      = 0xE1;
253d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND   = 0xE2;
254d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_CONTENT_UNSUPPORTED = 0xE3;
255d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RETRIEVE_STATUS_ERROR_END                           = 0xFF;
256d02a064168ae5c916b977182b764580e601cb084Wink Saville
257d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
258d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Sender-Visibility field types.
259d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
260d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int SENDER_VISIBILITY_HIDE          = 0x80;
261d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int SENDER_VISIBILITY_SHOW          = 0x81;
262d02a064168ae5c916b977182b764580e601cb084Wink Saville
263d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
264d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Read-Status field types.
265d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
266d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int READ_STATUS_READ                        = 0x80;
267d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int READ_STATUS__DELETED_WITHOUT_BEING_READ = 0x81;
268d02a064168ae5c916b977182b764580e601cb084Wink Saville
269d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
270d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Cancel-Status field types.
271d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
272d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CANCEL_STATUS_REQUEST_SUCCESSFULLY_RECEIVED = 0x80;
273d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CANCEL_STATUS_REQUEST_CORRUPTED             = 0x81;
274d02a064168ae5c916b977182b764580e601cb084Wink Saville
275d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
276d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Reply-Charging field types.
277d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
278d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int REPLY_CHARGING_REQUESTED           = 0x80;
279d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int REPLY_CHARGING_REQUESTED_TEXT_ONLY = 0x81;
280d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int REPLY_CHARGING_ACCEPTED            = 0x82;
281d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int REPLY_CHARGING_ACCEPTED_TEXT_ONLY  = 0x83;
282d02a064168ae5c916b977182b764580e601cb084Wink Saville
283d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
284d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-MM-State field types.
285d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
286d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MM_STATE_DRAFT                  = 0x80;
287d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MM_STATE_SENT                   = 0x81;
288d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MM_STATE_NEW                    = 0x82;
289d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MM_STATE_RETRIEVED              = 0x83;
290d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int MM_STATE_FORWARDED              = 0x84;
291d02a064168ae5c916b977182b764580e601cb084Wink Saville
292d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
293d02a064168ae5c916b977182b764580e601cb084Wink Saville     * X-Mms-Recommended-Retrieval-Mode field types.
294d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
295d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int RECOMMENDED_RETRIEVAL_MODE_MANUAL = 0x80;
296d02a064168ae5c916b977182b764580e601cb084Wink Saville
297d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
298d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Content-Class field types.
299d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
300d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT_CLASS_TEXT              = 0x80;
301d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT_CLASS_IMAGE_BASIC       = 0x81;
302d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT_CLASS_IMAGE_RICH        = 0x82;
303d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT_CLASS_VIDEO_BASIC       = 0x83;
304d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT_CLASS_VIDEO_RICH        = 0x84;
305d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT_CLASS_MEGAPIXEL         = 0x85;
306d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT_CLASS_CONTENT_BASIC     = 0x86;
307d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int CONTENT_CLASS_CONTENT_RICH      = 0x87;
308d02a064168ae5c916b977182b764580e601cb084Wink Saville
309d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
310d02a064168ae5c916b977182b764580e601cb084Wink Saville     *  X-Mms-Store-Status field types.
311d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
312d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE_STATUS_SUCCESS                                = 0x80;
313d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE_STATUS_ERROR_TRANSIENT_FAILURE                = 0xC0;
314d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM        = 0xC1;
315d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE_STATUS_ERROR_PERMANENT_FAILURE                = 0xE0;
316d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE_STATUS_ERROR_PERMANENT_SERVICE_DENIED         = 0xE1;
317d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT = 0xE2;
318d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND      = 0xE3;
319d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL             = 0xE4;
320d02a064168ae5c916b977182b764580e601cb084Wink Saville    public static final int STORE_STATUS_ERROR_END                              = 0xFF;
321d02a064168ae5c916b977182b764580e601cb084Wink Saville
322d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
323d02a064168ae5c916b977182b764580e601cb084Wink Saville     * The map contains the value of all headers.
324d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
325d02a064168ae5c916b977182b764580e601cb084Wink Saville    private HashMap<Integer, Object> mHeaderMap = null;
326d02a064168ae5c916b977182b764580e601cb084Wink Saville
327d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
328d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Constructor of PduHeaders.
329d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
330d02a064168ae5c916b977182b764580e601cb084Wink Saville    public PduHeaders() {
331d02a064168ae5c916b977182b764580e601cb084Wink Saville        mHeaderMap = new HashMap<Integer, Object>();
332d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
333d02a064168ae5c916b977182b764580e601cb084Wink Saville
334d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
335d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Get octet value by header field.
336d02a064168ae5c916b977182b764580e601cb084Wink Saville     *
337d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param field the field
338d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @return the octet value of the pdu header
339d02a064168ae5c916b977182b764580e601cb084Wink Saville     *          with specified header field. Return 0 if
340d02a064168ae5c916b977182b764580e601cb084Wink Saville     *          the value is not set.
341d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
342d02a064168ae5c916b977182b764580e601cb084Wink Saville    protected int getOctet(int field) {
343d02a064168ae5c916b977182b764580e601cb084Wink Saville        Integer octet = (Integer) mHeaderMap.get(field);
344d02a064168ae5c916b977182b764580e601cb084Wink Saville        if (null == octet) {
345d02a064168ae5c916b977182b764580e601cb084Wink Saville            return 0;
346d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
347d02a064168ae5c916b977182b764580e601cb084Wink Saville
348d02a064168ae5c916b977182b764580e601cb084Wink Saville        return octet;
349d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
350d02a064168ae5c916b977182b764580e601cb084Wink Saville
351d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
352d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Set octet value to pdu header by header field.
353d02a064168ae5c916b977182b764580e601cb084Wink Saville     *
354d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param value the value
355d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param field the field
356d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @throws InvalidHeaderValueException if the value is invalid.
357d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
358d02a064168ae5c916b977182b764580e601cb084Wink Saville    protected void setOctet(int value, int field)
359d02a064168ae5c916b977182b764580e601cb084Wink Saville            throws InvalidHeaderValueException{
360d02a064168ae5c916b977182b764580e601cb084Wink Saville        /**
361d02a064168ae5c916b977182b764580e601cb084Wink Saville         * Check whether this field can be set for specific
362d02a064168ae5c916b977182b764580e601cb084Wink Saville         * header and check validity of the field.
363d02a064168ae5c916b977182b764580e601cb084Wink Saville         */
364d02a064168ae5c916b977182b764580e601cb084Wink Saville        switch (field) {
365d02a064168ae5c916b977182b764580e601cb084Wink Saville            case REPORT_ALLOWED:
366d02a064168ae5c916b977182b764580e601cb084Wink Saville            case ADAPTATION_ALLOWED:
367d02a064168ae5c916b977182b764580e601cb084Wink Saville            case DELIVERY_REPORT:
368d02a064168ae5c916b977182b764580e601cb084Wink Saville            case DRM_CONTENT:
369d02a064168ae5c916b977182b764580e601cb084Wink Saville            case DISTRIBUTION_INDICATOR:
370d02a064168ae5c916b977182b764580e601cb084Wink Saville            case QUOTAS:
371d02a064168ae5c916b977182b764580e601cb084Wink Saville            case READ_REPORT:
372d02a064168ae5c916b977182b764580e601cb084Wink Saville            case STORE:
373d02a064168ae5c916b977182b764580e601cb084Wink Saville            case STORED:
374d02a064168ae5c916b977182b764580e601cb084Wink Saville            case TOTALS:
375d02a064168ae5c916b977182b764580e601cb084Wink Saville            case SENDER_VISIBILITY:
376d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((VALUE_YES != value) && (VALUE_NO != value)) {
377d02a064168ae5c916b977182b764580e601cb084Wink Saville                    // Invalid value.
378d02a064168ae5c916b977182b764580e601cb084Wink Saville                    throw new InvalidHeaderValueException("Invalid Octet value!");
379d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
380d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
381d02a064168ae5c916b977182b764580e601cb084Wink Saville            case READ_STATUS:
382d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((READ_STATUS_READ != value) &&
383d02a064168ae5c916b977182b764580e601cb084Wink Saville                        (READ_STATUS__DELETED_WITHOUT_BEING_READ != value)) {
384d02a064168ae5c916b977182b764580e601cb084Wink Saville                    // Invalid value.
385d02a064168ae5c916b977182b764580e601cb084Wink Saville                    throw new InvalidHeaderValueException("Invalid Octet value!");
386d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
387d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
388d02a064168ae5c916b977182b764580e601cb084Wink Saville            case CANCEL_STATUS:
389d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((CANCEL_STATUS_REQUEST_SUCCESSFULLY_RECEIVED != value) &&
390d02a064168ae5c916b977182b764580e601cb084Wink Saville                        (CANCEL_STATUS_REQUEST_CORRUPTED != value)) {
391d02a064168ae5c916b977182b764580e601cb084Wink Saville                    // Invalid value.
392d02a064168ae5c916b977182b764580e601cb084Wink Saville                    throw new InvalidHeaderValueException("Invalid Octet value!");
393d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
394d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
395d02a064168ae5c916b977182b764580e601cb084Wink Saville            case PRIORITY:
396d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((value < PRIORITY_LOW) || (value > PRIORITY_HIGH)) {
397d02a064168ae5c916b977182b764580e601cb084Wink Saville                    // Invalid value.
398d02a064168ae5c916b977182b764580e601cb084Wink Saville                    throw new InvalidHeaderValueException("Invalid Octet value!");
399d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
400d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
401d02a064168ae5c916b977182b764580e601cb084Wink Saville            case STATUS:
402d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((value < STATUS_EXPIRED) || (value > STATUS_UNREACHABLE)) {
403d02a064168ae5c916b977182b764580e601cb084Wink Saville                    // Invalid value.
404d02a064168ae5c916b977182b764580e601cb084Wink Saville                    throw new InvalidHeaderValueException("Invalid Octet value!");
405d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
406d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
407d02a064168ae5c916b977182b764580e601cb084Wink Saville            case REPLY_CHARGING:
408d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((value < REPLY_CHARGING_REQUESTED)
409d02a064168ae5c916b977182b764580e601cb084Wink Saville                        || (value > REPLY_CHARGING_ACCEPTED_TEXT_ONLY)) {
410d02a064168ae5c916b977182b764580e601cb084Wink Saville                    // Invalid value.
411d02a064168ae5c916b977182b764580e601cb084Wink Saville                    throw new InvalidHeaderValueException("Invalid Octet value!");
412d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
413d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
414d02a064168ae5c916b977182b764580e601cb084Wink Saville            case MM_STATE:
415d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((value < MM_STATE_DRAFT) || (value > MM_STATE_FORWARDED)) {
416d02a064168ae5c916b977182b764580e601cb084Wink Saville                    // Invalid value.
417d02a064168ae5c916b977182b764580e601cb084Wink Saville                    throw new InvalidHeaderValueException("Invalid Octet value!");
418d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
419d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
420d02a064168ae5c916b977182b764580e601cb084Wink Saville            case RECOMMENDED_RETRIEVAL_MODE:
421d02a064168ae5c916b977182b764580e601cb084Wink Saville                if (RECOMMENDED_RETRIEVAL_MODE_MANUAL != value) {
422d02a064168ae5c916b977182b764580e601cb084Wink Saville                    // Invalid value.
423d02a064168ae5c916b977182b764580e601cb084Wink Saville                    throw new InvalidHeaderValueException("Invalid Octet value!");
424d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
425d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
426d02a064168ae5c916b977182b764580e601cb084Wink Saville            case CONTENT_CLASS:
427d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((value < CONTENT_CLASS_TEXT)
428d02a064168ae5c916b977182b764580e601cb084Wink Saville                        || (value > CONTENT_CLASS_CONTENT_RICH)) {
429d02a064168ae5c916b977182b764580e601cb084Wink Saville                    // Invalid value.
430d02a064168ae5c916b977182b764580e601cb084Wink Saville                    throw new InvalidHeaderValueException("Invalid Octet value!");
431d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
432d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
433d02a064168ae5c916b977182b764580e601cb084Wink Saville            case RETRIEVE_STATUS:
434d02a064168ae5c916b977182b764580e601cb084Wink Saville                // According to oma-ts-mms-enc-v1_3, section 7.3.50, we modify the invalid value.
435d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((value > RETRIEVE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM) &&
436d02a064168ae5c916b977182b764580e601cb084Wink Saville                        (value < RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE)) {
437d02a064168ae5c916b977182b764580e601cb084Wink Saville                    value = RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE;
438d02a064168ae5c916b977182b764580e601cb084Wink Saville                } else if ((value > RETRIEVE_STATUS_ERROR_PERMANENT_CONTENT_UNSUPPORTED) &&
439d02a064168ae5c916b977182b764580e601cb084Wink Saville                        (value <= RETRIEVE_STATUS_ERROR_END)) {
440d02a064168ae5c916b977182b764580e601cb084Wink Saville                    value = RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE;
441d02a064168ae5c916b977182b764580e601cb084Wink Saville                } else if ((value < RETRIEVE_STATUS_OK) ||
442d02a064168ae5c916b977182b764580e601cb084Wink Saville                        ((value > RETRIEVE_STATUS_OK) &&
443d02a064168ae5c916b977182b764580e601cb084Wink Saville                                (value < RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
444d02a064168ae5c916b977182b764580e601cb084Wink Saville                                (value > RETRIEVE_STATUS_ERROR_END)) {
445d02a064168ae5c916b977182b764580e601cb084Wink Saville                    value = RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE;
446d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
447d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
448d02a064168ae5c916b977182b764580e601cb084Wink Saville            case STORE_STATUS:
449d02a064168ae5c916b977182b764580e601cb084Wink Saville                // According to oma-ts-mms-enc-v1_3, section 7.3.58, we modify the invalid value.
450d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((value > STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM) &&
451d02a064168ae5c916b977182b764580e601cb084Wink Saville                        (value < STORE_STATUS_ERROR_PERMANENT_FAILURE)) {
452d02a064168ae5c916b977182b764580e601cb084Wink Saville                    value = STORE_STATUS_ERROR_TRANSIENT_FAILURE;
453d02a064168ae5c916b977182b764580e601cb084Wink Saville                } else if ((value > STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL) &&
454d02a064168ae5c916b977182b764580e601cb084Wink Saville                        (value <= STORE_STATUS_ERROR_END)) {
455d02a064168ae5c916b977182b764580e601cb084Wink Saville                    value = STORE_STATUS_ERROR_PERMANENT_FAILURE;
456d02a064168ae5c916b977182b764580e601cb084Wink Saville                } else if ((value < STORE_STATUS_SUCCESS) ||
457d02a064168ae5c916b977182b764580e601cb084Wink Saville                        ((value > STORE_STATUS_SUCCESS) &&
458d02a064168ae5c916b977182b764580e601cb084Wink Saville                                (value < STORE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
459d02a064168ae5c916b977182b764580e601cb084Wink Saville                                (value > STORE_STATUS_ERROR_END)) {
460d02a064168ae5c916b977182b764580e601cb084Wink Saville                    value = STORE_STATUS_ERROR_PERMANENT_FAILURE;
461d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
462d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
463d02a064168ae5c916b977182b764580e601cb084Wink Saville            case RESPONSE_STATUS:
464d02a064168ae5c916b977182b764580e601cb084Wink Saville                // According to oma-ts-mms-enc-v1_3, section 7.3.48, we modify the invalid value.
465d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((value > RESPONSE_STATUS_ERROR_TRANSIENT_PARTIAL_SUCCESS) &&
466d02a064168ae5c916b977182b764580e601cb084Wink Saville                        (value < RESPONSE_STATUS_ERROR_PERMANENT_FAILURE)) {
467d02a064168ae5c916b977182b764580e601cb084Wink Saville                    value = RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE;
468d02a064168ae5c916b977182b764580e601cb084Wink Saville                } else if (((value > RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID) &&
469d02a064168ae5c916b977182b764580e601cb084Wink Saville                        (value <= RESPONSE_STATUS_ERROR_PERMANENT_END)) ||
470d02a064168ae5c916b977182b764580e601cb084Wink Saville                        (value < RESPONSE_STATUS_OK) ||
471d02a064168ae5c916b977182b764580e601cb084Wink Saville                        ((value > RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE) &&
472d02a064168ae5c916b977182b764580e601cb084Wink Saville                                (value < RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
473d02a064168ae5c916b977182b764580e601cb084Wink Saville                                (value > RESPONSE_STATUS_ERROR_PERMANENT_END)) {
474d02a064168ae5c916b977182b764580e601cb084Wink Saville                    value = RESPONSE_STATUS_ERROR_PERMANENT_FAILURE;
475d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
476d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
477d02a064168ae5c916b977182b764580e601cb084Wink Saville            case MMS_VERSION:
478d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((value < MMS_VERSION_1_0)|| (value > MMS_VERSION_1_3)) {
479d02a064168ae5c916b977182b764580e601cb084Wink Saville                    value = CURRENT_MMS_VERSION; // Current version is the default value.
480d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
481d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
482d02a064168ae5c916b977182b764580e601cb084Wink Saville            case MESSAGE_TYPE:
483d02a064168ae5c916b977182b764580e601cb084Wink Saville                if ((value < MESSAGE_TYPE_SEND_REQ) || (value > MESSAGE_TYPE_CANCEL_CONF)) {
484d02a064168ae5c916b977182b764580e601cb084Wink Saville                    // Invalid value.
485d02a064168ae5c916b977182b764580e601cb084Wink Saville                    throw new InvalidHeaderValueException("Invalid Octet value!");
486d02a064168ae5c916b977182b764580e601cb084Wink Saville                }
487d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
488d02a064168ae5c916b977182b764580e601cb084Wink Saville            default:
489d02a064168ae5c916b977182b764580e601cb084Wink Saville                // This header value should not be Octect.
490d02a064168ae5c916b977182b764580e601cb084Wink Saville                throw new RuntimeException("Invalid header field!");
491d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
492d02a064168ae5c916b977182b764580e601cb084Wink Saville        mHeaderMap.put(field, value);
493d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
494d02a064168ae5c916b977182b764580e601cb084Wink Saville
495d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
496d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Get TextString value by header field.
497d02a064168ae5c916b977182b764580e601cb084Wink Saville     *
498d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param field the field
499d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @return the TextString value of the pdu header
500d02a064168ae5c916b977182b764580e601cb084Wink Saville     *          with specified header field
501d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
502d02a064168ae5c916b977182b764580e601cb084Wink Saville    protected byte[] getTextString(int field) {
503d02a064168ae5c916b977182b764580e601cb084Wink Saville        return (byte[]) mHeaderMap.get(field);
504d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
505d02a064168ae5c916b977182b764580e601cb084Wink Saville
506d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
507d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Set TextString value to pdu header by header field.
508d02a064168ae5c916b977182b764580e601cb084Wink Saville     *
509d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param value the value
510d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param field the field
511d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @return the TextString value of the pdu header
512d02a064168ae5c916b977182b764580e601cb084Wink Saville     *          with specified header field
513d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @throws NullPointerException if the value is null.
514d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
515d02a064168ae5c916b977182b764580e601cb084Wink Saville    protected void setTextString(byte[] value, int field) {
516d02a064168ae5c916b977182b764580e601cb084Wink Saville        /**
517d02a064168ae5c916b977182b764580e601cb084Wink Saville         * Check whether this field can be set for specific
518d02a064168ae5c916b977182b764580e601cb084Wink Saville         * header and check validity of the field.
519d02a064168ae5c916b977182b764580e601cb084Wink Saville         */
520d02a064168ae5c916b977182b764580e601cb084Wink Saville        if (null == value) {
521d02a064168ae5c916b977182b764580e601cb084Wink Saville            throw new NullPointerException();
522d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
523d02a064168ae5c916b977182b764580e601cb084Wink Saville
524d02a064168ae5c916b977182b764580e601cb084Wink Saville        switch (field) {
525d02a064168ae5c916b977182b764580e601cb084Wink Saville            case TRANSACTION_ID:
526d02a064168ae5c916b977182b764580e601cb084Wink Saville            case REPLY_CHARGING_ID:
527d02a064168ae5c916b977182b764580e601cb084Wink Saville            case AUX_APPLIC_ID:
528d02a064168ae5c916b977182b764580e601cb084Wink Saville            case APPLIC_ID:
529d02a064168ae5c916b977182b764580e601cb084Wink Saville            case REPLY_APPLIC_ID:
530d02a064168ae5c916b977182b764580e601cb084Wink Saville            case MESSAGE_ID:
531d02a064168ae5c916b977182b764580e601cb084Wink Saville            case REPLACE_ID:
532d02a064168ae5c916b977182b764580e601cb084Wink Saville            case CANCEL_ID:
533d02a064168ae5c916b977182b764580e601cb084Wink Saville            case CONTENT_LOCATION:
534d02a064168ae5c916b977182b764580e601cb084Wink Saville            case MESSAGE_CLASS:
535d02a064168ae5c916b977182b764580e601cb084Wink Saville            case CONTENT_TYPE:
536d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
537d02a064168ae5c916b977182b764580e601cb084Wink Saville            default:
538d02a064168ae5c916b977182b764580e601cb084Wink Saville                // This header value should not be Text-String.
539d02a064168ae5c916b977182b764580e601cb084Wink Saville                throw new RuntimeException("Invalid header field!");
540d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
541d02a064168ae5c916b977182b764580e601cb084Wink Saville        mHeaderMap.put(field, value);
542d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
543d02a064168ae5c916b977182b764580e601cb084Wink Saville
544d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
545d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Get EncodedStringValue value by header field.
546d02a064168ae5c916b977182b764580e601cb084Wink Saville     *
547d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param field the field
548d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @return the EncodedStringValue value of the pdu header
549d02a064168ae5c916b977182b764580e601cb084Wink Saville     *          with specified header field
550d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
551d02a064168ae5c916b977182b764580e601cb084Wink Saville    protected EncodedStringValue getEncodedStringValue(int field) {
552d02a064168ae5c916b977182b764580e601cb084Wink Saville        return (EncodedStringValue) mHeaderMap.get(field);
553d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
554d02a064168ae5c916b977182b764580e601cb084Wink Saville
555d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
556d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Get TO, CC or BCC header value.
557d02a064168ae5c916b977182b764580e601cb084Wink Saville     *
558d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param field the field
559d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @return the EncodeStringValue array of the pdu header
560d02a064168ae5c916b977182b764580e601cb084Wink Saville     *          with specified header field
561d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
562d02a064168ae5c916b977182b764580e601cb084Wink Saville    protected EncodedStringValue[] getEncodedStringValues(int field) {
563d02a064168ae5c916b977182b764580e601cb084Wink Saville        ArrayList<EncodedStringValue> list =
564d02a064168ae5c916b977182b764580e601cb084Wink Saville                (ArrayList<EncodedStringValue>) mHeaderMap.get(field);
565d02a064168ae5c916b977182b764580e601cb084Wink Saville        if (null == list) {
566d02a064168ae5c916b977182b764580e601cb084Wink Saville            return null;
567d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
568d02a064168ae5c916b977182b764580e601cb084Wink Saville        EncodedStringValue[] values = new EncodedStringValue[list.size()];
569d02a064168ae5c916b977182b764580e601cb084Wink Saville        return list.toArray(values);
570d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
571d02a064168ae5c916b977182b764580e601cb084Wink Saville
572d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
573d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Set EncodedStringValue value to pdu header by header field.
574d02a064168ae5c916b977182b764580e601cb084Wink Saville     *
575d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param value the value
576d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param field the field
577d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @return the EncodedStringValue value of the pdu header
578d02a064168ae5c916b977182b764580e601cb084Wink Saville     *          with specified header field
579d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @throws NullPointerException if the value is null.
580d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
581d02a064168ae5c916b977182b764580e601cb084Wink Saville    protected void setEncodedStringValue(EncodedStringValue value, int field) {
582d02a064168ae5c916b977182b764580e601cb084Wink Saville        /**
583d02a064168ae5c916b977182b764580e601cb084Wink Saville         * Check whether this field can be set for specific
584d02a064168ae5c916b977182b764580e601cb084Wink Saville         * header and check validity of the field.
585d02a064168ae5c916b977182b764580e601cb084Wink Saville         */
586d02a064168ae5c916b977182b764580e601cb084Wink Saville        if (null == value) {
587d02a064168ae5c916b977182b764580e601cb084Wink Saville            throw new NullPointerException();
588d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
589d02a064168ae5c916b977182b764580e601cb084Wink Saville
590d02a064168ae5c916b977182b764580e601cb084Wink Saville        switch (field) {
591d02a064168ae5c916b977182b764580e601cb084Wink Saville            case SUBJECT:
592d02a064168ae5c916b977182b764580e601cb084Wink Saville            case RECOMMENDED_RETRIEVAL_MODE_TEXT:
593d02a064168ae5c916b977182b764580e601cb084Wink Saville            case RETRIEVE_TEXT:
594d02a064168ae5c916b977182b764580e601cb084Wink Saville            case STATUS_TEXT:
595d02a064168ae5c916b977182b764580e601cb084Wink Saville            case STORE_STATUS_TEXT:
596d02a064168ae5c916b977182b764580e601cb084Wink Saville            case RESPONSE_TEXT:
597d02a064168ae5c916b977182b764580e601cb084Wink Saville            case FROM:
598d02a064168ae5c916b977182b764580e601cb084Wink Saville            case PREVIOUSLY_SENT_BY:
599d02a064168ae5c916b977182b764580e601cb084Wink Saville            case MM_FLAGS:
600d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
601d02a064168ae5c916b977182b764580e601cb084Wink Saville            default:
602d02a064168ae5c916b977182b764580e601cb084Wink Saville                // This header value should not be Encoded-String-Value.
603d02a064168ae5c916b977182b764580e601cb084Wink Saville                throw new RuntimeException("Invalid header field!");
604d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
605d02a064168ae5c916b977182b764580e601cb084Wink Saville
606d02a064168ae5c916b977182b764580e601cb084Wink Saville        mHeaderMap.put(field, value);
607d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
608d02a064168ae5c916b977182b764580e601cb084Wink Saville
609d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
610d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Set TO, CC or BCC header value.
611d02a064168ae5c916b977182b764580e601cb084Wink Saville     *
612d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param value the value
613d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param field the field
614d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @return the EncodedStringValue value array of the pdu header
615d02a064168ae5c916b977182b764580e601cb084Wink Saville     *          with specified header field
616d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @throws NullPointerException if the value is null.
617d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
618d02a064168ae5c916b977182b764580e601cb084Wink Saville    protected void setEncodedStringValues(EncodedStringValue[] value, int field) {
619d02a064168ae5c916b977182b764580e601cb084Wink Saville        /**
620d02a064168ae5c916b977182b764580e601cb084Wink Saville         * Check whether this field can be set for specific
621d02a064168ae5c916b977182b764580e601cb084Wink Saville         * header and check validity of the field.
622d02a064168ae5c916b977182b764580e601cb084Wink Saville         */
623d02a064168ae5c916b977182b764580e601cb084Wink Saville        if (null == value) {
624d02a064168ae5c916b977182b764580e601cb084Wink Saville            throw new NullPointerException();
625d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
626d02a064168ae5c916b977182b764580e601cb084Wink Saville
627d02a064168ae5c916b977182b764580e601cb084Wink Saville        switch (field) {
628d02a064168ae5c916b977182b764580e601cb084Wink Saville            case BCC:
629d02a064168ae5c916b977182b764580e601cb084Wink Saville            case CC:
630d02a064168ae5c916b977182b764580e601cb084Wink Saville            case TO:
631d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
632d02a064168ae5c916b977182b764580e601cb084Wink Saville            default:
633d02a064168ae5c916b977182b764580e601cb084Wink Saville                // This header value should not be Encoded-String-Value.
634d02a064168ae5c916b977182b764580e601cb084Wink Saville                throw new RuntimeException("Invalid header field!");
635d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
636d02a064168ae5c916b977182b764580e601cb084Wink Saville
637d02a064168ae5c916b977182b764580e601cb084Wink Saville        ArrayList<EncodedStringValue> list = new ArrayList<EncodedStringValue>();
638d02a064168ae5c916b977182b764580e601cb084Wink Saville        for (int i = 0; i < value.length; i++) {
639d02a064168ae5c916b977182b764580e601cb084Wink Saville            list.add(value[i]);
640d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
641d02a064168ae5c916b977182b764580e601cb084Wink Saville        mHeaderMap.put(field, list);
642d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
643d02a064168ae5c916b977182b764580e601cb084Wink Saville
644d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
645d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Append one EncodedStringValue to another.
646d02a064168ae5c916b977182b764580e601cb084Wink Saville     *
647d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param value the EncodedStringValue to append
648d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param field the field
649d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @throws NullPointerException if the value is null.
650d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
651d02a064168ae5c916b977182b764580e601cb084Wink Saville    protected void appendEncodedStringValue(EncodedStringValue value,
652d02a064168ae5c916b977182b764580e601cb084Wink Saville                                    int field) {
653d02a064168ae5c916b977182b764580e601cb084Wink Saville        if (null == value) {
654d02a064168ae5c916b977182b764580e601cb084Wink Saville            throw new NullPointerException();
655d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
656d02a064168ae5c916b977182b764580e601cb084Wink Saville
657d02a064168ae5c916b977182b764580e601cb084Wink Saville        switch (field) {
658d02a064168ae5c916b977182b764580e601cb084Wink Saville            case BCC:
659d02a064168ae5c916b977182b764580e601cb084Wink Saville            case CC:
660d02a064168ae5c916b977182b764580e601cb084Wink Saville            case TO:
661d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
662d02a064168ae5c916b977182b764580e601cb084Wink Saville            default:
663d02a064168ae5c916b977182b764580e601cb084Wink Saville                throw new RuntimeException("Invalid header field!");
664d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
665d02a064168ae5c916b977182b764580e601cb084Wink Saville
666d02a064168ae5c916b977182b764580e601cb084Wink Saville        ArrayList<EncodedStringValue> list =
667d02a064168ae5c916b977182b764580e601cb084Wink Saville            (ArrayList<EncodedStringValue>) mHeaderMap.get(field);
668d02a064168ae5c916b977182b764580e601cb084Wink Saville        if (null == list) {
669d02a064168ae5c916b977182b764580e601cb084Wink Saville            list  = new ArrayList<EncodedStringValue>();
670d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
671d02a064168ae5c916b977182b764580e601cb084Wink Saville        list.add(value);
672d02a064168ae5c916b977182b764580e601cb084Wink Saville        mHeaderMap.put(field, list);
673d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
674d02a064168ae5c916b977182b764580e601cb084Wink Saville
675d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
676d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Get LongInteger value by header field.
677d02a064168ae5c916b977182b764580e601cb084Wink Saville     *
678d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param field the field
679d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @return the LongInteger value of the pdu header
680d02a064168ae5c916b977182b764580e601cb084Wink Saville     *          with specified header field. if return -1, the
681d02a064168ae5c916b977182b764580e601cb084Wink Saville     *          field is not existed in pdu header.
682d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
683d02a064168ae5c916b977182b764580e601cb084Wink Saville    protected long getLongInteger(int field) {
684d02a064168ae5c916b977182b764580e601cb084Wink Saville        Long longInteger = (Long) mHeaderMap.get(field);
685d02a064168ae5c916b977182b764580e601cb084Wink Saville        if (null == longInteger) {
686d02a064168ae5c916b977182b764580e601cb084Wink Saville            return -1;
687d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
688d02a064168ae5c916b977182b764580e601cb084Wink Saville
689d02a064168ae5c916b977182b764580e601cb084Wink Saville        return longInteger.longValue();
690d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
691d02a064168ae5c916b977182b764580e601cb084Wink Saville
692d02a064168ae5c916b977182b764580e601cb084Wink Saville    /**
693d02a064168ae5c916b977182b764580e601cb084Wink Saville     * Set LongInteger value to pdu header by header field.
694d02a064168ae5c916b977182b764580e601cb084Wink Saville     *
695d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param value the value
696d02a064168ae5c916b977182b764580e601cb084Wink Saville     * @param field the field
697d02a064168ae5c916b977182b764580e601cb084Wink Saville     */
698d02a064168ae5c916b977182b764580e601cb084Wink Saville    protected void setLongInteger(long value, int field) {
699d02a064168ae5c916b977182b764580e601cb084Wink Saville        /**
700d02a064168ae5c916b977182b764580e601cb084Wink Saville         * Check whether this field can be set for specific
701d02a064168ae5c916b977182b764580e601cb084Wink Saville         * header and check validity of the field.
702d02a064168ae5c916b977182b764580e601cb084Wink Saville         */
703d02a064168ae5c916b977182b764580e601cb084Wink Saville        switch (field) {
704d02a064168ae5c916b977182b764580e601cb084Wink Saville            case DATE:
705d02a064168ae5c916b977182b764580e601cb084Wink Saville            case REPLY_CHARGING_SIZE:
706d02a064168ae5c916b977182b764580e601cb084Wink Saville            case MESSAGE_SIZE:
707d02a064168ae5c916b977182b764580e601cb084Wink Saville            case MESSAGE_COUNT:
708d02a064168ae5c916b977182b764580e601cb084Wink Saville            case START:
709d02a064168ae5c916b977182b764580e601cb084Wink Saville            case LIMIT:
710d02a064168ae5c916b977182b764580e601cb084Wink Saville            case DELIVERY_TIME:
711d02a064168ae5c916b977182b764580e601cb084Wink Saville            case EXPIRY:
712d02a064168ae5c916b977182b764580e601cb084Wink Saville            case REPLY_CHARGING_DEADLINE:
713d02a064168ae5c916b977182b764580e601cb084Wink Saville            case PREVIOUSLY_SENT_DATE:
714d02a064168ae5c916b977182b764580e601cb084Wink Saville                break;
715d02a064168ae5c916b977182b764580e601cb084Wink Saville            default:
716d02a064168ae5c916b977182b764580e601cb084Wink Saville                // This header value should not be LongInteger.
717d02a064168ae5c916b977182b764580e601cb084Wink Saville                throw new RuntimeException("Invalid header field!");
718d02a064168ae5c916b977182b764580e601cb084Wink Saville        }
719d02a064168ae5c916b977182b764580e601cb084Wink Saville        mHeaderMap.put(field, value);
720d02a064168ae5c916b977182b764580e601cb084Wink Saville    }
721d02a064168ae5c916b977182b764580e601cb084Wink Saville}
722