summaryrefslogtreecommitdiff
path: root/kernel/network/tcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/network/tcp.c')
-rw-r--r--kernel/network/tcp.c6
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;