7#ifndef RADIUS_CLIENT_EXCHANGE_H
8#define RADIUS_CLIENT_EXCHANGE_H
21#include <boost/enable_shared_from_this.hpp>
22#include <boost/scoped_ptr.hpp>
23#include <boost/shared_ptr.hpp>
58class Exchange :
public boost::enable_shared_from_this<Exchange> {
64 typedef std::function<void(
const boost::system::error_code ec,
134 virtual void start();
165 boost::scoped_ptr<asiolink::UDPEndpoint>
ep_;
238 const boost::system::error_code ec,
247 const boost::system::error_code ec,
The UDPSocket class is a concrete derived class of IOAsioSocket that represents a UDP socket.
std::list< size_t > postponed_
List of postponed server indexes.
asiolink::UDPSocket< const SocketCallback > RadiusSocket
Type of RADIUS UDP sockets.
Servers servers_
Servers (a copy which is what we need).
virtual ~Exchange()
Destructor.
MessagePtr getRequest() const
Get the request.
virtual void start()
Start.
Handler handler_
Termination handler.
MessagePtr request_
Request message.
Exchange(const asiolink::IOServicePtr io_service, const MessagePtr &request, unsigned maxretries, const Servers &servers, Handler handler)
Constructor.
size_t size_
Number of transmitted octests;.
MessagePtr getResponse() const
Get the response.
ServerPtr server_
Current server.
int getRC() const
Get the error code.
asiolink::IntervalTimerPtr timer_
Interval timer.
std::function< void(const ExchangePtr ex)> Handler
Termination handler.
bool sync_
Sync / async flag.
void buildRequest()
Build request.
static void sentHandler(ExchangePtr ex, const boost::system::error_code ec, const size_t size)
Sent handler.
static constexpr size_t BUF_LEN
Receive buffer size.
void createIdentifier()
Create identifier.
MessagePtr received_
Received message.
void terminate()
Terminate.
void setTimer()
Set timer.
boost::scoped_ptr< std::mutex > mutex_
State change mutex.
const std::string & getId() const
Get identifier.
int rc_
Error/return code.
bool started_
Started flag.
boost::scoped_ptr< asiolink::UDPEndpoint > ep_
UDP endpoint.
static void openNext(ExchangePtr ex)
Class open / open next.
std::chrono::steady_clock::time_point start_time_
Start time.
static void receivedHandler(ExchangePtr ex, const boost::system::error_code ec, const size_t size)
Received handler.
std::string identifier_
The identifier (random value in hexadecimal).
boost::scoped_ptr< RadiusSocket > socket_
Socket.
std::function< void(const boost::system::error_code ec, const size_t size)> SocketCallback
Type of UDP socket callback functions.
MessagePtr sent_
Sent message.
bool terminated_
Terminated flag.
virtual void shutdown()
Shutdown.
void open()
Instance open.
virtual void shutdownInternal()
Shutdown.
asiolink::IOServicePtr io_service_
IO service (argument for async or internal for sync).
static void timeoutHandler(ExchangePtr ex)
Timeout handler.
std::vector< uint8_t > buffer_
Buffer.
void logReplyMessages() const
Log reply messages.
void cancelTimer()
Cancel timer.
size_t idx_
Current server index.
unsigned retries_
Retry counter.
unsigned maxretries_
Maximum number of retries for a server.
boost::shared_ptr< isc::asiolink::IntervalTimer > IntervalTimerPtr
boost::shared_ptr< IOService > IOServicePtr
Defines a smart pointer to an IOService instance.
string exchangeRCtoText(const int rc)
ExchangeRC value -> name function.
std::vector< ServerPtr > Servers
Type of RADIUS server collection.
boost::shared_ptr< Exchange > ExchangePtr
Type of shared pointers to RADIUS exchange object.
boost::shared_ptr< Server > ServerPtr
Type of shared pointers to a RADIUS server object.
ExchangeRC
Exchange error codes.
boost::shared_ptr< Message > MessagePtr
Shared pointers to message.
Defines the logger used by the top-level component of kea-lfc.