diff options
author | Torne (Richard Coles) <torne@google.com> | 2013-06-11 10:57:03 +0100 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2013-06-11 10:57:03 +0100 |
commit | 868fa2fe829687343ffae624259930155e16dbd8 (patch) | |
tree | 54d316199dd9739c57c3aacd131853bbd6554a94 /cloud_print | |
parent | bb1bdbd796f966b5bf11f40ecbea12621c7bfac9 (diff) | |
download | chromium_org-868fa2fe829687343ffae624259930155e16dbd8.tar.gz |
Merge from Chromium at DEPS revision r205460
This commit was generated by merge_to_master.py.
Change-Id: I4a744a5e426bd3bb378d887cfa56fe054742a540
Diffstat (limited to 'cloud_print')
26 files changed, 297 insertions, 30 deletions
diff --git a/cloud_print/cloud_print.gyp b/cloud_print/cloud_print.gyp index b746f41b4e..cf3c5433be 100644 --- a/cloud_print/cloud_print.gyp +++ b/cloud_print/cloud_print.gyp @@ -58,6 +58,7 @@ 'type': 'none', 'dependencies': [ 'service/service.gyp:*', + 'gcp20/prototype/gcp20_device.gyp:*', ], 'conditions': [ ['OS=="win"', { diff --git a/cloud_print/common/win/cloud_print_utils.h b/cloud_print/common/win/cloud_print_utils.h index bab86e6112..7effa1b758 100644 --- a/cloud_print/common/win/cloud_print_utils.h +++ b/cloud_print/common/win/cloud_print_utils.h @@ -7,7 +7,7 @@ #include <wtypes.h> -#include "base/string16.h" +#include "base/strings/string16.h" namespace cloud_print { diff --git a/cloud_print/common/win/install_utils.h b/cloud_print/common/win/install_utils.h index e4387d44ca..1e484cf9a8 100644 --- a/cloud_print/common/win/install_utils.h +++ b/cloud_print/common/win/install_utils.h @@ -9,7 +9,7 @@ #include <string> #include "base/files/file_path.h" -#include "base/string16.h" +#include "base/strings/string16.h" namespace cloud_print { diff --git a/cloud_print/gcp20/prototype/dns_sd_server.cc b/cloud_print/gcp20/prototype/dns_sd_server.cc new file mode 100644 index 0000000000..0ca8b4395f --- /dev/null +++ b/cloud_print/gcp20/prototype/dns_sd_server.cc @@ -0,0 +1,137 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "cloud_print/gcp20/prototype/dns_sd_server.h" + +#include <string.h> + +#include "base/basictypes.h" +#include "net/base/big_endian.h" +#include "net/base/net_util.h" +#include "net/dns/dns_protocol.h" + +namespace { + +const char* kDefaultIpAddressMulticast = "224.0.0.251"; +const uint16 kDefaultPortMulticast = 5353; + +// TODO(maksymb): Add possibility to set constants via command line arguments +const uint32 kDefaultTTL = 60*60; // in seconds + +} // namespace + +DnsSdServer::DnsSdServer() : is_online_(false) { + // Do nothing +} + +DnsSdServer::~DnsSdServer() { + Shutdown(); +} + +bool DnsSdServer::Start() { + if (is_online_) + return true; + + if (!CreateSocket()) + return false; + + LOG(INFO) << "DNS server started"; + + SendAnnouncement(kDefaultTTL); + + is_online_ = true; + return true; +} + +void DnsSdServer::Update() { + if (!is_online_) + return; + + SendAnnouncement(kDefaultTTL); +} + +void DnsSdServer::Shutdown() { + if (!is_online_) + return; + + SendAnnouncement(0); // ttl is 0 + socket_->Close(); + is_online_ = false; + LOG(INFO) << "DNS server stopped"; +} + +void DnsSdServer::ProcessMessages() { + NOTIMPLEMENTED(); // implement this +} + +bool DnsSdServer::CreateSocket() { + net::IPAddressNumber local_ip_any; + bool success = net::ParseIPLiteralToNumber("0.0.0.0", &local_ip_any); + DCHECK(success); + + net::IPAddressNumber multicast_dns_ip_address; + success = net::ParseIPLiteralToNumber(kDefaultIpAddressMulticast, + &multicast_dns_ip_address); + DCHECK(success); + + + socket_.reset(new net::UDPSocket(net::DatagramSocket::DEFAULT_BIND, + net::RandIntCallback(), + NULL, + net::NetLog::Source())); + + net::IPEndPoint local_address = net::IPEndPoint(local_ip_any, + kDefaultPortMulticast); + multicast_address_ = net::IPEndPoint(multicast_dns_ip_address, + kDefaultPortMulticast); + + socket_->AllowAddressReuse(); + + int status = socket_->Bind(local_address); + if (status < 0) + return false; + + socket_->SetMulticastLoopbackMode(false); + status = socket_->JoinGroup(multicast_dns_ip_address); + + if (status < 0) + return false; + + DCHECK(socket_->is_connected()); + + return true; +} + +bool DnsSdServer::CheckPendingQueries() { + NOTIMPLEMENTED(); // implement this + return false; +} + +void DoNothing(int /*var*/) { + // Do nothing +} + +void DnsSdServer::SendAnnouncement(uint32 ttl) { + // Create a message with allocated space for header. + // DNS header is temporary empty. + scoped_ptr<std::vector<uint8> > message( + new std::vector<uint8>(sizeof(net::dns_protocol::Header), 0)); // all is 0 + + // TODO(maksymb): Create and implement DnsResponse class + + // Preparing for sending + scoped_refptr<net::IOBufferWithSize> buffer = + new net::IOBufferWithSize(static_cast<int>(message.get()->size())); + memcpy(buffer.get()->data(), message.get()->data(), message.get()->size()); + + // Create empty callback (we don't need it at all) and send packet + net::CompletionCallback callback = base::Bind(DoNothing); + socket_->SendTo(buffer.get(), + buffer.get()->size(), + multicast_address_, + callback); + + LOG(INFO) << "Announcement was sent with TTL: " << ttl; +} + diff --git a/cloud_print/gcp20/prototype/dns_sd_server.h b/cloud_print/gcp20/prototype/dns_sd_server.h new file mode 100644 index 0000000000..9c8ed96b7d --- /dev/null +++ b/cloud_print/gcp20/prototype/dns_sd_server.h @@ -0,0 +1,62 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef GCP20_PROTOTYPE_DNS_SD_H_ +#define GCP20_PROTOTYPE_DNS_SD_H_ + +#include <vector> + +#include "net/dns/dns_protocol.h" +#include "net/udp/udp_socket.h" + +// Class for sending multicast announcements, receiving queries and answering on +// them. Client should call |ProccessMessages| periodically to make server work. +class DnsSdServer { + public: + // Constructs unstarted server. + DnsSdServer(); + + // Stops server. + ~DnsSdServer(); + + // Starts the server. Returns |true| if server works. Also sends + // announcement. + bool Start(); + + // Sends announcement if server works. + void Update(); + + // Stops server with announcement. + void Shutdown(); + + // Process pending queries for the server. + void ProcessMessages(); + + // Returns |true| if server works. + bool is_online() { return is_online_; } + + private: + // Binds a socket to multicast address. Returns |true| on success. + bool CreateSocket(); + + // Sends announcement. + void SendAnnouncement(uint32 ttl); + + // Returns |true| if server received some questions. + bool CheckPendingQueries(); + + // Stores |true| if server was started. + bool is_online_; + + // Stores socket to multicast address. + scoped_ptr<net::UDPSocket> socket_; + + // Stores multicast address end point. + net::IPEndPoint multicast_address_; + + DISALLOW_COPY_AND_ASSIGN(DnsSdServer); +}; + +#endif // GCP20_PROTOTYPE_DNS_SD_H_ + diff --git a/cloud_print/gcp20/prototype/gcp20_device.cc b/cloud_print/gcp20/prototype/gcp20_device.cc new file mode 100644 index 0000000000..f210063a7b --- /dev/null +++ b/cloud_print/gcp20/prototype/gcp20_device.cc @@ -0,0 +1,28 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <stdio.h> + +#include "base/command_line.h" +#include "base/logging.h" +#include "base/threading/platform_thread.h" +#include "cloud_print/gcp20/prototype/dns_sd_server.h" + +int main(int argc, char* argv[]) { + CommandLine::Init(argc, argv); + + logging::InitLogging(NULL, + logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG, + logging::LOCK_LOG_FILE, + logging::APPEND_TO_OLD_LOG_FILE, + logging::DISABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS); + + DnsSdServer dns_sd_server; + dns_sd_server.Start(); + base::PlatformThread::Sleep(base::TimeDelta::FromSeconds(2)); + dns_sd_server.Shutdown(); + + return 0; +} + diff --git a/cloud_print/gcp20/prototype/gcp20_device.gyp b/cloud_print/gcp20/prototype/gcp20_device.gyp new file mode 100644 index 0000000000..7946960dbd --- /dev/null +++ b/cloud_print/gcp20/prototype/gcp20_device.gyp @@ -0,0 +1,41 @@ +# Copyright 2013 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'target_defaults': { + 'variables': { + 'chromium_code': 1, + 'enable_wexit_time_destructors': 1, + }, + 'include_dirs': [ + '<(DEPTH)', + # To allow including "version.h" + '<(SHARED_INTERMEDIATE_DIR)', + ], + }, + 'targets': [ + { + 'target_name': 'gcp20_device', + 'type': 'executable', + 'dependencies': [ + '<(DEPTH)/base/base.gyp:base', + '<(DEPTH)/net/net.gyp:net', + ], + 'sources': [ + 'dns_sd_server.cc', + 'gcp20_device.cc', + ], + 'msvs_settings': { + 'VCLinkerTool': { + 'SubSystem': '1', # Set /SUBSYSTEM:CONSOLE + 'AdditionalDependencies': [ + 'secur32.lib', + 'httpapi.lib', + 'Ws2_32.lib', + ], + }, + }, + }, + ], +} diff --git a/cloud_print/service/service.gyp b/cloud_print/service/service.gyp index d1ac6119aa..1bdc5528b1 100644 --- a/cloud_print/service/service.gyp +++ b/cloud_print/service/service.gyp @@ -54,11 +54,11 @@ '<(DEPTH)/base/base.gyp:base', '<(DEPTH)/base/base.gyp:base_static', '<(DEPTH)/base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations', - '<(DEPTH)/build/temp_gyp/googleurl.gyp:googleurl', '<(DEPTH)/google_apis/google_apis.gyp:google_apis', '<(DEPTH)/ipc/ipc.gyp:ipc', '<(DEPTH)/net/net.gyp:net', '<(DEPTH)/printing/printing.gyp:printing', + '<(DEPTH)/url/url.gyp:url_lib', 'service_resources', ], 'conditions': [ diff --git a/cloud_print/service/service_state.cc b/cloud_print/service/service_state.cc index 0c30be6b49..6b9ccfcfcc 100644 --- a/cloud_print/service/service_state.cc +++ b/cloud_print/service/service_state.cc @@ -8,8 +8,8 @@ #include "base/json/json_writer.h" #include "base/logging.h" #include "base/message_loop.h" -#include "base/string_util.h" -#include "base/utf_string_conversions.h" +#include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" #include "net/base/escape.h" #include "net/base/io_buffer.h" #include "net/base/load_flags.h" @@ -64,7 +64,7 @@ class ServiceStateURLRequestDelegate : public net::URLRequest::Delegate { const int kBufSize = 100000; scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kBufSize)); int num_bytes = 0; - while (request->Read(buf, kBufSize, &num_bytes)) { + while (request->Read(buf.get(), kBufSize, &num_bytes)) { data_.append(buf->data(), buf->data() + num_bytes); } } diff --git a/cloud_print/service/service_state_unittest.cc b/cloud_print/service/service_state_unittest.cc index 4e5d2d090a..50155e8ad9 100644 --- a/cloud_print/service/service_state_unittest.cc +++ b/cloud_print/service/service_state_unittest.cc @@ -4,7 +4,7 @@ #include "cloud_print/service/service_state.h" -#include "base/string_util.h" +#include "base/strings/string_util.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" diff --git a/cloud_print/service/win/cloud_print_service.cc b/cloud_print/service/win/cloud_print_service.cc index 10456ddee6..5a3c502aab 100644 --- a/cloud_print/service/win/cloud_print_service.cc +++ b/cloud_print/service/win/cloud_print_service.cc @@ -15,8 +15,8 @@ #include "base/guid.h" #include "base/logging.h" #include "base/path_service.h" -#include "base/string_util.h" -#include "base/utf_string_conversions.h" +#include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" #include "base/win/scoped_handle.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_switches.h" diff --git a/cloud_print/service/win/cloud_print_service_config.cc b/cloud_print/service/win/cloud_print_service_config.cc index 422caeb66e..cf8e777faf 100644 --- a/cloud_print/service/win/cloud_print_service_config.cc +++ b/cloud_print/service/win/cloud_print_service_config.cc @@ -10,7 +10,7 @@ #include "base/command_line.h" #include "base/file_util.h" #include "base/message_loop.h" -#include "base/string16.h" +#include "base/strings/string16.h" #include "base/threading/thread.h" #include "chrome/common/chrome_constants.h" #include "cloud_print/common/win/cloud_print_utils.h" diff --git a/cloud_print/service/win/local_security_policy.cc b/cloud_print/service/win/local_security_policy.cc index c1190ddad8..44c4e95011 100644 --- a/cloud_print/service/win/local_security_policy.cc +++ b/cloud_print/service/win/local_security_policy.cc @@ -9,7 +9,7 @@ #include <windows.h> #include "base/logging.h" -#include "base/string_util.h" +#include "base/strings/string_util.h" const wchar_t kSeServiceLogonRight[] = L"SeServiceLogonRight"; diff --git a/cloud_print/service/win/local_security_policy.h b/cloud_print/service/win/local_security_policy.h index 712ab1913b..3e800a7b24 100644 --- a/cloud_print/service/win/local_security_policy.h +++ b/cloud_print/service/win/local_security_policy.h @@ -9,7 +9,7 @@ #include <ntsecapi.h> #include "base/basictypes.h" -#include "base/string16.h" +#include "base/strings/string16.h" extern const wchar_t kSeServiceLogonRight[]; diff --git a/cloud_print/service/win/service_controller.h b/cloud_print/service/win/service_controller.h index 449864c686..167b0c1a3a 100644 --- a/cloud_print/service/win/service_controller.h +++ b/cloud_print/service/win/service_controller.h @@ -9,7 +9,7 @@ #include <string> #include "base/command_line.h" -#include "base/string16.h" +#include "base/strings/string16.h" #include "cloud_print/resources.h" namespace base { diff --git a/cloud_print/service/win/service_utils.cc b/cloud_print/service/win/service_utils.cc index 5635e6fccf..e63f2ab3d9 100644 --- a/cloud_print/service/win/service_utils.cc +++ b/cloud_print/service/win/service_utils.cc @@ -9,7 +9,7 @@ #include <security.h> // NOLINT #include "base/command_line.h" -#include "base/string_util.h" +#include "base/strings/string_util.h" #include "chrome/common/chrome_switches.h" string16 GetLocalComputerName() { diff --git a/cloud_print/service/win/service_utils.h b/cloud_print/service/win/service_utils.h index b75479e5ac..083e091979 100644 --- a/cloud_print/service/win/service_utils.h +++ b/cloud_print/service/win/service_utils.h @@ -7,7 +7,7 @@ class CommandLine; -#include "base/string16.h" +#include "base/strings/string16.h" string16 ReplaceLocalHostInName(const string16& user_name); string16 GetCurrentUserName(); diff --git a/cloud_print/service/win/setup_listener.cc b/cloud_print/service/win/setup_listener.cc index ebf475fe23..65c6e329cd 100644 --- a/cloud_print/service/win/setup_listener.cc +++ b/cloud_print/service/win/setup_listener.cc @@ -10,10 +10,10 @@ #include "base/bind.h" #include "base/guid.h" #include "base/json/json_reader.h" +#include "base/strings/utf_string_conversions.h" #include "base/synchronization/waitable_event.h" #include "base/threading/platform_thread.h" #include "base/threading/thread.h" -#include "base/utf_string_conversions.h" #include "base/values.h" #include "cloud_print/service/win/service_utils.h" #include "ipc/ipc_channel.h" diff --git a/cloud_print/service/win/setup_listener.h b/cloud_print/service/win/setup_listener.h index 52c059d42a..9745c62311 100644 --- a/cloud_print/service/win/setup_listener.h +++ b/cloud_print/service/win/setup_listener.h @@ -11,7 +11,7 @@ #include "base/compiler_specific.h" #include "base/files/file_path.h" #include "base/memory/scoped_ptr.h" -#include "base/string16.h" +#include "base/strings/string16.h" #include "ipc/ipc_listener.h" namespace base { diff --git a/cloud_print/virtual_driver/win/install/setup.cc b/cloud_print/virtual_driver/win/install/setup.cc index 4cde7a959d..26fc32ffe5 100644 --- a/cloud_print/virtual_driver/win/install/setup.cc +++ b/cloud_print/virtual_driver/win/install/setup.cc @@ -17,8 +17,8 @@ #include "base/path_service.h" #include "base/process.h" #include "base/process_util.h" -#include "base/string16.h" -#include "base/string_util.h" +#include "base/strings/string16.h" +#include "base/strings/string_util.h" #include "base/win/registry.h" #include "base/win/scoped_handle.h" #include "base/win/windows_version.h" diff --git a/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc b/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc index c13228adff..084816e98f 100644 --- a/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc +++ b/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc @@ -15,11 +15,12 @@ #include "base/at_exit.h" #include "base/command_line.h" #include "base/file_util.h" +#include "base/files/file_enumerator.h" #include "base/logging.h" #include "base/path_service.h" #include "base/process.h" #include "base/process_util.h" -#include "base/string16.h" +#include "base/strings/string16.h" #include "base/win/registry.h" #include "base/win/scoped_handle.h" #include "base/win/windows_version.h" @@ -119,14 +120,11 @@ base::FilePath GetAppDataDir() { // Delete files which where not deleted by chrome. void DeleteLeakedFiles(const base::FilePath& dir) { - using file_util::FileEnumerator; base::Time delete_before = base::Time::Now() - base::TimeDelta::FromDays(1); - FileEnumerator enumerator(dir, false, FileEnumerator::FILES); + base::FileEnumerator enumerator(dir, false, base::FileEnumerator::FILES); for (base::FilePath file_path = enumerator.Next(); !file_path.empty(); file_path = enumerator.Next()) { - FileEnumerator::FindInfo info; - enumerator.GetFindInfo(&info); - if (FileEnumerator::GetLastModifiedTime(info) < delete_before) + if (enumerator.GetInfo().GetLastModifiedTime() < delete_before) file_util::Delete(file_path, false); } } diff --git a/cloud_print/virtual_driver/win/port_monitor/port_monitor.h b/cloud_print/virtual_driver/win/port_monitor/port_monitor.h index 3e21f88aaa..45476ec9a7 100644 --- a/cloud_print/virtual_driver/win/port_monitor/port_monitor.h +++ b/cloud_print/virtual_driver/win/port_monitor/port_monitor.h @@ -9,7 +9,7 @@ #include <string> #include "base/file_util.h" #include "base/process.h" -#include "base/string16.h" +#include "base/strings/string16.h" namespace cloud_print { diff --git a/cloud_print/virtual_driver/win/port_monitor/port_monitor_dll.cc b/cloud_print/virtual_driver/win/port_monitor/port_monitor_dll.cc index ae25d55ee9..6bc59629ed 100644 --- a/cloud_print/virtual_driver/win/port_monitor/port_monitor_dll.cc +++ b/cloud_print/virtual_driver/win/port_monitor/port_monitor_dll.cc @@ -19,7 +19,7 @@ #include "base/path_service.h" #include "base/process.h" #include "base/process_util.h" -#include "base/string16.h" +#include "base/strings/string16.h" #include "base/win/registry.h" #include "base/win/scoped_handle.h" #include "base/win/windows_version.h" diff --git a/cloud_print/virtual_driver/win/port_monitor/port_monitor_unittest.cc b/cloud_print/virtual_driver/win/port_monitor/port_monitor_unittest.cc index cc935bf04c..1ab8a366b1 100644 --- a/cloud_print/virtual_driver/win/port_monitor/port_monitor_unittest.cc +++ b/cloud_print/virtual_driver/win/port_monitor/port_monitor_unittest.cc @@ -6,7 +6,7 @@ #include <winspool.h> #include "base/file_util.h" #include "base/path_service.h" -#include "base/string16.h" +#include "base/strings/string16.h" #include "base/win/registry.h" #include "base/win/scoped_handle.h" #include "cloud_print/virtual_driver/win/port_monitor/spooler_win.h" diff --git a/cloud_print/virtual_driver/win/virtual_driver_helpers.cc b/cloud_print/virtual_driver/win/virtual_driver_helpers.cc index 71aa2bf6d4..e214529507 100644 --- a/cloud_print/virtual_driver/win/virtual_driver_helpers.cc +++ b/cloud_print/virtual_driver/win/virtual_driver_helpers.cc @@ -9,7 +9,7 @@ #include "base/file_util.h" #include "base/logging.h" -#include "base/string16.h" +#include "base/strings/string16.h" #include "base/win/windows_version.h" #include "cloud_print/common/win/cloud_print_utils.h" diff --git a/cloud_print/virtual_driver/win/virtual_driver_helpers.h b/cloud_print/virtual_driver/win/virtual_driver_helpers.h index 18736ccda4..7a275ac9ae 100644 --- a/cloud_print/virtual_driver/win/virtual_driver_helpers.h +++ b/cloud_print/virtual_driver/win/virtual_driver_helpers.h @@ -7,7 +7,7 @@ #include <windows.h> -#include "base/string16.h" +#include "base/strings/string16.h" namespace base { class FilePath; |