1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #ifndef BOOST_MYSQL_IMPL_INTERNAL_CHANNEL_MESSAGE_PARSER_HPP
- #define BOOST_MYSQL_IMPL_INTERNAL_CHANNEL_MESSAGE_PARSER_HPP
- #include <boost/mysql/detail/config.hpp>
- #include <boost/mysql/impl/internal/channel/read_buffer.hpp>
- #include <boost/mysql/impl/internal/protocol/constants.hpp>
- #include <cstddef>
- #include <cstdint>
- namespace boost {
- namespace mysql {
- namespace detail {
- class message_parser
- {
- struct state_t
- {
- bool is_first_frame{true};
- std::uint8_t seqnum_first{};
- std::uint8_t seqnum_last{};
- bool reading_header{true};
- std::size_t remaining_bytes{0};
- bool more_frames_follow{false};
- bool has_seqnum_mismatch{false};
- };
- std::size_t max_frame_size_;
- state_t state_;
- public:
- struct result
- {
-
- bool has_message{false};
-
- std::size_t required_size{0};
-
- struct message_t
- {
- std::uint8_t seqnum_first;
- std::uint8_t seqnum_last;
- std::size_t size;
- bool has_seqnum_mismatch;
-
- } message{};
- void set_required_size(std::size_t size) noexcept
- {
- has_message = false;
- required_size = size;
- }
- void set_message(const message_t& msg) noexcept
- {
- has_message = true;
- message = msg;
- }
- };
-
- message_parser(std::size_t max_frame_size = MAX_PACKET_SIZE) noexcept : max_frame_size_(max_frame_size){};
-
-
-
-
-
-
- BOOST_MYSQL_DECL
- void parse_message(read_buffer& buff, result& res) noexcept;
- };
- }
- }
- }
- #ifdef BOOST_MYSQL_HEADER_ONLY
- #include <boost/mysql/impl/internal/channel/message_parser.ipp>
- #endif
- #endif
|