Bgp ser open
a fake serializer for BGP
object bgp_ser_open = {}
<<< member
class `bgp_ser_open`;
>>>
<<< impl
class `bgp_ser_open` : public ivy_binary_ser_128 {
enum {bgp_s_version,
bgp_s_myas,
bgp_s_time,
bgp_s_id,
bgp_s_optlen,
bgp_s_opt,
bgp_s_opt_val,
bgp_s_opt_len} state;
long frame_type;
int payload_length;
long opt_type;
long opt_len;
public:
bgp_ser_open() : state(bgp_s_version) {
}
virtual void set(int128_t res) {
switch (state) {
case bgp_s_version:
{
std::cerr << "bgp_s_version 1\n";
setn(res,1);
state = bgp_s_myas;
}
break;
case bgp_s_myas:
{
std::cerr << "bgp_s_myas 1\n";
setn(res,2);
state = bgp_s_time;
std::cerr << "bgp_s_myas " << state << "\n";
}
break;
case bgp_s_time:
{
std::cerr << "bgp_s_time 1\n";
setn(res,2);
state = bgp_s_id;
std::cerr << "bgp_s_time " << state << "\n";
}
break;
case bgp_s_id:
{
std::cerr << "bgp_s_id 1\n";
setn(res,4);
state = bgp_s_optlen;
std::cerr << "bgp_s_id " << state << "\n";
}
break;
case bgp_s_optlen:
{
std::cerr << "bgp_s_optlen 1\n";
setn(res,1);
payload_length = res;
std::cerr << "payload_length = " << payload_length << "\n";
state = bgp_s_opt;
}
break;
case bgp_s_opt:
{
std::cerr << "bgp_s_opt 1\n";
setn(res,1);
payload_length -= 1;
state = bgp_s_opt_len;
}
break;
case bgp_s_opt_len:
{
std::cerr << "bgp_s_opt 1\n";
setn(res,1);
payload_length -= 1;
opt_len = res;
state = bgp_s_opt_val;
}
break;
case bgp_s_opt_val:
{
std::cerr << "bgp_s_opt_val 1\n";
setn(res,1);
payload_length -= 1;
}
break;
default:
std::cerr << "deser_err 42 " << "\n";
throw deser_err();
}
}
virtual void open_tag(int tag, const std::string &) {
std::cerr << "deser_err 43 " << tag << "\n";
std::cerr << "deser_err 43 " << state << "\n";
throw deser_err();
}
virtual void open_list_elem() {
}
void open_list(int len) {
}
void close_list() {
}
void close_list_elem() {}
virtual void close_tag() {
}
~bgp_ser_open(){}
};
>>>