| Index: net/ftp/ftp_network_transaction.h
|
| diff --git a/net/ftp/ftp_network_transaction.h b/net/ftp/ftp_network_transaction.h
|
| index 53f0b2939df9edd196559bde8049566dbce01b37..90c53e4cccf135e2c80adb381b2735fdc8694667 100644
|
| --- a/net/ftp/ftp_network_transaction.h
|
| +++ b/net/ftp/ftp_network_transaction.h
|
| @@ -6,6 +6,8 @@
|
| #define NET_FTP_FTP_NETWORK_TRANSACTION_H_
|
|
|
| #include <string>
|
| +#include <queue>
|
| +#include <utility>
|
|
|
| #include "base/ref_counted.h"
|
| #include "base/scoped_ptr.h"
|
| @@ -70,11 +72,24 @@ class FtpNetworkTransaction : public FtpTransaction {
|
| // the requested action did not take place.
|
| };
|
|
|
| + struct ResponseLine {
|
| + ResponseLine(int code, const std::string& text) : code(code), text(text) {
|
| + }
|
| +
|
| + int code; // Three-digit status code.
|
| + std::string text; // Text after the code, without ending CRLF.
|
| + };
|
| +
|
| void DoCallback(int result);
|
| void OnIOComplete(int result);
|
| - int GetRespnseCode();
|
| - int ProcessResponse(int response_code);
|
| - int ParsePasvResponse();
|
| +
|
| + // Executes correct ProcessResponse + command_name function based on last
|
| + // issued command. Returns error code.
|
| + int ProcessCtrlResponses();
|
| +
|
| + // Parses as much as possible from response_message_buf_. Puts index of the
|
| + // first unparsed character in cut_pos. Returns error code.
|
| + int ParseCtrlResponse(int* cut_pos);
|
|
|
| int SendFtpCommand(const std::string& command, Command cmd);
|
|
|
| @@ -99,31 +114,31 @@ class FtpNetworkTransaction : public FtpTransaction {
|
| int DoCtrlRead();
|
| int DoCtrlReadComplete(int result);
|
| int DoCtrlWriteUSER();
|
| - int ProcessResponseUSER(int response_code);
|
| + int ProcessResponseUSER(const ResponseLine& response);
|
| int DoCtrlWritePASS();
|
| - int ProcessResponsePASS(int response_code);
|
| + int ProcessResponsePASS(const ResponseLine& response);
|
| int DoCtrlWriteACCT();
|
| - int ProcessResponseACCT(int response_code);
|
| + int ProcessResponseACCT(const ResponseLine& response);
|
| int DoCtrlWriteSYST();
|
| - int ProcessResponseSYST(int response_code);
|
| + int ProcessResponseSYST(const ResponseLine& response);
|
| int DoCtrlWritePWD();
|
| - int ProcessResponsePWD(int response_code);
|
| + int ProcessResponsePWD(const ResponseLine& response);
|
| int DoCtrlWriteTYPE();
|
| - int ProcessResponseTYPE(int response_code);
|
| + int ProcessResponseTYPE(const ResponseLine& response);
|
| int DoCtrlWritePASV();
|
| - int ProcessResponsePASV(int response_code);
|
| + int ProcessResponsePASV(const ResponseLine& response);
|
| int DoCtrlWriteRETR();
|
| - int ProcessResponseRETR(int response_code);
|
| + int ProcessResponseRETR(const ResponseLine& response);
|
| int DoCtrlWriteSIZE();
|
| - int ProcessResponseSIZE(int response_code);
|
| + int ProcessResponseSIZE(const ResponseLine& response);
|
| int DoCtrlWriteCWD();
|
| - int ProcessResponseCWD(int response_code);
|
| + int ProcessResponseCWD(const ResponseLine& response);
|
| int DoCtrlWriteLIST();
|
| - int ProcessResponseLIST(int response_code);
|
| + int ProcessResponseLIST(const ResponseLine& response);
|
| int DoCtrlWriteMDTM();
|
| - int ProcessResponseMDTM(int response_code);
|
| + int ProcessResponseMDTM(const ResponseLine& response);
|
| int DoCtrlWriteQUIT();
|
| - int ProcessResponseQUIT(int response_code);
|
| + int ProcessResponseQUIT(const ResponseLine& response);
|
|
|
| int DoDataResolveHost();
|
| int DoDataResolveHostComplete(int result);
|
| @@ -146,13 +161,17 @@ class FtpNetworkTransaction : public FtpTransaction {
|
| SingleRequestHostResolver resolver_;
|
| AddressList addresses_;
|
|
|
| - // User buffer and length passed to the Read method.
|
| - scoped_refptr<IOBuffer> read_ctrl_buf_;
|
| - int read_ctrl_buf_size_;
|
| + // As we read full response lines, we parse them and add to the queue.
|
| + std::queue<ResponseLine> ctrl_responses_;
|
|
|
| - scoped_refptr<IOBuffer> response_message_buf_;
|
| + // Buffer holding not-yet-parsed control socket responses.
|
| + scoped_refptr<IOBufferWithSize> response_message_buf_;
|
| int response_message_buf_len_;
|
|
|
| + // User buffer passed to the Read method. It actually writes to the
|
| + // response_message_buf_ at correct offset.
|
| + scoped_refptr<ReusedIOBuffer> read_ctrl_buf_;
|
| +
|
| scoped_refptr<IOBuffer> read_data_buf_;
|
| int read_data_buf_len_;
|
| int file_data_len_;
|
|
|