/* */ #ifndef _D_FTP_NEGOTIATION_COMMAND_H_ #define _D_FTP_NEGOTIATION_COMMAND_H_ #include "AbstractCommand.h" #include "FtpConnection.h" class FtpNegotiationCommand : public AbstractCommand { private: enum Seq { SEQ_RECV_GREETING, SEQ_SEND_USER, SEQ_RECV_USER, SEQ_SEND_PASS, SEQ_RECV_PASS, SEQ_SEND_TYPE, SEQ_RECV_TYPE, SEQ_SEND_CWD, SEQ_RECV_CWD, SEQ_SEND_SIZE, SEQ_RECV_SIZE, SEQ_SEND_PORT, SEQ_RECV_PORT, SEQ_SEND_PASV, SEQ_RECV_PASV, SEQ_SEND_REST_PASV, SEQ_SEND_REST, SEQ_RECV_REST, SEQ_SEND_RETR, SEQ_RECV_RETR, SEQ_NEGOTIATION_COMPLETED, SEQ_RETRY }; bool recvGreeting(); bool sendUser(); bool recvUser(); bool sendPass(); bool recvPass(); bool sendType(); bool recvType(); bool sendCwd(); bool recvCwd(); bool sendSize(); bool recvSize(); bool sendPort(); bool recvPort(); bool sendPasv(); bool recvPasv(); bool sendRest(const Segment& segment); bool sendRestPasv(const Segment& segment); bool recvRest(); bool sendRetr(); bool recvRetr(); bool processSequence(const Segment& segment); SocketHandle dataSocket; SocketHandle serverSocket; int sequence; FtpConnection* ftp; protected: bool executeInternal(Segment& segment); public: FtpNegotiationCommand(int cuid, Request* req, DownloadEngine* e, const SocketHandle& s); ~FtpNegotiationCommand(); }; #endif // _D_FTP_NEGOTIATION_COMMAND_H_