62 lines
1.6 KiB
C++
62 lines
1.6 KiB
C++
//-----------------------------------------------------------------------------
|
|
// ___ __ _ _
|
|
// / _ \__ _ _ __ ___ ___ / /(_)_ __ | | __
|
|
// / /_)/ _` | '__/ __|/ _ \/ / | | '_ \| |/ /
|
|
// / ___/ (_| | | \__ \ __/ /__| | | | | <
|
|
// \/ \__,_|_| |___/\___\____/_|_| |_|_|\_\ .
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
// Author: Kurt Sassenrath
|
|
// Module: Proto
|
|
//
|
|
// Session management for the "user" protocol.
|
|
//
|
|
// Copyright (c) 2023 Kurt Sassenrath.
|
|
//
|
|
// License TBD.
|
|
//-----------------------------------------------------------------------------
|
|
#ifndef session_07eae057feface79
|
|
#define session_07eae057feface79
|
|
|
|
#include "parselink/msgpack/token.h"
|
|
#include <cstdint>
|
|
#include <span>
|
|
#include <string>
|
|
|
|
#include <tl/expected.hpp>
|
|
|
|
namespace parselink {
|
|
namespace proto {
|
|
|
|
enum class error {
|
|
system_error,
|
|
incomplete,
|
|
unsupported,
|
|
bad_data,
|
|
too_large,
|
|
};
|
|
|
|
// Structure containing header information parsed from a buffer.
|
|
struct header_info {
|
|
std::uint32_t message_size; // Size of the message, minus the header.
|
|
std::uint32_t bytes_read; // How many bytes of the buffer were used.
|
|
};
|
|
|
|
struct connect_info {
|
|
std::uint32_t version;
|
|
std::string_view user_id;
|
|
std::span<std::byte const> session_id;
|
|
};
|
|
|
|
// Parse the protocol header out of a buffer.
|
|
tl::expected<header_info, error> parse_header(
|
|
std::span<std::byte const> buffer) noexcept;
|
|
|
|
tl::expected<connect_info, error> parse_connect(
|
|
std::span<msgpack::token> tokens) noexcept;
|
|
|
|
} // namespace proto
|
|
} // namespace parselink
|
|
|
|
#endif // session_0c61530748b9f966
|