OrcaSlicer latest
OrcaSlicer
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< DnsMessage > decode (const std::vector< char > &buffer, const Bonjour::TxtKeys &txt_keys)

Public Attributes

DnsHeader header
optional< DnsQuestion > question
optional< DnsRR_A > rr_a
optional< DnsRR_AAAA > rr_aaaa
std::vector< DnsRR_SRV > rr_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 
414 {
415 MAX_SIZE = 4096,
416 MAX_ANS = 30,
417 };
@ MAX_SIZE
Definition Bonjour.cpp:415
@ MAX_ANS
Definition Bonjour.cpp:416

Member Function Documentation

◆ decode()

optional< DnsMessage > Slic3r::DnsMessage::decode ( const std::vector< char > & buffer,
const Bonjour::TxtKeys & txt_keys )
inlinestatic
429 {
430 const auto size = buffer.size();
431 if (size < DnsHeader::SIZE + DnsQuestion::MIN_SIZE || size > MAX_SIZE) {
432 return boost::none;
433 }
434
435 DnsMessage res;
436 res.header = DnsHeader::decode(buffer);
437
438 if (res.header.qdcount > 1 || res.header.ancount > MAX_ANS) {
439 return boost::none;
440 }
441
442 size_t offset = DnsHeader::SIZE;
443 if (res.header.qdcount == 1) {
444 res.question = DnsQuestion::decode(buffer, offset);
445 }
446
447 for (unsigned i = 0; i < res.header.rrcount(); i++) {
448 size_t dataoffset = 0;
449 auto rr = DnsResource::decode(buffer, offset, dataoffset);
450 if (!rr) {
451 return boost::none;
452 }
453 else {
454 res.parse_rr(buffer, std::move(*rr), dataoffset, txt_keys);
455 }
456 }
457
458 return std::move(res);
459 }
Slic3r::Polygons offset(const Slic3r::Polygon &polygon, const float delta, JoinType joinType, double miterLimit)
Definition ClipperUtils.cpp:582
static DnsHeader decode(const std::vector< char > &buffer)
Definition Bonjour.cpp:155
@ SIZE
Definition Bonjour.cpp:152
static optional< DnsQuestion > decode(const std::vector< char > &buffer, size_t &offset)
Definition Bonjour.cpp:188
static optional< DnsResource > decode(const std::vector< char > &buffer, size_t &offset, size_t &dataoffset)
Definition Bonjour.cpp:220

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
462 {
463 switch (rr.type) {
464 case DnsRR_A::TAG:
465 DnsRR_A::decode(this->rr_a, rr);
466 this->rr_a->name = rr.name;
467 break;
468 case DnsRR_AAAA::TAG:
469 DnsRR_AAAA::decode(this->rr_aaaa, rr);
470 this->rr_aaaa->name = rr.name;
471 break;
472 case DnsRR_SRV::TAG: {
473 auto srv = DnsRR_SRV::decode(buffer, rr, dataoffset);
474 if (srv) { this->sdmap.insert_srv(std::move(rr.name), std::move(*srv)); }
475 break;
476 }
477 case DnsRR_TXT::TAG: {
478 auto txt = DnsRR_TXT::decode(rr, txt_keys);
479 if (txt) { this->sdmap.insert_txt(std::move(rr.name), std::move(*txt)); }
480 break;
481 }
482 }
483 }
DnsSDMap sdmap
Definition Bonjour.cpp:426
optional< DnsRR_AAAA > rr_aaaa
Definition Bonjour.cpp:423
optional< DnsRR_A > rr_a
Definition Bonjour.cpp:422
static void decode(optional< DnsRR_AAAA > &result, const DnsResource &rr)
Definition Bonjour.cpp:282
@ TAG
Definition Bonjour.cpp:277
@ TAG
Definition Bonjour.cpp:259
static void decode(optional< DnsRR_A > &result, const DnsResource &rr)
Definition Bonjour.cpp:264
static optional< DnsRR_SRV > decode(const std::vector< char > &buffer, const DnsResource &rr, size_t dataoffset)
Definition Bonjour.cpp:307
@ TAG
Definition Bonjour.cpp:298
static optional< DnsRR_TXT > decode(const DnsResource &rr, const Bonjour::TxtKeys &txt_keys)
Definition Bonjour.cpp:341
@ TAG
Definition Bonjour.cpp:336

References Slic3r::DnsRR_A::decode(), Slic3r::DnsRR_AAAA::decode(), Slic3r::DnsRR_SRV::decode(), Slic3r::DnsRR_TXT::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:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/Utils/Bonjour.cpp