kodi
HTTPJsonRpcHandler.h
1 /*
2  * Copyright (C) 2011-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "interfaces/json-rpc/IClient.h"
12 #include "interfaces/json-rpc/ITransportLayer.h"
13 #include "network/httprequesthandler/IHTTPRequestHandler.h"
14 
15 #include <string>
16 
18 {
19 public:
20  CHTTPJsonRpcHandler() = default;
21  ~CHTTPJsonRpcHandler() override = default;
22 
23  // implementations of IHTTPRequestHandler
24  IHTTPRequestHandler* Create(const HTTPRequest &request) const override { return new CHTTPJsonRpcHandler(request); }
25  bool CanHandleRequest(const HTTPRequest &request) const override;
26 
27  MHD_RESULT HandleRequest() override;
28 
29  HttpResponseRanges GetResponseData() const override;
30 
31  int GetPriority() const override { return 5; }
32 
33 protected:
34  explicit CHTTPJsonRpcHandler(const HTTPRequest &request)
35  : IHTTPRequestHandler(request)
36  { }
37 
38  bool appendPostData(const char *data, size_t size) override;
39 
40 private:
41  std::string m_requestData;
42  std::string m_responseData;
43  CHttpResponseRange m_responseRange;
44 
45  class CHTTPTransportLayer : public JSONRPC::ITransportLayer
46  {
47  public:
48  CHTTPTransportLayer() = default;
49  ~CHTTPTransportLayer() override = default;
50 
51  // implementations of JSONRPC::ITransportLayer
52  bool PrepareDownload(const char *path, CVariant &details, std::string &protocol) override;
53  bool Download(const char *path, CVariant &result) override;
54  int GetCapabilities() override;
55  };
56  CHTTPTransportLayer m_transportLayer;
57 
58  class CHTTPClient : public JSONRPC::IClient
59  {
60  public:
61  explicit CHTTPClient(HTTPMethod method);
62  ~CHTTPClient() override = default;
63 
64  int GetPermissionFlags() override { return m_permissionFlags; }
65  int GetAnnouncementFlags() override;
66  bool SetAnnouncementFlags(int flags) override;
67 
68  private:
69  int m_permissionFlags;
70  };
71 };
Definition: IHTTPRequestHandler.h:66
int GetPriority() const override
Returns the priority of the HTTP request handler.
Definition: HTTPJsonRpcHandler.h:31
MHD_RESULT HandleRequest() override
Handles the HTTP request.
Definition: HTTPJsonRpcHandler.cpp:28
IHTTPRequestHandler * Create(const HTTPRequest &request) const override
Creates a new HTTP request handler for the given request.
Definition: HTTPJsonRpcHandler.h:24
HttpResponseRanges GetResponseData() const override
Returns the ranges with raw data belonging to the response.
Definition: HTTPJsonRpcHandler.cpp:113
Definition: Variant.h:31
Definition: HTTPJsonRpcHandler.h:17
Definition: HttpRangeUtils.h:43
Definition: ITransportLayer.h:27
Definition: IClient.h:13
bool CanHandleRequest(const HTTPRequest &request) const override
Checks if the HTTP request handler can handle the given request.
Definition: HTTPJsonRpcHandler.cpp:23
Definition: IHTTPRequestHandler.h:85