Commit 102b4e0c authored by garciay's avatar garciay
Browse files

Review IVIM, MAPEM/SPATEM and SREM/SSEM

parent 44d8da76
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
#include <asn1/asn_application.h>

#include "Codec.hh"
#include "CodecPer.hh"

extern "C" {
  static int asn1c_collect_encoded_data(const void *buffer, size_t size, void *application_specific_key)
@@ -11,7 +11,7 @@ extern "C" {
  }
}

int ASN1Recode::recode(const asn_TYPE_descriptor_s & td, int from, int to, TTCN_Buffer & buf)
int ASN1RecodePer::recode(const asn_TYPE_descriptor_s & td, int from, int to, TTCN_Buffer & buf)
{
  int rc = -1;
  void * ptr = NULL;
@@ -30,12 +30,22 @@ int ASN1Recode::recode(const asn_TYPE_descriptor_s & td, int from, int to, TTCN_
  return rc;
}

int ASN1Recode::ber2per(const asn_TYPE_descriptor_s & td, TTCN_Buffer & buf)
int ASN1RecodePer::ber2per(const asn_TYPE_descriptor_s & td, TTCN_Buffer & buf)
{
  return recode(td, (int)ATS_BER, (int)ATS_UNALIGNED_CANONICAL_PER, buf);
}

int ASN1Recode::per2ber(const asn_TYPE_descriptor_s & td, TTCN_Buffer & buf)
int ASN1RecodePer::per2ber(const asn_TYPE_descriptor_s & td, TTCN_Buffer & buf)
{
  return recode(td, (int)ATS_UNALIGNED_BASIC_PER, (int)ATS_DER, buf);
}

/*int ASN1RecodeOer::ber2oer(const asn_TYPE_descriptor_s & td, TTCN_Buffer & buf)
{
  return recode(td, (int)ATS_XER, (int)ATS_CANONICAL_OER, buf);
}

int ASN1RecodeOer::oer2ber(const asn_TYPE_descriptor_s & td, TTCN_Buffer & buf)
{
  return recodeOer(td, (int)ATS_BASIC_OER, (int)ATS_XER, buf);
  }*/
+65 −0
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ extern "C" int asn1c_collect_encoded_data(const void *buffer, size_t size, void
	return 0;
}

// PER Encoding
#include <ber_decoder.h>
#include <der_encoder.h>
#include <per_encoder.h>
@@ -173,3 +174,67 @@ int asn1c_ber2per(asn_TYPE_descriptor_t &td, const TTCN_Buffer & ber, TTCN_Buffe
    }*/
	return rc;
}

// OER Encoding
#include <xer_decoder.h>
#include <xer_encoder.h>
#include <oer_decoder.h>
#include <oer_encoder.h>

int asn1c_oer2xer(asn_TYPE_descriptor_t &td, const TTCN_Buffer & oer, TTCN_Buffer & xer, void** ctx )
{
	//void** obj = ctx;
	int rc = -1;
	asn_dec_rval_t rc_d;

	rc_d = oer_decode(NULL, 
                    &td, ctx, 
                    oer.get_read_data(), oer.get_read_len());
  
	if(rc_d.code == RC_OK){
		asn_enc_rval_t rc_e;
		xer.clear();
		rc_e = xer_encode(&td,
                      (const asn_oer_constraints_t*)ctx,
                      XER_F_BASIC,
                      asn1c_collect_encoded_data,
                      &xer);
		rc = rc_e.encoded;
	}
	/*if(obj) {
		ASN_STRUCT_FREE(td, obj);
    }*/
	return rc;
}


int asn1c_xer2oer(asn_TYPE_descriptor_t &td, const TTCN_Buffer & xer, TTCN_Buffer & oer, void** ctx )
{
	//void** obj = ctx;
	int rc = -1;
	asn_dec_rval_t rc_d;
	rc_d = xer_decode( NULL, &td,
                     ctx,
                     xer.get_data(), xer.get_len());
	if(rc_d.code == RC_OK){
    loggers::get_instance().log("asn1c_ber2per: XER decoding succeed");
		asn_enc_rval_t rc_e;
		//per.clear();
		rc_e = oer_encode(&td,
                       ctx, 
                       asn1c_collect_encoded_data,
                       &oer);
		rc = rc_e.encoded;
    if(rc < 0) {
      loggers::get_instance().warning("asn1c_ber2per: OER encoding failed");
    }
	} else {
    loggers::get_instance().warning("asn1c_ber2per: XER decoding failed");
    //    td.free_struct(&td, *ctx, 0);
  }
	/*if(obj) {
		ASN_STRUCT_FREE(td, obj);
    }*/
	return rc;
}
+2 −0
Original line number Diff line number Diff line
@@ -81,6 +81,8 @@ TS asn1c2titan_seq(const TA& a)

