Do not forward user's contact (representing himself) from legacy network (situation when user A has himself in his XMPP roster)

This commit is contained in:
Jan Kaluza 2012-10-31 09:39:03 +01:00
parent 2b9c095d0e
commit dc1cc4170e
3 changed files with 20 additions and 4 deletions

View file

@ -542,6 +542,10 @@ void NetworkPluginServer::handleBuddyChangedPayload(const std::string &data) {
buddy->handleBuddyChanged();
}
else {
if (payload.buddyname() == user->getUserInfo().uin) {
return;
}
std::vector<std::string> groups;
for (int i = 0; i < payload.group_size(); i++) {
groups.push_back(payload.group(i));
@ -556,6 +560,7 @@ void NetworkPluginServer::handleBuddyChangedPayload(const std::string &data) {
delete buddy;
return;
}
buddy->setStatus(Swift::StatusShow((Swift::StatusShow::Type) payload.status()), payload.statusmessage());
buddy->setIconHash(payload.iconhash());
buddy->setBlocked(payload.blocked());

View file

@ -29,6 +29,7 @@ class NetworkPluginServerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
CPPUNIT_TEST_SUITE(NetworkPluginServerTest);
CPPUNIT_TEST(handleBuddyChangedPayload);
CPPUNIT_TEST(handleBuddyChangedPayloadNoEscaping);
CPPUNIT_TEST(handleBuddyChangedPayloadUserContactInRoster);
CPPUNIT_TEST_SUITE_END();
public:
@ -90,6 +91,19 @@ class NetworkPluginServerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
cfg->load(ifs2);
}
void handleBuddyChangedPayloadUserContactInRoster() {
User *user = userManager->getUser("user@localhost");
pbnetwork::Buddy buddy;
buddy.set_username("user@localhost");
buddy.set_buddyname("user");
std::string message;
buddy.SerializeToString(&message);
serv->handleBuddyChangedPayload(message);
CPPUNIT_ASSERT_EQUAL(0, (int) received.size());
}
};
CPPUNIT_TEST_SUITE_REGISTRATION (NetworkPluginServerTest);

View file

@ -79,7 +79,7 @@ class UserManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
dynamic_cast<Swift::ServerStanzaChannel *>(component->getStanzaChannel())->onPresenceReceived(response);
loop->processEvents();
CPPUNIT_ASSERT_EQUAL(4, (int) received.size());
CPPUNIT_ASSERT_EQUAL(3, (int) received.size());
CPPUNIT_ASSERT(getStanza(received[0])->getPayload<Swift::DiscoInfo>());
Swift::Presence *presence = dynamic_cast<Swift::Presence *>(getStanza(received[1]));
@ -90,9 +90,6 @@ class UserManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
CPPUNIT_ASSERT(presence);
CPPUNIT_ASSERT_EQUAL(Swift::Presence::Subscribe, presence->getType());
presence = dynamic_cast<Swift::Presence *>(getStanza(received[3]));
CPPUNIT_ASSERT(presence);
CPPUNIT_ASSERT_EQUAL(Swift::Presence::Subscribed, presence->getType());
}
void connectTwoResources() {