1f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski/*
2f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski * Copyright (C) 2016 The Android Open Source Project
3f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski *
4f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski * Licensed under the Apache License, Version 2.0 (the "License");
5f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski * you may not use this file except in compliance with the License.
6f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski * You may obtain a copy of the License at
7f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski *
8f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski *      http://www.apache.org/licenses/LICENSE-2.0
9f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski *
10f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski * Unless required by applicable law or agreed to in writing, software
11f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski * distributed under the License is distributed on an "AS IS" BASIS,
12f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski * See the License for the specific language governing permissions and
14f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski * limitations under the License.
15f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski */
16f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
17f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinskipackage android.app.admin;
18f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
19f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinskiimport android.os.Parcel;
20f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinskiimport android.os.Parcelable;
21f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
22a6ea92097cf85b78958f25fb53e312be0399df35Pavel Grafovimport java.net.InetAddress;
23a6ea92097cf85b78958f25fb53e312be0399df35Pavel Grafovimport java.net.UnknownHostException;
24a6ea92097cf85b78958f25fb53e312be0399df35Pavel Grafov
25f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski/**
26f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski * A class that represents a connect library call event.
27f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski */
28f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinskipublic final class ConnectEvent extends NetworkEvent implements Parcelable {
29f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
30f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    /** The destination IP address. */
31f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    private final String ipAddress;
32f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
33f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    /** The destination port number. */
34f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    private final int port;
35f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
36da9d3ad3ac40555cd9e491c864bedf3c24f6289cMichal Karpinski    /** @hide */
37f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    public ConnectEvent(String ipAddress, int port, String packageName, long timestamp) {
38f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        super(packageName, timestamp);
39f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        this.ipAddress = ipAddress;
40f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        this.port = port;
41f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    }
42f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
43f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    private ConnectEvent(Parcel in) {
44f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        this.ipAddress = in.readString();
45f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        this.port = in.readInt();
46f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        this.packageName = in.readString();
47f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        this.timestamp = in.readLong();
48f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    }
49f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
50a6ea92097cf85b78958f25fb53e312be0399df35Pavel Grafov    public InetAddress getInetAddress() {
51a6ea92097cf85b78958f25fb53e312be0399df35Pavel Grafov        try {
52a6ea92097cf85b78958f25fb53e312be0399df35Pavel Grafov            // ipAddress is already an address, not a host name, no DNS resolution will happen.
53a6ea92097cf85b78958f25fb53e312be0399df35Pavel Grafov            return InetAddress.getByName(ipAddress);
54a6ea92097cf85b78958f25fb53e312be0399df35Pavel Grafov        } catch (UnknownHostException e) {
55a6ea92097cf85b78958f25fb53e312be0399df35Pavel Grafov            // Should never happen as we aren't passing a host name.
56a6ea92097cf85b78958f25fb53e312be0399df35Pavel Grafov            return InetAddress.getLoopbackAddress();
57a6ea92097cf85b78958f25fb53e312be0399df35Pavel Grafov        }
58f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    }
59f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
60f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    public int getPort() {
61f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        return port;
62f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    }
63f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
64f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    @Override
65f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    public String toString() {
66f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        return String.format("ConnectEvent(%s, %d, %d, %s)", ipAddress, port, timestamp,
67f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski                packageName);
68f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    }
69f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
70f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    public static final Parcelable.Creator<ConnectEvent> CREATOR
71f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski            = new Parcelable.Creator<ConnectEvent>() {
72f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        @Override
73f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        public ConnectEvent createFromParcel(Parcel in) {
74f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski            if (in.readInt() != PARCEL_TOKEN_CONNECT_EVENT) {
75f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski                return null;
76f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski            }
77f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski            return new ConnectEvent(in);
78f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        }
79f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
80f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        @Override
81f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        public ConnectEvent[] newArray(int size) {
82f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski            return new ConnectEvent[size];
83f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        }
84f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    };
85f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
86f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    @Override
870879eb41ca8c642c8b7391391f6316fe8f5e5906Michal Karpinski    public int describeContents() {
880879eb41ca8c642c8b7391391f6316fe8f5e5906Michal Karpinski        return 0;
890879eb41ca8c642c8b7391391f6316fe8f5e5906Michal Karpinski    }
900879eb41ca8c642c8b7391391f6316fe8f5e5906Michal Karpinski
910879eb41ca8c642c8b7391391f6316fe8f5e5906Michal Karpinski    @Override
92f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    public void writeToParcel(Parcel out, int flags) {
93f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        // write parcel token first
94f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        out.writeInt(PARCEL_TOKEN_CONNECT_EVENT);
95f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        out.writeString(ipAddress);
96f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        out.writeInt(port);
97f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        out.writeString(packageName);
98f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski        out.writeLong(timestamp);
99f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski    }
100f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski}
101f77ee4f1b79929a77f603e5e879f3616ae464e3eMichal Karpinski
102