void SipHandler::onPeerOnline( const QString& peerId ) { // qDebug() << Q_FUNC_INFO; tDebug() << "SIP online:" << peerId; SipPlugin* sip = qobject_cast<SipPlugin*>(sender()); SipInfo info; if( Servent::instance()->visibleExternally() ) { QString key = uuid(); ControlConnection* conn = new ControlConnection( Servent::instance(), QString() ); const QString& nodeid = Database::instance()->impl()->dbid(); conn->setName( peerId.left( peerId.indexOf( "/" ) ) ); conn->setId( nodeid ); Servent::instance()->registerOffer( key, conn ); info.setVisible( true ); info.setHost( Servent::instance()->externalAddress() ); info.setPort( Servent::instance()->externalPort() ); info.setKey( key ); info.setUniqname( nodeid ); tDebug() << "Asking them to connect to us:" << info; } else { info.setVisible( false ); tDebug() << "We are not visible externally:" << info; } sip->sendMsg( peerId, info ); }
const SipInfo SipInfo::fromJson( QString json ) { SipInfo info; QJson::Parser parser; bool ok; QVariant v = parser.parse( json.toLatin1(), &ok ); if ( !ok || v.type() != QVariant::Map ) { qDebug() << Q_FUNC_INFO << "Invalid JSON: " << json; return info; } QVariantMap m = v.toMap(); info.setVisible( m["visible"].toBool() ); if ( m["visible"].toBool() ) { info.setHost( m["host"].toString() ); info.setPort( m["port"].toInt() ); info.setNodeId( m["uniqname"].toString() ); info.setKey( m["key"].toString() ); } return info; }