diff --git a/src/conversation.cpp b/src/conversation.cpp index 44af07b4f2503b35650ccb5070678ad6c045589e..c9be3d3de82a98f86243b85c5e10fe5366aa5e32 100644 --- a/src/conversation.cpp +++ b/src/conversation.cpp @@ -30,6 +30,7 @@ #include "Swiften/Elements/MUCOccupant.h" #include "Swiften/Elements/MUCUserPayload.h" #include "Swiften/Elements/Delay.h" +#include "Swiften/Elements/MUCPayload.h" namespace Transport { @@ -230,13 +231,29 @@ Swift::Presence::ref Conversation::generatePresence(const std::string &nick, int Swift::MUCUserPayload *p = new Swift::MUCUserPayload (); if (m_nickname == nickname) { - Swift::MUCUserPayload::StatusCode c; - c.code = 110; - p->addStatusCode(c); - m_sentInitialPresence = true; + if (flag & PARTICIPANT_FLAG_CONFLICT) { + delete p; + presence->setType(Swift::Presence::Error); + presence->addPayload(boost::shared_ptr(new Swift::MUCPayload())); + presence->addPayload(boost::shared_ptr(new Swift::ErrorPayload(Swift::ErrorPayload::Conflict))); + return presence; + } + else if (flag & PARTICIPANT_FLAG_NOT_AUTHORIZED) { + delete p; + presence->setType(Swift::Presence::Error); + presence->addPayload(boost::shared_ptr(new Swift::MUCPayload())); + presence->addPayload(boost::shared_ptr(new Swift::ErrorPayload(Swift::ErrorPayload::NotAuthorized, Swift::ErrorPayload::Auth))); + return presence; + } + else { + Swift::MUCUserPayload::StatusCode c; + c.code = 110; + p->addStatusCode(c); + m_sentInitialPresence = true; + } } - + Swift::MUCItem item; item.affiliation = Swift::MUCOccupant::Member; @@ -254,7 +271,7 @@ Swift::Presence::ref Conversation::generatePresence(const std::string &nick, int p->addStatusCode(c); presence->setType(Swift::Presence::Unavailable); } - + p->addItem(item); presence->addPayload(boost::shared_ptr(p)); return presence;