Bgp ser
a fake serializer for BGP
object bgp_ser = {}
<<< member
class `bgp_ser`;
>>>
<<< impl
class `bgp_ser` : public ivy_binary_ser_128 {
enum {bgp_s_init,
bgp_s_len,
bgp_s_type,
bgp_s_payload} state;
long frame_type;
int payload_length;
public:
bgp_ser() : state(bgp_s_init) {
}
virtual void set(int128_t res) {
switch (state) {
case bgp_s_init:
{
std::cerr << "bgp_s_init " << "\n";
setn(res,8);
setn(res,8);
state = bgp_s_len;
}
break;
case bgp_s_len:
{
std::cerr << "bgp_s_len " << "\n";
setn(res,2);
payload_length = res;
std::cerr << "payload_length = " << payload_length << "\n";
state = bgp_s_type;
}
break;
case bgp_s_type:
{
std::cerr << "bgp_s_type " << "\n";
setn(res, 1);
state = bgp_s_payload;
}
break;
case bgp_s_payload:
{
std::cerr << "bgp_s_payload 1\n";
setn(res,1);
std::cerr << "payload_length = " << payload_length << "\n";
}
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() {
if (state == bgp_s_payload) {
std::cerr << "bgp_s_payload bgp_deser 2\n";
payload_length--> 0;
}
}
void open_list(int len) {
}
void close_list() {
if (state == bgp_s_payload) {
state = bgp_s_init;
}
}
void close_list_elem() {}
virtual void close_tag() {
state = bgp_s_payload;
}
~bgp_ser(){}
};
>>>