NetworkIdentitySet.java revision 1b5a2a96f793211bfbd39aa29cc41031dfa23950
1d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey/* 2d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * Copyright (C) 2011 The Android Open Source Project 3d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * 4d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * you may not use this file except in compliance with the License. 6d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * You may obtain a copy of the License at 7d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * 8d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * 10d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 11d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * See the License for the specific language governing permissions and 14d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * limitations under the License. 15d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey */ 16d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 17d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeypackage com.android.server.net; 18d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 191b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport android.net.NetworkIdentity; 201b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 21d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeyimport java.io.DataInputStream; 22d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeyimport java.io.DataOutputStream; 23d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeyimport java.io.IOException; 24d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeyimport java.net.ProtocolException; 25d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeyimport java.util.HashSet; 26d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 27d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey/** 28d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * Identity of a {@code iface}, defined by the set of {@link NetworkIdentity} 29d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * active on that interface. 30d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * 31d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * @hide 32d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey */ 331b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeypublic class NetworkIdentitySet extends HashSet<NetworkIdentity> { 341b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey private static final int VERSION_INIT = 1; 35d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 361b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public NetworkIdentitySet() { 37d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 38d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 391b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public NetworkIdentitySet(DataInputStream in) throws IOException { 40d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey final int version = in.readInt(); 41d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey switch (version) { 421b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case VERSION_INIT: { 43d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey final int size = in.readInt(); 44d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey for (int i = 0; i < size; i++) { 451b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final int ignoredVersion = in.readInt(); 461b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final int type = in.readInt(); 471b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final int subType = in.readInt(); 481b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String subscriberId = readOptionalString(in); 491b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey add(new NetworkIdentity(type, subType, subscriberId)); 50d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 51d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey break; 52d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 53d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey default: { 54d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey throw new ProtocolException("unexpected version: " + version); 55d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 56d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 57d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 58d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 59d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public void writeToStream(DataOutputStream out) throws IOException { 601b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey out.writeInt(VERSION_INIT); 61d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey out.writeInt(size()); 62d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey for (NetworkIdentity ident : this) { 631b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey out.writeInt(VERSION_INIT); 641b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey out.writeInt(ident.getType()); 651b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey out.writeInt(ident.getSubType()); 661b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey writeOptionalString(out, ident.getSubscriberId()); 67d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 68d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 69d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 701b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey private static void writeOptionalString(DataOutputStream out, String value) throws IOException { 711b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (value != null) { 721b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey out.writeByte(1); 731b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey out.writeUTF(value); 741b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } else { 751b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey out.writeByte(0); 761b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 771b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 781b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 791b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey private static String readOptionalString(DataInputStream in) throws IOException { 801b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (in.readByte() != 0) { 811b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return in.readUTF(); 821b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } else { 831b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return null; 84d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 85d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 86d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey} 87