diff options
author | vitalybuka <vitalybuka@chromium.org> | 2014-09-23 00:01:20 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-23 07:01:33 +0000 |
commit | 0b33e272e7a044c9aaa74dab5fa023fb54e7d426 (patch) | |
tree | 4b295cffbdb67be1d91e54b71a8ecca745173ab5 /cloud_print/gcp20 | |
parent | a032d59767b2d42c7aee4891eaacd661bfdb3f66 (diff) | |
download | chromium_src-0b33e272e7a044c9aaa74dab5fa023fb54e7d426.zip chromium_src-0b33e272e7a044c9aaa74dab5fa023fb54e7d426.tar.gz chromium_src-0b33e272e7a044c9aaa74dab5fa023fb54e7d426.tar.bz2 |
Added --disable-ipv4 and --disable-ipv6 switches.
By default both enabled.
TBR=gene@chromium.org
Review URL: https://codereview.chromium.org/598433002
Cr-Commit-Position: refs/heads/master@{#296150}
Diffstat (limited to 'cloud_print/gcp20')
-rw-r--r-- | cloud_print/gcp20/prototype/dns_response_builder.cc | 2 | ||||
-rw-r--r-- | cloud_print/gcp20/prototype/gcp20_switches.cc | 6 | ||||
-rw-r--r-- | cloud_print/gcp20/prototype/gcp20_switches.h | 2 | ||||
-rw-r--r-- | cloud_print/gcp20/prototype/printer.cc | 44 | ||||
-rw-r--r-- | cloud_print/gcp20/prototype/privet_http_server.cc | 5 |
5 files changed, 44 insertions, 15 deletions
diff --git a/cloud_print/gcp20/prototype/dns_response_builder.cc b/cloud_print/gcp20/prototype/dns_response_builder.cc index 46f82cd..07d07ea 100644 --- a/cloud_print/gcp20/prototype/dns_response_builder.cc +++ b/cloud_print/gcp20/prototype/dns_response_builder.cc @@ -81,7 +81,6 @@ void DnsResponseBuilder::AppendA(const std::string& service_domain_name, // TODO(maksymb): IP to send must depends on interface from where query was // received. if (http_ipv4.empty()) { - LOG(ERROR) << "Invalid IP"; return; } @@ -96,7 +95,6 @@ void DnsResponseBuilder::AppendAAAA(const std::string& service_domain_name, // TODO(maksymb): IP to send must depends on interface from where query was // received. if (http_ipv6.empty()) { - LOG(ERROR) << "Invalid IP"; return; } diff --git a/cloud_print/gcp20/prototype/gcp20_switches.cc b/cloud_print/gcp20/prototype/gcp20_switches.cc index cce7eaf..dfb425c 100644 --- a/cloud_print/gcp20/prototype/gcp20_switches.cc +++ b/cloud_print/gcp20/prototype/gcp20_switches.cc @@ -10,6 +10,8 @@ namespace switches { const char kDisableConfirmation[] = "disable-confirmation"; +const char kDisableIpv4[] = "disable-ipv4"; +const char kDisableIpv6[] = "disable-ipv6"; const char kDisableMethodCheck[] = "disable-method-check"; const char kDisableXTocken[] = "disable-x-token"; const char kDomainName[] = "domain-name"; @@ -30,13 +32,15 @@ const struct { const char* const arg; } kHelpStrings[] = { {kDisableConfirmation, "disables confirmation of registration", NULL}, + {kDisableIpv4, "disables IPv4 support", NULL}, + {kDisableIpv6, "disables IPv6 support", NULL}, {kDisableMethodCheck, "disables HTTP method checking (POST, GET)", NULL}, {kDisableXTocken, "disables checking of X-Privet-Token HTTP header", NULL}, {kNoAnnouncement, "disables DNS announcements", NULL}, {kExtendedResponce, "responds to PTR with additional records", NULL}, {kSimulatePrintingErrors, "simulates some errors for local printing", NULL}, {kUnicastRespond, - "DNS responses will be sent in unicast instead of multicast", NULL}, + "DNS responses will be sent in unicast instead of multicast", NULL}, {kDomainName, "sets, should ends with '.local'", "DOMAIN"}, {kHttpPort, "sets port for HTTP server", "PORT"}, {kServiceName, "sets DNS service name", "SERVICE"}, diff --git a/cloud_print/gcp20/prototype/gcp20_switches.h b/cloud_print/gcp20/prototype/gcp20_switches.h index f2a6d229..dd112f4 100644 --- a/cloud_print/gcp20/prototype/gcp20_switches.h +++ b/cloud_print/gcp20/prototype/gcp20_switches.h @@ -8,6 +8,8 @@ namespace switches { extern const char kDisableConfirmation[]; +extern const char kDisableIpv4[]; +extern const char kDisableIpv6[]; extern const char kDisableMethodCheck[]; extern const char kDisableXTocken[]; extern const char kDomainName[]; diff --git a/cloud_print/gcp20/prototype/printer.cc b/cloud_print/gcp20/prototype/printer.cc index 01cf062..24866a5 100644 --- a/cloud_print/gcp20/prototype/printer.cc +++ b/cloud_print/gcp20/prototype/printer.cc @@ -22,6 +22,7 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "cloud_print/gcp20/prototype/command_line_reader.h" +#include "cloud_print/gcp20/prototype/gcp20_switches.h" #include "cloud_print/gcp20/prototype/local_settings.h" #include "cloud_print/gcp20/prototype/service_parameters.h" #include "cloud_print/gcp20/prototype/special_io.h" @@ -832,30 +833,51 @@ bool Printer::StartLocalDiscoveryServers() { bool Printer::StartDnsServer() { DCHECK(state_.local_settings.local_discovery); + net::IPAddressNumber ipv4; + net::IPAddressNumber ipv6; + + if (!base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableIpv4)) { + ipv4 = GetLocalIp("", false); + } + if (!base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableIpv6)) { + ipv6 = GetLocalIp("", true); + } + // TODO(maksymb): Add switch for command line to control interface name. - net::IPAddressNumber ip = GetLocalIp("", false); - if (ip.empty()) { + if (ipv4.empty() && ipv6.empty()) { LOG(ERROR) << "No local IP found. Cannot start printer."; return false; } - VLOG(0) << "Local address: " << net::IPAddressToString(ip); uint16 port = command_line_reader::ReadHttpPort(kHttpPortDefault); - std::string service_name_prefix = - command_line_reader::ReadServiceNamePrefix(kServiceNamePrefixDefault + - net::IPAddressToString(ip)); - std::replace(service_name_prefix .begin(), service_name_prefix .end(), - '.', '_'); + VLOG_IF(0, !ipv4.empty()) + << "Local IPv4 address: " << net::IPAddressToStringWithPort(ipv4, port); + VLOG_IF(0, !ipv6.empty()) + << "Local IPv6 address: " << net::IPAddressToStringWithPort(ipv6, port); + + std::string service_name_prefix = kServiceNamePrefixDefault; + if (!ipv4.empty()) + service_name_prefix += net::IPAddressToString(ipv4); + service_name_prefix = + command_line_reader::ReadServiceNamePrefix(service_name_prefix); + std::replace( + service_name_prefix.begin(), service_name_prefix.end(), '.', '_'); std::string service_domain_name = command_line_reader::ReadDomainName( base::StringPrintf(kServiceDomainNameFormatDefault, base::RandInt(0, INT_MAX))); - ServiceParameters params(kServiceType, kSecondaryServiceType, - service_name_prefix, service_domain_name, - ip, GetLocalIp("", true), port); + ServiceParameters params(kServiceType, + kSecondaryServiceType, + service_name_prefix, + service_domain_name, + ipv4, + ipv6, + port); return dns_server_.Start(params, command_line_reader::ReadTtl(kTtlDefault), diff --git a/cloud_print/gcp20/prototype/privet_http_server.cc b/cloud_print/gcp20/prototype/privet_http_server.cc index 8dfa0cc..5b4086f 100644 --- a/cloud_print/gcp20/prototype/privet_http_server.cc +++ b/cloud_print/gcp20/prototype/privet_http_server.cc @@ -108,7 +108,10 @@ bool PrivetHttpServer::Start(uint16 port) { scoped_ptr<net::ServerSocket> server_socket( new net::TCPServerSocket(NULL, net::NetLog::Source())); - server_socket->ListenWithAddressAndPort("0.0.0.0", port, 1); + std::string listen_address = "::"; + if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableIpv6)) + listen_address = "0.0.0.0"; + server_socket->ListenWithAddressAndPort(listen_address, port, 1); server_.reset(new net::HttpServer(server_socket.Pass(), this)); net::IPEndPoint address; |