package de.tudarmstadt.informatik.hostage.commons; import java.net.InetAddress; import java.net.UnknownHostException; import java.security.KeyStore; import java.util.concurrent.ExecutionException; import org.apache.http.HttpVersion; import org.apache.http.client.HttpClient; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; import org.apache.http.protocol.HTTP; import de.tudarmstadt.informatik.hostage.net.MySSLSocketFactory; import de.tudarmstadt.informatik.hostage.ui.MainActivity; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Environment; import android.text.TextUtils; public final class HelperUtils { public static String getSSID(Context context) { String ssid = null; ConnectivityManager connManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (networkInfo != null && networkInfo.isConnected()) { final WifiManager wifiManager = (WifiManager) context .getSystemService(Context.WIFI_SERVICE); final WifiInfo connectionInfo = wifiManager.getConnectionInfo(); if (connectionInfo != null && !TextUtils.isEmpty(connectionInfo.getSSID())) { ssid = connectionInfo.getSSID(); } } return ssid; } public static String getBSSID(Context context) { String bssid = null; ConnectivityManager connManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (networkInfo != null && networkInfo.isConnected()) { final WifiManager wifiManager = (WifiManager) context .getSystemService(Context.WIFI_SERVICE); final WifiInfo connectionInfo = wifiManager.getConnectionInfo(); if (connectionInfo != null && !TextUtils.isEmpty(connectionInfo.getSSID())) { bssid = connectionInfo.getBSSID(); } } return bssid; } public static String getInternalIP(Context context) { String ipAddress = null; ConnectivityManager connManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (networkInfo != null && networkInfo.isConnected()) { final WifiManager wifiManager = (WifiManager) context .getSystemService(Context.WIFI_SERVICE); final WifiInfo connectionInfo = wifiManager.getConnectionInfo(); if (connectionInfo != null) { try { ipAddress = InetAddress.getByAddress( unpackInetAddress(connectionInfo.getIpAddress())) .getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } } } return ipAddress; } private static byte[] unpackInetAddress(int bytes) { return new byte[] { (byte) ((bytes) & 0xff), (byte) ((bytes >>> 8) & 0xff), (byte) ((bytes >>> 16) & 0xff), (byte) ((bytes >>> 24) & 0xff) }; } public static String getExternalIP(Context context) { String ipAddress = null; GetExternalIPTask task = new GetExternalIPTask(); task.execute(new String[]{"http://ip2country.sourceforge.net/ip2c.php?format=JSON"}); try { ipAddress = task.get(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ipAddress; } public static void updateConnectionInfo(Context context) { SharedPreferences pref = context.getSharedPreferences(MainActivity.SESSION_DATA, Context.MODE_PRIVATE); Editor editor = pref.edit(); editor.putString(MainActivity.SSID, getSSID(context)); editor.putString(MainActivity.BSSID, getBSSID(context)); editor.putString(MainActivity.INTERNAL_IP, getInternalIP(context)); editor.putString(MainActivity.EXTERNAL_IP, getExternalIP(context)); editor.commit(); } /* Checks if external storage is available for read and write */ public static boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; } public static HttpClient createHttpClient() { try { KeyStore trustStore = KeyStore.getInstance(KeyStore .getDefaultType()); trustStore.load(null, null); SSLSocketFactory sf = new MySSLSocketFactory(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory .getSocketFactory(), 80)); registry.register(new Scheme("https", sf, 443)); ClientConnectionManager ccm = new ThreadSafeClientConnManager( params, registry); return new DefaultHttpClient(ccm, params); } catch (Exception e) { e.printStackTrace(); return new DefaultHttpClient(); } } public static byte[] concat(byte[]... bytes) { int newSize = 0; for (byte[] b : bytes) newSize += b.length; byte[] dst = new byte[newSize]; int currentPos = 0; int newPos; for (byte[] b : bytes) { newPos = b.length; System.arraycopy(b, 0, dst, currentPos, newPos); currentPos += newPos; } return dst; } }