private void RequestCallback(IAsyncResult ar) { try { IPEndPoint receivedIpEndPoint = new IPEndPoint(IPAddress.Any, 0); if (udpc.Client == null) { return; } byte[] receiveBytes = udpc.EndReceive(ar, ref receivedIpEndPoint); UdpPacketArgs upa = new UdpPacketArgs { UdpPacket = receiveBytes }; OnUDPPacket?.Invoke(this, upa); // Restart listening for udp data udpc.BeginReceive(RequestCallback, null); } catch (Exception ex) { Debug.WriteLine(ex.Message); } }
public void Packet(byte[] datagram, NetworkInterface a) { try { OnRecievedPacket.Invoke(datagram, a); } catch { } IPv4Header Data; try { Data = new IPv4Header(datagram); } catch (Exception e) { OnCorruptPacket.BeginInvoke(datagram, a, null, null); return; } if (a.LocalIP != null) { if (Data.DestinationAddress == a.LocalIP) { } else if (a.SubnetMask != null) { if ((Data.DestinationAddress & ~a.SubnetMask) == (a.LocalIP & ~a.SubnetMask)) { OnNotForMe?.Invoke(Data, a); return; } } } switch (Data.Protocol) { case IPv4Header.ProtocolType.ICMP: handleICMPPacket(Data, a); break; case IPv4Header.ProtocolType.TCP: TCPHeader TCP; try { TCP = new TCPHeader(Data.Datagram); } catch (Exception e) { OnCorruptPacket?.Invoke(datagram, a); break; } OnTCPPacket?.Invoke(Data, TCP, TCP.DestinationPort, a); break; case IPv4Header.ProtocolType.UDP: UDPHeader UDP; try { UDP = new UDPHeader(Data.Datagram); } catch (Exception e) { OnCorruptPacket?.Invoke(datagram, a); break; } OnUDPPacket?.Invoke(Data, UDP, UDP.DestinationPort, a); break; default: break; } }