00001
00002 #ifndef REMOTEDATACHANNEL_V1_04_01_H_
00003 #define REMOTEDATACHANNEL_V1_04_01_H_
00004
00005 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
00006 # pragma once
00007 #endif
00008
00009 #include "ftc/FTCException.h"
00010 #include "ftc/IDataChannel.h"
00011 #include "ftc/Buffer.h"
00012 #include "ftc/ftc_decl.h"
00013 #include "ftc/AccessKey.h"
00014
00015 #include <string>
00016 #include <vector>
00017 #include <cstdio>
00018
00019 #if defined(FTC_DOXYGEN)
00020 #define FTC_DECL
00021 #endif
00022
00023 namespace tecgraf { namespace ftc { namespace v1_04_01
00024 {
00036 struct RemoteDataChannel : public IDataChannel
00037 {
00038 public:
00051 FTC_DECL
00052 RemoteDataChannel(const bool writable, const std::string& hostname, uint16_t port, const std::vector<uint8_t>& access_key);
00053
00057 FTC_DECL
00058 virtual ~RemoteDataChannel();
00059
00073 FTC_DECL
00074 virtual void open();
00075
00084 FTC_DECL
00085 virtual void close();
00086
00088 FTC_DECL
00089 virtual uint16_t supportedOperations() const;
00090
00092 FTC_DECL
00093 virtual bool isOpen() const;
00094
00096 FTC_DECL
00097 virtual int64_t remaining() const;
00098
00100 FTC_DECL
00101 virtual uint64_t skip(const uint64_t count);
00102
00110 FTC_DECL
00111 virtual uint64_t position() const;
00112
00120 FTC_DECL
00121 virtual void position(const uint64_t position);
00122
00130 FTC_DECL
00131 virtual uint64_t size() const;
00132
00142 FTC_DECL
00143 virtual void size(const uint64_t size);
00144
00146 FTC_DECL
00147 virtual int64_t read(Buffer& dest);
00148
00150 FTC_DECL
00151 virtual int64_t read(Buffer& dest, const uint64_t remotePosition);
00152
00161 FTC_DECL
00162 virtual int64_t read(char* dest, const std::size_t nbytes);
00163
00173 FTC_DECL
00174 virtual int64_t read(char* dest, const std::size_t nbytes, const uint64_t remotePosition);
00175
00186 FTC_DECL
00187 virtual int64_t read(char* dest, const std::size_t offset, const std::size_t nbytes, const uint64_t remotePosition);
00188
00190 FTC_DECL
00191 virtual int64_t write(Buffer& source);
00192
00194 FTC_DECL
00195 virtual int64_t write(Buffer& source, const uint64_t remotePosition);
00196
00205 FTC_DECL
00206 virtual int64_t write(const char* source, const uint64_t nbytes);
00207
00217 FTC_DECL
00218 virtual int64_t write(const char* source, const uint64_t nbytes, const uint64_t remotePosition);
00219
00230 FTC_DECL
00231 virtual int64_t write(const char* source, const std::size_t offset, const uint64_t nbytes, const uint64_t remotePosition);
00232
00234 FTC_DECL
00235 virtual int64_t transferTo(const uint64_t remotePosition, const uint64_t nbytes, IDataChannel& dest);
00236
00238 FTC_DECL
00239 virtual int64_t transferFrom(IDataChannel& source, const uint64_t remotePosition, const uint64_t nbytes);
00240
00251 FTC_DECL
00252 virtual int64_t transferTo(const uint64_t remotePosition, const uint64_t nbytes, FILE& fd);
00253
00259 FTC_DECL
00260 void keepAlive();
00261
00267 FTC_DECL
00268 std::size_t bufferSize() const;
00269
00275 FTC_DECL
00276 void bufferSize(std::size_t value);
00277
00278
00279 private:
00281 RemoteDataChannel(RemoteDataChannel const&);
00283 RemoteDataChannel & operator=(RemoteDataChannel const&);
00284
00286 void protocolVersionHandshake();
00288 void authenticate();
00290 void doOpen();
00291
00293 void checkIsOpen() const;
00294
00296 struct ftc_socket_t;
00298 ftc_socket_t* ftc_socket;
00299
00300 const bool writable;
00301 const std::string hostname;
00302 const uint16_t port;
00303 const std::vector<uint8_t> access_key;
00304 uint16_t supported_operations;
00305 std::size_t buffer_size;
00306 };
00307
00308 }}}
00309
00310 #endif
00311