blob: dc32384011ad8f6a52ff3cf3c603e214b566ec76 [file] [log] [blame]
Michal Karpinskif77ee4f2016-10-12 16:40:06 +01001/*
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
17package android.app.admin;
18
19import android.os.Parcel;
20import android.os.Parcelable;
21
Pavel Grafova6ea9202017-04-27 14:22:26 +010022import java.net.InetAddress;
23import java.net.UnknownHostException;
24
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010025/**
Rubin Xu0a537bb2017-07-06 15:04:46 +010026 * 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.
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010031 */
32public final class ConnectEvent extends NetworkEvent implements Parcelable {
33
34 /** The destination IP address. */
Naomi Musgrave3b501192017-10-27 14:52:44 +010035 private final String mIpAddress;
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010036
37 /** The destination port number. */
Naomi Musgrave3b501192017-10-27 14:52:44 +010038 private final int mPort;
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010039
Michal Karpinskida9d3ad2016-12-05 13:31:40 +000040 /** @hide */
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010041 public ConnectEvent(String ipAddress, int port, String packageName, long timestamp) {
42 super(packageName, timestamp);
Naomi Musgrave3b501192017-10-27 14:52:44 +010043 this.mIpAddress = ipAddress;
44 this.mPort = port;
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010045 }
46
47 private ConnectEvent(Parcel in) {
Naomi Musgrave3b501192017-10-27 14:52:44 +010048 this.mIpAddress = in.readString();
49 this.mPort = in.readInt();
50 this.mPackageName = in.readString();
51 this.mTimestamp = in.readLong();
52 this.mId = in.readLong();
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010053 }
54
Pavel Grafova6ea9202017-04-27 14:22:26 +010055 public InetAddress getInetAddress() {
56 try {
57 // ipAddress is already an address, not a host name, no DNS resolution will happen.
Naomi Musgrave3b501192017-10-27 14:52:44 +010058 return InetAddress.getByName(mIpAddress);
Pavel Grafova6ea9202017-04-27 14:22:26 +010059 } catch (UnknownHostException e) {
60 // Should never happen as we aren't passing a host name.
61 return InetAddress.getLoopbackAddress();
62 }
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010063 }
64
65 public int getPort() {
Naomi Musgrave3b501192017-10-27 14:52:44 +010066 return mPort;
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010067 }
68
69 @Override
70 public String toString() {
Naomi Musgrave10ae7482018-01-12 17:21:38 +000071 return String.format("ConnectEvent(%d, %s, %d, %d, %s)", mId, mIpAddress, mPort, mTimestamp,
Naomi Musgrave3b501192017-10-27 14:52:44 +010072 mPackageName);
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010073 }
74
Jeff Sharkey9e8f83d2019-02-28 12:06:45 -070075 public static final @android.annotation.NonNull Parcelable.Creator<ConnectEvent> CREATOR
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010076 = 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
Michal Karpinski0879eb42016-11-25 17:17:35 +000092 public int describeContents() {
93 return 0;
94 }
95
96 @Override
Michal Karpinskif77ee4f2016-10-12 16:40:06 +010097 public void writeToParcel(Parcel out, int flags) {
98 // write parcel token first
99 out.writeInt(PARCEL_TOKEN_CONNECT_EVENT);
Naomi Musgrave3b501192017-10-27 14:52:44 +0100100 out.writeString(mIpAddress);
101 out.writeInt(mPort);
102 out.writeString(mPackageName);
103 out.writeLong(mTimestamp);
104 out.writeLong(mId);
Michal Karpinskif77ee4f2016-10-12 16:40:06 +0100105 }
106}