Commit 2239d36e authored by rch's avatar rch Committed by Commit bot

Clean up quic_simple_client_bin.cc to sync with quic_client_bin.cc

Review-Url: https://codereview.chromium.org/2600183002
Cr-Commit-Position: refs/heads/master@{#440920}
parent c17e290f
...@@ -53,7 +53,6 @@ ...@@ -53,7 +53,6 @@
#include "net/quic/core/quic_flags.h" #include "net/quic/core/quic_flags.h"
#include "net/quic/core/quic_packets.h" #include "net/quic/core/quic_packets.h"
#include "net/quic/core/quic_server_id.h" #include "net/quic/core/quic_server_id.h"
#include "net/quic/core/quic_utils.h"
#include "net/quic/platform/api/quic_socket_address.h" #include "net/quic/platform/api/quic_socket_address.h"
#include "net/quic/platform/api/quic_str_cat.h" #include "net/quic/platform/api/quic_str_cat.h"
#include "net/quic/platform/api/quic_text_utils.h" #include "net/quic/platform/api/quic_text_utils.h"
...@@ -70,13 +69,13 @@ using net::CTVerifier; ...@@ -70,13 +69,13 @@ using net::CTVerifier;
using net::MultiLogCTVerifier; using net::MultiLogCTVerifier;
using net::ProofVerifier; using net::ProofVerifier;
using net::ProofVerifierChromium; using net::ProofVerifierChromium;
using net::QuicTextUtils;
using net::SpdyHeaderBlock; using net::SpdyHeaderBlock;
using net::TransportSecurityState; using net::TransportSecurityState;
using net::QuicTextUtils;
using std::cout; using std::cout;
using std::cerr; using std::cerr;
using std::string;
using std::endl; using std::endl;
using std::string;
// The IP or hostname the quic client will connect to. // The IP or hostname the quic client will connect to.
string FLAGS_host = ""; string FLAGS_host = "";
...@@ -260,7 +259,6 @@ int main(int argc, char* argv[]) { ...@@ -260,7 +259,6 @@ int main(int argc, char* argv[]) {
std::unique_ptr<CertVerifier> cert_verifier(CertVerifier::CreateDefault()); std::unique_ptr<CertVerifier> cert_verifier(CertVerifier::CreateDefault());
std::unique_ptr<TransportSecurityState> transport_security_state( std::unique_ptr<TransportSecurityState> transport_security_state(
new TransportSecurityState); new TransportSecurityState);
transport_security_state.reset(new TransportSecurityState);
std::unique_ptr<CTVerifier> ct_verifier(new MultiLogCTVerifier()); std::unique_ptr<CTVerifier> ct_verifier(new MultiLogCTVerifier());
std::unique_ptr<CTPolicyEnforcer> ct_policy_enforcer(new CTPolicyEnforcer()); std::unique_ptr<CTPolicyEnforcer> ct_policy_enforcer(new CTPolicyEnforcer());
std::unique_ptr<ProofVerifier> proof_verifier; std::unique_ptr<ProofVerifier> proof_verifier;
...@@ -321,6 +319,7 @@ int main(int argc, char* argv[]) { ...@@ -321,6 +319,7 @@ int main(int argc, char* argv[]) {
// Make sure to store the response, for later output. // Make sure to store the response, for later output.
client.set_store_response(true); client.set_store_response(true);
// Send the request. // Send the request.
client.SendRequestAndWaitForResponse(header_block, body, /*fin=*/true); client.SendRequestAndWaitForResponse(header_block, body, /*fin=*/true);
......
...@@ -34,32 +34,20 @@ using base::StringPiece; ...@@ -34,32 +34,20 @@ using base::StringPiece;
namespace net { namespace net {
QuicSimpleClient::QuicSimpleClient( QuicSimpleClient::QuicSimpleClient(
IPEndPoint server_address, QuicSocketAddress server_address,
const QuicServerId& server_id, const QuicServerId& server_id,
const QuicVersionVector& supported_versions, const QuicVersionVector& supported_versions,
std::unique_ptr<ProofVerifier> proof_verifier) std::unique_ptr<ProofVerifier> proof_verifier)
: QuicSimpleClient(server_address,
server_id,
supported_versions,
QuicConfig(),
std::move(proof_verifier)) {}
QuicSimpleClient::QuicSimpleClient(
IPEndPoint server_address,
const QuicServerId& server_id,
const QuicVersionVector& supported_versions,
const QuicConfig& config,
std::unique_ptr<ProofVerifier> proof_verifier)
: QuicClientBase(server_id, : QuicClientBase(server_id,
supported_versions, supported_versions,
config, QuicConfig(),
CreateQuicConnectionHelper(), CreateQuicConnectionHelper(),
CreateQuicAlarmFactory(), CreateQuicAlarmFactory(),
std::move(proof_verifier)), std::move(proof_verifier)),
initialized_(false), initialized_(false),
packet_reader_started_(false), packet_reader_started_(false),
weak_factory_(this) { weak_factory_(this) {
set_server_address(QuicSocketAddress(QuicSocketAddressImpl(server_address))); set_server_address(server_address);
} }
QuicSimpleClient::~QuicSimpleClient() { QuicSimpleClient::~QuicSimpleClient() {
...@@ -77,15 +65,12 @@ bool QuicSimpleClient::CreateUDPSocketAndBind(QuicSocketAddress server_address, ...@@ -77,15 +65,12 @@ bool QuicSimpleClient::CreateUDPSocketAndBind(QuicSocketAddress server_address,
new UDPClientSocket(DatagramSocket::DEFAULT_BIND, RandIntCallback(), new UDPClientSocket(DatagramSocket::DEFAULT_BIND, RandIntCallback(),
&net_log_, NetLogSource())); &net_log_, NetLogSource()));
int address_family = if (bind_to_address.IsInitialized()) {
server_address.impl().socket_address().GetSockAddrFamily(); client_address_ = QuicSocketAddress(bind_to_address, local_port());
if (bind_to_address.impl().ip_address().size() != 0) { } else if (server_address.host().address_family() == IpAddressFamily::IP_V4) {
client_address_ = client_address_ = QuicSocketAddress(QuicIpAddress::Any4(), bind_to_port);
IPEndPoint(bind_to_address.impl().ip_address(), bind_to_port);
} else if (address_family == AF_INET) {
client_address_ = IPEndPoint(IPAddress::IPv4AllZeros(), bind_to_port);
} else { } else {
client_address_ = IPEndPoint(IPAddress::IPv6AllZeros(), bind_to_port); client_address_ = QuicSocketAddress(QuicIpAddress::Any6(), bind_to_port);
} }
int rc = socket->Connect(server_address.impl().socket_address()); int rc = socket->Connect(server_address.impl().socket_address());
...@@ -106,11 +91,13 @@ bool QuicSimpleClient::CreateUDPSocketAndBind(QuicSocketAddress server_address, ...@@ -106,11 +91,13 @@ bool QuicSimpleClient::CreateUDPSocketAndBind(QuicSocketAddress server_address,
return false; return false;
} }
rc = socket->GetLocalAddress(&client_address_); IPEndPoint address;
rc = socket->GetLocalAddress(&address);
if (rc != OK) { if (rc != OK) {
LOG(ERROR) << "GetLocalAddress failed: " << ErrorToShortString(rc); LOG(ERROR) << "GetLocalAddress failed: " << ErrorToShortString(rc);
return false; return false;
} }
client_address_ = QuicSocketAddress(QuicSocketAddressImpl(address));
socket_.swap(socket); socket_.swap(socket);
packet_reader_.reset(new QuicChromiumPacketReader( packet_reader_.reset(new QuicChromiumPacketReader(
...@@ -164,7 +151,7 @@ void QuicSimpleClient::OnReadError(int result, ...@@ -164,7 +151,7 @@ void QuicSimpleClient::OnReadError(int result,
} }
QuicSocketAddress QuicSimpleClient::GetLatestClientAddress() const { QuicSocketAddress QuicSimpleClient::GetLatestClientAddress() const {
return QuicSocketAddress(QuicSocketAddressImpl(client_address_)); return client_address_;
} }
bool QuicSimpleClient::OnPacket(const QuicReceivedPacket& packet, bool QuicSimpleClient::OnPacket(const QuicReceivedPacket& packet,
......
...@@ -40,17 +40,11 @@ class QuicClientPeer; ...@@ -40,17 +40,11 @@ class QuicClientPeer;
class QuicSimpleClient : public QuicClientBase, class QuicSimpleClient : public QuicClientBase,
public QuicChromiumPacketReader::Visitor { public QuicChromiumPacketReader::Visitor {
public: public:
// Create a quic client, which will have events managed by an externally owned // Create a quic client, which will have events managed by the message loop.
// EpollServer. QuicSimpleClient(QuicSocketAddress server_address,
QuicSimpleClient(IPEndPoint server_address,
const QuicServerId& server_id, const QuicServerId& server_id,
const QuicVersionVector& supported_versions, const QuicVersionVector& supported_versions,
std::unique_ptr<ProofVerifier> proof_verifier); std::unique_ptr<ProofVerifier> proof_verifier);
QuicSimpleClient(IPEndPoint server_address,
const QuicServerId& server_id,
const QuicVersionVector& supported_versions,
const QuicConfig& config,
std::unique_ptr<ProofVerifier> proof_verifier);
~QuicSimpleClient() override; ~QuicSimpleClient() override;
...@@ -87,7 +81,7 @@ class QuicSimpleClient : public QuicClientBase, ...@@ -87,7 +81,7 @@ class QuicSimpleClient : public QuicClientBase,
QuicChromiumClock clock_; QuicChromiumClock clock_;
// Address of the client if the client is connected to the server. // Address of the client if the client is connected to the server.
IPEndPoint client_address_; QuicSocketAddress client_address_;
// UDP socket connected to the server. // UDP socket connected to the server.
std::unique_ptr<UDPClientSocket> socket_; std::unique_ptr<UDPClientSocket> socket_;
......
...@@ -44,21 +44,17 @@ ...@@ -44,21 +44,17 @@
#include "base/command_line.h" #include "base/command_line.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/message_loop/message_loop.h" #include "base/message_loop/message_loop.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "net/base/ip_address.h"
#include "net/base/ip_endpoint.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
#include "net/base/privacy_mode.h" #include "net/base/privacy_mode.h"
#include "net/cert/cert_verifier.h" #include "net/cert/cert_verifier.h"
#include "net/cert/multi_log_ct_verifier.h" #include "net/cert/multi_log_ct_verifier.h"
#include "net/http/http_request_info.h"
#include "net/http/transport_security_state.h" #include "net/http/transport_security_state.h"
#include "net/quic/chromium/crypto/proof_verifier_chromium.h" #include "net/quic/chromium/crypto/proof_verifier_chromium.h"
#include "net/quic/core/quic_error_codes.h" #include "net/quic/core/quic_error_codes.h"
#include "net/quic/core/quic_packets.h" #include "net/quic/core/quic_packets.h"
#include "net/quic/core/quic_server_id.h" #include "net/quic/core/quic_server_id.h"
#include "net/quic/platform/api/quic_socket_address.h"
#include "net/quic/platform/api/quic_str_cat.h"
#include "net/quic/platform/api/quic_text_utils.h" #include "net/quic/platform/api/quic_text_utils.h"
#include "net/spdy/spdy_header_block.h" #include "net/spdy/spdy_header_block.h"
#include "net/spdy/spdy_http_utils.h" #include "net/spdy/spdy_http_utils.h"
...@@ -74,6 +70,7 @@ using net::MultiLogCTVerifier; ...@@ -74,6 +70,7 @@ using net::MultiLogCTVerifier;
using net::ProofVerifier; using net::ProofVerifier;
using net::ProofVerifierChromium; using net::ProofVerifierChromium;
using net::QuicTextUtils; using net::QuicTextUtils;
using net::SpdyHeaderBlock;
using net::TransportSecurityState; using net::TransportSecurityState;
using std::cout; using std::cout;
using std::cerr; using std::cerr;
...@@ -223,10 +220,8 @@ int main(int argc, char* argv[]) { ...@@ -223,10 +220,8 @@ int main(int argc, char* argv[]) {
base::MessageLoopForIO message_loop; base::MessageLoopForIO message_loop;
// Determine IP address to connect to from supplied hostname. // Determine IP address to connect to from supplied hostname.
net::IPAddress ip_addr; net::QuicIpAddress ip_addr;
// TODO(rtenneti): GURL's doesn't support default_protocol argument, thus
// protocol is required in the URL.
GURL url(urls[0]); GURL url(urls[0]);
string host = FLAGS_host; string host = FLAGS_host;
if (host.empty()) { if (host.empty()) {
...@@ -236,7 +231,7 @@ int main(int argc, char* argv[]) { ...@@ -236,7 +231,7 @@ int main(int argc, char* argv[]) {
if (port == 0) { if (port == 0) {
port = url.EffectiveIntPort(); port = url.EffectiveIntPort();
} }
if (!ip_addr.AssignFromIPLiteral(host)) { if (!ip_addr.FromString(host)) {
net::AddressList addresses; net::AddressList addresses;
int rv = net::SynchronousHostResolver::Resolve(host, &addresses); int rv = net::SynchronousHostResolver::Resolve(host, &addresses);
if (rv != net::OK) { if (rv != net::OK) {
...@@ -244,10 +239,11 @@ int main(int argc, char* argv[]) { ...@@ -244,10 +239,11 @@ int main(int argc, char* argv[]) {
<< "' : " << net::ErrorToShortString(rv); << "' : " << net::ErrorToShortString(rv);
return 1; return 1;
} }
ip_addr = addresses[0].address(); ip_addr =
net::QuicIpAddress(net::QuicIpAddressImpl(addresses[0].address()));
} }
string host_port = net::IPAddressToStringWithPort(ip_addr, FLAGS_port); string host_port = net::QuicStrCat(ip_addr.ToString(), ":", port);
VLOG(1) << "Resolved " << host << " to " << host_port << endl; VLOG(1) << "Resolved " << host << " to " << host_port << endl;
// Build the client, and try to connect. // Build the client, and try to connect.
...@@ -272,7 +268,7 @@ int main(int argc, char* argv[]) { ...@@ -272,7 +268,7 @@ int main(int argc, char* argv[]) {
cert_verifier.get(), ct_policy_enforcer.get(), cert_verifier.get(), ct_policy_enforcer.get(),
transport_security_state.get(), ct_verifier.get())); transport_security_state.get(), ct_verifier.get()));
} }
net::QuicSimpleClient client(net::IPEndPoint(ip_addr, port), server_id, net::QuicSimpleClient client(net::QuicSocketAddress(ip_addr, port), server_id,
versions, std::move(proof_verifier)); versions, std::move(proof_verifier));
client.set_initial_max_packet_length( client.set_initial_max_packet_length(
FLAGS_initial_mtu != 0 ? FLAGS_initial_mtu : net::kDefaultMaxPacketSize); FLAGS_initial_mtu != 0 ? FLAGS_initial_mtu : net::kDefaultMaxPacketSize);
...@@ -302,36 +298,28 @@ int main(int argc, char* argv[]) { ...@@ -302,36 +298,28 @@ int main(int argc, char* argv[]) {
} }
// Construct a GET or POST request for supplied URL. // Construct a GET or POST request for supplied URL.
net::HttpRequestInfo request; SpdyHeaderBlock header_block;
request.method = body.empty() ? "GET" : "POST"; header_block[":method"] = body.empty() ? "GET" : "POST";
request.url = url; header_block[":scheme"] = url.scheme();
header_block[":authority"] = url.host();
header_block[":path"] = url.path();
// Append any additional headers supplied on the command line. // Append any additional headers supplied on the command line.
for (const std::string& header : for (StringPiece sp : QuicTextUtils::Split(FLAGS_headers, ';')) {
base::SplitString(FLAGS_headers, ";", base::KEEP_WHITESPACE, QuicTextUtils::RemoveLeadingAndTrailingWhitespace(&sp);
base::SPLIT_WANT_NONEMPTY)) {
string sp;
base::TrimWhitespaceASCII(header, base::TRIM_ALL, &sp);
if (sp.empty()) { if (sp.empty()) {
continue; continue;
} }
std::vector<string> kv = std::vector<StringPiece> kv = QuicTextUtils::Split(sp, ':');
base::SplitString(sp, ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); QuicTextUtils::RemoveLeadingAndTrailingWhitespace(&kv[0]);
CHECK_EQ(2u, kv.size()); QuicTextUtils::RemoveLeadingAndTrailingWhitespace(&kv[1]);
string key; header_block[kv[0]] = kv[1];
base::TrimWhitespaceASCII(kv[0], base::TRIM_ALL, &key);
string value;
base::TrimWhitespaceASCII(kv[1], base::TRIM_ALL, &value);
request.extra_headers.SetHeader(key, value);
} }
// Make sure to store the response, for later output. // Make sure to store the response, for later output.
client.set_store_response(true); client.set_store_response(true);
// Send the request. // Send the request.
net::SpdyHeaderBlock header_block;
net::CreateSpdyHeadersFromHttpRequest(request, request.extra_headers,
/*direct=*/true, &header_block);
client.SendRequestAndWaitForResponse(header_block, body, /*fin=*/true); client.SendRequestAndWaitForResponse(header_block, body, /*fin=*/true);
// Print request and response details. // Print request and response details.
...@@ -356,6 +344,7 @@ int main(int argc, char* argv[]) { ...@@ -356,6 +344,7 @@ int main(int argc, char* argv[]) {
} else { } else {
cout << "body: " << response_body << endl; cout << "body: " << response_body << endl;
} }
cout << "trailers: " << client.latest_response_trailers() << endl;
} }
size_t response_code = client.latest_response_code(); size_t response_code = client.latest_response_code();
......
...@@ -13,7 +13,7 @@ namespace net { ...@@ -13,7 +13,7 @@ namespace net {
namespace test { namespace test {
TEST(QuicSimpleClientTest, Initialize) { TEST(QuicSimpleClientTest, Initialize) {
IPEndPoint server_address(IPEndPoint(net::test::Loopback4(), 80)); QuicSocketAddress server_address(QuicIpAddress::Loopback4(), 80);
QuicServerId server_id("hostname", server_address.port(), QuicServerId server_id("hostname", server_address.port(),
PRIVACY_MODE_DISABLED); PRIVACY_MODE_DISABLED);
QuicVersionVector versions = AllSupportedVersions(); QuicVersionVector versions = AllSupportedVersions();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment