LibItsBtp_Encdec.cc 4.67 KB
Newer Older
#include "LibItsBtp_EncdecDeclarations.hh"

garciay's avatar
garciay committed
#include "BTPCodec.hh"
#include "loggers.hh"

namespace LibItsBtp__EncdecDeclarations {
garciay's avatar
garciay committed
  
  /****************************************************
   * @desc    External function to encode a BtpPayload type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/
  BITSTRING fx__enc__BtpPayload(const LibItsBtp__TypesAndValues::BtpPayload& p)
  {
    return int2bit(0,8);
  }

  /****************************************************
   * @desc    External function to decode a BtpPayload type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/
  /* TODO RGy function not implemented! (decvalue() not used by test suite @29-06-2016)
     INTEGER fx__dec__BtpPayload(BITSTRING& b, LibItsBtp__TypesAndValues::BtpPayload& p)
     {
     return -1;
     }
  */
  /****************************************************
   * @desc    External function to encode a BtpReq type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/
  BITSTRING fx__enc__BtpReq(LibItsBtp__TestSystem::BtpReq const& p_btpReq)
  {
    loggers::get_instance().log_msg(">>> fx__enc__BtpReq: ", p_btpReq);
    
    BTPCodec codec;
    OCTETSTRING os;
    if (codec.encode(p_btpReq.msgOut(), os) == -1) {
      loggers::get_instance().warning("fx__enc__BtpReq: -1 result code was returned");
      return int2bit(0, 1);
    }
    
    return oct2bit(os);
  }

  /****************************************************
   * @desc    External function to decode a BtpReq type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/

  INTEGER fx__dec__BtpReq(BITSTRING& b, LibItsBtp__TestSystem::BtpReq& p)
  {
    loggers::get_instance().log(">>> fx__dec__BtpReq");
    BTPCodec codec;
    LibItsBtp__TypesAndValues::BtpPacket pdu;
    OCTETSTRING is = bit2oct(b);

    if (codec.decode(is, pdu) == -1) {
      loggers::get_instance().warning("fx__dec__BtpReq: -1 result code was returned");
      return -1;
    }
    p.msgOut() = pdu;
    
    return 0;
  }

  /****************************************************
   * @desc    External function to encode a BtpInd type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/
  BITSTRING fx__enc__BtpInd(LibItsBtp__TestSystem::BtpInd const& p_btpInd)
  {
    loggers::get_instance().log_msg(">>> fx__enc__BtpInd: ", p_btpInd);
    
    BTPCodec codec;
    OCTETSTRING os;
    if (codec.encode(p_btpInd.msgIn(), os) == -1) {
      loggers::get_instance().warning("fx__enc__BtpInd: -1 result code was returned");
      return int2bit(0, 1);
    }
    
    return oct2bit(os);
  }

  /****************************************************
   * @desc    External function to decode a BtpInd type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/

  INTEGER fx__dec__BtpInd(BITSTRING& b, LibItsBtp__TestSystem::BtpInd& p_btpInd)
  {
    loggers::get_instance().log(">>> fx__dec__BtpInd");
    BTPCodec codec;
    LibItsBtp__TypesAndValues::BtpPacket pdu;
    OCTETSTRING is = bit2oct(b);

    // Calculate the size of the lower layers information
    if (codec.decode(is, pdu) == -1) {
      loggers::get_instance().warning("fx__dec__BtpInd: -1 result code was returned");
      return -1;
    }
    p_btpInd.msgIn() = pdu;

    loggers::get_instance().log_msg("<<< fx__dec__BtpInd: ", p_btpInd);
    return 0;
  }


  /****************************************************
   * @desc    External function to encode a BtpPacket type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/
  BITSTRING fx__enc__BtpPacket(LibItsBtp__TypesAndValues::BtpPacket const& p_btpPacket)
  {
    loggers::get_instance().log_msg(">>> fx__enc__BtpPacket: ", p_btpPacket);
    
    BTPCodec codec;
    OCTETSTRING os;
    codec.encode(p_btpPacket, os);
    return oct2bit(os);
  }

  /****************************************************
   * @desc    External function to decode a BtpPacket type
   * @param   value to encode
   * @return  encoded value
   ****************************************************/

  INTEGER fx__dec__BtpPacket(BITSTRING& b, LibItsBtp__TypesAndValues::BtpPacket& p_btpPacket)
  {
    loggers::get_instance().log(">>> fx__dec__BtpPacket");
    BTPCodec codec;
    OCTETSTRING is = bit2oct(b);

    if (codec.decode(is, p_btpPacket) == -1) {
      loggers::get_instance().warning("fx__dec__BtpPacket: -1 result code was returned");
      return -1;
    }
    return 0;
  }
filatov's avatar
filatov committed

} //end namespace
filatov's avatar
filatov committed