7#define MAX_TMP_SIZE 400
9#define MAX_AGE (60 * 60 * 24)
10#define MULTI_MSG_DELAY_MS 80
35 virtual const char*
name() {
return "n/a"; };
53 const char*
name()
override {
return "MSearch"; }
62 "M-SEARCH * HTTP/1.1\r\n"
64 "MAN: \"ssdp:discover\"\r\n"
91 const char*
name()
override {
return "MSearchReply"; }
99 const char* udn = device.
getUDN();
102 sendReply(udp, device,
"upnp:rootdevice", udn);
108 sendReply(udp, device, service.service_type, udn);
133 Str netmask_str = netmask.toString().
c_str();
134 Str localIP_str = localIP.toString().
c_str();
137 for (
int i = 0; i < 4; i++) {
138 if ((localIP[i] & netmask[i]) != (peerIP[i] & netmask[i])) {
140 "Discovery request from %s filtered (not in same subnet "
141 "as %s with mask %s)",
143 netmask_str.
c_str());
176 snprintf(usn_str, 200,
"%s::%s", device.
getUDN(), target);
180 "HTTP/1.1 200 OK\r\n"
181 "CACHE-CONTROL: max-age=%d\r\n"
184 "SERVER: Arduino-DLNA/1.0 UPnP/1.1 DLNA/1.5\r\n"
187 "CONTENT-LENGTH: 0\r\n\r\n";
209 const char*
name()
override {
return "MSearchReplyCP"; }
250 const char*
name()
override {
return "NotifyReplyCP"; }
283 const char*
name()
override {
return "PostAlive"; }
289 DLNABroadcastAddress.toString());
294 const char* udn = device.
getUDN();
299 sendData(udn, udn, device_url, max_age, udp);
301 sendData(
"upnp:rootdevice", udn, device_url, max_age, udp);
309 sendData(service.service_type, udn, device_url, max_age, udp);
317 bool sendData(
const char* nt,
const char* udn,
const char* device_url,
323 snprintf(usn, 200,
"%s::%s", udn, nt);
329 "NOTIFY * HTTP/1.1\r\n"
331 "CACHE-CONTROL: max-age=%d\r\n"
334 "NTS: ssdp:alive\r\n"
336 int n = snprintf(buffer,
MAX_TMP_SIZE, tmp, DLNABroadcastAddress.toString(),
337 max_age, device_url, nt, usn);
342 udp.
send(DLNABroadcastAddress, (uint8_t*)buffer, n);
354 const char*
name()
override {
return "ByeBye"; }
357 DLNABroadcastAddress.toString());
361 "NOTIFY * HTTP/1.1\r\n"
363 "CACHE-CONTROL: max-age = %d\r\n"
366 "NTS: ssdp:byebye\r\n"
368 int n = snprintf(buffer,
MAX_TMP_SIZE, tmp, DLNABroadcastAddress.toString(),
372 udp.
send(DLNABroadcastAddress, (uint8_t*)buffer, n);
391 const char*
name()
override {
return "Subscribe"; }
400 "SUBSCRIBE %s HTTP/1.1\r\n"
404 "TIMEOUT: Second-%d\r\n\r\n";
435 const char*
name()
override {
return "Callback"; }
#define MAX_TMP_SIZE
Definition: Schedule.h:7
#define MAX_AGE
Definition: Schedule.h:9
#define MULTI_MSG_DELAY_MS
Definition: Schedule.h:10
Generic Schedule that invokes a callback function.
Definition: Schedule.h:429
CallbackSchedule(std::function< bool(void *ref)> cb, void *ref)
Definition: Schedule.h:431
void * reference
Definition: Schedule.h:436
std::function< bool(void *ref)> callback
Definition: Schedule.h:446
const char * name() override
Definition: Schedule.h:435
bool process(IUDPService &udp) override
Definition: Schedule.h:438
Device Attributes and generation of XML using urn:schemas-upnp-org:device-1-0. We could just return a...
Definition: DLNADeviceInfo.h:28
Vector< DLNAServiceInfo > & getServices()
Provides all service definitions.
Definition: DLNADeviceInfo.h:205
const char * getUDN()
Provide the udn uuid.
Definition: DLNADeviceInfo.h:90
Url & getDeviceURL()
This method returns base url/device.xml.
Definition: DLNADeviceInfo.h:131
IPAddress getIPAddress()
Provides the local IP address.
Definition: DLNADeviceInfo.h:146
const char * getDeviceType()
Definition: DLNADeviceInfo.h:84
Abstract Interface for UDP API.
Definition: IUDPService.h:33
virtual bool send(uint8_t *data, int len)=0
Send data to the default destination.
Processing at control point to handle a MSearchReply from the device.
Definition: Schedule.h:207
Str usn
Definition: Schedule.h:211
const char * name() override
Definition: Schedule.h:209
Str location
Definition: Schedule.h:210
Str search_target
Definition: Schedule.h:212
bool process(IUDPService &udp) override
Definition: Schedule.h:214
Answer from device to MSearch request by sending the related replies.
Definition: Schedule.h:84
Str search_target
Definition: Schedule.h:121
bool isValid() override
Definition: Schedule.h:113
int mx
Definition: Schedule.h:123
bool process(IUDPService &udp) override
Definition: Schedule.h:93
bool isValidIP()
check netmask
Definition: Schedule.h:129
MSearchReplySchedule(DLNADeviceInfo &device, IPAddressAndPort addr)
Definition: Schedule.h:86
DLNADeviceInfo * p_device
Definition: Schedule.h:122
const char * name() override
Definition: Schedule.h:91
bool isValidSearchTarget(DLNADeviceInfo &device, const char *search_target)
Definition: Schedule.h:151
bool sendReply(IUDPService &udp, DLNADeviceInfo &device, const char *target, const char *udn)
Definition: Schedule.h:172
int max_age
Definition: Schedule.h:126
Send MSearch request.
Definition: Schedule.h:46
const char * search_target
Definition: Schedule.h:77
bool process(IUDPService &udp) override
Definition: Schedule.h:55
const char * name() override
Definition: Schedule.h:53
MSearchSchedule(IPAddressAndPort addr, const char *searchTarget, int mx=3)
Definition: Schedule.h:48
int max_age
Definition: Schedule.h:76
Represents a notification/notify reply scheduled for control-point processing.
Definition: Schedule.h:248
std::function< bool(NotifyReplyCP &ref)> callback
Definition: Schedule.h:260
Str delivery_host_and_port
Definition: Schedule.h:252
Str xml
Definition: Schedule.h:256
Str event_key
Definition: Schedule.h:255
Str subscription_id
Definition: Schedule.h:254
Str delivery_path
Definition: Schedule.h:253
const char * name() override
Definition: Schedule.h:250
bool process(IUDPService &udp) override
Definition: Schedule.h:262
Str nts
Definition: Schedule.h:251
Send out PostAlive messages: Repeated every 5 seconds.
Definition: Schedule.h:277
bool sendData(const char *nt, const char *udn, const char *device_url, int max_age, IUDPService &udp)
Definition: Schedule.h:317
DLNADeviceInfo * p_device
Definition: Schedule.h:315
PostAliveSchedule(DLNADeviceInfo &device, uint32_t repeatMs)
Definition: Schedule.h:279
const char * name() override
Definition: Schedule.h:283
bool process(IUDPService &udp) override
Definition: Schedule.h:287
void setRepeatMs(uint32_t ms)
Definition: Schedule.h:285
Send out ByeBye message.
Definition: Schedule.h:351
DLNADeviceInfo * p_device
Definition: Schedule.h:378
PostByeSchedule(DLNADeviceInfo &device)
Definition: Schedule.h:353
bool process(IUDPService &udp) override
Definition: Schedule.h:355
int max_age
Definition: Schedule.h:377
const char * name() override
Definition: Schedule.h:354
Send SUBSCRIBE message via UDP unicast.
Definition: Schedule.h:385
const char * name() override
Definition: Schedule.h:391
void setDuration(uint32_t sec)
Definition: Schedule.h:422
void setDestination(IPAddressAndPort addr, const char *path)
Definition: Schedule.h:417
PostSubscribe(IPAddressAndPort addr, const char *path, uint32_t sec)
Definition: Schedule.h:387
const char * path
Definition: Schedule.h:414
int durationSec
Definition: Schedule.h:415
bool process(IUDPService &udp) override
Definition: Schedule.h:393
A simple wrapper to provide string functions on char*. If the underlying char* is a const we do not a...
Definition: StrView.h:18
Heap-backed string utility used throughout tiny_dlna.
Definition: Str.h:27
const char * c_str() const
C-string pointer to internal buffer.
Definition: Str.h:88
const char * url()
Definition: Url.h:39
#define DLNA_DISCOVERY_NETMASK
Define the netmask for discovery filtering.
Definition: dlna_config.h:197
Definition: Allocator.h:13
IP Adress including Port information.
Definition: IPAddressAndPort.h:20
const char * toString()
Definition: IPAddressAndPort.h:26
IPAddress address
Definition: IPAddressAndPort.h:23
An individual Schedule (to send out UDP messages)
Definition: Schedule.h:18
uint64_t end_time
Definition: Schedule.h:25
IPAddressAndPort address
Definition: Schedule.h:29
bool active
Definition: Schedule.h:27
bool report_ip
Definition: Schedule.h:31
virtual const char * name()
Definition: Schedule.h:35
virtual bool isValid()
Definition: Schedule.h:37
virtual bool process(IUDPService &udp)
Definition: Schedule.h:33
uint64_t time
Definition: Schedule.h:21
uint32_t repeat_ms
Definition: Schedule.h:23