public S2CPacket FetchPacket() { while (true) { if (Closed) { return(null); } if (TryFetchPacket(receiveQueue, out var packet)) { return(packet); } if (TryFetchPacket(receiveQueueLow, out packet)) { return(packet); } var dummy = new IPEndPoint(IPAddress.Any, 0); byte[] buffer; try { buffer = udpClient.Receive(ref dummy); } catch (IOException) { return(null); } catch (SocketException) { return(null); } if (dummy.Address.Equals(remoteAddress.Address) && dummy.Port != remoteAddress.Port) { continue; } packet = Ts3Crypt.GetIncommingPacket(buffer); // Invalid packet, ignore if (packet == null) { LoggerRaw.Debug("Dropping invalid packet: {0}", DebugUtil.DebugToHex(buffer)); continue; } GenerateGenerationId(packet); if (!ts3Crypt.Decrypt(packet)) { continue; } NetworkStats.LogInPacket(packet); switch (packet.PacketType) { case PacketType.Voice: case PacketType.VoiceWhisper: LoggerRawVoice.ConditionalTrace("[I] {0}", packet); break; case PacketType.Command: LoggerRaw.Debug("[I] {0}", packet); packet = ReceiveCommand(packet, receiveQueue, PacketType.Ack); break; case PacketType.CommandLow: LoggerRaw.Debug("[I] {0}", packet); packet = ReceiveCommand(packet, receiveQueueLow, PacketType.AckLow); break; case PacketType.Ping: LoggerRaw.ConditionalTrace("[I] Ping {0}", packet.PacketId); ReceivePing(packet); break; case PacketType.Pong: LoggerRaw.ConditionalTrace("[I] Pong {0}", NetUtil.N2Hushort(packet.Data, 0)); ReceivePong(packet); break; case PacketType.Ack: LoggerRaw.ConditionalDebug("[I] Acking: {0}", NetUtil.N2Hushort(packet.Data, 0)); packet = ReceiveAck(packet); break; case PacketType.AckLow: break; case PacketType.Init1: LoggerRaw.Debug("[I] InitID: {0}", packet.Data[0]); LoggerRaw.Trace("[I] {0}", packet); ReceiveInitAck(packet); break; default: throw Util.UnhandledDefault(packet.PacketType); } if (packet != null) { return(packet); } } }
public IncomingPacket FetchPacket() { while (true) { if (Closed) { return(null); } IncomingPacket packet = null; if (TryFetchPacket(receiveQueue, out packet)) { return(packet); } if (TryFetchPacket(receiveQueueLow, out packet)) { return(packet); } var dummy = new IPEndPoint(IPAddress.Any, 0); byte[] buffer; try { buffer = udpClient.Receive(ref dummy); } catch (IOException) { return(null); } catch (SocketException) { return(null); } if (dummy.Address.Equals(remoteAddress.Address) && dummy.Port != remoteAddress.Port) { continue; } packet = Ts3Crypt.GetIncommingPacket(buffer); if (IsCommandPacketSet(packet)) { continue; } if (!ts3Crypt.Decrypt(packet)) { continue; } NetworkStats.LogInPacket(packet); switch (packet.PacketType) { case PacketType.Voice: break; case PacketType.VoiceWhisper: break; case PacketType.Command: packet = ReceiveCommand(packet); break; case PacketType.CommandLow: packet = ReceiveCommand(packet); break; case PacketType.Ping: ReceivePing(packet); break; case PacketType.Pong: ReceivePong(packet); break; case PacketType.Ack: packet = ReceiveAck(packet); break; case PacketType.AckLow: break; case PacketType.Init1: ReceiveInitAck(); break; default: throw new ArgumentOutOfRangeException(); } if (packet != null) { return(packet); } } }
public IncomingPacket FetchPacket() { while (true) { if (Closed) { return(null); } if (TryFetchPacket(receiveQueue, out var packet)) { return(packet); } if (TryFetchPacket(receiveQueueLow, out packet)) { return(packet); } var dummy = new IPEndPoint(IPAddress.Any, 0); byte[] buffer; try { buffer = udpClient.Receive(ref dummy); } catch (IOException) { return(null); } catch (SocketException) { return(null); } if (dummy.Address.Equals(remoteAddress.Address) && dummy.Port != remoteAddress.Port) { continue; } packet = Ts3Crypt.GetIncommingPacket(buffer); // Invalid packet, ignore if (packet == null) { ColorDbg.WritePkgRaw(buffer, "DROPPING"); continue; } GenerateGenerationId(packet); if (!ts3Crypt.Decrypt(packet)) { continue; } NetworkStats.LogInPacket(packet); ColorDbg.WritePkgIn(packet); switch (packet.PacketType) { case PacketType.Voice: break; case PacketType.VoiceWhisper: break; case PacketType.Command: packet = ReceiveCommand(packet, receiveQueue, PacketType.Ack); break; case PacketType.CommandLow: packet = ReceiveCommand(packet, receiveQueueLow, PacketType.AckLow); break; case PacketType.Ping: ReceivePing(packet); break; case PacketType.Pong: ReceivePong(packet); break; case PacketType.Ack: packet = ReceiveAck(packet); break; case PacketType.AckLow: break; case PacketType.Init1: ReceiveInitAck(); break; default: throw Util.UnhandledDefault(packet.PacketType); } if (packet != null) { return(packet); } } }