non lower cased jids error handled

This commit is contained in:
Blue 2020-07-26 22:41:30 +03:00
parent 0dcfc5eedc
commit 480c78cf61
4 changed files with 59 additions and 47 deletions

View File

@ -6,6 +6,8 @@
- error with building on lower versions of QXmpp - error with building on lower versions of QXmpp
- error on the first access to the conference database - error on the first access to the conference database
- quit now actually quits the app - quit now actually quits the app
- history in MUC now works properly and requests messages from server
- error with handling non lower cased JIDs
## Squawk 0.1.4 (Apr 14, 2020) ## Squawk 0.1.4 (Apr 14, 2020)

View File

@ -321,7 +321,7 @@ void Core::Account::onPresenceReceived(const QXmppPresence& p_presence)
{ {
QString id = p_presence.from(); QString id = p_presence.from();
QStringList comps = id.split("/"); QStringList comps = id.split("/");
QString jid = comps.front(); QString jid = comps.front().toLower();
QString resource = comps.back(); QString resource = comps.back();
QString myJid = getLogin() + "@" + getServer(); QString myJid = getLogin() + "@" + getServer();
@ -682,7 +682,7 @@ void Core::Account::onVCardReceived(const QXmppVCardIq& card)
{ {
QString id = card.from(); QString id = card.from();
QStringList comps = id.split("/"); QStringList comps = id.split("/");
QString jid = comps.front(); QString jid = comps.front().toLower();
QString resource(""); QString resource("");
if (comps.size() > 1) { if (comps.size() > 1) {
resource = comps.back(); resource = comps.back();

View File

@ -57,16 +57,17 @@ void Core::RosterHandler::onRosterReceived()
QStringList bj = acc->rm->getRosterBareJids(); QStringList bj = acc->rm->getRosterBareJids();
for (int i = 0; i < bj.size(); ++i) { for (int i = 0; i < bj.size(); ++i) {
const QString& jid = bj[i]; const QString& jid = bj[i];
addedAccount(jid); addedAccount(jid.toLower());
} }
} }
void Core::RosterHandler::onRosterItemAdded(const QString& bareJid) void Core::RosterHandler::onRosterItemAdded(const QString& bareJid)
{ {
addedAccount(bareJid); QString lcJid = bareJid.toLower();
std::map<QString, QString>::const_iterator itr = queuedContacts.find(bareJid); addedAccount(lcJid);
std::map<QString, QString>::const_iterator itr = queuedContacts.find(lcJid);
if (itr != queuedContacts.end()) { if (itr != queuedContacts.end()) {
acc->rm->subscribe(bareJid, itr->second); acc->rm->subscribe(lcJid, itr->second);
queuedContacts.erase(itr); queuedContacts.erase(itr);
} }
} }
@ -172,16 +173,17 @@ void Core::RosterHandler::addContactRequest(const QString& jid, const QString& n
void Core::RosterHandler::removeContactRequest(const QString& jid) void Core::RosterHandler::removeContactRequest(const QString& jid)
{ {
QString lcJid = jid.toLower();
if (acc->state == Shared::ConnectionState::connected) { if (acc->state == Shared::ConnectionState::connected) {
std::set<QString>::const_iterator itr = outOfRosterContacts.find(jid); std::set<QString>::const_iterator itr = outOfRosterContacts.find(lcJid);
if (itr != outOfRosterContacts.end()) { if (itr != outOfRosterContacts.end()) {
outOfRosterContacts.erase(itr); outOfRosterContacts.erase(itr);
onRosterItemRemoved(jid); onRosterItemRemoved(lcJid);
} else { } else {
acc->rm->removeItem(jid); acc->rm->removeItem(lcJid);
} }
} else { } else {
qDebug() << "An attempt to remove contact " << jid << " from account " << acc->name << " but the account is not in the connected state, skipping"; qDebug() << "An attempt to remove contact " << lcJid << " from account " << acc->name << " but the account is not in the connected state, skipping";
} }
} }
@ -291,7 +293,7 @@ void Core::RosterHandler::addToGroup(const QString& jid, const QString& group)
gItr = groups.insert(std::make_pair(group, std::set<QString>())).first; gItr = groups.insert(std::make_pair(group, std::set<QString>())).first;
emit acc->addGroup(group); emit acc->addGroup(group);
} }
gItr->second.insert(jid); gItr->second.insert(jid.toLower());
} }
void Core::RosterHandler::removeFromGroup(const QString& jid, const QString& group) void Core::RosterHandler::removeFromGroup(const QString& jid, const QString& group)
@ -303,7 +305,7 @@ void Core::RosterHandler::removeFromGroup(const QString& jid, const QString& gro
return; return;
} }
std::set<QString> contacts = itr->second; std::set<QString> contacts = itr->second;
std::set<QString>::const_iterator cItr = contacts.find(jid); std::set<QString>::const_iterator cItr = contacts.find(jid.toLower());
if (cItr != contacts.end()) { if (cItr != contacts.end()) {
contacts.erase(cItr); contacts.erase(cItr);
if (contacts.size() == 0) { if (contacts.size() == 0) {
@ -324,11 +326,12 @@ void Core::RosterHandler::onContactHistoryResponse(const std::list<Shared::Messa
Core::RosterItem * Core::RosterHandler::getRosterItem(const QString& jid) Core::RosterItem * Core::RosterHandler::getRosterItem(const QString& jid)
{ {
RosterItem* item = 0; RosterItem* item = 0;
std::map<QString, Contact*>::const_iterator citr = contacts.find(jid); QString lcJid = jid.toLower();
std::map<QString, Contact*>::const_iterator citr = contacts.find(lcJid);
if (citr != contacts.end()) { if (citr != contacts.end()) {
item = citr->second; item = citr->second;
} else { } else {
std::map<QString, Conference*>::const_iterator coitr = conferences.find(jid); std::map<QString, Conference*>::const_iterator coitr = conferences.find(lcJid);
if (coitr != conferences.end()) { if (coitr != conferences.end()) {
item = coitr->second; item = coitr->second;
} }
@ -339,7 +342,7 @@ Core::RosterItem * Core::RosterHandler::getRosterItem(const QString& jid)
Core::Conference * Core::RosterHandler::getConference(const QString& jid) Core::Conference * Core::RosterHandler::getConference(const QString& jid)
{ {
Conference* item = 0; Conference* item = 0;
std::map<QString, Conference*>::const_iterator coitr = conferences.find(jid); std::map<QString, Conference*>::const_iterator coitr = conferences.find(jid.toLower());
if (coitr != conferences.end()) { if (coitr != conferences.end()) {
item = coitr->second; item = coitr->second;
} }
@ -349,7 +352,7 @@ Core::Conference * Core::RosterHandler::getConference(const QString& jid)
Core::Contact * Core::RosterHandler::getContact(const QString& jid) Core::Contact * Core::RosterHandler::getContact(const QString& jid)
{ {
Contact* item = 0; Contact* item = 0;
std::map<QString, Contact*>::const_iterator citr = contacts.find(jid); std::map<QString, Contact*>::const_iterator citr = contacts.find(jid.toLower());
if (citr != contacts.end()) { if (citr != contacts.end()) {
item = citr->second; item = citr->second;
} }
@ -358,11 +361,12 @@ Core::Contact * Core::RosterHandler::getContact(const QString& jid)
Core::Contact * Core::RosterHandler::addOutOfRosterContact(const QString& jid) Core::Contact * Core::RosterHandler::addOutOfRosterContact(const QString& jid)
{ {
Contact* cnt = new Contact(jid, acc->name); QString lcJid = jid.toLower();
contacts.insert(std::make_pair(jid, cnt)); Contact* cnt = new Contact(lcJid, acc->name);
outOfRosterContacts.insert(jid); contacts.insert(std::make_pair(lcJid, cnt));
outOfRosterContacts.insert(lcJid);
cnt->setSubscriptionState(Shared::SubscriptionState::unknown); cnt->setSubscriptionState(Shared::SubscriptionState::unknown);
emit acc->addContact(jid, "", QMap<QString, QVariant>({ emit acc->addContact(lcJid, "", QMap<QString, QVariant>({
{"state", QVariant::fromValue(Shared::SubscriptionState::unknown)} {"state", QVariant::fromValue(Shared::SubscriptionState::unknown)}
})); }));
handleNewContact(cnt); handleNewContact(cnt);
@ -371,13 +375,14 @@ Core::Contact * Core::RosterHandler::addOutOfRosterContact(const QString& jid)
void Core::RosterHandler::onRosterItemChanged(const QString& bareJid) void Core::RosterHandler::onRosterItemChanged(const QString& bareJid)
{ {
std::map<QString, Contact*>::const_iterator itr = contacts.find(bareJid); QString lcJid = bareJid.toLower();
std::map<QString, Contact*>::const_iterator itr = contacts.find(lcJid);
if (itr == contacts.end()) { if (itr == contacts.end()) {
qDebug() << "An attempt to change non existing contact" << bareJid << "from account" << acc->name << ", skipping"; qDebug() << "An attempt to change non existing contact" << lcJid << "from account" << acc->name << ", skipping";
return; return;
} }
Contact* contact = itr->second; Contact* contact = itr->second;
QXmppRosterIq::Item re = acc->rm->getRosterEntry(bareJid); QXmppRosterIq::Item re = acc->rm->getRosterEntry(lcJid);
Shared::SubscriptionState state = castSubscriptionState(re.subscriptionType()); Shared::SubscriptionState state = castSubscriptionState(re.subscriptionType());
@ -388,18 +393,19 @@ void Core::RosterHandler::onRosterItemChanged(const QString& bareJid)
void Core::RosterHandler::onRosterItemRemoved(const QString& bareJid) void Core::RosterHandler::onRosterItemRemoved(const QString& bareJid)
{ {
std::map<QString, Contact*>::const_iterator itr = contacts.find(bareJid); QString lcJid = bareJid.toLower();
std::map<QString, Contact*>::const_iterator itr = contacts.find(lcJid);
if (itr == contacts.end()) { if (itr == contacts.end()) {
qDebug() << "An attempt to remove non existing contact" << bareJid << "from account" << acc->name << ", skipping"; qDebug() << "An attempt to remove non existing contact" << lcJid << "from account" << acc->name << ", skipping";
return; return;
} }
Contact* contact = itr->second; Contact* contact = itr->second;
contacts.erase(itr); contacts.erase(itr);
QSet<QString> cGroups = contact->getGroups(); QSet<QString> cGroups = contact->getGroups();
for (QSet<QString>::const_iterator itr = cGroups.begin(), end = cGroups.end(); itr != end; ++itr) { for (QSet<QString>::const_iterator itr = cGroups.begin(), end = cGroups.end(); itr != end; ++itr) {
removeFromGroup(bareJid, *itr); removeFromGroup(lcJid, *itr);
} }
emit acc->removeContact(bareJid); emit acc->removeContact(lcJid);
contact->deleteLater(); contact->deleteLater();
} }
@ -416,7 +422,7 @@ void Core::RosterHandler::bookmarksReceived(const QXmppBookmarkSet& bookmarks)
for (QList<QXmppBookmarkConference>::const_iterator itr = confs.begin(), end = confs.end(); itr != end; ++itr) { for (QList<QXmppBookmarkConference>::const_iterator itr = confs.begin(), end = confs.end(); itr != end; ++itr) {
const QXmppBookmarkConference& c = *itr; const QXmppBookmarkConference& c = *itr;
QString jid = c.jid(); QString jid = c.jid().toLower();
std::map<QString, Conference*>::const_iterator cItr = conferences.find(jid); std::map<QString, Conference*>::const_iterator cItr = conferences.find(jid);
if (cItr == conferences.end()) { if (cItr == conferences.end()) {
addNewRoom(jid, c.nickName(), c.name(), c.autoJoin()); addNewRoom(jid, c.nickName(), c.name(), c.autoJoin());
@ -495,35 +501,38 @@ void Core::RosterHandler::clearConferences()
void Core::RosterHandler::removeRoomRequest(const QString& jid) void Core::RosterHandler::removeRoomRequest(const QString& jid)
{ {
std::map<QString, Conference*>::const_iterator itr = conferences.find(jid); QString lcJid = jid.toLower();
std::map<QString, Conference*>::const_iterator itr = conferences.find(lcJid);
if (itr == conferences.end()) { if (itr == conferences.end()) {
qDebug() << "An attempt to remove non existing room" << jid << "from account" << acc->name << ", skipping"; qDebug() << "An attempt to remove non existing room" << lcJid << "from account" << acc->name << ", skipping";
} }
itr->second->deleteLater(); itr->second->deleteLater();
conferences.erase(itr); conferences.erase(itr);
emit acc->removeRoom(jid); emit acc->removeRoom(lcJid);
storeConferences(); storeConferences();
} }
void Core::RosterHandler::addRoomRequest(const QString& jid, const QString& nick, const QString& password, bool autoJoin) void Core::RosterHandler::addRoomRequest(const QString& jid, const QString& nick, const QString& password, bool autoJoin)
{ {
std::map<QString, Conference*>::const_iterator cItr = conferences.find(jid); QString lcJid = jid.toLower();
std::map<QString, Conference*>::const_iterator cItr = conferences.find(lcJid);
if (cItr == conferences.end()) { if (cItr == conferences.end()) {
addNewRoom(jid, nick, "", autoJoin); addNewRoom(lcJid, nick, "", autoJoin);
storeConferences(); storeConferences();
} else { } else {
qDebug() << "An attempt to add a MUC " << jid << " which is already present in the rester, skipping"; qDebug() << "An attempt to add a MUC " << lcJid << " which is already present in the rester, skipping";
} }
} }
void Core::RosterHandler::addContactToGroupRequest(const QString& jid, const QString& groupName) void Core::RosterHandler::addContactToGroupRequest(const QString& jid, const QString& groupName)
{ {
std::map<QString, Contact*>::const_iterator itr = contacts.find(jid); QString lcJid = jid.toLower();
std::map<QString, Contact*>::const_iterator itr = contacts.find(lcJid);
if (itr == contacts.end()) { if (itr == contacts.end()) {
qDebug() << "An attempt to add non existing contact" << jid << "of account" qDebug() << "An attempt to add non existing contact" << lcJid << "of account"
<< acc->name << "to the group" << groupName << ", skipping"; << acc->name << "to the group" << groupName << ", skipping";
} else { } else {
QXmppRosterIq::Item item = acc->rm->getRosterEntry(jid); QXmppRosterIq::Item item = acc->rm->getRosterEntry(lcJid);
QSet<QString> groups = item.groups(); QSet<QString> groups = item.groups();
if (groups.find(groupName) == groups.end()) { //TODO need to change it, I guess that sort of code is better in qxmpp lib if (groups.find(groupName) == groups.end()) { //TODO need to change it, I guess that sort of code is better in qxmpp lib
groups.insert(groupName); groups.insert(groupName);
@ -542,12 +551,13 @@ void Core::RosterHandler::addContactToGroupRequest(const QString& jid, const QSt
void Core::RosterHandler::removeContactFromGroupRequest(const QString& jid, const QString& groupName) void Core::RosterHandler::removeContactFromGroupRequest(const QString& jid, const QString& groupName)
{ {
std::map<QString, Contact*>::const_iterator itr = contacts.find(jid); QString lcJid = jid.toLower();
std::map<QString, Contact*>::const_iterator itr = contacts.find(lcJid);
if (itr == contacts.end()) { if (itr == contacts.end()) {
qDebug() << "An attempt to remove non existing contact" << jid << "of account" qDebug() << "An attempt to remove non existing contact" << lcJid << "of account"
<< acc->name << "from the group" << groupName << ", skipping"; << acc->name << "from the group" << groupName << ", skipping";
} else { } else {
QXmppRosterIq::Item item = acc->rm->getRosterEntry(jid); QXmppRosterIq::Item item = acc->rm->getRosterEntry(lcJid);
QSet<QString> groups = item.groups(); QSet<QString> groups = item.groups();
QSet<QString>::const_iterator gItr = groups.find(groupName); QSet<QString>::const_iterator gItr = groups.find(groupName);
if (gItr != groups.end()) { if (gItr != groups.end()) {
@ -559,7 +569,7 @@ void Core::RosterHandler::removeContactFromGroupRequest(const QString& jid, cons
iq.addItem(item); iq.addItem(item);
acc->client.sendPacket(iq); acc->client.sendPacket(iq);
} else { } else {
qDebug() << "An attempt to remove contact" << jid << "of account" qDebug() << "An attempt to remove contact" << lcJid << "of account"
<< acc->name << "from the group" << groupName << "but it's not in that group, skipping"; << acc->name << "from the group" << groupName << "but it's not in that group, skipping";
} }
} }

View File

@ -105,9 +105,9 @@ void Shared::Message::setFrom(const QString& from)
{ {
QStringList list = from.split("/"); QStringList list = from.split("/");
if (list.size() == 1) { if (list.size() == 1) {
jFrom = from; jFrom = from.toLower();
} else { } else {
jFrom = list.front(); jFrom = list.front().toLower();
rFrom = list.back(); rFrom = list.back();
} }
} }
@ -116,9 +116,9 @@ void Shared::Message::setTo(const QString& to)
{ {
QStringList list = to.split("/"); QStringList list = to.split("/");
if (list.size() == 1) { if (list.size() == 1) {
jTo = to; jTo = to.toLower();
} else { } else {
jTo = list.front(); jTo = list.front().toLower();
rTo = list.back(); rTo = list.back();
} }
} }
@ -188,7 +188,7 @@ bool Shared::Message::getEdited() const
void Shared::Message::setFromJid(const QString& from) void Shared::Message::setFromJid(const QString& from)
{ {
jFrom = from; jFrom = from.toLower();
} }
void Shared::Message::setFromResource(const QString& from) void Shared::Message::setFromResource(const QString& from)
@ -198,7 +198,7 @@ void Shared::Message::setFromResource(const QString& from)
void Shared::Message::setToJid(const QString& to) void Shared::Message::setToJid(const QString& to)
{ {
jTo = to; jTo = to.toLower();
} }
void Shared::Message::setToResource(const QString& to) void Shared::Message::setToResource(const QString& to)