blob: b5a739f964c0ecc3fd27d131be0cc8587a225161 [file] [log] [blame]
/*
* Copyright (C) 2021 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 com.android.internal.net.ipsec.ike;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Looper;
import com.android.internal.net.eap.EapAuthenticator;
import com.android.internal.net.ipsec.ike.utils.RandomnessFactory;
import com.android.internal.net.utils.IkeDeviceConfigUtils;
/** IkeContext contains all context information of an IKE Session */
public class IkeContext implements EapAuthenticator.EapContext {
private static final String NAMESPACE_IPSEC = "ipsec";
public static final String CONFIG_AUTO_ADDRESS_FAMILY_SELECTION_CELLULAR_PREFER_IPV4 =
"config_auto_address_family_selection_cellular_prefer_ipv4";
public static final String CONFIG_AUTO_NATT_KEEPALIVES_CELLULAR_TIMEOUT_OVERRIDE_SECONDS =
"config_auto_natt_keepalives_cellular_timeout_override_seconds";
private final Looper mLooper;
private final Context mContext;
private final RandomnessFactory mRandomFactory;
/** Constructor for IkeContext */
public IkeContext(Looper looper, Context context, RandomnessFactory randomFactory) {
mLooper = looper;
mContext = context;
mRandomFactory = randomFactory;
}
/** Gets the Looper */
@Override
public Looper getLooper() {
return mLooper;
}
/** Gets the Context */
@Override
public Context getContext() {
return mContext;
}
/** Gets the RandomnessFactory which will control if the IKE Session is in test mode */
@Override
public RandomnessFactory getRandomnessFactory() {
return mRandomFactory;
}
/** Looks up the value of an integer property for IPsec module from DeviceConfig */
public int getDeviceConfigPropertyInt(
String name, int minimumValue, int maximumValue, int defaultValue) {
if (!hasReadDeviceConfigPermission()) {
return defaultValue;
}
return IkeDeviceConfigUtils.getDeviceConfigPropertyInt(
NAMESPACE_IPSEC, name, minimumValue, maximumValue, defaultValue);
}
/** Looks up the value of a boolean property for IPsec module from DeviceConfig */
public boolean getDeviceConfigPropertyBoolean(String name, boolean defaultValue) {
if (!hasReadDeviceConfigPermission()) {
return defaultValue;
}
return IkeDeviceConfigUtils.getDeviceConfigPropertyBoolean(
NAMESPACE_IPSEC, name, defaultValue);
}
private boolean hasReadDeviceConfigPermission() {
return mContext.checkSelfPermission(android.Manifest.permission.READ_DEVICE_CONFIG)
== PackageManager.PERMISSION_GRANTED;
}
}