int asn1c_per2ber(asn_TYPE_descriptor_t &td, const TTCN_Buffer & per, TTCN_Buffer & ber, void** ctx );
int asn1c_ber2per(asn_TYPE_descriptor_t &td, const TTCN_Buffer & ber, TTCN_Buffer & per, void** ctx );
// int asn1c_oer2xer(asn_TYPE_descriptor_t &td, const TTCN_Buffer & oer, TTCN_Buffer & xer, void** ctx );
// int asn1c_xer2oer(asn_TYPE_descriptor_t &td, const TTCN_Buffer & xer, TTCN_Buffer & oer, void** ctx );


#endif
+18 −8
Original line number Diff line number Diff line
@@ -203,23 +203,33 @@ namespace LibItsIvim__EncdecDeclarations {
    return oct2bit(os);
  }

  BITSTRING fx__enc__UtIvimChangePosition (const LibItsIvim__TypesAndValues::UtIvimChangePosition& p_utIvimChangePosition)
  BITSTRING fx__enc__UtIvimTrigger (const LibItsIvim__TypesAndValues::UtIvimTrigger& p_utIvimTrigger)
  {
    loggers::get_instance().log_msg(">>> fx__enc__UtIvimChangePosition: ", p_utIvimChangePosition);
    loggers::get_instance().log_msg(">>> fx__enc__UtIvimTrigger: ", p_utIvimTrigger);
    
    UpperTesterIvimCodec codec;
    OCTETSTRING os;
    codec.encode(p_utIvimChangePosition, os);
    codec.encode(p_utIvimTrigger, os);
    return oct2bit(os);
  }

  BITSTRING fx__enc__UtIvimTrigger (const LibItsIvim__TypesAndValues::UtIvimTrigger& p_utIvimTrigger)
  BITSTRING fx__enc__UtIvimUpdate (const LibItsIvim__TypesAndValues::UtIvimUpdate& p_utIvimUpdate)
  {
    loggers::get_instance().log_msg(">>> fx__enc__UtIvimTrigger: ", p_utIvimTrigger);
    loggers::get_instance().log_msg(">>> fx__enc__UtIvimUpdate: ", p_utIvimUpdate);
    
    UpperTesterIvimCodec codec;
    OCTETSTRING os;
    codec.encode(p_utIvimTrigger, os);
    codec.encode(p_utIvimUpdate, os);
    return oct2bit(os);
  }
 
  BITSTRING fx__enc__UtIvimTermination (const LibItsIvim__TypesAndValues::UtIvimTermination& p_utIvimTermination)
  {
    loggers::get_instance().log_msg(">>> fx__enc__UtIvimTermination: ", p_utIvimTermination);
    
    UpperTesterIvimCodec codec;
    OCTETSTRING os;
    codec.encode(p_utIvimTermination, os);
    return oct2bit(os);
  }
 
+47 −0
Original line number Diff line number Diff line
#include "LibItsSecurity_EncdecDeclarations.hh"

#include "EtsiTs103097Codec.hh"
#include "loggers.hh"

namespace LibItsSecurity__EncdecDeclarations {

  BITSTRING fx__enc__CertificateBase(IEEE1609dot2::CertificateBase const& p_cert) {
    loggers::get_instance().log_msg(">>> fx__enc__CertificateBase: ", p_cert);

    EtsiTs103097Codec codec;
    OCTETSTRING os;
    if (codec.encode(p_cert, os) == -1) {
      loggers::get_instance().warning("fx__enc__CertificateBase: -1 result code was returned");
      return int2bit(0, 1);
    }
    
    return oct2bit(os);
  }
  INTEGER fx__dec__ToBeSignedCertificate(BITSTRING& b, LibItsSecurity__TypesAndValues::ToBeSignedCertificate& p) {
    loggers::get_instance().log_msg(">>> fx__dec__ToBeSignedCertificate: ", b);

    return -1;
  }
            















  /****************************************************
 * @desc    External function to encode a SecuredMessage type
 * @param   value to encode
 * @return  encoded value
 ****************************************************/
// BITSTRING fx__enc__SecuredMessage(const LibItsSecurity__TypesAndValues::SecuredMessage& p)
// {
//   return int2bit(0,8);
// }

/****************************************************
 * @desc    External function to encode a SecuredMessage type
 * @param   value to encode
Loading