From ad7936dfbe4530b50266f340648a769756fff55e Mon Sep 17 00:00:00 2001 From: Matias Fontanini Date: Wed, 15 Aug 2012 08:34:32 -0300 Subject: [PATCH] Fixed bug on TCP checksum calculation. --- src/tcp.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tcp.cpp b/src/tcp.cpp index 80df053..7c758c0 100644 --- a/src/tcp.cpp +++ b/src/tcp.cpp @@ -293,7 +293,9 @@ void Tins::TCP::write_serialization(uint8_t *buffer, uint32_t total_sz, const PD const Tins::IP *ip_packet = dynamic_cast(parent); memcpy(tcp_start, &_tcp, sizeof(tcphdr)); if(!_tcp.check && ip_packet) { - uint32_t checksum = Utils::pseudoheader_checksum(ip_packet->src_addr(), ip_packet->dst_addr(), size(), Constants::IP::PROTO_TCP) + + uint32_t checksum = Utils::pseudoheader_checksum(Utils::net_to_host_l(ip_packet->src_addr()), + Utils::net_to_host_l(ip_packet->dst_addr()), + size(), Constants::IP::PROTO_TCP) + Utils::do_checksum(tcp_start, tcp_start + total_sz); while (checksum >> 16) checksum = (checksum & 0xffff) + (checksum >> 16);