3 /// Common exception classes for the Barry library
7 Copyright (C) 2005-2008, Net Direct Inc. (http://www.netdirect.ca/)
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU General Public License in the COPYING file at the
19 root directory of this project for more details.
22 #ifndef __BARRY_ERROR_H__
23 #define __BARRY_ERROR_H__
30 /// \addtogroup exceptions
36 /// The base class for any future derived exceptions.
37 /// Can be thrown on any protocol error.
39 class BXEXPORT Error
: public std::runtime_error
42 Error(const std::string
&str
) : std::runtime_error(str
) {}
49 /// A bad or unknown password when talking to the device.
50 /// Can be thrown in the following instances:
52 /// - no password provided and the device requests one
53 /// - device rejected the available password
54 /// - too few remaining tries left... Barry will refuse to keep
55 /// trying passwords if there are fewer than
56 /// 6 tries remaining. In this case, out_of_tries()
60 class BXEXPORT BadPassword
: public Barry::Error
62 int m_remaining_tries
;
66 BadPassword(const std::string
&str
, int remaining_tries
,
69 m_remaining_tries(remaining_tries
),
70 m_out_of_tries(out_of_tries
)
72 int remaining_tries() const { return m_remaining_tries
; }
73 bool out_of_tries() const { return m_out_of_tries
; }
79 /// Unexpected packet size, or not enough data.
81 class BXEXPORT BadSize
: public Barry::Error
83 unsigned int m_packet_size
,
87 BXLOCAL
static std::string
GetMsg(unsigned int p
, unsigned int d
, unsigned int r
);
90 BadSize(unsigned int packet_size
,
91 unsigned int data_buf_size
,
92 unsigned int required_size
)
93 : Barry::Error(GetMsg(packet_size
, data_buf_size
, required_size
)),
94 m_packet_size(packet_size
),
95 m_data_buf_size(data_buf_size
),
96 m_required_size(required_size
)
98 unsigned int packet_size() const { return m_packet_size
; }
99 unsigned int data_buf_size() const { return m_data_buf_size
; }
100 unsigned int required_size() const { return m_required_size
; }
106 /// System error that provides an errno error code.
108 class ErrnoError
: public Barry::Error
112 static std::string
GetMsg(const std::string
&msg
, int err
);
115 ErrnoError(const std::string
&msg
, int err
)
116 : Barry::Error(GetMsg(msg
, err
))
120 int error_code() const { return m_errno
; }