NetworkIdentitySet.java revision d2a458750e5a3d490af09cecb5c28370baf0a913
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 19d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeyimport java.io.DataInputStream; 20d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeyimport java.io.DataOutputStream; 21d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeyimport java.io.IOException; 22d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeyimport java.net.ProtocolException; 23d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeyimport java.util.HashSet; 24d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 25d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey/** 26d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * Identity of a {@code iface}, defined by the set of {@link NetworkIdentity} 27d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * active on that interface. 28d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * 29d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * @hide 30d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey */ 31d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeypublic class InterfaceIdentity extends HashSet<NetworkIdentity> { 32d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey private static final int VERSION_CURRENT = 1; 33d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 34d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public InterfaceIdentity() { 35d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 36d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 37d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public InterfaceIdentity(DataInputStream in) throws IOException { 38d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey final int version = in.readInt(); 39d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey switch (version) { 40d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case VERSION_CURRENT: { 41d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey final int size = in.readInt(); 42d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey for (int i = 0; i < size; i++) { 43d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey add(new NetworkIdentity(in)); 44d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 45d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey break; 46d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 47d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey default: { 48d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey throw new ProtocolException("unexpected version: " + version); 49d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 50d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 51d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 52d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 53d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public void writeToStream(DataOutputStream out) throws IOException { 54d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey out.writeInt(VERSION_CURRENT); 55d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey out.writeInt(size()); 56d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey for (NetworkIdentity ident : this) { 57d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey ident.writeToStream(out); 58d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 59d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 60d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 61d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey /** 62d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * Test if any {@link NetworkIdentity} on this interface matches the given 63d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * template and IMEI. 64d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey */ 65d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public boolean matchesTemplate(int networkTemplate, String subscriberId) { 66d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey for (NetworkIdentity ident : this) { 67d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey if (ident.matchesTemplate(networkTemplate, subscriberId)) { 68d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey return true; 69d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 70d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 71d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey return false; 72d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 73d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey} 74