diff options
Diffstat (limited to 'Slimber')
-rw-r--r-- | Slimber/FileVCardCollection.cpp | 6 | ||||
-rw-r--r-- | Slimber/FileVCardCollection.h | 1 | ||||
-rw-r--r-- | Slimber/Server.cpp | 30 | ||||
-rw-r--r-- | Slimber/Server.h | 1 | ||||
-rw-r--r-- | Slimber/main.cpp | 9 |
5 files changed, 35 insertions, 12 deletions
diff --git a/Slimber/FileVCardCollection.cpp b/Slimber/FileVCardCollection.cpp index 60be5c0..1568b33 100644 --- a/Slimber/FileVCardCollection.cpp +++ b/Slimber/FileVCardCollection.cpp @@ -1,14 +1,18 @@ #include "Slimber/FileVCardCollection.h" +#include "Swiften/Elements/VCard.h" namespace Swift { FileVCardCollection::FileVCardCollection(boost::filesystem::path dir) : vcardsPath(dir) { + vcard = boost::shared_ptr<VCard>(new VCard()); } boost::shared_ptr<VCard> FileVCardCollection::getOwnVCard() const { + return vcard; } -void FileVCardCollection::setOwnVCard(boost::shared_ptr<VCard> vcard) { +void FileVCardCollection::setOwnVCard(boost::shared_ptr<VCard> v) { + vcard = v; } } diff --git a/Slimber/FileVCardCollection.h b/Slimber/FileVCardCollection.h index dde47df..3d805a8 100644 --- a/Slimber/FileVCardCollection.h +++ b/Slimber/FileVCardCollection.h @@ -15,5 +15,6 @@ namespace Swift { private: boost::filesystem::path vcardsPath; + boost::shared_ptr<VCard> vcard; }; } diff --git a/Slimber/Server.cpp b/Slimber/Server.cpp index c331416..b7c7052 100644 --- a/Slimber/Server.cpp +++ b/Slimber/Server.cpp @@ -84,6 +84,7 @@ void Server::handleSessionFinished(boost::shared_ptr<ServerFromClientSession>) { selfJID_ = JID(); rosterRequested_ = false; onSelfConnected(false); + lastPresence_.reset(); } void Server::handleLinkLocalSessionFinished(boost::shared_ptr<Session> session) { @@ -129,6 +130,7 @@ void Server::handleElementReceived(boost::shared_ptr<Element> element, boost::sh else { dnsSDService_->updateService(getLinkLocalServiceInfo(presence)); } + lastPresence_ = presence; } else { unregisterService(); @@ -148,14 +150,16 @@ void Server::handleElementReceived(boost::shared_ptr<Element> element, boost::sh session->sendElement(IQ::createError(iq->getFrom(), iq->getID(), Error::Forbidden, Error::Cancel)); } } - if (iq->getPayload<VCard>()) { + if (boost::shared_ptr<VCard> vcard = iq->getPayload<VCard>()) { if (iq->getType() == IQ::Get) { - boost::shared_ptr<VCard> vcard(new VCard()); - vcard->setNickname(iq->getFrom().getNode()); - session->sendElement(IQ::createResult(iq->getFrom(), iq->getID(), vcard)); + session->sendElement(IQ::createResult(iq->getFrom(), iq->getID(), vCardCollection_->getOwnVCard())); } else { - session->sendElement(IQ::createError(iq->getFrom(), iq->getID(), Error::Forbidden, Error::Cancel)); + vCardCollection_->setOwnVCard(vcard); + session->sendElement(IQ::createResult(iq->getFrom(), iq->getID())); + if (lastPresence_) { + dnsSDService_->updateService(getLinkLocalServiceInfo(lastPresence_)); + } } } else { @@ -259,12 +263,18 @@ void Server::handlePresenceChanged(boost::shared_ptr<Presence> presence) { LinkLocalServiceInfo Server::getLinkLocalServiceInfo(boost::shared_ptr<Presence> presence) { LinkLocalServiceInfo info; - info.setFirstName("Remko"); - info.setLastName("Tron\xc3\xa7on"); - info.setEMail("email@example.com"); - info.setJID(JID("jid@example.com")); + boost::shared_ptr<VCard> vcard = vCardCollection_->getOwnVCard(); + if (!vcard->getFamilyName().isEmpty() || !vcard->getGivenName().isEmpty()) { + info.setFirstName(vcard->getGivenName()); + info.setLastName(vcard->getFamilyName()); + } + if (!vcard->getNickname().isEmpty()) { + info.setNick(vcard->getNickname()); + } + if (!vcard->getEMail().isEmpty()) { + info.setEMail(vcard->getEMail()); + } info.setMessage(presence->getStatus()); - info.setNick("Remko"); switch (presence->getShow()) { case StatusShow::Online: case StatusShow::None: diff --git a/Slimber/Server.h b/Slimber/Server.h index b85aec8..ac80509 100644 --- a/Slimber/Server.h +++ b/Slimber/Server.h @@ -69,6 +69,7 @@ namespace Swift { boost::shared_ptr<LinkLocalRoster> linkLocalRoster_; boost::shared_ptr<DNSSDService> dnsSDService_; VCardCollection* vCardCollection_; + boost::shared_ptr<Presence> lastPresence_; boost::shared_ptr<BoostConnectionServer> serverFromClientConnectionServer_; boost::shared_ptr<ServerFromClientSession> serverFromClientSession_; boost::shared_ptr<BoostConnectionServer> serverFromNetworkConnectionServer_; diff --git a/Slimber/main.cpp b/Slimber/main.cpp index 31ae15a..40f41c8 100644 --- a/Slimber/main.cpp +++ b/Slimber/main.cpp @@ -8,7 +8,10 @@ #include "Swiften/LinkLocal/AvahiDNSSDService.h" #endif #include "Slimber/Server.h" +#include "Slimber/FileVCardCollection.h" +#include "Swiften/LinkLocal/LinkLocalRoster.h" #include "Swiften/EventLoop/SimpleEventLoop.h" +#include "Swiften/Application/Platform/PlatformApplication.h" using namespace Swift; @@ -24,7 +27,11 @@ int main() { new AvahiDNSSDService()); #endif - Server server(5222, 5562, dnsSDService); + boost::shared_ptr<LinkLocalRoster> linkLocalRoster = boost::shared_ptr<LinkLocalRoster>(new LinkLocalRoster(dnsSDService)); + + FileVCardCollection vCardCollection(PlatformApplication("Slimber").getSettingsDir()); + + Server server(5222, 5562, linkLocalRoster, dnsSDService, &vCardCollection); eventLoop.run(); return 0; } |