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)>;
28 
34 {
35 public:
36  virtual ~HttpResource()
37  {
38  }
39 
43  virtual void shutdown(HttpServerConnection& connection)
44  {
45  }
46 
47 public:
48  class PluginRef : public LinkedObjectTemplate<PluginRef>
49  {
50  public:
52 
53  PluginRef(HttpResourcePlugin* plugin) : plugin(plugin)
54  {
55  }
56 
58  {
59  return plugin;
60  }
61 
62  private:
63  HttpResourcePlugin* plugin;
64  };
65 
71 
72  void addPlugin(HttpResourcePlugin* plugin);
73 
74  template <class... Tail> void addPlugin(HttpResourcePlugin* plugin, Tail... plugins)
75  {
76  addPlugin(plugin);
77  addPlugin(plugins...);
78  }
79 
80 private:
81  friend class HttpServerConnection;
82 
83  PluginRef::OwnedList plugins;
84 
85  int handleUrl(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response);
86  int handleHeaders(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response);
87  int handleUpgrade(HttpServerConnection& connection, HttpRequest& request, char* data, size_t length);
88  int handleBody(HttpServerConnection& connection, HttpRequest& request, char*& data, size_t& length);
89  int handleRequest(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response);
90 };
HttpResponse response
Definition: HttpConnection.h:199
Definition: HttpResource.h:48
Base class template for linked items with type casting.
Definition: LinkedObject.h:61
HttpResourceDelegate onRequestComplete
request is complete OR upgraded
Definition: HttpResource.h:69
Represents either an incoming or outgoing response to a HTTP request.
Definition: HttpResponse.h:25
Base plugin class. Implementations should be based on either HttpPreFilter or HttpPostFilter
Definition: HttpResourcePlugin.h:23
void addPlugin(HttpResourcePlugin *plugin)
HttpServerConnectionUpgradeDelegate onUpgrade
request is upgraded and raw data is passed to it
Definition: HttpResource.h:70
PluginRef(HttpResourcePlugin *plugin)
Definition: HttpResource.h:53
virtual ~HttpResource()
Definition: HttpResource.h:36
void addPlugin(HttpResourcePlugin *plugin, Tail... plugins)
Definition: HttpResource.h:74
HttpResourceDelegate onUrlComplete
URL is ready. Path and status code are available.
Definition: HttpResource.h:66
virtual void shutdown(HttpServerConnection &connection)
Takes care to cleanup the connection.
Definition: HttpResource.h:43
Encapsulates an incoming or outgoing request.
Definition: HttpRequest.h:36
Instances of this class are registered with an HttpServer for a specific URL.
Definition: HttpResource.h:33
HttpResourceDelegate onHeadersComplete
headers are ready
Definition: HttpResource.h:68
Definition: HttpServerConnection.h:33
HttpResourcePlugin * operator->() const
Definition: HttpResource.h:57
HttpServerConnectionBodyDelegate onBody
resource wants to process the raw body data
Definition: HttpResource.h:67