#include "ext_packet.h" extern "C" { #include "vli.h" } QByteArray serializeIdent(const Ident &m) { QByteArray msg; msg.reserve(3); msg.append((char)ExMsgType::ident); msg.append('\0'); msg.append(m.version); return msg; } QByteArray serializeAuthRequest(const AuthRequest &m) { QByteArray msg; const QByteArray username = m.username.toUtf8(); uint8_t method[sizeof(quint32) + 1]; uint8_t ulen[sizeof(quint32) + 1]; size_t method_n = vli32_encode(method, (quint32)m.method); size_t ulen_n = vli32_encode(ulen, username.size()); msg.reserve(2 + ulen_n + username.size() + method_n); msg.append((char)ExMsgType::auth_request); msg.append('\0'); msg.append((const char *)ulen, ulen_n); msg.append(username, username.size()); msg.append((const char *)method, method_n); return msg; } QByteArray serializeAuthResponse(const AuthResponse &m) { QByteArray msg; msg.reserve(2 + m.response.size()); msg.append((char)ExMsgType::auth_response); msg.append('\0'); msg.append(m.response); return msg; } bool parseAuthChallenge(QByteArrayView in, AuthChallenge &out) { if (in.size() < 1 + 32) { return false; } out.challenge = QByteArray(in.constData() + 1, 32); return true; }