mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-02 16:33:13 +00:00
Kernel: Start fleshing out an UDP implementation.
This commit is contained in:
parent
562663df7c
commit
b59d588c04
Notes:
sideshowbarker
2024-07-19 15:04:24 +09:00
Author: https://github.com/awesomekling
Commit: b59d588c04
6 changed files with 100 additions and 4 deletions
|
@ -4,9 +4,12 @@
|
|||
#include <Kernel/NetworkAdapter.h>
|
||||
#include <Kernel/IPv4.h>
|
||||
#include <Kernel/ICMP.h>
|
||||
#include <Kernel/UDP.h>
|
||||
#include <Kernel/ARP.h>
|
||||
#include <LibC/errno_numbers.h>
|
||||
|
||||
#define IPV4_SOCKET_DEBUG
|
||||
|
||||
Lockable<HashTable<IPv4Socket*>>& IPv4Socket::all_sockets()
|
||||
{
|
||||
static Lockable<HashTable<IPv4Socket*>>* s_table;
|
||||
|
@ -173,9 +176,22 @@ ssize_t IPv4Socket::recvfrom(void* buffer, size_t buffer_length, int flags, cons
|
|||
}
|
||||
ASSERT(!packet_buffer.is_null());
|
||||
auto& ipv4_packet = *(const IPv4Packet*)(packet_buffer.pointer());
|
||||
ASSERT(buffer_length >= ipv4_packet.payload_size());
|
||||
memcpy(buffer, ipv4_packet.payload(), ipv4_packet.payload_size());
|
||||
return ipv4_packet.payload_size();
|
||||
|
||||
if (type() == SOCK_RAW) {
|
||||
ASSERT(buffer_length >= ipv4_packet.payload_size());
|
||||
memcpy(buffer, ipv4_packet.payload(), ipv4_packet.payload_size());
|
||||
return ipv4_packet.payload_size();
|
||||
}
|
||||
|
||||
if (type() == SOCK_DGRAM) {
|
||||
auto& udp_packet = *static_cast<const UDPPacket*>(ipv4_packet.payload());
|
||||
ASSERT(udp_packet.length() >= sizeof(UDPPacket)); // FIXME: This should be rejected earlier.
|
||||
ASSERT(buffer_length >= (udp_packet.length() - sizeof(UDPPacket)));
|
||||
memcpy(buffer, udp_packet.payload(), udp_packet.length() - sizeof(UDPPacket));
|
||||
return udp_packet.length() - sizeof(UDPPacket);
|
||||
}
|
||||
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
|
||||
void IPv4Socket::did_receive(ByteBuffer&& packet)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue