blob: cbfbf23070fa2d5dfb35676cd3fe9eab10eca417 [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>
13
14#include "weave/http_server.h"
15
16namespace dbus {
17class Bus;
18}
19
20namespace chromeos {
21namespace dbus_utils {
22class AsyncEventSequencer;
23}
24}
25
26namespace libwebserv {
27class ProtocolHandler;
28class Request;
29class Response;
30class Server;
31}
32
33namespace buffet {
34
35// Wrapper around libwebserv that implements HttpServer interface.
36class WebServClient : public weave::HttpServer {
37 public:
38 WebServClient(const scoped_refptr<dbus::Bus>& bus,
39 chromeos::dbus_utils::AsyncEventSequencer* sequencer);
40 ~WebServClient() override;
41
42 // HttpServer implementation.
43 void AddOnStateChangedCallback(
44 const OnStateChangedCallback& callback) override;
45 void AddRequestHandler(const std::string& path_prefix,
46 const OnRequestCallback& callback) override;
47 uint16_t GetHttpPort() const override;
48 uint16_t GetHttpsPort() const override;
49 const chromeos::Blob& GetHttpsCertificateFingerprint() const override;
50
51 private:
52 void OnRequest(const OnRequestCallback& callback,
53 std::unique_ptr<libwebserv::Request> request,
54 std::unique_ptr<libwebserv::Response> response);
55
56 void OnResponse(std::unique_ptr<libwebserv::Response> response,
57 int status_code,
58 const std::string& data,
59 const std::string& mime_type);
60
61 void OnProtocolHandlerConnected(
62 libwebserv::ProtocolHandler* protocol_handler);
63
64 void OnProtocolHandlerDisconnected(
65 libwebserv::ProtocolHandler* protocol_handler);
66
67 uint16_t http_port_{0};
68 uint16_t https_port_{0};
69 chromeos::Blob certificate_;
70
71 std::vector<OnStateChangedCallback> on_state_changed_callbacks_;
72
73 std::unique_ptr<libwebserv::Server> web_server_;
74
75 base::WeakPtrFactory<WebServClient> weak_ptr_factory_{this};
76 DISALLOW_COPY_AND_ASSIGN(WebServClient);
77};
78
79} // namespace buffet
80
81#endif // BUFFET_WEBSERV_CLIENT_H_