summaryrefslogtreecommitdiffstats
path: root/cloud_print/gcp20
diff options
context:
space:
mode:
authorvitalybuka <vitalybuka@chromium.org>2014-09-23 00:01:20 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-23 07:01:33 +0000
commit0b33e272e7a044c9aaa74dab5fa023fb54e7d426 (patch)
tree4b295cffbdb67be1d91e54b71a8ecca745173ab5 /cloud_print/gcp20
parenta032d59767b2d42c7aee4891eaacd661bfdb3f66 (diff)
downloadchromium_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.cc2
-rw-r--r--cloud_print/gcp20/prototype/gcp20_switches.cc6
-rw-r--r--cloud_print/gcp20/prototype/gcp20_switches.h2
-rw-r--r--cloud_print/gcp20/prototype/printer.cc44
-rw-r--r--cloud_print/gcp20/prototype/privet_http_server.cc5
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;