diff options
Diffstat (limited to 'kernel/network/udp.c')
-rw-r--r-- | kernel/network/udp.c | 42 |
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); } |