2019-11-02 05:10:41 +07:00
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers , whose names
* are too numerous to list here . Please refer to the COPYRIGHT
* file distributed with this source distribution .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*
*/
# ifndef BACKENDS_NETWORKING_CURL_SESSIONREQUEST_H
# define BACKENDS_NETWORKING_CURL_SESSIONREQUEST_H
# include "backends/networking/curl/curlrequest.h"
# include "common/memstream.h"
2021-11-18 21:19:18 +01:00
namespace Common {
class DumpFile ;
class JSONValue ;
}
2019-11-02 05:10:41 +07:00
namespace Networking {
# define CURL_SESSION_REQUEST_BUFFER_SIZE 512 * 1024
2021-11-18 21:19:18 +01:00
struct SessionFileResponse {
byte * buffer ;
uint32 len ;
bool eos ;
} ;
/**
* @ brief Class for reading file and storing locally
*
* @ return Returns SessionFileResponse in the callback
*/
2019-11-02 05:10:41 +07:00
class SessionRequest : public CurlRequest {
protected :
Common : : MemoryWriteStreamDynamic _contentsStream ;
byte * _buffer ;
char * _text ;
bool _started , _complete , _success ;
2021-11-16 21:41:09 +01:00
bool _binary ;
2021-11-18 21:19:18 +01:00
Common : : DumpFile * _localFile ;
SessionFileResponse _response ;
2019-11-02 05:10:41 +07:00
2019-11-03 02:16:00 +07:00
bool reuseStream ( ) ;
2019-11-02 05:10:41 +07:00
/** Prepares raw bytes from _contentsStream. */
char * getPreparedContents ( ) ;
2021-11-16 22:53:32 +01:00
virtual void finishError ( ErrorResponse error , RequestState state = PAUSED ) ;
2019-11-02 05:10:41 +07:00
virtual void finishSuccess ( ) ;
2021-11-18 21:19:18 +01:00
void openLocalFile ( Common : : String localFile ) ;
2019-11-02 05:10:41 +07:00
public :
2021-11-18 21:19:18 +01:00
SessionRequest ( Common : : String url , Common : : String localFile , DataCallback cb = nullptr , ErrorCallback ecb = nullptr , bool binary = false ) ;
2019-11-02 05:10:41 +07:00
virtual ~ SessionRequest ( ) ;
2019-11-03 02:16:00 +07:00
void start ( ) ;
void startAndWait ( ) ;
2021-11-18 21:19:18 +01:00
void reuse ( Common : : String url , Common : : String localFile , DataCallback cb = nullptr , ErrorCallback ecb = nullptr , bool binary = false ) ;
2019-11-03 02:16:00 +07:00
2019-11-02 05:10:41 +07:00
virtual void handle ( ) ;
virtual void restart ( ) ;
/** This request DOES NOT delete automatically after calling callbacks. It gets PAUSED, and in order to make it FINISHED (i.e. delete), this method MUST be called. */
2021-05-04 11:45:03 +03:00
void close ( ) ;
2019-11-02 05:10:41 +07:00
bool complete ( ) ;
bool success ( ) ;
char * text ( ) ;
Common : : JSONValue * json ( ) ;
2021-11-16 21:41:09 +01:00
byte * getData ( ) { return _contentsStream . getData ( ) ; }
uint32 getSize ( ) { return _contentsStream . size ( ) ; }
2019-11-02 05:10:41 +07:00
} ;
} // End of namespace Networking
# endif