Loading ccsrc/Framework/Codec.hh +4 −3 Changes for ccsrc/Framework/Codec.hh: 4 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -34,8 +34,9 @@ template<typename TPDU> class PERCodec : public ASN1Recode public: virtual int encode(const TPDU& msg, BITSTRING& bits) = 0; virtual int decode(const BITSTRING& bits, TPDU& msg) = 0; protected: int _decode (const TTCN_Typedescriptor_t& ttcn, const asn_TYPE_descriptor_s & td, const BITSTRING& p_data, TPDU& msg) { inline int _decode (const TTCN_Typedescriptor_t& ttcn, const asn_TYPE_descriptor_s & td, const BITSTRING& p_data, TPDU& msg) { TTCN_Buffer buf(bit2oct(p_data)); TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING); int rc = per2ber (td, buf); Loading @@ -45,7 +46,7 @@ protected: } return rc; } int _encode (const TTCN_Typedescriptor_t& ttcn, const asn_TYPE_descriptor_s & td, const TPDU& msg, BITSTRING& p_data) { inline int _encode (const TTCN_Typedescriptor_t& ttcn, const asn_TYPE_descriptor_s & td, const TPDU& msg, BITSTRING& p_data) { int rc = -1; TTCN_Buffer buf; TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING); Loading @@ -53,7 +54,7 @@ protected: if (buf.get_len() > 0) { rc = ber2per (td, buf); if (rc > 0) { p_data = p_data + oct2bit(OCTETSTRING(buf.get_len(), buf.get_data())); p_data = oct2bit(OCTETSTRING(buf.get_len(), buf.get_data())); } } return rc; Loading ccsrc/Protocols/CAM/CAMCodec.cc +0 −80 Changes for ccsrc/Protocols/CAM/CAMCodec.cc: 0 added lines, 80 removed lines. Original line number Diff line number Diff line Loading @@ -42,83 +42,3 @@ int CAMPDUCodec::decode (const BITSTRING& p_data, CAM__PDU__Descriptions::CAM& p { return _decode(CAM__PDU__Descriptions::CAM_descr_, asn_DEF_CAM, p_data, p_cam); } /* extern "C" { extern asn_TYPE_descriptor_t asn_DEF_CAM; static int asn1c_collect_encoded_data(const void *buffer, size_t size, void *application_specific_key) { TTCN_Buffer * tb = (TTCN_Buffer *)application_specific_key; tb->put_s(size, (unsigned char *)buffer); return 0; } } int CAMPDUCodec::encode (const CAM__PDU__Descriptions::CAM& p_cam, BITSTRING& p_data) { loggers::get_instance().log_msg(">>> CAMPDUCodec::encode: ", p_cam); int rc = -1; // Encode as BER // Encode message in BER (CER variant, but can be any) TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING); TTCN_Buffer buf; p_cam.encode(CAM__PDU__Descriptions::CAM_descr_, buf, TTCN_EncDec::CT_BER, BER_ENCODE_DER); loggers::get_instance().log_to_hexa("CAMPDUCodec::encode: BER encoding=", buf); // Decode BER void * ptr = NULL; asn_dec_rval_t rc_d; rc_d = asn_decode(NULL, ATS_BER, &asn_DEF_CAM, &ptr, buf.get_data(), buf.get_len()); if(rc_d.code == RC_OK){ // Encode as PER asn_enc_rval_t rc_e; buf.clear(); rc_e = asn_encode(NULL, ATS_UNALIGNED_CANONICAL_PER, &asn_DEF_CAM, ptr, asn1c_collect_encoded_data, &buf); if(rc_e.encoded < 0) { loggers::get_instance().warning("CAMPDUCodec: PER encoding failed"); }else{ rc = rc_e.encoded * 8; p_data = p_data + oct2bit(OCTETSTRING(buf.get_len(), buf.get_data())); } } else { loggers::get_instance().warning("CAMPDUCodec: BER decoding failed"); } if(ptr){ ASN_STRUCT_FREE(asn_DEF_CAM, ptr); } return rc; } int CAMPDUCodec::decode (const BITSTRING& p_data, CAM__PDU__Descriptions::CAM& p_cam) { loggers::get_instance().log(">>> CAMPDUCodec::decode"); int rc = -1; void * ptr = NULL; // Decode UPER OCTETSTRING os = bit2oct(p_data); asn_dec_rval_t rc_d = asn_decode(NULL, ATS_UNALIGNED_BASIC_PER, &asn_DEF_CAM, &ptr, static_cast<const unsigned char*>(os), os.lengthof()); if(rc_d.code == RC_OK) { // Encode BER TTCN_Buffer buf; asn_enc_rval_t rc_e = asn_encode(NULL, ATS_DER, &asn_DEF_CAM, ptr, asn1c_collect_encoded_data, &buf); if (rc_e.encoded >= 0) { loggers::get_instance().log_to_hexa("CAMPDUCodec::decode: PER encoding=", buf); p_cam.decode(CAM__PDU__Descriptions::CAM_descr_, buf, TTCN_EncDec::CT_BER, BER_ACCEPT_ALL); rc = buf.get_len() * 8; loggers::get_instance().log("<<< CAMPDUCodec::decode: %d bits", rc); } else { loggers::get_instance().warning("CAMPDUCodec::decode: BER encoding failure"); } } else { loggers::get_instance().warning("CAMPDUCodec::decode: PER"); } if(ptr){ ASN_STRUCT_FREE(asn_DEF_CAM, ptr); } return rc; } */ No newline at end of file ccsrc/Protocols/DENM/DENMCodec.cc +3 −70 Changes for ccsrc/Protocols/DENM/DENMCodec.cc: 3 added lines, 70 removed lines. Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ int DENMCodec::decode (const OCTETSTRING& p_data, DENM__PDU__Descriptions::DENM& int rc = asnCodec.decode(oct2bit(p_data), p_denm); if(rc > 0) { // TODO: fill other Indication fields loggers::get_instance().log_msg("DENMCodec::decode: ", p_denm); } loggers::get_instance().log("<<< DENMCodec::decode: %d", rc); Loading @@ -33,81 +33,14 @@ int DENMCodec::decode (const OCTETSTRING& p_data, DENM__PDU__Descriptions::DENM& extern "C" { extern asn_TYPE_descriptor_t asn_DEF_DENM; static int asn1c_collect_encoded_data(const void *buffer, size_t size, void *application_specific_key) { TTCN_Buffer * tb = (TTCN_Buffer *)application_specific_key; tb->put_s(size, (unsigned char *)buffer); return 0; } } int DENMPDUCodec::encode (const DENM__PDU__Descriptions::DENM& p_denm, BITSTRING& p_data) { loggers::get_instance().log_msg(">>> DENMPDUCodec::encode: ", p_denm); int rc = -1; TTCN_Buffer buf; // Encode as BER // Encode message in BER (CER variant, but can be any) TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING); p_denm.encode(DENM__PDU__Descriptions::DENM_descr_, buf, TTCN_EncDec::CT_BER, BER_ENCODE_DER); loggers::get_instance().log_to_hexa("DENMPDUCodec::encode: BER encoding=", buf); // Decode BER void *ptr = NULL; asn_dec_rval_t rc_d; rc_d = asn_decode(NULL, ATS_BER, &asn_DEF_DENM, &ptr, buf.get_data(), buf.get_len()); if(rc_d.code == RC_OK){ // Encode as PER asn_enc_rval_t rc_e; buf.clear(); rc_e = asn_encode(NULL, ATS_UNALIGNED_CANONICAL_PER, &asn_DEF_DENM, ptr, asn1c_collect_encoded_data, &buf); if(rc_e.encoded >= 0) { rc = rc_e.encoded; p_data = p_data + oct2bit(OCTETSTRING(buf.get_len(), buf.get_data())); } else { if(rc_e.failed_type) loggers::get_instance().warning("DENMPDUCodec: PER encoding failed on %s", rc_e.failed_type->name); else loggers::get_instance().warning("DENMPDUCodec: PER encoding failed"); } } else { loggers::get_instance().warning("DENMPDUCodec: BER decoding failed"); } if(ptr){ ASN_STRUCT_FREE(asn_DEF_DENM, ptr); } return rc; return _encode(DENM__PDU__Descriptions::DENM_descr_, asn_DEF_DENM, p_denm, p_data); } int DENMPDUCodec::decode (const BITSTRING& p_data, DENM__PDU__Descriptions::DENM& p_denm) { loggers::get_instance().log(">>> DENMPDUCodec::decode"); int rc = -1; void * ptr = NULL; // Decode UPER OCTETSTRING os = bit2oct(p_data); asn_dec_rval_t rc_d = asn_decode(NULL, ATS_UNALIGNED_BASIC_PER, &asn_DEF_DENM, &ptr, static_cast<const unsigned char*>(os), os.lengthof()); if(rc_d.code == RC_OK) { // Encode BER TTCN_Buffer buf; asn_enc_rval_t rc_e; rc_e = asn_encode(NULL, ATS_DER, &asn_DEF_DENM, ptr, asn1c_collect_encoded_data, &buf); if (rc_e.encoded >= 0) { loggers::get_instance().log_to_hexa("DENMPDUCodec::decode: DER encoding=", buf); p_denm.decode(DENM__PDU__Descriptions::DENM_descr_, buf, TTCN_EncDec::CT_BER, BER_ACCEPT_ALL); rc = buf.get_len(); loggers::get_instance().log("<<< DENMPDUCodec::decode: %d bits", rc); } else { loggers::get_instance().warning("DENMPDUCodec::decode: BER encoding failure"); } } else { loggers::get_instance().warning("DENMPDUCodec::decode: PER decoding failed"); } if(ptr){ ASN_STRUCT_FREE(asn_DEF_DENM, ptr); } return rc; return _decode(DENM__PDU__Descriptions::DENM_descr_, asn_DEF_DENM, p_data, p_denm); } Loading
ccsrc/Framework/Codec.hh +4 −3 Changes for ccsrc/Framework/Codec.hh: 4 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -34,8 +34,9 @@ template<typename TPDU> class PERCodec : public ASN1Recode public: virtual int encode(const TPDU& msg, BITSTRING& bits) = 0; virtual int decode(const BITSTRING& bits, TPDU& msg) = 0; protected: int _decode (const TTCN_Typedescriptor_t& ttcn, const asn_TYPE_descriptor_s & td, const BITSTRING& p_data, TPDU& msg) { inline int _decode (const TTCN_Typedescriptor_t& ttcn, const asn_TYPE_descriptor_s & td, const BITSTRING& p_data, TPDU& msg) { TTCN_Buffer buf(bit2oct(p_data)); TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING); int rc = per2ber (td, buf); Loading @@ -45,7 +46,7 @@ protected: } return rc; } int _encode (const TTCN_Typedescriptor_t& ttcn, const asn_TYPE_descriptor_s & td, const TPDU& msg, BITSTRING& p_data) { inline int _encode (const TTCN_Typedescriptor_t& ttcn, const asn_TYPE_descriptor_s & td, const TPDU& msg, BITSTRING& p_data) { int rc = -1; TTCN_Buffer buf; TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING); Loading @@ -53,7 +54,7 @@ protected: if (buf.get_len() > 0) { rc = ber2per (td, buf); if (rc > 0) { p_data = p_data + oct2bit(OCTETSTRING(buf.get_len(), buf.get_data())); p_data = oct2bit(OCTETSTRING(buf.get_len(), buf.get_data())); } } return rc; Loading
ccsrc/Protocols/CAM/CAMCodec.cc +0 −80 Changes for ccsrc/Protocols/CAM/CAMCodec.cc: 0 added lines, 80 removed lines. Original line number Diff line number Diff line Loading @@ -42,83 +42,3 @@ int CAMPDUCodec::decode (const BITSTRING& p_data, CAM__PDU__Descriptions::CAM& p { return _decode(CAM__PDU__Descriptions::CAM_descr_, asn_DEF_CAM, p_data, p_cam); } /* extern "C" { extern asn_TYPE_descriptor_t asn_DEF_CAM; static int asn1c_collect_encoded_data(const void *buffer, size_t size, void *application_specific_key) { TTCN_Buffer * tb = (TTCN_Buffer *)application_specific_key; tb->put_s(size, (unsigned char *)buffer); return 0; } } int CAMPDUCodec::encode (const CAM__PDU__Descriptions::CAM& p_cam, BITSTRING& p_data) { loggers::get_instance().log_msg(">>> CAMPDUCodec::encode: ", p_cam); int rc = -1; // Encode as BER // Encode message in BER (CER variant, but can be any) TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING); TTCN_Buffer buf; p_cam.encode(CAM__PDU__Descriptions::CAM_descr_, buf, TTCN_EncDec::CT_BER, BER_ENCODE_DER); loggers::get_instance().log_to_hexa("CAMPDUCodec::encode: BER encoding=", buf); // Decode BER void * ptr = NULL; asn_dec_rval_t rc_d; rc_d = asn_decode(NULL, ATS_BER, &asn_DEF_CAM, &ptr, buf.get_data(), buf.get_len()); if(rc_d.code == RC_OK){ // Encode as PER asn_enc_rval_t rc_e; buf.clear(); rc_e = asn_encode(NULL, ATS_UNALIGNED_CANONICAL_PER, &asn_DEF_CAM, ptr, asn1c_collect_encoded_data, &buf); if(rc_e.encoded < 0) { loggers::get_instance().warning("CAMPDUCodec: PER encoding failed"); }else{ rc = rc_e.encoded * 8; p_data = p_data + oct2bit(OCTETSTRING(buf.get_len(), buf.get_data())); } } else { loggers::get_instance().warning("CAMPDUCodec: BER decoding failed"); } if(ptr){ ASN_STRUCT_FREE(asn_DEF_CAM, ptr); } return rc; } int CAMPDUCodec::decode (const BITSTRING& p_data, CAM__PDU__Descriptions::CAM& p_cam) { loggers::get_instance().log(">>> CAMPDUCodec::decode"); int rc = -1; void * ptr = NULL; // Decode UPER OCTETSTRING os = bit2oct(p_data); asn_dec_rval_t rc_d = asn_decode(NULL, ATS_UNALIGNED_BASIC_PER, &asn_DEF_CAM, &ptr, static_cast<const unsigned char*>(os), os.lengthof()); if(rc_d.code == RC_OK) { // Encode BER TTCN_Buffer buf; asn_enc_rval_t rc_e = asn_encode(NULL, ATS_DER, &asn_DEF_CAM, ptr, asn1c_collect_encoded_data, &buf); if (rc_e.encoded >= 0) { loggers::get_instance().log_to_hexa("CAMPDUCodec::decode: PER encoding=", buf); p_cam.decode(CAM__PDU__Descriptions::CAM_descr_, buf, TTCN_EncDec::CT_BER, BER_ACCEPT_ALL); rc = buf.get_len() * 8; loggers::get_instance().log("<<< CAMPDUCodec::decode: %d bits", rc); } else { loggers::get_instance().warning("CAMPDUCodec::decode: BER encoding failure"); } } else { loggers::get_instance().warning("CAMPDUCodec::decode: PER"); } if(ptr){ ASN_STRUCT_FREE(asn_DEF_CAM, ptr); } return rc; } */ No newline at end of file
ccsrc/Protocols/DENM/DENMCodec.cc +3 −70 Changes for ccsrc/Protocols/DENM/DENMCodec.cc: 3 added lines, 70 removed lines. Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ int DENMCodec::decode (const OCTETSTRING& p_data, DENM__PDU__Descriptions::DENM& int rc = asnCodec.decode(oct2bit(p_data), p_denm); if(rc > 0) { // TODO: fill other Indication fields loggers::get_instance().log_msg("DENMCodec::decode: ", p_denm); } loggers::get_instance().log("<<< DENMCodec::decode: %d", rc); Loading @@ -33,81 +33,14 @@ int DENMCodec::decode (const OCTETSTRING& p_data, DENM__PDU__Descriptions::DENM& extern "C" { extern asn_TYPE_descriptor_t asn_DEF_DENM; static int asn1c_collect_encoded_data(const void *buffer, size_t size, void *application_specific_key) { TTCN_Buffer * tb = (TTCN_Buffer *)application_specific_key; tb->put_s(size, (unsigned char *)buffer); return 0; } } int DENMPDUCodec::encode (const DENM__PDU__Descriptions::DENM& p_denm, BITSTRING& p_data) { loggers::get_instance().log_msg(">>> DENMPDUCodec::encode: ", p_denm); int rc = -1; TTCN_Buffer buf; // Encode as BER // Encode message in BER (CER variant, but can be any) TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING); p_denm.encode(DENM__PDU__Descriptions::DENM_descr_, buf, TTCN_EncDec::CT_BER, BER_ENCODE_DER); loggers::get_instance().log_to_hexa("DENMPDUCodec::encode: BER encoding=", buf); // Decode BER void *ptr = NULL; asn_dec_rval_t rc_d; rc_d = asn_decode(NULL, ATS_BER, &asn_DEF_DENM, &ptr, buf.get_data(), buf.get_len()); if(rc_d.code == RC_OK){ // Encode as PER asn_enc_rval_t rc_e; buf.clear(); rc_e = asn_encode(NULL, ATS_UNALIGNED_CANONICAL_PER, &asn_DEF_DENM, ptr, asn1c_collect_encoded_data, &buf); if(rc_e.encoded >= 0) { rc = rc_e.encoded; p_data = p_data + oct2bit(OCTETSTRING(buf.get_len(), buf.get_data())); } else { if(rc_e.failed_type) loggers::get_instance().warning("DENMPDUCodec: PER encoding failed on %s", rc_e.failed_type->name); else loggers::get_instance().warning("DENMPDUCodec: PER encoding failed"); } } else { loggers::get_instance().warning("DENMPDUCodec: BER decoding failed"); } if(ptr){ ASN_STRUCT_FREE(asn_DEF_DENM, ptr); } return rc; return _encode(DENM__PDU__Descriptions::DENM_descr_, asn_DEF_DENM, p_denm, p_data); } int DENMPDUCodec::decode (const BITSTRING& p_data, DENM__PDU__Descriptions::DENM& p_denm) { loggers::get_instance().log(">>> DENMPDUCodec::decode"); int rc = -1; void * ptr = NULL; // Decode UPER OCTETSTRING os = bit2oct(p_data); asn_dec_rval_t rc_d = asn_decode(NULL, ATS_UNALIGNED_BASIC_PER, &asn_DEF_DENM, &ptr, static_cast<const unsigned char*>(os), os.lengthof()); if(rc_d.code == RC_OK) { // Encode BER TTCN_Buffer buf; asn_enc_rval_t rc_e; rc_e = asn_encode(NULL, ATS_DER, &asn_DEF_DENM, ptr, asn1c_collect_encoded_data, &buf); if (rc_e.encoded >= 0) { loggers::get_instance().log_to_hexa("DENMPDUCodec::decode: DER encoding=", buf); p_denm.decode(DENM__PDU__Descriptions::DENM_descr_, buf, TTCN_EncDec::CT_BER, BER_ACCEPT_ALL); rc = buf.get_len(); loggers::get_instance().log("<<< DENMPDUCodec::decode: %d bits", rc); } else { loggers::get_instance().warning("DENMPDUCodec::decode: BER encoding failure"); } } else { loggers::get_instance().warning("DENMPDUCodec::decode: PER decoding failed"); } if(ptr){ ASN_STRUCT_FREE(asn_DEF_DENM, ptr); } return rc; return _decode(DENM__PDU__Descriptions::DENM_descr_, asn_DEF_DENM, p_data, p_denm); }