diff --git a/src/libtomahawk/network/Servent.cpp b/src/libtomahawk/network/Servent.cpp index 36c4bfbe3..3dad48481 100644 --- a/src/libtomahawk/network/Servent.cpp +++ b/src/libtomahawk/network/Servent.cpp @@ -308,7 +308,12 @@ Servent::isValidExternalIP( const QHostAddress& addr ) void Servent::registerOffer( const QString& key, Connection* conn ) { - m_offers[key] = QPointer(conn); + m_offers[key] = QPointer(conn); +} + +void Servent::registerLazyOffer(const QString &key, const peerinfo_ptr &peerInfo, const QString &nodeid ) +{ + m_lazyoffers[key] = QPair< peerinfo_ptr, QString >( peerInfo, nodeid ); } @@ -430,12 +435,12 @@ Servent::registerPeer( const Tomahawk::peerinfo_ptr& peerInfo ) QString key = uuid(); const QString& nodeid = Database::instance()->impl()->dbid(); - ControlConnection* conn = new ControlConnection( this ); + /*ControlConnection* conn = new ControlConnection( this ); conn->setName( peerInfo->contactId() ); conn->setId( nodeid ); - conn->addPeerInfo( peerInfo ); + conn->addPeerInfo( peerInfo );*/ - registerOffer( key, conn ); + registerLazyOffer( key, peerInfo, nodeid ); QList sipInfos = getLocalSipInfos( nodeid, key ); peerInfo->sendLocalSipInfos( sipInfos ); @@ -1044,7 +1049,20 @@ Servent::claimOffer( ControlConnection* cc, const QString &nodeid, const QString } } - if ( m_offers.contains( key ) ) + if ( m_lazyoffers.contains( key ) ) + { + ControlConnection* conn = new ControlConnection( this ); + conn->setName( m_lazyoffers.value( key ).first->contactId() ); + conn->addPeerInfo( m_lazyoffers.value( key ).first ); + conn->setId( m_lazyoffers.value( key ).second ); + + // Register as non-lazy offer + m_lazyoffers.remove( key ); + registerOffer( key, conn ); + + return conn; + } + else if ( m_offers.contains( key ) ) { QPointer conn = m_offers.value( key ); if ( conn.isNull() ) diff --git a/src/libtomahawk/network/Servent.h b/src/libtomahawk/network/Servent.h index 759822a07..fd2dd6ba2 100644 --- a/src/libtomahawk/network/Servent.h +++ b/src/libtomahawk/network/Servent.h @@ -76,6 +76,7 @@ public: QString createConnectionKey( const QString& name = "", const QString &nodeid = "", const QString &key = "", bool onceOnly = true ); void registerOffer( const QString& key, Connection* conn ); + void registerLazyOffer( const QString& key, const Tomahawk::peerinfo_ptr& peerInfo, const QString &nodeid ); void registerControlConnection( ControlConnection* conn ); void unregisterControlConnection( ControlConnection* conn ); @@ -166,6 +167,7 @@ private: QJson::Parser parser; QList< ControlConnection* > m_controlconnections; // canonical list of authed peers QMap< QString, QPointer< Connection > > m_offers; + QMap< QString, QPair< Tomahawk::peerinfo_ptr, QString > > m_lazyoffers; QStringList m_connectedNodes; /**