source: trash/old-modules/transport/protlib/tperror.h@ 12754

Last change on this file since 12754 was 5641, checked in by Christoph Mayer, 15 years ago
File size: 5.1 KB
RevLine 
[5641]1/// ----------------------------------------*- mode: C++; -*--
2/// @file tperror.h
3/// Errors from TP module
4/// ----------------------------------------------------------
5/// $Id: tperror.h 2794 2007-09-05 12:01:22Z bless $
6/// $HeadURL: https://svn.ipv6.tm.uka.de/nsis/protlib/trunk/include/tperror.h $
7// ===========================================================
8//
9// Copyright (C) 2005-2007, all rights reserved by
10// - Institute of Telematics, Universitaet Karlsruhe (TH)
11//
12// More information and contact:
13// https://projekte.tm.uka.de/trac/NSIS
14//
15// This program is free software; you can redistribute it and/or modify
16// it under the terms of the GNU General Public License as published by
17// the Free Software Foundation; version 2 of the License
18//
19// This program 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
22// GNU General Public License for more details.
23//
24// You should have received a copy of the GNU General Public License along
25// with this program; if not, write to the Free Software Foundation, Inc.,
26// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27//
28// ===========================================================
29/** @ingroup transport
30 * This is the interface for sending network messages over a transport
31 * protocol. You can receive messages through queues.
32 */
33
34#ifndef _PROTLIB__TP_ERROR_H_
35#define _PROTLIB__TP_ERROR_H_
36
37#include <string.h>
38
39#include "protlib_types.h"
40
41namespace protlib {
42
43/** @addtogroup transport Transport Protocol
44 * @ingroup network
45 * @{
46 */
47
48/// Transport Protocol Error
49/** Reports a TP error while connection setup, sending a network message or initialization. */
50class TPError : public ProtLibException {
51public:
52 /// TP error codes
53 enum tp_error_t {
54 TPERR_OK, // everything ok
55 TPERR_BAD_ADDRESS, // Bad destination address
56 TPERR_BAD_NETMSG, // not used
57 TPERR_ARGS_NOT_INIT,// arguments not initialized
58 TPERR_UNREACHABLE, // destination unreachable
59 TPERR_INTERNAL, // any other internal error
60 TPERR_PAYLOAD, // maximum payload
61 TPERR_INITFAILED, // Initialization failed, e.g. during socket setup
62 TPERR_SENDFAILED, // send failure
63 TPERR_CONNSETUPFAIL, // connection setup failed
64 TPERR_CLOSEIND, // close indication (other side closed connection)
65 TPERR_ABORTIND // abort indication (transport protocol)
66 }; // end tp_error_t
67
68 /// constructor
69 TPError(tp_error_t e) : errtype(e) {};
70
71 /// get error string
72 virtual const char* getstr() const= 0;
73 virtual const char *what() const throw() { return getstr(); }
74 /// error code
75 const tp_error_t errtype;
76}; // end class TPError
77
78
79/***** class TPError *****/
80
81class TPErrorBadDestAddress : public TPError
82{
83public:
84 TPErrorBadDestAddress() : TPError(TPError::TPERR_BAD_ADDRESS) {}
85 virtual const char* getstr() const { return "Bad Destination Address"; }
86};
87
88
89class TPErrorArgsNotInit : public TPError
90{
91public:
92 TPErrorArgsNotInit() : TPError(TPError::TPERR_ARGS_NOT_INIT) {}
93 virtual const char* getstr() const { return "arguments of TPMsg not initialized"; }
94};
95
96class TPErrorUnreachable : public TPError
97{
98public:
99 TPErrorUnreachable() : TPError(TPError::TPERR_UNREACHABLE) {}
100 virtual const char* getstr() const { return "Destination unreachable"; }
101};
102
103class TPErrorInternal : public TPError
104{
105public:
106 TPErrorInternal() : TPError(TPError::TPERR_INTERNAL) {}
107 virtual const char* getstr() const { return "Internal Transport Protocol Error"; }
108};
109
110
111class TPErrorPayload : public TPError
112{
113public:
114 TPErrorPayload() : TPError(TPError::TPERR_PAYLOAD) {}
115 virtual const char* getstr() const { return "Payload exceeds maximum transmission unit or empty payload given"; }
116};
117
118class TPErrorInitFailed : public TPError
119{
120public:
121 TPErrorInitFailed() : TPError(TPError::TPERR_INITFAILED) {}
122 virtual const char* getstr() const { return "Initialization of protocol failed"; }
123};
124
125class TPErrorSendFailed : public TPError
126{
127 int saved_errno; ///< value of errno from send call
128public:
129 TPErrorSendFailed(int current_errno= 0) : TPError(TPError::TPERR_SENDFAILED), saved_errno(current_errno) {}
130 virtual const char* getstr() const { return "Failure while trying to send a protocol data unit"; }
131 int get_reason() const { return saved_errno; } ///< returns saved value of errno from send call
132};
133
134class TPErrorConnectSetupFail : public TPError
135{
136public:
137 TPErrorConnectSetupFail() : TPError(TPError::TPERR_CONNSETUPFAIL) {}
138 virtual const char* getstr() const { return "Connection Setup Failure"; }
139};
140
141class TPErrorCloseInd : public TPError
142{
143public:
144 TPErrorCloseInd() : TPError(TPError::TPERR_CLOSEIND) {}
145 virtual const char* getstr() const { return "Other side closed connection"; }
146};
147
148class TPErrorAbortInd : public TPError
149{
150public:
151 TPErrorAbortInd() : TPError(TPError::TPERR_ABORTIND) {}
152 virtual const char* getstr() const { return "Abort indication, transport protocol indicated failure/abort"; }
153};
154
155} // end namespace protlib
156
157#endif // _PROTLIB__TP_ERROR_H_
Note: See TracBrowser for help on using the repository browser.