summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Nim/main.cpp')
-rw-r--r--Nim/main.cpp52
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_;