Arduino DLNA Server
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
UDPService.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <WiFi.h>
4 #include <WiFiUdp.h>
5 #include "dlna/IUDPService.h"
6 #include "assert.h"
7 
8 namespace tiny_dlna {
9 
16 class UDPService : public IUDPService {
17  public:
18  UDPService() = default;
19 
20  bool begin(int port) override {
21  DlnaLogger.log(DlnaInfo, "begin: %d", port);
22  is_multicast = false;
23  return udp.begin(port);
24  }
25 
26  bool begin(IPAddressAndPort addr) override {
27  peer = addr;
28  is_multicast = true;
29  DlnaLogger.log(DlnaInfo, "beginMulticast: %s", addr.toString());
30  return udp.beginMulticast(addr.address, addr.port);
31  }
32 
33  bool send(uint8_t *data, int len) override { return send(peer, data, len); }
34 
35  bool send(IPAddressAndPort addr, uint8_t *data, int len) override {
36  DlnaLogger.log(DlnaDebug, "sending %d bytes", len);
37  udp.beginPacket(addr.address, addr.port);
38  int sent = udp.write(data, len);
39  assert(sent == len);
40  bool result = udp.endPacket();
41  if (!result) {
42  DlnaLogger.log(DlnaError, "Sending failed");
43  }
44  return result;
45  }
46 
47  RequestData receive() override {
48  RequestData result;
49  // udp.flush();
50  int packetSize = udp.parsePacket();
51  if (packetSize > 0) {
52  result.peer.address = udp.remoteIP();
53  result.peer.port = udp.remotePort();
54  char tmp[packetSize + 1] = {0};
55  int len = udp.readBytes(tmp, len);
56  result.data = tmp;
57  DlnaLogger.log(DlnaDebug, "(%s [%d])->: %s", result.peer.toString(),
58  packetSize, tmp);
59  }
60  return result;
61  }
62 
63  protected:
64  WiFiUDP udp;
66  bool is_multicast = false;
67 };
68 
69 } // 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 It seems that the UDP receive is not worki...
Definition: UDPService.h:16
bool begin(int port) override
Definition: UDPService.h:20
IPAddressAndPort peer
Definition: UDPService.h:65
bool begin(IPAddressAndPort addr) override
Definition: UDPService.h:26
bool send(uint8_t *data, int len) override
Definition: UDPService.h:33
bool is_multicast
Definition: UDPService.h:66
RequestData receive() override
Definition: UDPService.h:47
bool send(IPAddressAndPort addr, uint8_t *data, int len) override
Definition: UDPService.h:35
WiFiUDP udp
Definition: UDPService.h:64
Definition: Allocator.h:6
@ DlnaDebug
Definition: Logger.h:16
@ DlnaInfo
Definition: Logger.h:16
@ DlnaError
Definition: Logger.h:16
LoggerClass DlnaLogger
Definition: Logger.cpp:5
IP Adress including Port information.
Definition: IPAddressAndPort.h:20
int port
Definition: IPAddressAndPort.h:24
const char * toString()
Definition: IPAddressAndPort.h:26
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