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: 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;
if (requested.count(id) == 0 && !cache->checkRecord(id)) {
Shared::ClientInfo& info = requested.insert(std::make_pair(id, Shared::ClientInfo())).first->second;
info.node = node;
info.verification = ver;
info.hash = hash;
info.id.node = node;
info.id.verification = ver;
info.id.hash = hash;
emit requestClientInfo(id);
return false;
}

View File

@ -1,33 +1,43 @@
target_sources(squawk PRIVATE
enums.h
set(SOURCE_FILES
global.cpp
global.h
exception.cpp
exception.h
icons.cpp
icons.h
message.cpp
message.h
messageinfo.cpp
messageinfo.h
order.h
shared.h
utils.cpp
utils.h
vcard.cpp
vcard.h
pathcheck.cpp
pathcheck.h
clientinfo.h
clientinfo.cpp
identity.h
identity.cpp
form.h
form.cpp
field.h
field.cpp
keyinfo.cpp
keyinfo.h
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
)
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():
identities(),
extensions(),
node(),
verification(),
hash(),
id(),
specificPresence() {}
QString Shared::ClientInfo::getId() const {
return node + "/" + verification;
return id.getId();
}
QDataStream & Shared::ClientInfo::operator >> (QDataStream& stream) const {
stream << node;
stream << verification;
stream << hash;
stream << id;
stream << (quint8)identities.size();
for (const Shared::Identity& identity : identities) {
stream << identity;
@ -59,9 +55,7 @@ QDataStream & Shared::ClientInfo::operator >> (QDataStream& stream) const {
}
QDataStream & Shared::ClientInfo::operator << (QDataStream& stream) {
stream >> node;
stream >> verification;
stream >> hash;
stream >> id;
quint8 size;
stream >> size;
@ -82,7 +76,7 @@ QDataStream & Shared::ClientInfo::operator << (QDataStream& stream) {
}
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()) {
return false;
}
@ -98,7 +92,7 @@ bool Shared::ClientInfo::valid() const {
QString result = calc.result().toBase64();
return result == verification;
return result == id.verification;
}
QDataStream& operator << (QDataStream& stream, const Shared::ClientInfo& info) {

View File

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