diff --git a/core/java/android/net/IpSecAlgorithm.java b/core/java/android/net/IpSecAlgorithm.java index 48b095d9b7..5ae3400361 100644 --- a/core/java/android/net/IpSecAlgorithm.java +++ b/core/java/android/net/IpSecAlgorithm.java @@ -16,8 +16,10 @@ package android.net; import android.annotation.StringDef; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; +import com.android.internal.util.HexDump; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -182,4 +184,17 @@ public final class IpSecAlgorithm implements Parcelable { return false; } } + + @Override + public String toString() { + return new StringBuilder() + .append("{mName=") + .append(mName) + .append(", mKey=") + .append(Build.IS_DEBUGGABLE ? HexDump.toHexString(mKey) : "") + .append(", mTruncLenBits=") + .append(mTruncLenBits) + .append("}") + .toString(); + } }; diff --git a/core/java/android/net/IpSecConfig.java b/core/java/android/net/IpSecConfig.java index 8b80f2ba50..5a5c740c7a 100644 --- a/core/java/android/net/IpSecConfig.java +++ b/core/java/android/net/IpSecConfig.java @@ -47,9 +47,22 @@ public final class IpSecConfig implements Parcelable { // Authentication Algorithm IpSecAlgorithm authentication; + + @Override + public String toString() { + return new StringBuilder() + .append("{spiResourceId=") + .append(spiResourceId) + .append(", encryption=") + .append(encryption) + .append(", authentication=") + .append(authentication) + .append("}") + .toString(); + } } - Flow[] flow = new Flow[] {new Flow(), new Flow()}; + final Flow[] flow = new Flow[] {new Flow(), new Flow()}; // For tunnel mode IPv4 UDP Encapsulation // IpSecTransform#ENCAP_ESP_*, such as ENCAP_ESP_OVER_UDP_IKE @@ -166,6 +179,35 @@ public final class IpSecConfig implements Parcelable { encapRemotePort = in.readInt(); } + @Override + public String toString() { + StringBuilder strBuilder = new StringBuilder(); + strBuilder + .append("{mode=") + .append(mode == IpSecTransform.MODE_TUNNEL ? "TUNNEL" : "TRANSPORT") + .append(", localAddress=") + .append(localAddress) + .append(", remoteAddress=") + .append(remoteAddress) + .append(", network=") + .append(network) + .append(", encapType=") + .append(encapType) + .append(", encapLocalPortResourceId=") + .append(encapLocalPortResourceId) + .append(", encapRemotePort=") + .append(encapRemotePort) + .append(", nattKeepaliveInterval=") + .append(nattKeepaliveInterval) + .append(", flow[OUT]=") + .append(flow[IpSecTransform.DIRECTION_OUT]) + .append(", flow[IN]=") + .append(flow[IpSecTransform.DIRECTION_IN]) + .append("}"); + + return strBuilder.toString(); + } + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public IpSecConfig createFromParcel(Parcel in) { diff --git a/core/java/android/net/IpSecTransform.java b/core/java/android/net/IpSecTransform.java index 8e3a612970..cfbac58bbd 100644 --- a/core/java/android/net/IpSecTransform.java +++ b/core/java/android/net/IpSecTransform.java @@ -67,10 +67,10 @@ public final class IpSecTransform implements AutoCloseable { public @interface TransformDirection {} /** @hide */ - private static final int MODE_TUNNEL = 0; + public static final int MODE_TUNNEL = 0; /** @hide */ - private static final int MODE_TRANSPORT = 1; + public static final int MODE_TRANSPORT = 1; /** @hide */ public static final int ENCAP_NONE = 0; diff --git a/services/core/java/com/android/server/IpSecService.java b/services/core/java/com/android/server/IpSecService.java index f72cbc9d68..3fec6ad8fa 100644 --- a/services/core/java/com/android/server/IpSecService.java +++ b/services/core/java/com/android/server/IpSecService.java @@ -214,6 +214,21 @@ public class IpSecService extends IIpSecService.Stub { *

Calls to this are always guarded by IpSecService#this */ protected abstract void releaseResources() throws RemoteException; + + @Override + public String toString() { + return new StringBuilder() + .append("{mResourceId=") + .append(mResourceId) + .append(", pid=") + .append(pid) + .append(", uid=") + .append(uid) + .append(", mReferenceCount=") + .append(mReferenceCount.get()) + .append("}") + .toString(); + } }; /** @@ -240,6 +255,11 @@ public class IpSecService extends IIpSecService.Stub { void remove(int key) { mArray.remove(key); } + + @Override + public String toString() { + return mArray.toString(); + } } private final class TransformRecord extends ManagedResource { @@ -309,6 +329,24 @@ public class IpSecService extends IIpSecService.Stub { mSocket.removeReference(); } } + + @Override + public String toString() { + StringBuilder strBuilder = new StringBuilder(); + strBuilder + .append("{super=") + .append(super.toString()) + .append(", mSocket=") + .append(mSocket) + .append(", mSpis[OUT].mResourceId=") + .append(mSpis[IpSecTransform.DIRECTION_OUT].mResourceId) + .append(", mSpis[IN].mResourceId=") + .append(mSpis[IpSecTransform.DIRECTION_IN].mResourceId) + .append(", mConfig=") + .append(mConfig) + .append("}"); + return strBuilder.toString(); + } } private final class SpiRecord extends ManagedResource { @@ -372,6 +410,26 @@ public class IpSecService extends IIpSecService.Stub { mOwnedByTransform = true; } + + @Override + public String toString() { + StringBuilder strBuilder = new StringBuilder(); + strBuilder + .append("{super=") + .append(super.toString()) + .append(", mSpi=") + .append(mSpi) + .append(", mDirection=") + .append(mDirection) + .append(", mLocalAddress=") + .append(mLocalAddress) + .append(", mRemoteAddress=") + .append(mRemoteAddress) + .append(", mOwnedByTransform=") + .append(mOwnedByTransform) + .append("}"); + return strBuilder.toString(); + } } private final class UdpSocketRecord extends ManagedResource { @@ -399,6 +457,19 @@ public class IpSecService extends IIpSecService.Stub { public FileDescriptor getSocket() { return mSocket; } + + @Override + public String toString() { + return new StringBuilder() + .append("{super=") + .append(super.toString()) + .append(", mSocket=") + .append(mSocket) + .append(", mPort=") + .append(mPort) + .append("}") + .toString(); + } } /** @@ -734,11 +805,18 @@ public class IpSecService extends IIpSecService.Stub { } @Override - protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + protected synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) { mContext.enforceCallingOrSelfPermission(DUMP, TAG); - // TODO: Add dump code to print out a log of all the resources being tracked - pw.println("IpSecService Log:"); + + pw.println("IpSecService dump:"); pw.println("NetdNativeService Connection: " + (isNetdAlive() ? "alive" : "dead")); pw.println(); + + pw.println("mTransformRecords:"); + pw.println(mTransformRecords); + pw.println("mUdpSocketRecords:"); + pw.println(mUdpSocketRecords); + pw.println("mSpiRecords:"); + pw.println(mSpiRecords); } }