diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 71b8fc908769fc4b72dffe69c08a90686d91be08..5c5b012e315f1e9c20f573a56d14b27d876ea223 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -224,6 +224,32 @@ void NetworkPluginServer::handleVCardPayload(const std::string &data) { m_vcardResponder->sendVCard(payload.id(), vcard); } +void NetworkPluginServer::handleAuthorizationPayload(const std::string &data) { + pbnetwork::Buddy payload; + if (payload.ParseFromString(data) == false) { + // TODO: ERROR + return; + } + + User *user = m_userManager->getUser(payload.username()); + if (!user) + return; + + Swift::Presence::ref response = Swift::Presence::create(); + response->setTo(user->getJID()); + std::string name = payload.buddyname(); + +// name = Swift::JID::getEscapedNode(name) + + if (name.find_last_of("@") != std::string::npos) { + name.replace(name.find_last_of("@"), 1, "%"); + } + + response->setFrom(Swift::JID(name, m_component->getJID().toString())); + response->setType(Swift::Presence::Subscribe); + m_component->getStanzaChannel()->sendPresence(response); +} + void NetworkPluginServer::handleChatStatePayload(const std::string &data, Swift::ChatState::ChatStateType type) { pbnetwork::Buddy payload; if (payload.ParseFromString(data) == false) { @@ -245,7 +271,6 @@ void NetworkPluginServer::handleChatStatePayload(const std::string &data, Swift: msg->addPayload(boost::make_shared(type)); conv->handleMessage(msg); - } void NetworkPluginServer::handleBuddyChangedPayload(const std::string &data) { @@ -409,6 +434,9 @@ void NetworkPluginServer::handleDataRead(Client *c, const Swift::SafeByteArray & case pbnetwork::WrapperMessage_Type_TYPE_BUDDY_STOPPED_TYPING: handleChatStatePayload(wrapper.payload(), Swift::ChatState::Active); break; + case pbnetwork::WrapperMessage_Type_TYPE_AUTH_REQUEST: + handleAuthorizationPayload(wrapper.payload()); + break; default: return; }