package io.evercam.connect.net;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import java.net.InetAddress;
import java.net.UnknownHostException;
import io.evercam.network.discovery.IpTranslator;
public class NetInfo
{
private Context ctxt;
private WifiInfo wifiInfo;
private String ssid = "unknown";
private String macAddress = EMPTY_MAC;
private String netmaskIp = EMPTY_IP;
private String gatewayIp = EMPTY_IP;
private CurrentNetworkInterface currentNetworkInterface = null;
public static final String EMPTY_MAC = "00:00:00:00:00:00";
public static final String EMPTY_IP = "0.0.0.0";
public NetInfo(Context ctxt)
{
this.ctxt = ctxt;
currentNetworkInterface = new CurrentNetworkInterface(ctxt);
if(hasActiveNetwork())
{
if(isWifiConnected(ctxt))
{
if(currentNetworkInterface.isWiFiInterface())
{
setWifiInfo();
}
else
{
setNotWifiNetwork();
}
}
else
{
setNotWifiNetwork();
}
}
}
// get wifi information
private void setWifiInfo()
{
WifiManager wifi = (WifiManager) ctxt.getSystemService(Context.WIFI_SERVICE);
if(isWifiConnected(ctxt))
{
wifiInfo = wifi.getConnectionInfo();
ssid = wifiInfo.getSSID();
macAddress = wifiInfo.getMacAddress();
gatewayIp = IpTranslator.getIpFromIntSigned(wifi.getDhcpInfo().gateway);
netmaskIp = IpTranslator.getIpFromIntSigned(wifi.getDhcpInfo().netmask);
}
}
private void setNotWifiNetwork()
{
ssid = currentNetworkInterface.getInterfaceName();
macAddress = currentNetworkInterface.getMacAddress();
netmaskIp = cidrToMask(currentNetworkInterface.getCidr());
}
public boolean hasActiveNetwork()
{
ConnectivityManager connectivityManager = (ConnectivityManager) ctxt.getSystemService
(Context.CONNECTIVITY_SERVICE);
if(connectivityManager.getActiveNetworkInfo() != null)
{
return true;
}
else
{
return false;
}
}
// check wifi connection
public boolean isWifiConnected(Context context)
{
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService
(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager
.TYPE_WIFI);
if(wifiNetworkInfo.isConnected())
{
return true;
}
return false;
}
public String getSsid()
{
return ssid;
}
public String getMacAddress()
{
return macAddress;
}
public String getNetmaskIp()
{
return netmaskIp;
}
public String getGatewayIp()
{
return gatewayIp;
}
public String getLocalIp()
{
return currentNetworkInterface.getIpAddress();
}
public String getInterfaceName()
{
return currentNetworkInterface.getInterfaceName();
}
public int getCidr()
{
return currentNetworkInterface.getCidr();
}
public boolean isEthernetConnected()
{
ConnectivityManager connectivityManager = (ConnectivityManager) ctxt.getSystemService
(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if(networkInfo != null)
{
if(networkInfo.getType() == ConnectivityManager.TYPE_ETHERNET)
{
return true;
}
}
return false;
}
private String cidrToMask(int cidr)
{
int value = 0xffffffff << (32 - cidr);
byte[] bytes = new byte[]{(byte) (value >>> 24), (byte) (value >> 16 & 0xff), (byte) (value >> 8 & 0xff), (byte) (value & 0xff)};
InetAddress netAddr;
try
{
netAddr = InetAddress.getByAddress(bytes);
return netAddr.getHostAddress();
}
catch(UnknownHostException e)
{
e.printStackTrace();
}
return EMPTY_IP;
}
}