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()
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 
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:189
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:49
HttpResourcePlugin * operator->() const
Definition: HttpResource.h:57
PluginRef(HttpResourcePlugin *plugin)
Definition: HttpResource.h:53
Instances of this class are registered with an HttpServer for a specific URL.
Definition: HttpResource.h:34
void addPlugin(HttpResourcePlugin *plugin)
HttpResourceDelegate onHeadersComplete
headers are ready
Definition: HttpResource.h:68
HttpResourceDelegate onRequestComplete
request is complete OR upgraded
Definition: HttpResource.h:69
void addPlugin(HttpResourcePlugin *plugin, Tail... plugins)
Definition: HttpResource.h:74
virtual ~HttpResource()
Definition: HttpResource.h:36
virtual void shutdown(HttpServerConnection &connection)
Takes care to cleanup the connection.
Definition: HttpResource.h:43
HttpServerConnectionUpgradeDelegate onUpgrade
request is upgraded and raw data is passed to it
Definition: HttpResource.h:70
HttpResourceDelegate onUrlComplete
URL is ready. Path and status code are available.
Definition: HttpResource.h:66
HttpServerConnectionBodyDelegate onBody
resource wants to process the raw body data
Definition: HttpResource.h:67
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:62