/* */ #ifndef _D_PEER_ABSTRACT_COMMAND_H_ #define _D_PEER_ABSTRACT_COMMAND_H_ #include "Command.h" #include "SharedHandle.h" #include "TimerA2.h" namespace aria2 { class DownloadEngine; class Exception; class Peer; class SocketCore; class PeerAbstractCommand : public Command { private: Timer _checkPoint; time_t _timeout; DownloadEngine* _e; SharedHandle _socket; SharedHandle _peer; bool _checkSocketIsReadable; bool _checkSocketIsWritable; SharedHandle _readCheckTarget; SharedHandle _writeCheckTarget; bool _noCheck; protected: DownloadEngine* getDownloadEngine() const { return _e; } const SharedHandle& getSocket() const { return _socket; } void createSocket(); const SharedHandle& getPeer() const { return _peer; } void setTimeout(time_t timeout) { _timeout = timeout; } virtual bool prepareForNextPeer(time_t wait); virtual void onAbort() {}; // This function is called when DownloadFailureException is caught right after // the invocation of onAbort(). virtual void onFailure() {}; virtual bool exitBeforeExecute() = 0; virtual bool executeInternal() = 0; void setReadCheckSocket(const SharedHandle& socket); void setWriteCheckSocket(const SharedHandle& socket); void disableReadCheckSocket(); void disableWriteCheckSocket(); void setNoCheck(bool check); void updateKeepAlive(); public: PeerAbstractCommand(cuid_t cuid, const SharedHandle& peer, DownloadEngine* e, const SharedHandle& s = SharedHandle()); virtual ~PeerAbstractCommand(); virtual bool execute(); }; } // namespace aria2 #endif // _D_PEER_ABSTRACT_COMMAND_H_