35 lines
1.4 KiB
C++
35 lines
1.4 KiB
C++
#include "invite_link.h"
|
|
#define InviteData CoreInviteData
|
|
#define InviteAddr CoreInviteAddr
|
|
#define InviteReality CoreInviteReality
|
|
extern "C" {
|
|
#include "../../../src/chat/invite_link.h"
|
|
}
|
|
#undef InviteData
|
|
#undef InviteAddr
|
|
#undef InviteReality
|
|
|
|
InviteData decodeInviteLink(const QString& link) {
|
|
InviteData result;
|
|
CoreInviteData data; char error[128];
|
|
const QByteArray bytes = link.toUtf8();
|
|
if (invite_link_decode(bytes.constData(), (size_t)bytes.size(), &data, error, sizeof(error))) {
|
|
result.error = QString::fromUtf8(error); return result;
|
|
}
|
|
result.channelId = data.channelId; result.joinKey = data.join_key;
|
|
result.pubkey = QByteArray((const char*)data.pubkey, 32);
|
|
result.password = QString::fromUtf8(data.password, data.password_len);
|
|
result.reality.has = data.reality.has;
|
|
if (data.reality.has) {
|
|
result.reality.shortId = QByteArray((const char*)data.reality.short_id, 8);
|
|
result.reality.serverPubkey = QByteArray((const char*)data.reality.server_pubkey, 32);
|
|
result.reality.version = QByteArray((const char*)data.reality.version, 3);
|
|
result.reality.serverName = QString::fromUtf8(data.reality.server_name);
|
|
}
|
|
for (unsigned i = 0; i < data.addrCount; i++) {
|
|
const auto& a = data.addrs[i];
|
|
result.addrs.append({a.family, QByteArray((const char*)a.address, a.family == 6 ? 16 : 4), a.port, a.socketId, a.proto});
|
|
}
|
|
return result;
|
|
}
|