summaryrefslogtreecommitdiffstats
path: root/src/lib/asiolink/dummy_io_cb.h
blob: 795fad970ddaeef49a0762e68e7179036bc4a0ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Copyright (C) 2011-2015 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

#ifndef DUMMY_IO_CB_H
#define DUMMY_IO_CB_H

#include <iostream>

#include <exceptions/exceptions.h>

#include <boost/asio/error.hpp>

namespace isc {
namespace asiolink {

/// \brief Asynchronous I/O Completion Callback
///
/// The two socket classes (UDPSocket and TCPSocket) require that the I/O
/// completion callback function have an operator() method with the appropriate
/// signature.  The classes are templates, any class with that method and
/// signature can be passed as the callback object - there is no need for a
/// base class defining the interface.  However, some users of the socket
/// classes do not use the asynchronous I/O operations, yet have to supply a
/// template parameter.  This is the reason for this class - it is the dummy
/// template parameter.

class DummyIOCallback {
public:

    /// \brief Asynchronous I/O callback method
    ///
    /// Should never be called, as this class is a convenience class provided
    /// for instances where a socket is required but it is known that no
    /// asynchronous operations will be carried out.
    void operator()(boost::system::error_code) {
        // If the function is called, there is a serious logic error in
        // the program (this class should not be used as the callback
        // class).  As the asiolink module is too low-level for logging
        // errors, throw an exception.
        isc_throw(isc::Unexpected,
                  "DummyIOCallback::operator() must not be called");
    }

    /// \brief Asynchronous I/O callback method
    ///
    /// Should never be called, as this class is a convenience class provided
    /// for instances where a socket is required but it is known that no
    /// asynchronous operations will be carried out.
    void operator()(boost::system::error_code, size_t) {
        // If the function is called, there is a serious logic error in
        // the program (this class should not be used as the callback
        // class).  As the asiolink module is too low-level for logging
        // errors, throw an exception.
        isc_throw(isc::Unexpected,
                  "DummyIOCallback::operator() must not be called");
    }
};

} // namespace asiolink
} // namespace isc

#endif // DUMMY_IO_CB_H