Esempio n. 1
0
        /// <summary>
        /// Add UDP header to packet
        /// </summary>
        /// <param name="packet">Packet structure</param>
        /// <param name="destIP">Destination IP</param>
        /// <param name="sourcePort">Source port</param>
        /// <param name="DestinationPort">Destination port</param>
        /// <returns>The pointer to the header</returns>
        private static unsafe UDPHeader *addHeader(NetPacketDesc *packet, byte[] destIP, ushort sourcePort, ushort DestinationPort)
        {
            packet->start -= (short)sizeof(UDPHeader);

            UDPHeader *header = (UDPHeader *)(packet->buffer + packet->start);

            header->SourcePort      = Byte.ReverseBytes(sourcePort);
            header->DestinationPort = Byte.ReverseBytes(DestinationPort);
            header->Length          = Byte.ReverseBytes((ushort)(packet->end - packet->start));

            header->Checksum = 0;

            return(header);
        }
Esempio n. 2
0
        /// <summary>
        /// UDP packet handler
        /// </summary>
        /// <param name="xid">Identification ID</param>
        /// <param name="buffer">Buffer pointer</param>
        /// <param name="size">Packet size</param>
        private static unsafe void handler(byte[] sourceIp, byte *buffer, uint size)
        {
            UDPHeader *header = (UDPHeader *)buffer;

            ushort destPort   = Byte.ReverseBytes(header->DestinationPort);
            ushort sourcePort = Byte.ReverseBytes(header->SourcePort);

#if UDP_DEBUG_PACKETS
            Console.Write("[UDP] Receive from ");
            Console.WriteNum(sourcePort);
            Console.Write(" to ");
            Console.WriteNum(destPort);
            Console.WriteLine("");
#endif

            m_handlers[destPort]?.Invoke(sourceIp, sourcePort, destPort, buffer + sizeof(UDPHeader), (uint)(Byte.ReverseBytes(header->Length) - sizeof(UDPHeader)));
        }