3 #include "telnetpp/options/new_environ/detail/protocol.hpp"
4 #include "telnetpp/options/new_environ/detail/stream.hpp"
8 namespace telnetpp::options::new_environ::detail {
12 return type == variable_type::var
13 ? telnetpp::options::new_environ::detail::var
14 : telnetpp::options::new_environ::detail::uservar;
17 enum class parser_state
29 parser_state state = parser_state::state_is_or_info;
33 template <
typename Continuation>
34 void parse_is_or_info(
35 telnetpp::bytes::iterator ,
39 state.state = parser_state::state_type;
42 template <
typename Continuation>
44 telnetpp::bytes::iterator current,
48 state.rsp.type = byte_to_type(*current);
49 state.state = parser_state::state_name;
52 template <
typename Continuation>
54 telnetpp::bytes::iterator current,
58 using namespace telnetpp::literals;
66 state.rsp.type = byte_to_type(*current);
67 state.state = parser_state::state_name;
71 state.state = parser_state::state_name_esc;
75 state.rsp.value =
""_tb;
76 state.state = parser_state::state_value;
80 state.rsp.name.push_back(*current);
85 template <
typename Continuation>
87 telnetpp::bytes::iterator current,
91 state.rsp.name.push_back(*current);
92 state.state = parser_state::state_name;
95 template <
typename Continuation>
97 telnetpp::bytes::iterator current,
104 case detail::uservar:
107 state.rsp.type = byte_to_type(*current);
108 state.state = parser_state::state_name;
112 state.state = parser_state::state_value_esc;
116 state.rsp.value->push_back(*current);
121 template <
typename Continuation>
122 void parse_value_esc(
123 telnetpp::bytes::iterator current,
124 parsing_state &state,
127 state.rsp.value->push_back(*current);
128 state.state = parser_state::state_value;
131 template <
typename Continuation>
133 telnetpp::bytes::iterator current,
134 parsing_state &state,
139 case parser_state::state_is_or_info:
140 parse_is_or_info(current, state, cont);
143 case parser_state::state_type:
144 parse_type(current, state, cont);
147 case parser_state::state_name:
148 parse_name(current, state, cont);
151 case parser_state::state_name_esc:
152 parse_name_esc(current, state, cont);
155 case parser_state::state_value:
156 parse_value(current, state, cont);
159 case parser_state::state_value_esc:
160 parse_value_esc(current, state, cont);
164 assert(!
"Invalid state in NEW_ENVIRON response parser");
169 template <
typename Continuation>
170 void parse_end(parsing_state &state, Continuation &&cont)
172 if (!state.rsp.name.empty())
variable_type
An enumeration of the type of variables that NEW_ENVIRON handles.
Definition: protocol.hpp:13