GeoNetworkingCodec.hh 2.57 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
#include "loggers.hh"
garciay's avatar
garciay committed
8

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

13

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

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

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

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

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

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

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

garciay's avatar
garciay committed
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);
garciay's avatar
garciay committed
54

garciay's avatar
garciay committed
55
56
57
  int decode_ (Base_Type& type, const TTCN_Typedescriptor_t& field_descriptor, TTCN_Buffer& decoding_buffer);
  int decode_headerTST(LibItsGeoNetworking__TypesAndValues::HeaderTST& u, TTCN_Buffer& decoding_buffer);
  int decode_extendedHeader(LibItsGeoNetworking__TypesAndValues::ExtendedHeader& u, TTCN_Buffer& decodin_buffer);
garciay's avatar
garciay committed
58

garciay's avatar
garciay committed
59
public:
garciay's avatar
garciay committed
60
61
62
63
64
  GeoNetworkingCodec() : Codec<LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu, LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu>(), _ec(), _dc() { loggers::loggers::log("GeoNetworkingCodec::GeoNetworkingCodec(D) :%d ", _ec.next_header); };
  virtual ~GeoNetworkingCodec() { loggers::loggers::log("GeoNetworkingCodec::~GeoNetworkingCodec"); };
  
  int encode (const LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu& msg, OCTETSTRING& data);
  int decode (const OCTETSTRING& data, LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu& msg);
garciay's avatar
garciay committed
65
66
67
};

#endif