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"); } } }