1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
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 //
9 #ifndef anna_http_Header_hpp
10 #define anna_http_Header_hpp
12 #include <anna/core/RuntimeException.hpp>
13 #include <anna/core/Allocator.hpp>
23 Representacion de las cabeceras HTTP.
28 Tipos de cabeceras definidos en la RFC 2616.
35 CacheControl, Connection, Date, Pragma, Trailer, TransferEncoding, Upgrade, Via,
38 Accept, AcceptCharset, AcceptEncoding, AcceptLanguage, Authorization, Expect, From,
39 Host, IfMatch, IfModifiedSince, IfNoneMatch, IfRange, IfUnmodifiedSince, MaxForwards,
40 ProxyAuthorization, Range, Referer, TE, UserAgent,
42 Allow, ContentEncoding, ContentLanguage, ContentLength, ContentLocation, ContentMD5,
43 ContentRange, ContentType, Expires, LastModified,
45 AcceptRanges, Age, ETAG, Location, ProxyAuthenticate, RetryAfter, Server, Vary,
48 Unknown, End, Begin = 1
53 Categorias de cabeceras definidos en la RFC 2616.
56 struct Category { enum _v { General, Response, Request, Entity, Extension }; };
59 Modos de comparacion aplicados en el metodo #compare.
62 struct Compare { enum _v { Exact = 0, RightTrim = 1, LeftTrim = 2, NoCase = 4, FullMode = 7 }; };
67 ~Header() { delete a_extensionName; }
70 Devuelve el tipo de la cabecera.
71 \return el tipo de la cabecera.
73 Type::_v getType() const throw() { return a_type; }
76 Devuelve la categoria de la cabecera.
77 \return la categoria de la cabecera.
79 Category::_v getCategory() const throw() { return a_category; }
82 Devuelve el puntero nombre de la extension, puede ser NULL.
83 \return el puntero nombre de la extension, puede ser NULL.
85 const std::string* getExtensionName() const throw() { return a_extensionName; }
88 Devuelve el valor asociado a esta cabecera.
89 \return el valor asociado a esta cabecera.
91 const std::string& getStringValue() const throw() { return a_value; }
94 Devuelve el valor numerico asociado a esta cabecera.
95 \return el valor numerico asociado a esta cabecera.
97 const int getIntegerValue() const throw();
100 Establece el valor de esta cabecera.
101 \param token Token del que obtendremos el valor.
102 \warning Exclusivamente uso interno.
104 void setValue(const Token* token) throw();
107 Establece el valor asociado a esta cabecera.
108 \param value Valor a establecer.
110 void setValue(const std::string& value) throw() { a_value = value; }
113 Establece el valor asociado a esta cabecera.
114 \param value Valor a establecer.
116 void setValue(const int value) throw();
120 \param other Cabecera de la que copiar.
121 \return La instancia de si misma.
123 Header& operator = (const Header& other) throw();
126 Compara el contenido actual de esta cabecera con el literal recibido como parametro y
127 devuelve un entero menor, igual o mayor que cero si se encuentra que el contenido
128 es, respectivamente, menor que, igual a (concordante), o mayor que \em str.
130 \param str La cadena con la que comparar.
131 \param flags Modo de comparacion aplicado.
133 \return Un entero menor, igual o mayor que cero si se encuentra que el contenido
134 es, respectivamente, menor que, igual a (concordante), o mayor que \em str.
136 int compare(const char* str, const int flags = Compare::LeftTrim | Compare::NoCase) const throw();
139 Compara el contenido actual de esta cabecera con el literal recibido como parametro y
140 devuelve \em true o \em false dependiendo de si el contenido coincide con \em str.
142 \param str La cadena con la que comparar.
143 \param flags Modo de comparacion aplicado.
145 \return \em true o \em false dependiendo de si el contenido coincide con \em str.
147 bool match(const char* str, const int flags = Compare::LeftTrim | Compare::NoCase) const throw() {
148 return compare(str, flags) == 0;
152 Devuelve una cadena con toda la informacion relevante de este objeto.
153 \return una cadena con toda la informacion relevante de este objeto.
155 std::string asString() const throw();
158 Interpreta el token recibido como parametro y devuelve el valor de Type con el
160 \param token Token obtenido en la fase de analisis.
161 \warning Exclusivamente uso interno.
162 \return El tipo de cabecera.
164 static Type::_v asType(const Token* token) throw();
167 Interpreta el token recibido como parametro y devuelve el nombre de la cabecera
168 con la que esta asociado.
169 \param type Tipo de cabecera.
170 \warning Exclusivamente uso interno.
171 \return El literal con el nombre de la cabecera correspondiente al tipo recibido.
173 static const char* asLiteral(const Type::_v type) throw();
177 Category::_v a_category;
178 std::string* a_extensionName;
180 static const char* st_names [Type::End];
182 Header() : a_extensionName(NULL), a_category(Category::Extension) {;}
183 Header* initialize(const Type::_v type) throw(RuntimeException);
184 Header* initialize(const std::string& name) throw(RuntimeException);
185 std::string code() const throw();
187 friend class Message;
188 friend class Allocator<Header>;