Servlet.h
1 /*
2  * Copyright (C) 2011 by Marc Boris Duerner
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * As a special exception, you may use this file as part of a free
10  * software library without restriction. Specifically, if other files
11  * instantiate templates or use macros or inline functions from this
12  * file, or you compile this file and link it with other files to
13  * produce an executable, this file does not by itself cause the
14  * resulting executable to be covered by the GNU General Public
15  * License. This exception does not however invalidate any other
16  * reasons why the executable file might be covered by the GNU Library
17  * General Public License.
18  *
19  * This library is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  * Lesser General Public License for more details.
23  *
24  * You should have received a copy of the GNU Lesser General Public
25  * License along with this library; if not, write to the Free Software
26  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27  */
28 
29 #ifndef Pt_Http_Servlet_h
30 #define Pt_Http_Servlet_h
31 
32 #include <Pt/Http/Api.h>
33 #include <Pt/NonCopyable.h>
34 #include <string>
35 
36 namespace Pt {
37 
38 namespace Http {
39 
40 class Authorizer;
41 class Request;
42 class Reply;
43 class Server;
44 class Service;
45 
52 class PT_HTTP_API Servlet : private NonCopyable
53 {
54  // @internal
55  friend class Server;
56 
57  public:
60  Servlet(Service& s);
61 
64  Servlet(Service& s, Authorizer& a);
65 
68  virtual ~Servlet();
69 
72  void setShutdown(bool shutdown = true);
73 
76  bool isIdle();
77 
80  void detach();
81 
84  bool isMapped(const Request& request) const
85  { return this->onRequest(request); }
86 
90  { return _service; }
91 
95  { return _auth; }
96 
97  protected:
100  virtual bool onRequest(const Request& request) const = 0;
101 
102  private:
103  // @internal
104  void registerServer(Server& server);
105 
106  // @internal
107  void unregisterServer(Server& server);
108 
109  private:
110  Server* _server;
111  Service* _service;
112  Authorizer* _auth;
113 };
114 
117 class PT_HTTP_API MapUrl : public Servlet
118 {
119  public:
122  MapUrl(const std::string& url, Service& s)
123  : Servlet(s)
124  , _url(url)
125  {}
126 
129  MapUrl(const std::string& url, Service& s, Authorizer& a)
130  : Servlet(s, a)
131  , _url(url)
132  {}
133 
134  protected:
135  bool onRequest(const Request& request) const;
136 
137  private:
138  std::string _url;
139 };
140 
143 class PT_HTTP_API MapAny : public Servlet
144 {
145  public:
149  : Servlet(s)
150  {}
151 
155  : Servlet(s, a)
156  {}
157 
158  protected:
159  bool onRequest(const Request& request) const;
160 };
161 
162 } // namespace Http
163 
164 } // namespace Pt
165 
166 #endif // Pt_Http_Servlet_h
Server side authorization.
Definition: Authorizer.h:91
HTTP request message.
Definition: Request.h:43
MapUrl(const std::string &url, Service &s)
Construct with url to map to a service.
Definition: Servlet.h:122
Authorizer * authorizer()
Returns the authorizer.
Definition: Servlet.h:94
Protects derived classes from being copied.
Definition: NonCopyable.h:54
An HTTP server.
Definition: Server.h:56
MapAny(Service &s, Authorizer &a)
Construct with service and authorizer.
Definition: Servlet.h:154
HTTP service.
Definition: Service.h:46
MapUrl(const std::string &url, Service &s, Authorizer &a)
Construct with url to map to a service.
Definition: Servlet.h:129
MapAny(Service &s)
Construct with service.
Definition: Servlet.h:148
Servlet for HTTP services.
Definition: Servlet.h:52
bool isMapped(const Request &request) const
Returns true if request is mapped to the service.
Definition: Servlet.h:84
Maps requests to a service by URL.
Definition: Servlet.h:117
Service * service()
Returns the service to map requests to.
Definition: Servlet.h:89
Maps any request to a service.
Definition: Servlet.h:143