Forward messages to proper resources

This commit is contained in:
HanzZ 2011-11-11 11:40:10 +01:00
parent 2b836edd79
commit 5b89dae8ca
5 changed files with 23 additions and 5 deletions

View file

@ -74,6 +74,10 @@ class Conversation {
m_nickname = nickname;
}
void setJID(const Swift::JID &jid) {
m_jid = jid;
}
/// Sends message to Legacy network.
/// \param message Message.
@ -112,6 +116,7 @@ class Conversation {
std::string m_nickname;
std::string m_room;
bool m_muc;
Swift::JID m_jid;
};
}

View file

@ -73,6 +73,8 @@ class ConversationManager {
/// \param conv Conversation.
void removeConversation(Conversation *conv);
void resetResources();
private:
void handleMessageReceived(Swift::Message::ref message);

View file

@ -37,6 +37,7 @@ Conversation::Conversation(ConversationManager *conversationManager, const std::
m_legacyName = legacyName;
m_conversationManager->addConversation(this);
m_muc = isMUC;
m_jid = m_conversationManager->getUser()->getJID().toBare();
}
Conversation::~Conversation() {
@ -54,9 +55,9 @@ void Conversation::handleMessage(boost::shared_ptr<Swift::Message> &message, con
else {
message->setType(Swift::Message::Chat);
}
if (message->getType() != Swift::Message::Groupchat) {
message->setTo(m_conversationManager->getUser()->getJID().toBare());
message->setTo(m_jid);
// normal message
if (nickname.empty()) {
Buddy *buddy = m_conversationManager->getUser()->getRosterManager()->getBuddy(m_legacyName);
@ -83,7 +84,7 @@ void Conversation::handleMessage(boost::shared_ptr<Swift::Message> &message, con
if (legacyName.find_last_of("@") != std::string::npos) {
legacyName.replace(legacyName.find_last_of("@"), 1, "%"); // OK
}
message->setTo(m_conversationManager->getUser()->getJID().toString());
message->setTo(m_jid);
message->setFrom(Swift::JID(legacyName, m_conversationManager->getComponent()->getJID().toBare(), nickname));
m_conversationManager->getComponent()->getStanzaChannel()->sendMessage(message);
}
@ -99,7 +100,7 @@ void Conversation::handleParticipantChanged(const std::string &nick, int flag, i
}
}
presence->setFrom(Swift::JID(legacyName, m_conversationManager->getComponent()->getJID().toBare(), nickname));
presence->setTo(m_conversationManager->getUser()->getJID().toString());
presence->setTo(m_jid);
presence->setType(Swift::Presence::Available);
if (!statusMessage.empty())

View file

@ -62,6 +62,12 @@ void ConversationManager::removeConversation(Conversation *conv) {
m_convs.erase(conv->getLegacyName());
}
void ConversationManager::resetResources() {
for (std::map<std::string, Conversation *>::const_iterator it = m_convs.begin(); it != m_convs.end(); it++) {
(*it).second->setJID(m_user->getJID().toBare());
}
}
void ConversationManager::handleMessageReceived(Swift::Message::ref message) {
// std::string name = message->getTo().getUnescapedNode();
// if (name.find_last_of("%") != std::string::npos) { // OK when commented
@ -87,7 +93,9 @@ void ConversationManager::handleMessageReceived(Swift::Message::ref message) {
}
}
// update resource and send the message
m_convs[name]->setJID(message->getFrom());
m_convs[name]->sendMessage(message);
}
}
}

View file

@ -174,6 +174,8 @@ void User::setConnected(bool connected) {
void User::handlePresence(Swift::Presence::ref presence) {
int currentResourcesCount = m_presenceOracle->getAllPresence(m_jid).size();
m_conversationManager->resetResources();
if (!m_connected) {
// we are not connected to legacy network, so we should do it when disco#info arrive :)
if (m_readyForConnect == false) {