| Index: net/tools/quic/quic_client.cc
|
| diff --git a/net/tools/quic/quic_client.cc b/net/tools/quic/quic_client.cc
|
| index eb86c7f4c181e9e14ba78c9bf55ca906d7198331..29d11bc5b177f8a469338d9c818eae961547e14c 100644
|
| --- a/net/tools/quic/quic_client.cc
|
| +++ b/net/tools/quic/quic_client.cc
|
| @@ -28,6 +28,8 @@
|
| #define SO_RXQ_OVFL 40
|
| #endif
|
|
|
| +using std::string;
|
| +
|
| namespace net {
|
| namespace tools {
|
|
|
| @@ -36,7 +38,6 @@ const int kEpollFlags = EPOLLIN | EPOLLOUT | EPOLLET;
|
| QuicClient::QuicClient(IPEndPoint server_address,
|
| const QuicServerId& server_id,
|
| const QuicVersionVector& supported_versions,
|
| - bool print_response,
|
| EpollServer* epoll_server)
|
| : server_address_(server_address),
|
| server_id_(server_id),
|
| @@ -48,13 +49,13 @@ QuicClient::QuicClient(IPEndPoint server_address,
|
| packets_dropped_(0),
|
| overflow_supported_(false),
|
| supported_versions_(supported_versions),
|
| - print_response_(print_response) {
|
| + store_response_(false),
|
| + latest_response_code_(-1) {
|
| }
|
|
|
| QuicClient::QuicClient(IPEndPoint server_address,
|
| const QuicServerId& server_id,
|
| const QuicVersionVector& supported_versions,
|
| - bool print_response,
|
| const QuicConfig& config,
|
| EpollServer* epoll_server)
|
| : server_address_(server_address),
|
| @@ -68,7 +69,8 @@ QuicClient::QuicClient(IPEndPoint server_address,
|
| packets_dropped_(0),
|
| overflow_supported_(false),
|
| supported_versions_(supported_versions),
|
| - print_response_(print_response) {
|
| + store_response_(false),
|
| + latest_response_code_(-1) {
|
| }
|
|
|
| QuicClient::~QuicClient() {
|
| @@ -245,21 +247,33 @@ void QuicClient::CleanUpUDPSocket() {
|
| }
|
| }
|
|
|
| +void QuicClient::SendRequest(const BalsaHeaders& headers,
|
| + StringPiece body,
|
| + bool fin) {
|
| + QuicSpdyClientStream* stream = CreateReliableClientStream();
|
| + if (stream == nullptr) {
|
| + LOG(DFATAL) << "stream creation failed!";
|
| + return;
|
| + }
|
| + stream->SendRequest(headers, body, fin);
|
| + stream->set_visitor(this);
|
| +}
|
| +
|
| +void QuicClient::SendRequestAndWaitForResponse(const BalsaHeaders& headers,
|
| + StringPiece body,
|
| + bool fin) {
|
| + SendRequest(headers, "", true);
|
| + while (WaitForEvents()) {
|
| + }
|
| +}
|
| +
|
| void QuicClient::SendRequestsAndWaitForResponse(
|
| const base::CommandLine::StringVector& args) {
|
| for (size_t i = 0; i < args.size(); ++i) {
|
| BalsaHeaders headers;
|
| headers.SetRequestFirstlineFromStringPieces("GET", args[i], "HTTP/1.1");
|
| - QuicSpdyClientStream* stream = CreateReliableClientStream();
|
| - DCHECK(stream != nullptr);
|
| - if (stream == nullptr) {
|
| - LOG(ERROR) << "stream creation failed!";
|
| - break;
|
| - }
|
| - stream->SendRequest(headers, "", true);
|
| - stream->set_visitor(this);
|
| + SendRequest(headers, "", true);
|
| }
|
| -
|
| while (WaitForEvents()) {}
|
| }
|
|
|
| @@ -318,19 +332,12 @@ void QuicClient::OnClose(QuicDataStream* stream) {
|
| stream->id(), client_stream->headers(), client_stream->data());
|
| }
|
|
|
| - if (!print_response_) {
|
| - return;
|
| - }
|
| -
|
| - const BalsaHeaders& headers = client_stream->headers();
|
| - printf("%s\n", headers.first_line().as_string().c_str());
|
| - for (BalsaHeaders::const_header_lines_iterator i =
|
| - headers.header_lines_begin();
|
| - i != headers.header_lines_end(); ++i) {
|
| - printf("%s: %s\n", i->first.as_string().c_str(),
|
| - i->second.as_string().c_str());
|
| + // Store response headers and body.
|
| + if (store_response_) {
|
| + latest_response_code_ = client_stream->headers().parsed_response_code();
|
| + client_stream->headers().DumpHeadersToString(&latest_response_headers_);
|
| + latest_response_body_ = client_stream->data();
|
| }
|
| - printf("%s\n", client_stream->data().c_str());
|
| }
|
|
|
| bool QuicClient::connected() const {
|
| @@ -342,6 +349,21 @@ bool QuicClient::goaway_received() const {
|
| return session_ != nullptr && session_->goaway_received();
|
| }
|
|
|
| +size_t QuicClient::latest_response_code() const {
|
| + LOG_IF(DFATAL, !store_response_) << "Response not stored!";
|
| + return latest_response_code_;
|
| +}
|
| +
|
| +const string& QuicClient::latest_response_headers() const {
|
| + LOG_IF(DFATAL, !store_response_) << "Response not stored!";
|
| + return latest_response_headers_;
|
| +}
|
| +
|
| +const string& QuicClient::latest_response_body() const {
|
| + LOG_IF(DFATAL, !store_response_) << "Response not stored!";
|
| + return latest_response_body_;
|
| +}
|
| +
|
| QuicConnectionId QuicClient::GenerateConnectionId() {
|
| return QuicRandom::GetInstance()->RandUint64();
|
| }
|
|
|