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