ANNA Suite  2020b
Multipurpose development suite for Telco applications
Engine.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_Engine_hpp
10 #define anna_ldap_Engine_hpp
11 
12 #include <map>
13 #include <string>
14 
15 #include <anna/app/Component.hpp>
16 
17 namespace anna {
18 
19 namespace ldap {
20 
21 class Session;
22 
50 class Engine : public app::Component {
51 public:
56  struct DebugLevel { enum _v { All = -1, None = 0 }; };
57 
62  bool getAutoBind() const { return a_autoBind; }
63 
72  void setAutoBind(const bool autoBind) { a_autoBind = autoBind; }
73 
99  Session* createSession(const char* url, const char* user, const char* password, const int category = 0)
100  noexcept(false);
101 
128  Session* createSession(const char* url, const int id, const char* user, const char* password, const int category = 0)
129  noexcept(false);
130 
152  Session* createSession(const char* url, const int category = 0) noexcept(false) {
153  return createSession(url, NULL, NULL, category);
154  }
155 
167  Session* findSession(const char* url, const char* user, Exception::Mode::_v emode = Exception::Mode::Throw) noexcept(false);
168 
180  Session* findSession(const char* url, const int id, Exception::Mode::_v emode = Exception::Mode::Throw) noexcept(false);
181 
192  Session* findSession(const char* url, Exception::Mode::_v emode = Exception::Mode::Throw) noexcept(false) {
193  return findSession(url, (const char*) NULL, emode);
194  }
195 
201  void closeSession(Session* session) noexcept(false);
202 
208  virtual xml::Node* asXML(xml::Node* parent) const ;
209 
214  static const char* getClassName() { return "anna::ldap::Engine"; }
215 
224  static int setDebugLevel(const int level) noexcept(false);
225 
226 protected:
230  Engine();
231 
244  virtual Session* allocateSession(const int category) = 0;
245 
252  virtual void releaseSession(Session*) = 0;
253 
254 private:
255  typedef std::pair <std::string, std::string> session_key;
256  typedef std::map <session_key, Session*> session_container;
257  typedef session_container::value_type session_value_type;
258  typedef session_container::iterator session_iterator;
259  typedef session_container::const_iterator const_session_iterator;
260 
261  session_container a_sessions;
262  std::string a_auxURL; // Usada para contenar el ldap:// si fuera necesario
263  bool a_autoBind;
264 
265  void do_initialize() {;}
266  void do_stop() ;
267 
268  const char* completeURL(const char* url) ;
269 
270  session_iterator session_find(const char* url, const char* user) {
271  return a_sessions.find(session_key(url, user));
272  }
273  session_iterator session_find(const std::string& url, const std::string& user) {
274  return a_sessions.find(session_key(url, user));
275  }
276  session_iterator session_find(const char* url, const int id) ;
277 
278  session_iterator session_begin() { return a_sessions.begin(); }
279  session_iterator session_end() { return a_sessions.end(); }
280  static Session* session(session_iterator ii) { return ii->second; }
281 
282  const_session_iterator session_begin() const { return a_sessions.begin(); }
283  const_session_iterator session_end() const { return a_sessions.end(); }
284  static const Session* session(const_session_iterator ii) { return ii->second; }
285 
286  // Para el truco de poner a la alarma antes de invocar al ldap_result
287  static void alarmnCatcher(int) ;
288 
289 };
290 
291 }
292 }
293 
294 #endif
295 
Definition: Exception.hpp:26
Definition: Engine.hpp:56
static const char * getClassName()
Definition: Engine.hpp:214
Definition: Session.hpp:38
_v
Definition: Exception.hpp:26
Definition: Engine.hpp:56
Definition: Node.hpp:56
bool getAutoBind() const
Definition: Engine.hpp:62
_v
Definition: Engine.hpp:56
static int setDebugLevel(const int level) noexcept(false)
virtual Session * allocateSession(const int category)=0
Session * createSession(const char *url, const int category=0) noexcept(false)
Definition: Engine.hpp:152
virtual xml::Node * asXML(xml::Node *parent) const
Session * findSession(const char *url, Exception::Mode::_v emode=Exception::Mode::Throw) noexcept(false)
Definition: Engine.hpp:192
Session * findSession(const char *url, const char *user, Exception::Mode::_v emode=Exception::Mode::Throw) noexcept(false)
Definition: app.hpp:12
Definition: Component.hpp:44
Session * createSession(const char *url, const char *user, const char *password, const int category=0) noexcept(false)
virtual void releaseSession(Session *)=0
void setAutoBind(const bool autoBind)
Definition: Engine.hpp:72
Definition: Engine.hpp:56
void closeSession(Session *session) noexcept(false)
Definition: Engine.hpp:50