HttpResource.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * HttpResource.h
8  *
9  * @author: 2017 - Slavey Karadzhov <slav@attachix.com>
10  *
11  ****/
12 
13 #pragma once
14 
15 #include <WString.h>
16 #include <Data/ObjectMap.h>
17 
19 
21 
23  Delegate<int(HttpServerConnection& connection, HttpRequest&, const char* at, int length)>;
25  Delegate<int(HttpServerConnection& connection, HttpRequest&, char* at, int length)>;
27  Delegate<int(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response)>;
28 
34 {
35 public:
36  virtual ~HttpResource() = default;
37 
42  {
43  }
44 
45 public:
46  class PluginRef : public LinkedObjectTemplate<PluginRef>
47  {
48  public:
50 
51  PluginRef(HttpResourcePlugin* plugin) : plugin(plugin)
52  {
53  }
54 
56  {
57  return plugin;
58  }
59 
60  private:
61  HttpResourcePlugin* plugin;
62  };
63 
69 
71 
72  template <class... Tail> void addPlugin(HttpResourcePlugin* plugin, Tail... plugins)
73  {
74  addPlugin(plugin);
75  addPlugin(plugins...);
76  }
77 
78 private:
79  friend class HttpServerConnection;
80 
81  PluginRef::OwnedList plugins;
82 
83  int handleUrl(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response);
84  int handleHeaders(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response);
85  int handleUpgrade(HttpServerConnection& connection, HttpRequest& request, char* data, size_t length);
86  int handleBody(HttpServerConnection& connection, HttpRequest& request, char*& data, size_t& length);
87  int handleRequest(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response);
88 };
HttpResponse response
Definition: HttpConnection.h:188
Encapsulates an incoming or outgoing request.
Definition: HttpRequest.h:37
Base plugin class. Implementations should be based on either HttpPreFilter or HttpPostFilter
Definition: HttpResourcePlugin.h:24
Definition: HttpResource.h:47
HttpResourcePlugin * operator->() const
Definition: HttpResource.h:55
PluginRef(HttpResourcePlugin *plugin)
Definition: HttpResource.h:51
Instances of this class are registered with an HttpServer for a specific URL.
Definition: HttpResource.h:34
virtual ~HttpResource()=default
void addPlugin(HttpResourcePlugin *plugin)
HttpResourceDelegate onHeadersComplete
headers are ready
Definition: HttpResource.h:66
HttpResourceDelegate onRequestComplete
request is complete OR upgraded
Definition: HttpResource.h:67
void addPlugin(HttpResourcePlugin *plugin, Tail... plugins)
Definition: HttpResource.h:72
HttpServerConnectionUpgradeDelegate onUpgrade
request is upgraded and raw data is passed to it
Definition: HttpResource.h:68
virtual void shutdown(HttpServerConnection &)
Takes care to cleanup the connection.
Definition: HttpResource.h:41
HttpResourceDelegate onUrlComplete
URL is ready. Path and status code are available.
Definition: HttpResource.h:64
HttpServerConnectionBodyDelegate onBody
resource wants to process the raw body data
Definition: HttpResource.h:65
Represents either an incoming or outgoing response to a HTTP request.
Definition: HttpResponse.h:26
Definition: HttpServerConnection.h:34
Base class template for linked items with type casting.
Definition: LinkedObject.h:60