* tunneling and relaying of packets of any protocol.
*
*
- * Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl,
+ * Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl,
* Christian Pointner <satp@wirdorange.org>
*
* This file is part of Anytun.
using ::boost::asio::ip::tcp;
template<class Proto>
-void waitAndEnqueue(u_int32_t s, const std::string& addr, const std::string& port, boost::function<void(boost::asio::ip::basic_resolver_iterator<Proto>)> const& onResolve, ErrorCallback const& onError, ResolvAddrType r)
+void waitAndEnqueue(uint32_t s, const std::string& addr, const std::string& port, boost::function<void(boost::asio::ip::basic_resolver_iterator<Proto>)> const& onResolve, ErrorCallback const& onError, ResolvAddrType r)
{
cLog.msg(Log::PRIO_ERROR) << "the resolver only supports udp and tcp";
}
template<>
-void waitAndEnqueue(u_int32_t s, const std::string& addr, const std::string& port, boost::function<void(boost::asio::ip::basic_resolver_iterator<udp>)> const& onResolve, ErrorCallback const& onError, ResolvAddrType r)
+void waitAndEnqueue(uint32_t s, const std::string& addr, const std::string& port, boost::function<void(boost::asio::ip::basic_resolver_iterator<udp>)> const& onResolve, ErrorCallback const& onError, ResolvAddrType r)
{
boost::this_thread::sleep(boost::posix_time::milliseconds(s * 1000));
gResolver.resolveUdp(addr, port, onResolve, onError, r);
}
template<>
-void waitAndEnqueue(u_int32_t s, const std::string& addr, const std::string& port, boost::function<void(boost::asio::ip::basic_resolver_iterator<tcp>)> const& onResolve, ErrorCallback const& onError, ResolvAddrType r)
+void waitAndEnqueue(uint32_t s, const std::string& addr, const std::string& port, boost::function<void(boost::asio::ip::basic_resolver_iterator<tcp>)> const& onResolve, ErrorCallback const& onError, ResolvAddrType r)
{
boost::this_thread::sleep(boost::posix_time::milliseconds(s * 1000));
gResolver.resolveTcp(addr, port, onResolve, onError, r);
if(boost::system::posix_error::success == e) {
try {
onResolve_(endpointIt);
- }
- catch(const std::runtime_error& e)
- {
+ } catch(const std::runtime_error& e) {
onError_(e);
}
} else {
{
Lock lock(instMutex);
static instanceCleaner c;
- if(!inst)
+ if(!inst) {
inst = new Resolver();
-
+ }
+
return *inst;
}
Resolver::~Resolver()
{
- if(thread_)
+ if(thread_) {
delete thread_;
+ }
}
void Resolver::init()
{
- if(!thread_)
- thread_ = new boost::thread(boost::bind(&Resolver::run, this));
+ if(!thread_) {
+ thread_ = new boost::thread(boost::bind(&Resolver::run, this));
+ }
}
void Resolver::run()
io_service_.run();
io_service_.reset();
boost::this_thread::sleep(boost::posix_time::milliseconds(250));
- }
- catch(const std::runtime_error& e)
- {
+ } catch(const std::runtime_error& e) {
cLog.msg(Log::PRIO_ERROR) << "resolver caught runtime error, restarting: " << e.what();
- }
- catch(const std::exception& e)
- {
+ } catch(const std::exception& e) {
cLog.msg(Log::PRIO_ERROR) << "resolver caught exception, restarting: " << e.what();
}
}
std::auto_ptr<udp::resolver::query> query;
if(addr != "") {
switch(r) {
- case IPV4_ONLY: query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(udp::v4(), addr, port)); break;
- case IPV6_ONLY: query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(udp::v6(), addr, port)); break;
- default: query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(addr, port)); break;
+ case IPV4_ONLY:
+ query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(udp::v4(), addr, port));
+ break;
+ case IPV6_ONLY:
+ query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(udp::v6(), addr, port));
+ break;
+ default:
+ query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(addr, port));
+ break;
}
- }
- else {
+ } else {
switch(r) {
- case IPV4_ONLY: query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(udp::v4(), port)); break;
- case IPV6_ONLY: query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(udp::v6(), port)); break;
- default: query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(port)); break;
+ case IPV4_ONLY:
+ query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(udp::v4(), port));
+ break;
+ case IPV6_ONLY:
+ query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(udp::v6(), port));
+ break;
+ default:
+ query = std::auto_ptr<udp::resolver::query>(new udp::resolver::query(port));
+ break;
}
}
UdpResolveHandler handler(addr, port, onResolve, onError, r);
std::auto_ptr<tcp::resolver::query> query;
if(addr != "") {
switch(r) {
- case IPV4_ONLY: query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(tcp::v4(), addr, port)); break;
- case IPV6_ONLY: query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(tcp::v6(), addr, port)); break;
- default: query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(addr, port)); break;
+ case IPV4_ONLY:
+ query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(tcp::v4(), addr, port));
+ break;
+ case IPV6_ONLY:
+ query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(tcp::v6(), addr, port));
+ break;
+ default:
+ query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(addr, port));
+ break;
}
- }
- else {
+ } else {
switch(r) {
- case IPV4_ONLY: query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(tcp::v4(), port)); break;
- case IPV6_ONLY: query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(tcp::v6(), port)); break;
- default: query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(port)); break;
+ case IPV4_ONLY:
+ query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(tcp::v4(), port));
+ break;
+ case IPV6_ONLY:
+ query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(tcp::v6(), port));
+ break;
+ default:
+ query = std::auto_ptr<tcp::resolver::query>(new tcp::resolver::query(port));
+ break;
}
}
TcpResolveHandler handler(addr, port, onResolve, onError, r);
- tcp_resolver_.async_resolve(*query, handler);
+ tcp_resolver_.async_resolve(*query, handler);
}