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