|  | // Copyright 2015 The Weave Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef LIBWEAVE_EXAMPLES_PROVIDER_EVENT_HTTP_SERVER_H_ | 
|  | #define LIBWEAVE_EXAMPLES_PROVIDER_EVENT_HTTP_SERVER_H_ | 
|  |  | 
|  | #include <evhtp.h> | 
|  | #include <openssl/ssl.h> | 
|  |  | 
|  | #include <map> | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include <base/memory/weak_ptr.h> | 
|  | #include <weave/provider/http_server.h> | 
|  |  | 
|  | #include "examples/provider/event_deleter.h" | 
|  |  | 
|  | namespace weave { | 
|  | namespace examples { | 
|  |  | 
|  | class EventTaskRunner; | 
|  |  | 
|  | // HTTP/HTTPS server implemented with libevhtp. | 
|  | class HttpServerImpl : public provider::HttpServer { | 
|  | public: | 
|  | class RequestImpl; | 
|  |  | 
|  | explicit HttpServerImpl(EventTaskRunner* task_runner); | 
|  |  | 
|  | void AddHttpRequestHandler(const std::string& path_prefix, | 
|  | const RequestHandlerCallback& callback) override; | 
|  | void AddHttpsRequestHandler(const std::string& path_prefix, | 
|  | const RequestHandlerCallback& callback) override; | 
|  | uint16_t GetHttpPort() const override; | 
|  | uint16_t GetHttpsPort() const override; | 
|  | base::TimeDelta GetRequestTimeout() const override; | 
|  | std::vector<uint8_t> GetHttpsCertificateFingerprint() const override; | 
|  |  | 
|  | private: | 
|  | void GenerateX509(X509* x509, EVP_PKEY* pkey); | 
|  | static void ProcessRequestCallback(evhtp_request_t* req, void* arg); | 
|  | void ProcessRequest(evhtp_request_t* req); | 
|  | void ProcessReply(std::shared_ptr<RequestImpl> request, | 
|  | int status_code, | 
|  | const std::string& data, | 
|  | const std::string& mime_type); | 
|  | void NotFound(evhtp_request_t* req); | 
|  |  | 
|  | std::map<std::string, RequestHandlerCallback> handlers_; | 
|  |  | 
|  | std::vector<uint8_t> cert_fingerprint_; | 
|  | EventTaskRunner* task_runner_{nullptr}; | 
|  | EventPtr<evhtp_t> httpd_; | 
|  | EventPtr<evhtp_t> httpsd_; | 
|  |  | 
|  | base::WeakPtrFactory<HttpServerImpl> weak_ptr_factory_{this}; | 
|  | }; | 
|  |  | 
|  | }  // namespace examples | 
|  | }  // namespace weave | 
|  |  | 
|  | #endif  // LIBWEAVE_EXAMPLES_PROVIDER_EVENT_HTTP_SERVER_H_ |