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_