blob: 0b47527a9a8d354568ce358f9072ff673889bbcd [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>
Alex Vakulenkoe32375b2015-09-28 08:55:40 -070013#include <weave/provider/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.
Alex Vakulenkoe32375b2015-09-28 08:55:40 -070035class WebServClient : public weave::provider::HttpServer {
Vitaly Buka974647f2015-08-02 20:57:43 -070036 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;
Vitaly Buka097cbd72015-08-13 18:28:14 -070048 const std::vector<uint8_t>& GetHttpsCertificateFingerprint() const override;
Vitaly Buka974647f2015-08-02 20:57:43 -070049
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};
Vitaly Buka097cbd72015-08-13 18:28:14 -070068 std::vector<uint8_t> certificate_;
Vitaly Buka974647f2015-08-02 20:57:43 -070069
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_