From f1e8d126743c3f4fa335df0378777dd3fb5e37b0 2011-06-14 15:12:35 From: Jan Kaluza Date: 2011-06-14 15:12:35 Subject: [PATCH] forward vcard set to backend --- diff --git a/include/transport/networkpluginserver.h b/include/transport/networkpluginserver.h index 9faebccf380eaac20e3783e95b0a25a772534ca2..56000bf117f4ac5f5d3b09cf7a54152dd4df20b3 100644 --- a/include/transport/networkpluginserver.h +++ b/include/transport/networkpluginserver.h @@ -80,6 +80,7 @@ class NetworkPluginServer { void handleBuddyRemoved(Buddy *buddy); void handleBuddyAdded(Buddy *buddy, const Swift::RosterItemPayload &item); + void handleVCardUpdated(User *user, boost::shared_ptr vcard); void handleVCardRequired(User *user, const std::string &name, unsigned int id); void send(boost::shared_ptr &, const std::string &data); diff --git a/include/transport/vcardresponder.h b/include/transport/vcardresponder.h index db6ea3199e4078fdc0496a56cdc68770b142e54d..fc4fb4c762a92ed192a30ceb7dfe0bb5e9a4fba7 100644 --- a/include/transport/vcardresponder.h +++ b/include/transport/vcardresponder.h @@ -39,6 +39,7 @@ class VCardResponder : public Swift::Responder { void sendVCard(unsigned int id, boost::shared_ptr vcard); boost::signal onVCardRequired; + boost::signal vcard)> onVCardUpdated; private: struct VCardData { diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 49f831ce0836eb6b3a038c87cc02b89ceeeaab0d..71b8fc908769fc4b72dffe69c08a90686d91be08 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -125,6 +125,7 @@ NetworkPluginServer::NetworkPluginServer(Component *component, Config *config, U m_vcardResponder = new VCardResponder(component->getIQRouter(), userManager); m_vcardResponder->onVCardRequired.connect(boost::bind(&NetworkPluginServer::handleVCardRequired, this, _1, _2, _3)); + m_vcardResponder->onVCardUpdated.connect(boost::bind(&NetworkPluginServer::handleVCardUpdated, this, _1, _2)); m_vcardResponder->start(); m_rosterResponder = new RosterResponder(component->getIQRouter(), userManager); @@ -655,8 +656,23 @@ void NetworkPluginServer::handleBuddyAdded(Buddy *buddy, const Swift::RosterItem handleBuddyUpdated(buddy, item); } +void NetworkPluginServer::handleVCardUpdated(User *user, boost::shared_ptr v) { + pbnetwork::VCard vcard; + vcard.set_username(user->getJID().toBare()); + vcard.set_buddyname(""); + vcard.set_id(0); + vcard.set_photo(&v->getPhoto()[0], v->getPhoto().size()); + + std::string message; + vcard.SerializeToString(&message); + + WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_VCARD); + + Client *c = (Client *) user->getData(); + send(c->connection, message); +} + void NetworkPluginServer::handleVCardRequired(User *user, const std::string &name, unsigned int id) { - std::cout << "VCARD REQUIRED " << name << " " << id << "\n"; pbnetwork::VCard vcard; vcard.set_username(user->getJID().toBare()); vcard.set_buddyname(name); diff --git a/src/vcardresponder.cpp b/src/vcardresponder.cpp index 72e820c4c028a77c517465b845507bd76af166c9..315f71ba1f69b2646aa928c6d53c7bc5b5e16328 100644 --- a/src/vcardresponder.cpp +++ b/src/vcardresponder.cpp @@ -73,6 +73,17 @@ bool VCardResponder::handleGetRequest(const Swift::JID& from, const Swift::JID& } bool VCardResponder::handleSetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr payload) { + if (!to.getNode().empty()) { + return false; + } + + User *user = m_userManager->getUser(from.toBare().toString()); + if (!user) { + return false; + } + + onVCardUpdated(user, payload); + sendResponse(from, id, boost::shared_ptr(new VCard())); return true; }