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 java.io.UnsupportedEncodingException; 21d02a064168ae5c916b977182b764580e601cb084Wink Savilleimport java.util.HashMap; 22d02a064168ae5c916b977182b764580e601cb084Wink Saville 23d02a064168ae5c916b977182b764580e601cb084Wink Savillepublic class CharacterSets { 24d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 25d02a064168ae5c916b977182b764580e601cb084Wink Saville * IANA assigned MIB enum numbers. 26d02a064168ae5c916b977182b764580e601cb084Wink Saville * 27d02a064168ae5c916b977182b764580e601cb084Wink Saville * From wap-230-wsp-20010705-a.pdf 28d02a064168ae5c916b977182b764580e601cb084Wink Saville * Any-charset = <Octet 128> 29d02a064168ae5c916b977182b764580e601cb084Wink Saville * Equivalent to the special RFC2616 charset value "*" 30d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 31d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int ANY_CHARSET = 0x00; 32d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int US_ASCII = 0x03; 33d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int ISO_8859_1 = 0x04; 34d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int ISO_8859_2 = 0x05; 35d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int ISO_8859_3 = 0x06; 36d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int ISO_8859_4 = 0x07; 37d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int ISO_8859_5 = 0x08; 38d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int ISO_8859_6 = 0x09; 39d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int ISO_8859_7 = 0x0A; 40d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int ISO_8859_8 = 0x0B; 41d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int ISO_8859_9 = 0x0C; 42d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int SHIFT_JIS = 0x11; 43d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int UTF_8 = 0x6A; 44d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int BIG5 = 0x07EA; 45d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int UCS2 = 0x03E8; 46d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int UTF_16 = 0x03F7; 47d02a064168ae5c916b977182b764580e601cb084Wink Saville 48d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 49d02a064168ae5c916b977182b764580e601cb084Wink Saville * If the encoding of given data is unsupported, use UTF_8 to decode it. 50d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 51d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final int DEFAULT_CHARSET = UTF_8; 52d02a064168ae5c916b977182b764580e601cb084Wink Saville 53d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 54d02a064168ae5c916b977182b764580e601cb084Wink Saville * Array of MIB enum numbers. 55d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 56d02a064168ae5c916b977182b764580e601cb084Wink Saville private static final int[] MIBENUM_NUMBERS = { 57d02a064168ae5c916b977182b764580e601cb084Wink Saville ANY_CHARSET, 58d02a064168ae5c916b977182b764580e601cb084Wink Saville US_ASCII, 59d02a064168ae5c916b977182b764580e601cb084Wink Saville ISO_8859_1, 60d02a064168ae5c916b977182b764580e601cb084Wink Saville ISO_8859_2, 61d02a064168ae5c916b977182b764580e601cb084Wink Saville ISO_8859_3, 62d02a064168ae5c916b977182b764580e601cb084Wink Saville ISO_8859_4, 63d02a064168ae5c916b977182b764580e601cb084Wink Saville ISO_8859_5, 64d02a064168ae5c916b977182b764580e601cb084Wink Saville ISO_8859_6, 65d02a064168ae5c916b977182b764580e601cb084Wink Saville ISO_8859_7, 66d02a064168ae5c916b977182b764580e601cb084Wink Saville ISO_8859_8, 67d02a064168ae5c916b977182b764580e601cb084Wink Saville ISO_8859_9, 68d02a064168ae5c916b977182b764580e601cb084Wink Saville SHIFT_JIS, 69d02a064168ae5c916b977182b764580e601cb084Wink Saville UTF_8, 70d02a064168ae5c916b977182b764580e601cb084Wink Saville BIG5, 71d02a064168ae5c916b977182b764580e601cb084Wink Saville UCS2, 72d02a064168ae5c916b977182b764580e601cb084Wink Saville UTF_16, 73d02a064168ae5c916b977182b764580e601cb084Wink Saville }; 74d02a064168ae5c916b977182b764580e601cb084Wink Saville 75d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 76d02a064168ae5c916b977182b764580e601cb084Wink Saville * The Well-known-charset Mime name. 77d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 78d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_ANY_CHARSET = "*"; 79d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_US_ASCII = "us-ascii"; 80d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_ISO_8859_1 = "iso-8859-1"; 81d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_ISO_8859_2 = "iso-8859-2"; 82d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_ISO_8859_3 = "iso-8859-3"; 83d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_ISO_8859_4 = "iso-8859-4"; 84d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_ISO_8859_5 = "iso-8859-5"; 85d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_ISO_8859_6 = "iso-8859-6"; 86d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_ISO_8859_7 = "iso-8859-7"; 87d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_ISO_8859_8 = "iso-8859-8"; 88d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_ISO_8859_9 = "iso-8859-9"; 89d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_SHIFT_JIS = "shift_JIS"; 90d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_UTF_8 = "utf-8"; 91d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_BIG5 = "big5"; 92d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_UCS2 = "iso-10646-ucs-2"; 93d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String MIMENAME_UTF_16 = "utf-16"; 94d02a064168ae5c916b977182b764580e601cb084Wink Saville 95d02a064168ae5c916b977182b764580e601cb084Wink Saville public static final String DEFAULT_CHARSET_NAME = MIMENAME_UTF_8; 96d02a064168ae5c916b977182b764580e601cb084Wink Saville 97d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 98d02a064168ae5c916b977182b764580e601cb084Wink Saville * Array of the names of character sets. 99d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 100d02a064168ae5c916b977182b764580e601cb084Wink Saville private static final String[] MIME_NAMES = { 101d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_ANY_CHARSET, 102d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_US_ASCII, 103d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_ISO_8859_1, 104d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_ISO_8859_2, 105d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_ISO_8859_3, 106d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_ISO_8859_4, 107d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_ISO_8859_5, 108d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_ISO_8859_6, 109d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_ISO_8859_7, 110d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_ISO_8859_8, 111d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_ISO_8859_9, 112d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_SHIFT_JIS, 113d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_UTF_8, 114d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_BIG5, 115d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_UCS2, 116d02a064168ae5c916b977182b764580e601cb084Wink Saville MIMENAME_UTF_16, 117d02a064168ae5c916b977182b764580e601cb084Wink Saville }; 118d02a064168ae5c916b977182b764580e601cb084Wink Saville 119d02a064168ae5c916b977182b764580e601cb084Wink Saville private static final HashMap<Integer, String> MIBENUM_TO_NAME_MAP; 120d02a064168ae5c916b977182b764580e601cb084Wink Saville private static final HashMap<String, Integer> NAME_TO_MIBENUM_MAP; 121d02a064168ae5c916b977182b764580e601cb084Wink Saville 122d02a064168ae5c916b977182b764580e601cb084Wink Saville static { 123d02a064168ae5c916b977182b764580e601cb084Wink Saville // Create the HashMaps. 124d02a064168ae5c916b977182b764580e601cb084Wink Saville MIBENUM_TO_NAME_MAP = new HashMap<Integer, String>(); 125d02a064168ae5c916b977182b764580e601cb084Wink Saville NAME_TO_MIBENUM_MAP = new HashMap<String, Integer>(); 126d02a064168ae5c916b977182b764580e601cb084Wink Saville assert(MIBENUM_NUMBERS.length == MIME_NAMES.length); 127d02a064168ae5c916b977182b764580e601cb084Wink Saville int count = MIBENUM_NUMBERS.length - 1; 128d02a064168ae5c916b977182b764580e601cb084Wink Saville for(int i = 0; i <= count; i++) { 129d02a064168ae5c916b977182b764580e601cb084Wink Saville MIBENUM_TO_NAME_MAP.put(MIBENUM_NUMBERS[i], MIME_NAMES[i]); 130d02a064168ae5c916b977182b764580e601cb084Wink Saville NAME_TO_MIBENUM_MAP.put(MIME_NAMES[i], MIBENUM_NUMBERS[i]); 131d02a064168ae5c916b977182b764580e601cb084Wink Saville } 132d02a064168ae5c916b977182b764580e601cb084Wink Saville } 133d02a064168ae5c916b977182b764580e601cb084Wink Saville 134d02a064168ae5c916b977182b764580e601cb084Wink Saville private CharacterSets() {} // Non-instantiatable 135d02a064168ae5c916b977182b764580e601cb084Wink Saville 136d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 137d02a064168ae5c916b977182b764580e601cb084Wink Saville * Map an MIBEnum number to the name of the charset which this number 138d02a064168ae5c916b977182b764580e601cb084Wink Saville * is assigned to by IANA. 139d02a064168ae5c916b977182b764580e601cb084Wink Saville * 140d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param mibEnumValue An IANA assigned MIBEnum number. 141d02a064168ae5c916b977182b764580e601cb084Wink Saville * @return The name string of the charset. 142d02a064168ae5c916b977182b764580e601cb084Wink Saville * @throws UnsupportedEncodingException 143d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 144d02a064168ae5c916b977182b764580e601cb084Wink Saville public static String getMimeName(int mibEnumValue) 145d02a064168ae5c916b977182b764580e601cb084Wink Saville throws UnsupportedEncodingException { 146d02a064168ae5c916b977182b764580e601cb084Wink Saville String name = MIBENUM_TO_NAME_MAP.get(mibEnumValue); 147d02a064168ae5c916b977182b764580e601cb084Wink Saville if (name == null) { 148d02a064168ae5c916b977182b764580e601cb084Wink Saville throw new UnsupportedEncodingException(); 149d02a064168ae5c916b977182b764580e601cb084Wink Saville } 150d02a064168ae5c916b977182b764580e601cb084Wink Saville return name; 151d02a064168ae5c916b977182b764580e601cb084Wink Saville } 152d02a064168ae5c916b977182b764580e601cb084Wink Saville 153d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 154d02a064168ae5c916b977182b764580e601cb084Wink Saville * Map a well-known charset name to its assigned MIBEnum number. 155d02a064168ae5c916b977182b764580e601cb084Wink Saville * 156d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param mimeName The charset name. 157d02a064168ae5c916b977182b764580e601cb084Wink Saville * @return The MIBEnum number assigned by IANA for this charset. 158d02a064168ae5c916b977182b764580e601cb084Wink Saville * @throws UnsupportedEncodingException 159d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 160d02a064168ae5c916b977182b764580e601cb084Wink Saville public static int getMibEnumValue(String mimeName) 161d02a064168ae5c916b977182b764580e601cb084Wink Saville throws UnsupportedEncodingException { 162d02a064168ae5c916b977182b764580e601cb084Wink Saville if(null == mimeName) { 163d02a064168ae5c916b977182b764580e601cb084Wink Saville return -1; 164d02a064168ae5c916b977182b764580e601cb084Wink Saville } 165d02a064168ae5c916b977182b764580e601cb084Wink Saville 166d02a064168ae5c916b977182b764580e601cb084Wink Saville Integer mibEnumValue = NAME_TO_MIBENUM_MAP.get(mimeName); 167d02a064168ae5c916b977182b764580e601cb084Wink Saville if (mibEnumValue == null) { 168d02a064168ae5c916b977182b764580e601cb084Wink Saville throw new UnsupportedEncodingException(); 169d02a064168ae5c916b977182b764580e601cb084Wink Saville } 170d02a064168ae5c916b977182b764580e601cb084Wink Saville return mibEnumValue; 171d02a064168ae5c916b977182b764580e601cb084Wink Saville } 172d02a064168ae5c916b977182b764580e601cb084Wink Saville} 173