void Open (int port, bool tcp, OnPortRequest callback)
{
int id = (port << 8) | (tcp ? 1 : 0);
if (port > 0 && !mPorts.Contains(id) && mStatus != Status.Failure)
{
mPorts.Add(id);
* IPAddress tempLocal = Tools.localAddress;
* for (int i = 0; i < 10; i++)
* {
* if (tempLocal.ToString() != "127.0.0.1")
* {
* return;
* }
* else
* {
* tempLocal = Tools.localAddress;
* }
* }
ExtraParams xp
= new ExtraParams
(); xp.callback = callback;
xp.port = port;
xp.protocol = tcp ? ProtocolType.Tcp : ProtocolType.Udp;
xp.action = "AddPortMapping";
xp.request = "<NewRemoteHost></NewRemoteHost>\n" +
"<NewExternalPort>" + port + "</NewExternalPort>\n" +
"<NewProtocol>" + (tcp ? "TCP" : "UDP") + "</NewProtocol>\n" +
"<NewInternalPort>" + port + "</NewInternalPort>\n" +
* "<NewInternalClient>" + tempLocal + "</NewInternalClient>\n" +
"<NewEnabled>1</NewEnabled>\n" +
"<NewPortMappingDescription>" + name + "</NewPortMappingDescription>\n" +
"<NewLeaseDuration>0</NewLeaseDuration>\n";
xp
.th = new Thread
(OpenRequest
); lock (mThreads) mThreads.Add(xp.th);
xp.th.Start(xp);
}
else if (callback != null)
{
callback(this, port, tcp ? ProtocolType.Tcp : ProtocolType.Udp, false);
}
}