LibItsRtcmem_Encdec.cc 11.6 KB
Newer Older
Yann Garcia's avatar
Yann Garcia committed
#include <memory>

#include "LibItsRtcmem_EncdecDeclarations.hh"

#include "RtcmemCodec.hh"
#include "UpperTesterRtcmemCodec.hh"
#include "loggers.hh"

namespace LibItsRtcmem__EncdecDeclarations {
  /****************************************************
   * @desc    External function to encode a RtcmemReq type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/
  BITSTRING fx__enc__RtcmemReq(const LibItsRtcmem__TestSystem::RtcmemReq &p_rtcmemReq) {
Yann Garcia's avatar
Yann Garcia committed
    loggers::get_instance().log_msg(">>> fx__enc__RtcmemReq: ", p_rtcmemReq);
Yann Garcia's avatar
Yann Garcia committed
    RtcmemCodec codec;
    OCTETSTRING os;
    if (codec.encode(p_rtcmemReq.msgOut(), os) == -1) {
      loggers::get_instance().warning("fx__enc__RtcmemReq: -1 result code was returned");
      return int2bit(0, 1);
    }
Yann Garcia's avatar
Yann Garcia committed
    return oct2bit(os);
  }

  /****************************************************
   * @desc    External function to decode a DenmReq type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/
  INTEGER fx__dec__RtcmemReq(BITSTRING &b, LibItsRtcmem__TestSystem::RtcmemReq &p) {
Yann Garcia's avatar
Yann Garcia committed
    loggers::get_instance().log(">>> fx__dec__RtcmemReq");

    RtcmemCodec                       codec;
Yann Garcia's avatar
Yann Garcia committed
    RTCMEM__PDU__Descriptions::RTCMEM rtcmem;
    OCTETSTRING                       is = bit2oct(b);
Yann Garcia's avatar
Yann Garcia committed

    if (codec.decode(is, rtcmem) == -1) {
      loggers::get_instance().warning("fx__dec__RtcmemReq: -1 result code was returned");
      return -1;
    }
    p.msgOut() = rtcmem;
Yann Garcia's avatar
Yann Garcia committed
    return 0;
  }

  INTEGER fx__dec__RtcmemInd(BITSTRING &b, LibItsRtcmem__TestSystem::RtcmemInd &p_rtcmemInd) {
Yann Garcia's avatar
Yann Garcia committed
    loggers::get_instance().log(">>> fx__dec__RtcmemInd");

    RtcmemCodec                       codec;
Yann Garcia's avatar
Yann Garcia committed
    RTCMEM__PDU__Descriptions::RTCMEM rtcmem;
    OCTETSTRING                       is = bit2oct(b);
Yann Garcia's avatar
Yann Garcia committed

    // Calculate the size of the lower layers information
    int s = (LibItsRtcmem__TestSystem::RtcmemInd_gnNextHeader_raw_.fieldlength + LibItsRtcmem__TestSystem::RtcmemInd_gnHeaderType_raw_.fieldlength +
             LibItsRtcmem__TestSystem::RtcmemInd_gnHeaderSubtype_raw_.fieldlength + LibItsRtcmem__TestSystem::RtcmemInd_gnLifetime_raw_.fieldlength +
             LibItsRtcmem__TestSystem::RtcmemInd_gnTrafficClass_raw_.fieldlength + LibItsRtcmem__TestSystem::RtcmemInd_btpDestinationPort_raw_.fieldlength +
             LibItsRtcmem__TestSystem::RtcmemInd_btpInfo_raw_.fieldlength + LibItsRtcmem__TestSystem::RtcmemInd_ssp_raw_.fieldlength +
             LibItsRtcmem__TestSystem::RtcmemInd_its__aid_raw_.fieldlength) /
            8;
Yann Garcia's avatar
Yann Garcia committed
    // Decode CA message
    if (codec.decode(OCTETSTRING(is.lengthof() - s, static_cast<const unsigned char *>(is)), rtcmem) == -1) {
      loggers::get_instance().warning("fx__dec__RtcmemInd: -1 result code was returned");
      return -1;
    }
    p_rtcmemInd.msgIn() = rtcmem;
    // Decode lower layer data
    TTCN_Buffer decoding_buffer(OCTETSTRING(s, static_cast<const unsigned char *>(is) + is.lengthof() - s));
    loggers::get_instance().log_to_hexa("fx__dec__RTCMEM: ", decoding_buffer);
    // gnNextHeader
    if (decoding_buffer.get_read_len() < static_cast<size_t>(LibItsRtcmem__TestSystem::RtcmemInd_gnNextHeader_raw_.fieldlength / 8)) {
      p_rtcmemInd.gnNextHeader().set_to_omit();
    } else {
      OCTETSTRING os;
      os.decode(LibItsRtcmem__TestSystem::RtcmemInd_gnNextHeader_descr_, decoding_buffer, TTCN_EncDec::CT_RAW);
      p_rtcmemInd.gnNextHeader() = oct2int(os);
    }
    loggers::get_instance().log_msg("fx__dec__RTCMEM: gnNextHeader=", p_rtcmemInd.gnNextHeader());
    loggers::get_instance().log_to_hexa("fx__dec__RTCMEM: ", decoding_buffer);
    // gnHeaderType
    if (decoding_buffer.get_read_len() < static_cast<size_t>(LibItsRtcmem__TestSystem::RtcmemInd_gnHeaderType_raw_.fieldlength / 8)) {
      p_rtcmemInd.gnHeaderType().set_to_omit();
    } else {
      OCTETSTRING os;
      os.decode(LibItsRtcmem__TestSystem::RtcmemInd_gnHeaderType_descr_, decoding_buffer, TTCN_EncDec::CT_RAW);
      p_rtcmemInd.gnHeaderType() = oct2int(os);
    }
    loggers::get_instance().log_msg("fx__dec__RTCMEM: gnHeaderType=", p_rtcmemInd.gnHeaderType());
    loggers::get_instance().log_to_hexa("fx__dec__RTCMEM: ", decoding_buffer);
    // gnHeaderSubtype
    if (decoding_buffer.get_read_len() < static_cast<size_t>(LibItsRtcmem__TestSystem::RtcmemInd_gnHeaderSubtype_raw_.fieldlength / 8)) {
      p_rtcmemInd.gnHeaderSubtype().set_to_omit();
    } else {
      OCTETSTRING os;
      os.decode(LibItsRtcmem__TestSystem::RtcmemInd_gnHeaderSubtype_descr_, decoding_buffer, TTCN_EncDec::CT_RAW);
      p_rtcmemInd.gnHeaderSubtype() = oct2int(os);
    }
    loggers::get_instance().log_msg("fx__dec__RTCMEM: gnHeaderSubtype=", p_rtcmemInd.gnHeaderSubtype());
    loggers::get_instance().log_to_hexa("fx__dec__RTCMEM: ", decoding_buffer);
    // gnLifetime
    if (decoding_buffer.get_read_len() < static_cast<size_t>(LibItsRtcmem__TestSystem::RtcmemInd_gnLifetime_raw_.fieldlength / 8)) {
      p_rtcmemInd.gnLifetime().set_to_omit();
    } else {
      INTEGER i;
      i.decode(LibItsRtcmem__TestSystem::RtcmemInd_gnLifetime_descr_, decoding_buffer, TTCN_EncDec::CT_RAW);
      p_rtcmemInd.gnLifetime() = i;
    }
    loggers::get_instance().log_msg("fx__dec__RTCMEM: gnLifetime=", p_rtcmemInd.gnLifetime());
    loggers::get_instance().log_to_hexa("fx__dec__RTCMEM: ", decoding_buffer);
    // gnTrafficClass
    if (decoding_buffer.get_read_len() < static_cast<size_t>(LibItsRtcmem__TestSystem::RtcmemInd_gnTrafficClass_raw_.fieldlength / 8)) {
      p_rtcmemInd.gnTrafficClass().set_to_omit();
    } else {
      OCTETSTRING os;
      os.decode(LibItsRtcmem__TestSystem::RtcmemInd_gnTrafficClass_descr_, decoding_buffer, TTCN_EncDec::CT_RAW);
      p_rtcmemInd.gnTrafficClass() = oct2int(os);
    }
    loggers::get_instance().log_msg("fx__dec__RTCMEM: gnTrafficClass=", p_rtcmemInd.gnTrafficClass());
    loggers::get_instance().log_to_hexa("fx__dec__RTCMEM: ", decoding_buffer);
    // btpDestinationPort
    if (decoding_buffer.get_read_len() < static_cast<size_t>(LibItsRtcmem__TestSystem::RtcmemInd_btpDestinationPort_raw_.fieldlength / 8)) {
      p_rtcmemInd.btpDestinationPort().set_to_omit();
    } else {
      INTEGER i;
      i.decode(LibItsRtcmem__TestSystem::RtcmemInd_btpDestinationPort_descr_, decoding_buffer, TTCN_EncDec::CT_RAW);
      p_rtcmemInd.btpDestinationPort() = i;
    }
    loggers::get_instance().log_msg("fx__dec__RTCMEM: btpDestinationPort=", p_rtcmemInd.btpDestinationPort());
    loggers::get_instance().log_to_hexa("fx__dec__RTCMEM: ", decoding_buffer);
    // btpInfo
    if (decoding_buffer.get_read_len() < static_cast<size_t>(LibItsRtcmem__TestSystem::RtcmemInd_btpInfo_raw_.fieldlength / 8)) {
      p_rtcmemInd.btpInfo().set_to_omit();
    } else {
      INTEGER i;
      i.decode(LibItsRtcmem__TestSystem::RtcmemInd_btpInfo_descr_, decoding_buffer, TTCN_EncDec::CT_RAW);
      p_rtcmemInd.btpInfo() = i;
    }
    loggers::get_instance().log_msg("fx__dec__RTCMEM: btpInfo=", p_rtcmemInd.btpInfo());
    loggers::get_instance().log_to_hexa("fx__dec__RTCMEM: ", decoding_buffer);
    // ssp
    if (decoding_buffer.get_read_len() < static_cast<size_t>(LibItsRtcmem__TestSystem::RtcmemInd_ssp_raw_.fieldlength / 8)) {
      p_rtcmemInd.ssp().set_to_omit();
    } else {
      BITSTRING bs;
      bs.decode(LibItsRtcmem__TestSystem::RtcmemInd_ssp_descr_, decoding_buffer, TTCN_EncDec::CT_RAW);
      p_rtcmemInd.ssp() = bs;
    }
    loggers::get_instance().log_msg("fx__dec__RTCMEM: ssp=", p_rtcmemInd.ssp());
    loggers::get_instance().log_to_hexa("fx__dec__RTCMEM: ", decoding_buffer);
    // its__aid
    if (decoding_buffer.get_read_len() < static_cast<size_t>(LibItsRtcmem__TestSystem::RtcmemInd_its__aid_raw_.fieldlength / 8)) {
      p_rtcmemInd.its__aid().set_to_omit();
    } else {
      INTEGER i;
      i.decode(LibItsRtcmem__TestSystem::RtcmemInd_its__aid_descr_, decoding_buffer, TTCN_EncDec::CT_RAW);
      p_rtcmemInd.its__aid() = i;
    }
    loggers::get_instance().log_msg("fx__dec__RTCMEM: its_aid=", p_rtcmemInd.its__aid());
    loggers::get_instance().log_to_hexa("fx__dec__RTCMEM: ", decoding_buffer);
Yann Garcia's avatar
Yann Garcia committed
    return 0;
  }

  BITSTRING fx__enc__RTCMEM(const RTCMEM__PDU__Descriptions::RTCMEM &p_rtcmem) {
Yann Garcia's avatar
Yann Garcia committed
    loggers::get_instance().log_msg(">>> fx__enc__RTCMEM: ", p_rtcmem);
Yann Garcia's avatar
Yann Garcia committed
    RtcmemCodec codec;
    OCTETSTRING os;
    codec.encode(p_rtcmem, os);
    return oct2bit(os);
  }

  INTEGER fx__dec__RTCMEM(BITSTRING &b, RTCMEM__PDU__Descriptions::RTCMEM &p) {
Yann Garcia's avatar
Yann Garcia committed
    loggers::get_instance().log(">>> fx__dec__RTCMEM");
    RtcmemCodec codec;
    OCTETSTRING is = bit2oct(b);

    if (codec.decode(OCTETSTRING(is.lengthof(), static_cast<const unsigned char *>(is)), p) == -1) {
      loggers::get_instance().warning("fx__dec__RTCMEM: -1 result code was returned");
      return -1;
    }
Yann Garcia's avatar
Yann Garcia committed
    return 0;
  }

  BITSTRING fx__enc__UtRtcmemInitialize(const LibItsRtcmem__TypesAndValues::UtRtcmemInitialize &p_utRtcmemInitialize) {
Yann Garcia's avatar
Yann Garcia committed
    loggers::get_instance().log_msg(">>> fx__enc__UtRtcmemInitialize: ", p_utRtcmemInitialize);
Yann Garcia's avatar
Yann Garcia committed
    UpperTesterRtcmemCodec codec;
    OCTETSTRING            os;
Yann Garcia's avatar
Yann Garcia committed
    codec.encode(p_utRtcmemInitialize, os);
    return oct2bit(os);
  }

  BITSTRING fx__enc__UtRtcmemTrigger(const LibItsRtcmem__TypesAndValues::UtRtcmemTrigger &p_utRtcmemTrigger) {
Yann Garcia's avatar
Yann Garcia committed
    loggers::get_instance().log_msg(">>> fx__enc__UtRtcmemTrigger: ", p_utRtcmemTrigger);
Yann Garcia's avatar
Yann Garcia committed
    UpperTesterRtcmemCodec codec;
    OCTETSTRING            os;
Yann Garcia's avatar
Yann Garcia committed
    codec.encode(p_utRtcmemTrigger, os);
    return oct2bit(os);
  }

  BITSTRING fx__enc__UtRtcmemUpdate(const LibItsRtcmem__TypesAndValues::UtRtcmemUpdate &p_utRtcmemUpdate) {
Yann Garcia's avatar
Yann Garcia committed
    loggers::get_instance().log_msg(">>> fx__enc__UtRtcmemUpdate: ", p_utRtcmemUpdate);
Yann Garcia's avatar
Yann Garcia committed
    UpperTesterRtcmemCodec codec;
    OCTETSTRING            os;
Yann Garcia's avatar
Yann Garcia committed
    codec.encode(p_utRtcmemUpdate, os);
    return oct2bit(os);
  }

  BITSTRING fx__enc__UtRtcmemTermination(const LibItsRtcmem__TypesAndValues::UtRtcmemTermination &p_utRtcmemTermination) {
Yann Garcia's avatar
Yann Garcia committed
    loggers::get_instance().log_msg(">>> fx__enc__UtRtcmemTermination: ", p_utRtcmemTermination);
Yann Garcia's avatar
Yann Garcia committed
    UpperTesterRtcmemCodec codec;
    OCTETSTRING            os;
Yann Garcia's avatar
Yann Garcia committed
    codec.encode(p_utRtcmemTermination, os);
    return oct2bit(os);
  }

  /****************************************************
Yann Garcia's avatar
Yann Garcia committed
   * @desc    External function to decode a UtRtcmemResults type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/
  INTEGER fx__dec__UtRtcmemResults(BITSTRING &b, LibItsRtcmem__TypesAndValues::UtRtcmemResults &p) {
Yann Garcia's avatar
Yann Garcia committed
    loggers::get_instance().log(">>> fx__dec__UtRtcmemResults");

    UpperTesterRtcmemCodec     codec;
    OCTETSTRING                is  = bit2oct(b);
Yann Garcia's avatar
Yann Garcia committed
    std::unique_ptr<Base_Type> ptr = codec.decode(is);
    if (ptr == nullptr) {
      loggers::get_instance().warning("fx__dec__UtRtcmemResults: -1 result code was returned");
      return -1;
    }
    p = static_cast<LibItsRtcmem__TypesAndValues::UtRtcmemResults &>(*ptr);
Yann Garcia's avatar
Yann Garcia committed
    return 0;
  }

  /****************************************************
   * @desc    External function to decode a UtRtcmemEventInd type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/
  INTEGER fx__dec__UtRtcmemEventInd(BITSTRING &b, LibItsRtcmem__TypesAndValues::UtRtcmemEventInd &p) {
Yann Garcia's avatar
Yann Garcia committed
    loggers::get_instance().log(">>> fx__dec__UtRtcmemEventInd");

    UpperTesterRtcmemCodec     codec;
    OCTETSTRING                is  = bit2oct(b);
Yann Garcia's avatar
Yann Garcia committed
    std::unique_ptr<Base_Type> ptr = codec.decode(is);
    if (ptr == nullptr) {
      loggers::get_instance().warning("fx__dec__UtRtcmemEventInd: -1 result code was returned");
      return -1;
    }
    p = static_cast<LibItsRtcmem__TypesAndValues::UtRtcmemEventInd &>(*ptr);
Yann Garcia's avatar
Yann Garcia committed
    return 0;
  }

} // namespace LibItsRtcmem__EncdecDeclarations