createIdentifier();
}
+ExchangePtr
+Exchange::create(const asiolink::IOServicePtr io_service,
+ const MessagePtr& request,
+ unsigned maxretries,
+ const Servers& servers,
+ Handler handler) {
+ return (ExchangePtr(new Exchange(io_service, request, maxretries, servers,
+ handler)));
+}
+
Exchange::Exchange(const MessagePtr& request,
unsigned maxretries,
const Servers& servers)
createIdentifier();
}
+ExchangePtr
+Exchange::create(const MessagePtr& request,
+ unsigned maxretries,
+ const Servers& servers) {
+ return (ExchangePtr(new Exchange(request, maxretries, servers)));
+}
+
Exchange::~Exchange() {
MultiThreadingLock lock(*mutex_);
shutdownInternal();
/// @brief Termination handler.
typedef std::function<void(const ExchangePtr ex)> Handler;
- /// @brief Constructor.
+ /// @brief Factory.
///
/// Async version.
///
/// @param maxretries maximum number of retries for a server.
/// @param servers Servers.
/// @param handler Termination handler.
- Exchange(const asiolink::IOServicePtr io_service,
- const MessagePtr& request,
- unsigned maxretries,
- const Servers& servers,
- Handler handler);
+ static ExchangePtr create(const asiolink::IOServicePtr io_service,
+ const MessagePtr& request,
+ unsigned maxretries,
+ const Servers& servers,
+ Handler handler);
- /// @brief Constructor.
+ /// @brief Factory.
///
/// Sync version.
///
/// @param request request message to send.
/// @param maxretries maximum number of retries for a server.
/// @param servers Servers.
- Exchange(const MessagePtr& request,
- unsigned maxretries,
- const Servers& servers);
+ static ExchangePtr create(const MessagePtr& request,
+ unsigned maxretries,
+ const Servers& servers);
/// @brief Destructor.
virtual ~Exchange();
virtual void shutdown();
protected:
+ /// @brief Constructor.
+ ///
+ /// Async version.
+ ///
+ /// @param io_service Reference to the IO service.
+ /// @param request request message to send.
+ /// @param maxretries maximum number of retries for a server.
+ /// @param servers Servers.
+ /// @param handler Termination handler.
+ Exchange(const asiolink::IOServicePtr io_service,
+ const MessagePtr& request,
+ unsigned maxretries,
+ const Servers& servers,
+ Handler handler);
+
+ /// @brief Constructor.
+ ///
+ /// Sync version.
+ ///
+ /// @param request request message to send.
+ /// @param maxretries maximum number of retries for a server.
+ /// @param servers Servers.
+ Exchange(const MessagePtr& request,
+ unsigned maxretries,
+ const Servers& servers);
+
/// @brief The identifier (random value in hexadecimal).
std::string identifier_;
servers = RadiusImpl::instance().getAccountingServers();
}
if (sync) {
- exchange_.reset(new Exchange(request, maxretries, servers));
+ exchange_ = Exchange::create(request, maxretries, servers);
} else {
- exchange_.reset(new Exchange(RadiusImpl::instance().getIOContext(),
+ exchange_ = Exchange::create(RadiusImpl::instance().getIOContext(),
request, maxretries, servers,
- handler));
+ handler);
}
}
"to-be-set", attrs));
unsigned maxretries = RadiusImpl::instance().retries_;
Servers servers = RadiusImpl::instance().auth_->servers_;
- exchange_.reset(new Exchange(RadiusImpl::instance().getIOContext(),
+ exchange_ = Exchange::create(RadiusImpl::instance().getIOContext(),
request, maxretries, servers,
std::bind(&RadiusAuthStatus::invokeCallback,
- handler, ph::_1)));
+ handler, ph::_1));
}
void
"to-be-set", attrs));
unsigned maxretries = RadiusImpl::instance().retries_;
Servers servers = RadiusImpl::instance().acct_->servers_;
- exchange_.reset(new Exchange(RadiusImpl::instance().getIOContext(),
+ exchange_ = Exchange::create(RadiusImpl::instance().getIOContext(),
request, maxretries, servers,
std::bind(&RadiusAcctStatus::invokeCallback,
- handler, ph::_1)));
+ handler, ph::_1));
}
void
"to-be-set", attrs));
unsigned maxretries = RadiusImpl::instance().retries_;
Servers servers = RadiusImpl::instance().common_->servers_;
- exchange_.reset(new Exchange(RadiusImpl::instance().getIOContext(),
+ exchange_ = Exchange::create(RadiusImpl::instance().getIOContext(),
request, maxretries, servers,
std::bind(&RadiusTlsStatus::invokeCallback,
- handler, ph::_1)));
+ handler, ph::_1));
}
void
Servers servers;
// No IO service.
- EXPECT_THROW_MSG(exchange.reset(new Exchange(io_service, msg, 0, servers, Exchange::Handler())),
+ EXPECT_THROW_MSG(Exchange::create(io_service, msg, 0, servers,
+ Exchange::Handler()),
BadValue, "null IO service");
// No message.
io_service.reset(new IOService());
- EXPECT_THROW_MSG(exchange.reset(new Exchange(io_service, msg, 0, servers, Exchange::Handler())),
+ EXPECT_THROW_MSG(Exchange::create(io_service, msg, 0, servers,
+ Exchange::Handler()),
BadValue, "null request");
// No servers.
AttributesPtr attrs;
string secret = "foobar";
ASSERT_NO_THROW_LOG(msg.reset(new Message(code, 0, auth, secret, attrs)));
- EXPECT_THROW_MSG(exchange.reset(new Exchange(io_service, msg, 0, servers, Exchange::Handler())),
+ EXPECT_THROW_MSG(Exchange::create(io_service, msg, 0, servers,
+ Exchange::Handler()),
BadValue, "no server");
// No handler.
secret, 0)));
ASSERT_TRUE(server);
servers.push_back(server);
- EXPECT_THROW_MSG(exchange.reset(new Exchange(io_service, msg, 0, servers, Exchange::Handler())),
+ EXPECT_THROW_MSG(Exchange::create(io_service, msg, 0, servers,
+ Exchange::Handler()),
BadValue, "null handler");
// No error.
auto handler = [] (const ExchangePtr) { };
- ASSERT_NO_THROW_LOG(exchange.reset(new Exchange(io_service, msg, 0,
- servers, handler)));
+ ASSERT_NO_THROW_LOG(exchange = Exchange::create(io_service, msg, 0,
+ servers, handler));
// Check exchange.
ASSERT_TRUE(exchange);
Servers servers;
// No message.
- EXPECT_THROW_MSG(exchange.reset(new Exchange(msg, 0, servers)), BadValue,
+ EXPECT_THROW_MSG(Exchange::create(msg, 0, servers), BadValue,
"null request");
// No servers.
AttributesPtr attrs;
string secret = "foobar";
ASSERT_NO_THROW_LOG(msg.reset(new Message(code, 0, auth, secret, attrs)));
- EXPECT_THROW_MSG(exchange.reset(new Exchange(msg, 0, servers)), BadValue,
+ EXPECT_THROW_MSG(Exchange::create(msg, 0, servers), BadValue,
"no server");
// No error.
TlsContextPtr tls_context;
ASSERT_NO_THROW_LOG(server.reset(new Server(addr, 11645, addr, tls_context,
secret, 0)));
+ ASSERT_TRUE(server);
servers.push_back(server);
- ASSERT_NO_THROW_LOG(exchange.reset(new Exchange(msg, 0, servers)));
+ ASSERT_NO_THROW_LOG(exchange = Exchange::create(msg, 0, servers));
// Check exchange.
ASSERT_TRUE(exchange);