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