qint64 ConnectionBOSH::writeData(const char *payloaddata, qint64 payloadlen) { jreenDebug() << Q_FUNC_INFO; Q_D(ConnectionBOSH); jreenDebug() << d->dataRequest << d->emptyRequest; if (d->dataRequest && payloadlen > 0) { d->payloads.append(payloaddata, payloadlen); return payloadlen; } bool isEmpty = payloadlen == 0; d->writer.writeStartElement(QLatin1String("body")); d->writer.writeAttribute(QLatin1String("rid"), QString::number(d->rid++)); d->writer.writeAttribute(QLatin1String("sid"), d->sessionId); d->writer.writeAttribute(QLatin1String("key"), QLatin1String(d->nextKey())); if (d->keys.size() == 1) d->writer.writeAttribute(QLatin1String("newkey"), QLatin1String(d->generateKey())); d->writer.writeDefaultNamespace(QLatin1String("http://jabber.org/protocol/httpbind")); if (isEmpty) { } else { d->writer.writeCharacters(QLatin1String("")); d->resultXml.append(payloaddata, payloadlen); d->resultBuffer.seek(d->resultXml.size()); } d->writer.writeEndElement(); d->send(isEmpty); return payloadlen; }
MessageSession *MessageSessionManager::session(const JID &jid, Message::Type type, bool create) { Q_D(MessageSessionManager); QList<QPointer<MessageSession> > sessions = d->fullSessions.values(jid.full()); jreenDebug() << "d->full_sessions" << d->fullSessions; foreach(MessageSession *session, sessions) jreenDebug() << "MessageSession" << (session ? session->jid() : JID()); for(int i = 0; i < sessions.size(); i++) { if(sessions[i].isNull()) { d->fullSessions.remove(jid.full(), sessions[i]); continue; } return sessions[i]; } if(!create) return 0; MessageSessionHandler *handler = d->sessionHandlers.value(type); if(!handler) return 0; MessageSession *session = new MessageSession(this, jid.full(), false, QString()); handler->handleMessageSession(session); return session; }
void BookmarkStorage::onResultReady(const Payload::Ptr &node, PrivateXml::Result result, const Error::Ptr &error) { Q_UNUSED(error); jreenDebug() << "onResultReady"; if(result == PrivateXml::RequestOk) { Bookmark *bookmark = se_cast<Bookmark*>(node.data()); jreenDebug() << "received bookmarks" << bookmark << node.data(); if (bookmark) emit bookmarksReceived(node.staticCast<Bookmark>()); else emit bookmarksReceived(Bookmark::Ptr::create()); } }
void DirectConnectionPrivate::doLookup() { jreenDebug() << "doLookup"; emit stateChanged(QAbstractSocket::HostLookupState); QDnsLookup *dns = new QDnsLookup(this); connect(dns, SIGNAL(finished()), this, SLOT(lookupResultsReady())); dns->setType(QDnsLookup::SRV); dns->setName(QString::fromLatin1("_xmpp-client._tcp." + QUrl::toAce(host_name))); dns->lookup(); }
void ConnectionBOSH::onRequestFinished(QNetworkReply *reply) { Q_D(ConnectionBOSH); reply->deleteLater(); jreenDebug() << Q_FUNC_INFO << reply->error() << reply->errorString(); if (reply->error() != QNetworkReply::NoError) { // TODO: Implement return; } bool header = reply->property("header").toBool(); QByteArray data = reply->readAll(); jreenDebug() << Q_FUNC_INFO << header << data; d->reader.addData(data); // Hook for parsers invoked in eventloops, which are run inside parser if (d->depth != 0) return; while (d->reader.readNext() > QXmlStreamReader::Invalid) { switch(d->reader.tokenType()) { case QXmlStreamReader::StartElement: d->depth++; if (d->depth > 1) { d->streamParser->handleStartElement(d->reader.name(), d->reader.namespaceUri(), d->reader.attributes()); } else { Q_ASSERT(d->reader.name() == QLatin1String("body")); const QXmlStreamAttributes attributes = d->reader.attributes(); if (d->streamInitiation) { d->streamInitiation = false; d->sessionId = attributes.value(QLatin1String("sid")).toString(); emit connected(); } if (header) d->streamParser->handleStartElement(QStringRef(), QStringRef(), QXmlStreamAttributes()); } break; case QXmlStreamReader::EndElement: if (d->depth > 1) d->streamParser->handleEndElement(d->reader.name(), d->reader.namespaceUri()); d->depth--; break; case QXmlStreamReader::Characters: if (d->depth > 1) d->streamParser->handleCharacterData(d->reader.text()); break; default: break; } } Q_ASSERT(d->depth == 0); if (!d->payloads.isEmpty() && reply == d->dataRequest) { d->dataRequest = 0; writeData(d->payloads.constData(), d->payloads.size()); d->payloads.clear(); return; } else if (reply == d->dataRequest) { d->dataRequest = 0; } if (reply == d->emptyRequest) d->emptyRequest = 0; if (d->authorized && !d->emptyRequest) { char c; writeData(&c, 0); } }