GeoNetworkingCodec.hh 2.31 KB
Newer Older
garciay's avatar
garciay committed
1
2
#ifndef GNCODEC_H
#define GNCODEC_H
garciay's avatar
garciay committed
3
4
5

#include <vector>

6
#include "Codec.hh"
garciay's avatar
garciay committed
7

garciay's avatar
garciay committed
8
9
10
11
12
class Base_Type;
class OCTETSTRING;
class TTCN_Typedescriptor_t;
class TTCN_Buffer;

13

filatov's avatar
filatov committed
14
namespace LibItsGeoNetworking__TypesAndValues {
garciay's avatar
garciay committed
15
    class GeoNetworkingPdu;
16
    class HeaderTST;
garciay's avatar
garciay committed
17
18
    class ExtendedHeader;
    class DecodedPayload;
19
20
21
22
23
};

namespace LibItsSecurity__TypesAndValues {
    class SecuredMessage;
};
filatov's avatar
filatov committed
24

garciay's avatar
garciay committed
25
26
struct Encoding_Context {
    unsigned char next_header; // FIXME Useless?
27
    unsigned char header_type; // FIXME Useless?
garciay's avatar
garciay committed
28
29
    unsigned int  plLength_position;
    unsigned int  plLength;
garciay's avatar
garciay committed
30

31
    Encoding_Context() { next_header = 0xff; header_type = 0xff; plLength_position = -1; plLength = -1; }
garciay's avatar
garciay committed
32
33
34
};

struct Decoding_Context {
garciay's avatar
garciay committed
35
    unsigned char              next_header; // FIXME Useless?
36
37
    unsigned char              header_type; // FIXME Useless?
    unsigned char              header_sub_type; // FIXME Useless?
garciay's avatar
garciay committed
38
39
    unsigned int               plLength;
    std::vector<unsigned char> payload;
garciay's avatar
garciay committed
40

41
    Decoding_Context() : payload() { next_header = 0xff; header_type = 0xff; header_sub_type = 0xff; plLength = -1; }
garciay's avatar
garciay committed
42
43
};

filatov's avatar
filatov committed
44
class GeoNetworkingCodec : public Codec<LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu, LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu> {
45

garciay's avatar
garciay committed
46
47
48
49
50
51
52
53
    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);
54
55
    int decode_headerTST(LibItsGeoNetworking__TypesAndValues::HeaderTST& u, TTCN_Buffer& decoding_buffer);
    int decode_extendedHeader(LibItsGeoNetworking__TypesAndValues::ExtendedHeader& u, TTCN_Buffer& decoding_buffer);
garciay's avatar
garciay committed
56

garciay's avatar
garciay committed
57
public:
garciay's avatar
garciay committed
58
    GeoNetworkingCodec() : _ec(), _dc() {};
59

garciay's avatar
garciay committed
60
61
    virtual int encode (const LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu& msg, OCTETSTRING& data);
    virtual int decode (const OCTETSTRING& data, LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu& msg);
garciay's avatar
garciay committed
62
63
64
};

#endif