void XmppSipPlugin::onNewMessage( const Jreen::Message& message ) { if ( m_state != Account::Connected ) return; QString from = message.from().full(); QString msg = message.body(); if ( msg.isEmpty() ) return; if ( message.subtype() == Jreen::Message::Error ) { tDebug() << Q_FUNC_INFO << "Received error message from" << from << ", not answering... (Condition:" << ( message.error().isNull() ? -1 : message.error()->condition() ) << ")"; return; } // FIXME: We do not sent SipInfo in JSON via XMPP, why do we receive it here? SipInfo info = SipInfo::fromJson( msg ); if ( !info.isValid() ) { QString to = from; QString response = QString( tr( "I'm sorry -- I'm just an automatic presence used by Tomahawk Player" " (http://gettomahawk.com). If you are getting this message, the person you" " are trying to reach is probably not signed on, so please try again later!" ) ); // this is not a sip message, so we send it directly through the client m_client->send( Jreen::Message ( Jreen::Message::Error, Jreen::JID( to ), response) ); return; } qDebug() << Q_FUNC_INFO << "From:" << message.from().full() << ":" << message.body(); }
QDebug operator<< ( QDebug dbg, const SipInfo& info ) { if( !info.isValid() ) dbg.nospace() << "info is invalid"; else dbg.nospace() << info.toJson(); return dbg.maybeSpace(); }
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 DiagnosticsDialog::updateLogView() { QString log; log.append( QString("TOMAHAWK DIAGNOSTICS LOG -%1 \n\n") .arg( QDateTime::currentDateTime().toString() ) ); // network log.append( "TOMAHAWK-VERSION: " TOMAHAWK_VERSION "\n\n\n" ); // network log.append( "NETWORK:\n" " General:\n" ); if( Servent::instance()->visibleExternally() ) { log.append( QString( " visible: true\n" " host: %1\n" " port: %2\n" "\n" ).arg( Servent::instance()->externalAddress() ) .arg( Servent::instance()->externalPort() ) ); } else { log.append( QString( " visible: false" ) ); } log.append("\n\n"); // Peers log.append("SIP PLUGINS:\n"); QList< Tomahawk::source_ptr > sources = SourceList::instance()->sources( true ); Q_FOREACH(SipPlugin *sip, SipHandler::instance()->allPlugins()) { Q_ASSERT(sip); QString stateString; switch( sip->connectionState() ) { case SipPlugin::Connecting: stateString = "Connecting"; break; case SipPlugin::Connected: stateString = "Connected"; break; case SipPlugin::Disconnected: stateString = "Disconnected"; break; case SipPlugin::Disconnecting: stateString = "Disconnecting"; } log.append( QString(" %2 (%1): %3 (%4)\n") .arg(sip->name()) .arg(sip->friendlyName()) .arg(sip->accountName()) .arg(stateString) ); Q_FOREACH( const QString &peerId, sip->peersOnline() ) { /* enable this again, when we check the source has this peerId bool connected = false; Q_FOREACH( const Tomahawk::source_ptr &source, sources ) { if( source->controlConnection() ) { connected = true; break; } }*/ QString versionString = SipHandler::instance()->versionString( peerId ); SipInfo sipInfo = SipHandler::instance()->sipInfo( peerId ); if( !sipInfo.isValid() ) log.append( QString(" %1: %2 %3" /*"(%4)"*/ "\n") .arg( peerId ) .arg( "sipinfo invalid" ) .arg( versionString ) // .arg( connected ? "connected" : "not connected") ); else if( sipInfo.isVisible() ) log.append( QString(" %1: %2:%3 %4" /*" (%5)"*/ "\n") .arg( peerId ) .arg( sipInfo.host().hostName() ) .arg( sipInfo.port() ) .arg( versionString ) // .arg( connected ? "connected" : "not connected") ); else log.append( QString(" %1: visible: false %2" /*" (%3)"*/ "\n") .arg( peerId ) .arg( versionString ) // .arg( connected ? "connected" : "not connected") ); } log.append("\n"); }