MDNS/src/include/Network/Mdns/Server.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  * Server.h
8  *
9  * Code originally based on MrDunk's mDNS code distributed under the MIT license.
10  *
11  * MIT license: https://github.com/mrdunk/esp8266_mdns/blob/master/LICENCE.txt
12  *
13  * However, code has been essentially rewritten so Sming LGPL v3 license applies.
14  *
15  */
16 
17 #pragma once
18 
19 #include <Delegate.h>
20 #include <Network/UdpConnection.h>
21 #include "Request.h"
22 #include "Handler.h"
23 
24 namespace mDNS
25 {
29 class Server : protected UdpConnection
30 {
31 public:
36  using MessageDelegate = Delegate<bool(Message& message)>;
37 
42  using PacketDelegate = Delegate<bool(IpAddress remoteIP, uint16_t remotePort, const uint8_t* data, size_t length)>;
43 
45 
46  bool begin();
47 
48  void end();
49 
50  bool restart()
51  {
52  end();
53  return begin();
54  }
55 
60  void addHandler(Handler& handler)
61  {
62  handlers.add(&handler);
63  }
64 
69  void removeHandler(Handler& handler)
70  {
71  handlers.remove(&handler);
72  }
73 
78  void onSend(MessageDelegate callback)
79  {
80  sendCallback = callback;
81  }
82 
87  void onPacket(PacketDelegate callback)
88  {
89  packetCallback = callback;
90  }
91 
98  bool search(const String& hostname, ResourceType type = ResourceType::PTR);
99 
104  bool send(Message& message);
105 
106 protected:
107  using UdpConnection::send;
108 
109  void onReceive(pbuf* buf, IpAddress remoteIP, uint16_t remotePort) override;
110 
111 private:
112  /*
113  * Need a separate UDP connection for sending requests
114  */
115  class UdpOut : public UdpConnection
116  {
117  protected:
118  void onReceive(pbuf* buf, IpAddress remoteIP, uint16_t remotePort) override;
119  };
120 
121  Handler::List handlers;
122  MessageDelegate sendCallback;
123  PacketDelegate packetCallback;
124  UdpOut out;
125  bool active{false};
126 };
127 
128 extern Server server;
129 
130 } // namespace mDNS
A class to make it easier to handle and pass around IP addresses.
Definition: IpAddress.h:45
bool add(ObjectType *object)
Definition: LinkedObjectList.h:134
bool remove(LinkedObject *object)
The String class.
Definition: WString.h:137
Definition: UdpConnection.h:28
virtual bool send(const char *data, int length)
Virtual base class used for chaining message handlers.
Definition: MDNS/src/include/Network/Mdns/Handler.h:22
Encapsulates a message packet for flexible introspection.
Definition: MDNS/src/include/Network/Mdns/Message.h:29
Locates mDNS services by issuing queries.
Definition: MDNS/src/include/Network/Mdns/Server.h:30
void onSend(MessageDelegate callback)
Set callback to be invoked before sending a message.
Definition: MDNS/src/include/Network/Mdns/Server.h:78
bool send(Message &message)
Send an mDNS message containing questions/answers.
bool search(const String &hostname, ResourceType type=ResourceType::PTR)
Send a multicast query.
bool restart()
Definition: MDNS/src/include/Network/Mdns/Server.h:50
void addHandler(Handler &handler)
Set callback to be invoked for each received message.
Definition: MDNS/src/include/Network/Mdns/Server.h:60
void removeHandler(Handler &handler)
Remove a message handler.
Definition: MDNS/src/include/Network/Mdns/Server.h:69
void onPacket(PacketDelegate callback)
Set callback to be invoked for raw received data, before parsing.
Definition: MDNS/src/include/Network/Mdns/Server.h:87
Delegate< bool(IpAddress remoteIP, uint16_t remotePort, const uint8_t *data, size_t length)> PacketDelegate
Callback to be invoked with raw data (debugging, etc.)
Definition: MDNS/src/include/Network/Mdns/Server.h:42
void onReceive(pbuf *buf, IpAddress remoteIP, uint16_t remotePort) override
Delegate< bool(Message &message)> MessageDelegate
Callback to be invoked for each received message.
Definition: MDNS/src/include/Network/Mdns/Server.h:36
Type
Definition: Resource.h:41
Definition: Answer.h:18
Server server