diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-01-26 18:30:27 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-01-26 18:30:27 +0000 |
commit | 7c320266dc9d33f0c04a7b58f1d3a7946e31e4f8 (patch) | |
tree | 980b2dcbc8bcaef464b0eabd75b001d65ed79a83 /src/exit/gnunet-daemon-exit.c | |
parent | 7d096c63663bec16534484d683c08a39a631604c (diff) | |
download | gnunet-7c320266dc9d33f0c04a7b58f1d3a7946e31e4f8.tar.gz gnunet-7c320266dc9d33f0c04a7b58f1d3a7946e31e4f8.zip |
-fix IPv6 packet construction
Diffstat (limited to 'src/exit/gnunet-daemon-exit.c')
-rw-r--r-- | src/exit/gnunet-daemon-exit.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/exit/gnunet-daemon-exit.c b/src/exit/gnunet-daemon-exit.c index 075e04aee..7e3ee05df 100644 --- a/src/exit/gnunet-daemon-exit.c +++ b/src/exit/gnunet-daemon-exit.c | |||
@@ -1329,7 +1329,7 @@ prepare_ipv4_packet (const void *payload, size_t payload_length, | |||
1329 | { | 1329 | { |
1330 | struct GNUNET_TUN_TcpHeader *pkt4_tcp = (struct GNUNET_TUN_TcpHeader *) &pkt4[1]; | 1330 | struct GNUNET_TUN_TcpHeader *pkt4_tcp = (struct GNUNET_TUN_TcpHeader *) &pkt4[1]; |
1331 | 1331 | ||
1332 | memcpy (pkt4_tcp, tcp_header, sizeof (struct GNUNET_TUN_TcpHeader)); | 1332 | *pkt4_tcp = *tcp_header; |
1333 | pkt4_tcp->spt = htons (src_address->port); | 1333 | pkt4_tcp->spt = htons (src_address->port); |
1334 | pkt4_tcp->dpt = htons (dst_address->port); | 1334 | pkt4_tcp->dpt = htons (dst_address->port); |
1335 | GNUNET_TUN_calculate_tcp4_checksum (pkt4, | 1335 | GNUNET_TUN_calculate_tcp4_checksum (pkt4, |
@@ -1406,12 +1406,11 @@ prepare_ipv6_packet (const void *payload, size_t payload_length, | |||
1406 | pkt6_udp->spt = htons (src_address->port); | 1406 | pkt6_udp->spt = htons (src_address->port); |
1407 | pkt6_udp->dpt = htons (dst_address->port); | 1407 | pkt6_udp->dpt = htons (dst_address->port); |
1408 | pkt6_udp->len = htons ((uint16_t) payload_length); | 1408 | pkt6_udp->len = htons ((uint16_t) payload_length); |
1409 | pkt6_udp->crc = 0; | ||
1410 | GNUNET_TUN_calculate_udp6_checksum (pkt6, | 1409 | GNUNET_TUN_calculate_udp6_checksum (pkt6, |
1411 | pkt6_udp, | 1410 | pkt6_udp, |
1412 | payload, | 1411 | payload, |
1413 | payload_length); | 1412 | payload_length); |
1414 | memcpy (&pkt6[1], payload, payload_length); | 1413 | memcpy (&pkt6_udp[1], payload, payload_length); |
1415 | } | 1414 | } |
1416 | break; | 1415 | break; |
1417 | case IPPROTO_TCP: | 1416 | case IPPROTO_TCP: |
@@ -1419,13 +1418,14 @@ prepare_ipv6_packet (const void *payload, size_t payload_length, | |||
1419 | struct GNUNET_TUN_TcpHeader *pkt6_tcp = (struct GNUNET_TUN_TcpHeader *) &pkt6[1]; | 1418 | struct GNUNET_TUN_TcpHeader *pkt6_tcp = (struct GNUNET_TUN_TcpHeader *) &pkt6[1]; |
1420 | 1419 | ||
1421 | /* memcpy first here as some TCP header fields are initialized this way! */ | 1420 | /* memcpy first here as some TCP header fields are initialized this way! */ |
1422 | memcpy (pkt6_tcp, payload, payload_length); | 1421 | *pkt6_tcp = *tcp_header; |
1423 | pkt6_tcp->spt = htons (src_address->port); | 1422 | pkt6_tcp->spt = htons (src_address->port); |
1424 | pkt6_tcp->dpt = htons (dst_address->port); | 1423 | pkt6_tcp->dpt = htons (dst_address->port); |
1425 | GNUNET_TUN_calculate_tcp6_checksum (pkt6, | 1424 | GNUNET_TUN_calculate_tcp6_checksum (pkt6, |
1426 | pkt6_tcp, | 1425 | pkt6_tcp, |
1427 | payload, | 1426 | payload, |
1428 | payload_length); | 1427 | payload_length); |
1428 | memcpy (&pkt6_tcp[1], payload, payload_length); | ||
1429 | } | 1429 | } |
1430 | break; | 1430 | break; |
1431 | default: | 1431 | default: |
@@ -1771,6 +1771,7 @@ receive_tcp_data (void *cls GNUNET_UNUSED, struct GNUNET_MESH_Tunnel *tunnel, | |||
1771 | GNUNET_break_op (0); | 1771 | GNUNET_break_op (0); |
1772 | return GNUNET_SYSERR; | 1772 | return GNUNET_SYSERR; |
1773 | } | 1773 | } |
1774 | |||
1774 | GNUNET_break_op (ntohl (data->reserved) == 0); | 1775 | GNUNET_break_op (ntohl (data->reserved) == 0); |
1775 | { | 1776 | { |
1776 | char buf[INET6_ADDRSTRLEN]; | 1777 | char buf[INET6_ADDRSTRLEN]; |