blob: d7b5433cb3c027600522bba8c1c52369bcd52a10 [file] [log] [blame]
Vitaly Buka974647f2015-08-02 20:57:43 -07001// Copyright 2015 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BUFFET_WEBSERV_CLIENT_H_
6#define BUFFET_WEBSERV_CLIENT_H_
7
8#include <memory>
9#include <string>
10#include <vector>
11
12#include <base/memory/weak_ptr.h>
Vitaly Bukae2713ac2015-08-03 13:50:01 -070013#include <weave/http_server.h>
Vitaly Buka974647f2015-08-02 20:57:43 -070014
15namespace dbus {
16class Bus;
17}
18
19namespace chromeos {
20namespace dbus_utils {
21class AsyncEventSequencer;
22}
23}
24
25namespace libwebserv {
26class ProtocolHandler;
27class Request;
28class Response;
29class Server;
30}
31
32namespace buffet {
33
34// Wrapper around libwebserv that implements HttpServer interface.
35class WebServClient : public weave::HttpServer {
36 public:
37 WebServClient(const scoped_refptr<dbus::Bus>& bus,
38 chromeos::dbus_utils::AsyncEventSequencer* sequencer);
39 ~WebServClient() override;
40
41 // HttpServer implementation.
42 void AddOnStateChangedCallback(
43 const OnStateChangedCallback& callback) override;
44 void AddRequestHandler(const std::string& path_prefix,
45 const OnRequestCallback& callback) override;
46 uint16_t GetHttpPort() const override;
47 uint16_t GetHttpsPort() const override;
48 const chromeos::Blob& GetHttpsCertificateFingerprint() const override;
49
50 private:
51 void OnRequest(const OnRequestCallback& callback,
52 std::unique_ptr<libwebserv::Request> request,
53 std::unique_ptr<libwebserv::Response> response);
54
55 void OnResponse(std::unique_ptr<libwebserv::Response> response,
56 int status_code,
57 const std::string& data,
58 const std::string& mime_type);
59
60 void OnProtocolHandlerConnected(
61 libwebserv::ProtocolHandler* protocol_handler);
62
63 void OnProtocolHandlerDisconnected(
64 libwebserv::ProtocolHandler* protocol_handler);
65
66 uint16_t http_port_{0};
67 uint16_t https_port_{0};
68 chromeos::Blob certificate_;
69
70 std::vector<OnStateChangedCallback> on_state_changed_callbacks_;
71
72 std::unique_ptr<libwebserv::Server> web_server_;
73
74 base::WeakPtrFactory<WebServClient> weak_ptr_factory_{this};
75 DISALLOW_COPY_AND_ASSIGN(WebServClient);
76};
77
78} // namespace buffet
79
80#endif // BUFFET_WEBSERV_CLIENT_H_