mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-25 05:41:42 +00:00
97 lines
4.8 KiB
Java
97 lines
4.8 KiB
Java
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");
|
|
}
|
|
}
|
|
}
|