Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::DnsMessage Struct Reference
+ Collaboration diagram for Slic3r::DnsMessage:

Public Types

enum  { MAX_SIZE = 4096 , MAX_ANS = 30 }
 

Static Public Member Functions

static optional< DnsMessagedecode (const std::vector< char > &buffer, const Bonjour::TxtKeys &txt_keys)
 

Public Attributes

DnsHeader header
 
optional< DnsQuestionquestion
 
optional< DnsRR_Arr_a
 
optional< DnsRR_AAAArr_aaaa
 
std::vector< DnsRR_SRVrr_srv
 
DnsSDMap sdmap
 

Private Member Functions

void parse_rr (const std::vector< char > &buffer, DnsResource &&rr, size_t dataoffset, const Bonjour::TxtKeys &txt_keys)
 

Detailed Description

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
MAX_SIZE 
MAX_ANS 
392 {
393 MAX_SIZE = 4096,
394 MAX_ANS = 30,
395 };
@ MAX_SIZE
Definition Bonjour.cpp:393
@ MAX_ANS
Definition Bonjour.cpp:394

Member Function Documentation

◆ decode()

static optional< DnsMessage > Slic3r::DnsMessage::decode ( const std::vector< char > &  buffer,
const Bonjour::TxtKeys txt_keys 
)
inlinestatic
407 {
408 const auto size = buffer.size();
409 if (size < DnsHeader::SIZE + DnsQuestion::MIN_SIZE || size > MAX_SIZE) {
410 return boost::none;
411 }
412
413 DnsMessage res;
414 res.header = DnsHeader::decode(buffer);
415
416 if (res.header.qdcount > 1 || res.header.ancount > MAX_ANS) {
417 return boost::none;
418 }
419
420 size_t offset = DnsHeader::SIZE;
421 if (res.header.qdcount == 1) {
422 res.question = DnsQuestion::decode(buffer, offset);
423 }
424
425 for (unsigned i = 0; i < res.header.rrcount(); i++) {
426 size_t dataoffset = 0;
427 auto rr = DnsResource::decode(buffer, offset, dataoffset);
428 if (!rr) {
429 return boost::none;
430 }
431 else {
432 res.parse_rr(buffer, std::move(*rr), dataoffset, txt_keys);
433 }
434 }
435
436 return std::move(res);
437 }
Slic3r::Polygons offset(const Slic3r::Polygon &polygon, const float delta, ClipperLib::JoinType joinType, double miterLimit)
Definition ClipperUtils.cpp:416
constexpr auto size(const C &c) -> decltype(c.size())
Definition span.hpp:183
@ SIZE
Definition Bonjour.cpp:130
static DnsHeader decode(const std::vector< char > &buffer)
Definition Bonjour.cpp:133
static optional< DnsQuestion > decode(const std::vector< char > &buffer, size_t &offset)
Definition Bonjour.cpp:166
static optional< DnsResource > decode(const std::vector< char > &buffer, size_t &offset, size_t &dataoffset)
Definition Bonjour.cpp:198

References Slic3r::DnsHeader::ancount, Slic3r::DnsHeader::decode(), Slic3r::DnsQuestion::decode(), Slic3r::DnsResource::decode(), header, MAX_ANS, MAX_SIZE, Slic3r::offset(), parse_rr(), Slic3r::DnsHeader::qdcount, question, Slic3r::DnsHeader::rrcount(), and Slic3r::DnsHeader::SIZE.

Referenced by Slic3r::LookupSession::handle_receive(), and Slic3r::ResolveSession::handle_receive().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parse_rr()

void Slic3r::DnsMessage::parse_rr ( const std::vector< char > &  buffer,
DnsResource &&  rr,
size_t  dataoffset,
const Bonjour::TxtKeys txt_keys 
)
inlineprivate
440 {
441 switch (rr.type) {
442 case DnsRR_A::TAG:
443 DnsRR_A::decode(this->rr_a, rr);
444 this->rr_a->name = rr.name;
445 break;
446 case DnsRR_AAAA::TAG:
447 DnsRR_AAAA::decode(this->rr_aaaa, rr);
448 this->rr_aaaa->name = rr.name;
449 break;
450 case DnsRR_SRV::TAG: {
451 auto srv = DnsRR_SRV::decode(buffer, rr, dataoffset);
452 if (srv) { this->sdmap.insert_srv(std::move(rr.name), std::move(*srv)); }
453 break;
454 }
455 case DnsRR_TXT::TAG: {
456 auto txt = DnsRR_TXT::decode(rr, txt_keys);
457 if (txt) { this->sdmap.insert_txt(std::move(rr.name), std::move(*txt)); }
458 break;
459 }
460 }
461 }
DnsSDMap sdmap
Definition Bonjour.cpp:404
optional< DnsRR_AAAA > rr_aaaa
Definition Bonjour.cpp:401
optional< DnsRR_A > rr_a
Definition Bonjour.cpp:400
static void decode(optional< DnsRR_AAAA > &result, const DnsResource &rr)
Definition Bonjour.cpp:260
@ TAG
Definition Bonjour.cpp:255
static void decode(optional< DnsRR_A > &result, const DnsResource &rr)
Definition Bonjour.cpp:242
@ TAG
Definition Bonjour.cpp:237
static optional< DnsRR_SRV > decode(const std::vector< char > &buffer, const DnsResource &rr, size_t dataoffset)
Definition Bonjour.cpp:285
@ TAG
Definition Bonjour.cpp:276
static optional< DnsRR_TXT > decode(const DnsResource &rr, const Bonjour::TxtKeys &txt_keys)
Definition Bonjour.cpp:319
@ TAG
Definition Bonjour.cpp:314
void insert_srv(std::string &&name, DnsRR_SRV &&srv)
Definition Bonjour.cpp:364
void insert_txt(std::string &&name, DnsRR_TXT &&txt)
Definition Bonjour.cpp:376

References Slic3r::DnsRR_TXT::decode(), Slic3r::DnsRR_SRV::decode(), Slic3r::DnsRR_A::decode(), Slic3r::DnsRR_AAAA::decode(), Slic3r::DnsSDMap::insert_srv(), Slic3r::DnsSDMap::insert_txt(), Slic3r::DnsRR_A::TAG, Slic3r::DnsRR_AAAA::TAG, Slic3r::DnsRR_SRV::TAG, and Slic3r::DnsRR_TXT::TAG.

Referenced by decode().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ header

DnsHeader Slic3r::DnsMessage::header

Referenced by decode(), and Slic3r::operator<<().

◆ question

optional<DnsQuestion> Slic3r::DnsMessage::question

Referenced by decode(), and Slic3r::operator<<().

◆ rr_a

optional<DnsRR_A> Slic3r::DnsMessage::rr_a

Referenced by Slic3r::operator<<().

◆ rr_aaaa

optional<DnsRR_AAAA> Slic3r::DnsMessage::rr_aaaa

Referenced by Slic3r::operator<<().

◆ rr_srv

std::vector<DnsRR_SRV> Slic3r::DnsMessage::rr_srv

◆ sdmap

DnsSDMap Slic3r::DnsMessage::sdmap

Referenced by Slic3r::operator<<().


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