Commit 0b33e272 authored by vitalybuka's avatar vitalybuka Committed by Commit bot

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}
parent a032d597
...@@ -81,7 +81,6 @@ void DnsResponseBuilder::AppendA(const std::string& service_domain_name, ...@@ -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 // TODO(maksymb): IP to send must depends on interface from where query was
// received. // received.
if (http_ipv4.empty()) { if (http_ipv4.empty()) {
LOG(ERROR) << "Invalid IP";
return; return;
} }
...@@ -96,7 +95,6 @@ void DnsResponseBuilder::AppendAAAA(const std::string& service_domain_name, ...@@ -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 // TODO(maksymb): IP to send must depends on interface from where query was
// received. // received.
if (http_ipv6.empty()) { if (http_ipv6.empty()) {
LOG(ERROR) << "Invalid IP";
return; return;
} }
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
namespace switches { namespace switches {
const char kDisableConfirmation[] = "disable-confirmation"; const char kDisableConfirmation[] = "disable-confirmation";
const char kDisableIpv4[] = "disable-ipv4";
const char kDisableIpv6[] = "disable-ipv6";
const char kDisableMethodCheck[] = "disable-method-check"; const char kDisableMethodCheck[] = "disable-method-check";
const char kDisableXTocken[] = "disable-x-token"; const char kDisableXTocken[] = "disable-x-token";
const char kDomainName[] = "domain-name"; const char kDomainName[] = "domain-name";
...@@ -30,13 +32,15 @@ const struct { ...@@ -30,13 +32,15 @@ const struct {
const char* const arg; const char* const arg;
} kHelpStrings[] = { } kHelpStrings[] = {
{kDisableConfirmation, "disables confirmation of registration", NULL}, {kDisableConfirmation, "disables confirmation of registration", NULL},
{kDisableIpv4, "disables IPv4 support", NULL},
{kDisableIpv6, "disables IPv6 support", NULL},
{kDisableMethodCheck, "disables HTTP method checking (POST, GET)", NULL}, {kDisableMethodCheck, "disables HTTP method checking (POST, GET)", NULL},
{kDisableXTocken, "disables checking of X-Privet-Token HTTP header", NULL}, {kDisableXTocken, "disables checking of X-Privet-Token HTTP header", NULL},
{kNoAnnouncement, "disables DNS announcements", NULL}, {kNoAnnouncement, "disables DNS announcements", NULL},
{kExtendedResponce, "responds to PTR with additional records", NULL}, {kExtendedResponce, "responds to PTR with additional records", NULL},
{kSimulatePrintingErrors, "simulates some errors for local printing", NULL}, {kSimulatePrintingErrors, "simulates some errors for local printing", NULL},
{kUnicastRespond, {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"}, {kDomainName, "sets, should ends with '.local'", "DOMAIN"},
{kHttpPort, "sets port for HTTP server", "PORT"}, {kHttpPort, "sets port for HTTP server", "PORT"},
{kServiceName, "sets DNS service name", "SERVICE"}, {kServiceName, "sets DNS service name", "SERVICE"},
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
namespace switches { namespace switches {
extern const char kDisableConfirmation[]; extern const char kDisableConfirmation[];
extern const char kDisableIpv4[];
extern const char kDisableIpv6[];
extern const char kDisableMethodCheck[]; extern const char kDisableMethodCheck[];
extern const char kDisableXTocken[]; extern const char kDisableXTocken[];
extern const char kDomainName[]; extern const char kDomainName[];
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "cloud_print/gcp20/prototype/command_line_reader.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/local_settings.h"
#include "cloud_print/gcp20/prototype/service_parameters.h" #include "cloud_print/gcp20/prototype/service_parameters.h"
#include "cloud_print/gcp20/prototype/special_io.h" #include "cloud_print/gcp20/prototype/special_io.h"
...@@ -832,30 +833,51 @@ bool Printer::StartLocalDiscoveryServers() { ...@@ -832,30 +833,51 @@ bool Printer::StartLocalDiscoveryServers() {
bool Printer::StartDnsServer() { bool Printer::StartDnsServer() {
DCHECK(state_.local_settings.local_discovery); 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. // TODO(maksymb): Add switch for command line to control interface name.
net::IPAddressNumber ip = GetLocalIp("", false); if (ipv4.empty() && ipv6.empty()) {
if (ip.empty()) {
LOG(ERROR) << "No local IP found. Cannot start printer."; LOG(ERROR) << "No local IP found. Cannot start printer.";
return false; return false;
} }
VLOG(0) << "Local address: " << net::IPAddressToString(ip);
uint16 port = command_line_reader::ReadHttpPort(kHttpPortDefault); uint16 port = command_line_reader::ReadHttpPort(kHttpPortDefault);
std::string service_name_prefix = VLOG_IF(0, !ipv4.empty())
command_line_reader::ReadServiceNamePrefix(kServiceNamePrefixDefault + << "Local IPv4 address: " << net::IPAddressToStringWithPort(ipv4, port);
net::IPAddressToString(ip)); VLOG_IF(0, !ipv6.empty())
std::replace(service_name_prefix .begin(), service_name_prefix .end(), << "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 = std::string service_domain_name =
command_line_reader::ReadDomainName( command_line_reader::ReadDomainName(
base::StringPrintf(kServiceDomainNameFormatDefault, base::StringPrintf(kServiceDomainNameFormatDefault,
base::RandInt(0, INT_MAX))); base::RandInt(0, INT_MAX)));
ServiceParameters params(kServiceType, kSecondaryServiceType, ServiceParameters params(kServiceType,
service_name_prefix, service_domain_name, kSecondaryServiceType,
ip, GetLocalIp("", true), port); service_name_prefix,
service_domain_name,
ipv4,
ipv6,
port);
return dns_server_.Start(params, return dns_server_.Start(params,
command_line_reader::ReadTtl(kTtlDefault), command_line_reader::ReadTtl(kTtlDefault),
......
...@@ -108,7 +108,10 @@ bool PrivetHttpServer::Start(uint16 port) { ...@@ -108,7 +108,10 @@ bool PrivetHttpServer::Start(uint16 port) {
scoped_ptr<net::ServerSocket> server_socket( scoped_ptr<net::ServerSocket> server_socket(
new net::TCPServerSocket(NULL, net::NetLog::Source())); 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)); server_.reset(new net::HttpServer(server_socket.Pass(), this));
net::IPEndPoint address; net::IPEndPoint address;
......
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