#include "Swiften/LinkLocal/LinkLocalConnector.h" #include #include "Swiften/Network/Connection.h" #include "Swiften/Network/ConnectionFactory.h" #include "Swiften/Network/HostAddress.h" #include "Swiften/Network/HostAddressPort.h" #include "Swiften/LinkLocal/DNSSDService.h" namespace Swift { LinkLocalConnector::LinkLocalConnector( const JID& remoteJID, const String& hostname, int port, boost::shared_ptr resolver, boost::shared_ptr connection) : remoteJID_(remoteJID), hostname_(hostname), port_(port), resolver_(resolver), connection_(connection), resolving_(false) { } void LinkLocalConnector::connect() { resolving_ = true; resolver_->onHostnameResolved.connect(boost::bind(&LinkLocalConnector::handleHostnameResolved, boost::dynamic_pointer_cast(shared_from_this()), _1, _2)); resolver_->resolveHostname(hostname_); } void LinkLocalConnector::handleHostnameResolved(const String& hostname, const boost::optional& address) { if (resolving_) { if (hostname == hostname_) { resolving_ = false; if (address) { connection_->onConnectFinished.connect(boost::bind(boost::ref(onConnectFinished), _1)); connection_->connect(HostAddressPort(*address, port_)); } else { onConnectFinished(false); } } } } void LinkLocalConnector::handleConnected(bool error) { onConnectFinished(error); } void LinkLocalConnector::queueElement(boost::shared_ptr element) { queuedElements_.push_back(element); } }