113 RFC_EXPERIMENT_1 = 253,
114 RFC_EXPERIMENT_2 = 254
147 static metadata extract_metadata(
const uint8_t *buffer, uint32_t total_sz);
158 TCP(uint16_t dport = 0, uint16_t sport = 0);
172 TCP(
const uint8_t* buffer, uint32_t total_sz);
180 return Endian::be_to_host(header_.dport);
189 return Endian::be_to_host(header_.sport);
198 return Endian::be_to_host(header_.seq);
207 return Endian::be_to_host(header_.ack_seq);
216 return Endian::be_to_host(header_.window);
225 return Endian::be_to_host(header_.check);
234 return Endian::be_to_host(header_.urg_ptr);
243 return this->header_.doff;
322 void dport(uint16_t new_dport);
329 void sport(uint16_t new_sport);
336 void seq(uint32_t new_seq);
343 void ack_seq(uint32_t new_ack_seq);
350 void window(uint16_t new_window);
357 void urg_ptr(uint16_t new_urg_ptr);
373 void mss(uint16_t value);
380 uint16_t mss()
const;
387 void winscale(uint8_t value);
394 uint8_t winscale()
const;
399 void sack_permitted();
405 bool has_sack_permitted()
const;
412 void sack(
const sack_type& edges);
419 sack_type sack()
const;
427 void timestamp(uint32_t value, uint32_t reply);
435 std::pair<uint32_t, uint32_t> timestamp()
const;
442 void altchecksum(AltChecksums value);
449 AltChecksums altchecksum()
const;
485 void add_option(
const option& opt);
496 options_.push_back(std::move(opt));
507 template <
typename... Args>
509 options_.emplace_back(std::forward<Args>(args)...);
522 bool remove_option(OptionTypes type);
532 uint32_t header_size()
const;
541 bool matches_response(
const uint8_t* ptr, uint32_t total_sz)
const;
557 const option* search_option(OptionTypes type)
const;
563 return new TCP(*
this);
566 #if TINS_IS_LITTLE_ENDIAN
598 #if TINS_IS_LITTLE_ENDIAN
614 static const uint16_t DEFAULT_WINDOW;
616 template <
typename T>
617 T generic_search(OptionTypes opt_type)
const {
618 const option* opt = search_option(opt_type);
620 throw option_not_found();
625 void write_serialization(uint8_t* buffer, uint32_t total_sz);
626 void checksum(uint16_t new_check);
627 uint32_t calculate_options_size()
const;
628 uint32_t pad_options_size(uint32_t size)
const;
629 options_type::const_iterator search_option_iterator(OptionTypes type)
const;
630 options_type::iterator search_option_iterator(OptionTypes type);
632 void write_option(
const option& opt, Memory::OutputMemoryStream& stream);
634 options_type options_;