From 1552e33c6769616ff54ce8c0e382018ea70ca70f Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Tue, 7 Jun 2016 16:19:55 -0400 Subject: [PATCH] Add helper function to create StreamIdentifier from const Stream& (#152) --- include/tins/tcp_ip/stream_identifier.h | 3 +++ src/tcp_ip/stream_identifier.cpp | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/tins/tcp_ip/stream_identifier.h b/include/tins/tcp_ip/stream_identifier.h index 96603c7..bfa85c5 100644 --- a/include/tins/tcp_ip/stream_identifier.h +++ b/include/tins/tcp_ip/stream_identifier.h @@ -45,6 +45,8 @@ class IPv6Address; namespace TCPIP { +class Stream; + /** * \brief Uniquely identifies a stream. * @@ -92,6 +94,7 @@ struct StreamIdentifier { uint16_t max_address_port; static StreamIdentifier make_identifier(const PDU& packet); + static StreamIdentifier make_identifier(const Stream& stream); static address_type serialize(IPv4Address address); static address_type serialize(const IPv6Address& address); }; diff --git a/src/tcp_ip/stream_identifier.cpp b/src/tcp_ip/stream_identifier.cpp index 6f0cf8d..bee1d13 100644 --- a/src/tcp_ip/stream_identifier.cpp +++ b/src/tcp_ip/stream_identifier.cpp @@ -39,6 +39,7 @@ #include "ip.h" #include "ipv6.h" #include "exceptions.h" +#include "tcp_ip/stream.h" using std::swap; using std::tie; @@ -109,6 +110,16 @@ StreamIdentifier StreamIdentifier::make_identifier(const PDU& packet) { } } +StreamIdentifier StreamIdentifier::make_identifier(const Stream& stream) { + if (stream.is_v6()) { + return StreamIdentifier(serialize(stream.client_addr_v6()), stream.client_port(), + serialize(stream.server_addr_v6()), stream.server_port()); + } else { + return StreamIdentifier(serialize(stream.client_addr_v4()), stream.client_port(), + serialize(stream.server_addr_v4()), stream.server_port()); + } +} + StreamIdentifier::address_type StreamIdentifier::serialize(IPv4Address address) { address_type addr; OutputMemoryStream output(addr.data(), addr.size());