Changeset - 8ab47cce7012
[Not reviewed]
0 5 0
HanzZ - 14 years ago 2011-05-31 16:01:17
hanzz.k@gmail.com
Answer to initial jabber:iq:roster get
5 files changed with 40 insertions and 2 deletions:
0 comments (0 inline, 0 general)
include/transport/rostermanager.h
Show inline comments
 
@@ -60,6 +60,8 @@ class RosterManager {
 

	
 
		void setStorageBackend(StorageBackend *storageBackend);
 

	
 
		Swift::RosterPayload::ref generateRosterPayload();
 

	
 
		/// Returns user associated with this roster.
 
		/// \return User
 
		User *getUser() { return m_user; }
include/transport/usermanager.h
Show inline comments
 
@@ -84,6 +84,7 @@ class UserManager {
 
		StorageBackend *m_storageBackend;
 
		StorageResponder *m_storageResponder;
 
		RosterResponder *m_rosterResponder;
 
		friend class RosterResponder;
 
};
 

	
 
}
src/rostermanager.cpp
Show inline comments
 
@@ -159,4 +159,18 @@ void RosterManager::setStorageBackend(StorageBackend *storageBackend) {
 
	}
 
}
 

	
 
Swift::RosterPayload::ref RosterManager::generateRosterPayload() {
 
	Swift::RosterPayload::ref payload = Swift::RosterPayload::ref(new Swift::RosterPayload());
 

	
 
	for (std::map<std::string, Buddy *>::const_iterator it = m_buddies.begin(); it != m_buddies.end(); it++) {
 
		Buddy *buddy = (*it).second;
 
		Swift::RosterItemPayload item;
 
		item.setJID(buddy->getJID().toBare());
 
		item.setName(buddy->getAlias());
 
		item.setGroups(buddy->getGroups());
 
		payload->addItem(item);
 
	}
 
	return payload;
 
}
 

	
 
}
src/rosterresponder.cpp
Show inline comments
 
@@ -24,6 +24,9 @@
 
#include <boost/bind.hpp>
 
#include "Swiften/Queries/IQRouter.h"
 
#include "Swiften/Swiften.h"
 
#include "transport/user.h"
 
#include "transport/usermanager.h"
 
#include "transport/rostermanager.h"
 

	
 
using namespace Swift;
 
using namespace boost;
 
@@ -41,7 +44,25 @@ RosterResponder::~RosterResponder() {
 
bool RosterResponder::handleGetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr<Swift::RosterPayload> payload) {
 
	// Get means we're in server mode and user wants to fetch his roster.
 
	// For now we send empty reponse, but TODO: Get buddies from database and send proper stored roster.
 
	sendResponse(from, id, boost::shared_ptr<RosterPayload>(new RosterPayload()));
 
	User *user = m_userManager->getUser(from.toBare().toString());
 
	if (!user) {
 
		// Client can send jabber:iq:roster IQ before presence, so we do little hack here to
 
		// trigger logging in.
 
		// UserManager should create user now, if everything is OK.
 
		Swift::Presence::ref response = Swift::Presence::create();
 
		response->setTo(to);
 
		response->setFrom(from);
 
		response->setType(Swift::Presence::Available);
 
		m_userManager->handlePresence(response);
 

	
 
		// if it's not created, lets finish this get
 
		user = m_userManager->getUser(from.toBare().toString());
 
		if (!user) {
 
			sendResponse(from, id, boost::shared_ptr<RosterPayload>(new RosterPayload()));
 
			return true;
 
		}
 
	}
 
	sendResponse(from, id, user->getRosterManager()->generateRosterPayload());
 
	return true;
 
}
 

	
src/usermanager.cpp
Show inline comments
 
@@ -88,7 +88,7 @@ void UserManager::handlePresence(Swift::Presence::ref presence) {
 
	std::string userkey = presence->getFrom().toBare().toString();
 

	
 
	User *user = getUser(userkey);
 
	if (!user ) {
 
	if (!user) {
 
		// No user and unavailable presence -> answer with unavailable
 
		if (presence->getType() == Swift::Presence::Unavailable) {
 
			Swift::Presence::ref response = Swift::Presence::create();
0 comments (0 inline, 0 general)