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
8struct EscapingPrint : public Print {
9 EscapingPrint(Print& d) : dest(d) {}
10
11 size_t write(uint8_t c) override {
12 // Always return the logical expanded length, regardless of what dest.write() returns
13 switch (c) {
14 case '&':
15 assert(dest.print("&")==5);
16 return 5;
17 case '<':
18 assert(dest.print("&lt;")==4);
19 return 4;
20 case '>':
21 assert(dest.print("&gt;")==4);
22 return 4;
23 case '"':
24 assert(dest.print("&quot;")==6);
25 return 6;
26 case '\'':
27 assert(dest.print("&apos;")==6);
28 return 6;
29 default:
30 assert(dest.write(&c, 1)==1);
31 return 1;
32 }
33 }
34
35 size_t write(const uint8_t* buffer, size_t size) override {
36 size_t r = 0;
37 for (size_t i = 0; i < size; ++i) {
38 r += write(buffer[i]);
39 }
40 return r;
41 }
42
43 protected:
44 Print& dest;
45};
46
47} // namespace tiny_dlna
Definition: Allocator.h:13
Print wrapper that escapes & < > " ' while forwarding to an underlying Print. Returns the expanded ou...
Definition: EscapingPrint.h:8
Print & dest
Definition: EscapingPrint.h:44
size_t write(uint8_t c) override
Definition: EscapingPrint.h:11
EscapingPrint(Print &d)
Definition: EscapingPrint.h:9
size_t write(const uint8_t *buffer, size_t size) override
Definition: EscapingPrint.h:35