bool NetworkConnectorEngine::tryServeWishListItem() { const bool hasIpv6 = !Connection::Ipv6AddressesEqual(iController->getNode().ipv6Addr(), KNullIpv6Addr) ; iModel->lock() ; Node* n = iModel->nodeModel().nextConnectionWishListItem() ; iModel->unlock() ; if ( n ) { QHostAddress addrOfNode ; if (n->DNSAddr().length() > 0 && performDNSLookup(&addrOfNode, n->DNSAddr(), hasIpv6 )) { addrOfNode.setAddress(n->DNSAddr()) ; } else { if (!Connection::Ipv6AddressesEqual( n->ipv6Addr(), KNullIpv6Addr ) && // try connect only if we ourselves have ipv6: hasIpv6 ) { addrOfNode.setAddress( n->ipv6Addr() ) ; } else if ( n->ipv4Addr() ) { addrOfNode.setAddress( n->ipv4Addr() ) ; } else { // tor addresses? delete n ; LOG_STR("Connection wishlist-item had no ipv4/ipv6/dns addr") ; return false ; } } iModel->lock() ; for ( int i = 0 ; i < iAddressesInOrderToConnect.size() ; i++ ) { MNodeModelProtocolInterface::HostConnectQueueItem addrFromList = iAddressesInOrderToConnect.at(0) ; if (addrFromList.iAddress == addrOfNode ) { // item is already on our list -> discard delete n ; LOG_STR("Connection wishlist-item was already on list..") ; iModel->unlock() ; return false ; } } iModel->unlock() ; spawnNewConnection(addrOfNode, n->port(), n->nodeFingerPrint()) ; delete n ; return true ; } else { return false ; // nothing on wishlist } }