Loading ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc +20 −7 Original line number Diff line number Diff line Loading @@ -3,6 +3,8 @@ #include "loggers.hh" #include "diameter_uar_codec.hh" namespace LibDiameter__EncdecDeclarations { BITSTRING fx__enc__CER__MSG(const LibDiameter__TypesAndValues::CER__MSG& p) { Loading Loading @@ -230,26 +232,37 @@ namespace LibDiameter__EncdecDeclarations { INTEGER fx__dec__DPA__MSG(BITSTRING&, LibDiameter__TypesAndValues::DPA__MSG& p) { return INTEGER(0); } BITSTRING fx__enc__UAR__MSG(const LibDiameter__TypesAndValues::UAR__MSG& p) { loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); loggers::get_instance().log_msg(">>> fx__enc__UAR__MSG: ", p); float duration; std::string tag(" BITSTRING fx__enc__Request"); std::string tag("fx__enc__UAR__MSG"); loggers::get_instance().set_start_time(tag); OCTETSTRING os; // TODO diameter_uar_codec codec; if (codec.encode(p, os) == -1) { loggers::get_instance().warning("fx__enc__UAR__MSG: -1 result code was returned"); return int2bit(0, 1); } loggers::get_instance().set_stop_time(tag, duration); return oct2bit(os); } INTEGER fx__dec__UAR__MSG(BITSTRING&, LibDiameter__TypesAndValues::UAR__MSG& p) { return INTEGER(0); } INTEGER fx__dec__UAR__MSG(BITSTRING& pdu, LibDiameter__TypesAndValues::UAR__MSG& p) { OCTETSTRING os = bit2oct(pdu); diameter_uar_codec codec; codec.decode(os, p); return INTEGER(0); } BITSTRING fx__enc__UAA__MSG(const LibDiameter__TypesAndValues::UAA__MSG& p) { loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); loggers::get_instance().log_msg(">>> BITSTRING fx__enc__UAR__MSG: ", p); float duration; std::string tag(" BITSTRING fx__enc__Request"); std::string tag(" BITSTRING fx__enc__UAR__MSG"); loggers::get_instance().set_start_time(tag); OCTETSTRING os; Loading ccsrc/Protocols/Diameter/avp.cc +80 −0 Original line number Diff line number Diff line Loading @@ -5,3 +5,83 @@ #include "loggers.hh" #include "converter.hh" avp::avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector<unsigned char> p_payload) : _code(p_code), _vendor_specific(p_vendor_specific), _mandatory(p_mandatory), _protected_(p_protected_), _length(p_length), _vendor_id(p_vendor_id), _encoded_length(p_encoded_length), _payload(p_payload), _avp_header(LibDiameter__Types__Base__AVPs::AVP__Header(p_code, LibDiameter__Types__Base__AVPs::AVP__Flags( int2bit(p_vendor_specific, 1), int2bit(p_mandatory, 1), int2bit(p_protected_, 1), int2bit(0, 5)), p_length, (p_vendor_specific == 0) ? OPTIONAL<INTEGER>(OPTIONAL_OMIT) : OPTIONAL<INTEGER>(p_vendor_id))), _enc_avp() { loggers::get_instance().log_msg("avp::avp (1): _avp_header:", _avp_header); loggers::get_instance().log_to_hexa("avp::avp (1): _payload:", _payload.data(), _payload.size()); } // End of ctor avp::avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector<unsigned char> p_payload, const OCTETSTRING& p_enc_avp) : _code(p_code), _vendor_specific(p_vendor_specific), _mandatory(p_mandatory), _protected_(p_protected_), _length(p_length), _vendor_id(p_vendor_id), _encoded_length(p_encoded_length), _payload(p_payload), _avp_header(LibDiameter__Types__Base__AVPs::AVP__Header(p_code, LibDiameter__Types__Base__AVPs::AVP__Flags( int2bit(p_vendor_specific, 1), int2bit(p_mandatory, 1), int2bit(p_protected_, 1), int2bit(0, 5)), p_length, (p_vendor_specific == 0) ? OPTIONAL<INTEGER>(OPTIONAL_OMIT) : OPTIONAL<INTEGER>(p_vendor_id))), _enc_avp(p_enc_avp) { loggers::get_instance().log_msg("avp::avp (2): _avp_header:", _avp_header); loggers::get_instance().log_to_hexa("avp::avp (2): _payload:", _payload.data(), _payload.size()); loggers::get_instance().log_msg("avp::avp (2): _enc_avp:", _enc_avp); } // End of ctor int avp::get_code() const { return _code; } int avp::decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_session_id: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_session_id: _payload:", _payload.data(), _payload.size()); p_avp = LibDiameter__Types__Base__AVPs::Session__Id__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); loggers::get_instance().log_msg("avp::decode_session_id: p_avp:", p_avp); return 0; } int avp::decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_auth_session_state: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_auth_session_state: _payload:", _payload.data(), _payload.size()); // Sanity checks if (_payload.size() != 4) { loggers::get_instance().warning("avp::decode_auth_session_state: Wrong payload length: '%d'", _payload.size()); return -1; } p_avp = LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), LibDiameter__Types__Base__AVPs::Auth__Session__State__Type(_payload[0] << 24 || _payload[1] << 16 || _payload[2] << 8 || _payload[3])); loggers::get_instance().log_msg("avp::decode_auth_session_state: p_avp:", p_avp); return 0; } int avp::decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_origin_host: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_origin_host: _payload:", _payload.data(), _payload.size()); p_avp = LibDiameter__Types__Base__AVPs::Origin__Host__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); loggers::get_instance().log_msg("avp::decode_origin_host: p_avp:", p_avp); return 0; } int avp::decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_origin_realm: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_origin_realm: _payload:", _payload.data(), _payload.size()); p_avp = LibDiameter__Types__Base__AVPs::Origin__Realm__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); loggers::get_instance().log_msg("avp::decode_origin_realm: p_avp:", p_avp); return 0; } int avp::decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_destination_host: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_destination_host: _payload:", _payload.data(), _payload.size()); p_avp = LibDiameter__Types__Base__AVPs::Destination__Host__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); loggers::get_instance().log_msg("avp::decode_destination_host: p_avp:", p_avp); return 0; } int avp::decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_destination_realm: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_destination_realm: _payload:", _payload.data(), _payload.size()); p_avp = LibDiameter__Types__Base__AVPs::Destination__Realm__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); loggers::get_instance().log_msg("avp::decode_destination_realm: p_avp:", p_avp); return 0; } ccsrc/Protocols/Diameter/avp.hh +31 −0 Original line number Diff line number Diff line #pragma once #include <vector> #include <memory> #include "LibDiameter_TypesAndValues.hh" class avp { const int _code; const unsigned char _vendor_specific; const unsigned char _mandatory; const unsigned char _protected_; const int _length; const int _vendor_id; const int _encoded_length; const std::vector<unsigned char> _payload; const OCTETSTRING _enc_avp; const LibDiameter__Types__Base__AVPs::AVP__Header _avp_header; public: avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector<unsigned char> p_payload); avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector<unsigned char> p_payload, const OCTETSTRING& p_enc_avp); virtual ~avp() {}; int get_code() const; int encode_auth_session_state(const LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp, std::unique_ptr<avp>& p_encoded_avp); int decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) const; int decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) const; int decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) const; int decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) const; int decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) const; int decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) const; }; // End of class avp No newline at end of file Loading
ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc +20 −7 Original line number Diff line number Diff line Loading @@ -3,6 +3,8 @@ #include "loggers.hh" #include "diameter_uar_codec.hh" namespace LibDiameter__EncdecDeclarations { BITSTRING fx__enc__CER__MSG(const LibDiameter__TypesAndValues::CER__MSG& p) { Loading Loading @@ -230,26 +232,37 @@ namespace LibDiameter__EncdecDeclarations { INTEGER fx__dec__DPA__MSG(BITSTRING&, LibDiameter__TypesAndValues::DPA__MSG& p) { return INTEGER(0); } BITSTRING fx__enc__UAR__MSG(const LibDiameter__TypesAndValues::UAR__MSG& p) { loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); loggers::get_instance().log_msg(">>> fx__enc__UAR__MSG: ", p); float duration; std::string tag(" BITSTRING fx__enc__Request"); std::string tag("fx__enc__UAR__MSG"); loggers::get_instance().set_start_time(tag); OCTETSTRING os; // TODO diameter_uar_codec codec; if (codec.encode(p, os) == -1) { loggers::get_instance().warning("fx__enc__UAR__MSG: -1 result code was returned"); return int2bit(0, 1); } loggers::get_instance().set_stop_time(tag, duration); return oct2bit(os); } INTEGER fx__dec__UAR__MSG(BITSTRING&, LibDiameter__TypesAndValues::UAR__MSG& p) { return INTEGER(0); } INTEGER fx__dec__UAR__MSG(BITSTRING& pdu, LibDiameter__TypesAndValues::UAR__MSG& p) { OCTETSTRING os = bit2oct(pdu); diameter_uar_codec codec; codec.decode(os, p); return INTEGER(0); } BITSTRING fx__enc__UAA__MSG(const LibDiameter__TypesAndValues::UAA__MSG& p) { loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); loggers::get_instance().log_msg(">>> BITSTRING fx__enc__UAR__MSG: ", p); float duration; std::string tag(" BITSTRING fx__enc__Request"); std::string tag(" BITSTRING fx__enc__UAR__MSG"); loggers::get_instance().set_start_time(tag); OCTETSTRING os; Loading
ccsrc/Protocols/Diameter/avp.cc +80 −0 Original line number Diff line number Diff line Loading @@ -5,3 +5,83 @@ #include "loggers.hh" #include "converter.hh" avp::avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector<unsigned char> p_payload) : _code(p_code), _vendor_specific(p_vendor_specific), _mandatory(p_mandatory), _protected_(p_protected_), _length(p_length), _vendor_id(p_vendor_id), _encoded_length(p_encoded_length), _payload(p_payload), _avp_header(LibDiameter__Types__Base__AVPs::AVP__Header(p_code, LibDiameter__Types__Base__AVPs::AVP__Flags( int2bit(p_vendor_specific, 1), int2bit(p_mandatory, 1), int2bit(p_protected_, 1), int2bit(0, 5)), p_length, (p_vendor_specific == 0) ? OPTIONAL<INTEGER>(OPTIONAL_OMIT) : OPTIONAL<INTEGER>(p_vendor_id))), _enc_avp() { loggers::get_instance().log_msg("avp::avp (1): _avp_header:", _avp_header); loggers::get_instance().log_to_hexa("avp::avp (1): _payload:", _payload.data(), _payload.size()); } // End of ctor avp::avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector<unsigned char> p_payload, const OCTETSTRING& p_enc_avp) : _code(p_code), _vendor_specific(p_vendor_specific), _mandatory(p_mandatory), _protected_(p_protected_), _length(p_length), _vendor_id(p_vendor_id), _encoded_length(p_encoded_length), _payload(p_payload), _avp_header(LibDiameter__Types__Base__AVPs::AVP__Header(p_code, LibDiameter__Types__Base__AVPs::AVP__Flags( int2bit(p_vendor_specific, 1), int2bit(p_mandatory, 1), int2bit(p_protected_, 1), int2bit(0, 5)), p_length, (p_vendor_specific == 0) ? OPTIONAL<INTEGER>(OPTIONAL_OMIT) : OPTIONAL<INTEGER>(p_vendor_id))), _enc_avp(p_enc_avp) { loggers::get_instance().log_msg("avp::avp (2): _avp_header:", _avp_header); loggers::get_instance().log_to_hexa("avp::avp (2): _payload:", _payload.data(), _payload.size()); loggers::get_instance().log_msg("avp::avp (2): _enc_avp:", _enc_avp); } // End of ctor int avp::get_code() const { return _code; } int avp::decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_session_id: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_session_id: _payload:", _payload.data(), _payload.size()); p_avp = LibDiameter__Types__Base__AVPs::Session__Id__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); loggers::get_instance().log_msg("avp::decode_session_id: p_avp:", p_avp); return 0; } int avp::decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_auth_session_state: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_auth_session_state: _payload:", _payload.data(), _payload.size()); // Sanity checks if (_payload.size() != 4) { loggers::get_instance().warning("avp::decode_auth_session_state: Wrong payload length: '%d'", _payload.size()); return -1; } p_avp = LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), LibDiameter__Types__Base__AVPs::Auth__Session__State__Type(_payload[0] << 24 || _payload[1] << 16 || _payload[2] << 8 || _payload[3])); loggers::get_instance().log_msg("avp::decode_auth_session_state: p_avp:", p_avp); return 0; } int avp::decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_origin_host: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_origin_host: _payload:", _payload.data(), _payload.size()); p_avp = LibDiameter__Types__Base__AVPs::Origin__Host__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); loggers::get_instance().log_msg("avp::decode_origin_host: p_avp:", p_avp); return 0; } int avp::decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_origin_realm: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_origin_realm: _payload:", _payload.data(), _payload.size()); p_avp = LibDiameter__Types__Base__AVPs::Origin__Realm__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); loggers::get_instance().log_msg("avp::decode_origin_realm: p_avp:", p_avp); return 0; } int avp::decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_destination_host: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_destination_host: _payload:", _payload.data(), _payload.size()); p_avp = LibDiameter__Types__Base__AVPs::Destination__Host__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); loggers::get_instance().log_msg("avp::decode_destination_host: p_avp:", p_avp); return 0; } int avp::decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) const { loggers::get_instance().log(">>> avp::decode_destination_realm: '%d'", _code); loggers::get_instance().log_to_hexa("avp::decode_destination_realm: _payload:", _payload.data(), _payload.size()); p_avp = LibDiameter__Types__Base__AVPs::Destination__Realm__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); loggers::get_instance().log_msg("avp::decode_destination_realm: p_avp:", p_avp); return 0; }
ccsrc/Protocols/Diameter/avp.hh +31 −0 Original line number Diff line number Diff line #pragma once #include <vector> #include <memory> #include "LibDiameter_TypesAndValues.hh" class avp { const int _code; const unsigned char _vendor_specific; const unsigned char _mandatory; const unsigned char _protected_; const int _length; const int _vendor_id; const int _encoded_length; const std::vector<unsigned char> _payload; const OCTETSTRING _enc_avp; const LibDiameter__Types__Base__AVPs::AVP__Header _avp_header; public: avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector<unsigned char> p_payload); avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector<unsigned char> p_payload, const OCTETSTRING& p_enc_avp); virtual ~avp() {}; int get_code() const; int encode_auth_session_state(const LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp, std::unique_ptr<avp>& p_encoded_avp); int decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) const; int decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) const; int decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) const; int decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) const; int decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) const; int decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) const; }; // End of class avp No newline at end of file