[Replicant] [PATCH v2] Fix "RepWifi connection not correctly reported to userspace apps" Issue #1792.

Joonas Kylmälä joonas.kylmala at iki.fi
Sat Aug 5 07:28:00 UTC 2017


Hi,

thanks for the work Fil. I have couple comments about the patch.

Fil:
> ---
>  .../com/android/server/ConnectivityService.java    | 68
> ++++++++++++++++++++++
>  1 file changed, 68 insertions(+)
> 
> diff --git
> a/services/core/java/com/android/server/ConnectivityService.java
> b/services/core/java/com/android/server/ConnectivityService.java
> index 1489fd8713a..fadc4f4f914 100644
> --- a/services/core/java/com/android/server/ConnectivityService.java
> +++ b/services/core/java/com/android/server/ConnectivityService.java
> @@ -145,11 +145,13 @@ import java.io.IOException;
>  import java.io.PrintWriter;
>  import java.net.Inet4Address;
>  import java.net.InetAddress;
> +import java.net.NetworkInterface;
>  import java.net.UnknownHostException;
>  import java.util.ArrayDeque;
>  import java.util.ArrayList;
>  import java.util.Arrays;
>  import java.util.Collection;
> +import java.util.Enumeration;
>  import java.util.HashMap;
>  import java.util.HashSet;
>  import java.util.SortedSet;
> @@ -1017,9 +1019,75 @@ public class ConnectivityService extends
> IConnectivityManager.Stub
>          final int uid = Binder.getCallingUid();
>          NetworkState state = getUnfilteredActiveNetworkState(uid);
>          NetworkInfo ni = getFilteredNetworkInfo(state.networkInfo,
> state.linkProperties, uid);
> +
> +        // TODO RepWifi extension. Remove when a low-level, long-lived
> solution is found.
> +        if (ni == null) {
> +            ni = getNetworkInfoByInterfaceName(IFACE_NAME_WIFI);
> +        }
> +        if (ni == null) {
> +            ni = getNetworkInfoByInterfaceName(IFACE_NAME_TETHER);
> +        }
> +                
>          maybeLogBlockedNetworkInfo(ni, uid);
>          return ni;
>      }
> +    
> +    // TODO RepWifi extension. Remove when a low-level, long-lived
> solution is found.
> +    private static final String IFACE_NAME_WIFI = "wlan0";
> +    private static final String IFACE_NAME_TETHER = "rndis0";

I think these are now used before this declaration and could be
therefore moved bit more upwards. See the line "ni =
getNetworkInfoByInterfaceName(IFACE_NAME_TETHER);".

> +    private NetworkInfo getNetworkInfoByInterfaceName(String ifname) {
> +        try {
> +
> +            int type = 0;
> +            String typeName = null;
> +
> +            if (ifname == IFACE_NAME_WIFI) {
> +                type = ConnectivityManager.TYPE_WIFI;
> +                typeName = "WIFI";
> +
> +            } else if (ifname == IFACE_NAME_TETHER) {
> +                type = ConnectivityManager.TYPE_ETHERNET;
> +                typeName = "ETHERNET";
> +
> +            } else {
> +                return null;
> +            }
> +
> +            NetworkInterface nifRep =
> NetworkInterface.getByName(ifname);
> +            if (nifRep == null) {
> +                return null;
> +            }
> +
> +            Enumeration<InetAddress> ads = nifRep.getInetAddresses();
> +            if (ads == null) {
> +                return null;
> +            }
> +
> +            while (ads.hasMoreElements()) {
> +
> +                InetAddress a = ads.nextElement();
> +
> +                if (a.getHostAddress() != null &&
> a.isSiteLocalAddress()) {
> +                    // if the interface has a valid IP address in the
> range of a
> +                    // local network we consider it is connected to an
> AP.

I think this needs to be widened. The AP could also give a public IP, right?


More information about the Replicant mailing list