......@@ -5,149 +5,149 @@
/* to be used when built without generating softlinks to the working directory */
#ifdef AtsGeoNetworking
#include "GN_ports/UpperTesterPort_GN.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#endif
#ifdef AtsBTP
#include "GN_ports/UpperTesterPort_GN.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#endif
#ifdef AtsCAM
#include "GN_ports/UpperTesterPort_GN.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "CAM_ports/UpperTesterPort_CAM.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "CAM_ports/UpperTesterPort_CAM.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#endif
#ifdef AtsDENM
#include "GN_ports/UpperTesterPort_GN.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "DENM_ports/UpperTesterPort_DENM.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "DENM_ports/UpperTesterPort_DENM.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#endif
#ifdef AtsSecurity
#include "GN_ports/UpperTesterPort_GN.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "CAM_ports/UpperTesterPort_CAM.hh"
#include "DENM_ports/UpperTesterPort_DENM.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "CAM_ports/UpperTesterPort_CAM.hh"
#include "DENM_ports/UpperTesterPort_DENM.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#endif
#ifdef AtsPki
#include "GN_ports/UpperTesterPort_GN.hh"
#ifndef LibItsGeoNetworking__TestSystem_HH
#include "Pki_ports/UpperTesterPkiPort.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#ifndef LibItsGeoNetworking__TestSystem_HH
#include "Pki_ports/UpperTesterPkiPort.hh"
#endif
// #include "BTP_ports/UpperTesterPort_BTP.hh"
// #include "CAM_ports/UpperTesterPort_CAM.hh"
#endif
#ifdef AtsSremSsem
#include "GN_ports/UpperTesterPort_GN.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "SremSsem_ports/UpperTesterPort_SremSsem.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#include "SremSsem_ports/UpperTesterPort_SremSsem.hh"
#endif
#ifdef AtsIVIM
#include "GN_ports/UpperTesterPort_GN.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "IVIM_ports/UpperTesterPort_IVIM.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#include "IVIM_ports/UpperTesterPort_IVIM.hh"
#endif
#ifdef AtsMapemSpatem
#include "GN_ports/UpperTesterPort_GN.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "MapemSpatem_ports/UpperTesterPort_MapemSpatem.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#include "MapemSpatem_ports/UpperTesterPort_MapemSpatem.hh"
#endif
#ifdef AtsRtcmem
#include "GN_ports/UpperTesterPort_GN.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "Rtcmem_ports/UpperTesterPort_Rtcmem.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#include "Rtcmem_ports/UpperTesterPort_Rtcmem.hh"
#endif
#ifdef AtsRSUsSimulator // This is not an Abstract Test Suit, but an helper tool to simulate basic RSU/OBU functionalities
#include "GN_ports/UpperTesterPort_GN.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "CAM_ports/UpperTesterPort_CAM.hh"
#include "DENM_ports/UpperTesterPort_DENM.hh"
#include "IVIM_ports/UpperTesterPort_IVIM.hh"
#include "MapemSpatem_ports/UpperTesterPort_MapemSpatem.hh"
#include "SremSsem_ports/UpperTesterPort_SremSsem.hh"
#include "Rtcmem_ports/UpperTesterPort_Rtcmem.hh"
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "CAM_ports/UpperTesterPort_CAM.hh"
#include "DENM_ports/UpperTesterPort_DENM.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#include "IVIM_ports/UpperTesterPort_IVIM.hh"
#include "MapemSpatem_ports/UpperTesterPort_MapemSpatem.hh"
#include "Rtcmem_ports/UpperTesterPort_Rtcmem.hh"
#include "SremSsem_ports/UpperTesterPort_SremSsem.hh"
#endif
#else //_NO_SOFTLINKS_
#ifdef AtsGeoNetworking
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_GN.hh"
#endif
#ifdef AtsBTP
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_GN.hh"
#endif
#ifdef AtsCAM
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_CAM.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_CAM.hh"
#include "UpperTesterPort_GN.hh"
#endif
#ifdef AtsDENM
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_DENM.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_DENM.hh"
#include "UpperTesterPort_GN.hh"
#endif
#ifdef AtsSecurity
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_CAM.hh"
#include "UpperTesterPort_DENM.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_CAM.hh"
#include "UpperTesterPort_DENM.hh"
#include "UpperTesterPort_GN.hh"
#endif
#ifdef AtsPki
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_CAM.hh"
#include "UpperTesterPort_DENM.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_CAM.hh"
#include "UpperTesterPort_DENM.hh"
#include "UpperTesterPort_GN.hh"
#endif
#ifdef AtsIVIM
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_IVIM.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_IVIM.hh"
#endif
#ifdef AtsMapemSpatem
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_MapemSpatem.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_MapemSpatem.hh"
#endif
#ifdef AtsSremSsem
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_SremSsem.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_SremSsem.hh"
#endif
#ifdef AtsRtcmem
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_Rtcmem.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_Rtcmem.hh"
#endif
#ifdef AtsRSUsSimulator // This is not an Abstract Test Suit, but an helper tool to simulate basic RSU/OBU functionalities
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_CAM.hh"
#include "UpperTesterPort_DENM.hh"
#include "UpperTesterPort_IVIM.hh"
#include "UpperTesterPort_MapemSpatem.hh"
#include "UpperTesterPort_SremSsem.hh"
#include "UpperTesterPort_Rtcmem.hh"
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_CAM.hh"
#include "UpperTesterPort_DENM.hh"
#include "UpperTesterPort_GN.hh"
#include "UpperTesterPort_IVIM.hh"
#include "UpperTesterPort_MapemSpatem.hh"
#include "UpperTesterPort_Rtcmem.hh"
#include "UpperTesterPort_SremSsem.hh"
#endif
#endif//_NO_SOFTLINKS_
#endif //_NO_SOFTLINKS_
#endif
......@@ -2,66 +2,31 @@
#include "AdapterControlPort_V2G.hh"
namespace LibItsV2G__TestSystem {
AdapterControlPort::AdapterControlPort(const char *par_port_name)
: AdapterControlPort_BASE(par_port_name)
{
AdapterControlPort::AdapterControlPort(const char *par_port_name) : AdapterControlPort_BASE(par_port_name) {}
}
AdapterControlPort::~AdapterControlPort() {}
AdapterControlPort::~AdapterControlPort()
{
void AdapterControlPort::set_parameter(const char * /*parameter_name*/, const char * /*parameter_value*/) {}
}
/*void AdapterControlPort::Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error) {}*/
void AdapterControlPort::set_parameter(const char * /*parameter_name*/,
const char * /*parameter_value*/)
{
void AdapterControlPort::Handle_Fd_Event_Error(int /*fd*/) {}
}
void AdapterControlPort::Handle_Fd_Event_Writable(int /*fd*/) {}
/*void AdapterControlPort::Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error) {}*/
void AdapterControlPort::Handle_Fd_Event_Readable(int /*fd*/) {}
void AdapterControlPort::Handle_Fd_Event_Error(int /*fd*/)
{
/*void AdapterControlPort::Handle_Timeout(double time_since_last_call) {}*/
}
void AdapterControlPort::user_map(const char * /*system_port*/) {}
void AdapterControlPort::Handle_Fd_Event_Writable(int /*fd*/)
{
void AdapterControlPort::user_unmap(const char * /*system_port*/) {}
}
void AdapterControlPort::user_start() {}
void AdapterControlPort::Handle_Fd_Event_Readable(int /*fd*/)
{
void AdapterControlPort::user_stop() {}
}
void AdapterControlPort::outgoing_send(const LibItsV2G__TypesAndValues::AcV2Gprimitive & /*send_par*/) {}
/*void AdapterControlPort::Handle_Timeout(double time_since_last_call) {}*/
void AdapterControlPort::user_map(const char * /*system_port*/)
{
}
void AdapterControlPort::user_unmap(const char * /*system_port*/)
{
}
void AdapterControlPort::user_start()
{
}
void AdapterControlPort::user_stop()
{
}
void AdapterControlPort::outgoing_send(const LibItsV2G__TypesAndValues::AcV2Gprimitive& /*send_par*/)
{
}
} /* end of namespace */
} // namespace LibItsV2G__TestSystem
......@@ -5,30 +5,29 @@
#include "LibItsV2G_TestSystem.hh"
namespace LibItsV2G__TestSystem {
class AdapterControlPort : public AdapterControlPort_BASE {
public:
AdapterControlPort(const char *par_port_name = NULL);
~AdapterControlPort();
class AdapterControlPort : public AdapterControlPort_BASE {
public:
AdapterControlPort(const char *par_port_name = NULL);
~AdapterControlPort();
void set_parameter(const char *parameter_name,
const char *parameter_value);
void set_parameter(const char *parameter_name, const char *parameter_value);
private:
/* void Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error); */
void Handle_Fd_Event_Error(int fd);
void Handle_Fd_Event_Writable(int fd);
void Handle_Fd_Event_Readable(int fd);
/* void Handle_Timeout(double time_since_last_call); */
protected:
void user_map(const char *system_port);
void user_unmap(const char *system_port);
private:
/* void Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error); */
void Handle_Fd_Event_Error(int fd);
void Handle_Fd_Event_Writable(int fd);
void Handle_Fd_Event_Readable(int fd);
/* void Handle_Timeout(double time_since_last_call); */
protected:
void user_map(const char *system_port);
void user_unmap(const char *system_port);
void user_start();
void user_stop();
void user_start();
void user_stop();
void outgoing_send(const LibItsV2G__TypesAndValues::AcV2Gprimitive& send_par);
};
void outgoing_send(const LibItsV2G__TypesAndValues::AcV2Gprimitive &send_par);
};
} /* end of namespace */
} // namespace LibItsV2G__TestSystem
#endif
......@@ -2,76 +2,35 @@
#include "UpperTesterPort_V2G.hh"
namespace LibItsV2G__TestSystem {
UpperTesterPort::UpperTesterPort(const char *par_port_name)
: UpperTesterPort_BASE(par_port_name)
{
UpperTesterPort::UpperTesterPort(const char *par_port_name) : UpperTesterPort_BASE(par_port_name) {}
}
UpperTesterPort::~UpperTesterPort() {}
UpperTesterPort::~UpperTesterPort()
{
void UpperTesterPort::set_parameter(const char * /*parameter_name*/, const char * /*parameter_value*/) {}
}
/*void UpperTesterPort::Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error) {}*/
void UpperTesterPort::set_parameter(const char * /*parameter_name*/,
const char * /*parameter_value*/)
{
void UpperTesterPort::Handle_Fd_Event_Error(int /*fd*/) {}
}
void UpperTesterPort::Handle_Fd_Event_Writable(int /*fd*/) {}
/*void UpperTesterPort::Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error) {}*/
void UpperTesterPort::Handle_Fd_Event_Readable(int /*fd*/) {}
void UpperTesterPort::Handle_Fd_Event_Error(int /*fd*/)
{
/*void UpperTesterPort::Handle_Timeout(double time_since_last_call) {}*/
}
void UpperTesterPort::user_map(const char * /*system_port*/) {}
void UpperTesterPort::Handle_Fd_Event_Writable(int /*fd*/)
{
void UpperTesterPort::user_unmap(const char * /*system_port*/) {}
}
void UpperTesterPort::user_start() {}
void UpperTesterPort::Handle_Fd_Event_Readable(int /*fd*/)
{
void UpperTesterPort::user_stop() {}
}
void UpperTesterPort::outgoing_send(const LibItsV2G__TypesAndValues::UtInitialize & /*send_par*/) {}
/*void UpperTesterPort::Handle_Timeout(double time_since_last_call) {}*/
void UpperTesterPort::outgoing_send(const LibItsV2G__TypesAndValues::UtTrigger & /*send_par*/) {}
void UpperTesterPort::user_map(const char * /*system_port*/)
{
void UpperTesterPort::outgoing_send(const LibItsV2G__TypesAndValues::UtCheck & /*send_par*/) {}
}
void UpperTesterPort::user_unmap(const char * /*system_port*/)
{
}
void UpperTesterPort::user_start()
{
}
void UpperTesterPort::user_stop()
{
}
void UpperTesterPort::outgoing_send(const LibItsV2G__TypesAndValues::UtInitialize& /*send_par*/)
{
}
void UpperTesterPort::outgoing_send(const LibItsV2G__TypesAndValues::UtTrigger& /*send_par*/)
{
}
void UpperTesterPort::outgoing_send(const LibItsV2G__TypesAndValues::UtCheck& /*send_par*/)
{
}
} /* end of namespace */
} // namespace LibItsV2G__TestSystem
......@@ -5,36 +5,34 @@
#include "LibItsV2G_TestSystem.hh"
namespace LibItsV2G__TestSystem {
class UpperTesterPort : public UpperTesterPort_BASE {
public:
UpperTesterPort(const char *par_port_name = NULL);
~UpperTesterPort();
void set_parameter(const char *parameter_name,
const char *parameter_value);
private:
/* void Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error); */
void Handle_Fd_Event_Error(int fd);
void Handle_Fd_Event_Writable(int fd);
void Handle_Fd_Event_Readable(int fd);
/* void Handle_Timeout(double time_since_last_call); */
protected:
void user_map(const char *system_port);
void user_unmap(const char *system_port);
void user_start();
void user_stop();
void outgoing_send(const LibItsV2G__TypesAndValues::UtInitialize& send_par);
void outgoing_send(const LibItsV2G__TypesAndValues::UtTrigger& send_par);
void outgoing_send(const LibItsV2G__TypesAndValues::UtCheck& send_par);
};
} /* end of namespace */
class UpperTesterPort : public UpperTesterPort_BASE {
public:
UpperTesterPort(const char *par_port_name = NULL);
~UpperTesterPort();
void set_parameter(const char *parameter_name, const char *parameter_value);
private:
/* void Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error); */
void Handle_Fd_Event_Error(int fd);
void Handle_Fd_Event_Writable(int fd);
void Handle_Fd_Event_Readable(int fd);
/* void Handle_Timeout(double time_since_last_call); */
protected:
void user_map(const char *system_port);
void user_unmap(const char *system_port);
void user_start();
void user_stop();
void outgoing_send(const LibItsV2G__TypesAndValues::UtInitialize &send_par);
void outgoing_send(const LibItsV2G__TypesAndValues::UtTrigger &send_par);
void outgoing_send(const LibItsV2G__TypesAndValues::UtCheck &send_par);
};
} // namespace LibItsV2G__TestSystem
#endif
......@@ -11,67 +11,31 @@
namespace LibItsV2G__TestSystem {
V2Gport::V2Gport(const char *par_port_name)
: V2Gport_BASE(par_port_name)
{
V2Gport::V2Gport(const char *par_port_name) : V2Gport_BASE(par_port_name) {}
}
V2Gport::~V2Gport() {}
V2Gport::~V2Gport()
{
void V2Gport::set_parameter(const char * /*parameter_name*/, const char * /*parameter_value*/) {}
}
/*void V2Gport::Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error) {}*/
void V2Gport::set_parameter(const char * /*parameter_name*/,
const char * /*parameter_value*/)
{
void V2Gport::Handle_Fd_Event_Error(int /*fd*/) {}
}
void V2Gport::Handle_Fd_Event_Writable(int /*fd*/) {}
/*void V2Gport::Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error) {}*/
void V2Gport::Handle_Fd_Event_Readable(int /*fd*/) {}
void V2Gport::Handle_Fd_Event_Error(int /*fd*/)
{
/*void V2Gport::Handle_Timeout(double time_since_last_call) {}*/
}
void V2Gport::user_map(const char * /*system_port*/) {}
void V2Gport::Handle_Fd_Event_Writable(int /*fd*/)
{
void V2Gport::user_unmap(const char * /*system_port*/) {}
}
void V2Gport::user_start() {}
void V2Gport::Handle_Fd_Event_Readable(int /*fd*/)
{
void V2Gport::user_stop() {}
}
/*void V2Gport::Handle_Timeout(double time_since_last_call) {}*/
void V2Gport::user_map(const char * /*system_port*/)
{
}
void V2Gport::user_unmap(const char * /*system_port*/)
{
}
void V2Gport::user_start()
{
}
void V2Gport::user_stop()
{
}
void V2Gport::outgoing_send(const V2Greq& /*send_par*/)
{
}
} /* end of namespace */
void V2Gport::outgoing_send(const V2Greq & /*send_par*/) {}
} // namespace LibItsV2G__TestSystem
......@@ -14,31 +14,30 @@
namespace LibItsV2G__TestSystem {
class V2Gport : public V2Gport_BASE {
public:
V2Gport(const char *par_port_name = NULL);
~V2Gport();
void set_parameter(const char *parameter_name,
const char *parameter_value);
private:
/* void Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error); */
void Handle_Fd_Event_Error(int fd);
void Handle_Fd_Event_Writable(int fd);
void Handle_Fd_Event_Readable(int fd);
/* void Handle_Timeout(double time_since_last_call); */
protected:
void user_map(const char *system_port);
void user_unmap(const char *system_port);
void user_start();
void user_stop();
void outgoing_send(const V2Greq& send_par);
};
} /* end of namespace */
class V2Gport : public V2Gport_BASE {
public:
V2Gport(const char *par_port_name = NULL);
~V2Gport();
void set_parameter(const char *parameter_name, const char *parameter_value);
private:
/* void Handle_Fd_Event(int fd, boolean is_readable,
boolean is_writable, boolean is_error); */
void Handle_Fd_Event_Error(int fd);
void Handle_Fd_Event_Writable(int fd);
void Handle_Fd_Event_Readable(int fd);
/* void Handle_Timeout(double time_since_last_call); */
protected:
void user_map(const char *system_port);
void user_unmap(const char *system_port);
void user_start();
void user_stop();
void outgoing_send(const V2Greq &send_par);
};
} // namespace LibItsV2G__TestSystem
#endif
......@@ -9,118 +9,118 @@
template <typename T_type> class OPTIONAL;
class TTCN_EncDec;
int btp_codec::encode (const LibItsBtp__TypesAndValues::BtpPacket& msg, OCTETSTRING& data)
{
//loggers::get_instance().log_msg(">>> btp_codec::encode: ", (const Base_Type&)msg);
int btp_codec::encode(const LibItsBtp__TypesAndValues::BtpPacket &msg, OCTETSTRING &data) {
// loggers::get_instance().log_msg(">>> btp_codec::encode: ", (const Base_Type&)msg);
TTCN_EncDec::clear_error();
TTCN_Buffer encoding_buffer;
encode_(msg, *msg.get_descriptor(), encoding_buffer);
data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data());
//loggers::get_instance().log_msg("<<< btp_codec::encode: data=", data);
// loggers::get_instance().log_msg("<<< btp_codec::encode: data=", data);
return 0;
}
int btp_codec::encode_ (const Base_Type& type, const TTCN_Typedescriptor_t& field_descriptor, TTCN_Buffer& encoding_buffer)
{
//loggers::get_instance().log(">>> btp_codec::encode_: processing %s/%s", type.get_descriptor()->name, field_descriptor.name);
//loggers::get_instance().log_msg(">>> btp_codec::encode_: ", type);
int btp_codec::encode_(const Base_Type &type, const TTCN_Typedescriptor_t &field_descriptor, TTCN_Buffer &encoding_buffer) {
// loggers::get_instance().log(">>> btp_codec::encode_: processing %s/%s", type.get_descriptor()->name, field_descriptor.name);
// loggers::get_instance().log_msg(">>> btp_codec::encode_: ", type);
if (dynamic_cast<const Record_Type *>(&type) != NULL) {
const Record_Type& r = (const Record_Type &)type;
//loggers::get_instance().log("btp_codec::encode_: processing Record_Type %s", r.get_descriptor()->name);
for(int i = 0; i < r.get_count(); i++) {
//loggers::get_instance().log("btp_codec::encode_: processing %s/%s/%s - %d (1 ==> use dynamic_cast<const OPTIONAL<...>) - %d", r.fld_name(i), r.fld_descr(i)->name, r.get_at(i)->get_descriptor()->name, r.get_at(i)->is_optional(), r.get_at(i)->is_present());
const Record_Type &r = (const Record_Type &)type;
// loggers::get_instance().log("btp_codec::encode_: processing Record_Type %s", r.get_descriptor()->name);
for (int i = 0; i < r.get_count(); i++) {
// loggers::get_instance().log("btp_codec::encode_: processing %s/%s/%s - %d (1 ==> use dynamic_cast<const OPTIONAL<...>) - %d", r.fld_name(i),
// r.fld_descr(i)->name, r.get_at(i)->get_descriptor()->name, r.get_at(i)->is_optional(), r.get_at(i)->is_present());
if (r.get_at(i)->is_present()) {
if (encode_(*r.get_at(i), *r.fld_descr(i), encoding_buffer) == -1) {
//loggers::get_instance().warning("btp_codec::encode_: -1 result code returned");
// loggers::get_instance().warning("btp_codec::encode_: -1 result code returned");
return -1;
}
}
} // End of 'for' statement
} else if (std::string(field_descriptor.name).compare("@LibItsBtp_TypesAndValues.BtpPacket.payload") == 0) {
const OPTIONAL<LibItsBtp__TypesAndValues::BtpRawPayload> &v = dynamic_cast<const OPTIONAL<LibItsBtp__TypesAndValues::BtpRawPayload> &>(type);
//loggers::get_instance().log("btp_codec::encode_: BtpRawPayload present: %d", v.is_present());
// loggers::get_instance().log("btp_codec::encode_: BtpRawPayload present: %d", v.is_present());
if (v.is_present()) {
if (encode_(static_cast<const LibItsBtp__TypesAndValues::BtpRawPayload &>(*v.get_opt_value()), LibItsBtp__TypesAndValues::BtpRawPayload_descr_, encoding_buffer) == -1) {
//loggers::get_instance().warning("btp_codec::encode_: -1 result code returned");
if (encode_(static_cast<const LibItsBtp__TypesAndValues::BtpRawPayload &>(*v.get_opt_value()), LibItsBtp__TypesAndValues::BtpRawPayload_descr_,
encoding_buffer) == -1) {
// loggers::get_instance().warning("btp_codec::encode_: -1 result code returned");
return -1;
}
}
} else {
//loggers::get_instance().log("btp_codec::encode_ (else): processing type %s/%s", type.get_descriptor()->name, field_descriptor.name);
// loggers::get_instance().log("btp_codec::encode_ (else): processing type %s/%s", type.get_descriptor()->name, field_descriptor.name);
type.encode(field_descriptor, encoding_buffer, TTCN_EncDec::CT_RAW);
}
//loggers::get_instance().log_to_hexa("<<<btp_codec::encode_: encoding_buffer=", encoding_buffer);
// loggers::get_instance().log_to_hexa("<<<btp_codec::encode_: encoding_buffer=", encoding_buffer);
return 0;
}
int btp_codec::decode (const OCTETSTRING& data, LibItsBtp__TypesAndValues::BtpPacket& msg, params* params)
{
int btp_codec::decode(const OCTETSTRING &data, LibItsBtp__TypesAndValues::BtpPacket &msg, params *params) {
TTCN_EncDec::clear_error();
TTCN_Buffer decoding_buffer(data);
_params = params;
//loggers::get_instance().log_to_hexa(">>> btp_codec::decode: decoding_buffer=", decoding_buffer);
// loggers::get_instance().log_to_hexa(">>> btp_codec::decode: decoding_buffer=", decoding_buffer);
decode_(msg, *msg.get_descriptor(), decoding_buffer);
//loggers::get_instance().log_msg("<<< btp_codec::decode: ", (const Base_Type&)msg);
// loggers::get_instance().log_msg("<<< btp_codec::decode: ", (const Base_Type&)msg);
return 0;
}
int btp_codec::decode_ (Base_Type& type, const TTCN_Typedescriptor_t& field_descriptor, TTCN_Buffer& decoding_buffer)
{
//loggers::get_instance().log(">>> btp_codec::decode_: processing %s/%s (%d,%d,%p)", type.get_descriptor()->name, field_descriptor.name, decoding_buffer.get_len(), decoding_buffer.get_pos(), decoding_buffer.get_read_data());
int btp_codec::decode_(Base_Type &type, const TTCN_Typedescriptor_t &field_descriptor, TTCN_Buffer &decoding_buffer) {
// loggers::get_instance().log(">>> btp_codec::decode_: processing %s/%s (%d,%d,%p)", type.get_descriptor()->name, field_descriptor.name,
// decoding_buffer.get_len(), decoding_buffer.get_pos(), decoding_buffer.get_read_data());
if (dynamic_cast<Record_Type *>(&type) != NULL) {
Record_Type& r = (Record_Type &)type;
//loggers::get_instance().log("btp_codec::decode_: processing Record_Type %s", r.get_descriptor()->name);
for(int i = 0; i < r.get_count(); i++) {
//loggers::get_instance().log("btp_codec::decode_: processing %s/%s/%s", r.fld_name(i), r.fld_descr(i)->name, r.get_at(i)->get_descriptor()->name);
Record_Type &r = (Record_Type &)type;
// loggers::get_instance().log("btp_codec::decode_: processing Record_Type %s", r.get_descriptor()->name);
for (int i = 0; i < r.get_count(); i++) {
// loggers::get_instance().log("btp_codec::decode_: processing %s/%s/%s", r.fld_name(i), r.fld_descr(i)->name, r.get_at(i)->get_descriptor()->name);
if (decode_(*dynamic_cast<Base_Type *>(r.get_at(i)), *(r.fld_descr(i)), decoding_buffer) == -1) {
return -1;
}
} // End of 'for' statement
} else {
//loggers::get_instance().log("btp_codec::decode_ (else): processing type %s/%s - optional:%d", type.get_descriptor()->name, field_descriptor.name, type.is_optional());
// loggers::get_instance().log("btp_codec::decode_ (else): processing type %s/%s - optional:%d", type.get_descriptor()->name, field_descriptor.name,
// type.is_optional());
if (std::string(field_descriptor.name).compare("@LibItsBtp_TypesAndValues.BtpPacket.header") == 0) {
//loggers::get_instance().log("btp_codec::decode_: _type = %d", _type);
LibItsBtp__TypesAndValues::BtpHeader& b = static_cast<LibItsBtp__TypesAndValues::BtpHeader&>(type);
// loggers::get_instance().log("btp_codec::decode_: _type = %d", _type);
LibItsBtp__TypesAndValues::BtpHeader &b = static_cast<LibItsBtp__TypesAndValues::BtpHeader &>(type);
if (_type == btp_codec::btpA) {
decode_(b.btpAHeader(), *b.btpAHeader().get_descriptor(), decoding_buffer);
if (_params != NULL) {
(*_params)[params::btp_type] = std::string("btpA");
(*_params)[params::btp_type] = std::string("btpA");
(*_params)[params::btp_destination_port] = std::to_string(static_cast<int>(b.btpAHeader().destinationPort()));
}
} else if (_type == btp_codec::btpB) {
decode_(b.btpBHeader(), *b.btpBHeader().get_descriptor(), decoding_buffer);
if (_params != NULL) {
(*_params)[params::btp_type] = std::string("btpB");
(*_params)[params::btp_type] = std::string("btpB");
(*_params)[params::btp_destination_port] = std::to_string(static_cast<int>(b.btpBHeader().destinationPort()));
(*_params)[params::btp_info] = std::to_string(static_cast<int>(b.btpBHeader().destinationPortInfo()));
(*_params)[params::btp_info] = std::to_string(static_cast<int>(b.btpBHeader().destinationPortInfo()));
}
} else {
//loggers::get_instance().error("btp_codec::decode_: Invalid BTP type"); // Cannot be reached
// loggers::get_instance().error("btp_codec::decode_: Invalid BTP type"); // Cannot be reached
}
//loggers::get_instance().log_msg("btp_codec::decode_: BtpHeader: ", type);
// loggers::get_instance().log_msg("btp_codec::decode_: BtpHeader: ", type);
} else if (std::string(field_descriptor.name).compare("@LibItsBtp_TypesAndValues.BtpPacket.payload") == 0) {
if (decoding_buffer.get_len() == decoding_buffer.get_pos()) { // No payload, set it to omit
//loggers::get_instance().log("btp_codec::decode_: Set OPTIONAL<BtpRawPayload> to omit");
// loggers::get_instance().log("btp_codec::decode_: Set OPTIONAL<BtpRawPayload> to omit");
dynamic_cast<OPTIONAL<LibItsBtp__TypesAndValues::BtpRawPayload> &>(type).set_to_omit();
} else {
// Decode BtpRawPayload data structure
OCTETSTRING os(decoding_buffer.get_len() - decoding_buffer.get_pos(), decoding_buffer.get_data() + decoding_buffer.get_pos());
//loggers::get_instance().log_msg("btp_codec::decode_: s=", os);
// loggers::get_instance().log_msg("btp_codec::decode_: s=", os);
if (_params != NULL) {
(*_params)[params::btp_payload] = std::string(static_cast<const char *>(oct2str(os)));
}
if (os.lengthof() != 0) {
dynamic_cast<OPTIONAL<LibItsBtp__TypesAndValues::BtpRawPayload> &>(type) = OPTIONAL<LibItsBtp__TypesAndValues::BtpRawPayload>(os);
//loggers::get_instance().log_msg("btp_codec::decode_: Set OPTIONAL to ", type);
// loggers::get_instance().log_msg("btp_codec::decode_: Set OPTIONAL to ", type);
} else {
//loggers::get_instance().log("btp_codec::decode_: Set OPTIONAL to omit");
// loggers::get_instance().log("btp_codec::decode_: Set OPTIONAL to omit");
dynamic_cast<OPTIONAL<LibItsBtp__TypesAndValues::BtpRawPayload> &>(type).set_to_omit();
}
}
......@@ -129,9 +129,8 @@ int btp_codec::decode_ (Base_Type& type, const TTCN_Typedescriptor_t& field_desc
}
}
//loggers::get_instance().log_msg("<<< btp_codec::decode_: ", type);
//loggers::get_instance().log_to_hexa("<<< btp_codec::decode_: decoding_buffer=", decoding_buffer);
// loggers::get_instance().log_msg("<<< btp_codec::decode_: ", type);
// loggers::get_instance().log_to_hexa("<<< btp_codec::decode_: decoding_buffer=", decoding_buffer);
return 0;
}
......@@ -11,30 +11,27 @@ class TTCN_Buffer;
namespace LibItsBtp__TestSystem {
class BtpReq;
class BtpInd;
}
} // namespace LibItsBtp__TestSystem
namespace LibItsBtp__TypesAndValues {
class BtpPacket;
}
class btp_codec: public codec <
LibItsBtp__TypesAndValues::BtpPacket,
LibItsBtp__TypesAndValues::BtpPacket>
{
int encode_ (const Base_Type& type, const TTCN_Typedescriptor_t& field_descriptor, TTCN_Buffer& encoding_buffer);
class btp_codec : public codec<LibItsBtp__TypesAndValues::BtpPacket, LibItsBtp__TypesAndValues::BtpPacket> {
int encode_(const Base_Type &type, const TTCN_Typedescriptor_t &field_descriptor, TTCN_Buffer &encoding_buffer);
int decode_ (Base_Type& type, const TTCN_Typedescriptor_t& field_descriptor, TTCN_Buffer& decoding_buffer);
int decode_(Base_Type &type, const TTCN_Typedescriptor_t &field_descriptor, TTCN_Buffer &decoding_buffer);
public:
enum BtpType { btpA, btpB };
btp_codec() : codec<LibItsBtp__TypesAndValues::BtpPacket, LibItsBtp__TypesAndValues::BtpPacket>() { _type = btp_codec::btpA; };
virtual ~btp_codec() { };
virtual ~btp_codec(){};
virtual int encode (const LibItsBtp__TypesAndValues::BtpPacket&, OCTETSTRING& data);
virtual int decode (const OCTETSTRING& data, LibItsBtp__TypesAndValues::BtpPacket&, params* params = NULL);
virtual int encode(const LibItsBtp__TypesAndValues::BtpPacket &, OCTETSTRING &data);
virtual int decode(const OCTETSTRING &data, LibItsBtp__TypesAndValues::BtpPacket &, params *params = NULL);
inline void set_btp_type(const btp_codec::BtpType p_btp_type) { _type = p_btp_type; };
private:
BtpType _type;
};
......
......@@ -6,11 +6,12 @@
#include "converter.hh"
btp_layer::btp_layer(const std::string & p_type, const std::string & param) : t_layer<LibItsBtp__TestSystem::BtpPort>(p_type), _params(), _codec(), _device_mode{true} {
btp_layer::btp_layer(const std::string &p_type, const std::string &param)
: t_layer<LibItsBtp__TestSystem::BtpPort>(p_type), _params(), _codec(), _device_mode{true} {
loggers::get_instance().log(">>> btp_layer::btp_layer: %s, %s", to_string().c_str(), param.c_str());
// Setup parameters
params::convert(_params, param);
// Sanity check
params::const_iterator it = _params.find(params::btp_type);
if (it == _params.cend()) {
......@@ -30,9 +31,9 @@ btp_layer::btp_layer(const std::string & p_type, const std::string & param) : t_
}
}
void btp_layer::sendMsg(const LibItsBtp__TestSystem::BtpReq& p, params& params){
void btp_layer::sendMsg(const LibItsBtp__TestSystem::BtpReq &p, params &params) {
loggers::get_instance().log(">>> btp_layer::sendMsg");
//params.log();
// params.log();
// Encode BTP PDU
OCTETSTRING data;
......@@ -40,15 +41,15 @@ void btp_layer::sendMsg(const LibItsBtp__TestSystem::BtpReq& p, params& params){
send_data(data, params);
}
void btp_layer::send_data(OCTETSTRING& data, params& params) {
void btp_layer::send_data(OCTETSTRING &data, params &params) {
loggers::get_instance().log_msg(">>> btp_layer::send_data: ", data);
params.log(); // TODO To be removed
params.log(); // TODO To be removed
_params.log(); // TODO To be removed
if (_device_mode) {
LibItsBtp__TypesAndValues::BtpHeader header;
std::string btp_type;
params::const_iterator it = params.find(params::next_header);
std::string btp_type;
params::const_iterator it = params.find(params::next_header);
if (it != params.cend()) {
btp_type = it->second;
} else {
......@@ -56,39 +57,29 @@ void btp_layer::send_data(OCTETSTRING& data, params& params) {
}
loggers::get_instance().log("btp_layer::send_data: btp_type=%s", btp_type.c_str());
int btp_destination_port = std::stoi(_params[params::btp_destination_port]); // Default value
it = params.find(params::btp_destination_port);
it = params.find(params::btp_destination_port);
if (it != params.cend()) {
btp_destination_port = std::stoi(params[params::btp_destination_port]); // Overwritting default value
}
loggers::get_instance().log("btp_layer::send_data: btp_destination_port=%d", btp_destination_port);
if (btp_type.compare("btpA") == 0) {
header.btpAHeader() = LibItsBtp__TypesAndValues::BtpAHeader(
btp_destination_port,
std::stoi(_params[params::btp_info])
);
header.btpAHeader() = LibItsBtp__TypesAndValues::BtpAHeader(btp_destination_port, std::stoi(_params[params::btp_info]));
} else {
header.btpBHeader() = LibItsBtp__TypesAndValues::BtpBHeader(
btp_destination_port,
std::stoi(_params[params::btp_info])
);
header.btpBHeader() = LibItsBtp__TypesAndValues::BtpBHeader(btp_destination_port, std::stoi(_params[params::btp_info]));
}
LibItsBtp__TypesAndValues::BtpPacket p(
header,
data
);
LibItsBtp__TypesAndValues::BtpPacket p(header, data);
loggers::get_instance().log_msg("btp_layer::send_data: ", p);
// Encode BTP PDU
OCTETSTRING os;
_codec.encode(p, os);
data = os;
}
send_to_all_layers(data, params);
}
void btp_layer::receive_data(OCTETSTRING& data, params& params)
{
void btp_layer::receive_data(OCTETSTRING &data, params &params) {
loggers::get_instance().log_msg(">>> btp_layer::receive_data: ", data);
params.log();
// Decode the payload
......@@ -96,7 +87,8 @@ void btp_layer::receive_data(OCTETSTRING& data, params& params)
loggers::get_instance().log("btp_layer::receive_data: Looking for %s", params::gn_next_header.c_str());
params::const_iterator it = params.find(params::gn_next_header);
if (it != params.cend()) {
loggers::get_instance().log("btp_layer::receive_data: Call set_btp_type with %s/%d", it->second.c_str(), (it->second.compare("2") == 0) ? btp_codec::btpB : btp_codec::btpA);
loggers::get_instance().log("btp_layer::receive_data: Call set_btp_type with %s/%d", it->second.c_str(),
(it->second.compare("2") == 0) ? btp_codec::btpB : btp_codec::btpA);
_codec.set_btp_type((it->second.compare("2") == 0) ? btp_codec::btpB : btp_codec::btpA);
}
_codec.decode(data, p.msgIn(), &params);
......@@ -111,7 +103,7 @@ void btp_layer::receive_data(OCTETSTRING& data, params& params)
loggers::get_instance().warning("btp_layer::receive_data: No payload to pass to upper layers");
}
// Pass it to the ports if any
//params.log();
// params.log();
to_all_upper_ports(p, params);
}
......
......@@ -10,24 +10,24 @@
*/
#pragma once
#include "t_layer.hh"
#include "btp_codec.hh"
#include "t_layer.hh"
namespace LibItsBtp__TestSystem {
class BtpPort; //! Forward declaration of TITAN class
class BtpReq; //! Forward declaration of TITAN class
class BtpInd; //! Forward declaration of TITAN class
}
} // namespace LibItsBtp__TestSystem
/*!
* \class btp_layer
* \brief This class provides description of ITS BTP protocol layer
*/
class btp_layer : public t_layer<LibItsBtp__TestSystem::BtpPort> {
params _params; //! Layer parameters
btp_codec _codec; //! BTP codec
bool _device_mode; //! Set to true if the BTP layer shall encapsulate the upper layer PDU
public: //! \publicsection
params _params; //! Layer parameters
btp_codec _codec; //! BTP codec
bool _device_mode; //! Set to true if the BTP layer shall encapsulate the upper layer PDU
public: //! \publicsection
/*!
* \brief Default constructor
* Create a new instance of the btp_layer class
......@@ -39,8 +39,8 @@ public: //! \publicsection
* \param[in] p_type \todo
* \param[in] p_param \todo
*/
btp_layer(const std::string& p_type, const std::string& param);
virtual ~btp_layer() {};
btp_layer(const std::string &p_type, const std::string &param);
virtual ~btp_layer(){};
/*!
* \fn void sendMsg(const LibItsBtp__TestSystem::BtpReq& p_btp_req, params& p_param);
......@@ -48,8 +48,8 @@ public: //! \publicsection
* \param[in] p_btp_req The BTP message to be sent
* \param[in] p_params Some parameters to overwrite default value of the lower layers parameters
*/
void sendMsg(const LibItsBtp__TestSystem::BtpReq& p_btp_req, params& p_param);
void sendMsg(const LibItsBtp__TestSystem::BtpReq &p_btp_req, params &p_param);
/*!
* \virtual
* \fn void send_data(OCTETSTRING& data, params& params);
......@@ -57,7 +57,7 @@ public: //! \publicsection
* \param[in] p_data The data to be sent
* \param[in] p_params Some parameters to overwrite default value of the lower layers parameters
*/
virtual void send_data(OCTETSTRING& data, params& params);
virtual void send_data(OCTETSTRING &data, params &params);
/*!
* \virtual
* \fn void receive_data(OCTETSTRING& data, params& params);
......@@ -65,6 +65,5 @@ public: //! \publicsection
* \param[in] p_data The bytes formated data received
* \param[in] p_params Some lower layers parameters values when data was received
*/
virtual void receive_data(OCTETSTRING& data, params& info);
virtual void receive_data(OCTETSTRING &data, params &info);
}; // End of class btp_layer
......@@ -20,7 +20,7 @@
*/
class btp_layer_factory : public layer_factory {
static btp_layer_factory _f; //! Reference to the unique instance of this class
public: //! \publicsection
public: //! \publicsection
/*!
* \brief Default constructor
* Create a new instance of the btp_layer_factory class
......@@ -37,8 +37,5 @@ public: //! \publicsection
* \param[in] p_params Optional parameters
* \return 0 on success, -1 otherwise
*/
inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){
return new btp_layer(p_type, p_param);
};
inline virtual layer *create_layer(const std::string &p_type, const std::string &p_param) { return new btp_layer(p_type, p_param); };
}; // End of class btp_layer_factory
......@@ -11,5 +11,5 @@
#pragma once
using namespace std; // Required for isnan()
#include "LibItsBtp_TypesAndValues.hh"
#include "LibItsBtp_TestSystem.hh"
#include "LibItsBtp_TypesAndValues.hh"
#include "LibItsCam_TestSystem.hh"
#include "cam_codec.hh"
#include "LibItsCam_TestSystem.hh"
#include "asn1/asn_application.h" // from asn1c
#include "loggers.hh"
int cam_codec::encode (const CAM__PDU__Descriptions::CAM& cam, OCTETSTRING& data)
{
int cam_codec::encode(const CAM__PDU__Descriptions::CAM &cam, OCTETSTRING &data) {
loggers::get_instance().log(">>> cam_codec::encode");
BITSTRING b;
int rc = asn_codec.encode(cam, b);
if(rc){
int rc = asn_codec.encode(cam, b);
if (rc) {
data = bit2oct(b);
loggers::get_instance().log_msg("cam_codec::encode: ", data);
}
return rc;
}
int cam_codec::decode (const OCTETSTRING& data, CAM__PDU__Descriptions::CAM& cam, params* params)
{
int cam_codec::decode(const OCTETSTRING &data, CAM__PDU__Descriptions::CAM &cam, params *params) {
loggers::get_instance().log_msg(">>> cam_codec::decode: ", data);
int rc = asn_codec.decode(oct2bit(data), cam);
loggers::get_instance().log("cam_codec::decode: ASN.1 codec returned %d", rc);
if(rc) {
if (rc) {
loggers::get_instance().log_msg("cam_codec::decode: ", cam);
}
return rc;
......
#pragma once
#include "codec.hh"
#include "cam_pdu_codec.hh"
#include "codec.hh"
#include "params.hh"
class BITSTRING; //! Forward declaration of TITAN class
......@@ -11,16 +11,13 @@ namespace CAM__PDU__Descriptions { //! Forward declaration of asn1c CAM class
class CAM;
}
class cam_codec : public codec<CAM__PDU__Descriptions::CAM, CAM__PDU__Descriptions::CAM>
{
class cam_codec : public codec<CAM__PDU__Descriptions::CAM, CAM__PDU__Descriptions::CAM> {
cam_pdu_codec asn_codec;
public:
explicit cam_codec() : codec<CAM__PDU__Descriptions::CAM, CAM__PDU__Descriptions::CAM>(), asn_codec() { };
virtual ~cam_codec() { };
explicit cam_codec() : codec<CAM__PDU__Descriptions::CAM, CAM__PDU__Descriptions::CAM>(), asn_codec(){};
virtual ~cam_codec(){};
virtual int encode (const CAM__PDU__Descriptions::CAM& cam, OCTETSTRING& data);
virtual int decode (const OCTETSTRING& data, CAM__PDU__Descriptions::CAM&, params* params = NULL);
virtual int encode(const CAM__PDU__Descriptions::CAM &cam, OCTETSTRING &data);
virtual int decode(const OCTETSTRING &data, CAM__PDU__Descriptions::CAM &, params *params = NULL);
};
......@@ -6,11 +6,11 @@
#include "loggers.hh"
cam_layer::cam_layer(const std::string & p_type, const std::string & param) : t_layer<LibItsCam__TestSystem::CamPort>(p_type), _params(), _codec() {
cam_layer::cam_layer(const std::string &p_type, const std::string &param) : t_layer<LibItsCam__TestSystem::CamPort>(p_type), _params(), _codec() {
loggers::get_instance().log(">>> cam_layer::cam_layer: %s, %s", to_string().c_str(), param.c_str());
// Setup parameters
params::convert(_params, param);
_params.insert(std::make_pair<std::string, std::string>("its_aid", "36")); // ETSI TS 102 965 V1.2.1 (2015-06)
_params.insert(std::make_pair<std::string, std::string>("its_aid", "36")); // ETSI TS 102 965 V1.2.1 (2015-06)
_params.insert(std::make_pair<std::string, std::string>("payload_type", "2")); // CA message id - See ETSI TS 102 894
// Register this object for AdapterControlPort
......@@ -18,9 +18,9 @@ cam_layer::cam_layer(const std::string & p_type, const std::string & param) : t_
registration<cam_layer>::get_instance().add_item(p_type, this);
}
void cam_layer::sendMsg(const LibItsCam__TestSystem::CamReq& p, params& params){
void cam_layer::sendMsg(const LibItsCam__TestSystem::CamReq &p, params &params) {
loggers::get_instance().log_msg(">>> cam_layer::sendMsg: ", p);
// Encode CAM PDU
OCTETSTRING data;
if (_codec.encode(p.msgOut(), data) == -1) {
......@@ -31,23 +31,22 @@ void cam_layer::sendMsg(const LibItsCam__TestSystem::CamReq& p, params& params){
send_data(data, _params);
}
void cam_layer::send_data(OCTETSTRING& data, params& params) {
void cam_layer::send_data(OCTETSTRING &data, params &params) {
loggers::get_instance().log_msg(">>> cam_layer::send_data: ", data);
send_to_all_layers(data, params);
}
void cam_layer::receive_data(OCTETSTRING& data, params& params)
{
void cam_layer::receive_data(OCTETSTRING &data, params &params) {
loggers::get_instance().log_msg(">>> cam_layer::receive_data: ", data);
// Sanity check
if (*(static_cast<const unsigned char*>(data)+ 1) != 0x02) { // Check that received packet has CA message id - See ETSI TS 102 894
if (*(static_cast<const unsigned char *>(data) + 1) != 0x02) { // Check that received packet has CA message id - See ETSI TS 102 894
// Not a CAM message, discard it
loggers::get_instance().warning("cam_layer::receive_data: Wrong message id: 0x%02x", *(static_cast<const unsigned char*>(data)+ 1));
loggers::get_instance().warning("cam_layer::receive_data: Wrong message id: 0x%02x", *(static_cast<const unsigned char *>(data) + 1));
return;
}
// Decode the payload
LibItsCam__TestSystem::CamInd p;
_codec.decode(data, p.msgIn());
......@@ -55,7 +54,7 @@ void cam_layer::receive_data(OCTETSTRING& data, params& params)
// Discard it
return;
} // else, continue
// Process lower layer data
// recvTime
params::const_iterator it = params.find(params::timestamp);
......@@ -128,12 +127,12 @@ void cam_layer::receive_data(OCTETSTRING& data, params& params)
} else {
p.its__aid().set_to_omit();
}
// Pass it to the ports if any
to_all_upper_ports(p, params);
}
int cam_layer::enable_secured_mode(const std::string& p_certificate_id, const boolean p_enforce_security) {
int cam_layer::enable_secured_mode(const std::string &p_certificate_id, const boolean p_enforce_security) {
loggers::get_instance().log(">>> cam_layer::enable_secured_mode: '%s' - %x", p_certificate_id.c_str(), p_enforce_security);
return 0;
......
......@@ -10,39 +10,39 @@
*/
#pragma once
#include "t_layer.hh"
#include "cam_codec.hh"
#include "t_layer.hh"
namespace LibItsCam__TestSystem {
class CamPort; //! Forward declaration of TITAN class
class CamReq; //! Forward declaration of TITAN class
class CamInd; //! Forward declaration of TITAN class
}
} // namespace LibItsCam__TestSystem
/*!
* \class cam_layer
* \brief This class provides description of ITS CAM protocol layer
*/
class cam_layer : public t_layer<LibItsCam__TestSystem::CamPort> {
params _params; //! Layer parameters
cam_codec _codec; //! CAM codec
public: //! \publicsection
params _params; //! Layer parameters
cam_codec _codec; //! CAM codec
public: //! \publicsection
/*!
* \brief Default constructor
* Create a new instance of the cam_layer class
*/
explicit cam_layer() : t_layer<LibItsCam__TestSystem::CamPort>(), _params(), _codec() {};
explicit cam_layer() : t_layer<LibItsCam__TestSystem::CamPort>(), _params(), _codec(){};
/*!
* \brief Specialised constructor
* Create a new instance of the cam_layer class
* \param[in] p_type \todo
* \param[in] p_param \todo
*/
cam_layer(const std::string& p_type, const std::string& param);
cam_layer(const std::string &p_type, const std::string &param);
/*!
* \brief Default destructor
*/
virtual ~cam_layer() {};
virtual ~cam_layer(){};
/*!
* \fn void sendMsg(const LibItsCam__TestSystem::CamReq& p_cam_req, params& p_params);
......@@ -50,7 +50,7 @@ public: //! \publicsection
* \param[in] p_cam_req The CA message to be sent
* \param[in] p_params Some parameters to overwrite default value of the lower layers parameters
*/
void sendMsg(const LibItsCam__TestSystem::CamReq& p_cam_req, params& p_params);
void sendMsg(const LibItsCam__TestSystem::CamReq &p_cam_req, params &p_params);
/*!
* \virtual
......@@ -59,7 +59,7 @@ public: //! \publicsection
* \param[in] p_data The data to be sent
* \param[in] p_params Some parameters to overwrite default value of the lower layers parameters
*/
virtual void send_data(OCTETSTRING& data, params& params);
virtual void send_data(OCTETSTRING &data, params &params);
/*!
* \virtual
* \fn void receive_data(OCTETSTRING& data, params& params);
......@@ -67,11 +67,10 @@ public: //! \publicsection
* \param[in] p_data The bytes formated data received
* \param[in] p_params Some lower layers parameters values when data was received
*/
virtual void receive_data(OCTETSTRING& data, params& info);
virtual void receive_data(OCTETSTRING &data, params &info);
int enable_secured_mode(const std::string& p_certificate_id, const boolean p_enforce_security);
int enable_secured_mode(const std::string &p_certificate_id, const boolean p_enforce_security);
int disable_secured_mode();
}; // End of class cam_layer
......@@ -20,7 +20,7 @@
*/
class cam_layer_factory : public layer_factory {
static cam_layer_factory _f; //! Reference to the unique instance of this class
public: //! \publicsection
public: //! \publicsection
/*!
* \brief Default constructor
* Create a new instance of the cam_layer_factory class
......@@ -37,8 +37,5 @@ public: //! \publicsection
* \param[in] p_params Optional parameters
* \return 0 on success, -1 otherwise
*/
inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){
return new cam_layer(p_type, p_param);
};
inline virtual layer *create_layer(const std::string &p_type, const std::string &p_param) { return new cam_layer(p_type, p_param); };
}; // End of class cam_layer_factory
#include "LibItsCam_TestSystem.hh"
#include "cam_pdu_codec.hh"
#include "LibItsCam_TestSystem.hh"
#include "asn1/asn_application.h" // from asn1c
#include "loggers.hh"
extern "C" {
extern asn_TYPE_descriptor_t asn_DEF_CAM;
extern asn_TYPE_descriptor_t asn_DEF_CAM;
}
int cam_pdu_codec::encode (const CAM__PDU__Descriptions::CAM& p_cam, BITSTRING& p_data)
{
int cam_pdu_codec::encode(const CAM__PDU__Descriptions::CAM &p_cam, BITSTRING &p_data) {
return _encode(CAM__PDU__Descriptions::CAM_descr_, asn_DEF_CAM, p_cam, p_data);
}
int cam_pdu_codec::decode (const BITSTRING& p_data, CAM__PDU__Descriptions::CAM& p_cam)
{
int cam_pdu_codec::decode(const BITSTRING &p_data, CAM__PDU__Descriptions::CAM &p_cam) {
return _decode(CAM__PDU__Descriptions::CAM_descr_, asn_DEF_CAM, p_data, p_cam);
}
#pragma once
#include "codec.hh"
#include "per_codec.hh"
#include "params.hh"
#include "per_codec.hh"
class BITSTRING; //! Forward declaration of TITAN class
class OCTETSTRING; //! Forward declaration of TITAN class
......@@ -11,11 +11,9 @@ namespace CAM__PDU__Descriptions { //! Forward declaration of asn1c CAM class
class CAM;
}
class cam_pdu_codec : public per_codec <CAM__PDU__Descriptions::CAM>
{
class cam_pdu_codec : public per_codec<CAM__PDU__Descriptions::CAM> {
public:
explicit cam_pdu_codec() { };
virtual int encode (const CAM__PDU__Descriptions::CAM& cam, BITSTRING& data);
virtual int decode (const BITSTRING& data, CAM__PDU__Descriptions::CAM&);
explicit cam_pdu_codec(){};
virtual int encode(const CAM__PDU__Descriptions::CAM &cam, BITSTRING &data);
virtual int decode(const BITSTRING &data, CAM__PDU__Descriptions::CAM &);
};