/* */ #ifndef D_XML_RPC_DISK_WRITER_H #define D_XML_RPC_DISK_WRITER_H #include "DiskWriter.h" #include "RpcRequest.h" #include "XmlRpcRequestParserStateMachine.h" #include "XmlParser.h" namespace aria2 { namespace rpc { // DiskWriter backed with XML-RPC XmlParser. The written bytes are // consumed by XML-RPC XmlParser. It is only capable of sequential // write so offset argument in write() will be ignored. It also does // not offer read(). class XmlRpcDiskWriter : public DiskWriter { public: XmlRpcDiskWriter(); virtual ~XmlRpcDiskWriter(); virtual void initAndOpenFile(int64_t totalLength = 0); virtual void openFile(int64_t totalLength = 0) { initAndOpenFile(totalLength); } virtual void closeFile() {} virtual void openExistingFile(int64_t totalLength = 0) { initAndOpenFile(totalLength); } virtual int64_t size() { return 0; } virtual void writeData(const unsigned char* data, size_t len, int64_t offset); virtual ssize_t readData(unsigned char* data, size_t len, int64_t offset) { return 0; } int finalize(); RpcRequest getResult() const; int reset(); private: XmlRpcRequestParserStateMachine psm_; xml::XmlParser parser_; }; } // namespace rpc } // namespace aria2 #endif // D_XML_RPC_DISK_WRITER_H