protected void CallOnRecievedPacket(byte[] Data, NetworkInterface NetInterface) { OnRecievedPacket?.Invoke(Data, NetInterface); }
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; } }