summaryrefslogtreecommitdiff
path: root/src/exit/gnunet-daemon-exit.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-01-26 18:30:27 +0000
committerChristian Grothoff <christian@grothoff.org>2012-01-26 18:30:27 +0000
commit7c320266dc9d33f0c04a7b58f1d3a7946e31e4f8 (patch)
tree980b2dcbc8bcaef464b0eabd75b001d65ed79a83 /src/exit/gnunet-daemon-exit.c
parent7d096c63663bec16534484d683c08a39a631604c (diff)
downloadgnunet-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.c9
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];