esp8266ndn
NDN Arduino library for ESP8266 and more
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
udp-transport.hpp
Go to the documentation of this file.
1#ifndef ESP8266NDN_TRANSPORT_UDP_TRANSPORT_HPP
2#define ESP8266NDN_TRANSPORT_UDP_TRANSPORT_HPP
3
4#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_ARCH_RP2040)
5
6#include "../port/port.hpp"
7
8#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_RP2040)
9#include <WiFiUdp.h>
10#define ESP8266NDN_NetworkUDP WiFiUDP
11#elif defined(ARDUINO_ARCH_ESP32)
12#include <NetworkUdp.h>
13#define ESP8266NDN_NetworkUDP NetworkUDP
14#endif
15
16namespace esp8266ndn {
17
19class UdpTransport : public virtual ndnph::Transport {
20public:
26 explicit UdpTransport(size_t mtu = DefaultMtu);
27
33 explicit UdpTransport(uint8_t* buffer, size_t capacity);
34
39 template<size_t capacity>
40 explicit UdpTransport(std::array<uint8_t, capacity>& buffer)
41 : UdpTransport(buffer.data(), buffer.size()) {}
42
50 bool beginListen(uint16_t localPort = 6363, IPAddress localIp = IPAddress());
51
58 bool beginTunnel(IPAddress remoteIp, uint16_t remotePort = 6363, uint16_t localPort = 6363);
59
65 bool beginMulticast(IPAddress localIp = IPAddress(), uint16_t groupPort = 56363);
66
68 void end();
69
70private:
71 bool doIsUp() const final;
72
73 void doLoop() final;
74
75 bool doSend(const uint8_t* pkt, size_t pktLen, uint64_t endpointId) final;
76
77public:
78 enum {
80 DefaultMtu = 1500 - 20 - 8,
81 };
82
84 static const IPAddress MulticastGroup;
85
86private:
87 enum class Mode : uint8_t {
88 NONE,
89 LISTEN,
90 TUNNEL,
91 MULTICAST,
92 };
93
94 uint8_t* m_buf = nullptr;
95 size_t m_bufcap = 0;
96 std::unique_ptr<uint8_t[]> m_ownBuf;
97
99#if LWIP_IPV6
101#else
103#endif
104 EndpointIdHelper m_endpoints;
105 IPAddress m_ip;
106 uint16_t m_port = 0;
107 Mode m_mode = Mode::NONE;
108};
109
110} // namespace esp8266ndn
111
112#endif // defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
113
114#endif // ESP8266NDN_TRANSPORT_UDP_TRANSPORT_HPP
A transport that communicates over UDP tunnel or multicast group.
Definition udp-transport.hpp:19
bool doSend(const uint8_t *pkt, size_t pktLen, uint64_t endpointId) final
bool beginTunnel(IPAddress remoteIp, uint16_t remotePort=6363, uint16_t localPort=6363)
Establish a UDP tunnel to a remote endpoint.
UdpTransport(uint8_t *buffer, size_t capacity)
Construct using external buffer.
bool doIsUp() const final
@ DefaultMtu
Default MTU for UDP is Ethernet MTU minus IPv4 and UDP headers.
Definition udp-transport.hpp:80
bool beginListen(uint16_t localPort=6363, IPAddress localIp=IPAddress())
Listen on a UDP port for packets from any remote endpoint.
bool beginMulticast(IPAddress localIp=IPAddress(), uint16_t groupPort=56363)
Join a UDP multicast group.
UdpTransport(size_t mtu=DefaultMtu)
Construct using internal buffer.
static const IPAddress MulticastGroup
NDN multicast group "224.0.23.170".
Definition udp-transport.hpp:84
void end()
Disable the transport.
UdpTransport(std::array< uint8_t, capacity > &buffer)
Construct using external buffer.
Definition udp-transport.hpp:40
Helper to pack IPv6 endpoint into 64-bit EndpointId.
Definition ipv6-endpointid.hpp:19
Base class of low-level transport.
Definition transport.hpp:10
Definition autoconfig.hpp:24
#define ESP8266NDN_NetworkUDP
Definition udp-transport.hpp:13