diff options
author | Anton Kling <anton@kling.gg> | 2023-11-22 21:58:30 +0100 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2023-11-22 21:58:30 +0100 |
commit | ec91e81a4fcfd7ee6bc4150f06d8740e82f808da (patch) | |
tree | 6cad6ef6dc775d56758bc4da4a2bddd13cdec35f /kernel/network/tcp.c | |
parent | 90e4da9473ee2fc6419b7821274ec102219551f9 (diff) |
Networking: Split network packets if they are too large
Diffstat (limited to 'kernel/network/tcp.c')
-rw-r--r-- | kernel/network/tcp.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/network/tcp.c b/kernel/network/tcp.c index 14bd0cb..e4b0891 100644 --- a/kernel/network/tcp.c +++ b/kernel/network/tcp.c @@ -113,6 +113,12 @@ void tcp_close_connection(struct INCOMING_TCP_CONNECTION *inc) { void send_tcp_packet(struct INCOMING_TCP_CONNECTION *inc, u8 *payload, u16 payload_length) { + if (payload_length > 1500 - 20 - sizeof(struct TCP_HEADER)) { + send_tcp_packet(inc, payload, 1500 - 20 - sizeof(struct TCP_HEADER)); + payload_length -= 1500 - 20 - sizeof(struct TCP_HEADER); + payload += 1500 - 20 - sizeof(struct TCP_HEADER); + return send_tcp_packet(inc, payload, payload_length); + } struct TCP_HEADER header = {0}; header.src_port = htons(inc->dst_port); header.dst_port = inc->n_port; |