Merge "Initial add of flouride "domain socket" bluetooth client"
diff --git a/buffet/avahi_mdns_client.h b/buffet/avahi_mdns_client.h
index 7784218..2488dd4 100644
--- a/buffet/avahi_mdns_client.h
+++ b/buffet/avahi_mdns_client.h
@@ -22,7 +22,7 @@
#include <base/memory/weak_ptr.h>
#include <dbus/bus.h>
-#include <weave/mdns.h>
+#include <weave/dns_service_discovery_provider.h>
#include "buffet/mdns_client.h"
@@ -34,7 +34,7 @@
explicit AvahiMdnsClient(const scoped_refptr<dbus::Bus>& bus);
~AvahiMdnsClient() override;
- // weave::Mdns implementation.
+ // weave::DnsServiceDiscoveryProvider implementation.
void PublishService(const std::string& service_type, uint16_t port,
const std::vector<std::string>& txt) override;
void StopPublishing(const std::string& service_type) override;
diff --git a/buffet/brillo_network_client.cc b/buffet/brillo_network_client.cc
index e611177..c467418 100644
--- a/buffet/brillo_network_client.cc
+++ b/buffet/brillo_network_client.cc
@@ -21,7 +21,7 @@
namespace buffet {
namespace {
-const char kErrorCommandFailed[] = "commandFailed";
+const char kErrorDomain[] = "brillo_network";
const int kConnectionTimeoutSeconds = 30;
const int kConnectionActivePollSeconds = 3;
const int kConnectionInactivePollSeconds = 10;
@@ -36,18 +36,22 @@
BrilloNetworkClient::~BrilloNetworkClient() {
}
-void BrilloNetworkClient::AddOnConnectionChangedCallback(
- const OnConnectionChangedCallback& listener) {
+void BrilloNetworkClient::AddConnectionChangedCallback(
+ const ConnectionChangedCallback& listener) {
connection_listeners_.push_back(listener);
}
-bool BrilloNetworkClient::ConnectToService(const std::string& ssid,
- const std::string& passphrase,
- const base::Closure& on_success,
- weave::ErrorPtr* error) {
+void BrilloNetworkClient::Connect(const std::string& ssid,
+ const std::string& passphrase,
+ const weave::SuccessCallback& on_success,
+ const weave::ErrorCallback& on_error) {
if (!connectivity_client_.ConnectToAccessPoint(ssid, passphrase)) {
- weave::Error::AddTo(error, FROM_HERE, kErrorCommandFailed, "", "");
- return false;
+ weave::ErrorPtr error;
+ weave::Error::AddTo(&error, FROM_HERE, kErrorDomain, "network_failure",
+ "Failed to connect to service");
+ base::MessageLoop::current()->PostDelayedTask(
+ FROM_HERE, base::Bind(on_error, base::Owned(error.release())), {});
+ return;
}
connection_success_closure_ = on_success;
@@ -62,20 +66,18 @@
base::TimeDelta::FromSeconds(kConnectionTimeoutSeconds));
ScheduleNextStatePoll();
-
- return true;
}
weave::NetworkState BrilloNetworkClient::GetConnectionState() const {
return state_;
}
-void BrilloNetworkClient::EnableAccessPoint(const std::string& ssid) {
+void BrilloNetworkClient::StartAccessPoint(const std::string& ssid) {
connectivity_client_.EnableAccessPoint(ssid);
state_ = weave::NetworkState::kOffline;
}
-void BrilloNetworkClient::DisableAccessPoint() {
+void BrilloNetworkClient::StopAccessPoint() {
connectivity_client_.DisableAccessPoint();
}
@@ -112,7 +114,7 @@
}
if (is_connected != was_connected) {
for (const auto& listener : connection_listeners_) {
- listener.Run(is_connected);
+ listener.Run();
}
}
ScheduleNextStatePoll();
diff --git a/buffet/brillo_network_client.h b/buffet/brillo_network_client.h
index 6a00ac8..f05bd97 100644
--- a/buffet/brillo_network_client.h
+++ b/buffet/brillo_network_client.h
@@ -21,7 +21,7 @@
#include <vector>
#include <base/cancelable_callback.h>
-#include <weave/network.h>
+#include <weave/network_provider.h>
#include "connectivity_client.h"
@@ -35,15 +35,16 @@
~BrilloNetworkClient() override;
// Implements the Network interface.
- void AddOnConnectionChangedCallback(
- const OnConnectionChangedCallback& listener) override;
- bool ConnectToService(const std::string& ssid,
- const std::string& passphrase,
- const base::Closure& on_success,
- weave::ErrorPtr* error) override;
+ void AddConnectionChangedCallback(
+ const ConnectionChangedCallback& listener) override;
+ void Connect(
+ const std::string& ssid,
+ const std::string& passphrase,
+ const weave::SuccessCallback& on_success,
+ const base::Callback<void(const weave::Error*)>& on_error) override;
weave::NetworkState GetConnectionState() const override;
- void EnableAccessPoint(const std::string& ssid) override;
- void DisableAccessPoint() override;
+ void StartAccessPoint(const std::string& ssid) override;
+ void StopAccessPoint() override;
private:
enum class ConnectionState {
@@ -57,7 +58,7 @@
void UpdateConnectionState();
ConnectivityClient connectivity_client_;
- std::vector<OnConnectionChangedCallback> connection_listeners_;
+ std::vector<ConnectionChangedCallback> connection_listeners_;
base::CancelableClosure connection_timeout_closure_;
base::CancelableClosure periodic_connection_state_closure_;
base::Closure connection_success_closure_;
diff --git a/buffet/manager.cc b/buffet/manager.cc
index ef2fc96..787036c 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -91,7 +91,8 @@
device_->Start(options, config_.get(), task_runner_.get(), http_client_.get(),
network_client_.get(), mdns_client_.get(),
- web_serv_client_.get(), bluetooth_client_.get());
+ web_serv_client_.get(), network_client_.get(),
+ bluetooth_client_.get());
command_dispatcher_.reset(new DBusCommandDispacher{
dbus_object_.GetObjectManager(), device_->GetCommands()});
diff --git a/buffet/mdns_client.h b/buffet/mdns_client.h
index 374deba..3743b79 100644
--- a/buffet/mdns_client.h
+++ b/buffet/mdns_client.h
@@ -24,12 +24,12 @@
#include <base/guid.h>
#include <base/memory/ref_counted.h>
#include <dbus/bus.h>
-#include <weave/mdns.h>
+#include <weave/dns_service_discovery_provider.h>
namespace buffet {
// Stub MDNS implementation that does nothing on platform without MDNS support.
-class MdnsClient : public weave::Mdns {
+class MdnsClient : public weave::DnsServiceDiscoveryProvider {
public:
MdnsClient() : device_id_{base::GenerateGUID()} {}
~MdnsClient() override = default;
diff --git a/buffet/network_client.h b/buffet/network_client.h
index d43e825..81d1e77 100644
--- a/buffet/network_client.h
+++ b/buffet/network_client.h
@@ -23,14 +23,16 @@
#include <base/cancelable_callback.h>
#include <chromeos/errors/error_codes.h>
-#include <weave/network.h>
+#include <weave/network_provider.h>
+#include <weave/wifi_provider.h>
#include "buffet/socket_stream.h"
#include "buffet/weave_error_conversion.h"
namespace buffet {
-class NetworkClient : public weave::Network {
+class NetworkClient : public weave::NetworkProvider,
+ public weave::WifiProvider {
public:
explicit NetworkClient(const std::set<std::string>& device_whitelist)
: device_whitelist_{device_whitelist} {
@@ -38,33 +40,19 @@
~NetworkClient() override = default;
- // Implements the Network interface.
- void AddOnConnectionChangedCallback(
- const OnConnectionChangedCallback& listener) override {
- }
-
- bool ConnectToService(const std::string& ssid,
- const std::string& passphrase,
- const base::Closure& on_success,
- weave::ErrorPtr* error) override {
- return true;
- }
+ // NetworkProvider implementation.
+ void AddConnectionChangedCallback(
+ const ConnectionChangedCallback& listener) override {}
weave::NetworkState GetConnectionState() const override {
return weave::NetworkState::kOffline;
}
- void EnableAccessPoint(const std::string& ssid) override {
- }
-
- void DisableAccessPoint() override {
- }
-
void OpenSslSocket(
const std::string& host,
uint16_t port,
const base::Callback<void(std::unique_ptr<weave::Stream>)>& on_success,
- const base::Callback<void(const weave::Error*)>& on_error) override {
+ const weave::ErrorCallback& on_error) override {
auto socket = SocketStream::ConnectBlocking(host, port);
if (socket) {
SocketStream::TlsConnect(std::move(socket), host, on_success, on_error);
@@ -77,6 +65,16 @@
on_error.Run(weave_error.get());
}
+ // WifiProvider implementation.
+ void Connect(const std::string& ssid,
+ const std::string& passphrase,
+ const weave::SuccessCallback& on_success,
+ const weave::ErrorCallback& on_error) override {}
+
+ void StartAccessPoint(const std::string& ssid) override {}
+
+ void StopAccessPoint() override {}
+
static std::unique_ptr<NetworkClient> CreateInstance(
const std::set<std::string>& device_whitelist);
diff --git a/buffet/socket_stream.cc b/buffet/socket_stream.cc
index 9ce56bf..8ee9c60 100644
--- a/buffet/socket_stream.cc
+++ b/buffet/socket_stream.cc
@@ -69,11 +69,10 @@
} // namespace
-void SocketStream::ReadAsync(
- void* buffer,
- size_t size_to_read,
- const base::Callback<void(size_t)>& success_callback,
- const base::Callback<void(const weave::Error*)>& error_callback) {
+void SocketStream::Read(void* buffer,
+ size_t size_to_read,
+ const ReadSuccessCallback& success_callback,
+ const weave::ErrorCallback& error_callback) {
chromeos::ErrorPtr chromeos_error;
if (!ptr_->ReadAsync(buffer, size_to_read, success_callback,
base::Bind(&OnError, error_callback), &chromeos_error)) {
@@ -84,11 +83,10 @@
}
}
-void SocketStream::WriteAllAsync(
- const void* buffer,
- size_t size_to_write,
- const base::Closure& success_callback,
- const base::Callback<void(const weave::Error*)>& error_callback) {
+void SocketStream::Write(const void* buffer,
+ size_t size_to_write,
+ const weave::SuccessCallback& success_callback,
+ const weave::ErrorCallback& error_callback) {
chromeos::ErrorPtr chromeos_error;
if (!ptr_->WriteAllAsync(buffer, size_to_write, success_callback,
base::Bind(&OnError, error_callback),
@@ -100,7 +98,7 @@
}
}
-void SocketStream::CancelPendingAsyncOperations() {
+void SocketStream::CancelPendingOperations() {
ptr_->CancelPendingAsyncOperations();
}
@@ -124,7 +122,7 @@
std::unique_ptr<Stream> socket,
const std::string& host,
const base::Callback<void(std::unique_ptr<Stream>)>& success_callback,
- const base::Callback<void(const weave::Error*)>& error_callback) {
+ const weave::ErrorCallback& error_callback) {
SocketStream* stream = static_cast<SocketStream*>(socket.get());
chromeos::TlsStream::Connect(std::move(stream->ptr_), host,
base::Bind(&OnSuccess, success_callback),
diff --git a/buffet/socket_stream.h b/buffet/socket_stream.h
index 757190c..968acb9 100644
--- a/buffet/socket_stream.h
+++ b/buffet/socket_stream.h
@@ -20,29 +20,26 @@
~SocketStream() override = default;
- void ReadAsync(
- void* buffer,
- size_t size_to_read,
- const base::Callback<void(size_t)>& success_callback,
- const base::Callback<void(const weave::Error*)>& error_callback) override;
+ void Read(void* buffer,
+ size_t size_to_read,
+ const ReadSuccessCallback& success_callback,
+ const weave::ErrorCallback& error_callback) override;
- void WriteAllAsync(
- const void* buffer,
- size_t size_to_write,
- const base::Closure& success_callback,
- const base::Callback<void(const weave::Error*)>& error_callback) override;
+ void Write(const void* buffer,
+ size_t size_to_write,
+ const weave::SuccessCallback& success_callback,
+ const weave::ErrorCallback& error_callback) override;
- void CancelPendingAsyncOperations() override;
+ void CancelPendingOperations() override;
static std::unique_ptr<weave::Stream> ConnectBlocking(const std::string& host,
uint16_t port);
- static void TlsConnect(
- std::unique_ptr<weave::Stream> socket,
- const std::string& host,
- const base::Callback<void(std::unique_ptr<weave::Stream>)>&
- success_callback,
- const base::Callback<void(const weave::Error*)>& error_callback);
+ static void TlsConnect(std::unique_ptr<weave::Stream> socket,
+ const std::string& host,
+ const base::Callback<void(
+ std::unique_ptr<weave::Stream>)>& success_callback,
+ const weave::ErrorCallback& error_callback);
private:
chromeos::StreamPtr ptr_;
diff --git a/buffet/webserv_client.cc b/buffet/webserv_client.cc
index 37c9716..31122ab 100644
--- a/buffet/webserv_client.cc
+++ b/buffet/webserv_client.cc
@@ -13,6 +13,7 @@
#include <libwebserv/server.h>
#include "buffet/dbus_constants.h"
+#include "buffet/socket_stream.h"
namespace buffet {
@@ -29,12 +30,38 @@
std::string GetFirstHeader(const std::string& name) const override {
return request_->GetFirstHeader(name);
}
+
+ // TODO(avakulenko): Remove this method and rewrite all call sites in libweave
+ // to use GetDataStream() instead.
const std::vector<uint8_t>& GetData() const override {
- return request_->GetData();
+ if (!request_data_)
+ return *request_data_;
+
+ request_data_.reset(new std::vector<uint8_t>);
+ auto stream = request_->GetDataStream();
+ if (stream) {
+ if (stream->CanGetSize())
+ request_data_->reserve(stream->GetRemainingSize());
+ std::vector<uint8_t> buffer(16 * 1024); // 16K seems to be good enough.
+ size_t sz = 0;
+ while (stream->ReadBlocking(buffer.data(), buffer.size(), &sz, nullptr) &&
+ sz > 0) {
+ request_data_->insert(request_data_->end(),
+ buffer.data(), buffer.data() + sz);
+ }
+ }
+ return *request_data_;
+ }
+
+ std::unique_ptr<weave::Stream> GetDataStream() const override {
+ auto stream = std::unique_ptr<weave::Stream>{
+ new SocketStream{request_->GetDataStream()}};
+ return stream;
}
private:
std::unique_ptr<libwebserv::Request> request_;
+ mutable std::unique_ptr<std::vector<uint8_t>> request_data_;
DISALLOW_COPY_AND_ASSIGN(RequestImpl);
};
@@ -103,7 +130,7 @@
int status_code,
const std::string& data,
const std::string& mime_type) {
- response->Reply(status_code, data.data(), data.size(), mime_type);
+ response->ReplyWithText(status_code, data, mime_type);
}
void WebServClient::OnProtocolHandlerConnected(