diff options
Diffstat (limited to 'Nim/main.cpp')
-rw-r--r-- | Nim/main.cpp | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/Nim/main.cpp b/Nim/main.cpp index 7ff4954..127878c 100644 --- a/Nim/main.cpp +++ b/Nim/main.cpp @@ -15,7 +15,7 @@ #include "Swiften/EventLoop/MainEventLoop.h" #include "Swiften/EventLoop/SimpleEventLoop.h" #include "Swiften/EventLoop/EventOwner.h" -#include "Swiften/Elements/Stanza.h" +#include "Swiften/Elements/Element.h" #include "Swiften/LinkLocal/LinkLocalServiceInfo.h" #include "Swiften/LinkLocal/LinkLocalRoster.h" #include "Swiften/LinkLocal/LinkLocalSession.h" @@ -69,9 +69,9 @@ class Server { c->disconnect(); } serverFromClientSession_ = boost::shared_ptr<ServerFromClientSession>(new ServerFromClientSession(idGenerator_.generateID(), c, &payloadParserFactories_, &payloadSerializers_, &userRegistry_)); - serverFromClientSession_->onStanzaReceived.connect(boost::bind(&Server::handleStanzaReceived, this, _1, serverFromClientSession_)); + serverFromClientSession_->onElementReceived.connect(boost::bind(&Server::handleElementReceived, this, _1, serverFromClientSession_)); serverFromClientSession_->onSessionFinished.connect(boost::bind(&Server::handleSessionFinished, this, serverFromClientSession_)); - serverFromClientSession_->start(); + serverFromClientSession_->startSession(); } void handleNewLinkLocalConnection(boost::shared_ptr<Connection> connection) { @@ -99,13 +99,15 @@ class Server { linkLocalSessions_.erase(std::remove(linkLocalSessions_.begin(), linkLocalSessions_.end(), session), linkLocalSessions_.end()); } - void handleLinkLocalStanzaReceived(boost::shared_ptr<Stanza> stanza, boost::shared_ptr<LinkLocalSession> session) { - JID fromJID = session->getRemoteJID(); - if (!linkLocalRoster_->hasItem(fromJID)) { - return; // TODO: Queue + void handleLinkLocalElementReceived(boost::shared_ptr<Element> element, boost::shared_ptr<LinkLocalSession> session) { + if (boost::shared_ptr<Stanza> stanza = boost::dynamic_pointer_cast<Stanza>(element)) { + JID fromJID = session->getRemoteJID(); + if (!linkLocalRoster_->hasItem(fromJID)) { + return; // TODO: Queue + } + stanza->setFrom(fromJID); + serverFromClientSession_->sendElement(stanza); } - stanza->setFrom(fromJID); - serverFromClientSession_->sendStanza(stanza); } void unregisterService() { @@ -115,7 +117,12 @@ class Server { } } - void handleStanzaReceived(boost::shared_ptr<Stanza> stanza, boost::shared_ptr<ServerFromClientSession> session) { + void handleElementReceived(boost::shared_ptr<Element> element, boost::shared_ptr<ServerFromClientSession> session) { + boost::shared_ptr<Stanza> stanza = boost::dynamic_pointer_cast<Stanza>(element); + if (!stanza) { + return; + } + stanza->setFrom(session->getJID()); if (!stanza->getTo().isValid()) { stanza->setTo(JID(session->getDomain())); @@ -139,28 +146,28 @@ class Server { if (boost::shared_ptr<IQ> iq = boost::dynamic_pointer_cast<IQ>(stanza)) { if (iq->getPayload<RosterPayload>()) { if (iq->getType() == IQ::Get) { - session->sendStanza(IQ::createResult(iq->getFrom(), iq->getID(), linkLocalRoster_->getRoster())); + session->sendElement(IQ::createResult(iq->getFrom(), iq->getID(), linkLocalRoster_->getRoster())); rosterRequested_ = true; foreach(const boost::shared_ptr<Presence> presence, linkLocalRoster_->getAllPresence()) { - session->sendStanza(presence); + session->sendElement(presence); } } else { - session->sendStanza(IQ::createError(iq->getFrom(), iq->getID(), Error::Forbidden, Error::Cancel)); + session->sendElement(IQ::createError(iq->getFrom(), iq->getID(), Error::Forbidden, Error::Cancel)); } } if (iq->getPayload<VCard>()) { if (iq->getType() == IQ::Get) { boost::shared_ptr<VCard> vcard(new VCard()); vcard->setNickname(iq->getFrom().getNode()); - session->sendStanza(IQ::createResult(iq->getFrom(), iq->getID(), vcard)); + session->sendElement(IQ::createResult(iq->getFrom(), iq->getID(), vcard)); } else { - session->sendStanza(IQ::createError(iq->getFrom(), iq->getID(), Error::Forbidden, Error::Cancel)); + session->sendElement(IQ::createError(iq->getFrom(), iq->getID(), Error::Forbidden, Error::Cancel)); } } else { - session->sendStanza(IQ::createError(iq->getFrom(), iq->getID(), Error::FeatureNotImplemented, Error::Cancel)); + session->sendElement(IQ::createError(iq->getFrom(), iq->getID(), Error::FeatureNotImplemented, Error::Cancel)); } } } @@ -169,7 +176,7 @@ class Server { boost::shared_ptr<LinkLocalSession> outgoingSession = getLinkLocalSessionForJID(toJID); if (outgoingSession) { - outgoingSession->sendStanza(stanza); + outgoingSession->sendElement(stanza); } else { if (linkLocalRoster_->hasItem(toJID)) { @@ -182,10 +189,10 @@ class Server { &payloadParserFactories_, &payloadSerializers_, &boostConnectionFactory_)); registerLinkLocalSession(outgoingSession); - outgoingSession->sendStanza(stanza); + outgoingSession->sendElement(stanza); } else { - session->sendStanza(IQ::createError( + session->sendElement(IQ::createError( stanza->getFrom(), stanza->getID(), Error::RecipientUnavailable, Error::Wait)); } @@ -195,7 +202,7 @@ class Server { void registerLinkLocalSession(boost::shared_ptr<LinkLocalSession> session) { session->onSessionFinished.connect(boost::bind(&Server::handleLinkLocalSessionFinished, this, session)); - session->onStanzaReceived.connect(boost::bind(&Server::handleLinkLocalStanzaReceived, this, _1, session)); + session->onElementReceived.connect(boost::bind(&Server::handleLinkLocalElementReceived, this, _1, session)); linkLocalSessions_.push_back(session); session->start(); } @@ -213,13 +220,13 @@ class Server { if (rosterRequested_) { boost::shared_ptr<IQ> iq = IQ::createRequest(IQ::Set, serverFromClientSession_->getJID(), idGenerator_.generateID(), roster); iq->setFrom(serverFromClientSession_->getJID().toBare()); - serverFromClientSession_->sendStanza(iq); + serverFromClientSession_->sendElement(iq); } } void handlePresenceChanged(boost::shared_ptr<Presence> presence) { if (rosterRequested_) { - serverFromClientSession_->sendStanza(presence); + serverFromClientSession_->sendElement(presence); } } @@ -260,7 +267,6 @@ class Server { boost::shared_ptr<ServerFromClientSession> serverFromClientSession_; boost::shared_ptr<BoostConnectionServer> serverFromNetworkConnectionServer_; std::vector< boost::shared_ptr<LinkLocalSession> > linkLocalSessions_; - std::vector< boost::shared_ptr<Stanza> > queuedOutgoingStanzas_; FullPayloadParserFactoryCollection payloadParserFactories_; FullPayloadSerializerCollection payloadSerializers_; bool dnsSDServiceRegistered_; |