diff options
| author | Alexander Tkachev | 2016-07-08 11:53:53 +0600 | 
|---|---|---|
| committer | Alexander Tkachev | 2016-08-24 16:07:55 +0600 | 
| commit | 80cc3469e7a00c7c7eab5d8bfad0dcae8f05875f (patch) | |
| tree | 536db5ad2e898d97e29bc3555144903740ab4672 /backends/networking | |
| parent | 83957c9666fce2e4b536c0974f22fc70f57b119c (diff) | |
| download | scummvm-rg350-80cc3469e7a00c7c7eab5d8bfad0dcae8f05875f.tar.gz scummvm-rg350-80cc3469e7a00c7c7eab5d8bfad0dcae8f05875f.tar.bz2 scummvm-rg350-80cc3469e7a00c7c7eab5d8bfad0dcae8f05875f.zip  | |
CLOUD: Add Reader::readOneByteInStream()
Diffstat (limited to 'backends/networking')
| -rw-r--r-- | backends/networking/sdl_net/reader.cpp | 38 | ||||
| -rw-r--r-- | backends/networking/sdl_net/reader.h | 7 | 
2 files changed, 34 insertions, 11 deletions
diff --git a/backends/networking/sdl_net/reader.cpp b/backends/networking/sdl_net/reader.cpp index 025f53492a..19c5b0a088 100644 --- a/backends/networking/sdl_net/reader.cpp +++ b/backends/networking/sdl_net/reader.cpp @@ -25,6 +25,8 @@  #include "backends/networking/sdl_net/reader.h"  #include "backends/networking/sdl_net/localwebserver.h"  #include "common/debug.h" +#include "common/stream.h" +#include "common/memstream.h"  namespace Networking { @@ -39,6 +41,7 @@ Reader::Reader() {  	_headers = "";  	_buffer = ""; +	_stream = nullptr;  	_contentLength = 0;  	_availableBytes = 0; @@ -46,7 +49,11 @@ Reader::Reader() {  	_isBadRequest = false;  } -Reader::~Reader() {} +Reader::~Reader() { +	//TODO: free everything +	if (_window != nullptr) freeWindow(); +	delete _stream; +}  bool Reader::readRequest() {  	if (_state == RS_NONE) _state = RS_READING_HEADERS; @@ -261,6 +268,9 @@ bool Reader::readContent() {  	if (_window == nullptr) {  		makeWindow(boundary.size());  		_buffer = ""; + +		if (_stream) delete _stream; +		_stream = new Common::MemoryReadWriteStream(DisposeAfterUse::YES);  	}  	/* @@ -273,10 +283,20 @@ bool Reader::readContent() {  		handleFileContent(tempFileName);  	} else {  	*/ -		while (readOneByteInString(_buffer, boundary)) {		 +		while (readOneByteInStream(_stream, boundary)) {  			if (!bytesLeft()) return false;  		} -		handleValueContent(_buffer); +		Common::MemoryReadWriteStream *dynamicStream = dynamic_cast<Common::MemoryReadWriteStream *>(_stream); +		if (dynamicStream != nullptr) +			if (dynamicStream->size() == 0) +				handleValueContent(""); +			else +				handleValueContent(Common::String((char *)dynamicStream->getData(), dynamicStream->size())); +		else +			if (_stream != nullptr) +				warning("Stream somehow changed its type from MemoryReadWriteStream!"); +			else +				warning("No stream was created!");  	//}  	freeWindow(); @@ -307,24 +327,22 @@ void Reader::freeWindow() {  	_windowUsed = _windowSize = 0;  } -/* -bool Reader::readOneByteInStream(stream) { -	b = read(1); +bool Reader::readOneByteInStream(Common::WriteStream *stream, const Common::String &boundary) { +	byte b = readOne();  	_window[_windowUsed++] = b;  	if (_windowUsed < _windowSize) return true;  	//when window is filled, check whether that's the boundary -	if (_window == "--" + _boundary) +	if (Common::String((char *)_window, _windowSize) == boundary)  		return false; -	//if not, write the first byte of the window to the stream -	stream.write(_window[0]); +	//if not, add the first byte of the window to the string +	stream->writeByte(_window[0]);  	for (uint32 i = 1; i < _windowSize; ++i)  		_window[i - 1] = _window[i];  	--_windowUsed;  	return true;  } -*/  bool Reader::readOneByteInString(Common::String &buffer, const Common::String &boundary) {  	byte b = readOne(); diff --git a/backends/networking/sdl_net/reader.h b/backends/networking/sdl_net/reader.h index 74fcd4320f..5f5770149b 100644 --- a/backends/networking/sdl_net/reader.h +++ b/backends/networking/sdl_net/reader.h @@ -28,6 +28,10 @@  #include "common/hashmap.h"  #include "common/hash-str.h" +namespace Common { +class WriteStream; +} +  namespace Networking {  enum ReaderState { @@ -46,6 +50,7 @@ class Reader {  	Common::String _headers;  	Common::String _buffer; +	Common::WriteStream *_stream;  	///Common::String _headers;  	Common::String _method, _path, _query, _anchor; @@ -70,7 +75,7 @@ class Reader {  	void makeWindow(uint32 size);  	void freeWindow(); -	///bool Reader::readOneByteInStream(stream); +	bool Reader::readOneByteInStream(Common::WriteStream *stream, const Common::String &boundary);  	bool Reader::readOneByteInString(Common::String &buffer, const Common::String &boundary);  	byte readOne();  | 
