ANNA Suite  2020b
Multipurpose development suite for Telco applications
Response.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_ldap_Response_hpp
10 #define anna_ldap_Response_hpp
11 
13 #include <anna/core/Allocator.hpp>
14 
15 #include <anna/ldap/defines.hpp>
16 #include <anna/ldap/ClassCode.hpp>
17 #include <anna/ldap/ResultCode.hpp>
18 
19 namespace anna {
20 
21 namespace ldap {
22 
23 class Session;
24 class Attribute;
25 class Timer;
26 class Request;
27 
35 class Response {
36 public:
40 
43 
48  ClassCode::_v getClassCode() const { return a_classCode; }
49 
56  IdMessage getIdMessage() const { return a_idMessage; }
57 
62  const Session* getSession() const { return a_session; }
63 
68  const ResultCode& getResultCode() const { return a_resultCode; }
69 
74  const std::string& getName() const { return a_name; }
75 
81  const Request* getRequest()const { return a_request; }
82 
87  Session* getSession() { return a_session; }
88 
93  int attribute_size() const { return a_attributes.size(); }
94 
99  const_attribute_iterator attribute_begin() const { return a_attributes.begin(); }
100 
105  const_attribute_iterator attribute_end() const { return a_attributes.end(); }
106 
111  int referral_size() const { return a_referrals.size(); }
112 
117  const_referral_iterator referral_begin() const { return a_referrals.begin(); }
118 
123  const_referral_iterator referral_end() const { return a_referrals.end(); }
124 
131  static const Attribute* attribute(const_attribute_iterator ii) { return attribute_container::data(ii); }
132 
139  static const std::string& referral(const_referral_iterator ii) { return *referral_container::data(ii); }
140 
145  std::string asString() const ;
146 
147 private:
148  ClassCode::_v a_classCode;
149  IdMessage a_idMessage;
150  Session* a_session;
151  ResultCode a_resultCode;
152  std::string a_name;
153  attribute_container a_attributes;
154  referral_container a_referrals;
155  Timer* a_timer;
156  const Request* a_request;
157 
159  static response_pool st_responses;
160 
161  Response();
162 
163  static Response* instance(const ClassCode::_v, const IdMessage) noexcept(false);
164  static void release(Response* response) ;
165 
166  void clear() ;
167 
168  void setName(const std::string& name) { a_name = name; }
169  void setSession(Session* session) { a_session = session; }
170  void setRequest(const Request* request) { a_request = request; }
171  void activateTimer() noexcept(false);
172  void cancelTimer() ;
173  void setResultCode(const ResultCode& resultCode) { a_resultCode = resultCode; }
174 
175  Attribute* createAttribute(const std::string& name) noexcept(false);
176 
177  void createReferral(const char* value) noexcept(false) {
178  std::string* newReferral = a_referrals.create();
179  *newReferral = value;
180  }
181 
182 
183  attribute_iterator attribute_begin() { return a_attributes.begin(); }
184  attribute_iterator attribute_end() { return a_attributes.end(); }
185  static Attribute* attribute(attribute_iterator ii) { return attribute_container::data(ii); }
186 
187  friend class Session;
188  friend class Allocator<Response>;
189 };
190 
191 }
192 }
193 
194 #endif
195 
static Attribute * data(iterator ii)
Definition: Recycler.hpp:233
Definition: Response.hpp:35
const_referral_iterator referral_end() const
Definition: Response.hpp:123
Definition: Session.hpp:38
container::const_iterator const_iterator
Definition: Recycler.hpp:34
Definition: ResultCode.hpp:26
Definition: Timer.hpp:23
const_attribute_iterator attribute_begin() const
Definition: Response.hpp:99
const std::string & getName() const
Definition: Response.hpp:74
const ResultCode & getResultCode() const
Definition: Response.hpp:68
T * create() noexcept(false)
Definition: Recycler.hpp:88
xml::Attribute Attribute
Definition: Attribute.hpp:21
int size() const
Definition: Recycler.hpp:77
_v
Definition: ClassCode.hpp:22
std::string asString() const
attribute_container::iterator attribute_iterator
Definition: Response.hpp:38
Recycler< std::string > referral_container
Definition: Response.hpp:41
int attribute_size() const
Definition: Response.hpp:93
int referral_size() const
Definition: Response.hpp:111
static const Attribute * attribute(const_attribute_iterator ii)
Definition: Response.hpp:131
const_attribute_iterator attribute_end() const
Definition: Response.hpp:105
iterator end()
Definition: Recycler.hpp:221
Definition: Allocator.hpp:19
const Session * getSession() const
Definition: Response.hpp:62
static const std::string & referral(const_referral_iterator ii)
Definition: Response.hpp:139
attribute_container::const_iterator const_attribute_iterator
Definition: Response.hpp:39
container::iterator iterator
Definition: Recycler.hpp:33
Definition: Request.hpp:28
Recycler< Attribute > attribute_container
Definition: Response.hpp:37
Definition: app.hpp:12
const Request * getRequest() const
Definition: Response.hpp:81
Session * getSession()
Definition: Response.hpp:87
int IdMessage
Definition: defines.hpp:16
referral_container::const_iterator const_referral_iterator
Definition: Response.hpp:42
iterator begin()
Definition: Recycler.hpp:209
Definition: Attribute.hpp:30
ClassCode::_v getClassCode() const
Definition: Response.hpp:48
IdMessage getIdMessage() const
Definition: Response.hpp:56
const_referral_iterator referral_begin() const
Definition: Response.hpp:117