summaryrefslogtreecommitdiff
path: root/kernel/network/udp.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/network/udp.c')
-rw-r--r--kernel/network/udp.c42
1 files changed, 2 insertions, 40 deletions
diff --git a/kernel/network/udp.c b/kernel/network/udp.c
index 5aae050..4f3848a 100644
--- a/kernel/network/udp.c
+++ b/kernel/network/udp.c
@@ -20,44 +20,6 @@ void send_udp_packet(struct sockaddr_in *src, const struct sockaddr_in *dst,
}
void handle_udp(u8 src_ip[4], const u8 *payload, u32 packet_length) {
- assert(packet_length >= 8);
- // n_.* means network format(big endian)
- // h_.* means host format((probably) little endian)
- u16 n_source_port = *(u16 *)payload;
- u16 h_source_port = ntohs(n_source_port);
- (void)h_source_port;
- u16 h_dst_port = ntohs(*(u16 *)(payload + 2));
- u16 h_length = ntohs(*(u16 *)(payload + 4));
- assert(h_length == packet_length);
- u16 data_length = h_length - 8;
- const u8 *data = payload + 8;
-
- // Find the open port
- OPEN_INET_SOCKET *in_s = find_open_udp_port(htons(h_dst_port));
- assert(in_s);
- SOCKET *s = in_s->s;
- vfs_fd_t *fifo_file = s->ptr_socket_fd;
-
- // Write the sockaddr struct such that it can later be
- // given to userland if asked.
- struct sockaddr_in /*{
- sa_family_t sin_family;
- union {
- u32 s_addr;
- } sin_addr;
- u16 sin_port;
- }*/ in;
- in.sin_family = AF_INET;
- memcpy(&in.sin_addr.s_addr, src_ip, sizeof(u32));
- in.sin_port = n_source_port;
- socklen_t sock_length = sizeof(struct sockaddr_in);
-
- raw_vfs_pwrite(fifo_file, &sock_length, sizeof(sock_length), 0);
- raw_vfs_pwrite(fifo_file, &in, sizeof(in), 0);
-
- // Write the UDP payload length(not including header)
- raw_vfs_pwrite(fifo_file, &data_length, sizeof(u16), 0);
-
- // Write the UDP payload
- raw_vfs_pwrite(fifo_file, (char *)data, data_length, 0);
+ // TODO: Reimplement
+ assert(NULL);
}