DataSourceStream.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  * DataSourceStream.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include <Stream.h>
14 #include <WString.h>
15 #include "SeekOrigin.h"
16 #include "../WebConstants.h"
17 
25 enum StreamType {
29  // Expands on demand and does not transform the data.
39 };
40 
45 class IDataSourceStream : public Stream
46 {
47 public:
51  virtual StreamType getStreamType() const
52  {
53  return eSST_Unknown;
54  }
55 
61  virtual bool isValid() const
62  {
63  return getStreamType() != eSST_Invalid;
64  }
65 
66  using Stream::readBytes;
67 
68  size_t readBytes(char* buffer, size_t length) override;
69 
76  virtual uint16_t readMemoryBlock(char* data, int bufSize) = 0;
77 
82  int read() override;
83 
88  int peek() override;
89 
97  virtual int seekFrom(int offset, SeekOrigin origin)
98  {
99  return -1;
100  }
101 
106  virtual bool seek(int len)
107  {
108  return seekFrom(len, SeekOrigin::Current) >= 0;
109  }
110 
114  virtual bool isFinished() = 0;
115 
120  int available() override
121  {
122  return -1;
123  }
124 
129  size_t write(uint8_t charToWrite) override
130  {
131  (void)charToWrite;
132  return 0;
133  }
134 
135  /*
136  * @brief Flushes the stream
137  */
138  void flush() override
139  {
140  }
141 
146  virtual String id() const
147  {
148  return nullptr;
149  }
150 
156  virtual String getName() const
157  {
158  return nullptr;
159  }
160 
165  virtual MimeType getMimeType() const
166  {
167  return ContentType::fromFullFileName(getName(), MIME_UNKNOWN);
168  }
169 
174  String readString(size_t maxLen) override;
175 
190  virtual bool moveString(String& s)
191  {
192  s = nullptr;
193  return false;
194  };
195 };
SeekOrigin
Stream/file seek origins.
Definition: SeekOrigin.h:18
@ Current
SEEK_CUR: Current position in file.
Base class for read-only stream.
Definition: DataSourceStream.h:46
int peek() override
Read a character without advancing the stream pointer.
virtual bool isFinished()=0
Check if all data has been read.
virtual String getName() const
Returns name of the resource.
Definition: DataSourceStream.h:156
void flush() override
Definition: DataSourceStream.h:138
int read() override
Read one character and moves the stream pointer.
int available() override
Return the total length of the stream.
Definition: DataSourceStream.h:120
String readString(size_t maxLen) override
Overrides Stream method for more efficient reading.
size_t readBytes(char *buffer, size_t length) override
Read chars from stream into buffer.
virtual bool moveString(String &s)
Memory-based streams may be able to move content into a String.
Definition: DataSourceStream.h:190
virtual MimeType getMimeType() const
Get MIME type for stream content.
Definition: DataSourceStream.h:165
virtual String id() const
Returns unique id of the resource.
Definition: DataSourceStream.h:146
virtual bool isValid() const
Determine if the stream object contains valid data.
Definition: DataSourceStream.h:61
virtual StreamType getStreamType() const
Get the stream type.
Definition: DataSourceStream.h:51
virtual uint16_t readMemoryBlock(char *data, int bufSize)=0
Read a block of memory.
virtual int seekFrom(int offset, SeekOrigin origin)
Change position in stream.
Definition: DataSourceStream.h:97
size_t write(uint8_t charToWrite) override
From Stream class: We don't write using this stream.
Definition: DataSourceStream.h:129
virtual bool seek(int len)
Move read cursor.
Definition: DataSourceStream.h:106
Base Stream class.
Definition: Wiring/Stream.h:33
virtual size_t readBytes(char *buffer, size_t length)
Read chars from stream into buffer.
The String class.
Definition: WString.h:137
StreamType
Data stream type.
Definition: DataSourceStream.h:25
@ eSST_MemoryWritable
Definition: DataSourceStream.h:28
@ eSST_File
< Memory stream where data can be safely written to.
Definition: DataSourceStream.h:30
@ eSST_Memory
Memory stream.
Definition: DataSourceStream.h:27
@ eSST_Template
Template data stream.
Definition: DataSourceStream.h:31
@ eSST_JsonObject
JSON object data stream.
Definition: DataSourceStream.h:32
@ eSST_Wrapper
A stream that is a wrapper around a source stream.
Definition: DataSourceStream.h:36
@ eSST_HeaderChecker
A stream that receives HTTP headers in Stream::checkHeaders()
Definition: DataSourceStream.h:37
@ eSST_Unknown
Unknown data stream type.
Definition: DataSourceStream.h:38
@ eSST_Invalid
Stream content not valid.
Definition: DataSourceStream.h:26
@ eSST_User
User defined data stream.
Definition: DataSourceStream.h:33
@ eSST_Chain
A stream (chain) containing multiple streams.
Definition: DataSourceStream.h:34
@ eSST_Transform
A stream that is transforming the data.
Definition: DataSourceStream.h:35
MimeType
Definition: WebConstants.h:53
MimeType fromFullFileName(const char *fileName, MimeType unknown)