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  (void)offset;
100  (void)origin;
101  return -1;
102  }
103 
108  virtual bool seek(int len)
109  {
110  return seekFrom(len, SeekOrigin::Current) >= 0;
111  }
112 
116  virtual bool isFinished() = 0;
117 
122  int available() override
123  {
124  return -1;
125  }
126 
131  size_t write(uint8_t charToWrite) override
132  {
133  (void)charToWrite;
134  return 0;
135  }
136 
137  /*
138  * @brief Flushes the stream
139  */
140  void flush() override
141  {
142  }
143 
148  virtual String id() const
149  {
150  return nullptr;
151  }
152 
158  virtual String getName() const
159  {
160  return nullptr;
161  }
162 
167  virtual MimeType getMimeType() const
168  {
169  return ContentType::fromFullFileName(getName(), MIME_UNKNOWN);
170  }
171 
176  String readString(size_t maxLen) override;
177 
192  virtual bool moveString(String& s)
193  {
194  s = nullptr;
195  return false;
196  };
197 };
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:158
void flush() override
Definition: DataSourceStream.h:140
int read() override
Read one character and moves the stream pointer.
int available() override
Return the total length of the stream.
Definition: DataSourceStream.h:122
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:192
virtual MimeType getMimeType() const
Get MIME type for stream content.
Definition: DataSourceStream.h:167
virtual String id() const
Returns unique id of the resource.
Definition: DataSourceStream.h:148
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:131
virtual bool seek(int len)
Move read cursor.
Definition: DataSourceStream.h:108
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:133
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)