PartCheckerStream.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * PartCheckerStream.h
8  *
9  * @author: 2021 - Slavey Karadzhov <slav@attachix.com>
10  *
11  ****/
12 
13 #pragma once
14 
17 #include <Delegate.h>
18 
20 {
21 public:
22  struct FilePart {
26  int length; // -1 if not available, >0 otherwise
27  };
28 
30  Delegate<bool(const HttpHeaders& headers, ReadWriteStream* source, const FilePart& filePart)>;
31 
36  PartCheckerStream(ReadWriteStream* source, CheckerCallback callback) : StreamWrapper(source), callback(callback)
37  {
38  }
39 
40  bool checkHeaders(const HttpHeaders& headers, const FilePart& part)
41  {
42  save = callback(headers, getSource(), part);
43  return save;
44  }
45 
46  bool isValid() const override
47  {
48  return save;
49  }
50 
51  StreamType getStreamType() const override
52  {
53  return eSST_HeaderChecker;
54  }
55 
56  size_t write(const uint8_t* buffer, size_t size) override
57  {
58  if(!save) {
59  debug_d("Discarding %d bytes", size);
60  return size;
61  }
62 
63  return getSource()->write(buffer, size);
64  }
65 
66  uint16_t readMemoryBlock(char* data, int bufSize) override
67  {
68  return getSource()->readMemoryBlock(data, bufSize);
69  }
70 
71  bool isFinished() override
72  {
73  return getSource()->isFinished();
74  }
75 
76 private:
77  bool save{true};
78  CheckerCallback callback;
79 };
Encapsulates a set of HTTP header information.
Definition: HttpHeaders.h:35
virtual bool isFinished()=0
Check if all data has been read.
virtual uint16_t readMemoryBlock(char *data, int bufSize)=0
Read a block of memory.
Definition: PartCheckerStream.h:20
bool checkHeaders(const HttpHeaders &headers, const FilePart &part)
Definition: PartCheckerStream.h:40
Delegate< bool(const HttpHeaders &headers, ReadWriteStream *source, const FilePart &filePart)> CheckerCallback
Definition: PartCheckerStream.h:30
size_t write(const uint8_t *buffer, size_t size) override
Write chars to stream.
Definition: PartCheckerStream.h:56
bool isFinished() override
Check if all data has been read.
Definition: PartCheckerStream.h:71
StreamType getStreamType() const override
Get the stream type.
Definition: PartCheckerStream.h:51
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
Definition: PartCheckerStream.h:66
PartCheckerStream(ReadWriteStream *source, CheckerCallback callback)
Definition: PartCheckerStream.h:36
bool isValid() const override
Determine if the stream object contains valid data.
Definition: PartCheckerStream.h:46
Base class for read/write stream.
Definition: ReadWriteStream.h:20
size_t write(uint8_t charToWrite) override
From Stream class: We don't write using this stream.
Definition: ReadWriteStream.h:22
An abstract class that provides a wrapper around a stream.
Definition: StreamWrapper.h:23
ReadWriteStream * getSource() const
Definition: StreamWrapper.h:39
The String class.
Definition: WString.h:137
#define debug_d
Definition: debug_progmem.h:100
StreamType
Data stream type.
Definition: DataSourceStream.h:25
@ eSST_HeaderChecker
A stream that receives HTTP headers in Stream::checkHeaders()
Definition: DataSourceStream.h:37
Definition: PartCheckerStream.h:22
String name
Definition: PartCheckerStream.h:23
int length
Definition: PartCheckerStream.h:26
String fileName
Definition: PartCheckerStream.h:24
String mime
Definition: PartCheckerStream.h:25