MDNS/src/include/Network/Mdns/Request.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * Request.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include "Message.h"
14 
15 namespace mDNS
16 {
17 class Request : public Message
18 {
19 public:
23  Request(Type type);
24 
25  Question* addQuestion(const String& name, ResourceType type = ResourceType::PTR, uint16_t qclass = 1,
26  bool unicast = false);
27 
28  Answer* createAnswer(const String& name, Resource::Type type, uint16_t rclass, bool flush, uint32_t ttl);
29  Answer* createAnswer(const Name& name, Resource::Type type, uint16_t rclass, bool flush, uint32_t ttl);
30 
31  template <class Resource, class N, typename... ParamTypes> Resource addAnswer(const N& name, ParamTypes... params)
32  {
33  auto answer = createAnswer(name, Resource::type, 1, false, 120);
34  Resource r(*answer);
35  r.init(params...);
36  return r;
37  }
38 
40  {
41  assert(kind < Answer::Kind::additional);
42  kind = Answer::Kind(unsigned(kind) + 1);
43  return kind;
44  }
45 
46 private:
47  uint8_t buffer[MAX_PACKET_SIZE];
49 };
50 
51 class Query : public Request
52 {
53 public:
54  Query() : Request(Type::query)
55  {
56  }
57 };
58 
59 class Reply : public Request
60 {
61 public:
62  Reply(const Question& question) : Request(Type::reply)
63  {
64  if(question.isUnicastReply()) {
65  auto& msg = question.getMessage();
66  remoteIp = msg.getRemoteIp();
67  remotePort = msg.getRemotePort();
68  }
69  }
70 };
71 
72 } // namespace mDNS
The String class.
Definition: WString.h:137
A single mDNS Answer.
Definition: Answer.h:26
Kind
Definition: Answer.h:31
Encapsulates a message packet for flexible introspection.
Definition: MDNS/src/include/Network/Mdns/Message.h:29
uint16_t remotePort
Definition: MDNS/src/include/Network/Mdns/Message.h:135
IpAddress remoteIp
Definition: MDNS/src/include/Network/Mdns/Message.h:134
Type
Definition: MDNS/src/include/Network/Mdns/Message.h:31
Encoded DNS name.
Definition: Name.h:38
Definition: MDNS/src/include/Network/Mdns/Request.h:52
Query()
Definition: MDNS/src/include/Network/Mdns/Request.h:54
A single mDNS Question.
Definition: Question.h:26
bool isUnicastReply() const
Whether reply should be unicast or multicast.
Message & getMessage() const
Definition: Question.h:60
Definition: MDNS/src/include/Network/Mdns/Request.h:60
Reply(const Question &question)
Definition: MDNS/src/include/Network/Mdns/Request.h:62
Definition: MDNS/src/include/Network/Mdns/Request.h:18
Answer * createAnswer(const String &name, Resource::Type type, uint16_t rclass, bool flush, uint32_t ttl)
Answer * createAnswer(const Name &name, Resource::Type type, uint16_t rclass, bool flush, uint32_t ttl)
Request(Type type)
Create a multicast message.
Answer::Kind nextSection()
Definition: MDNS/src/include/Network/Mdns/Request.h:39
Resource addAnswer(const N &name, ParamTypes... params)
Definition: MDNS/src/include/Network/Mdns/Request.h:31
Question * addQuestion(const String &name, ResourceType type=ResourceType::PTR, uint16_t qclass=1, bool unicast=false)
Type
Definition: Resource.h:41
Definition: Answer.h:18
constexpr uint16_t MAX_PACKET_SIZE
Definition: MDNS/src/include/Network/Mdns/Message.h:23