Changeset - 9c596ed62fd3
[Not reviewed]
0 2 0
Darchigh - 13 years ago 2013-01-09 17:30:18
Darchigh@gmail.com
RegisterUser will try to register via RemoteRoster before sending subscr.Presence for transport
2 files changed with 34 insertions and 16 deletions:
0 comments (0 inline, 0 general)
include/transport/userregistration.h
Show inline comments
 
@@ -70,7 +70,8 @@ class UserRegistration : public Swift::Responder<Swift::InBandRegistrationPayloa
 
	private:
 
		virtual bool handleGetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr<Swift::InBandRegistrationPayload> payload);
 
		virtual bool handleSetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr<Swift::InBandRegistrationPayload> payload);
 

	
 
                
 
                void handleRegisterRemoteRosterResponse(boost::shared_ptr<Swift::RosterPayload> payload, Swift::ErrorPayload::ref error, const UserInfo &row);
 
		void handleUnregisterRemoteRosterResponse(boost::shared_ptr<Swift::RosterPayload> payload, Swift::ErrorPayload::ref error, const std::string &barejid);
 
		
 
		Component *m_component;
src/userregistration.cpp
Show inline comments
 
@@ -55,22 +55,12 @@ bool UserRegistration::registerUser(const UserInfo &row) {
 
		return false;
 

	
 
	m_storageBackend->setUser(row);
 
        
 
        //same as in unregisterUser but here we have to pass UserInfo to handleRegisterRRResponse
 
        AddressedRosterRequest::ref request = AddressedRosterRequest::ref(new AddressedRosterRequest(m_component->getIQRouter(),row.jid));
 
        request->onResponse.connect(boost::bind(&UserRegistration::handleRegisterRemoteRosterResponse, this, _1, _2, row));
 
        request->send();
 

	
 
	Swift::Presence::ref response = Swift::Presence::create();
 
	response->setFrom(m_component->getJID());
 
	response->setTo(Swift::JID(row.jid));
 
	response->setType(Swift::Presence::Subscribe);
 
	m_component->getStanzaChannel()->sendPresence(response);
 

	
 
	onUserRegistered(row);
 

	
 
	BOOST_FOREACH(const std::string &notify_jid, CONFIG_VECTOR(m_component->getConfig(),"registration.notify_jid")) {
 
		boost::shared_ptr<Swift::Message> msg(new Swift::Message());
 
		msg->setBody(std::string("registered: ") + row.jid);
 
		msg->setTo(notify_jid);
 
		msg->setFrom(m_component->getJID());
 
		m_component->getStanzaChannel()->sendMessage(msg);
 
	}
 
	return true;
 
}
 

	
 
@@ -90,6 +80,33 @@ bool UserRegistration::unregisterUser(const std::string &barejid) {
 

	
 
	return true;
 
}
 
void UserRegistration::handleRegisterRemoteRosterResponse(boost::shared_ptr<Swift::RosterPayload> payload, Swift::ErrorPayload::ref remoteRosterNotSupported /*error*/, const UserInfo &row){
 
    if (remoteRosterNotSupported || !payload) {     
 
	Swift::Presence::ref response = Swift::Presence::create();
 
	response->setFrom(m_component->getJID());
 
	response->setTo(Swift::JID(row.jid));
 
	response->setType(Swift::Presence::Subscribe);
 
	m_component->getStanzaChannel()->sendPresence(response);
 
    }
 
    else{
 
        Swift::RosterPayload::ref payload = Swift::RosterPayload::ref(new Swift::RosterPayload());
 
        Swift::RosterItemPayload item;
 
        item.setJID(m_component->getJID());
 
        item.setSubscription(Swift::RosterItemPayload::Both);
 
        payload->addItem(item);
 
        Swift::SetRosterRequest::ref request = Swift::SetRosterRequest::create(payload, row.jid, m_component->getIQRouter());
 
	request->send();
 
    }
 
    onUserRegistered(row);
 
    
 
    BOOST_FOREACH(const std::string &notify_jid, CONFIG_VECTOR(m_component->getConfig(),"registration.notify_jid")) {
 
	boost::shared_ptr<Swift::Message> msg(new Swift::Message());
 
	msg->setBody(std::string("registered: ") + row.jid);
 
	msg->setTo(notify_jid);
 
	msg->setFrom(m_component->getJID());
 
	m_component->getStanzaChannel()->sendMessage(msg);
 
        }
 
}
 

	
 
void UserRegistration::handleUnregisterRemoteRosterResponse(boost::shared_ptr<Swift::RosterPayload> payload, Swift::ErrorPayload::ref remoteRosterNotSupported /*error*/, const std::string &barejid) {
 
	UserInfo userInfo;
0 comments (0 inline, 0 general)