blob: cf3b397d3ab49bbc831247597c9ac29258f31323 [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,
Alex Vakulenkobe39e932015-10-09 08:10:36 -070038 chromeos::dbus_utils::AsyncEventSequencer* sequencer,
39 const base::Closure& server_available_callback);
Vitaly Buka974647f2015-08-02 20:57:43 -070040 ~WebServClient() override;
41
42 // HttpServer implementation.
Alex Vakulenkobe39e932015-10-09 08:10:36 -070043 void AddHttpRequestHandler(const std::string& path,
44 const RequestHandlerCallback& callback) override;
45 void AddHttpsRequestHandler(const std::string& path,
46 const RequestHandlerCallback& callback) override;
47
Vitaly Buka974647f2015-08-02 20:57:43 -070048 uint16_t GetHttpPort() const override;
49 uint16_t GetHttpsPort() const override;
Alex Vakulenkobe39e932015-10-09 08:10:36 -070050 std::vector<uint8_t> GetHttpsCertificateFingerprint() const override;
Vitaly Buka974647f2015-08-02 20:57:43 -070051
52 private:
Alex Vakulenkobe39e932015-10-09 08:10:36 -070053 void OnRequest(const RequestHandlerCallback& callback,
Vitaly Buka974647f2015-08-02 20:57:43 -070054 std::unique_ptr<libwebserv::Request> request,
55 std::unique_ptr<libwebserv::Response> response);
56
57 void OnResponse(std::unique_ptr<libwebserv::Response> response,
58 int status_code,
59 const std::string& data,
60 const std::string& mime_type);
61
62 void OnProtocolHandlerConnected(
63 libwebserv::ProtocolHandler* protocol_handler);
64
65 void OnProtocolHandlerDisconnected(
66 libwebserv::ProtocolHandler* protocol_handler);
67
68 uint16_t http_port_{0};
69 uint16_t https_port_{0};
Vitaly Buka097cbd72015-08-13 18:28:14 -070070 std::vector<uint8_t> certificate_;
Vitaly Buka974647f2015-08-02 20:57:43 -070071
Vitaly Buka974647f2015-08-02 20:57:43 -070072 std::unique_ptr<libwebserv::Server> web_server_;
Alex Vakulenkobe39e932015-10-09 08:10:36 -070073 base::Closure server_available_callback_;
Vitaly Buka974647f2015-08-02 20:57:43 -070074
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_