bool operator==( const SipInfo& one, const SipInfo& two ) { // check valid/invalid combinations first, so we don't try to access any invalid sipInfos (->assert) if ( ( one.isValid() && !two.isValid() ) || ( !one.isValid() && two.isValid() ) ) { return false; } else if ( one.isValid() && two.isValid() ) { if ( one.isVisible() == two.isVisible() && one.host() == two.host() && one.port() == two.port() && one.nodeId() == two.nodeId() && one.key() == two.key() ) { return true; } } return false; }
void SipHandler::onSipInfo( const QString& peerId, const SipInfo& info ) { tDebug() << Q_FUNC_INFO << "SIP Message:" << peerId << info; QString barePeerId = peerId.left( peerId.indexOf( "/" ) ); //FIXME: We should probably be using barePeerId in the connectToPeer call below. //But, verify this doesn't cause any problems (there is still a uniquename after all) /* If only one party is externally visible, connection is obvious If both are, peer with lowest IP address initiates the connection. This avoids dupe connections. */ if ( info.isVisible() ) { if( !Servent::instance()->visibleExternally() || Servent::instance()->externalAddress() < info.host() || ( Servent::instance()->externalAddress() == info.host() && Servent::instance()->externalPort() < info.port() ) ) { tDebug() << "Initiate connection to" << peerId << "at" << info.host(); Servent::instance()->connectToPeer( info.host(), info.port(), info.key(), peerId, info.uniqname() ); } else { tDebug() << Q_FUNC_INFO << "They should be conecting to us..."; } } else { tDebug() << Q_FUNC_INFO << "They are not visible, doing nothing atm"; } m_peersSipInfos.insert( peerId, info ); }
void XmppSipPlugin::sendSipInfo( const Tomahawk::peerinfo_ptr& receiver, const SipInfo& info ) { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << receiver << info; if ( !m_client ) return; TomahawkXmppMessage *sipMessage; if ( info.isVisible() ) { sipMessage = new TomahawkXmppMessage( info.host(), info.port(), info.nodeId(), info.key() ); } else sipMessage = new TomahawkXmppMessage(); qDebug() << "Send sip messsage to" << receiver; Jreen::IQ iq( Jreen::IQ::Set, receiver->id() ); iq.addExtension( sipMessage ); Jreen::IQReply *reply = m_client->send( iq ); reply->setData( SipMessageSent ); connect( reply, SIGNAL( received( Jreen::IQ ) ), SLOT( onNewIq( Jreen::IQ ) ) ); }