/*********************************************************************************
* TotalCross Software Development Kit *
* Copyright (C) 2000-2012 SuperWaba Ltda. *
* All Rights Reserved *
* *
* This library and virtual machine is distributed in the hope that it will *
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
* This file is covered by the GNU LESSER GENERAL PUBLIC LICENSE VERSION 3.0 *
* A copy of this license is located in file license.txt at the root of this *
* SDK or can be downloaded here: *
* http://www.gnu.org/licenses/lgpl-3.0.txt *
* *
*********************************************************************************/
package totalcross.android;
import android.content.*;
import android.database.*;
import android.net.*;
import android.net.wifi.*;
import android.telephony.*;
import java.net.*;
import java.util.*;
import org.apache.http.conn.util.*;
import totalcross.*;
public class ConnectionManager4A
{
static Object connRef;
private static String connGPRSPrefix = "";
private static String connGPRS = connGPRSPrefix;
private static String connWIFIPrefix = "interface=wifi;";
private static String connWIFI = connWIFIPrefix;
public static final int GPRS = 0;
public static final int WIFI = 1;
/** Specifies that only wifi should be used */
// private static final int TRANSPORT_WIFI = 1;
/** Specifies that only BES (also known as MDS or corporate servers) */
// private static final int TRANSPORT_BES = 2;
/** Specifies that only BIS should be used (Basically RIM hosted BES) */
// private static final int TRANSPORT_BIS = 4;
/** Specifies that TCP should be used (carrier transport) */
// private static final int TRANSPORT_DIRECT_TCP = 8;
/** Specifies that WAP2 should be used (carrier transport) */
// private static final int TRANSPORT_WAP2 = 16;
/** The default order in which selected transports will be attempted */
/* private static final int DEFAULT_TRANSPORT_ORDER[] = { TRANSPORT_WIFI, TRANSPORT_BES, TRANSPORT_BIS,
TRANSPORT_DIRECT_TCP, TRANSPORT_WAP2 };
private static int transports[];
private static int curIndex;
private static int curSubIndex;
*/
static final Uri CONTENT_URI = Uri.parse("content://telephony/carriers");
private static final Uri PREFERRED_APN_URI = Uri.parse("content://telephony/carriers/preferapn");
private ConnectionManager4A()
{
}
public static void setDefaultConfiguration(int type, String cfg)
{
if (cfg == null)
cfg = "";
switch (type)
{
case GPRS:
{
int id = -1;
ContentResolver contentResolver = Launcher4A.loader.getContentResolver();
Cursor cursor = contentResolver.query(CONTENT_URI, new String[] { "_id" },
"apn = ? and user = ? and password = ?", new String[] { "tim.br", "tim", "tim" }, null);
if (cursor == null || cursor.getCount() <= 0)
{
TelephonyManager tel = (TelephonyManager) Launcher4A.loader.getSystemService(Context.TELEPHONY_SERVICE);
String networkOperator = tel.getNetworkOperator();
if (networkOperator != null && networkOperator.length() > 0)
{
int mcc = Integer.parseInt(networkOperator.substring(0, 3));
int mnc = Integer.parseInt(networkOperator.substring(3));
ContentValues values = new ContentValues();
values.put("apn", "tim.br");
values.put("user", "tim");
values.put("password", "tim");
values.put("mcc", mcc);
values.put("mnc", mnc);
values.put("numeric", mcc + "" + mnc);
contentResolver.insert(CONTENT_URI, values);
cursor = contentResolver.query(CONTENT_URI, new String[] { "_id" },
"apn = ? and user = ? and password = ?", new String[] { "tim.br", "tim", "tim" }, null);
}
}
if (cursor == null)
return;
if (cursor.moveToFirst())
id = cursor.getInt(0);
cursor.close();
if (id > -1)
{
ContentValues values = new ContentValues();
//See /etc/apns-conf.xml. The TelephonyProvider uses this file to provide
//content://telephony/carriers/preferapn URI mapping
values.put("apn_id", id);
contentResolver.update(PREFERRED_APN_URI, values, null, null);
cursor = contentResolver.query(PREFERRED_APN_URI, new String[] { "name", "apn" }, "_id=" + id, null, null);
if (cursor != null)
cursor.close();
}
}
break;
case WIFI:
connWIFI = connWIFIPrefix + cfg;
break;
//default:
// throw new IllegalArgumentException("Invalid value for argument 'type'");
}
}
public static void open()
{
connRef = null;
}
public static void open(int type)
{
switch (type)
{
case GPRS:
connRef = connGPRS;
break;
case WIFI:
connRef = connWIFI;
break;
//default:
// throw new IllegalArgumentException("Invalid value for argument 'type'");
}
}
public static void close()
{
connRef = null;
}
public static String getHostAddress(String hostName)
{
try
{
return InetAddress.getByName(hostName).getHostAddress();
}
catch (Exception e)
{
return null;
}
}
public static String getHostName(String hostAddress)
{
try
{
return InetAddress.getByName(hostAddress).getHostName();
}
catch (Exception e)
{
return null;
}
}
public static String getLocalIpAddress()
{
String ipv4=null;
try
{
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();)
{
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();)
{
InetAddress inetAddress = enumIpAddr.nextElement();
// for getting IPV4 format
if (!inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipv4 = inetAddress.getHostAddress()))
return ipv4;
}
}
}
catch (Exception ex)
{
AndroidUtils.debug("IP Address"+ex.toString());
}
return null;
}
public static String getLocalHost()
{
try
{
ConnectivityManager connMgr = (ConnectivityManager) Launcher4A.loader.getSystemService(Context.CONNECTIVITY_SERVICE);
int type = connMgr.getActiveNetworkInfo().getType();
if (type == ConnectivityManager.TYPE_WIFI)
{
WifiManager wifiMgr = (WifiManager) Launcher4A.loader.getSystemService(Context.WIFI_SERVICE);
return ipAddressToString(wifiMgr.getDhcpInfo().ipAddress);
}
String ip = getLocalIpAddress();
return ip != null ? ip : InetAddress.getLocalHost().getHostAddress();
}
catch (Exception e)
{
}
return "127.0.0.1";
}
public static boolean isAvailable(int type)
{
switch (type)
{
case GPRS:
return true;
case WIFI:
return false;
default:
return false;
}
}
public static boolean isInternetAccessible()
{
try
{
InetSocketAddress isa = new InetSocketAddress(InetAddress.getByName("www.google.com"),80);
Socket s = new Socket();
s.connect(isa,30*1000);
s.close();
return true;
}
catch (Exception e)
{
return false;
}
}
private static String ipAddressToString(int addr)
{
StringBuffer buf = new StringBuffer(8);
buf.append(addr & 0xff).append('.').append((addr >>>= 8) & 0xff).append('.').append((addr >>>= 8) & 0xff).append(
'.').append((addr >>>= 8) & 0xff);
return buf.toString();
}
}