Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aea743aa authored by repo sync's avatar repo sync
Browse files

P2p enhancements

- ConnectivityService interaction and support for running dhcp server
and client

- State machine enhancements for connectivity interaction

Change-Id: Iba3beb8c87554ffd67a7b7e852bbb4dd8666a4f5
parent 6829bf4b
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -260,11 +260,18 @@ public class ConnectivityManager {
     */
    public static final int TYPE_MOBILE_CBS  = 12;

    /**
     * A Wi-Fi p2p connection. Only requesting processes will have access to
     * the peers connected.
     * {@hide}
     */
    public static final int TYPE_WIFI_P2P    = 13;

    /** {@hide} */
    public static final int MAX_RADIO_TYPE   = TYPE_MOBILE_CBS;
    public static final int MAX_RADIO_TYPE   = TYPE_WIFI_P2P;

    /** {@hide} */
    public static final int MAX_NETWORK_TYPE = TYPE_MOBILE_CBS;
    public static final int MAX_NETWORK_TYPE = TYPE_WIFI_P2P;

    public static final int DEFAULT_NETWORK_PREFERENCE = TYPE_WIFI;

@@ -303,6 +310,8 @@ public class ConnectivityManager {
                return "MOBILE_IMS";
            case TYPE_MOBILE_CBS:
                return "MOBILE_CBS";
            case TYPE_WIFI_P2P:
                return "WIFI_P2P";
            default:
                return Integer.toString(type);
        }
+2 −1
Original line number Diff line number Diff line
@@ -100,7 +100,8 @@ public class DhcpInfoInternal {
        if (TextUtils.isEmpty(dns1) == false) {
            p.addDns(NetworkUtils.numericToInetAddress(dns1));
        } else {
            Log.d(TAG, "makeLinkProperties with empty dns1!");
            p.addDns(NetworkUtils.numericToInetAddress(serverAddress));
            Log.d(TAG, "empty dns1, use dhcp server as dns1!");
        }
        if (TextUtils.isEmpty(dns2) == false) {
            p.addDns(NetworkUtils.numericToInetAddress(dns2));
+1 −0
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@
        <item>"mobile_fota,10,0,2,60000,true"</item>
        <item>"mobile_ims,11,0,2,60000,true"</item>
        <item>"mobile_cbs,12,0,2,60000,true"</item>
        <item>"wifi_p2p,13,1,0,-1,true"</item>
    </string-array>

    <!-- Array of ConnectivityManager.TYPE_xxxx constants for networks that may only
+41 −45
Original line number Diff line number Diff line
@@ -468,13 +468,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        for (int netType : mPriorityList) {
            switch (mNetConfigs[netType].radio) {
            case ConnectivityManager.TYPE_WIFI:
                if (DBG) log("Starting Wifi Service.");
                WifiStateTracker wst = new WifiStateTracker();
                WifiService wifiService = new WifiService(context);
                ServiceManager.addService(Context.WIFI_SERVICE, wifiService);
                wifiService.checkAndStartWifi();
                mNetTrackers[ConnectivityManager.TYPE_WIFI] = wst;
                wst.startMonitoring(context, mHandler);
                mNetTrackers[netType] = new WifiStateTracker(netType,
                        mNetConfigs[netType].name);
                mNetTrackers[netType].startMonitoring(context, mHandler);
               break;
            case ConnectivityManager.TYPE_MOBILE:
                mNetTrackers[netType] = new MobileDataStateTracker(netType,
@@ -882,15 +878,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {

        FeatureUser f = new FeatureUser(networkType, feature, binder);

        // TODO - move this into the MobileDataStateTracker
        int usedNetworkType = networkType;
        if(networkType == ConnectivityManager.TYPE_MOBILE) {
            usedNetworkType = convertFeatureToNetworkType(feature);
            if (usedNetworkType < 0) {
                loge("Can't match any netTracker!");
                usedNetworkType = networkType;
            }
        }
        // TODO - move this into individual networktrackers
        int usedNetworkType = convertFeatureToNetworkType(networkType, feature);

        if (mProtectedNetworks.contains(usedNetworkType)) {
            enforceConnectivityInternalPermission();
@@ -900,7 +889,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        if (network != null) {
            Integer currentPid = new Integer(getCallingPid());
            if (usedNetworkType != networkType) {
                NetworkStateTracker radio = mNetTrackers[networkType];
                NetworkInfo ni = network.getNetworkInfo();

                if (ni.isAvailable() == false) {
@@ -1046,14 +1034,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                }
            }

            // TODO - move to MobileDataStateTracker
            int usedNetworkType = networkType;
            if (networkType == ConnectivityManager.TYPE_MOBILE) {
                usedNetworkType = convertFeatureToNetworkType(feature);
                if (usedNetworkType < 0) {
                    usedNetworkType = networkType;
                }
            }
            // TODO - move to individual network trackers
            int usedNetworkType = convertFeatureToNetworkType(networkType, feature);

            tracker =  mNetTrackers[usedNetworkType];
            if (tracker == null) {
                if (DBG) log("ignoring - no known tracker for net type " + usedNetworkType);
@@ -2637,25 +2620,38 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        Slog.e(TAG, s);
    }

    int convertFeatureToNetworkType(String feature){
        int networkType = -1;
    int convertFeatureToNetworkType(int networkType, String feature) {
        int usedNetworkType = networkType;

        if(networkType == ConnectivityManager.TYPE_MOBILE) {
            if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) {
            networkType = ConnectivityManager.TYPE_MOBILE_MMS;
                usedNetworkType = ConnectivityManager.TYPE_MOBILE_MMS;
            } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) {
            networkType = ConnectivityManager.TYPE_MOBILE_SUPL;
                usedNetworkType = ConnectivityManager.TYPE_MOBILE_SUPL;
            } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN) ||
                    TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN_ALWAYS)) {
            networkType = ConnectivityManager.TYPE_MOBILE_DUN;
                usedNetworkType = ConnectivityManager.TYPE_MOBILE_DUN;
            } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_HIPRI)) {
            networkType = ConnectivityManager.TYPE_MOBILE_HIPRI;
                usedNetworkType = ConnectivityManager.TYPE_MOBILE_HIPRI;
            } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_FOTA)) {
            networkType = ConnectivityManager.TYPE_MOBILE_FOTA;
                usedNetworkType = ConnectivityManager.TYPE_MOBILE_FOTA;
            } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_IMS)) {
            networkType = ConnectivityManager.TYPE_MOBILE_IMS;
                usedNetworkType = ConnectivityManager.TYPE_MOBILE_IMS;
            } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_CBS)) {
            networkType = ConnectivityManager.TYPE_MOBILE_CBS;
                usedNetworkType = ConnectivityManager.TYPE_MOBILE_CBS;
            } else {
                Slog.e(TAG, "Can't match any mobile netTracker!");
            }
        } else if (networkType == ConnectivityManager.TYPE_WIFI) {
            if (TextUtils.equals(feature, "p2p")) {
                usedNetworkType = ConnectivityManager.TYPE_WIFI_P2P;
            } else {
                Slog.e(TAG, "Can't match any wifi netTracker!");
            }
        } else {
            Slog.e(TAG, "Unexpected network type");
        }
        return networkType;
        return usedNetworkType;
    }

    private static <T> T checkNotNull(T value, String message) {
+10 −0
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ class ServerThread extends Thread {
        NetworkPolicyManagerService networkPolicy = null;
        ConnectivityService connectivity = null;
        WifiP2pService wifiP2p = null;
        WifiService wifi = null;
        IPackageManager pm = null;
        Context context = null;
        WindowManagerService wm = null;
@@ -309,6 +310,15 @@ class ServerThread extends Thread {
                Slog.e(TAG, "Failure starting Wi-Fi P2pService", e);
            }

           try {
                Slog.i(TAG, "Wi-Fi Service");
                wifi = new WifiService(context);
                ServiceManager.addService(Context.WIFI_SERVICE, wifi);
                wifi.checkAndStartWifi();
            } catch (Throwable e) {
                Slog.e(TAG, "Failure starting Wi-Fi Service", e);
            }

            try {
                Slog.i(TAG, "Connectivity Service");
                connectivity = new ConnectivityService(context, networkManagement, networkPolicy);
Loading