internal void SendMessage <T>(MessageType mt, T message) { lock (_ssl) { if (mt != MessageType.Ping && mt != MessageType.UDPTunnel) { Debug.Log("Sending " + mt + " message"); } //_writer.Write(IPAddress.HostToNetworkOrder((Int16) mt)); //Serializer.SerializeWithLengthPrefix(_ssl, message, PrefixStyle.Fixed32BigEndian); Int16 messageType = (Int16)mt; // UDP Tunnels have their own way in which they handle serialization if (mt == MessageType.UDPTunnel) { UDPTunnel udpTunnel = message as UDPTunnel; Int32 messageSize = (Int32)udpTunnel.packet.Length; _writer.Write(IPAddress.HostToNetworkOrder(messageType)); _writer.Write(IPAddress.HostToNetworkOrder(messageSize)); _writer.Write(udpTunnel.packet); } else { MemoryStream messageStream = new MemoryStream(); Serializer.NonGeneric.Serialize(messageStream, message); Int32 messageSize = (Int32)messageStream.Length; _writer.Write(IPAddress.HostToNetworkOrder(messageType)); _writer.Write(IPAddress.HostToNetworkOrder(messageSize)); messageStream.Position = 0; _writer.Write(messageStream.ToArray()); } /* * StringBuilder sb = new StringBuilder(); * byte[] msgArray = messageStream.ToArray(); * for (int i = 0; i < msgArray.Length; i++) * { * sb.Append(msgArray[i]); * sb.Append(","); * } * Debug.Log(sb.ToString()); */ _writer.Flush(); } }
internal void SendVoicePacket(byte[] voicePacket) { if (!_isConnected) { Debug.LogError("Not yet connected"); return; } try { if (_mumbleClient.UseLocalLoopBack) { UnpackOpusVoicePacket(voicePacket, true); } //Debug.Log("Sending UDP packet! Length = " + voicePacket.Length); if (_useTcp) { //Debug.Log("Using TCP!"); UDPTunnel udpMsg = new UDPTunnel { Packet = voicePacket }; _tcpConnection.SendMessage(MessageType.UDPTunnel, udpMsg); return; } else { byte[] encrypted = _cryptState.Encrypt(voicePacket, voicePacket.Length); lock (_sendLock) { _udpClient.Send(encrypted, encrypted.Length); } } NumPacketsSent++; }catch (Exception e) { Debug.LogError("Error sending packet: " + e); } }
static int Main(string[] args) { Settings settings = new Settings(); settings.isServer = false; settings.ipEndpointStr = "minecraft1.52k.de:25560"; settings.listenPort = 0; int serverCount = 0; foreach (string arg in args) { if (serverCount == 2) { settings.ipEndpointStr = arg; } if (serverCount == 1) { settings.listenPort = Int32.Parse(arg); } if (serverCount > 0) { serverCount--; continue; } if (arg == "--server") { settings.isServer = true; serverCount = 2; } if (arg == "--ipv6") { settings.ipv4only = false; settings.ipv6only = true; } if (arg == "--ipv4") { settings.ipv4only = true; settings.ipv6only = false; } } //ParseIPEndpoint string addPart = settings.ipEndpointStr.Substring(0, settings.ipEndpointStr.LastIndexOf(":")); //Trim [] parts; if (addPart.Contains("[")) { addPart.Substring(1, addPart.Length - 2); } if (!IPAddress.TryParse(addPart, out IPAddress ipAddr)) { IPAddress[] addrs = null; try { addrs = Dns.GetHostAddresses(addPart); } catch (Exception e) { Console.WriteLine("DNS error: " + e.Message); return(-1); } foreach (IPAddress testIP in addrs) { if (!settings.ipv4only && !settings.ipv6only) { ipAddr = testIP; break; } if (settings.ipv4only && testIP.AddressFamily == AddressFamily.InterNetwork) { ipAddr = testIP; break; } if (settings.ipv6only && testIP.AddressFamily == AddressFamily.InterNetworkV6) { ipAddr = testIP; break; } } } if (ipAddr == null) { Console.WriteLine("DNS returned no usable results"); return(-2); } string portPart = settings.ipEndpointStr.Substring(settings.ipEndpointStr.LastIndexOf(":") + 1); settings.ipEndpoint = new IPEndPoint(ipAddr, Int32.Parse(portPart)); if (settings.listenPort == 0) { settings.listenPort = Int32.Parse(portPart); } //Init running = true; NetworkHandler networkHandler = new NetworkHandler(); UDPTunnel udpt = new UDPTunnel(networkHandler, settings); if (settings.isServer) { TunnelServer ts = new TunnelServer(networkHandler, settings); Console.WriteLine("Press Ctrl+C key to quit"); Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs e) => { running = false; ts.Shutdown(); udpt.Shutdown(); }; DisplayMain(networkHandler); } else { TunnelClient tc = new TunnelClient(networkHandler, settings); Console.WriteLine("Press Ctrl+C to quit"); Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs e) => { running = false; tc.Shutdown(); udpt.Shutdown(); }; DisplayMain(networkHandler); } return(0); }
public void cleanUp(UDPTunnel udpTunnel) { udpTunnel.close(); }