/* */ #ifndef _D_PEER_INTERACTION_COMMAND_H_ #define _D_PEER_INTERACTION_COMMAND_H_ #include "PeerAbstractCommand.h" #include "RequestGroupAware.h" namespace aria2 { class BtContext; class BtInteractive; class PeerConnection; class BtRuntime; class PeerStorage; class PieceStorage; class PeerInteractionCommand : public PeerAbstractCommand, public RequestGroupAware { public: enum Seq { INITIATOR_SEND_HANDSHAKE, INITIATOR_WAIT_HANDSHAKE, RECEIVER_WAIT_HANDSHAKE, WIRED}; private: SharedHandle _btContext; SharedHandle _btRuntime; SharedHandle _pieceStorage; SharedHandle _peerStorage; Seq sequence; SharedHandle btInteractive; unsigned int maxDownloadSpeedLimit; protected: virtual bool executeInternal(); virtual bool prepareForNextPeer(time_t wait); virtual void onAbort(); virtual void onFailure(); virtual bool exitBeforeExecute(); public: PeerInteractionCommand(int32_t cuid, RequestGroup* requestGroup, const SharedHandle& peer, DownloadEngine* e, const SharedHandle& btContext, const SharedHandle& btRuntime, const SharedHandle& pieceStorage, const SharedHandle& s, Seq sequence, const SharedHandle& peerConnection = SharedHandle()); virtual ~PeerInteractionCommand(); void setPeerStorage(const SharedHandle& peerStorage); }; } // namespace aria2 #endif // _D_PEER_INTERACTION_COMMAND_H_