Send code 210 when changing our nickname in room

This commit is contained in:
Jan Kaluza 2013-02-26 15:31:21 +01:00
parent 90eda384da
commit 70cf46773b
3 changed files with 35 additions and 3 deletions

View file

@ -85,9 +85,7 @@ class Conversation {
/// Sets XMPP user nickname in MUC rooms.
/// \param nickname XMPP user nickname in MUC rooms.
void setNickname(const std::string &nickname) {
m_nickname = nickname;
}
void setNickname(const std::string &nickname);
const std::string &getNickname() {
return m_nickname;
@ -166,6 +164,7 @@ class Conversation {
std::map<std::string, Participant> m_participants;
boost::shared_ptr<Swift::Message> m_subject;
bool m_sentInitialPresence;
bool m_nicknameChanged;
std::list<boost::shared_ptr<Swift::Message> > m_cachedMessages;
};

View file

@ -39,6 +39,7 @@ Conversation::Conversation(ConversationManager *conversationManager, const std::
m_muc = isMUC;
m_jid = m_conversationManager->getUser()->getJID().toBare();
m_sentInitialPresence = false;
m_nicknameChanged = false;
if (CONFIG_BOOL_DEFAULTED(conversationManager->getComponent()->getConfig(), "features.rawxml", false)) {
m_sentInitialPresence = true;
@ -268,6 +269,11 @@ Swift::Presence::ref Conversation::generatePresence(const std::string &nick, int
Swift::MUCUserPayload::StatusCode c;
c.code = 110;
p->addStatusCode(c);
if (m_nicknameChanged) {
Swift::MUCUserPayload::StatusCode c;
c.code = 210;
p->addStatusCode(c);
}
m_sentInitialPresence = true;
}
}
@ -296,6 +302,13 @@ Swift::Presence::ref Conversation::generatePresence(const std::string &nick, int
return presence;
}
void Conversation::setNickname(const std::string &nickname) {
if (!nickname.empty() && m_nickname != nickname) {
m_nicknameChanged = true;
}
m_nickname = nickname;
}
void Conversation::handleParticipantChanged(const std::string &nick, Conversation::ParticipantFlag flag, int status, const std::string &statusMessage, const std::string &newname) {
Swift::Presence::ref presence = generatePresence(nick, flag, status, statusMessage, newname);

View file

@ -37,6 +37,7 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
CPPUNIT_TEST(handleGroupchatRemoved);
CPPUNIT_TEST(handleNicknameConflict);
CPPUNIT_TEST(handleNotAuthorized);
CPPUNIT_TEST(handleSetNickname);
CPPUNIT_TEST_SUITE_END();
public:
@ -633,6 +634,25 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
CPPUNIT_ASSERT_EQUAL(Swift::ErrorPayload::NotAuthorized, getStanza(received[0])->getPayload<Swift::ErrorPayload>()->getCondition());
}
void handleSetNickname() {
User *user = userManager->getUser("user@localhost");
TestingConversation *conv = new TestingConversation(user->getConversationManager(), "#room", true);
conv->onMessageToSend.connect(boost::bind(&ConversationManagerTest::handleMessageReceived, this, _1, _2));
conv->setNickname("nickname");
conv->addJID("user@localhost/resource");
loop->processEvents();
conv->setNickname("nickname2");
conv->handleParticipantChanged("nickname2", Conversation::PARTICIPANT_FLAG_NONE, Swift::StatusShow::Away, "my status message");
loop->processEvents();
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[0])));
CPPUNIT_ASSERT_EQUAL(110, getStanza(received[0])->getPayload<Swift::MUCUserPayload>()->getStatusCodes()[0].code);
CPPUNIT_ASSERT_EQUAL(210, getStanza(received[0])->getPayload<Swift::MUCUserPayload>()->getStatusCodes()[1].code);
}
};
CPPUNIT_TEST_SUITE_REGISTRATION (ConversationManagerTest);