Port Mapping using Cling library in Android
Adding Cling Support to your Android Project
Section titled “Adding Cling Support to your Android Project”build.gradle
repositories { maven { url 'http://4thline.org/m2' }}
dependencies {
// Clingcompile 'org.fourthline.cling:cling-support:2.1.0'
//Other dependencies required by Clingcompile 'org.eclipse.jetty:jetty-server:8.1.18.v20150929'compile 'org.eclipse.jetty:jetty-servlet:8.1.18.v20150929'compile 'org.eclipse.jetty:jetty-client:8.1.18.v20150929'compile 'org.slf4j:slf4j-jdk14:1.7.14'
}Mapping a NAT port
Section titled “Mapping a NAT port”String myIp = getIpAddress();int port = 55555;
//creates a port mapping configuration with the external/internal port, an internal host IP, the protocol and an optional descriptionPortMapping[] desiredMapping = new PortMapping[2];desiredMapping[0] = new PortMapping(port,myIp, PortMapping.Protocol.TCP);desiredMapping[1] = new PortMapping(port,myIp, PortMapping.Protocol.UDP);
//starting the UPnP serviceUpnpService upnpService = new UpnpServiceImpl(new AndroidUpnpServiceConfiguration());RegistryListener registryListener = new PortMappingListener(desiredMapping);upnpService.getRegistry().addListener(registryListener);upnpService.getControlPoint().search();
//method for getting local ipprivate String getIpAddress() { String ip = ""; try { Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface .getNetworkInterfaces(); while (enumNetworkInterfaces.hasMoreElements()) { NetworkInterface networkInterface = enumNetworkInterfaces .nextElement(); Enumeration<InetAddress> enumInetAddress = networkInterface .getInetAddresses(); while (enumInetAddress.hasMoreElements()) { InetAddress inetAddress = enumInetAddress.nextElement();
if (inetAddress.isSiteLocalAddress()) { ip +=inetAddress.getHostAddress(); } } } } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); ip += "Something Wrong! " + e.toString() + "\n"; } return ip; }