Arduino DLNA Server
Loading...
Searching...
No Matches
UDPService.h
Go to the documentation of this file.
1#pragma once
2
3#include "dlna/IUDPService.h"
4#include "assert.h"
5
6namespace tiny_dlna {
7
24template <typename UDPType>
25class UDPService : public IUDPService {
26 public:
27 UDPService() = default;
28
29 bool begin(int port) override {
30 DlnaLogger.log(DlnaLogLevel::Info, "begin: %d", port);
31 is_multicast = false;
32 return udp.begin(port);
33 }
34
35 bool begin(IPAddressAndPort addr) override {
36 peer = addr;
37 is_multicast = true;
38 DlnaLogger.log(DlnaLogLevel::Info, "beginMulticast: %s", addr.toString());
39 return udp.beginMulticast(addr.address, addr.port);
40 }
41
42 bool send(uint8_t *data, int len) override { return send(peer, data, len); }
43
44 bool send(IPAddressAndPort addr, uint8_t *data, int len) override {
45 DlnaLogger.log(DlnaLogLevel::Debug, "sending %d bytes", len);
46 udp.beginPacket(addr.address, addr.port);
47 int sent = udp.write(data, len);
48 assert(sent == len);
49 bool result = udp.endPacket();
50 if (!result) {
51 DlnaLogger.log(DlnaLogLevel::Error, "Sending failed");
52 }
53 return result;
54 }
55
56 RequestData receive() override {
57 RequestData result;
58 // udp.flush();
59 int packetSize = udp.parsePacket();
60 if (packetSize > 0) {
61 result.peer.address = udp.remoteIP();
62 result.peer.port = udp.remotePort();
63 char tmp[packetSize + 1] = {0};
64 int len = udp.readBytes(tmp, packetSize);
65 result.data = tmp;
66 DlnaLogger.log(DlnaLogLevel::Debug, "(%s [%d])->: %s", result.peer.toString(),
67 packetSize, tmp);
68 }
69 return result;
70 }
71
72 protected:
73 UDPType udp;
75 bool is_multicast = false;
76};
77
78} // namespace tiny_dlna
Abstract Interface for UDP API.
Definition: IUDPService.h:34
void log(DlnaLogLevel current_level, const char *fmt...)
Print log message.
Definition: Logger.h:40
Access to UDP functionality: sending and receiving of data.
Definition: UDPService.h:25
RequestData receive() override
Definition: UDPService.h:56
bool send(IPAddressAndPort addr, uint8_t *data, int len) override
Definition: UDPService.h:44
bool is_multicast
Definition: UDPService.h:75
bool send(uint8_t *data, int len) override
Definition: UDPService.h:42
IPAddressAndPort peer
Definition: UDPService.h:74
bool begin(int port) override
Definition: UDPService.h:29
UDPType udp
Definition: UDPService.h:73
bool begin(IPAddressAndPort addr) override
Definition: UDPService.h:35
Definition: Allocator.h:6
LoggerClass DlnaLogger
Definition: Logger.cpp:5
IP Adress including Port information.
Definition: IPAddressAndPort.h:20
const char * toString()
Definition: IPAddressAndPort.h:26
int port
Definition: IPAddressAndPort.h:24
IPAddress address
Definition: IPAddressAndPort.h:23
Provides information of the received UDP which consists of the (xml) data and the peer address and po...
Definition: IUDPService.h:23
IPAddressAndPort peer
Definition: IUDPService.h:25
Str data
Definition: IUDPService.h:24