From 15a353c12301752c9ff48b78fd556236d171fd62 Mon Sep 17 00:00:00 2001 From: Matias Fontanini Date: Sat, 29 Apr 2017 09:53:33 -0700 Subject: [PATCH] Remove parent parameter from write_serialization This is no longer needed as each PDU knows its parent PDU already --- include/tins/arp.h | 2 +- include/tins/bootp.h | 2 +- include/tins/dhcp.h | 2 +- include/tins/dhcpv6.h | 2 +- include/tins/dns.h | 2 +- include/tins/dot11/dot11_base.h | 2 +- include/tins/dot1q.h | 2 +- include/tins/dot3.h | 2 +- include/tins/eapol.h | 8 +------- include/tins/ethernetII.h | 2 +- include/tins/icmp.h | 11 ++--------- include/tins/icmpv6.h | 2 +- include/tins/ip.h | 4 ++-- include/tins/ipsec.h | 4 ++-- include/tins/ipv6.h | 2 +- include/tins/llc.h | 2 +- include/tins/loopback.h | 2 +- include/tins/mpls.h | 2 +- include/tins/pdu.h | 10 +++------- include/tins/pdu_cacher.h | 2 +- include/tins/pktap.h | 2 +- include/tins/ppi.h | 2 +- include/tins/pppoe.h | 2 +- include/tins/radiotap.h | 2 +- include/tins/rawpdu.h | 2 +- include/tins/sll.h | 2 +- include/tins/snap.h | 2 +- include/tins/stp.h | 2 +- include/tins/tcp.h | 2 +- include/tins/udp.h | 2 +- src/arp.cpp | 2 +- src/bootp.cpp | 2 +- src/dhcp.cpp | 4 ++-- src/dhcpv6.cpp | 2 +- src/dns.cpp | 2 +- src/dot11/dot11_base.cpp | 2 +- src/dot1q.cpp | 2 +- src/dot3.cpp | 2 +- src/eapol.cpp | 2 +- src/ethernetII.cpp | 2 +- src/icmp.cpp | 2 +- src/icmpv6.cpp | 4 ++-- src/ip.cpp | 10 ++++------ src/ipsec.cpp | 4 ++-- src/ipv6.cpp | 2 +- src/llc.cpp | 2 +- src/loopback.cpp | 2 +- src/mpls.cpp | 4 ++-- src/pdu.cpp | 12 ++++++------ src/pktap.cpp | 2 +- src/ppi.cpp | 2 +- src/pppoe.cpp | 2 +- src/radiotap.cpp | 2 +- src/rawpdu.cpp | 2 +- src/sll.cpp | 2 +- src/snap.cpp | 2 +- src/stp.cpp | 2 +- src/tcp.cpp | 3 ++- src/udp.cpp | 3 ++- tests/src/allocators_test.cpp | 3 +-- 60 files changed, 79 insertions(+), 97 deletions(-) diff --git a/include/tins/arp.h b/include/tins/arp.h index 159500c..f6a17c0 100644 --- a/include/tins/arp.h +++ b/include/tins/arp.h @@ -334,7 +334,7 @@ private: uint32_t target_ip_address; } TINS_END_PACK; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); arp_header header_; }; diff --git a/include/tins/bootp.h b/include/tins/bootp.h index 7d27175..18b3cb5 100644 --- a/include/tins/bootp.h +++ b/include/tins/bootp.h @@ -332,7 +332,7 @@ protected: */ vend_type& vend() { return vend_; } - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); /** * Struct that represents the Bootp datagram. diff --git a/include/tins/dhcp.h b/include/tins/dhcp.h index ea8aec5..d60da12 100644 --- a/include/tins/dhcp.h +++ b/include/tins/dhcp.h @@ -509,7 +509,7 @@ public: private: static const uint32_t MAX_DHCP_SIZE; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); template T search_and_convert(OptionTypes opt) const { diff --git a/include/tins/dhcpv6.h b/include/tins/dhcpv6.h index 9acb438..9c79293 100644 --- a/include/tins/dhcpv6.h +++ b/include/tins/dhcpv6.h @@ -890,7 +890,7 @@ public: return new DHCPv6(*this); } private: - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *); + void write_serialization(uint8_t* buffer, uint32_t total_sz); void write_option(const option& option, Memory::OutputMemoryStream& stream) const; options_type::const_iterator search_option_iterator(OptionTypes type) const; options_type::iterator search_option_iterator(OptionTypes type); diff --git a/include/tins/dns.h b/include/tins/dns.h index 7dcd77b..37eb0e0 100644 --- a/include/tins/dns.h +++ b/include/tins/dns.h @@ -1030,7 +1030,7 @@ private: uint8_t* update_dname(uint8_t* ptr, uint32_t threshold, uint32_t offset); static void inline_convert_v4(uint32_t value, char* output); static bool contains_dname(uint16_t type); - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); void add_record(const resource& resource, const sections_type& sections); dns_header header_; diff --git a/include/tins/dot11/dot11_base.h b/include/tins/dot11/dot11_base.h index aa4d38e..5d8cf4a 100644 --- a/include/tins/dot11/dot11_base.h +++ b/include/tins/dot11/dot11_base.h @@ -554,7 +554,7 @@ private: Dot11(const dot11_header* header_ptr); void internal_add_option(const option& opt); - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); options_type::const_iterator search_option_iterator(OptionTypes type) const; options_type::iterator search_option_iterator(OptionTypes type); diff --git a/include/tins/dot1q.h b/include/tins/dot1q.h index 7499d04..0e7a08b 100644 --- a/include/tins/dot1q.h +++ b/include/tins/dot1q.h @@ -197,7 +197,7 @@ public: */ bool matches_response(const uint8_t* ptr, uint32_t total_sz) const; private: - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); TINS_BEGIN_PACK struct dot1q_header { diff --git a/include/tins/dot3.h b/include/tins/dot3.h index 1c6f248..81c75b3 100644 --- a/include/tins/dot3.h +++ b/include/tins/dot3.h @@ -199,7 +199,7 @@ private: uint16_t length; } TINS_END_PACK; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); dot3_header header_; }; diff --git a/include/tins/eapol.h b/include/tins/eapol.h index a24ad3a..0a2ce5f 100644 --- a/include/tins/eapol.h +++ b/include/tins/eapol.h @@ -185,13 +185,7 @@ protected: */ virtual void write_body(Memory::OutputMemoryStream& stream) = 0; private: - /** - * \brief Serialices this EAPOL PDU. - * \param buffer The buffer in which the PDU will be serialized. - * \param total_sz The size available in the buffer. - * \param parent The PDU that's one level below this one on the stack. - */ - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); eapol_header header_; }; diff --git a/include/tins/ethernetII.h b/include/tins/ethernetII.h index 8fda537..ddea06a 100644 --- a/include/tins/ethernetII.h +++ b/include/tins/ethernetII.h @@ -208,7 +208,7 @@ private: uint16_t payload_type; } TINS_END_PACK; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); ethernet_header header_; }; diff --git a/include/tins/icmp.h b/include/tins/icmp.h index c357a37..9249a3a 100644 --- a/include/tins/icmp.h +++ b/include/tins/icmp.h @@ -493,15 +493,8 @@ private: } un; } TINS_END_PACK; - void checksum(uint16_t new_check); - - /** \brief Serialices this ICMP PDU. - * \param buffer The buffer in which the PDU will be serialized. - * \param total_sz The size available in the buffer. - * \param parent The PDU that's one level below this one on the stack. - */ - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); - + void checksum(uint16_t new_check); + void write_serialization(uint8_t* buffer, uint32_t total_sz); uint32_t get_adjusted_inner_pdu_size() const; void try_parse_extensions(Memory::InputMemoryStream& stream); bool are_extensions_allowed() const; diff --git a/include/tins/icmpv6.h b/include/tins/icmpv6.h index 9cb3dad..85a4122 100644 --- a/include/tins/icmpv6.h +++ b/include/tins/icmpv6.h @@ -1559,7 +1559,7 @@ private: } TINS_END_PACK; void internal_add_option(const option& option); - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); bool has_options() const; void write_option(const option& opt, Memory::OutputMemoryStream& stream); void parse_options(Memory::InputMemoryStream& stream); diff --git a/include/tins/ip.h b/include/tins/ip.h index f951fca..94fc18b 100644 --- a/include/tins/ip.h +++ b/include/tins/ip.h @@ -756,10 +756,10 @@ private: void head_len(small_uint<4> new_head_len); void tot_len(uint16_t new_tot_len); - void prepare_for_serialize(const PDU* parent); + void prepare_for_serialize(); void internal_add_option(const option& option); void init_ip_fields(); - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); void write_option(const option& opt, Memory::OutputMemoryStream& stream); void add_route_option(option_identifier id, const generic_route_option_type& data); generic_route_option_type search_route_option(option_identifier id) const; diff --git a/include/tins/ipsec.h b/include/tins/ipsec.h index 6eebd8b..b4ca2a6 100644 --- a/include/tins/ipsec.h +++ b/include/tins/ipsec.h @@ -168,7 +168,7 @@ private: uint32_t spi, seq_number; }; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *); + void write_serialization(uint8_t* buffer, uint32_t total_sz); ipsec_header header_; byte_array icv_; @@ -258,7 +258,7 @@ private: uint32_t spi, seq_number; }; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *); + void write_serialization(uint8_t* buffer, uint32_t total_sz); ipsec_header header_; }; diff --git a/include/tins/ipv6.h b/include/tins/ipv6.h index 7998467..5b951f7 100644 --- a/include/tins/ipv6.h +++ b/include/tins/ipv6.h @@ -320,7 +320,7 @@ public: */ const ext_header* search_header(ExtensionHeader id) const; private: - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); void set_last_next_header(uint8_t value); static void write_header(const ext_header& header, Memory::OutputMemoryStream& stream); static bool is_extension_header(uint8_t header_id); diff --git a/include/tins/llc.h b/include/tins/llc.h index e7c73a3..98bc7e4 100644 --- a/include/tins/llc.h +++ b/include/tins/llc.h @@ -401,7 +401,7 @@ private: typedef std::vector field_type; typedef std::list field_list; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); llchdr header_; uint8_t control_field_length_; diff --git a/include/tins/loopback.h b/include/tins/loopback.h index f242486..3b5d541 100644 --- a/include/tins/loopback.h +++ b/include/tins/loopback.h @@ -117,7 +117,7 @@ public: void send(PacketSender& sender, const NetworkInterface& iface); #endif // BSD private: - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); uint32_t family_; }; diff --git a/include/tins/mpls.h b/include/tins/mpls.h index 9da8419..11c056d 100644 --- a/include/tins/mpls.h +++ b/include/tins/mpls.h @@ -147,7 +147,7 @@ private: uint8_t ttl; } TINS_END_PACK; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); mpls_header header_; }; diff --git a/include/tins/pdu.h b/include/tins/pdu.h index bde9a1b..1e79467 100644 --- a/include/tins/pdu.h +++ b/include/tins/pdu.h @@ -494,19 +494,16 @@ protected: * is calculated. * * By default, this method does nothing - * - * \param parent The parent PDU. */ - virtual void prepare_for_serialize(const PDU* parent); + virtual void prepare_for_serialize(); /** * \brief Serializes this PDU and propagates this action to child PDUs. * * \param buffer The buffer in which to store this PDU's serialization. * \param total_sz The total size of the buffer. - * \param parent The parent PDU. Will be 0 if there's the parent does not exist. */ - void serialize(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void serialize(uint8_t* buffer, uint32_t total_sz); /** * \brief Serializes this TCP PDU. @@ -515,9 +512,8 @@ protected: * serialization. * \param buffer The buffer in which the PDU will be serialized. * \param total_sz The size available in the buffer. - * \param parent The PDU that's one level below this one on the stack. Might be 0. */ - virtual void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent) = 0; + virtual void write_serialization(uint8_t* buffer, uint32_t total_sz) = 0; private: void parent_pdu(PDU* parent); diff --git a/include/tins/pdu_cacher.h b/include/tins/pdu_cacher.h index ebab9b1..9e27c71 100644 --- a/include/tins/pdu_cacher.h +++ b/include/tins/pdu_cacher.h @@ -144,7 +144,7 @@ public: return cached_.pdu_type(); } private: - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent) { + void write_serialization(uint8_t* buffer, uint32_t total_sz) { if (cached_serialization_.size() != total_sz) { cached_serialization_ = cached_.serialize(); } diff --git a/include/tins/pktap.h b/include/tins/pktap.h index 52f9c25..88f2216 100644 --- a/include/tins/pktap.h +++ b/include/tins/pktap.h @@ -107,7 +107,7 @@ private: uint8_t ecommand[20]; }; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); pktap_header header_; }; diff --git a/include/tins/ppi.h b/include/tins/ppi.h index 96dd734..8f6934e 100644 --- a/include/tins/ppi.h +++ b/include/tins/ppi.h @@ -125,7 +125,7 @@ public: return new PPI(*this); } private: - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *); + void write_serialization(uint8_t* buffer, uint32_t total_sz); void parse_80211(const uint8_t* buffer, uint32_t total_sz); struct ppi_header { diff --git a/include/tins/pppoe.h b/include/tins/pppoe.h index 75a2d58..42842a0 100644 --- a/include/tins/pppoe.h +++ b/include/tins/pppoe.h @@ -390,7 +390,7 @@ public: */ std::string generic_error() const; private: - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *); + void write_serialization(uint8_t* buffer, uint32_t total_sz); template void add_tag_iterable(TagTypes id, const T& data) { diff --git a/include/tins/radiotap.h b/include/tins/radiotap.h index 61bf599..c1a9c6a 100644 --- a/include/tins/radiotap.h +++ b/include/tins/radiotap.h @@ -486,7 +486,7 @@ private: } TINS_END_PACK; void init(); - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); uint32_t find_extra_flag_fields_size(const uint8_t* buffer, uint32_t total_sz); template diff --git a/include/tins/rawpdu.h b/include/tins/rawpdu.h index fde9de6..872b29c 100644 --- a/include/tins/rawpdu.h +++ b/include/tins/rawpdu.h @@ -201,7 +201,7 @@ public: return new RawPDU(*this); } private: - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); payload_type payload_; }; diff --git a/include/tins/sll.h b/include/tins/sll.h index 0f05365..62a7444 100644 --- a/include/tins/sll.h +++ b/include/tins/sll.h @@ -174,7 +174,7 @@ private: uint16_t protocol; } TINS_END_PACK; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *); + void write_serialization(uint8_t* buffer, uint32_t total_sz); sll_header header_; }; diff --git a/include/tins/snap.h b/include/tins/snap.h index 18740e5..5687a7d 100644 --- a/include/tins/snap.h +++ b/include/tins/snap.h @@ -177,7 +177,7 @@ private: uint16_t eth_type; } TINS_END_PACK; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); snap_header snap_; }; diff --git a/include/tins/stp.h b/include/tins/stp.h index f927855..45ef83d 100644 --- a/include/tins/stp.h +++ b/include/tins/stp.h @@ -305,7 +305,7 @@ private: static bpdu_id_type convert(const pvt_bpdu_id& id); static pvt_bpdu_id convert(const bpdu_id_type& id); - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); stp_header header_; }; diff --git a/include/tins/tcp.h b/include/tins/tcp.h index 257caa5..68d3f85 100644 --- a/include/tins/tcp.h +++ b/include/tins/tcp.h @@ -610,7 +610,7 @@ private: } void internal_add_option(const option& option); - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); void checksum(uint16_t new_check); void update_options_size(); options_type::const_iterator search_option_iterator(OptionTypes type) const; diff --git a/include/tins/udp.h b/include/tins/udp.h index 041f1d5..aaabe7b 100644 --- a/include/tins/udp.h +++ b/include/tins/udp.h @@ -191,7 +191,7 @@ private: uint16_t check; } TINS_END_PACK; - void write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent); + void write_serialization(uint8_t* buffer, uint32_t total_sz); udp_header header_; }; diff --git a/src/arp.cpp b/src/arp.cpp index e4ed5e2..462aad9 100644 --- a/src/arp.cpp +++ b/src/arp.cpp @@ -113,7 +113,7 @@ uint32_t ARP::header_size() const { return sizeof(header_); } -void ARP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void ARP::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); stream.write(header_); } diff --git a/src/bootp.cpp b/src/bootp.cpp index 0611ec8..666ed63 100644 --- a/src/bootp.cpp +++ b/src/bootp.cpp @@ -115,7 +115,7 @@ void BootP::vend(const vend_type& newvend_) { vend_ = newvend_; } -void BootP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* /*parent*/) { +void BootP::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); stream.write(bootp_); stream.write(vend_.begin(), vend_.end()); diff --git a/src/dhcp.cpp b/src/dhcp.cpp index 99e132a..e5cd5cb 100644 --- a/src/dhcp.cpp +++ b/src/dhcp.cpp @@ -247,7 +247,7 @@ uint32_t DHCP::header_size() const { return static_cast(BootP::header_size() - vend().size() + size_); } -void DHCP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent) { +void DHCP::write_serialization(uint8_t* buffer, uint32_t total_sz) { if (size_) { vend_type& result = BootP::vend(); result.resize(size_); @@ -261,7 +261,7 @@ void DHCP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* pa stream.write(it->data_ptr(), it->data_size()); } } - BootP::write_serialization(buffer, total_sz, parent); + BootP::write_serialization(buffer, total_sz); } } // Tins diff --git a/src/dhcpv6.cpp b/src/dhcpv6.cpp index db2e4b9..4354a4c 100644 --- a/src/dhcpv6.cpp +++ b/src/dhcpv6.cpp @@ -161,7 +161,7 @@ bool DHCPv6::matches_response(const uint8_t* ptr, uint32_t total_sz) const { return false; } -void DHCPv6::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void DHCPv6::write_serialization(uint8_t* buffer, uint32_t total_sz) { const uint32_t required_size = is_relay_message() ? 2 : 4; OutputMemoryStream stream(buffer, total_sz); stream.write(header_data_, required_size); diff --git a/src/dns.cpp b/src/dns.cpp index 48cb06f..b2bd97d 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -386,7 +386,7 @@ uint32_t DNS::compose_name(const uint8_t* ptr, char* out_ptr) const { return end_ptr - start_ptr; } -void DNS::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* /*parent*/) { +void DNS::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); stream.write(header_); stream.write(records_data_.begin(), records_data_.end()); diff --git a/src/dot11/dot11_base.cpp b/src/dot11/dot11_base.cpp index 82765eb..cc71d47 100644 --- a/src/dot11/dot11_base.cpp +++ b/src/dot11/dot11_base.cpp @@ -213,7 +213,7 @@ void Dot11::send(PacketSender& sender, const NetworkInterface& iface) { } #endif // _WIN32 -void Dot11::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* /*parent*/) { +void Dot11::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); stream.write(header_); write_ext_header(stream); diff --git a/src/dot1q.cpp b/src/dot1q.cpp index 2a3c74a..d561957 100644 --- a/src/dot1q.cpp +++ b/src/dot1q.cpp @@ -105,7 +105,7 @@ uint32_t Dot1Q::trailer_size() const { } } -void Dot1Q::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void Dot1Q::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); if (inner_pdu()) { Constants::Ethernet::e flag; diff --git a/src/dot3.cpp b/src/dot3.cpp index ec0113b..4d53d02 100644 --- a/src/dot3.cpp +++ b/src/dot3.cpp @@ -134,7 +134,7 @@ bool Dot3::matches_response(const uint8_t* ptr, uint32_t total_sz) const { return false; } -void Dot3::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* /*parent*/) { +void Dot3::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); header_.length = Endian::host_to_be(size() - sizeof(header_)); stream.write(header_); diff --git a/src/eapol.cpp b/src/eapol.cpp index ae8ebe1..1401be2 100644 --- a/src/eapol.cpp +++ b/src/eapol.cpp @@ -106,7 +106,7 @@ void EAPOL::type(uint8_t new_type) { header_.type = new_type; } -void EAPOL::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void EAPOL::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); length(total_sz - 4); stream.write(header_); diff --git a/src/ethernetII.cpp b/src/ethernetII.cpp index d5a19e8..dc81c67 100644 --- a/src/ethernetII.cpp +++ b/src/ethernetII.cpp @@ -161,7 +161,7 @@ bool EthernetII::matches_response(const uint8_t* ptr, uint32_t total_sz) const { return false; } -void EthernetII::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* /*parent*/) { +void EthernetII::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); if (inner_pdu()) { Constants::Ethernet::e flag; diff --git a/src/icmp.cpp b/src/icmp.cpp index 63bb299..4aa9e68 100644 --- a/src/icmp.cpp +++ b/src/icmp.cpp @@ -216,7 +216,7 @@ void ICMP::use_length_field(bool value) { header_.un.rfc4884.length = value ? 1 : 0; } -void ICMP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void ICMP::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); // If extensions are allowed and we have to set the length field diff --git a/src/icmpv6.cpp b/src/icmpv6.cpp index 0dc4d76..ceeb909 100644 --- a/src/icmpv6.cpp +++ b/src/icmpv6.cpp @@ -281,7 +281,7 @@ bool ICMPv6::matches_response(const uint8_t* ptr, uint32_t total_sz) const { return false; } -void ICMPv6::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent) { +void ICMPv6::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); // If extensions are allowed and we have to set the length field @@ -361,7 +361,7 @@ void ICMPv6::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* ); } - const Tins::IPv6* ipv6 = tins_cast(parent); + const Tins::IPv6* ipv6 = tins_cast(parent_pdu()); if (ipv6) { uint32_t checksum = Utils::pseudoheader_checksum( ipv6->src_addr(), diff --git a/src/ip.cpp b/src/ip.cpp index 125d2b3..67f1b04 100644 --- a/src/ip.cpp +++ b/src/ip.cpp @@ -418,14 +418,14 @@ PDU* IP::recv_response(PacketSender& sender, const NetworkInterface &) { return sender.recv_l3(*this, 0, sizeof(link_addr), type); } -void IP::prepare_for_serialize(const PDU* parent) { - if (!parent && header_.saddr == 0) { +void IP::prepare_for_serialize() { + if (!parent_pdu()&& header_.saddr == 0) { NetworkInterface iface(dst_addr()); src_addr(iface.addresses().ip_addr); } } -void IP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent) { +void IP::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); checksum(0); if (inner_pdu()) { @@ -446,12 +446,10 @@ void IP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* pare uint16_t original_frag_off = header_.frag_off; #if __FreeBSD__ || defined(__FreeBSD_kernel__) || __APPLE__ - if (!parent) { + if (!parent_pdu()) { total_sz = Endian::host_to_be(total_sz); header_.frag_off = Endian::be_to_host(header_.frag_off); } - #else - Internals::unused(parent); #endif tot_len(total_sz); head_len(static_cast(header_size() / sizeof(uint32_t))); diff --git a/src/ipsec.cpp b/src/ipsec.cpp index d136447..dde3007 100644 --- a/src/ipsec.cpp +++ b/src/ipsec.cpp @@ -94,7 +94,7 @@ uint32_t IPSecAH::header_size() const { return static_cast(sizeof(header_) + icv_.size()); } -void IPSecAH::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void IPSecAH::write_serialization(uint8_t* buffer, uint32_t total_sz) { if (inner_pdu()) { next_header(Internals::pdu_flag_to_ip_type(inner_pdu()->pdu_type())); } @@ -131,7 +131,7 @@ uint32_t IPSecESP::header_size() const { return sizeof(header_); } -void IPSecESP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void IPSecESP::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream output(buffer, total_sz); output.write(header_); } diff --git a/src/ipv6.cpp b/src/ipv6.cpp index f346c30..1f855b8 100644 --- a/src/ipv6.cpp +++ b/src/ipv6.cpp @@ -243,7 +243,7 @@ bool IPv6::matches_response(const uint8_t* ptr, uint32_t total_sz) const { return false; } -void IPv6::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* /*parent*/) { +void IPv6::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); if (inner_pdu()) { uint8_t new_flag = Internals::pdu_flag_to_ip_type(inner_pdu()->pdu_type()); diff --git a/src/llc.cpp b/src/llc.cpp index 43d3aa4..cb9ee68 100644 --- a/src/llc.cpp +++ b/src/llc.cpp @@ -196,7 +196,7 @@ void LLC::clear_information_fields() { information_fields_.clear(); } -void LLC::write_serialization(uint8_t* buffer, uint32_t total_sz, const Tins::PDU* /*parent*/) { +void LLC::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); if (inner_pdu() && inner_pdu()->pdu_type() == PDU::STP) { dsap(0x42); diff --git a/src/loopback.cpp b/src/loopback.cpp index 62345eb..9b473ab 100644 --- a/src/loopback.cpp +++ b/src/loopback.cpp @@ -90,7 +90,7 @@ uint32_t Loopback::header_size() const { return sizeof(family_); } -void Loopback::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void Loopback::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); #ifndef _WIN32 if (tins_cast(inner_pdu())) { diff --git a/src/mpls.cpp b/src/mpls.cpp index f7ffd42..0fce533 100644 --- a/src/mpls.cpp +++ b/src/mpls.cpp @@ -91,10 +91,10 @@ uint32_t MPLS::header_size() const { return sizeof(header_); } -void MPLS::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent) { +void MPLS::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); // If we have a parent PDU, we might set the bottom-of-stack field - if (parent) { + if (parent_pdu()) { // We'll set it if we either don't have a child or we have one and it's not MPLS if (!inner_pdu() || inner_pdu()->pdu_type() != PDU::MPLS) { bottom_of_stack(1); diff --git a/src/pdu.cpp b/src/pdu.cpp index 50899d9..989bd37 100644 --- a/src/pdu.cpp +++ b/src/pdu.cpp @@ -73,7 +73,7 @@ void PDU::copy_inner_pdu(const PDU& pdu) { } } -void PDU::prepare_for_serialize(const PDU* /*parent*/) { +void PDU::prepare_for_serialize() { } uint32_t PDU::size() const { @@ -121,21 +121,21 @@ PDU* PDU::release_inner_pdu() { PDU::serialization_type PDU::serialize() { vector buffer(size()); - serialize(&buffer[0], static_cast(buffer.size()), 0); + serialize(&buffer[0], static_cast(buffer.size())); return buffer; } -void PDU::serialize(uint8_t* buffer, uint32_t total_sz, const PDU* parent) { +void PDU::serialize(uint8_t* buffer, uint32_t total_sz) { uint32_t sz = header_size() + trailer_size(); // Must not happen... #ifdef TINS_DEBUG assert(total_sz >= sz); #endif - prepare_for_serialize(parent); + prepare_for_serialize(); if (inner_pdu_) { - inner_pdu_->serialize(buffer + header_size(), total_sz - sz, this); + inner_pdu_->serialize(buffer + header_size(), total_sz - sz); } - write_serialization(buffer, total_sz, parent); + write_serialization(buffer, total_sz); } void PDU::parent_pdu(PDU* parent) { diff --git a/src/pktap.cpp b/src/pktap.cpp index 280346f..d475664 100644 --- a/src/pktap.cpp +++ b/src/pktap.cpp @@ -65,7 +65,7 @@ uint32_t PKTAP::header_size() const { return sizeof(header_); } -void PKTAP::write_serialization(uint8_t* /*buffer*/, uint32_t /*total_sz*/, const PDU* /*parent*/) { +void PKTAP::write_serialization(uint8_t* /*buffer*/, uint32_t /*total_sz*/) { throw pdu_not_serializable(); } diff --git a/src/ppi.cpp b/src/ppi.cpp index 1246570..89155bb 100644 --- a/src/ppi.cpp +++ b/src/ppi.cpp @@ -94,7 +94,7 @@ uint32_t PPI::header_size() const { return static_cast(sizeof(header_) + data_.size()); } -void PPI::write_serialization(uint8_t* /*buffer*/, uint32_t /*total_sz*/, const PDU *) { +void PPI::write_serialization(uint8_t* /*buffer*/, uint32_t /*total_sz*/) { throw pdu_not_serializable(); } diff --git a/src/pppoe.cpp b/src/pppoe.cpp index c991691..2439f87 100644 --- a/src/pppoe.cpp +++ b/src/pppoe.cpp @@ -108,7 +108,7 @@ uint32_t PPPoE::header_size() const { return sizeof(header_) + tags_size_; } -void PPPoE::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void PPPoE::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); if (tags_size_ > 0) { payload_length(tags_size_); diff --git a/src/radiotap.cpp b/src/radiotap.cpp index 69326dc..a994583 100644 --- a/src/radiotap.cpp +++ b/src/radiotap.cpp @@ -507,7 +507,7 @@ bool RadioTap::matches_response(const uint8_t* ptr, uint32_t total_sz) const { return false; } -void RadioTap::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* /*parent*/) { +void RadioTap::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); uint8_t* buffer_start = buffer; radio_.it_len = Endian::host_to_le(header_size()); diff --git a/src/rawpdu.cpp b/src/rawpdu.cpp index 07a3196..cf056f8 100644 --- a/src/rawpdu.cpp +++ b/src/rawpdu.cpp @@ -48,7 +48,7 @@ uint32_t RawPDU::header_size() const { return static_cast(payload_.size()); } -void RawPDU::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void RawPDU::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); stream.write(payload_.begin(), payload_.end()); } diff --git a/src/sll.cpp b/src/sll.cpp index 72ca2e5..9279da5 100644 --- a/src/sll.cpp +++ b/src/sll.cpp @@ -81,7 +81,7 @@ uint32_t SLL::header_size() const { return sizeof(header_); } -void SLL::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void SLL::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); if (inner_pdu()) { Constants::Ethernet::e flag = Internals::pdu_flag_to_ether_type( diff --git a/src/snap.cpp b/src/snap.cpp index bf1d327..6b15fc8 100644 --- a/src/snap.cpp +++ b/src/snap.cpp @@ -91,7 +91,7 @@ uint32_t SNAP::header_size() const { return sizeof(snap_); } -void SNAP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* /*parent*/) { +void SNAP::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); if (inner_pdu()) { Constants::Ethernet::e flag = Internals::pdu_flag_to_ether_type( diff --git a/src/stp.cpp b/src/stp.cpp index e8fd603..77a8028 100644 --- a/src/stp.cpp +++ b/src/stp.cpp @@ -106,7 +106,7 @@ void STP::bridge_id(const bpdu_id_type& id) { header_.bridge_id = convert(id); } -void STP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU *) { +void STP::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); stream.write(header_); } diff --git a/src/tcp.cpp b/src/tcp.cpp index b295e09..beb0d55 100644 --- a/src/tcp.cpp +++ b/src/tcp.cpp @@ -295,7 +295,7 @@ uint32_t TCP::header_size() const { return sizeof(header_) + total_options_size_; } -void TCP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent) { +void TCP::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); // Set checksum to 0, we'll calculate it at the end checksum(0); @@ -311,6 +311,7 @@ void TCP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* par } uint32_t check = 0; + const PDU* parent = parent_pdu(); if (const Tins::IP* ip_packet = tins_cast(parent)) { check = Utils::pseudoheader_checksum( ip_packet->src_addr(), diff --git a/src/udp.cpp b/src/udp.cpp index 318eb46..b52fd55 100644 --- a/src/udp.cpp +++ b/src/udp.cpp @@ -117,7 +117,7 @@ uint32_t pseudoheader_checksum(IPv4Address source_ip, IPv4Address dest_ip, uint3 return checksum; } -void UDP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* parent) { +void UDP::write_serialization(uint8_t* buffer, uint32_t total_sz) { OutputMemoryStream stream(buffer, total_sz); // Set checksum to 0, we'll calculate it at the end header_.check = 0; @@ -129,6 +129,7 @@ void UDP::write_serialization(uint8_t* buffer, uint32_t total_sz, const PDU* par } stream.write(header_); uint32_t checksum = 0; + const PDU* parent = parent_pdu(); if (const Tins::IP* ip_packet = tins_cast(parent)) { checksum = Utils::pseudoheader_checksum( ip_packet->src_addr(), diff --git a/tests/src/allocators_test.cpp b/tests/src/allocators_test.cpp index e298f8c..b50a9d3 100644 --- a/tests/src/allocators_test.cpp +++ b/tests/src/allocators_test.cpp @@ -52,8 +52,7 @@ public: DummyPDU* clone() const { return new DummyPDU(*this); } uint32_t header_size() const { return (uint32_t)buffer.size(); } PDUType pdu_type() const { return pdu_flag; } - void write_serialization(uint8_t* data, uint32_t, const PDU *) - { + void write_serialization(uint8_t* data, uint32_t) { std::copy(buffer.begin(), buffer.end(), data); }