libtins  4.0
Public Types | Public Member Functions | Static Public Attributes | List of all members
Tins::PDUCacher< T > Class Template Reference

PDU wrapper that caches the result of the wrapped PDU's serialization. More...

#include <pdu_cacher.h>

Inheritance diagram for Tins::PDUCacher< T >:
Tins::PDU

Public Types

typedef T cached_type
 
- Public Types inherited from Tins::PDU
enum  endian_type { BE, LE }
 
enum  PDUType {
  RAW, ETHERNET_II, IEEE802_3, DOT3 = IEEE802_3,
  RADIOTAP, DOT11, DOT11_ACK, DOT11_ASSOC_REQ,
  DOT11_ASSOC_RESP, DOT11_AUTH, DOT11_BEACON, DOT11_BLOCK_ACK,
  DOT11_BLOCK_ACK_REQ, DOT11_CF_END, DOT11_DATA, DOT11_CONTROL,
  DOT11_DEAUTH, DOT11_DIASSOC, DOT11_END_CF_ACK, DOT11_MANAGEMENT,
  DOT11_PROBE_REQ, DOT11_PROBE_RESP, DOT11_PS_POLL, DOT11_REASSOC_REQ,
  DOT11_REASSOC_RESP, DOT11_RTS, DOT11_QOS_DATA, LLC,
  SNAP, IP, ARP, TCP,
  UDP, ICMP, BOOTP, DHCP,
  EAPOL, RC4EAPOL, RSNEAPOL, DNS,
  LOOPBACK, IPv6, ICMPv6, SLL,
  DHCPv6, DOT1Q, PPPOE, STP,
  PPI, IPSEC_AH, IPSEC_ESP, PKTAP,
  MPLS, UNKNOWN = 999, USER_DEFINED_PDU = 1000
}
 Enum which identifies each type of PDU. More...
 
typedef byte_array serialization_type
 

Public Member Functions

 PDUCacher ()
 
 PDUCacher (const cached_type &pdu)
 
uint32_t header_size () const
 
PDUCacherclone () const
 
void send (PacketSender &sender, const NetworkInterface &iface)
 
PDUrecv_response (PacketSender &sender, const NetworkInterface &iface)
 
bool matches_response (const uint8_t *ptr, uint32_t total_sz) const
 
bool matches_flag (PDUType flag) const
 
PDUType pdu_type () const
 
- Public Member Functions inherited from Tins::PDU
 PDU ()
 Default constructor.
 
 PDU (PDU &&rhs) TINS_NOEXCEPT
 Move constructor. More...
 
PDUoperator= (PDU &&rhs) TINS_NOEXCEPT
 Move assignment operator. More...
 
virtual ~PDU ()
 PDU destructor. More...
 
virtual uint32_t trailer_size () const
 Trailer's size. More...
 
uint32_t size () const
 The whole chain of PDU's size, including this one. More...
 
PDUinner_pdu () const
 Getter for the inner PDU. More...
 
PDUparent_pdu () const
 
PDUrelease_inner_pdu ()
 Releases the inner PDU. More...
 
void inner_pdu (PDU *next_pdu)
 Sets the child PDU. More...
 
void inner_pdu (const PDU &next_pdu)
 Sets the child PDU. More...
 
serialization_type serialize ()
 Serializes the whole chain of PDU's, including this one. More...
 
template<typename T >
T * find_pdu (PDUType type=T::pdu_flag)
 Finds and returns the first PDU that matches the given flag. More...
 
template<typename T >
const T * find_pdu (PDUType type=T::pdu_flag) const
 Finds and returns the first PDU that matches the given flag. More...
 
template<typename T >
T & rfind_pdu (PDUType type=T::pdu_flag)
 Finds and returns the first PDU that matches the given flag. More...
 
template<typename T >
const T & rfind_pdu (PDUType type=T::pdu_flag) const
 Finds and returns the first PDU that matches the given flag. More...
 

Static Public Attributes

static const PDU::PDUType pdu_flag = cached_type::pdu_flag
 
- Static Public Attributes inherited from Tins::PDU
static const endian_type endianness = BE
 

Additional Inherited Members

- Protected Member Functions inherited from Tins::PDU
 PDU (const PDU &other)
 Copy constructor.
 
PDUoperator= (const PDU &other)
 Copy assignment operator.
 
void copy_inner_pdu (const PDU &pdu)
 Copy other PDU's inner PDU(if any). More...
 
virtual void prepare_for_serialize ()
 Prepares this PDU for serialization. More...
 
void serialize (uint8_t *buffer, uint32_t total_sz)
 Serializes this PDU and propagates this action to child PDUs. More...
 

Detailed Description

template<typename T>
class Tins::PDUCacher< T >

PDU wrapper that caches the result of the wrapped PDU's serialization.

This wrapper class holds a PDU of the template parameter type, and forwards every PDU virtual call to the stored object. Whenever a call to write_serialization is performed on this wrapper, the result is cached in a PDU::serialization_type. On subsequent calls to PDUCacher::write_serialization, the contents of that cache will be written to the output buffer.

This class should provide a nice performance boost if you're sending over and over a packet that requires some computation while being serialized, such as performing checksums, iterate and copy options, etc.

Member Typedef Documentation

template<typename T>
typedef T Tins::PDUCacher< T >::cached_type

The cached PDU type.

Constructor & Destructor Documentation

template<typename T>
Tins::PDUCacher< T >::PDUCacher ( )
inline

Default constructs the cached PDU.

template<typename T>
Tins::PDUCacher< T >::PDUCacher ( const cached_type pdu)
inline

Constructor from a cached_type.

Parameters
pduThe PDU to be copy constructed.

Member Function Documentation

template<typename T>
PDUCacher* Tins::PDUCacher< T >::clone ( ) const
inlinevirtual

Forwards the call to the cached PDU.

See also
PDU::clone.

Implements Tins::PDU.

template<typename T>
uint32_t Tins::PDUCacher< T >::header_size ( ) const
inlinevirtual

Forwards the call to the cached PDU.

See also
PDU::header_size.

Implements Tins::PDU.

template<typename T>
bool Tins::PDUCacher< T >::matches_flag ( PDUType  flag) const
inlinevirtual

Forwards the call to the cached PDU.

See also
PDU::matches_flag.

Reimplemented from Tins::PDU.

template<typename T>
bool Tins::PDUCacher< T >::matches_response ( const uint8_t *  ptr,
uint32_t  total_sz 
) const
inlinevirtual

Forwards the call to the cached PDU.

See also
PDU::matches_response.

Reimplemented from Tins::PDU.

template<typename T>
PDUType Tins::PDUCacher< T >::pdu_type ( ) const
inlinevirtual

Forwards the call to the cached PDU.

See also
PDU::pdu_type.

Implements Tins::PDU.

template<typename T>
PDU* Tins::PDUCacher< T >::recv_response ( PacketSender sender,
const NetworkInterface iface 
)
inlinevirtual

Forwards the call to the cached PDU.

See also
PDU::recv_responde.

Reimplemented from Tins::PDU.

template<typename T>
void Tins::PDUCacher< T >::send ( PacketSender sender,
const NetworkInterface iface 
)
inlinevirtual

Forwards the call to the cached PDU.

See also
PDU::send.

Reimplemented from Tins::PDU.


The documentation for this class was generated from the following file: