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(){}
    };

>>>