summaryrefslogtreecommitdiff
path: root/chromium/net/tools/quic/quic_client.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/tools/quic/quic_client.cc')
-rw-r--r--chromium/net/tools/quic/quic_client.cc72
1 files changed, 55 insertions, 17 deletions
diff --git a/chromium/net/tools/quic/quic_client.cc b/chromium/net/tools/quic/quic_client.cc
index 86fa6c48b75..dcf9612a38f 100644
--- a/chromium/net/tools/quic/quic_client.cc
+++ b/chromium/net/tools/quic/quic_client.cc
@@ -16,10 +16,10 @@
#include "net/quic/quic_connection.h"
#include "net/quic/quic_data_reader.h"
#include "net/quic/quic_protocol.h"
-#include "net/tools/flip_server/balsa_headers.h"
+#include "net/tools/balsa/balsa_headers.h"
#include "net/tools/quic/quic_epoll_connection_helper.h"
-#include "net/tools/quic/quic_reliable_client_stream.h"
#include "net/tools/quic/quic_socket_utils.h"
+#include "net/tools/quic/quic_spdy_client_stream.h"
#ifndef SO_RXQ_OVFL
#define SO_RXQ_OVFL 40
@@ -32,31 +32,36 @@ const int kEpollFlags = EPOLLIN | EPOLLOUT | EPOLLET;
QuicClient::QuicClient(IPEndPoint server_address,
const string& server_hostname,
- const QuicVersion version)
+ const QuicVersionVector& supported_versions,
+ bool print_response)
: server_address_(server_address),
server_hostname_(server_hostname),
local_port_(0),
fd_(-1),
+ helper_(CreateQuicConnectionHelper()),
initialized_(false),
packets_dropped_(0),
overflow_supported_(false),
- version_(version) {
+ supported_versions_(supported_versions),
+ print_response_(print_response) {
config_.SetDefaults();
}
QuicClient::QuicClient(IPEndPoint server_address,
const string& server_hostname,
const QuicConfig& config,
- const QuicVersion version)
+ const QuicVersionVector& supported_versions)
: server_address_(server_address),
server_hostname_(server_hostname),
config_(config),
local_port_(0),
fd_(-1),
+ helper_(CreateQuicConnectionHelper()),
initialized_(false),
packets_dropped_(0),
overflow_supported_(false),
- version_(version) {
+ supported_versions_(supported_versions),
+ print_response_(false) {
}
QuicClient::~QuicClient() {
@@ -150,13 +155,16 @@ bool QuicClient::Connect() {
bool QuicClient::StartConnect() {
DCHECK(!connected() && initialized_);
- QuicGuid guid = QuicRandom::GetInstance()->RandUint64();
+ QuicPacketWriter* writer = CreateQuicPacketWriter();
+ if (writer_.get() != writer) {
+ writer_.reset(writer);
+ }
+
session_.reset(new QuicClientSession(
server_hostname_,
config_,
- new QuicConnection(guid, server_address_,
- CreateQuicConnectionHelper(), false,
- version_),
+ new QuicConnection(GenerateGuid(), server_address_, helper_.get(),
+ writer_.get(), false, supported_versions_),
&crypto_config_));
return session_->CryptoConnect();
}
@@ -167,9 +175,11 @@ bool QuicClient::EncryptionBeingEstablished() {
}
void QuicClient::Disconnect() {
- DCHECK(connected());
+ DCHECK(initialized_);
- session()->connection()->SendConnectionClose(QUIC_PEER_GOING_AWAY);
+ if (connected()) {
+ session()->connection()->SendConnectionClose(QUIC_PEER_GOING_AWAY);
+ }
epoll_server_.UnregisterFD(fd_);
close(fd_);
fd_ = -1;
@@ -178,21 +188,23 @@ void QuicClient::Disconnect() {
void QuicClient::SendRequestsAndWaitForResponse(
const CommandLine::StringVector& args) {
- for (uint32_t i = 0; i < args.size(); i++) {
+ for (size_t i = 0; i < args.size(); ++i) {
BalsaHeaders headers;
headers.SetRequestFirstlineFromStringPieces("GET", args[i], "HTTP/1.1");
- CreateReliableClientStream()->SendRequest(headers, "", true);
+ QuicSpdyClientStream* stream = CreateReliableClientStream();
+ stream->SendRequest(headers, "", true);
+ stream->set_visitor(this);
}
while (WaitForEvents()) { }
}
-QuicReliableClientStream* QuicClient::CreateReliableClientStream() {
+QuicSpdyClientStream* QuicClient::CreateReliableClientStream() {
if (!connected()) {
return NULL;
}
- return session_->CreateOutgoingReliableStream();
+ return session_->CreateOutgoingDataStream();
}
void QuicClient::WaitForStreamToClose(QuicStreamId id) {
@@ -233,6 +245,24 @@ void QuicClient::OnEvent(int fd, EpollEvent* event) {
}
}
+void QuicClient::OnClose(QuicDataStream* stream) {
+ if (!print_response_) {
+ return;
+ }
+
+ QuicSpdyClientStream* client_stream =
+ static_cast<QuicSpdyClientStream*>(stream);
+ 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());
+ }
+ printf("%s\n", client_stream->data().c_str());
+}
+
QuicPacketCreator::Options* QuicClient::options() {
if (session() == NULL) {
return NULL;
@@ -245,8 +275,16 @@ bool QuicClient::connected() const {
session_->connection()->connected();
}
+QuicGuid QuicClient::GenerateGuid() {
+ return QuicRandom::GetInstance()->RandUint64();
+}
+
QuicEpollConnectionHelper* QuicClient::CreateQuicConnectionHelper() {
- return new QuicEpollConnectionHelper(fd_, &epoll_server_);
+ return new QuicEpollConnectionHelper(&epoll_server_);
+}
+
+QuicPacketWriter* QuicClient::CreateQuicPacketWriter() {
+ return new QuicDefaultPacketWriter(fd_);
}
bool QuicClient::ReadAndProcessPacket() {