171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistpackage com.android.server.wifi.hotspot2.omadm; 271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport java.io.EOFException; 471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport java.io.IOException; 571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport java.io.InputStream; 671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport java.io.OutputStream; 771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport java.nio.charset.StandardCharsets; 871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistpublic class OMAConstants { 1071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist private OMAConstants() { 1171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 1271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 131d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String MOVersion = "1.0"; 141d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String PPS_URN = "urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0"; 151d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String DevInfoURN = "urn:oma:mo:oma-dm-devinfo:1.0"; 161d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String DevDetailURN = "urn:oma:mo:oma-dm-devdetail:1.0"; 171d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String DevDetailXURN = "urn:wfa:mo-ext:hotspot2dot0-devdetail-ext:1.0"; 181d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist 191d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String[] SupportedMO_URNs = { 201d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist PPS_URN, DevInfoURN, DevDetailURN, DevDetailXURN 211d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist }; 221d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist 231d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String SppMOAttribute = "spp:moURN"; 2471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public static final String TAG_PostDevData = "spp:sppPostDevData"; 2571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public static final String TAG_SupportedVersions = "spp:supportedSPPVersions"; 2671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public static final String TAG_SupportedMOs = "spp:supportedMOList"; 271d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String TAG_UpdateResponse = "spp:sppUpdateResponse"; 281d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String TAG_MOContainer = "spp:moContainer"; 291d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String TAG_Version = "spp:sppVersion"; 3071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 311d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String TAG_SessionID = "spp:sessionID"; 321d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String TAG_Status = "spp:sppStatus"; 331d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String TAG_Error = "spp:sppError"; 3471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 3571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public static final String SyncMLVersionTag = "VerDTD"; 361d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String OMAVersion = "1.2"; 371d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static final String SyncML = "syncml:dmddf1.2"; 3871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 391d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist private static final byte[] INDENT = new byte[1024]; 401d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist 4171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public static void serializeString(String s, OutputStream out) throws IOException { 4271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist byte[] octets = s.getBytes(StandardCharsets.UTF_8); 4371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist byte[] prefix = String.format("%x:", octets.length).getBytes(StandardCharsets.UTF_8); 4471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist out.write(prefix); 4571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist out.write(octets); 4671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 4771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 4871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public static void indent(int level, OutputStream out) throws IOException { 4971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist out.write(INDENT, 0, level); 5071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 5171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 5271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public static String deserializeString(InputStream in) throws IOException { 5371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist StringBuilder prefix = new StringBuilder(); 5471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist for (; ; ) { 5571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist byte b = (byte) in.read(); 5671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (b == '.') 5771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return null; 5871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist else if (b == ':') 5971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist break; 6071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist else if (b > ' ') 6171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist prefix.append((char) b); 6271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 6371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist int length = Integer.parseInt(prefix.toString(), 16); 6471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist byte[] octets = new byte[length]; 6571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist int offset = 0; 6671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist while (offset < octets.length) { 6771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist int amount = in.read(octets, offset, octets.length - offset); 6871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (amount <= 0) 6971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist throw new EOFException(); 7071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist offset += amount; 7171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 7271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return new String(octets, StandardCharsets.UTF_8); 7371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 7471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 7571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public static String readURN(InputStream in) throws IOException { 7671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist StringBuilder urn = new StringBuilder(); 7771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 7871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist for (; ; ) { 7971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist byte b = (byte) in.read(); 8071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (b == ')') 8171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist break; 8271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist urn.append((char) b); 8371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 8471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return urn.toString(); 8571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 8671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist} 87