ANNA Suite  2020b
Multipurpose development suite for Telco applications
Header.hpp
Go to the documentation of this file.
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_Header_hpp
10 #define anna_http_Header_hpp
11 
13 #include <anna/core/Allocator.hpp>
14 
15 namespace anna {
16 
17 namespace http {
18 
19 class Token;
20 class Message;
21 
25 class Header {
26 public:
31  struct Type {
32  enum _v {
34  /* Generales */
37  /* Request */
41  /* Entity Header */
44  /* Response Header */
47  /* Uso interno */
49  };
50  };
51 
56  struct Category { enum _v { General, Response, Request, Entity, Extension }; };
57 
62  struct Compare { enum _v { Exact = 0, RightTrim = 1, LeftTrim = 2, NoCase = 4, FullMode = 7 }; };
63 
67  ~Header() { delete a_extensionName; }
68 
73  Type::_v getType() const { return a_type; }
74 
79  Category::_v getCategory() const { return a_category; }
80 
85  const std::string* getExtensionName() const { return a_extensionName; }
86 
91  const std::string& getStringValue() const { return a_value; }
92 
97  const int getIntegerValue() const ;
98 
104  void setValue(const Token* token) ;
105 
110  void setValue(const std::string& value) { a_value = value; }
111 
116  void setValue(const int value) ;
117 
123  Header& operator = (const Header& other) ;
124 
136  int compare(const char* str, const int flags = Compare::LeftTrim | Compare::NoCase) const ;
137 
147  bool match(const char* str, const int flags = Compare::LeftTrim | Compare::NoCase) const {
148  return compare(str, flags) == 0;
149  }
150 
155  std::string asString() const ;
156 
164  static Type::_v asType(const Token* token) ;
165 
173  static const char* asLiteral(const Type::_v type) ;
174 
175 private:
176  Type::_v a_type;
177  Category::_v a_category;
178  std::string* a_extensionName;
179  std::string a_value;
180  static const char* st_names [Type::End];
181 
182  Header() : a_extensionName(NULL), a_category(Category::Extension) {;}
183  Header* initialize(const Type::_v type) noexcept(false);
184  Header* initialize(const std::string& name) noexcept(false);
185  std::string code() const ;
186 
187  friend class Message;
188  friend class Allocator<Header>;
189 };
190 
191 
192 }
193 }
194 
195 #endif
Definition: Header.hpp:45
Definition: Header.hpp:31
Definition: Header.hpp:48
Header & operator=(const Header &other)
Definition: Message.hpp:30
Definition: Header.hpp:38
Definition: Header.hpp:39
Definition: Header.hpp:39
Category::_v getCategory() const
Definition: Header.hpp:79
Definition: Header.hpp:48
Definition: Header.hpp:40
const std::string * getExtensionName() const
Definition: Header.hpp:85
Definition: Request.hpp:22
static const char * asLiteral(const Type::_v type)
Definition: Header.hpp:45
Definition: Header.hpp:39
Definition: Header.hpp:42
_v
Definition: Header.hpp:56
Definition: Header.hpp:45
Definition: Header.hpp:48
Definition: Header.hpp:56
Definition: Header.hpp:43
Definition: Header.hpp:45
void setValue(const Token *token)
Definition: Header.hpp:43
Definition: Header.hpp:62
Definition: Header.hpp:40
Definition: Token.hpp:20
Definition: Allocator.hpp:19
Definition: Header.hpp:25
const int getIntegerValue() const
Definition: Header.hpp:40
_v
Definition: Header.hpp:62
int compare(const char *str, const int flags=Compare::LeftTrim|Compare::NoCase) const
const std::string & getStringValue() const
Definition: Header.hpp:91
Definition: Header.hpp:38
Definition: Header.hpp:39
Definition: Header.hpp:45
Definition: Header.hpp:35
Definition: Header.hpp:42
~Header()
Definition: Header.hpp:67
Definition: Header.hpp:35
Definition: Header.hpp:39
Definition: Header.hpp:36
Definition: app.hpp:12
Type::_v getType() const
Definition: Header.hpp:73
Definition: Header.hpp:35
Definition: Header.hpp:40
Definition: Header.hpp:62
Definition: Header.hpp:35
std::string asString() const
_v
Definition: Header.hpp:32
Definition: Header.hpp:35
Definition: Header.hpp:38
Definition: Header.hpp:45
void setValue(const std::string &value)
Definition: Header.hpp:110
Definition: Header.hpp:35
Definition: Header.hpp:62
bool match(const char *str, const int flags=Compare::LeftTrim|Compare::NoCase) const
Definition: Header.hpp:147
static Type::_v asType(const Token *token)
Definition: Header.hpp:33