/// <summary> /// is called before performing a registration. /// </summary> /// <param name="Registration">Registration to be performed.</param> /// <param name="TcpPortMapped">What TCP Ports are already mapped.</param> /// <param name="UdpPortMapped">What UDP Ports are already mapped.</param> protected override void BeforeRegistration(InternetGatewayRegistration Registration, Dictionary <ushort, bool> TcpPortMapped, Dictionary <ushort, bool> UdpPortMapped) { try { do { this.tcpListener = new TcpListener(this.localAddress, Registration.LocalPort); this.tcpListener.Start(this.backlog); int i = ((IPEndPoint)this.tcpListener.LocalEndpoint).Port; if (i < 0 || i > ushort.MaxValue || TcpPortMapped.ContainsKey((ushort)i) || UdpPortMapped.ContainsKey((ushort)i)) { this.tcpListener.Stop(); this.tcpListener = null; } else { try { this.udpClient = new UdpClient(this.tcpListener.LocalEndpoint.AddressFamily); this.udpClient.Client.Bind((IPEndPoint)this.tcpListener.LocalEndpoint); Registration.LocalPort = (ushort)i; if (Registration.ExternalPort == 0 || TcpPortMapped.ContainsKey((ushort)Registration.ExternalPort) || UdpPortMapped.ContainsKey((ushort)Registration.ExternalPort)) { Registration.ExternalPort = Registration.LocalPort; } } catch (Exception) { this.tcpListener.Stop(); this.tcpListener = null; } } }while (this.tcpListener is null); this.localEndpoint = new IPEndPoint(this.localAddress, Registration.LocalPort); this.externalEndpoint = new IPEndPoint(this.externalAddress, Registration.ExternalPort); this.AcceptTcpClients(); this.BeginReceiveUdp(); } catch (Exception ex) { this.exception = ex; this.State = PeerToPeerNetworkState.Error; } }
/// <summary> /// is called before performing a registration. /// </summary> /// <param name="Registration">Registration to be performed.</param> /// <param name="TcpPortMapped">What TCP ports have already been mapped.</param> /// <param name="UdpPortMapped">What UDP ports have already been mapped.</param> protected virtual void BeforeRegistration(InternetGatewayRegistration Registration, Dictionary <ushort, bool> TcpPortMapped, Dictionary <ushort, bool> UdpPortMapped) { // Do nothing by default. }