Send code 210 when changing our nickname in room
This commit is contained in:
parent
90eda384da
commit
70cf46773b
3 changed files with 35 additions and 3 deletions
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue