Arduino DLNA Server
Loading...
Searching...
No Matches
EscapingPrint.h
Go to the documentation of this file.
1#pragma once
2#include "Print.h"
3
4namespace tiny_dlna {
5
9struct EscapingPrint : public Print {
10 EscapingPrint(Print& d) : dest(d) {}
11
12 size_t write(uint8_t c) override {
13 // Always return the logical expanded length, regardless of what
14 // dest.write() returns
15 switch (c) {
16 case '&':
17 if (dest.print("&") != 5) {
18 DlnaLogger.log(DlnaLogLevel::Warning,
19 "EscapingPrint: failed to write &");
20 }
21 return 5;
22 case '<':
23 if(dest.print("&lt;") != 4){
24 DlnaLogger.log(DlnaLogLevel::Warning,
25 "EscapingPrint: failed to write &lt;");
26 }
27 return 4;
28 case '>':
29 if(dest.print("&gt;") != 4){
30 DlnaLogger.log(DlnaLogLevel::Warning,
31 "EscapingPrint: failed to write &gt;");
32 }
33 return 4;
34 case '"':
35 if(dest.print("&quot;") != 6){
36 DlnaLogger.log(DlnaLogLevel::Warning,
37 "EscapingPrint: failed to write &quot;");
38 }
39 return 6;
40 case '\'':
41 if(dest.print("&apos;") != 6){
42 DlnaLogger.log(DlnaLogLevel::Warning,
43 "EscapingPrint: failed to write &apos;");
44 }
45 return 6;
46 default:
47 if(dest.write(&c, 1) != 1){
48 DlnaLogger.log(DlnaLogLevel::Warning,
49 "EscapingPrint: failed to write char %c", c);
50 }
51 return 1;
52 }
53 }
54
55 size_t write(const uint8_t* buffer, size_t size) override {
56 size_t r = 0;
57 for (size_t i = 0; i < size; ++i) {
58 r += write(buffer[i]);
59 }
60 return r;
61 }
62
63 protected:
64 Print& dest;
65};
66
67} // namespace tiny_dlna
Definition: Allocator.h:13
Print wrapper that escapes & < > " ' while forwarding to an underlying Print. Returns the expanded ou...
Definition: EscapingPrint.h:9
Print & dest
Definition: EscapingPrint.h:64
size_t write(uint8_t c) override
Definition: EscapingPrint.h:12
EscapingPrint(Print &d)
Definition: EscapingPrint.h:10
size_t write(const uint8_t *buffer, size_t size) override
Definition: EscapingPrint.h:55