Esempio n. 1
0
        /// <summary>
        /// Add packet for handling
        /// </summary>
        /// <param name="buffer">The packet buffer</param>
        /// <param name="size">The packet buffer size</param>
        public static unsafe void QueueReceivePacket(byte[] buffer, int size)
        {
            if (size < sizeof(EthernetHeader))
            {
#if NETWORK_DEBUG
                Console.WriteLine("[NET] size < sizeof(EthernetHeader)");
#endif
                return;
            }

            NetRecBuffer *netBuf = (NetRecBuffer *)Heap.Alloc(sizeof(NetRecBuffer));
            if (netBuf == null)
            {
#if NETWORK_DEBUG
                Console.WriteLine("[NET] netBuf = null");
#endif
                return;
            }

            netBuf->Size   = size;
            netBuf->Buffer = (byte *)Heap.Alloc(size);
            if (netBuf->Buffer == null)
            {
#if NETWORK_DEBUG
                Console.WriteLine("[NET] netbuf->buffer == null");
#endif
                Heap.Free(netBuf);
                return;
            }

            Memory.Memcpy(netBuf->Buffer, Util.ObjectToVoidPtr(buffer), size);
            m_recPacketQueue.Push(netBuf);
        }
Esempio n. 2
0
        /// <summary>
        /// Wait for packets and handle it!
        /// </summary>
        private static unsafe void handlePackets()
        {
            while (true)
            {
                while (m_recPacketQueue.IsEmpty())
                {
                    Tasking.Yield();
                }

                NetRecBuffer *buffer = (NetRecBuffer *)m_recPacketQueue.Pop();
#if NETWORK_DEBUG
                if (buffer == null)
                {
                    Console.WriteLine("[NET] buffer == null?!");
                    continue;
                }
#endif

                handlePacket(Util.PtrToArray(buffer->Buffer), buffer->Size);

                Heap.Free(buffer->Buffer);
                Heap.Free(buffer);
            }
        }