RegisterUser will try to register via RemoteRoster before sending subscr.Presence for transport
This commit is contained in:
parent
9c5f59f10c
commit
9c596ed62f
2 changed files with 34 additions and 16 deletions
|
@ -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;
|
||||
|
|
|
@ -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 ¬ify_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 ¬ify_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;
|
||||
|
|
Loading…
Add table
Reference in a new issue