TFCweb  1.0.4 $Rev: 483 $
TFC Primavera 2012: Nucli d'un servidor web
Excepcions.h
Veure la documentació d'aquest fitxer.
1 #if !defined(_EXCEPCIONS_H_)
2 #define _EXCEPCIONS_H_
3 
16 /*
17  * Copyright (c) 2012 Toni Corvera
18  *
19  * This file is part of TFCWeb.
20  *
21  * TFCWeb is free software: you can redistribute it and/or modify
22  * it under the terms of the GNU General Public License as published by
23  * the Free Software Foundation, either version 3 of the License, or
24  * (at your option) any later version.
25  *
26  * TFCWeb is distributed in the hope that it will be useful,
27  * but WITHOUT ANY WARRANTY; without even the implied warranty of
28  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29  * GNU General Public License for more details.
30  *
31  * You should have received a copy of the GNU General Public License
32  * along with TFCWeb. If not, see <http://www.gnu.org/licenses/>.
33  */
34 
35 #include "CodisEstatHTTP.h"
36 #include "portabilitat.h"
37 
38 #include <stdexcept>
39 #include <string>
40 #include <boost/lexical_cast.hpp>
41 
42 /*
43  * http://www.cplusplus.com/reference/std/stdexcept/
44  *
45  * Logic errors:
46  * logic_error -> Logic error exception
47  * domain_error -> Domain error exception
48  * invalid_argument -> Invalid argument exception
49  * length_error -> Length error exception
50  * out_of_range -> Out-of-range exception
51  *
52  * Runtime errors:
53  * runtime_error -> Runtime error exception
54  * range_error -> Range error exception
55  * overflow_error -> Overflow error exception
56  * underflow_error -> Underflow error exception
57  */
58 
59 namespace tfc {
60 
64 class ErrorTFC : public std::runtime_error {
65 public:
66  explicit ErrorTFC(const std::string & w = "") throw ()
67  : std::runtime_error(w)
68  {
69  // buit
70  }
71 };
72 
76 class ErrorRutaInexistent : public ErrorTFC {
77 public:
78  ErrorRutaInexistent(const std::string & w = "Ruta inexistent")
79  : ErrorTFC(w)
80  {
81  // buit
82  }
83 };
84 
86 public:
87  explicit ErrorEscrivintEnSocket(const std::string & w = "Error enviant dades")
88  : ErrorTFC(w)
89  {
90  // buit
91  }
92 };
93 
98 class ErrorHTTP : public ErrorTFC {
99 public:
104  ErrorHTTP(const std::string & w, CodiEstatHTTP c)
105  : ErrorTFC(w), codi_(c)
106  {
107  // buit
108  }
109  virtual ~ErrorHTTP() throw () {
110  // buit
111  }
113  CodiEstatHTTP codi() const { return codi_; }
114 private:
117 };
118 
123 public:
124  explicit ErrorHTTPBadRequest(const std::string & w = "Petició HTTP incorrecta",
126  : ErrorHTTP(w, c)
127  {
128  // buit
129  }
130 };
131 
135 class ErrorHTTPIntern: public ErrorHTTP {
136 public:
137  explicit ErrorHTTPIntern(const std::string & w = "Error intern del servidor",
139  : ErrorHTTP(w, c)
140  {
141  // buit
142  }
143 };
144 
145 // ---------------------- Ajudes per al desenvolupament ---------------------- //
146 
148 #define FITXER_I_LINIA_ \
149  (std::string(__FILE__":")+boost::lexical_cast<std::string>(__LINE__))
150 
154 class ErrorNoImplementat : public ErrorTFC {
155 public:
156  explicit ErrorNoImplementat(const std::string & w = "No implementat")
157  : ErrorTFC(w)
158  {
159  // buit
160  }
161 };
162 
163 // FIXME: Definició ràpida d'excepcions durant el desenvolupament
164 #define DEFINEIX_EXCEPCIO(nom, base) struct nom : public base {\
165  explicit nom(const std::string &w = "") : base(w) {} \
166  }
167 
168 } // ns tfc
169 
170 #endif // _EXCEPCIONS_H_
171 
172 // vim:set ts=4 et ai: //