diff --git a/qomemo/CMakeLists.txt b/qomemo/CMakeLists.txt index e8e4502..40abc25 100644 --- a/qomemo/CMakeLists.txt +++ b/qomemo/CMakeLists.txt @@ -1,8 +1,14 @@ target_sources(squawk PRIVATE + device_key_storage.cpp + device_key_storage.h + device_service.cpp + device_service.h signal.h signal.cpp qomemo.cpp qomemo.h sce.cpp sce.h + user_device_list.cpp + user_device_list.h ) \ No newline at end of file diff --git a/qomemo/device_key_storage.cpp b/qomemo/device_key_storage.cpp new file mode 100644 index 0000000..1ba017e --- /dev/null +++ b/qomemo/device_key_storage.cpp @@ -0,0 +1,15 @@ +/* + * Created by victoria on 2021-05-12. + */ + +#include "device_key_storage.h" +#include + +int QXmpp::Omemo::DeviceKeyStorage::generateDeviceId() { + QRandomGenerator random{}; + + return 1 + random.bounded(INT32_MAX - 1); +} + +QXmpp::Omemo::DeviceKeyStorage::DeviceKeyStorage(int deviceId) + : deviceId(deviceId) {} diff --git a/qomemo/device_key_storage.h b/qomemo/device_key_storage.h new file mode 100644 index 0000000..a0d8ce2 --- /dev/null +++ b/qomemo/device_key_storage.h @@ -0,0 +1,18 @@ +/* + * Created by victoria on 2021-05-12. + */ + +#pragma once + +namespace QXmpp::Omemo { + +class DeviceKeyStorage { +public: + static int generateDeviceId(); + + explicit DeviceKeyStorage(int deviceId); + + const int deviceId; +}; + +} // namespace QXmpp::Omemo diff --git a/qomemo/device_service.cpp b/qomemo/device_service.cpp new file mode 100644 index 0000000..4333d7f --- /dev/null +++ b/qomemo/device_service.cpp @@ -0,0 +1,30 @@ +/* + * Created by victoria on 2021-05-12. + */ + +#include "device_service.h" + +#include +#include + +#include + +QXmpp::Omemo::DeviceService::DeviceService(QXmppClient &client, QObject *parent) + : QObject(parent), client(client) { + connect(&client, &QXmppClient::iqReceived, this, + &DeviceService::onIqReceived); +} + +void QXmpp::Omemo::DeviceService::onIqReceived(const QXmppIq &iq) { + // Update OMEMO device list +} + +void QXmpp::Omemo::DeviceService::fetch() { + QXmppPubSubIq fetchOwnDevices{}; + fetchOwnDevices.setFrom(client.configuration().jid()); + fetchOwnDevices.setTo(client.configuration().jidBare()); + fetchOwnDevices.setType(QXmppIq::Get); + fetchOwnDevices.setQueryNode("urn:xmpp:omemo:1:devices"); + + client.sendPacket(fetchOwnDevices); +} diff --git a/qomemo/device_service.h b/qomemo/device_service.h new file mode 100644 index 0000000..fc2e4d5 --- /dev/null +++ b/qomemo/device_service.h @@ -0,0 +1,31 @@ +/* + * Created by victoria on 2021-05-12. + */ + +#pragma once + +#include "user_device_list.h" + +#include + +namespace QXmpp::Omemo { + +class DeviceService : public QObject { + Q_OBJECT + +public: + DeviceService(QXmppClient& client, QObject *parent); + + void fetch(); + +public slots: + void onIqReceived(const QXmppIq& iq); + +private: + void announce(); + + QXmppClient& client; + QMap device_lists{}; +}; + +} // namespace QXmpp::Omemo diff --git a/qomemo/qomemo.h b/qomemo/qomemo.h index 906d0ba..e815d11 100644 --- a/qomemo/qomemo.h +++ b/qomemo/qomemo.h @@ -91,4 +91,4 @@ public: QXmppMessage message{}; }; -} // namespace QOmemo +} // namespace QXmpp::Omemo diff --git a/qomemo/user_device_list.cpp b/qomemo/user_device_list.cpp new file mode 100644 index 0000000..9a3f18a --- /dev/null +++ b/qomemo/user_device_list.cpp @@ -0,0 +1,10 @@ +/* + * Created by victoria on 2021-05-12. + */ + +#include "user_device_list.h" + +#include + +QXmpp::Omemo::UserDeviceList::UserDeviceList(QString jid) + : jid(std::move(jid)) {} diff --git a/qomemo/user_device_list.h b/qomemo/user_device_list.h new file mode 100644 index 0000000..26a88ca --- /dev/null +++ b/qomemo/user_device_list.h @@ -0,0 +1,17 @@ +/* + * Created by victoria on 2021-05-12. + */ + +#pragma once + +#include +namespace QXmpp::Omemo { + +class UserDeviceList { +public: + explicit UserDeviceList(QString jid); + + const QString jid; +}; + +} // namespace QXmpp::Omemo