PSZUC TAccountXmpp::Contact_RosterUpdateItem(const CXmlNode * pXmlNodeItemRoster) { Assert(pXmlNodeItemRoster != NULL); Assert(pXmlNodeItemRoster->FCompareTagName("item")); PSZUC pszJid = pXmlNodeItemRoster->PszFindAttributeValueJid_NZ(); PSZUC pszSubscription = pXmlNodeItemRoster->PszuFindAttributeValue_NZ("subscription"); /* // The attribute "subscription" is not present for a "<iq type='set'>" */ if (!FCompareStrings(pszSubscription, "remove")) { #ifdef DEBUG_DELETE_TEMP_ACCOUNTS if (PszrCompareStringBeginNoCase(pszJid, "temp") != NULL) { MessageLog_AppendTextFormatSev(eSeverityErrorAssert, "#$I Removing contact $s from roster...\n", ++g_cContactsRemoved, pszJid); if (m_paSocket != NULL) m_paSocket->Socket_WriteXmlFormatted("<iq type='set'><query xmlns='jabber:iq:roster'><item jid='^s' subscription='remove'></item></query></iq>", pszJid); return NULL; } #endif TContact * pContact = Contact_PFindByJID(pszJid, eFindContact_kfCreateNew); Endorse(pContact == NULL); // The attribute "jid" may not be valid (for example, missing the '@' character) if (pContact != NULL) pContact->XmppRosterSubscriptionUpdate(pszSubscription); } return pszJid; }