Remove dynamic exceptions
[anna.git] / include / anna / ldap / ResultCode.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_ldap_ResultCode_hpp
10 #define anna_ldap_ResultCode_hpp
11
12 #include <string>
13
14 namespace anna {
15
16 namespace ldap {
17
18 class Session;
19
20 /**
21    Modela el resultado de las peticiones enviadas a servidores LDAP.
22
23    \see ldap::Response
24    \see ldap::Session::eventResponse
25 */
26 class ResultCode {
27 public:
28   /**
29      Contructor.
30   */
31   ResultCode() : a_value(0) {;}
32
33   /**
34      Devuelve \em true si la respuesta recibida es correcta o \em false en otro caso.
35      \return \em true si la respuesta recibida es correcta o \em false en otro caso.
36   */
37   bool isOk() const { return a_value == 0; }
38
39   /**
40      Devuelve \em true si la respuesta recibida es un error debido a que las credenciales del usuario
41      no son válidas para conectar al servidor o \em false en otro caso.
42
43      \return  \em true si la respuesta recibida es un error debido a que las credenciales del usuario
44      no son válidas para conectar al servidor o \em false en otro caso.
45
46      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
47      haya retornado \em false.
48   */
49   bool isInvalidCredential() const ;
50
51   /**
52      Devuelve \em true si la resulta recibida es LDAP_OPERATIONS_ERROR o \em false en otro caso.
53
54      \return  \em true si la resulta recibida es LDAP_OPERATIONS_ERROR o \em false en otro caso.
55
56      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
57      haya retornado \em false.
58   */
59   bool isOperationsError() const ;
60
61   /**
62      Devuelve \em true si la resulta recibida es LDAP_PROTOCOL_ERROR o \em false en otro caso.
63
64      \return  \em true si la resulta recibida es LDAP_PROTOCOL_ERROR o \em false en otro caso.
65
66      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
67      haya retornado \em false.
68   */
69   bool isProtocolError() const ;
70
71   /**
72      Devuelve \em true si la resulta recibida es LDAP_TIMELIMIT_EXCEEDED o \em false en otro caso.
73
74      \return  \em true si la resulta recibida es LDAP_TIMELIMIT_EXCEEDED o \em false en otro caso.
75
76      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
77      haya retornado \em false.
78   */
79   bool isTimeLimitExceeded() const ;
80
81   /**
82      Devuelve \em true si la resulta recibida es LDAP_SIZELIMIT_EXCEEDED o \em false en otro caso.
83
84      \return  \em true si la resulta recibida es LDAP_SIZELIMIT_EXCEEDED o \em false en otro caso.
85
86      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
87      haya retornado \em false.
88   */
89   bool isSizeLimitExceeded() const ;
90
91   /**
92      Devuelve \em true si la resulta recibida es LDAP_AUTH_METHOD_NOT_SUPPORTED o \em false en otro caso.
93
94      \return  \em true si la resulta recibida es LDAP_AUTH_METHOD_NOT_SUPPORTED o \em false en otro caso.
95
96      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
97      haya retornado \em false.
98   */
99   bool isAuthMethodNotSupported() const ;
100
101   /**
102      Devuelve \em true si la resulta recibida es LDAP_STRONG_AUTH_REQUIRED o \em false en otro caso.
103
104      \return  \em true si la resulta recibida es LDAP_STRONG_AUTH_REQUIRED o \em false en otro caso.
105
106      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
107      haya retornado \em false.
108   */
109   bool isStrongAuthRequired() const ;
110
111   /**
112      Devuelve \em true si la resulta recibida es LDAP_SASL_BIND_IN_PROGRESS o \em false en otro caso.
113
114      \return  \em true si la resulta recibida es LDAP_SASL_BIND_IN_PROGRESS o \em false en otro caso.
115
116      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
117      haya retornado \em false.
118   */
119   bool isSASLBindInProgress() const ;
120
121   /**
122      Devuelve \em true si la resulta recibida es un error de tipo LDAP_ATTR_ERROR o \em false en otro caso,
123      Puede darse al usar atributos no definidos, tipos inapropiados, comparaciones entre tipos no convertibles
124      o errores sintáxticos en general.
125
126      \return \em true si la resulta recibida es un error de tipo LDAP_ATTR_ERROR o \em false en otro caso.
127
128      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
129      haya retornado \em false.
130   */
131   bool isAttrError() const ;
132
133   /**
134      Devuelve \em true si la resulta recibida es un error de tipo LDAP_NAME_ERROR o \em false en otro caso.
135      Puede dar al usar objetos o alias no definidos o usar una sinstaxis no válida en el DN.
136
137      \return \em true si la resulta recibida es un error de tipo LDAP_NAME_ERROR o \em false en otro caso.
138
139      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
140      haya retornado \em false.
141   */
142   bool isNameError() const ;
143
144   /**
145      Devuelve \em true si la resulta recibida es un error de tipo LDAP_SECURITY_ERROR o \em false en otro caso.
146      Puede darse por una autorización inapropiada, por presentar una credencial inválida o por intentar acceder
147      a información sin los privilegios suficientes.
148
149      Incluye el valor del método #isInvalidCredential.
150
151      \return \em true si la resulta recibida es un error de tipo LDAP_SECURITY_ERROR o \em false en otro caso.
152
153      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
154      haya retornado \em false.
155   */
156   bool isSecurityError() const ;
157
158   /**
159      Devuelve \em true si la resulta recibida es un error de tipo LDAP_SERVICE_ERROR o \em false en otro caso.
160      Puede darse cuando el servicio no esté disponible.
161
162      \return \em true si la resulta recibida es un error de tipo LDAP_SERVICE_ERROR o \em false en otro caso.
163
164      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
165      haya retornado \em false.
166   */
167   bool isServiceError() const ;
168
169   /**
170      Devuelve \em true si la resulta recibida es un error de tipo LDAP_TIMEOUT o \em false en otro caso.
171
172      \return \em true si la resulta recibida es un error de tipo LDAP_TIMEOUT o \em false en otro caso.
173
174      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
175      haya retornado \em false.
176   */
177   bool isTimeout() const ;
178
179   /**
180      Devuelve \em true si la resulta recibida es un error de tipo LDAP_UNAVAILABLE o \em false en otro caso.
181
182      \return \em true si la resulta recibida es un error de tipo LDAP_UNAVAILABLE o \em false en otro caso.
183
184      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
185      haya retornado \em false.
186   */
187   bool isUnavailable() const ;
188
189   /**
190      Devuelve \em true si la resulta recibida es un error de tipo LDAP_SERVER_DOWN o \em false en otro caso.
191
192      \return \em true si la resulta recibida es un error de tipo LDAP_SERVER_DOWN o \em false en otro caso.
193
194      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
195      haya retornado \em false.
196   */
197   bool isServerDown() const ;
198
199   /**
200      Devuelve \em true si la resulta recibida es un error de tipo LDAP_LOCAL_ERROR o \em false en otro caso.
201
202      \return \em true si la resulta recibida es un error de tipo LDAP_LOCAL_ERROR o \em false en otro caso.
203
204      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
205      haya retornado \em false.
206   */
207   bool isLocalError() const ;
208
209   /**
210      Devuelve \em true si la resulta recibida es un error de tipo LDAP_DECODING_ERROR o \em false en otro caso.
211
212      \return \em true si la resulta recibida es un error de tipo LDAP_DECODING_ERROR o \em false en otro caso.
213
214      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
215      haya retornado \em false.
216   */
217   bool isDecodingError() const ;
218
219   /**
220      Devuelve \em true si la resulta recibida es un error de tipo LDAP_FILTER_ERROR o \em false en otro caso.
221
222      \return \em true si la resulta recibida es un error de tipo LDAP_FILTER_ERROR o \em false en otro caso.
223
224      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
225      haya retornado \em false.
226   */
227   bool isFilterError() const ;
228
229   /**
230      Devuelve \em true si la resulta recibida es un error de tipo LDAP_CONNECT_ERROR o \em false en otro caso.
231
232      \return \em true si la resulta recibida es un error de tipo LDAP_CONNECT_ERROR o \em false en otro caso.
233
234      \warning El valor retornado por este método sólo tendrá validez en caso de que  el método #isOk
235      haya retornado \em false.
236   */
237   bool isConnectError() const ;
238
239   /**
240      Devuelve el codigo de error asociado a esta instancia.
241      \return El codigo de error asociado a esta instancia.
242   */
243   int getValue() const { return a_value; }
244
245   /**
246      Devuelve el texto explicativo del error asociado a esta instancia.
247      \return El texto explicativo del error asociado a esta instancia.
248   */
249   const std::string& getText() const { return a_text; }
250
251   /**
252      Establece el codigo de error asociado a esta instancia.
253      \param value Codigo de error
254   */
255 //   void setValue (const int value) { a_value = value; }
256
257   /**
258      Establece el texto explicativo del error asociado a esta instancia.
259      \param text Texto explicativo del error
260   */
261 //   void setText (const std::string& text) { a_text = text; }
262
263   /**
264      Inicializa el codigo de error y el texto de esta instancia.
265   */
266   void clear() { a_value = 0; a_text.clear(); }
267
268   /**
269      Operador copia.
270      \param other Instancia de la que copiar.
271      \return La instancia de el mismo despues de copiar los valores.
272   */
273   ResultCode& operator= (const ResultCode& other) {
274     a_value = other.a_value;
275     a_text = other.a_text;
276     return *this;
277   }
278
279   /**
280    * Operador de asignación.
281    * \param ldap_result Código de resultado con el que iniciar esta instancia.
282    * \warning Si el valor de \em ldap_result no fue obtenido como resultado de ejecutar alguna operacion LDAP
283    * el resultado de este método no está definido.
284    */
285   ResultCode& operator= (const int ldap_result) ;
286
287   bool operator == (const int n) const { return a_value == n; }
288   bool operator != (const int n) const { return a_value != n; }
289   bool operator < (const int n) const { return a_value < n; }
290   bool operator <= (const int n) const { return a_value <= n; }
291
292   /**
293      Devuelve una cadena con la informacion relevante sobre esta instancia.
294      \return Una cadena con la informacion relevante sobre esta instancia.
295   */
296   const std::string asString() const ;
297
298 private:
299   int a_value;
300   std::string a_text;
301
302   ResultCode(const int ldap_method_result);
303
304   void setValue(const int ldap_method_result, const int ldap_method_error) ;
305
306   bool extractResultCode(const Session*) ;
307
308   friend class Session;
309 };
310
311 }
312 }
313
314 #endif
315