GeoNetworkingCodec.hh 1.77 KB
Newer Older
#ifndef GNCODEC_H
#define GNCODEC_H
garciay's avatar
garciay committed
class Base_Type;
class OCTETSTRING;
class TTCN_Typedescriptor_t;
class TTCN_Buffer;


namespace LibItsGeoNetworking__TypesAndValues {
garciay's avatar
garciay committed
    class GeoNetworkingPdu;
    class ExtendedHeader;
    class DecodedPayload;
garciay's avatar
garciay committed
struct Encoding_Context {
    unsigned char next_header; // FIXME Useless?
    unsigned int plLength_position;
    unsigned int plLength;

    Encoding_Context() { next_header = 0xff; plLength_position = -1; plLength = -1; }
};

struct Decoding_Context {
    unsigned char next_header; // FIXME Useless?
    unsigned int plLength;

    Decoding_Context() { next_header = 0xff; plLength = -1; }
};

class GeoNetworkingCodec : public Codec<LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu, LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu> {
garciay's avatar
garciay committed
    Encoding_Context _ec;
    Decoding_Context _dc;

    int encode_ (const Base_Type& type, const TTCN_Typedescriptor_t& field_descriptor, TTCN_Buffer& encoding_buffer);
    int encode_extendedHeader(const LibItsGeoNetworking__TypesAndValues::ExtendedHeader& u, TTCN_Buffer& encoding_buffer);
    int encode_decodedPayload(const LibItsGeoNetworking__TypesAndValues::DecodedPayload& u, TTCN_Buffer& encoding_buffer);

    int decode_ (Base_Type& type, const TTCN_Typedescriptor_t& field_descriptor, TTCN_Buffer& decoding_buffer);
    int decode_extendedHeader(LibItsGeoNetworking__TypesAndValues::ExtendedHeader& u, TTCN_Buffer& decoding_buffer);
public:
garciay's avatar
garciay committed
    GeoNetworkingCodec() : _ec(), _dc() {};
garciay's avatar
garciay committed
    virtual int encode (const LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu& msg, OCTETSTRING& data);
    virtual int decode (const OCTETSTRING& data, LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu& msg);