You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
4.8 KiB
97 lines
4.8 KiB
import java.nio.ByteBuffer; |
|
import java.nio.IntBuffer; |
|
|
|
import fr.free.miniupnp.*; |
|
|
|
/** |
|
* |
|
* @author syuu |
|
*/ |
|
public class JavaBridgeTest { |
|
public static void main(String[] args) { |
|
int UPNP_DELAY = 2000; |
|
MiniupnpcLibrary miniupnpc = MiniupnpcLibrary.INSTANCE; |
|
UPNPDev devlist = null; |
|
UPNPUrls urls = new UPNPUrls(); |
|
IGDdatas data = new IGDdatas(); |
|
ByteBuffer lanaddr = ByteBuffer.allocate(16); |
|
ByteBuffer intClient = ByteBuffer.allocate(16); |
|
ByteBuffer intPort = ByteBuffer.allocate(6); |
|
ByteBuffer desc = ByteBuffer.allocate(80); |
|
ByteBuffer enabled = ByteBuffer.allocate(4); |
|
ByteBuffer leaseDuration = ByteBuffer.allocate(16); |
|
int ret; |
|
int i; |
|
|
|
if(args.length < 2) { |
|
System.err.println("Usage : java [...] JavaBridgeTest port protocol"); |
|
System.out.println(" port is numeric, protocol is TCP or UDP"); |
|
return; |
|
} |
|
|
|
devlist = miniupnpc.upnpDiscover(UPNP_DELAY, (String) null, (String) null, 0, 0, (byte)2, IntBuffer.allocate(1)); |
|
if (devlist != null) { |
|
System.out.println("List of UPNP devices found on the network :"); |
|
for (UPNPDev device = devlist; device != null; device = device.pNext) { |
|
System.out.println("desc: " + device.descURL.getString(0) + " st: " + device.st.getString(0)); |
|
} |
|
if ((i = miniupnpc.UPNP_GetValidIGD(devlist, urls, data, lanaddr, 16)) != 0) { |
|
switch (i) { |
|
case 1: |
|
System.out.println("Found valid IGD : " + urls.controlURL.getString(0)); |
|
break; |
|
case 2: |
|
System.out.println("Found a (not connected?) IGD : " + urls.controlURL.getString(0)); |
|
System.out.println("Trying to continue anyway"); |
|
break; |
|
case 3: |
|
System.out.println("UPnP device found. Is it an IGD ? : " + urls.controlURL.getString(0)); |
|
System.out.println("Trying to continue anyway"); |
|
break; |
|
default: |
|
System.out.println("Found device (igd ?) : " + urls.controlURL.getString(0)); |
|
System.out.println("Trying to continue anyway"); |
|
|
|
} |
|
System.out.println("Local LAN ip address : " + new String(lanaddr.array())); |
|
ByteBuffer externalAddress = ByteBuffer.allocate(16); |
|
miniupnpc.UPNP_GetExternalIPAddress(urls.controlURL.getString(0), |
|
new String(data.first.servicetype), externalAddress); |
|
System.out.println("ExternalIPAddress = " + new String(externalAddress.array())); |
|
ret = miniupnpc.UPNP_AddPortMapping( |
|
urls.controlURL.getString(0), // controlURL |
|
new String(data.first.servicetype), // servicetype |
|
args[0], // external Port |
|
args[0], // internal Port |
|
new String(lanaddr.array()), // internal client |
|
"added via miniupnpc/JAVA !", // description |
|
args[1], // protocol UDP or TCP |
|
null, // remote host (useless) |
|
"0"); // leaseDuration |
|
if (ret != MiniupnpcLibrary.UPNPCOMMAND_SUCCESS) |
|
System.out.println("AddPortMapping() failed with code " + ret); |
|
ret = miniupnpc.UPNP_GetSpecificPortMappingEntry( |
|
urls.controlURL.getString(0), new String(data.first.servicetype), |
|
args[0], args[1], null, intClient, intPort, |
|
desc, enabled, leaseDuration); |
|
if (ret != MiniupnpcLibrary.UPNPCOMMAND_SUCCESS) |
|
System.out.println("GetSpecificPortMappingEntry() failed with code " + ret); |
|
System.out.println("InternalIP:Port = " + |
|
new String(intClient.array()) + ":" + new String(intPort.array()) + |
|
" (" + new String(desc.array()) + ")"); |
|
ret = miniupnpc.UPNP_DeletePortMapping( |
|
urls.controlURL.getString(0), |
|
new String(data.first.servicetype), |
|
args[0], args[1], null); |
|
if (ret != MiniupnpcLibrary.UPNPCOMMAND_SUCCESS) |
|
System.out.println("DelPortMapping() failed with code " + ret); |
|
miniupnpc.FreeUPNPUrls(urls); |
|
} else { |
|
System.out.println("No valid UPNP Internet Gateway Device found."); |
|
} |
|
miniupnpc.freeUPNPDevlist(devlist); |
|
} else { |
|
System.out.println("No IGD UPnP Device found on the network !\n"); |
|
} |
|
} |
|
}
|
|
|