Remove dynamic exceptions
[anna.git] / include / anna / http / Handler.hpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 #ifndef anna_http_Handler_hpp
10 #define anna_http_Handler_hpp
11
12 #include <anna/core/mt/Mutex.hpp>
13
14 #include <anna/comm/Receiver.hpp>
15
16 namespace anna {
17
18 class DataBlock;
19
20 namespace comm {
21 class ClientSocket;
22 class Message;
23 }
24
25 namespace http {
26
27 class Request;
28 class Response;
29
30 /**
31    Manejador de Respuestas y/o peticiones sobre protocolo HTTP.
32 */
33 class Handler : public comm::Receiver {
34 public:
35   /**
36      Destructor.
37   */
38   virtual ~Handler();
39
40   /**
41      Trata la informacion contenida en el mensaje recibido. Si el mensaje recibido es un mensaje HTTP
42      valido se terminara llamando a uno de los metodos manejadores evRequest o evResponse, dependiendo
43      del tipo de mensaje.
44
45      \param clientSocket Socket por el que se recibe la peticion, y por el que podriamos enviar la respuesta
46      en caso de ser necesario.
47      \param message Mensaje HTTP recibido.
48   */
49   void apply(comm::ClientSocket& clientSocket, const comm::Message& message) noexcept(false);
50
51 protected:
52   /**
53      Constructor.
54      \param name Nombre logico de este manejador.
55   */
56   Handler(const char* name) : comm::Receiver(name), a_response(NULL) {;}
57
58   /**
59      Devuelve una instancia de http::Response que puede ser usada para responser a una peticion.
60      \return una instancia de http::Response que puede ser usada para responser a una peticion.
61   */
62   Response* allocateResponse() ;
63
64   /**
65      Metodo virtual que debemos sobreescribir para tratar las peticiones HTTP.
66      \param clientSocket Socket por el que se recibe la peticion, y por el que podriamos enviar la respuesta
67      en caso de ser necesario.
68      \param request Peticion HTTP a tratar.
69   */
70   virtual void evRequest(comm::ClientSocket& clientSocket, const Request& request) noexcept(false) = 0;
71
72   /**
73      Metodo virtual que debemos sobreescribir para tratar las respuestas HTTP.
74      \param clientSocket Socket por el que se recibe la respuesta.
75      \param response respuesta HTTP a tratar.
76   */
77   virtual void evResponse(comm::ClientSocket& clientSocket, const Response& response) noexcept(false) = 0;
78
79 private:
80   Response* a_response;
81 };
82
83 }
84 }
85
86 #endif
87