Remove dynamic exceptions
[anna.git] / include / anna / http / Response.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_Response_hpp
10 #define anna_http_Response_hpp
11
12 #include <anna/http/Message.hpp>
13
14 namespace anna {
15
16 namespace http {
17
18 /**
19    Clase que modela las respuestas HTTP segun la RFC 2616.
20 */
21 class Response : public Message {
22 public:
23   /**
24      Constructor.
25   */
26   explicit Response() :
27     Message(Message::Type::Response) { a_statusCode = 0; setStatusCode(200); }
28
29   /**
30      Devuelve el codigo de estado contenido en la respuesta.
31      \return El codigo de estado contenido en la respuesta
32   */
33   int getStatusCode() const { return a_statusCode; }
34
35   /**
36      Devuelve el campo ReasePhrase contenido en la respuesta.
37      \return el campo ReasePhrase contenido en la respuesta.
38   */
39   const std::string& getReasonPhrase() const { return a_reasonPhrase; }
40
41   /**
42      Establece el codigo de retorno de la respuesta HTTP. Si es un codigo reconocido por la RFC 2616
43      tambien establece el ReasonPhrase por defecto.
44
45      Los codigos de respuesta reconocidos por la RFC 2616 son:
46      \code
47         100: Continue
48         101: Switching Protocols
49         200: OK
50         201: Created
51         202: Accepted
52         203: Non-Authoritative Information
53         204: No Content
54         205: Reset Content
55         206: Partial Content
56         300: Multiple Choise
57         301: Moved Permanently
58         302: Found
59         303: See Other
60         304: Not Modified
61         305: Use proxy
62         307: Temporary Redirect
63         400: Bad Request
64         401: Unautorized
65         402: Payment Required
66         403: Forbidden
67         404: Not found
68         405: Method Not Allowed
69         406: Not Acceptable
70         407: Proxy Authentication Required
71         408: Request Time-out
72         409: Conflict
73         410: Gone
74         411: Length Required
75         412: Precondition Failed
76         413: Request Entity Too Large
77         414: Request-URI Too Large
78         415: Unsupported Media Type
79         416: Requested range not satisfiable
80         417: Expectation Failed
81         500: Internal Server Error
82         501: Not Implemented
83         502: Bad Gateway
84         503: Service Unavailable
85         504: Gateway Time-out
86         505: HTTP Version not supported
87      \endcode
88   */
89   void setStatusCode(const int statusCode) ;
90
91   /**
92      Establece la frase asociada a la respuesta.
93      \param reasonPhrase Frase asociada a la respuesta.
94   */
95   void setReasonPhrase(const std::string& reasonPhrase) { a_reasonPhrase = reasonPhrase; }
96
97   /**
98      Establece la frase asociada a la respuesta.
99      \param reasonPhrase Frase asociada a la respuesta.
100   */
101   void setReasonPhrase(const char* reasonPhrase) { a_reasonPhrase = reasonPhrase; }
102
103   /**
104      Devuelve una cadena con toda la informacion relevante de este objeto.
105      \return una cadena con toda la informacion relevante de este objeto.
106   */
107   std::string asString() const ;
108
109 private:
110   int a_statusCode;
111   std::string a_reasonPhrase;
112
113   std::string codeStartLine() const noexcept(false);
114 };
115
116 }
117 }
118
119 #endif
120