extracted clientId from clientInfo to use it in the presence information later

This commit is contained in:
Blue 2023-03-13 22:07:10 +03:00
parent 8ec0af3205
commit 76a9c5da0c
Signed by untrusted user: blue
GPG Key ID: 9B203B252A63EE38
6 changed files with 137 additions and 38 deletions

View File

@ -42,9 +42,9 @@ bool Core::ClientCache::checkClient(const QString& node, const QString& ver, con
QString id = node + "/" + ver; QString id = node + "/" + ver;
if (requested.count(id) == 0 && !cache->checkRecord(id)) { if (requested.count(id) == 0 && !cache->checkRecord(id)) {
Shared::ClientInfo& info = requested.insert(std::make_pair(id, Shared::ClientInfo())).first->second; Shared::ClientInfo& info = requested.insert(std::make_pair(id, Shared::ClientInfo())).first->second;
info.node = node; info.id.node = node;
info.verification = ver; info.id.verification = ver;
info.hash = hash; info.id.hash = hash;
emit requestClientInfo(id); emit requestClientInfo(id);
return false; return false;
} }

View File

@ -1,33 +1,43 @@
target_sources(squawk PRIVATE set(SOURCE_FILES
enums.h
global.cpp global.cpp
global.h
exception.cpp exception.cpp
exception.h
icons.cpp icons.cpp
icons.h
message.cpp message.cpp
message.h
messageinfo.cpp messageinfo.cpp
messageinfo.h
order.h
shared.h
utils.cpp utils.cpp
utils.h
vcard.cpp vcard.cpp
vcard.h
pathcheck.cpp pathcheck.cpp
pathcheck.h
clientinfo.h
clientinfo.cpp clientinfo.cpp
identity.h
identity.cpp identity.cpp
form.h
form.cpp form.cpp
field.h
field.cpp field.cpp
keyinfo.cpp keyinfo.cpp
keyinfo.h
info.cpp info.cpp
clientid.cpp
)
set(HEADER_FILES
order.h
shared.h
enums.h
global.h
exception.h
icons.h
message.h
messageinfo.h
utils.h
vcard.h
pathcheck.h
clientinfo.h
identity.h
form.h
field.h
keyinfo.h
info.h info.h
) clientid.h
)
target_sources(squawk PRIVATE
${SOURCE_FILES}
${HEADER_FILES}
)

52
shared/clientid.cpp Normal file
View File

@ -0,0 +1,52 @@
// Squawk messenger.
// Copyright (C) 2019 Yury Gubich <blue@macaw.me>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "clientid.h"
Shared::ClientId::ClientId():
node(),
verification(),
hash()
{}
QString Shared::ClientId::getId() const {
return node + "/" + verification;
}
QDataStream & Shared::ClientId::operator<<(QDataStream& stream) {
stream >> node;
stream >> verification;
stream >> hash;
return stream;
}
QDataStream & Shared::ClientId::operator>>(QDataStream& stream) const {
stream << node;
stream << verification;
stream << hash;
return stream;
}
QDataStream & operator<<(QDataStream& stream, const Shared::ClientId& info) {
info >> stream;
return stream;
}
QDataStream & operator>>(QDataStream& stream, Shared::ClientId& info) {
info << stream;
return stream;
}

45
shared/clientid.h Normal file
View File

@ -0,0 +1,45 @@
// Squawk messenger.
// Copyright (C) 2019 Yury Gubich <blue@macaw.me>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef SHARED_CLIENTID_H
#define SHARED_CLIENTID_H
#include <QString>
#include <QDataStream>
namespace Shared {
class ClientId {
public:
ClientId();
QString getId() const;
QDataStream& operator << (QDataStream& stream);
QDataStream& operator >> (QDataStream& stream) const;
public:
QString node;
QString verification;
QString hash;
};
}
QDataStream& operator << (QDataStream& stream, const Shared::ClientId& info);
QDataStream& operator >> (QDataStream& stream, Shared::ClientId& info);
#endif // SHARED_CLIENTID_H

View File

@ -32,20 +32,16 @@ const std::map<QString, QCryptographicHash::Algorithm> Shared::ClientInfo::hashe
Shared::ClientInfo::ClientInfo(): Shared::ClientInfo::ClientInfo():
identities(), identities(),
extensions(), extensions(),
node(), id(),
verification(),
hash(),
specificPresence() {} specificPresence() {}
QString Shared::ClientInfo::getId() const { QString Shared::ClientInfo::getId() const {
return node + "/" + verification; return id.getId();
} }
QDataStream & Shared::ClientInfo::operator >> (QDataStream& stream) const { QDataStream & Shared::ClientInfo::operator >> (QDataStream& stream) const {
stream << node; stream << id;
stream << verification;
stream << hash;
stream << (quint8)identities.size(); stream << (quint8)identities.size();
for (const Shared::Identity& identity : identities) { for (const Shared::Identity& identity : identities) {
stream << identity; stream << identity;
@ -59,9 +55,7 @@ QDataStream & Shared::ClientInfo::operator >> (QDataStream& stream) const {
} }
QDataStream & Shared::ClientInfo::operator << (QDataStream& stream) { QDataStream & Shared::ClientInfo::operator << (QDataStream& stream) {
stream >> node; stream >> id;
stream >> verification;
stream >> hash;
quint8 size; quint8 size;
stream >> size; stream >> size;
@ -82,7 +76,7 @@ QDataStream & Shared::ClientInfo::operator << (QDataStream& stream) {
} }
bool Shared::ClientInfo::valid() const { bool Shared::ClientInfo::valid() const {
std::map<QString, QCryptographicHash::Algorithm>::const_iterator itr = hashes.find(hash); std::map<QString, QCryptographicHash::Algorithm>::const_iterator itr = hashes.find(id.hash);
if (itr == hashes.end()) { if (itr == hashes.end()) {
return false; return false;
} }
@ -98,7 +92,7 @@ bool Shared::ClientInfo::valid() const {
QString result = calc.result().toBase64(); QString result = calc.result().toBase64();
return result == verification; return result == id.verification;
} }
QDataStream& operator << (QDataStream& stream, const Shared::ClientInfo& info) { QDataStream& operator << (QDataStream& stream, const Shared::ClientInfo& info) {

View File

@ -24,11 +24,11 @@
#include <QCryptographicHash> #include <QCryptographicHash>
#include <shared/identity.h> #include <shared/identity.h>
#include <shared/clientid.h>
namespace Shared { namespace Shared {
class ClientInfo class ClientInfo {
{
public: public:
ClientInfo(); ClientInfo();
@ -41,9 +41,7 @@ public:
public: public:
std::set<Identity> identities; std::set<Identity> identities;
std::set<QString> extensions; std::set<QString> extensions;
QString node; ClientId id;
QString verification;
QString hash;
QString specificPresence; QString specificPresence;
private: private: