Commit 58fa59c0 authored by Yann Garcia's avatar Yann Garcia
Browse files

Validate AtsIvim

parent 3c844b70
Loading
Loading
Loading
Loading
+101 −60
Original line number Diff line number Diff line
@@ -886,34 +886,99 @@ int ConfigRsuSimulatorLayer::process_ut_ivim_trigger(const OCTETSTRING& data, pa
    LibItsIvim__TypesAndValues::UtIvimTrigger trigger; // See ETSI TR 103 34 099 Cause C.4.1 GenerateIvimEvent
    // Decode ValidityFrom
    if ((flag & 0x8000) == 0x8000) {
      trigger.validFrom() = oct2int(OCTETSTRING(6, p));
      trigger.validFrom() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(6, p)));
    } else {
      trigger.validFrom().set_to_omit();
    }
    p += 6;
    // Decode ValidityTo
    if ((flag & 0x4000) == 0x4000) {
      trigger.validTo() = oct2int(OCTETSTRING(6, p));
      trigger.validTo() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(6, p)));
    } else {
      trigger.validTo().set_to_omit();
    }
    p += 6;
    // Decode RepetitionInterval
    if ((flag & 0x2000) == 0x2000) {
      trigger.repetitionInterval() = oct2int(OCTETSTRING(6, p));
      trigger.repetitionInterval() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(6, p)));
    } else {
      trigger.repetitionInterval().set_to_omit();
    }
    p += 6;
    // Decode zoneIds
    if ((flag & 0x1000) == 0x1000) {
      PreGenRecordOf::PREGEN__RECORD__OF__INTEGER rov;
      rov.set_size(*p++);
      for (int i = 0; i < rov.size_of(); i++) {
        rov[i] = oct2int(OCTETSTRING(1, p++));
      }
      trigger.zoneIds() = OPTIONAL<PreGenRecordOf::PREGEN__RECORD__OF__INTEGER>(rov);
    } else {
      trigger.zoneIds().set_to_omit();
      p += 1;
    }
    // Decode laneNumber
    if ((flag & 0x0800) == 0x0800) {
      trigger.laneNumber() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(1, p)));
    } else {
      trigger.laneNumber().set_to_omit();
    }
    p += 1;
    // Decode relavanceZoneIds
    if ((flag & 0x0400) == 0x0400) {
      PreGenRecordOf::PREGEN__RECORD__OF__INTEGER rov;
      rov.set_size(*p++);
      for (int i = 0; i < rov.size_of(); i++) {
        rov[i] = oct2int(OCTETSTRING(1, p++));
      }
      trigger.relavanceZoneIds() = OPTIONAL<PreGenRecordOf::PREGEN__RECORD__OF__INTEGER>(rov);
    } else {
      trigger.relavanceZoneIds().set_to_omit();
      p += 1;
    }
    // Decode detectionZoneIds
    if ((flag & 0x0200) == 0x0200) {
      PreGenRecordOf::PREGEN__RECORD__OF__INTEGER rov;
      rov.set_size(*p++);
      for (int i = 0; i < rov.size_of(); i++) {
        rov[i] = oct2int(OCTETSTRING(1, p++));
      }
      trigger.detectionZoneIds() = OPTIONAL<PreGenRecordOf::PREGEN__RECORD__OF__INTEGER>(rov);
    } else {
      trigger.detectionZoneIds().set_to_omit();
      p += 1;
    }
    // Decode driverAwarenesZoneIds
    if ((flag & 0x0100) == 0x0100) {
      PreGenRecordOf::PREGEN__RECORD__OF__INTEGER rov;
      rov.set_size(*p++);
      for (int i = 0; i < rov.size_of(); i++) {
        rov[i] = oct2int(OCTETSTRING(1, p++));
      }
      trigger.driverAwarenesZoneIds() = OPTIONAL<PreGenRecordOf::PREGEN__RECORD__OF__INTEGER>(rov);
    } else {
      trigger.driverAwarenesZoneIds().set_to_omit();
      p += 1;
    }
    if ((flag & 0x0080) == 0x0080) {
      CITSapplMgmtIDs::VarLengthNumber v;
      v.content() = oct2int(OCTETSTRING(1, p));
      trigger.itsRrid() = OPTIONAL<CITSapplMgmtIDs::VarLengthNumber>(v);
    } else {
      trigger.itsRrid().set_to_omit();
    }
    p += 1;
    if ((flag & 0x0040) == 0x0040) {
      trigger.directionGic() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(1, p)));
    } else {
      trigger.directionGic().set_to_omit();
    }
    p += 1;
    if ((flag & 0x0020) == 0x0020) {
      trigger.layoutId() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(1, p)));
    } else {
      trigger.layoutId().set_to_omit();
    }
    loggers::get_instance().log_msg("ConfigRsuSimulatorLayer::process_ut_ivim_trigger: ", trigger);

    // Pass it to the ports if any
