//----------------------------------------------------------------------------- // ___ __ _ _ // / _ \__ _ _ __ ___ ___ / /(_)_ __ | | __ // / /_)/ _` | '__/ __|/ _ \/ / | | '_ \| |/ / // / ___/ (_| | | \__ \ __/ /__| | | | | < // \/ \__,_|_| |___/\___\____/_|_| |_|_|\_\ . // //----------------------------------------------------------------------------- // Author: Kurt Sassenrath // Module: Proto // // Message type definitions for the parselink protocol. // // Copyright (c) 2023 Kurt Sassenrath. // // License TBD. //----------------------------------------------------------------------------- #ifndef message_0c61530748b9f966 #define message_0c61530748b9f966 #include #include #include #include #include namespace parselink { namespace proto { // Parselink messages are encoded with MessagePack and take the form of: // | magic | size | content | // - [magic] is the string "prs", in "fixstr" format. // - [size] is the size of the message, not including this header. // - [content] is [size] bytes of MessagePack data, including the // specific type of message presented. // This may be revised in the future. The header could remain as msgpack, or // switch to something hand-crafted for saving bits. struct error_message { std::uint32_t code; // An error code std::string_view what; // A string }; // C->S: Request to (re)connect. struct connect_message { std::uint32_t user_id; // The user id. std::uint32_t version; // The version of the client. std::span session_token; // An optional existing session token. }; // S->C: Challenge to authenticate client as user_id struct challenge_message { std::uint32_t version; std::span challenge; }; // C->S: Calculated response to a challenge. struct response_message { std::span response; }; // S->C: Session token. struct session_established_message { std::span session_token; }; struct parser_data_message { std::string_view opts; std::span payload; }; } // namespace message } // namespace parselink #endif // message_0c61530748b9f966