Arduino DLNA Server
DLNAControlPointRequestParser.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "IUDPService.h"
4 #include "Schedule.h"
5 #include "Scheduler.h"
6 
7 namespace tiny_dlna {
8 
16  public:
18  if (req.data.startsWith("NOTIFY")) {
19  return parseNotifyReply(req);
20  } else if (req.data.startsWith("HTTP/1.1 200 OK")) {
21  return parseMSearchReply(req);
22  } else if (req.data.startsWith("M-SEARCH")) {
23  DlnaLogger.log(DlnaDebug, "M-SEARCH request ignored");
24  } else {
25  DlnaLogger.log(DlnaInfo, "Not handled: %s", req.data);
26  }
27  return nullptr;
28  }
29 
30  protected:
32  MSearchReplyCP* result = new MSearchReplyCP();
33  parse(req.data, "LOCATION:", result->location);
34  parse(req.data, "USN:", result->usn);
35  parse(req.data, "ST:", result->search_target);
36  return result;
37  }
38 
40  NotifyReplyCP* result = new NotifyReplyCP();
41  parse(req.data, "NOTIFY:", result->delivery_path);
42  parse(req.data, "NTS:", result->nts);
43  parse(req.data, "NT:", result->search_target);
44  parse(req.data, "Location:", result->location);
45  parse(req.data, "USN:", result->usn);
46  parse(req.data, "Host:", result->delivery_host_and_port);
47  parse(req.data, "SID:", result->subscription_id);
48  parse(req.data, "SEQ:", result->event_key);
49  parse(req.data, "<e:propertyset", result->xml, "</e:propertyset>");
50  return result;
51  }
52 
53  bool parse(Str& in, const char* tag, Str& result, const char* end = "\r\n") {
54  result.clearAll();
55  int start_pos = in.indexOf(tag);
56  if (start_pos >= 0) {
57  int end_pos = in.indexOf(end, start_pos);
58  start_pos += strlen(tag);
59  if (end_pos < 0) end_pos = in.indexOf("\n", start_pos);
60  if (end_pos >= 0) {
61  result.substring(in.c_str(), start_pos, end_pos);
62  DlnaLogger.log(DlnaDebug, "%s substring (%d,%d)->%s", tag, start_pos, end_pos,
63  result.c_str());
64 
65  result.trim();
66  return true;
67  }
68  }
69  return false;
70  }
71 };
72 
73 } // namespace tiny_dlna
Translates DLNA UDP Requests to Schedule so that we can schedule a reply.
Definition: DLNAControlPointRequestParser.h:15
MSearchReplyCP * parseMSearchReply(RequestData &req)
Definition: DLNAControlPointRequestParser.h:31
Schedule * parse(RequestData &req)
Definition: DLNAControlPointRequestParser.h:17
NotifyReplyCP * parseNotifyReply(RequestData &req)
Definition: DLNAControlPointRequestParser.h:39
bool parse(Str &in, const char *tag, Str &result, const char *end="\r\n")
Definition: DLNAControlPointRequestParser.h:53
void log(DlnaLogLevel current_level, const char *fmt...)
Print log message.
Definition: Logger.h:40
Processing at control point to handle a MSearchReply from the device.
Definition: Schedule.h:121
Str usn
Definition: Schedule.h:125
Str location
Definition: Schedule.h:124
Str search_target
Definition: Schedule.h:126
Definition: Schedule.h:135
Str delivery_host_and_port
Definition: Schedule.h:139
Str xml
Definition: Schedule.h:143
Str event_key
Definition: Schedule.h:142
Str subscription_id
Definition: Schedule.h:141
Str delivery_path
Definition: Schedule.h:140
Str nts
Definition: Schedule.h:138
virtual void clearAll()
Definition: StrView.h:549
virtual int indexOf(const char c, int start=0)
Definition: StrView.h:267
virtual bool startsWith(const char *str)
checks if the string starts with the indicated substring
Definition: StrView.h:177
virtual void trim()
remove leading and traling spaces
Definition: StrView.h:510
virtual void substring(StrView &from, int start, int end)
copies a substring into the current string
Definition: StrView.h:483
String implementation which keeps the data on the heap. We grow the allocated memory only if the copy...
Definition: Str.h:22
const char * c_str()
provides the string value as const char*
Definition: Str.h:188
Definition: Allocator.h:6
@ DlnaDebug
Definition: Logger.h:16
@ DlnaInfo
Definition: Logger.h:16
LoggerClass DlnaLogger
Definition: Logger.cpp:5
Provides information of the received UDP which consists of the (xml) data and the peer address and po...
Definition: IUDPService.h:23
Str data
Definition: IUDPService.h:24
An individual Schedule (to send out UDP messages)
Definition: Schedule.h:17