From bf5dc7fce4c67e9d2da73984de7ef78a28692c33 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Mon, 2 Apr 2007 05:14:20 +0000 Subject: [PATCH] added UPnP test application --- test/Jamfile | 4 +++- test/test_upnp.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 test/test_upnp.cpp diff --git a/test/Jamfile b/test/Jamfile index 293e70b33..c473d126f 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -1,6 +1,8 @@ use-project /torrent : .. ; -project +exe test_upnp : test_upnp.cpp /torrent : multi verbose ; + +project : requirements multi /torrent diff --git a/test/test_upnp.cpp b/test/test_upnp.cpp new file mode 100644 index 000000000..ef4f87568 --- /dev/null +++ b/test/test_upnp.cpp @@ -0,0 +1,59 @@ +#include "libtorrent/upnp.hpp" +#include "libtorrent/socket.hpp" +#include +#include +#include + +using boost::posix_time::seconds; +using namespace libtorrent; + +void callback(int tcp, int udp, std::string const& err) +{ + std::cerr << "tcp: " << tcp << ", udp: " << udp << ", error: \"" << err << "\"\n"; +} + +int main(int argc, char* argv[]) +{ + io_service ios; + std::string user_agent = "test agent"; + + if (argc != 4) + { + std::cerr << "usage: " << argv[0] << " bind-address tcp-port udp-port" << std::endl; + return 1; + } + + upnp upnp_handler(ios, address_v4(), user_agent, &callback); + + deadline_timer timer(ios); + timer.expires_from_now(seconds(2)); + timer.async_wait(boost::bind(&io_service::stop, boost::ref(ios))); + + std::cerr << "broadcasting for UPnP device" << std::endl; + + ios.reset(); + ios.run(); + + upnp_handler.rebind(address_v4::from_string(argv[1])); + std::cerr << "rebinding to IP " << argv[1] + << " broadcasting for UPnP device" << std::endl; + + ios.reset(); + ios.run(); + upnp_handler.set_mappings(atoi(argv[2]), atoi(argv[3])); + timer.expires_from_now(seconds(5)); + timer.async_wait(boost::bind(&io_service::stop, boost::ref(ios))); + std::cerr << "mapping ports TCP: " << argv[2] + << " UDP: " << argv[3] << std::endl; + + ios.reset(); + ios.run(); + std::cerr << "removing mappings" << std::endl; + upnp_handler.close(); + + ios.reset(); + ios.run(); + std::cerr << "closing" << std::endl; +} + +