Preparation for Subscriptions handling
This commit is contained in:
parent
6a4fffdfe8
commit
5797b554ea
8 changed files with 73 additions and 69 deletions
|
@ -68,6 +68,8 @@ class RosterManager {
|
|||
/// \param buddy removed Buddy
|
||||
boost::signal<void (Buddy *buddy)> onBuddyUnset;
|
||||
|
||||
void handleSubscription(Swift::Presence::ref presence);
|
||||
|
||||
private:
|
||||
void setBuddyCallback(Buddy *buddy);
|
||||
|
||||
|
|
|
@ -133,11 +133,7 @@ namespace Transport {
|
|||
private:
|
||||
void handleConnected();
|
||||
void handleConnectionError(const Swift::ComponentError &error);
|
||||
void handlePresenceReceived(Swift::Presence::ref presence);
|
||||
// void handleMessageReceived(Swift::Message::ref message);
|
||||
void handlePresence(Swift::Presence::ref presence);
|
||||
void handleSubscription(Swift::Presence::ref presence);
|
||||
void handleProbePresence(Swift::Presence::ref presence);
|
||||
void handleDataRead(const std::string &data);
|
||||
void handleDataWritten(const std::string &data);
|
||||
|
||||
|
|
|
@ -69,6 +69,8 @@ class User {
|
|||
/// \param presence Swift::Presence.
|
||||
void handlePresence(Swift::Presence::ref presence);
|
||||
|
||||
void handleSubscription(Swift::Presence::ref presence);
|
||||
|
||||
/// Returns language.
|
||||
/// \return language
|
||||
const char *getLang() { return "en"; }
|
||||
|
|
|
@ -69,6 +69,9 @@ class UserManager {
|
|||
private:
|
||||
void handlePresence(Swift::Presence::ref presence);
|
||||
void handleMessageReceived(Swift::Message::ref message);
|
||||
void handleGeneralPresenceReceived(Swift::Presence::ref presence);
|
||||
void handleProbePresence(Swift::Presence::ref presence);
|
||||
void handleSubscription(Swift::Presence::ref presence);
|
||||
// void handleDiscoInfoResponse(boost::shared_ptr<Swift::DiscoInfo> info, Swift::ErrorPayload::ref error, const Swift::JID& jid);
|
||||
void addUser(User *user);
|
||||
|
||||
|
|
|
@ -119,4 +119,8 @@ void RosterManager::sendRIE() {
|
|||
request->send();
|
||||
}
|
||||
|
||||
void RosterManager::handleSubscription(Swift::Presence::ref presence) {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -75,8 +75,6 @@ Component::Component(Swift::EventLoop *loop, Config *config, Factory *factory) {
|
|||
m_component->onError.connect(bind(&Component::handleConnectionError, this, _1));
|
||||
m_component->onDataRead.connect(bind(&Component::handleDataRead, this, _1));
|
||||
m_component->onDataWritten.connect(bind(&Component::handleDataWritten, this, _1));
|
||||
m_component->onPresenceReceived.connect(bind(&Component::handlePresenceReceived, this, _1));
|
||||
// m_component->onMessageReceived.connect(bind(&Component::handleMessageReceived, this, _1));
|
||||
m_stanzaChannel = m_component->getStanzaChannel();
|
||||
m_iqRouter = m_component->getIQRouter();
|
||||
}
|
||||
|
@ -170,25 +168,6 @@ void Component::handleDataWritten(const std::string &data) {
|
|||
onXMLOut(data);
|
||||
}
|
||||
|
||||
void Component::handlePresenceReceived(Swift::Presence::ref presence) {
|
||||
switch(presence->getType()) {
|
||||
case Swift::Presence::Subscribe:
|
||||
case Swift::Presence::Subscribed:
|
||||
case Swift::Presence::Unsubscribe:
|
||||
case Swift::Presence::Unsubscribed:
|
||||
handleSubscription(presence);
|
||||
break;
|
||||
case Swift::Presence::Available:
|
||||
case Swift::Presence::Unavailable:
|
||||
break;
|
||||
case Swift::Presence::Probe:
|
||||
handleProbePresence(presence);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
void Component::handlePresence(Swift::Presence::ref presence) {
|
||||
bool isMUC = presence->getPayload<MUCPayload>() != NULL;
|
||||
|
||||
|
@ -227,50 +206,6 @@ void Component::handlePresence(Swift::Presence::ref presence) {
|
|||
onUserPresenceReceived(presence);
|
||||
}
|
||||
|
||||
void Component::handleProbePresence(Swift::Presence::ref presence) {
|
||||
|
||||
}
|
||||
|
||||
void Component::handleSubscription(Swift::Presence::ref presence) {
|
||||
// answer to subscibe
|
||||
if (presence->getType() == Swift::Presence::Subscribe && presence->getTo().getNode().empty()) {
|
||||
// Log(presence->getFrom().toString().getUTF8String(), "Subscribe presence received => sending subscribed");
|
||||
Swift::Presence::ref response = Swift::Presence::create();
|
||||
response->setFrom(presence->getTo());
|
||||
response->setTo(presence->getFrom());
|
||||
response->setType(Swift::Presence::Subscribed);
|
||||
m_component->sendPresence(response);
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_protocol == "irc") {
|
||||
return;
|
||||
}
|
||||
|
||||
// User *user;
|
||||
// std::string barejid = presence->getTo().toBare().toString().getUTF8String();
|
||||
// std::string userkey = presence->getFrom().toBare().toString().getUTF8String();
|
||||
// if (Transport::instance()->protocol()->tempAccountsAllowed()) {
|
||||
// std::string server = barejid.substr(barejid.find("%") + 1, barejid.length() - barejid.find("%"));
|
||||
// userkey += server;
|
||||
// }
|
||||
|
||||
// user = (User *) Transport::instance()->userManager()->getUserByJID(userkey);
|
||||
// if (user) {
|
||||
// user->handleSubscription(presence);
|
||||
// }
|
||||
// else if (presence->getType() == Swift::Presence::Unsubscribe) {
|
||||
// Swift::Presence::ref response = Swift::Presence::create();
|
||||
// response->setFrom(presence->getTo());
|
||||
// response->setTo(presence->getFrom());
|
||||
// response->setType(Swift::Presence::Unsubscribed);
|
||||
// m_component->sendPresence(response);
|
||||
// }
|
||||
// else {
|
||||
// // Log(presence->getFrom().toString().getUTF8String(), "Subscribe presence received, but this user is not logged in");
|
||||
// }
|
||||
}
|
||||
|
||||
void Component::handleCapsChanged(const Swift::JID& jid) {
|
||||
bool haveFeatures = m_entityCapsManager->getCaps(jid) != DiscoInfo::ref();
|
||||
std::cout << "has capsInfo " << haveFeatures << "\n";
|
||||
|
|
|
@ -97,6 +97,10 @@ void User::handlePresence(Swift::Presence::ref presence) {
|
|||
}
|
||||
}
|
||||
|
||||
void User::handleSubscription(Swift::Presence::ref presence) {
|
||||
m_rosterManager->handleSubscription(presence);
|
||||
}
|
||||
|
||||
void User::onConnectingTimeout() {
|
||||
if (m_connected || m_readyForConnect)
|
||||
return;
|
||||
|
|
|
@ -34,6 +34,7 @@ UserManager::UserManager(Component *component, StorageBackend *storageBackend) {
|
|||
|
||||
component->onUserPresenceReceived.connect(bind(&UserManager::handlePresence, this, _1));
|
||||
m_component->getStanzaChannel()->onMessageReceived.connect(bind(&UserManager::handleMessageReceived, this, _1));
|
||||
m_component->getStanzaChannel()->onPresenceReceived.connect(bind(&UserManager::handleGeneralPresenceReceived, this, _1));
|
||||
// component->onDiscoInfoResponse.connect(bind(&UserManager::handleDiscoInfoResponse, this, _1, _2, _3));
|
||||
}
|
||||
|
||||
|
@ -158,4 +159,61 @@ void UserManager::handleMessageReceived(Swift::Message::ref message) {
|
|||
user->getConversationManager()->handleMessageReceived(message);
|
||||
}
|
||||
|
||||
void UserManager::handleGeneralPresenceReceived(Swift::Presence::ref presence) {
|
||||
switch(presence->getType()) {
|
||||
case Swift::Presence::Subscribe:
|
||||
case Swift::Presence::Subscribed:
|
||||
case Swift::Presence::Unsubscribe:
|
||||
case Swift::Presence::Unsubscribed:
|
||||
handleSubscription(presence);
|
||||
break;
|
||||
case Swift::Presence::Available:
|
||||
case Swift::Presence::Unavailable:
|
||||
break;
|
||||
case Swift::Presence::Probe:
|
||||
handleProbePresence(presence);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
void UserManager::handleProbePresence(Swift::Presence::ref presence) {
|
||||
|
||||
}
|
||||
|
||||
void UserManager::handleSubscription(Swift::Presence::ref presence) {
|
||||
// answer to subscibe for transport itself
|
||||
if (presence->getType() == Swift::Presence::Subscribe && presence->getTo().getNode().empty()) {
|
||||
Swift::Presence::ref response = Swift::Presence::create();
|
||||
response->setFrom(presence->getTo());
|
||||
response->setTo(presence->getFrom());
|
||||
response->setType(Swift::Presence::Subscribed);
|
||||
m_component->getStanzaChannel()->sendPresence(response);
|
||||
|
||||
response = Swift::Presence::create();
|
||||
response->setFrom(presence->getTo());
|
||||
response->setTo(presence->getFrom());
|
||||
response->setType(Swift::Presence::Subscribe);
|
||||
m_component->getStanzaChannel()->sendPresence(response);
|
||||
return;
|
||||
}
|
||||
|
||||
User *user = getUser(presence->getFrom().toBare().toString());
|
||||
|
||||
if (user) {
|
||||
user->handleSubscription(presence);
|
||||
}
|
||||
else if (presence->getType() == Swift::Presence::Unsubscribe) {
|
||||
Swift::Presence::ref response = Swift::Presence::create();
|
||||
response->setFrom(presence->getTo());
|
||||
response->setTo(presence->getFrom());
|
||||
response->setType(Swift::Presence::Unsubscribed);
|
||||
m_component->getStanzaChannel()->sendPresence(response);
|
||||
}
|
||||
// else {
|
||||
// // Log(presence->getFrom().toString().getUTF8String(), "Subscribe presence received, but this user is not logged in");
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue