/* * Copyright (c) 2011 Tobias Markmann * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #pragma once #include #include #include #include #include #include #include namespace Swift { class NATTraverser; class ConnectivityManager { public: ConnectivityManager(NATTraverser*); ~ConnectivityManager(); public: void addListeningPort(int port, NATPortMapping::Protocol protocol); void removeListeningPort(int port, NATPortMapping::Protocol protocol); std::vector getHostAddressPorts(NATPortMapping::Protocol protocol) const; std::vector getAssistedHostAddressPorts(NATPortMapping::Protocol protocol) const; private: void natTraversalGetPublicIPResult(boost::optional address); void natTraversalForwardPortResult(boost::optional mapping); private: NATTraverser* natTraversalWorker; std::set udpPorts; std::set tcpPorts; boost::optional publicAddress; }; }