19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 Esmertec AG. 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18a87afd07c0093cab638e9ef9bc2c53c8200ca711Tom Taylorpackage com.google.android.mms.pdu; 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.UnsupportedEncodingException; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashMap; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class CharacterSets { 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * IANA assigned MIB enum numbers. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * From wap-230-wsp-20010705-a.pdf 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Any-charset = <Octet 128> 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Equivalent to the special RFC2616 charset value "*" 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ANY_CHARSET = 0x00; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int US_ASCII = 0x03; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ISO_8859_1 = 0x04; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ISO_8859_2 = 0x05; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ISO_8859_3 = 0x06; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ISO_8859_4 = 0x07; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ISO_8859_5 = 0x08; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ISO_8859_6 = 0x09; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ISO_8859_7 = 0x0A; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ISO_8859_8 = 0x0B; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ISO_8859_9 = 0x0C; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SHIFT_JIS = 0x11; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int UTF_8 = 0x6A; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int BIG5 = 0x07EA; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int UCS2 = 0x03E8; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int UTF_16 = 0x03F7; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the encoding of given data is unsupported, use UTF_8 to decode it. 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_CHARSET = UTF_8; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Array of MIB enum numbers. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int[] MIBENUM_NUMBERS = { 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ANY_CHARSET, 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project US_ASCII, 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ISO_8859_1, 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ISO_8859_2, 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ISO_8859_3, 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ISO_8859_4, 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ISO_8859_5, 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ISO_8859_6, 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ISO_8859_7, 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ISO_8859_8, 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ISO_8859_9, 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SHIFT_JIS, 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project UTF_8, 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BIG5, 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project UCS2, 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project UTF_16, 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Well-known-charset Mime name. 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_ANY_CHARSET = "*"; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_US_ASCII = "us-ascii"; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_ISO_8859_1 = "iso-8859-1"; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_ISO_8859_2 = "iso-8859-2"; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_ISO_8859_3 = "iso-8859-3"; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_ISO_8859_4 = "iso-8859-4"; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_ISO_8859_5 = "iso-8859-5"; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_ISO_8859_6 = "iso-8859-6"; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_ISO_8859_7 = "iso-8859-7"; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_ISO_8859_8 = "iso-8859-8"; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_ISO_8859_9 = "iso-8859-9"; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_SHIFT_JIS = "shift_JIS"; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_UTF_8 = "utf-8"; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_BIG5 = "big5"; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_UCS2 = "iso-10646-ucs-2"; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIMENAME_UTF_16 = "utf-16"; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_CHARSET_NAME = MIMENAME_UTF_8; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Array of the names of character sets. 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String[] MIME_NAMES = { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_ANY_CHARSET, 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_US_ASCII, 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_ISO_8859_1, 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_ISO_8859_2, 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_ISO_8859_3, 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_ISO_8859_4, 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_ISO_8859_5, 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_ISO_8859_6, 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_ISO_8859_7, 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_ISO_8859_8, 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_ISO_8859_9, 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_SHIFT_JIS, 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_UTF_8, 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_BIG5, 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_UCS2, 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIMENAME_UTF_16, 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final HashMap<Integer, String> MIBENUM_TO_NAME_MAP; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final HashMap<String, Integer> NAME_TO_MIBENUM_MAP; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Create the HashMaps. 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIBENUM_TO_NAME_MAP = new HashMap<Integer, String>(); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAME_TO_MIBENUM_MAP = new HashMap<String, Integer>(); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assert(MIBENUM_NUMBERS.length == MIME_NAMES.length); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = MIBENUM_NUMBERS.length - 1; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for(int i = 0; i <= count; i++) { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MIBENUM_TO_NAME_MAP.put(MIBENUM_NUMBERS[i], MIME_NAMES[i]); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAME_TO_MIBENUM_MAP.put(MIME_NAMES[i], MIBENUM_NUMBERS[i]); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private CharacterSets() {} // Non-instantiatable 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Map an MIBEnum number to the name of the charset which this number 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is assigned to by IANA. 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mibEnumValue An IANA assigned MIBEnum number. 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The name string of the charset. 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws UnsupportedEncodingException 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static String getMimeName(int mibEnumValue) 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws UnsupportedEncodingException { 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String name = MIBENUM_TO_NAME_MAP.get(mibEnumValue); 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name == null) { 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedEncodingException(); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return name; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Map a well-known charset name to its assigned MIBEnum number. 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mimeName The charset name. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The MIBEnum number assigned by IANA for this charset. 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws UnsupportedEncodingException 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int getMibEnumValue(String mimeName) 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws UnsupportedEncodingException { 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(null == mimeName) { 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Integer mibEnumValue = NAME_TO_MIBENUM_MAP.get(mimeName); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mibEnumValue == null) { 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedEncodingException(); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mibEnumValue; 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 173