buffet: Move WebServClient out of libweave
libweave now relies on platform specific implementation of
weave::HttpServer.
BUG=brillo:1252
TEST='FEATURES=test emerge-gizmo buffet'
Change-Id: I8f2c2f119699ff5096a74dc05948db0eaf108ea3
Reviewed-on: https://chromium-review.googlesource.com/290142
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Trybot-Ready: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/webserv_client.h b/buffet/webserv_client.h
new file mode 100644
index 0000000..cbfbf23
--- /dev/null
+++ b/buffet/webserv_client.h
@@ -0,0 +1,81 @@
+// Copyright 2015 The Chromium OS 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 BUFFET_WEBSERV_CLIENT_H_
+#define BUFFET_WEBSERV_CLIENT_H_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include <base/memory/weak_ptr.h>
+
+#include "weave/http_server.h"
+
+namespace dbus {
+class Bus;
+}
+
+namespace chromeos {
+namespace dbus_utils {
+class AsyncEventSequencer;
+}
+}
+
+namespace libwebserv {
+class ProtocolHandler;
+class Request;
+class Response;
+class Server;
+}
+
+namespace buffet {
+
+// Wrapper around libwebserv that implements HttpServer interface.
+class WebServClient : public weave::HttpServer {
+ public:
+ WebServClient(const scoped_refptr<dbus::Bus>& bus,
+ chromeos::dbus_utils::AsyncEventSequencer* sequencer);
+ ~WebServClient() override;
+
+ // HttpServer implementation.
+ void AddOnStateChangedCallback(
+ const OnStateChangedCallback& callback) override;
+ void AddRequestHandler(const std::string& path_prefix,
+ const OnRequestCallback& callback) override;
+ uint16_t GetHttpPort() const override;
+ uint16_t GetHttpsPort() const override;
+ const chromeos::Blob& GetHttpsCertificateFingerprint() const override;
+
+ private:
+ void OnRequest(const OnRequestCallback& callback,
+ std::unique_ptr<libwebserv::Request> request,
+ std::unique_ptr<libwebserv::Response> response);
+
+ void OnResponse(std::unique_ptr<libwebserv::Response> response,
+ int status_code,
+ const std::string& data,
+ const std::string& mime_type);
+
+ void OnProtocolHandlerConnected(
+ libwebserv::ProtocolHandler* protocol_handler);
+
+ void OnProtocolHandlerDisconnected(
+ libwebserv::ProtocolHandler* protocol_handler);
+
+ uint16_t http_port_{0};
+ uint16_t https_port_{0};
+ chromeos::Blob certificate_;
+
+ std::vector<OnStateChangedCallback> on_state_changed_callbacks_;
+
+ std::unique_ptr<libwebserv::Server> web_server_;
+
+ base::WeakPtrFactory<WebServClient> weak_ptr_factory_{this};
+ DISALLOW_COPY_AND_ASSIGN(WebServClient);
+};
+
+} // namespace buffet
+
+#endif // BUFFET_WEBSERV_CLIENT_H_