1330e1089da80cddcd68758512370d217b19f8890Nathan Harold/* 2330e1089da80cddcd68758512370d217b19f8890Nathan Harold * Copyright (C) 2017 The Android Open Source Project 3330e1089da80cddcd68758512370d217b19f8890Nathan Harold * 4330e1089da80cddcd68758512370d217b19f8890Nathan Harold * Licensed under the Apache License, Version 2.0 (the "License"); 5330e1089da80cddcd68758512370d217b19f8890Nathan Harold * you may not use this file except in compliance with the License. 6330e1089da80cddcd68758512370d217b19f8890Nathan Harold * You may obtain a copy of the License at 7330e1089da80cddcd68758512370d217b19f8890Nathan Harold * 8330e1089da80cddcd68758512370d217b19f8890Nathan Harold * http://www.apache.org/licenses/LICENSE-2.0 9330e1089da80cddcd68758512370d217b19f8890Nathan Harold * 10330e1089da80cddcd68758512370d217b19f8890Nathan Harold * Unless required by applicable law or agreed to in writing, software 11330e1089da80cddcd68758512370d217b19f8890Nathan Harold * distributed under the License is distributed on an "AS IS" BASIS, 12330e1089da80cddcd68758512370d217b19f8890Nathan Harold * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13330e1089da80cddcd68758512370d217b19f8890Nathan Harold * See the License for the specific language governing permissions and 14330e1089da80cddcd68758512370d217b19f8890Nathan Harold * limitations under the License. 15330e1089da80cddcd68758512370d217b19f8890Nathan Harold */ 16330e1089da80cddcd68758512370d217b19f8890Nathan Haroldpackage android.net; 17330e1089da80cddcd68758512370d217b19f8890Nathan Harold 18330e1089da80cddcd68758512370d217b19f8890Nathan Haroldimport android.os.Parcel; 19330e1089da80cddcd68758512370d217b19f8890Nathan Haroldimport android.os.Parcelable; 20a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 21a10003d5de52339f4d30fedd7294941378e5f13cNathan Haroldimport com.android.internal.annotations.VisibleForTesting; 22330e1089da80cddcd68758512370d217b19f8890Nathan Harold 23c61b70d12d23da97013ee5e44f101609215d1bffJonathan Basseri/** 24c61b70d12d23da97013ee5e44f101609215d1bffJonathan Basseri * This class encapsulates all the configuration parameters needed to create IPsec transforms and 25c61b70d12d23da97013ee5e44f101609215d1bffJonathan Basseri * policies. 26c61b70d12d23da97013ee5e44f101609215d1bffJonathan Basseri * 27c61b70d12d23da97013ee5e44f101609215d1bffJonathan Basseri * @hide 28c61b70d12d23da97013ee5e44f101609215d1bffJonathan Basseri */ 29330e1089da80cddcd68758512370d217b19f8890Nathan Haroldpublic final class IpSecConfig implements Parcelable { 3093962f34ce21f5aac825afbcebf2f3e8c7a30910Nathan Harold private static final String TAG = "IpSecConfig"; 31330e1089da80cddcd68758512370d217b19f8890Nathan Harold 32a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold // MODE_TRANSPORT or MODE_TUNNEL 33a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold private int mMode = IpSecTransform.MODE_TRANSPORT; 34330e1089da80cddcd68758512370d217b19f8890Nathan Harold 35a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold // Preventing this from being null simplifies Java->Native binder 36a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold private String mSourceAddress = ""; 37330e1089da80cddcd68758512370d217b19f8890Nathan Harold 38a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold // Preventing this from being null simplifies Java->Native binder 39a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold private String mDestinationAddress = ""; 40330e1089da80cddcd68758512370d217b19f8890Nathan Harold 41d6f50b260d60ca2b7e1e547fe6b4a2592652b2f7Nathan Harold // The underlying Network that represents the "gateway" Network 42a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold // for outbound packets. It may also be used to select packets. 43a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold private Network mNetwork; 44330e1089da80cddcd68758512370d217b19f8890Nathan Harold 45a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold // Minimum requirements for identifying a transform 46a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold // SPI identifying the IPsec SA in packet processing 47a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold // and a destination IP address 48a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold private int mSpiResourceId = IpSecManager.INVALID_RESOURCE_ID; 49a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold 50a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold // Encryption Algorithm 51a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold private IpSecAlgorithm mEncryption; 52a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold 53a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold // Authentication Algorithm 54a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold private IpSecAlgorithm mAuthentication; 55330e1089da80cddcd68758512370d217b19f8890Nathan Harold 56a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold // Authenticated Encryption Algorithm 57a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold private IpSecAlgorithm mAuthenticatedEncryption; 58330e1089da80cddcd68758512370d217b19f8890Nathan Harold 59330e1089da80cddcd68758512370d217b19f8890Nathan Harold // For tunnel mode IPv4 UDP Encapsulation 60330e1089da80cddcd68758512370d217b19f8890Nathan Harold // IpSecTransform#ENCAP_ESP_*, such as ENCAP_ESP_OVER_UDP_IKE 61a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold private int mEncapType = IpSecTransform.ENCAP_NONE; 62a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold private int mEncapSocketResourceId = IpSecManager.INVALID_RESOURCE_ID; 63a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold private int mEncapRemotePort; 64330e1089da80cddcd68758512370d217b19f8890Nathan Harold 65330e1089da80cddcd68758512370d217b19f8890Nathan Harold // An interval, in seconds between the NattKeepalive packets 66a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold private int mNattKeepaliveInterval; 67a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 680b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu // XFRM mark and mask 690b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu private int mMarkValue; 700b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu private int mMarkMask; 710b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu 72a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold /** Set the mode for this IPsec transform */ 73a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold public void setMode(int mode) { 74a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold mMode = mode; 75a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold } 76a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 77a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold /** Set the source IP addres for this IPsec transform */ 78a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public void setSourceAddress(String sourceAddress) { 79a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mSourceAddress = sourceAddress; 80a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold } 81a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 82a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold /** Set the destination IP address for this IPsec transform */ 83a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public void setDestinationAddress(String destinationAddress) { 84a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mDestinationAddress = destinationAddress; 85a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold } 86a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 87a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold /** Set the SPI by resource ID */ 88a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public void setSpiResourceId(int resourceId) { 89a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mSpiResourceId = resourceId; 90a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold } 91a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 92a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold /** Set the encryption algorithm */ 93a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public void setEncryption(IpSecAlgorithm encryption) { 94a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mEncryption = encryption; 95a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold } 96a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 97a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold /** Set the authentication algorithm */ 98a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public void setAuthentication(IpSecAlgorithm authentication) { 99a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mAuthentication = authentication; 100a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold } 101a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 102a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold /** Set the authenticated encryption algorithm */ 103a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public void setAuthenticatedEncryption(IpSecAlgorithm authenticatedEncryption) { 104a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mAuthenticatedEncryption = authenticatedEncryption; 1050febe5ece542cf16bc680e72d1484a3f603a18e0Benedict Wong } 1060febe5ece542cf16bc680e72d1484a3f603a18e0Benedict Wong 107a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold /** Set the underlying network that will carry traffic for this transform */ 108a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold public void setNetwork(Network network) { 109a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold mNetwork = network; 110a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold } 111a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 112a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold public void setEncapType(int encapType) { 113a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold mEncapType = encapType; 114a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold } 115a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 116a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold public void setEncapSocketResourceId(int resourceId) { 117a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold mEncapSocketResourceId = resourceId; 118a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold } 119a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 120a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold public void setEncapRemotePort(int port) { 121a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold mEncapRemotePort = port; 122a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold } 123a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 124a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold public void setNattKeepaliveInterval(int interval) { 125a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold mNattKeepaliveInterval = interval; 126a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold } 127330e1089da80cddcd68758512370d217b19f8890Nathan Harold 1280b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu public void setMarkValue(int mark) { 1290b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu mMarkValue = mark; 1300b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu } 1310b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu 1320b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu public void setMarkMask(int mask) { 1330b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu mMarkMask = mask; 1340b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu } 1350b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu 13693962f34ce21f5aac825afbcebf2f3e8c7a30910Nathan Harold // Transport or Tunnel 13793962f34ce21f5aac825afbcebf2f3e8c7a30910Nathan Harold public int getMode() { 138a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold return mMode; 13993962f34ce21f5aac825afbcebf2f3e8c7a30910Nathan Harold } 14093962f34ce21f5aac825afbcebf2f3e8c7a30910Nathan Harold 141a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public String getSourceAddress() { 142a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold return mSourceAddress; 143330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 144330e1089da80cddcd68758512370d217b19f8890Nathan Harold 145a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public int getSpiResourceId() { 146a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold return mSpiResourceId; 147330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 148330e1089da80cddcd68758512370d217b19f8890Nathan Harold 149a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public String getDestinationAddress() { 150a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold return mDestinationAddress; 151330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 152330e1089da80cddcd68758512370d217b19f8890Nathan Harold 153a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public IpSecAlgorithm getEncryption() { 154a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold return mEncryption; 155330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 156330e1089da80cddcd68758512370d217b19f8890Nathan Harold 157a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public IpSecAlgorithm getAuthentication() { 158a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold return mAuthentication; 159330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 160330e1089da80cddcd68758512370d217b19f8890Nathan Harold 161a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold public IpSecAlgorithm getAuthenticatedEncryption() { 162a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold return mAuthenticatedEncryption; 1630febe5ece542cf16bc680e72d1484a3f603a18e0Benedict Wong } 1640febe5ece542cf16bc680e72d1484a3f603a18e0Benedict Wong 16593962f34ce21f5aac825afbcebf2f3e8c7a30910Nathan Harold public Network getNetwork() { 166a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold return mNetwork; 167330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 168330e1089da80cddcd68758512370d217b19f8890Nathan Harold 169330e1089da80cddcd68758512370d217b19f8890Nathan Harold public int getEncapType() { 170a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold return mEncapType; 171330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 172330e1089da80cddcd68758512370d217b19f8890Nathan Harold 173a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold public int getEncapSocketResourceId() { 174a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold return mEncapSocketResourceId; 175330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 176330e1089da80cddcd68758512370d217b19f8890Nathan Harold 177330e1089da80cddcd68758512370d217b19f8890Nathan Harold public int getEncapRemotePort() { 178a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold return mEncapRemotePort; 179330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 180330e1089da80cddcd68758512370d217b19f8890Nathan Harold 18193962f34ce21f5aac825afbcebf2f3e8c7a30910Nathan Harold public int getNattKeepaliveInterval() { 182a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold return mNattKeepaliveInterval; 183330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 184330e1089da80cddcd68758512370d217b19f8890Nathan Harold 1850b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu public int getMarkValue() { 1860b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu return mMarkValue; 1870b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu } 1880b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu 1890b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu public int getMarkMask() { 1900b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu return mMarkMask; 1910b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu } 1920b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu 193330e1089da80cddcd68758512370d217b19f8890Nathan Harold // Parcelable Methods 194330e1089da80cddcd68758512370d217b19f8890Nathan Harold 195330e1089da80cddcd68758512370d217b19f8890Nathan Harold @Override 196330e1089da80cddcd68758512370d217b19f8890Nathan Harold public int describeContents() { 197330e1089da80cddcd68758512370d217b19f8890Nathan Harold return 0; 198330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 199330e1089da80cddcd68758512370d217b19f8890Nathan Harold 200330e1089da80cddcd68758512370d217b19f8890Nathan Harold @Override 201330e1089da80cddcd68758512370d217b19f8890Nathan Harold public void writeToParcel(Parcel out, int flags) { 202a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold out.writeInt(mMode); 203a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold out.writeString(mSourceAddress); 204a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold out.writeString(mDestinationAddress); 205a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold out.writeParcelable(mNetwork, flags); 206a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold out.writeInt(mSpiResourceId); 207a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold out.writeParcelable(mEncryption, flags); 208a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold out.writeParcelable(mAuthentication, flags); 209a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold out.writeParcelable(mAuthenticatedEncryption, flags); 210a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold out.writeInt(mEncapType); 211a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold out.writeInt(mEncapSocketResourceId); 212a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold out.writeInt(mEncapRemotePort); 21319ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold out.writeInt(mNattKeepaliveInterval); 2140b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu out.writeInt(mMarkValue); 2150b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu out.writeInt(mMarkMask); 216330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 217330e1089da80cddcd68758512370d217b19f8890Nathan Harold 218a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold @VisibleForTesting 219a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold public IpSecConfig() {} 220a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold 2219dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong /** Copy constructor */ 2229dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong @VisibleForTesting 2239dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong public IpSecConfig(IpSecConfig c) { 2249dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mMode = c.mMode; 2259dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mSourceAddress = c.mSourceAddress; 2269dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mDestinationAddress = c.mDestinationAddress; 2279dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mNetwork = c.mNetwork; 2289dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mSpiResourceId = c.mSpiResourceId; 2299dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mEncryption = c.mEncryption; 2309dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mAuthentication = c.mAuthentication; 2319dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mAuthenticatedEncryption = c.mAuthenticatedEncryption; 2329dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mEncapType = c.mEncapType; 2339dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mEncapSocketResourceId = c.mEncapSocketResourceId; 2349dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mEncapRemotePort = c.mEncapRemotePort; 2359dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mNattKeepaliveInterval = c.mNattKeepaliveInterval; 2369dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mMarkValue = c.mMarkValue; 2379dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong mMarkMask = c.mMarkMask; 2389dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong } 2399dd3a385279403ff94dd07b052424da3acd3a1f4Benedict Wong 240330e1089da80cddcd68758512370d217b19f8890Nathan Harold private IpSecConfig(Parcel in) { 241a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold mMode = in.readInt(); 242a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mSourceAddress = in.readString(); 243a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mDestinationAddress = in.readString(); 244a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold mNetwork = (Network) in.readParcelable(Network.class.getClassLoader()); 245a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mSpiResourceId = in.readInt(); 246a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mEncryption = 247330e1089da80cddcd68758512370d217b19f8890Nathan Harold (IpSecAlgorithm) in.readParcelable(IpSecAlgorithm.class.getClassLoader()); 248a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mAuthentication = 249330e1089da80cddcd68758512370d217b19f8890Nathan Harold (IpSecAlgorithm) in.readParcelable(IpSecAlgorithm.class.getClassLoader()); 250a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold mAuthenticatedEncryption = 2510febe5ece542cf16bc680e72d1484a3f603a18e0Benedict Wong (IpSecAlgorithm) in.readParcelable(IpSecAlgorithm.class.getClassLoader()); 252a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold mEncapType = in.readInt(); 253a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold mEncapSocketResourceId = in.readInt(); 254a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold mEncapRemotePort = in.readInt(); 25519ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold mNattKeepaliveInterval = in.readInt(); 2560b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu mMarkValue = in.readInt(); 2570b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu mMarkMask = in.readInt(); 258330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 259330e1089da80cddcd68758512370d217b19f8890Nathan Harold 260b0c95b19ab4384bfc7141abfe3840736d52b4a44ludi @Override 261b0c95b19ab4384bfc7141abfe3840736d52b4a44ludi public String toString() { 262b0c95b19ab4384bfc7141abfe3840736d52b4a44ludi StringBuilder strBuilder = new StringBuilder(); 263b0c95b19ab4384bfc7141abfe3840736d52b4a44ludi strBuilder 264a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append("{mMode=") 265a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append(mMode == IpSecTransform.MODE_TUNNEL ? "TUNNEL" : "TRANSPORT") 266a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append(", mSourceAddress=") 267a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append(mSourceAddress) 268a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append(", mDestinationAddress=") 269a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append(mDestinationAddress) 270a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append(", mNetwork=") 271a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append(mNetwork) 272a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append(", mEncapType=") 273a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append(mEncapType) 274a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append(", mEncapSocketResourceId=") 275a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append(mEncapSocketResourceId) 276a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append(", mEncapRemotePort=") 277a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append(mEncapRemotePort) 278a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append(", mNattKeepaliveInterval=") 279a10003d5de52339f4d30fedd7294941378e5f13cNathan Harold .append(mNattKeepaliveInterval) 280a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append("{mSpiResourceId=") 281a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append(mSpiResourceId) 282a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append(", mEncryption=") 283a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append(mEncryption) 284a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append(", mAuthentication=") 285a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append(mAuthentication) 286a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append(", mAuthenticatedEncryption=") 287a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold .append(mAuthenticatedEncryption) 2880b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu .append(", mMarkValue=") 2890b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu .append(mMarkValue) 2900b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu .append(", mMarkMask=") 2910b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu .append(mMarkMask) 292b0c95b19ab4384bfc7141abfe3840736d52b4a44ludi .append("}"); 293b0c95b19ab4384bfc7141abfe3840736d52b4a44ludi 294b0c95b19ab4384bfc7141abfe3840736d52b4a44ludi return strBuilder.toString(); 295b0c95b19ab4384bfc7141abfe3840736d52b4a44ludi } 296b0c95b19ab4384bfc7141abfe3840736d52b4a44ludi 297330e1089da80cddcd68758512370d217b19f8890Nathan Harold public static final Parcelable.Creator<IpSecConfig> CREATOR = 298330e1089da80cddcd68758512370d217b19f8890Nathan Harold new Parcelable.Creator<IpSecConfig>() { 299330e1089da80cddcd68758512370d217b19f8890Nathan Harold public IpSecConfig createFromParcel(Parcel in) { 300330e1089da80cddcd68758512370d217b19f8890Nathan Harold return new IpSecConfig(in); 301330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 302330e1089da80cddcd68758512370d217b19f8890Nathan Harold 303330e1089da80cddcd68758512370d217b19f8890Nathan Harold public IpSecConfig[] newArray(int size) { 304330e1089da80cddcd68758512370d217b19f8890Nathan Harold return new IpSecConfig[size]; 305330e1089da80cddcd68758512370d217b19f8890Nathan Harold } 306330e1089da80cddcd68758512370d217b19f8890Nathan Harold }; 30719ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold 30819ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold @VisibleForTesting 309d6f50b260d60ca2b7e1e547fe6b4a2592652b2f7Nathan Harold /** Equals method used for testing */ 31019ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold public static boolean equals(IpSecConfig lhs, IpSecConfig rhs) { 31119ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold if (lhs == null || rhs == null) return (lhs == rhs); 31219ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold return (lhs.mMode == rhs.mMode 313a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold && lhs.mSourceAddress.equals(rhs.mSourceAddress) 314a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold && lhs.mDestinationAddress.equals(rhs.mDestinationAddress) 31519ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold && ((lhs.mNetwork != null && lhs.mNetwork.equals(rhs.mNetwork)) 31619ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold || (lhs.mNetwork == rhs.mNetwork)) 31719ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold && lhs.mEncapType == rhs.mEncapType 31819ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold && lhs.mEncapSocketResourceId == rhs.mEncapSocketResourceId 31919ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold && lhs.mEncapRemotePort == rhs.mEncapRemotePort 32019ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold && lhs.mNattKeepaliveInterval == rhs.mNattKeepaliveInterval 321a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold && lhs.mSpiResourceId == rhs.mSpiResourceId 322a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold && IpSecAlgorithm.equals(lhs.mEncryption, rhs.mEncryption) 323a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold && IpSecAlgorithm.equals( 324a25233123b2d29fde83dd686f6313f0a232c5b2aNathan Harold lhs.mAuthenticatedEncryption, rhs.mAuthenticatedEncryption) 3250b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu && IpSecAlgorithm.equals(lhs.mAuthentication, rhs.mAuthentication) 3260b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu && lhs.mMarkValue == rhs.mMarkValue 3270b611f496e9dd6be62419d8cd7f2d164efefad1cDi Lu && lhs.mMarkMask == rhs.mMarkMask); 32819ce70b089310bc4ecb193b728e2ea7d3471ba20Nathan Harold } 329330e1089da80cddcd68758512370d217b19f8890Nathan Harold} 330