Commit a85d6a6b authored by garciay's avatar garciay
Browse files

STF545: Start ATS development

        Provide ssp in lower layer parameters
parent 03999107
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -102,10 +102,10 @@ void cam_layer::receive_data(OCTETSTRING& data, params& params)
    p.btpInfo().set_to_omit();
  }
  // ssp
  it = params.find(params::ssp);
  it = params.find(_params[params::its_aid]);
  if (it != params.cend()) {
    OCTETSTRING os(it->second.length(), (const unsigned char *)(it->second.c_str()));
    p.ssp() = oct2bit(os);
    loggers::get_instance().log("cam_layer::receive_data: ssp=%s", it->second.c_str());
    p.ssp() = oct2bit(str2oct(CHARSTRING(it->second.c_str())));
  } else {
    p.ssp().set_to_omit();
  }
+3 −3
Original line number Diff line number Diff line
@@ -101,10 +101,10 @@ void denm_layer::receive_data(OCTETSTRING& data, params& params)
    p.btpInfo().set_to_omit();
  }
  // ssp
  it = params.find(params::ssp);
  it = params.find(_params[params::its_aid]);
  if (it != params.cend()) {
    OCTETSTRING os(it->second.length(), (const unsigned char *)(it->second.c_str()));
    p.ssp() = oct2bit(os);
    loggers::get_instance().log("denm_layer::receive_data: ssp=%s", it->second.c_str());
    p.ssp() = oct2bit(str2oct(CHARSTRING(it->second.c_str())));
  } else {
    p.ssp().set_to_omit();
  }
+24 −2
Original line number Diff line number Diff line
@@ -4,6 +4,8 @@
#include "geonetworking_codec.hh"
#include "loggers.hh"

#include "etsi_ts103097_data_codec.hh"

#include "LibItsGeoNetworking_TypesAndValues.hh"

template <typename T_type> class OPTIONAL;
@@ -66,6 +68,10 @@ int geonetworking_codec::encode_ (const Base_Type& type, const TTCN_Typedescript
    for(int i = 0; i < r.get_count(); i++) {
      loggers::get_instance().log("geonetworking_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 ((_ec.basic_header == 0x02) && (std::string(r.fld_descr(i)->name).compare("@LibItsGeoNetworking_TypesAndValues.GeoNetworkingPacket.packet") == 0)) { // Encoding secured GeoNetworking packet, unsecured GN message was already encoded using encvalue
          loggers::get_instance().log("geonetworking_codec::encode_: Skip it");
          continue;
        }
        if (encode_(*r.get_at(i), *r.fld_descr(i), encoding_buffer) == -1) {
          loggers::get_instance().warning("geonetworking_codec::encode_: -1 result code returned");
          return -1;
@@ -95,9 +101,25 @@ int geonetworking_codec::encode_ (const Base_Type& type, const TTCN_Typedescript
        loggers::get_instance().log("geonetworking_codec::encode_: Storing payload length %d for %s", _ec.length, p.get_descriptor()->name);
      }
    }
  } else if (std::string(field_descriptor.name).compare("@EtsiTs103097Module.EtsiTs103097Data") == 0) {
    const EtsiTs103097Module::EtsiTs103097Data& ieee_1609dot2_data = static_cast<const EtsiTs103097Module::EtsiTs103097Data&>(type);
    loggers::get_instance().log_msg("geonetworking_codec::encode_: Encode secured message = ", ieee_1609dot2_data);
    etsi_ts103097_data_codec codec;
    OCTETSTRING os;
    codec.encode(ieee_1609dot2_data, os);
    if (os.lengthof() == 0) {
      loggers::get_instance().warning("geonetworking_codec::encode_: Failed to encode EtsiTs103097Data");
      return -1;
    }
    loggers::get_instance().log_msg("geonetworking_codec::encode_: ", os);
    encoding_buffer.put_string(os);
  } else {
    loggers::get_instance().log("geonetworking_codec::encode_ (else): processing type %s/%s", type.get_descriptor()->name, field_descriptor.name);
    if (std::string(field_descriptor.name).compare("@LibItsGeoNetworking_TypesAndValues.CommonHeader.nextHeader") == 0) {
    if (std::string(field_descriptor.name).compare("@LibItsGeoNetworking_TypesAndValues.BasicHeader.nextHeader") == 0) {
      // Store NextHeader field value and continue encoding
      _ec.basic_header = (unsigned int)dynamic_cast<const Enum_Type &>(type).as_int();
      loggers::get_instance().log("geonetworking_codec::encode_: Storing basic_header %d for %s", _ec.next_header, field_descriptor.name);
    } else if (std::string(field_descriptor.name).compare("@LibItsGeoNetworking_TypesAndValues.CommonHeader.nextHeader") == 0) {
      // Store NextHeader field value and continue encoding
      _ec.next_header = (unsigned int)dynamic_cast<const Enum_Type &>(type).as_int();
      loggers::get_instance().log("geonetworking_codec::encode_: Storing next_header %d for %s", _ec.next_header, field_descriptor.name);
+2 −1
Original line number Diff line number Diff line
@@ -20,12 +20,13 @@ namespace LibItsSecurity__TypesAndValues {
};

struct encoding_context {
  unsigned char basic_header;
  unsigned char next_header;
  unsigned char header_type;
  unsigned int  length_position;
  unsigned int  length;

  encoding_context() { next_header = 0xff; header_type = 0xff; length_position = -1; length = -1; }
  encoding_context() { basic_header = 0xff; next_header = 0xff; header_type = 0xff; length_position = -1; length = -1; }
};
//typedef struct encoding_context encoding_context;

+2 −2
Original line number Diff line number Diff line
@@ -362,10 +362,10 @@ void geonetworking_layer::receive_data(OCTETSTRING& data, params& params) {
    ind.macDestinationAddress() = str2oct(CHARSTRING(_params["mac_bc"].c_str()));
  }
  // 2. ssp
  it = params.find(params::ssp);
  it = params.find(_params[params::its_aid]);
  if (it != params.cend()) {
    loggers::get_instance().log("geonetworking_layer::receive_data: ssp=%s", it->second.c_str());
    ind.ssp() = str2bit(CHARSTRING(it->second.c_str()));
    ind.ssp() = oct2bit(str2oct(CHARSTRING(it->second.c_str())));
  } else {
    ind.ssp().set_to_omit();
  }
Loading