1cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// Copyright 2015 The Android Open Source Project 2cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// 3cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// Licensed under the Apache License, Version 2.0 (the "License"); 4cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// you may not use this file except in compliance with the License. 5cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// You may obtain a copy of the License at 6cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// 7cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// http://www.apache.org/licenses/LICENSE-2.0 8cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// 9cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// Unless required by applicable law or agreed to in writing, software 10cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// distributed under the License is distributed on an "AS IS" BASIS, 11cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// See the License for the specific language governing permissions and 13cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// limitations under the License. 14974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 15974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka#ifndef BUFFET_WEBSERV_CLIENT_H_ 16974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka#define BUFFET_WEBSERV_CLIENT_H_ 17974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 18974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka#include <memory> 19974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka#include <string> 20974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka#include <vector> 21974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 22974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka#include <base/memory/weak_ptr.h> 23e32375bdf73d6e79a003a194e4c6931f38348520Alex Vakulenko#include <weave/provider/http_server.h> 24974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 25974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Bukanamespace dbus { 26974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Bukaclass Bus; 27974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka} 28974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 294170585fe75d99036883229081420f2972dd4ec1Alex Vakulenkonamespace brillo { 30974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Bukanamespace dbus_utils { 31974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Bukaclass AsyncEventSequencer; 32974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka} 33974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka} 34974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 35974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Bukanamespace libwebserv { 36974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Bukaclass ProtocolHandler; 37974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Bukaclass Request; 38974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Bukaclass Response; 39974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Bukaclass Server; 40974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka} 41974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 42974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Bukanamespace buffet { 43974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 44974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka// Wrapper around libwebserv that implements HttpServer interface. 45e32375bdf73d6e79a003a194e4c6931f38348520Alex Vakulenkoclass WebServClient : public weave::provider::HttpServer { 46974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka public: 47974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka WebServClient(const scoped_refptr<dbus::Bus>& bus, 484170585fe75d99036883229081420f2972dd4ec1Alex Vakulenko brillo::dbus_utils::AsyncEventSequencer* sequencer, 49be39e9339baa85af546344da40b0663a6aea1a97Alex Vakulenko const base::Closure& server_available_callback); 50974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka ~WebServClient() override; 51974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 52974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka // HttpServer implementation. 53be39e9339baa85af546344da40b0663a6aea1a97Alex Vakulenko void AddHttpRequestHandler(const std::string& path, 54be39e9339baa85af546344da40b0663a6aea1a97Alex Vakulenko const RequestHandlerCallback& callback) override; 55be39e9339baa85af546344da40b0663a6aea1a97Alex Vakulenko void AddHttpsRequestHandler(const std::string& path, 56be39e9339baa85af546344da40b0663a6aea1a97Alex Vakulenko const RequestHandlerCallback& callback) override; 57be39e9339baa85af546344da40b0663a6aea1a97Alex Vakulenko 58974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka uint16_t GetHttpPort() const override; 59974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka uint16_t GetHttpsPort() const override; 60a071cd996580856476e6b9c3d4d91d1599155c33Alex Vakulenko base::TimeDelta GetRequestTimeout() const override; 61be39e9339baa85af546344da40b0663a6aea1a97Alex Vakulenko std::vector<uint8_t> GetHttpsCertificateFingerprint() const override; 62974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 63974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka private: 64be39e9339baa85af546344da40b0663a6aea1a97Alex Vakulenko void OnRequest(const RequestHandlerCallback& callback, 65974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka std::unique_ptr<libwebserv::Request> request, 66974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka std::unique_ptr<libwebserv::Response> response); 67974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 68974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka void OnProtocolHandlerConnected( 69974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka libwebserv::ProtocolHandler* protocol_handler); 70974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 71974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka void OnProtocolHandlerDisconnected( 72974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka libwebserv::ProtocolHandler* protocol_handler); 73974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 74974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka uint16_t http_port_{0}; 75974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka uint16_t https_port_{0}; 76097cbd75338995cc8c0238f157d7e4e967a11e6fVitaly Buka std::vector<uint8_t> certificate_; 77974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 78974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka std::unique_ptr<libwebserv::Server> web_server_; 79be39e9339baa85af546344da40b0663a6aea1a97Alex Vakulenko base::Closure server_available_callback_; 80974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 81974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka base::WeakPtrFactory<WebServClient> weak_ptr_factory_{this}; 82974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka DISALLOW_COPY_AND_ASSIGN(WebServClient); 83974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka}; 84974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 85974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka} // namespace buffet 86974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka 87974647f515aa53bc3063c15ca43b6a94e246ae49Vitaly Buka#endif // BUFFET_WEBSERV_CLIENT_H_ 88