httperror.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2003-2005 Tommi Maekitalo
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * As a special exception, you may use this file as part of a free
10  * software library without restriction. Specifically, if other files
11  * instantiate templates or use macros or inline functions from this
12  * file, or you compile this file and link it with other files to
13  * produce an executable, this file does not by itself cause the
14  * resulting executable to be covered by the GNU General Public
15  * License. This exception does not however invalidate any other
16  * reasons why the executable file might be covered by the GNU Library
17  * General Public License.
18  *
19  * This library is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  * Lesser General Public License for more details.
23  *
24  * You should have received a copy of the GNU Lesser General Public
25  * License along with this library; if not, write to the Free Software
26  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27  */
28 
29 
30 #ifndef TNT_HTTPERROR_H
31 #define TNT_HTTPERROR_H
32 
33 #include <stdexcept>
34 #include <string>
35 #include <tnt/httpmessage.h>
36 
37 namespace tnt
38 {
39  class HttpReturn
40  {
41  unsigned _returncode;
42  const char* _msg;
43 
44  public:
45  explicit HttpReturn(unsigned errcode);
46  HttpReturn(unsigned errcode, const char* msg);
47 
48  unsigned getReturnCode() const { return _returncode; }
49 
50  const char* getMessage() const { return _msg; }
51 
52  static const char* httpMessage(unsigned httpstatus);
53  };
54 
56  class HttpError : public std::exception, public HttpMessage
57  {
58  std::string _msg;
59  std::string _body;
60 
61  public:
62  explicit HttpError(unsigned errcode);
63  HttpError(unsigned errcode, const std::string& msg);
64  HttpError(unsigned errcode, const std::string& msg, const std::string& b);
65  ~HttpError() throw() { }
66 
67  const char* what() const throw ()
68  { return _msg.c_str(); }
69 
70  std::string getErrcodeStr() const
71  { return _msg.substr(0, 3); }
72 
73  unsigned getErrcode() const
74  {
75  return (_msg[0] - '0') * 100
76  + (_msg[1] - '0') * 10
77  + (_msg[2] - '0');
78  }
79 
80  std::string getErrmsg() const;
81 
83  const std::string& getBody() const { return _body; }
84  };
85 
88  {
89  std::string _url;
90  std::string _vhost;
91 
92  public:
93  explicit NotFoundException(const std::string& url, const std::string& vhost = std::string());
94  ~NotFoundException() throw() { }
95 
96  const std::string& getUrl() const { return _url; }
97  const std::string& getVHost() const { return _vhost; }
98  };
99 
100  class NotAuthorized : public HttpError
101  {
102  public:
103  explicit NotAuthorized(const std::string& realm);
104  };
105 
107  {
108  public:
109  explicit MovedTemporarily(const std::string& url);
110  };
111 }
112 
113 #endif // TNT_HTTPERROR_H
114