public RemoteConnectionInformation GetCoreInformation(ConnectionProtocol connectionProtocol) { var information = new RemoteConnectionInformation { LocalIpAddress = NetworkUtilities.GetLanIp() }; if ((connectionProtocol & ConnectionProtocol.Tcp) == ConnectionProtocol.Tcp) { //nothing available currently } if ((connectionProtocol & ConnectionProtocol.Udp) == ConnectionProtocol.Udp) { information.UdpConnectionInformation = new UdpConnectionInformation(); try { var ipAddress = NetworkUtilities.GetLanIp(); var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); socket.Bind(new IPEndPoint(ipAddress, 3478)); IPEndPoint ipEndPoint; if (SessionTraversalUtilitiesForNAT.IsHolePunchingPossible(socket, out ipEndPoint)) { information.UdpConnectionInformation.IsHolePunchingPossible = true; } socket.Close(); } catch (Exception) { // ignored } } return(information); }
public async Task Initialize(ConnectionProtocol connectionProtocol) { if (_remoteConnectionInformation == null) { var result = await Task.Run( () => _dtpFactory.ExecuteFunction <RemoteConnectionInformation>("GetCoreInformation", connectionProtocol)); if ((connectionProtocol & (ConnectionProtocol.Tcp | ConnectionProtocol.Udp)) != (ConnectionProtocol.Tcp | ConnectionProtocol.Udp) && _remoteConnectionInformation != null) { if ((connectionProtocol & ConnectionProtocol.Tcp) == ConnectionProtocol.Tcp) { result.UdpConnectionInformation = _remoteConnectionInformation.UdpConnectionInformation; } //else if((connectionProtocol & ConnectionProtocol.Udp) == ConnectionProtocol.Udp) // result.Tcp = asdasdasd } _remoteConnectionInformation = result; } }