void ServerStanzaChannel::finishSession(const JID& to, SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<ToplevelElement> element, bool last) { #else void ServerStanzaChannel::finishSession(const JID& to, SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<Element> element, bool last) { #endif std::vector<SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<ServerFromClientSession> > candidateSessions; for (std::list<SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<ServerFromClientSession> >::const_iterator i = sessions[to.toBare().toString()].begin(); i != sessions[to.toBare().toString()].end(); ++i) { candidateSessions.push_back(*i); } for (std::vector<SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<ServerFromClientSession> >::const_iterator i = candidateSessions.begin(); i != candidateSessions.end(); ++i) { removeSession(*i); if (element) { (*i)->sendElement(element); } if (last && (*i)->getRemoteJID().isValid()) { Swift::Presence::ref presence = Swift::Presence::create(); presence->setFrom((*i)->getRemoteJID()); presence->setType(Swift::Presence::Unavailable); onPresenceReceived(presence); } (*i)->finishSession(); // std::cout << "FINISH SESSION " << sessions[to.toBare().toString()].size() << "\n"; if (last) { break; } } }
void ServerStanzaChannel::handleElement(SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<Element> element, const SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<ServerFromClientSession>& session) { SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<Stanza> stanza = SWIFTEN_SHRPTR_NAMESPACE::dynamic_pointer_cast<Stanza>(element); if (!stanza) { return; } stanza->setFrom(session->getRemoteJID()); if (!stanza->getFrom().isValid()) return; SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<Message> message = SWIFTEN_SHRPTR_NAMESPACE::dynamic_pointer_cast<Message>(stanza); if (message) { onMessageReceived(message); return; } SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<Presence> presence = SWIFTEN_SHRPTR_NAMESPACE::dynamic_pointer_cast<Presence>(stanza); if (presence) { onPresenceReceived(presence); return; } SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<IQ> iq = SWIFTEN_SHRPTR_NAMESPACE::dynamic_pointer_cast<IQ>(stanza); if (iq) { onIQReceived(iq); return; } }
void ServerStanzaChannel::handleDataRead(const SafeByteArray &data, const SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<ServerFromClientSession> &session) { if (safeByteArrayToString(data).find("</stream:stream>") != std::string::npos) { Swift::Presence::ref presence = Swift::Presence::create(); presence->setFrom(session->getRemoteJID()); presence->setType(Swift::Presence::Unavailable); onPresenceReceived(presence); } }
void ServerStanzaChannel::handleSessionFinished(const boost::optional<Session::SessionError>&, const SWIFTEN_SHRPTR_NAMESPACE::shared_ptr<ServerFromClientSession>& session) { removeSession(session); // if (!session->initiatedFinish()) { Swift::Presence::ref presence = Swift::Presence::create(); presence->setFrom(session->getRemoteJID()); presence->setType(Swift::Presence::Unavailable); onPresenceReceived(presence); // } }
void ComponentSessionStanzaChannel::handleStanza(boost::shared_ptr<Stanza> stanza) { boost::shared_ptr<Message> message = boost::dynamic_pointer_cast<Message>(stanza); if (message) { onMessageReceived(message); return; } boost::shared_ptr<Presence> presence = boost::dynamic_pointer_cast<Presence>(stanza); if (presence) { onPresenceReceived(presence); return; } boost::shared_ptr<IQ> iq = boost::dynamic_pointer_cast<IQ>(stanza); if (iq) { onIQReceived(iq); return; } }
void CoreClient::handlePresenceReceived(Presence::ref presence) { onPresenceReceived(presence); }
void XMPPFrontend::handleGeneralPresence(Swift::Presence::ref presence) { onPresenceReceived(presence); }