Merge "Add keepalive related methods and fields to system APIs"

This commit is contained in:
Aaron Huang
2019-12-17 13:57:13 +00:00
committed by Android (Google) Code Review
7 changed files with 88 additions and 47 deletions

View File

@@ -0,0 +1,61 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.net;
import android.annotation.IntDef;
import android.annotation.SystemApi;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Thrown when a packet is invalid.
* @hide
*/
@SystemApi
public class InvalidPacketException extends Exception {
public final int error;
// Must match SocketKeepalive#ERROR_INVALID_IP_ADDRESS.
/** Invalid IP address. */
public static final int ERROR_INVALID_IP_ADDRESS = -21;
// Must match SocketKeepalive#ERROR_INVALID_PORT.
/** Invalid port number. */
public static final int ERROR_INVALID_PORT = -22;
// Must match SocketKeepalive#ERROR_INVALID_LENGTH.
/** Invalid packet length. */
public static final int ERROR_INVALID_LENGTH = -23;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = { "ERROR_" }, value = {
ERROR_INVALID_IP_ADDRESS,
ERROR_INVALID_PORT,
ERROR_INVALID_LENGTH
})
public @interface ErrorCode {}
/**
* This packet is invalid.
* See the error code for details.
*/
public InvalidPacketException(@ErrorCode final int error) {
this.error = error;
}
}

View File

@@ -16,13 +16,13 @@
package android.net;
import static android.net.SocketKeepalive.ERROR_INVALID_IP_ADDRESS;
import static android.net.SocketKeepalive.ERROR_INVALID_PORT;
import static android.net.InvalidPacketException.ERROR_INVALID_IP_ADDRESS;
import static android.net.InvalidPacketException.ERROR_INVALID_PORT;
import android.net.SocketKeepalive.InvalidPacketException;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.net.util.IpUtils;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
import java.net.InetAddress;
@@ -33,13 +33,16 @@ import java.net.InetAddress;
*
* @hide
*/
public class KeepalivePacketData implements Parcelable {
@SystemApi
public class KeepalivePacketData {
private static final String TAG = "KeepalivePacketData";
/** Source IP address */
@NonNull
public final InetAddress srcAddress;
/** Destination IP address */
@NonNull
public final InetAddress dstAddress;
/** Source port */
@@ -51,13 +54,14 @@ public class KeepalivePacketData implements Parcelable {
/** Packet data. A raw byte string of packet data, not including the link-layer header. */
private final byte[] mPacket;
protected static final int IPV4_HEADER_LENGTH = 20;
protected static final int UDP_HEADER_LENGTH = 8;
// This should only be constructed via static factory methods, such as
// nattKeepalivePacket
protected KeepalivePacketData(InetAddress srcAddress, int srcPort,
InetAddress dstAddress, int dstPort, byte[] data) throws InvalidPacketException {
// nattKeepalivePacket.
/**
* A holding class for data necessary to build a keepalive packet.
*/
protected KeepalivePacketData(@NonNull InetAddress srcAddress, int srcPort,
@NonNull InetAddress dstAddress, int dstPort,
@NonNull byte[] data) throws InvalidPacketException {
this.srcAddress = srcAddress;
this.dstAddress = dstAddress;
this.srcPort = srcPort;
@@ -78,16 +82,12 @@ public class KeepalivePacketData implements Parcelable {
}
}
@NonNull
public byte[] getPacket() {
return mPacket.clone();
}
/* Parcelable Implementation */
public int describeContents() {
return 0;
}
/** Write to parcel */
/** @hide */
public void writeToParcel(Parcel out, int flags) {
out.writeString(srcAddress.getHostAddress());
out.writeString(dstAddress.getHostAddress());
@@ -96,6 +96,7 @@ public class KeepalivePacketData implements Parcelable {
out.writeByteArray(mPacket);
}
/** @hide */
protected KeepalivePacketData(Parcel in) {
srcAddress = NetworkUtils.numericToInetAddress(in.readString());
dstAddress = NetworkUtils.numericToInetAddress(in.readString());
@@ -103,17 +104,4 @@ public class KeepalivePacketData implements Parcelable {
dstPort = in.readInt();
mPacket = in.createByteArray();
}
/** Parcelable Creator */
public static final @android.annotation.NonNull Parcelable.Creator<KeepalivePacketData> CREATOR =
new Parcelable.Creator<KeepalivePacketData>() {
public KeepalivePacketData createFromParcel(Parcel in) {
return new KeepalivePacketData(in);
}
public KeepalivePacketData[] newArray(int size) {
return new KeepalivePacketData[size];
}
};
}

View File

@@ -19,7 +19,6 @@ package android.net;
import static android.net.SocketKeepalive.ERROR_INVALID_IP_ADDRESS;
import static android.net.SocketKeepalive.ERROR_INVALID_PORT;
import android.net.SocketKeepalive.InvalidPacketException;
import android.net.util.IpUtils;
import android.os.Parcel;
import android.os.Parcelable;
@@ -32,6 +31,9 @@ import java.nio.ByteOrder;
/** @hide */
public final class NattKeepalivePacketData extends KeepalivePacketData implements Parcelable {
private static final int IPV4_HEADER_LENGTH = 20;
private static final int UDP_HEADER_LENGTH = 8;
// This should only be constructed via static factory methods, such as
// nattKeepalivePacket
private NattKeepalivePacketData(InetAddress srcAddress, int srcPort,

View File

@@ -147,17 +147,6 @@ public abstract class SocketKeepalive implements AutoCloseable {
}
}
/**
* This packet is invalid.
* See the error code for details.
* @hide
*/
public static class InvalidPacketException extends ErrorCodeException {
public InvalidPacketException(final int error) {
super(error);
}
}
@NonNull final IConnectivityManager mService;
@NonNull final Network mNetwork;
@NonNull final ParcelFileDescriptor mPfd;

View File

@@ -39,11 +39,11 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.net.ISocketKeepaliveCallback;
import android.net.InvalidPacketException;
import android.net.KeepalivePacketData;
import android.net.NattKeepalivePacketData;
import android.net.NetworkAgent;
import android.net.NetworkUtils;
import android.net.SocketKeepalive.InvalidPacketException;
import android.net.SocketKeepalive.InvalidSocketException;
import android.net.TcpKeepalivePacketData;
import android.net.util.IpUtils;
@@ -657,7 +657,10 @@ public class KeepaliveTracker {
final TcpKeepalivePacketData packet;
try {
packet = TcpKeepaliveController.getTcpKeepalivePacket(fd);
} catch (InvalidPacketException | InvalidSocketException e) {
} catch (InvalidSocketException e) {
notifyErrorCallback(cb, e.error);
return;
} catch (InvalidPacketException e) {
notifyErrorCallback(cb, e.error);
return;
}

View File

@@ -30,8 +30,8 @@ import static android.system.OsConstants.IP_TTL;
import static android.system.OsConstants.TIOCOUTQ;
import android.annotation.NonNull;
import android.net.InvalidPacketException;
import android.net.NetworkUtils;
import android.net.SocketKeepalive.InvalidPacketException;
import android.net.SocketKeepalive.InvalidSocketException;
import android.net.TcpKeepalivePacketData;
import android.net.TcpKeepalivePacketDataParcelable;

View File

@@ -22,8 +22,6 @@ import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import android.net.SocketKeepalive.InvalidPacketException;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;