From b21154a9264baf559cfb5762d635828dd5164abb Mon Sep 17 00:00:00 2001 From: Matias Fontanini Date: Sun, 10 Jan 2016 16:31:48 -0800 Subject: [PATCH] Fix sequence number addition/subtraction when wrapping around Fixes #115 --- src/tcp_stream.cpp | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/tcp_stream.cpp b/src/tcp_stream.cpp index 40a0d2e..c1895c6 100644 --- a/src/tcp_stream.cpp +++ b/src/tcp_stream.cpp @@ -38,24 +38,15 @@ namespace Tins { // As defined by RFC 1982 - 2 ^ (SERIAL_BITS - 1) static const uint32_t seq_number_diff = 2147483648U; -// As defined by RFC 1982 - 2 ^ (SERIAL_BITS) -static const uint32_t addition_modulo = numeric_limits::max(); -// Sequence number add as defined by RFC 1982 +// Adds sequence numbers uint32_t add_sequence_numbers(uint32_t seq1, uint32_t seq2) { - return (static_cast(seq1) + seq2) % addition_modulo; + return seq1 + seq2; } // Subtract sequence numbers uint32_t subtract_sequence_numbers(uint32_t seq1, uint32_t seq2) { - if (seq1 > seq2) { - return seq1 - seq2; - } - else { - // the numbers between seq2 and the maximum sequence number(including seq1) - // + the numbers between 0 and seq1 - return (numeric_limits::max() - seq2) + seq1 + 1; - } + return seq1 - seq2; } // Compares sequence numbers as defined by RFC 1982.