@@ -942,69 +1007,45 @@ int ConfigRsuSimulatorLayer::process_ut_ivim_update(const OCTETSTRING& data, par
    unsigned char flag = *p++;
    loggers::get_instance().log("ConfigRsuSimulatorLayer::process_ut_ivim_update: flag=%02x", flag);
    LibItsIvim__TypesAndValues::UtIvimUpdate update; // See ETSI TR 103 34 099 Cause C.4.1 GenerateIvimEvent
/*    // Statuion ID
    update.actionId().originatingStationID() = oct2int(OCTETSTRING(4, p));
    p += 4;
    // SequenceNumber
    update.actionId().sequenceNumber() = oct2int(OCTETSTRING(2, p));
    // IviIdentificationNumber
    update.iviIdentificationNumber() = oct2int(OCTETSTRING(2, p));
    p += 2;
    // Decode detectionTime
    update.detectionTime() = oct2int(OCTETSTRING(6, p));
    p += 6;
    // validFrom
    if ((flag & 0x80) == 0x80) {
      update.validityDuration() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(3, p)));
      update.validFrom() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(6, p)));
    } else {
      update.validityDuration().set_to_omit();
      update.validFrom().set_to_omit();
    }
    p += 3;
    // Situation
    p += 6;
    // validTo
    if ((flag & 0x40) == 0x40) {
      DENM__PDU__Descriptions::SituationContainer& s = static_cast<DENM__PDU__Descriptions::SituationContainer &>(*update.get_opt_value());
      s.informationQuality() = oct2int(OCTETSTRING(1, p++));
      s.eventType().causeCode() = oct2int(OCTETSTRING(1, p++));
      s.eventType().subCauseCode() = oct2int(OCTETSTRING(1, p++));
      s.linkedCause().set_to_omit();
      s.eventHistory().set_to_omit();
      update.situation() = OPTIONAL<DENM__PDU__Descriptions::SituationContainer>(s);
      update.validTo() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(6, p)));
    } else {
      update.situation().set_to_omit();
      update.validTo().set_to_omit();
    }
    // Location
    update.location().set_to_omit();
    // RelevanceDistance
    p += 6;
    // timeStamp
    if ((flag & 0x20) == 0x20) {
      update.relevanceDistance() = oct2int(OCTETSTRING(1, p++));
    } else {
      update.relevanceDistance().set_to_omit();
    }
    // RelevanceTrafficDirection
    if ((flag & 0x10) == 0x10) {
      update.relevanceTrafficDirection() = oct2int(OCTETSTRING(1, p++));
      update.timeStamp() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(6, p)));
    } else {
      update.relevanceTrafficDirection().set_to_omit();
      update.timeStamp().set_to_omit();
    }
    if ((flag & 0x08) == 0x08) {
      update.transmissionInterval() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(2, p)));
    } else {
      update.transmissionInterval().set_to_omit();
    p += 6;
    // connectedIviStructures
    if ((flag & 0x01) == 0x01) {
      PreGenRecordOf::PREGEN__RECORD__OF__INTEGER rov;
      rov.set_size(*p++);
      for (int i = 0; i < rov.size_of(); i++) {
        rov[i] = oct2int(OCTETSTRING(4, p));
        p += 4;
      }
    p += 2;
    if ((flag & 0x04) == 0x04) {
      update.repetitionInterval() = OPTIONAL<INTEGER>(oct2int(OCTETSTRING(2, p)));
      update.connectedIviStructures() = OPTIONAL<PreGenRecordOf::PREGEN__RECORD__OF__INTEGER>(rov);
    } else {
      update.repetitionInterval().set_to_omit();
    }
    p += 2;
    // alacarteLength
    INTEGER alacarte_length = oct2int(OCTETSTRING(1, p));
    if (static_cast<int>(alacarte_length) != 0) {
      update.connectedIviStructures().set_to_omit();
      p += 1;
      // FIXME AlacarteContainer alacarte optional
    } else {
      update.alacarte().set_to_omit();
    }
    loggers::get_instance().log_msg("ConfigRsuSimulatorLayer::process_ut_ivim_update: ", update);
*/

    // Pass it to the ports if any
    to_all_upper_ports(update, params);
  } else {
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ void cam_layer::receive_data(OCTETSTRING& data, params& params)
  // recvTime
  params::const_iterator it = params.find(params::timestamp);
  if (it != params.cend()) {
    p.recvTime() = std::stoll(it->second);
    p.recvTime().set_long_long_val(std::stoll(it->second));
  } else {
    p.recvTime().set_to_omit();
  }
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ void denm_layer::receive_data(OCTETSTRING& data, params& params)
  // recvTime
  params::const_iterator it = params.find(params::timestamp);
  if (it != params.cend()) {
    p.recvTime() = std::stoll(it->second);
    p.recvTime().set_long_long_val(std::stoll(it->second));
  } else {
    p.recvTime().set_to_omit();
  }
+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ void ivim_layer::receive_data(OCTETSTRING& data, params& params)
  // recvTime
  params::const_iterator it = params.find(params::timestamp);
  if (it != params.cend()) {
    p.recvTime() = std::stoll(it->second);
    p.recvTime().set_long_long_val(std::stoll(it->second));
  } else {
    p.recvTime().set_to_omit();
  }
+9 −2
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ void mapem_spatem_layer::receive_data(OCTETSTRING& data, params& params)
    // recvTime
    params::const_iterator it = params.find(params::timestamp);
    if (it != params.cend()) {
      p.recvTime() = std::stoll(it->second);
      p.recvTime().set_long_long_val(std::stoll(it->second));
    } else {
      p.recvTime().set_to_omit();
    }
@@ -144,8 +144,15 @@ void mapem_spatem_layer::receive_data(OCTETSTRING& data, params& params)
      return;
    } // else, continue
    // Process lower layer data
    // recvTime
    params::const_iterator it = params.find(params::timestamp);
    if (it != params.cend()) {
      p.recvTime().set_long_long_val(std::stoll(it->second));
    } else {
      p.recvTime().set_to_omit();
    }
    // gnNextHeader
    params::const_iterator it = params.find(params::gn_next_header);
    it = params.find(params::gn_next_header);
    if (it != params.cend()) {
      p.gnNextHeader() = std::stoi(it->second);
    } else {
Loading