// This C++ header file was generated by the TTCN-3 compiler
// of the TTCN-3 Test Executor version 11.1.0
// The generation of user and time information were disabled by the -D flag.

// Copyright (c) 2000-2025 Ericsson Telecom AB

// Do not edit this file unless you know what you are doing.

#ifndef DIAMETER__Emulation_HH
#define DIAMETER__Emulation_HH

#ifdef TITAN_RUNTIME_2
#error Generated code does not match with used runtime.\
 Code was generated without -R option but -DTITAN_RUNTIME_2 was used.
#endif

/* Header file includes */

#include <TTCN3.hh>
#include "DIAMETER_CodecPort_CtrlFunct.hh"
#include "DIAMETER_Templates.hh"
#include "SCTP_Templates.hh"

#if TTCN3_VERSION != 110100
#error Version mismatch detected.\
 Please check the version of the TTCN-3 compiler and the base library.\
 Run make clean and rebuild the project if the version of the compiler changed recently.
#endif

#ifndef LINUX
#error This file should be compiled on LINUX
#endif

#undef DIAMETER__Emulation_HH
#endif

namespace DIAMETER__Emulation {

/* Forward declarations of classes */

class DiameterCapabilityExchgInd;
class DiameterCapabilityExchgInd_template;
class DIAMETER__Conn__PT;
class DIAMETER__PT;
class AssociationData;
class AssociationData_template;
class ETEIDData;
class ETEIDData_template;
class ExpectData;
class ExpectData_template;
class DIAMETERCreateCallback;
class DIAMETERCreateCallback_template;
class DIAMETERUnitdataCallback;
class DIAMETERUnitdataCallback_template;
class DIAMETEROps;
class DIAMETEROps_template;
class DIAMETER__conn__parameters;
class DIAMETER__conn__parameters_template;
class ExpectDataE2EID;
class ExpectDataE2EID_template;
class DIAMETEREM__register__eteid_call;
class DIAMETEREM__register__eteid_call_redirect;
class DIAMETEREM__register__eteid_reply;
class DIAMETEREM__register__eteid_reply_redirect;
class DIAMETEREM__register__eteid_template;
class DIAMETEREM__register__imsi_call;
class DIAMETEREM__register__imsi_call_redirect;
class DIAMETEREM__register__imsi_reply;
class DIAMETEREM__register__imsi_reply_redirect;
class DIAMETEREM__register__imsi_template;
class DIAMETEREM__PROC__PT;

} /* end of namespace */

#ifndef DIAMETER__Emulation_HH
#define DIAMETER__Emulation_HH

namespace DIAMETER__Emulation {

/* Type definitions */

typedef HEXSTRING IMSI;
typedef HEXSTRING_template IMSI_template;
typedef COMPONENT DIAMETER__ConnHdlr;
typedef COMPONENT_template DIAMETER__ConnHdlr_template;
typedef COMPONENT DIAMETER__Emulation__CT;
typedef COMPONENT_template DIAMETER__Emulation__CT_template;

/* Class definitions */

class DiameterCapabilityExchgInd {
  DIAMETER__Types::PDU__DIAMETER field_rx;
  DIAMETER__Types::PDU__DIAMETER field_tx;
public:
  DiameterCapabilityExchgInd();
  DiameterCapabilityExchgInd(const DIAMETER__Types::PDU__DIAMETER& par_rx,
    const DIAMETER__Types::PDU__DIAMETER& par_tx);
  DiameterCapabilityExchgInd(const DiameterCapabilityExchgInd& other_value);
  inline boolean is_component() { return FALSE; }
  void clean_up();
const TTCN_Typedescriptor_t* get_descriptor() const;
  DiameterCapabilityExchgInd& operator=(const DiameterCapabilityExchgInd& other_value);
  boolean operator==(const DiameterCapabilityExchgInd& other_value) const;
  inline boolean operator!=(const DiameterCapabilityExchgInd& other_value) const
    { return !(*this == other_value); }

  boolean is_bound() const;

inline boolean is_present() const { return is_bound(); }
  boolean is_value() const;

  inline DIAMETER__Types::PDU__DIAMETER& rx()
    {return field_rx;}
  inline const DIAMETER__Types::PDU__DIAMETER& rx() const
    {return field_rx;}
  inline DIAMETER__Types::PDU__DIAMETER& tx()
    {return field_tx;}
  inline const DIAMETER__Types::PDU__DIAMETER& tx() const
    {return field_tx;}
  inline int size_of() const
    {return 2;}
  void log() const;
  void set_implicit_omit();
  void set_param(Module_Param& param);
  void encode_text(Text_Buf& text_buf) const;
  void decode_text(Text_Buf& text_buf);
};

class DiameterCapabilityExchgInd_template : public Base_Template {
struct single_value_struct;
union {
single_value_struct *single_value;
struct {
unsigned int n_values;
DiameterCapabilityExchgInd_template *list_value;
} value_list;
struct {
DiameterCapabilityExchgInd_template* precondition;
DiameterCapabilityExchgInd_template* implied_template;
} implication_;
dynmatch_struct<DiameterCapabilityExchgInd>* dyn_match;
};

void set_specific();
void copy_value(const DiameterCapabilityExchgInd& other_value);
void copy_template(const DiameterCapabilityExchgInd_template& other_value);

public:
DiameterCapabilityExchgInd_template();
DiameterCapabilityExchgInd_template(template_sel other_value);
DiameterCapabilityExchgInd_template(const DiameterCapabilityExchgInd& other_value);
DiameterCapabilityExchgInd_template(const OPTIONAL<DiameterCapabilityExchgInd>& other_value);
DiameterCapabilityExchgInd_template(DiameterCapabilityExchgInd_template* p_precondition, DiameterCapabilityExchgInd_template* p_implied_template);
DiameterCapabilityExchgInd_template(Dynamic_Match_Interface<DiameterCapabilityExchgInd>* p_dyn_match);
DiameterCapabilityExchgInd_template(const DiameterCapabilityExchgInd_template& other_value);
~DiameterCapabilityExchgInd_template();
DiameterCapabilityExchgInd_template& operator=(template_sel other_value);
DiameterCapabilityExchgInd_template& operator=(const DiameterCapabilityExchgInd& other_value);
DiameterCapabilityExchgInd_template& operator=(const OPTIONAL<DiameterCapabilityExchgInd>& other_value);
DiameterCapabilityExchgInd_template& operator=(const DiameterCapabilityExchgInd_template& other_value);
boolean match(const DiameterCapabilityExchgInd& other_value, boolean legacy = FALSE) const;
boolean is_bound() const;
boolean is_value() const;
void clean_up();
DiameterCapabilityExchgInd valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
DiameterCapabilityExchgInd_template& list_item(unsigned int list_index) const;
DIAMETER__Types::PDU__DIAMETER_template& rx();
const DIAMETER__Types::PDU__DIAMETER_template& rx() const;
DIAMETER__Types::PDU__DIAMETER_template& tx();
const DIAMETER__Types::PDU__DIAMETER_template& tx() const;
int size_of() const;
void log() const;
void log_match(const DiameterCapabilityExchgInd& match_value, boolean legacy = FALSE) const;
  void set_implicit_omit();
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
void set_param(Module_Param& param);
void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const;
boolean is_present(boolean legacy = FALSE) const;
boolean match_omit(boolean legacy = FALSE) const;
};

class DIAMETER__Conn__PT : public PORT {
enum msg_selection { MESSAGE_0 };
struct msg_queue_item : public msg_queue_item_base {
msg_selection item_selection;
union {
DIAMETER__Types::PDU__DIAMETER *message_0;
};
component sender_component;
};

void remove_msg_queue_head();
protected:
void clear_queue();
public:
DIAMETER__Conn__PT(const char *par_port_name = NULL);
~DIAMETER__Conn__PT();
void send(const DIAMETER__Types::PDU__DIAMETER& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Types::PDU__DIAMETER& send_par, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Types::PDU__DIAMETER& send_par, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Types::PDU__DIAMETER_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Types::PDU__DIAMETER_template& send_par, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Types::PDU__DIAMETER_template& send_par, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
public:
alt_status receive(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const DIAMETER__Types::PDU__DIAMETER_template& value_template, DIAMETER__Types::PDU__DIAMETER *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const DIAMETER__Types::PDU__DIAMETER_template& value_template, DIAMETER__Types::PDU__DIAMETER *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const DIAMETER__Types::PDU__DIAMETER_template& value_template, DIAMETER__Types::PDU__DIAMETER *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
private:
void incoming_message(const DIAMETER__Types::PDU__DIAMETER& incoming_par, component sender_component);
protected:
boolean process_message(const char *message_type, Text_Buf& incoming_buf, component sender_component, OCTETSTRING& slider);
};

class DIAMETER__PT : public PORT {
enum msg_selection { MESSAGE_0, MESSAGE_1 };
struct msg_queue_item : public msg_queue_item_base {
msg_selection item_selection;
union {
DIAMETER__Types::PDU__DIAMETER *message_0;
DiameterCapabilityExchgInd *message_1;
};
component sender_component;
};

void remove_msg_queue_head();
protected:
void clear_queue();
public:
DIAMETER__PT(const char *par_port_name = NULL);
~DIAMETER__PT();
void send(const DIAMETER__Types::PDU__DIAMETER& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Types::PDU__DIAMETER& send_par, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Types::PDU__DIAMETER& send_par, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Types::PDU__DIAMETER_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Types::PDU__DIAMETER_template& send_par, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Types::PDU__DIAMETER_template& send_par, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
void send(const DiameterCapabilityExchgInd& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const DiameterCapabilityExchgInd& send_par, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void send(const DiameterCapabilityExchgInd& send_par, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
void send(const DiameterCapabilityExchgInd_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const DiameterCapabilityExchgInd_template& send_par, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void send(const DiameterCapabilityExchgInd_template& send_par, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
public:
alt_status receive(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const DIAMETER__Types::PDU__DIAMETER_template& value_template, DIAMETER__Types::PDU__DIAMETER *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const DIAMETER__Types::PDU__DIAMETER_template& value_template, DIAMETER__Types::PDU__DIAMETER *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const DIAMETER__Types::PDU__DIAMETER_template& value_template, DIAMETER__Types::PDU__DIAMETER *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const DiameterCapabilityExchgInd_template& value_template, DiameterCapabilityExchgInd *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const DiameterCapabilityExchgInd_template& value_template, DiameterCapabilityExchgInd *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const DiameterCapabilityExchgInd_template& value_template, DiameterCapabilityExchgInd *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
private:
void incoming_message(const DIAMETER__Types::PDU__DIAMETER& incoming_par, component sender_component);
void incoming_message(const DiameterCapabilityExchgInd& incoming_par, component sender_component);
protected:
boolean process_message(const char *message_type, Text_Buf& incoming_buf, component sender_component, OCTETSTRING& slider);
};

class AssociationData {
  COMPONENT field_comp__ref;
  OPTIONAL< HEXSTRING > field_imsi;
public:
  AssociationData();
  AssociationData(const COMPONENT& par_comp__ref,
    const OPTIONAL< HEXSTRING >& par_imsi);
  AssociationData(const AssociationData& other_value);
  inline boolean is_component() { return FALSE; }
  void clean_up();
const TTCN_Typedescriptor_t* get_descriptor() const;
  AssociationData& operator=(const AssociationData& other_value);
  boolean operator==(const AssociationData& other_value) const;
  inline boolean operator!=(const AssociationData& other_value) const
    { return !(*this == other_value); }

  boolean is_bound() const;

inline boolean is_present() const { return is_bound(); }
  boolean is_value() const;

  inline COMPONENT& comp__ref()
    {return field_comp__ref;}
  inline const COMPONENT& comp__ref() const
    {return field_comp__ref;}
  inline OPTIONAL< HEXSTRING >& imsi()
    {return field_imsi;}
  inline const OPTIONAL< HEXSTRING >& imsi() const
    {return field_imsi;}
  int size_of() const;
  void log() const;
  void set_implicit_omit();
  void set_param(Module_Param& param);
  void encode_text(Text_Buf& text_buf) const;
  void decode_text(Text_Buf& text_buf);
};

class AssociationData_template : public Base_Template {
struct single_value_struct;
union {
single_value_struct *single_value;
struct {
unsigned int n_values;
AssociationData_template *list_value;
} value_list;
struct {
AssociationData_template* precondition;
AssociationData_template* implied_template;
} implication_;
dynmatch_struct<AssociationData>* dyn_match;
};

void set_specific();
void copy_value(const AssociationData& other_value);
void copy_template(const AssociationData_template& other_value);

public:
AssociationData_template();
AssociationData_template(template_sel other_value);
AssociationData_template(const AssociationData& other_value);
AssociationData_template(const OPTIONAL<AssociationData>& other_value);
AssociationData_template(AssociationData_template* p_precondition, AssociationData_template* p_implied_template);
AssociationData_template(Dynamic_Match_Interface<AssociationData>* p_dyn_match);
AssociationData_template(const AssociationData_template& other_value);
~AssociationData_template();
AssociationData_template& operator=(template_sel other_value);
AssociationData_template& operator=(const AssociationData& other_value);
AssociationData_template& operator=(const OPTIONAL<AssociationData>& other_value);
AssociationData_template& operator=(const AssociationData_template& other_value);
boolean match(const AssociationData& other_value, boolean legacy = FALSE) const;
boolean is_bound() const;
boolean is_value() const;
void clean_up();
AssociationData valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
AssociationData_template& list_item(unsigned int list_index) const;
COMPONENT_template& comp__ref();
const COMPONENT_template& comp__ref() const;
HEXSTRING_template& imsi();
const HEXSTRING_template& imsi() const;
int size_of() const;
void log() const;
void log_match(const AssociationData& match_value, boolean legacy = FALSE) const;
  void set_implicit_omit();
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
void set_param(Module_Param& param);
void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const;
boolean is_present(boolean legacy = FALSE) const;
boolean match_omit(boolean legacy = FALSE) const;
};

class ETEIDData {
  COMPONENT field_comp__ref;
  OPTIONAL< OCTETSTRING > field_ete__id;
public:
  ETEIDData();
  ETEIDData(const COMPONENT& par_comp__ref,
    const OPTIONAL< OCTETSTRING >& par_ete__id);
  ETEIDData(const ETEIDData& other_value);
  inline boolean is_component() { return FALSE; }
  void clean_up();
const TTCN_Typedescriptor_t* get_descriptor() const;
  ETEIDData& operator=(const ETEIDData& other_value);
  boolean operator==(const ETEIDData& other_value) const;
  inline boolean operator!=(const ETEIDData& other_value) const
    { return !(*this == other_value); }

  boolean is_bound() const;

inline boolean is_present() const { return is_bound(); }
  boolean is_value() const;

  inline COMPONENT& comp__ref()
    {return field_comp__ref;}
  inline const COMPONENT& comp__ref() const
    {return field_comp__ref;}
  inline OPTIONAL< OCTETSTRING >& ete__id()
    {return field_ete__id;}
  inline const OPTIONAL< OCTETSTRING >& ete__id() const
    {return field_ete__id;}
  int size_of() const;
  void log() const;
  void set_implicit_omit();
  void set_param(Module_Param& param);
  void encode_text(Text_Buf& text_buf) const;
  void decode_text(Text_Buf& text_buf);
};

class ETEIDData_template : public Base_Template {
struct single_value_struct;
union {
single_value_struct *single_value;
struct {
unsigned int n_values;
ETEIDData_template *list_value;
} value_list;
struct {
ETEIDData_template* precondition;
ETEIDData_template* implied_template;
} implication_;
dynmatch_struct<ETEIDData>* dyn_match;
};

void set_specific();
void copy_value(const ETEIDData& other_value);
void copy_template(const ETEIDData_template& other_value);

public:
ETEIDData_template();
ETEIDData_template(template_sel other_value);
ETEIDData_template(const ETEIDData& other_value);
ETEIDData_template(const OPTIONAL<ETEIDData>& other_value);
ETEIDData_template(ETEIDData_template* p_precondition, ETEIDData_template* p_implied_template);
ETEIDData_template(Dynamic_Match_Interface<ETEIDData>* p_dyn_match);
ETEIDData_template(const ETEIDData_template& other_value);
~ETEIDData_template();
ETEIDData_template& operator=(template_sel other_value);
ETEIDData_template& operator=(const ETEIDData& other_value);
ETEIDData_template& operator=(const OPTIONAL<ETEIDData>& other_value);
ETEIDData_template& operator=(const ETEIDData_template& other_value);
boolean match(const ETEIDData& other_value, boolean legacy = FALSE) const;
boolean is_bound() const;
boolean is_value() const;
void clean_up();
ETEIDData valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
ETEIDData_template& list_item(unsigned int list_index) const;
COMPONENT_template& comp__ref();
const COMPONENT_template& comp__ref() const;
OCTETSTRING_template& ete__id();
const OCTETSTRING_template& ete__id() const;
int size_of() const;
void log() const;
void log_match(const ETEIDData& match_value, boolean legacy = FALSE) const;
  void set_implicit_omit();
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
void set_param(Module_Param& param);
void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const;
boolean is_present(boolean legacy = FALSE) const;
boolean match_omit(boolean legacy = FALSE) const;
};

class ExpectData {
  OPTIONAL< HEXSTRING > field_imsi;
  COMPONENT field_vc__conn;
public:
  ExpectData();
  ExpectData(const OPTIONAL< HEXSTRING >& par_imsi,
    const COMPONENT& par_vc__conn);
  ExpectData(const ExpectData& other_value);
  inline boolean is_component() { return FALSE; }
  void clean_up();
const TTCN_Typedescriptor_t* get_descriptor() const;
  ExpectData& operator=(const ExpectData& other_value);
  boolean operator==(const ExpectData& other_value) const;
  inline boolean operator!=(const ExpectData& other_value) const
    { return !(*this == other_value); }

  boolean is_bound() const;

inline boolean is_present() const { return is_bound(); }
  boolean is_value() const;

  inline OPTIONAL< HEXSTRING >& imsi()
    {return field_imsi;}
  inline const OPTIONAL< HEXSTRING >& imsi() const
    {return field_imsi;}
  inline COMPONENT& vc__conn()
    {return field_vc__conn;}
  inline const COMPONENT& vc__conn() const
    {return field_vc__conn;}
  int size_of() const;
  void log() const;
  void set_implicit_omit();
  void set_param(Module_Param& param);
  void encode_text(Text_Buf& text_buf) const;
  void decode_text(Text_Buf& text_buf);
};

class ExpectData_template : public Base_Template {
struct single_value_struct;
union {
single_value_struct *single_value;
struct {
unsigned int n_values;
ExpectData_template *list_value;
} value_list;
struct {
ExpectData_template* precondition;
ExpectData_template* implied_template;
} implication_;
dynmatch_struct<ExpectData>* dyn_match;
};

void set_specific();
void copy_value(const ExpectData& other_value);
void copy_template(const ExpectData_template& other_value);

public:
ExpectData_template();
ExpectData_template(template_sel other_value);
ExpectData_template(const ExpectData& other_value);
ExpectData_template(const OPTIONAL<ExpectData>& other_value);
ExpectData_template(ExpectData_template* p_precondition, ExpectData_template* p_implied_template);
ExpectData_template(Dynamic_Match_Interface<ExpectData>* p_dyn_match);
ExpectData_template(const ExpectData_template& other_value);
~ExpectData_template();
ExpectData_template& operator=(template_sel other_value);
ExpectData_template& operator=(const ExpectData& other_value);
ExpectData_template& operator=(const OPTIONAL<ExpectData>& other_value);
ExpectData_template& operator=(const ExpectData_template& other_value);
boolean match(const ExpectData& other_value, boolean legacy = FALSE) const;
boolean is_bound() const;
boolean is_value() const;
void clean_up();
ExpectData valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
ExpectData_template& list_item(unsigned int list_index) const;
HEXSTRING_template& imsi();
const HEXSTRING_template& imsi() const;
COMPONENT_template& vc__conn();
const COMPONENT_template& vc__conn() const;
int size_of() const;
void log() const;
void log_match(const ExpectData& match_value, boolean legacy = FALSE) const;
  void set_implicit_omit();
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
void set_param(Module_Param& param);
void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const;
boolean is_present(boolean legacy = FALSE) const;
boolean match_omit(boolean legacy = FALSE) const;
};

class DIAMETERCreateCallback : public Base_Type {
public:
typedef COMPONENT (*function_pointer)(const DIAMETER__Types::PDU__DIAMETER& msg, const HEXSTRING& imsi, const CHARSTRING& id);
typedef void (*start_pointer)(const COMPONENT& component_reference, const DIAMETER__Types::PDU__DIAMETER& msg, const HEXSTRING& imsi, const CHARSTRING& id);
private:
friend class DIAMETERCreateCallback_template;
friend boolean operator==(DIAMETERCreateCallback::function_pointer value, const DIAMETERCreateCallback& other_value);
function_pointer referred_function;
public:
DIAMETERCreateCallback();
DIAMETERCreateCallback(function_pointer other_value);
DIAMETERCreateCallback(const DIAMETERCreateCallback& other_value);
DIAMETERCreateCallback& operator=(function_pointer other_value);
DIAMETERCreateCallback& operator=(const DIAMETERCreateCallback& other_value);
boolean operator==(function_pointer other_value) const;
boolean operator==(const DIAMETERCreateCallback& other_value) const;
inline boolean operator!=(function_pointer other_value) const
{ return !(*this == other_value); }
inline boolean operator!=(const DIAMETERCreateCallback& other_value) const
{ return !(*this == other_value); }

COMPONENT invoke(const DIAMETER__Types::PDU__DIAMETER& msg, const HEXSTRING& imsi, const CHARSTRING& id) const;
void start(const COMPONENT& component_reference, const DIAMETER__Types::PDU__DIAMETER& msg, const HEXSTRING& imsi, const CHARSTRING& id) const;
inline boolean is_bound() const { return referred_function != NULL; }
inline boolean is_value() const { return referred_function != NULL; }
inline void clean_up() { referred_function = NULL; }
inline void must_bound(const char *err_msg) const
{ if (referred_function == NULL) TTCN_error("%s", err_msg); }

inline boolean is_present() const { return is_bound(); }
void log() const;
void set_param(Module_Param& param);
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
};

extern boolean operator==(DIAMETERCreateCallback::function_pointer value, const DIAMETERCreateCallback& other_value);
inline boolean operator!=(DIAMETERCreateCallback::function_pointer value, const DIAMETERCreateCallback& other_value)
{ return !(value == other_value); } 

class DIAMETERCreateCallback_template : public Base_Template {
union {
DIAMETERCreateCallback::function_pointer single_value;
struct {
unsigned int n_values;
DIAMETERCreateCallback_template *list_value;
} value_list;
};

  void copy_template(const DIAMETERCreateCallback_template& other_value);
public:
DIAMETERCreateCallback_template();
DIAMETERCreateCallback_template(template_sel other_value);
DIAMETERCreateCallback_template(DIAMETERCreateCallback::function_pointer other_value);
DIAMETERCreateCallback_template(const DIAMETERCreateCallback& other_value);
DIAMETERCreateCallback_template(const OPTIONAL<DIAMETERCreateCallback>& other_value);
DIAMETERCreateCallback_template(const DIAMETERCreateCallback_template& other_value);
~DIAMETERCreateCallback_template();
void clean_up();
DIAMETERCreateCallback_template& operator=(template_sel other_value);
DIAMETERCreateCallback_template& operator=(DIAMETERCreateCallback::function_pointer other_value);
DIAMETERCreateCallback_template& operator=(const DIAMETERCreateCallback& other_value);
DIAMETERCreateCallback_template& operator=(const OPTIONAL<DIAMETERCreateCallback>& other_value);
DIAMETERCreateCallback_template& operator=(const DIAMETERCreateCallback_template& other_value);
boolean match(DIAMETERCreateCallback::function_pointer other_value, boolean legacy = FALSE) const;
boolean match(const DIAMETERCreateCallback& other_value, boolean legacy = FALSE) const;
DIAMETERCreateCallback valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
DIAMETERCreateCallback_template& list_item(unsigned int list_index) const;
void log() const;
void log_match(const DIAMETERCreateCallback& match_value, boolean legacy = FALSE) const;
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
boolean is_present(boolean legacy = FALSE) const;
boolean match_omit(boolean legacy = FALSE) const;
void set_param(Module_Param& param);
void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const;
};

class DIAMETERUnitdataCallback : public Base_Type {
public:
typedef DIAMETER__Types::PDU__DIAMETER_template (*function_pointer)(const DIAMETER__Types::PDU__DIAMETER& msg);
typedef void (*start_pointer)(const COMPONENT& component_reference, const DIAMETER__Types::PDU__DIAMETER& msg);
private:
friend class DIAMETERUnitdataCallback_template;
friend boolean operator==(DIAMETERUnitdataCallback::function_pointer value, const DIAMETERUnitdataCallback& other_value);
function_pointer referred_function;
public:
DIAMETERUnitdataCallback();
DIAMETERUnitdataCallback(function_pointer other_value);
DIAMETERUnitdataCallback(const DIAMETERUnitdataCallback& other_value);
DIAMETERUnitdataCallback& operator=(function_pointer other_value);
DIAMETERUnitdataCallback& operator=(const DIAMETERUnitdataCallback& other_value);
boolean operator==(function_pointer other_value) const;
boolean operator==(const DIAMETERUnitdataCallback& other_value) const;
inline boolean operator!=(function_pointer other_value) const
{ return !(*this == other_value); }
inline boolean operator!=(const DIAMETERUnitdataCallback& other_value) const
{ return !(*this == other_value); }

DIAMETER__Types::PDU__DIAMETER_template invoke(const DIAMETER__Types::PDU__DIAMETER& msg) const;
void start(const COMPONENT& component_reference, const DIAMETER__Types::PDU__DIAMETER& msg) const;
inline boolean is_bound() const { return referred_function != NULL; }
inline boolean is_value() const { return referred_function != NULL; }
inline void clean_up() { referred_function = NULL; }
inline void must_bound(const char *err_msg) const
{ if (referred_function == NULL) TTCN_error("%s", err_msg); }

inline boolean is_present() const { return is_bound(); }
void log() const;
void set_param(Module_Param& param);
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
};

extern boolean operator==(DIAMETERUnitdataCallback::function_pointer value, const DIAMETERUnitdataCallback& other_value);
inline boolean operator!=(DIAMETERUnitdataCallback::function_pointer value, const DIAMETERUnitdataCallback& other_value)
{ return !(value == other_value); } 

class DIAMETERUnitdataCallback_template : public Base_Template {
union {
DIAMETERUnitdataCallback::function_pointer single_value;
struct {
unsigned int n_values;
DIAMETERUnitdataCallback_template *list_value;
} value_list;
};

  void copy_template(const DIAMETERUnitdataCallback_template& other_value);
public:
DIAMETERUnitdataCallback_template();
DIAMETERUnitdataCallback_template(template_sel other_value);
DIAMETERUnitdataCallback_template(DIAMETERUnitdataCallback::function_pointer other_value);
DIAMETERUnitdataCallback_template(const DIAMETERUnitdataCallback& other_value);
DIAMETERUnitdataCallback_template(const OPTIONAL<DIAMETERUnitdataCallback>& other_value);
DIAMETERUnitdataCallback_template(const DIAMETERUnitdataCallback_template& other_value);
~DIAMETERUnitdataCallback_template();
void clean_up();
DIAMETERUnitdataCallback_template& operator=(template_sel other_value);
DIAMETERUnitdataCallback_template& operator=(DIAMETERUnitdataCallback::function_pointer other_value);
DIAMETERUnitdataCallback_template& operator=(const DIAMETERUnitdataCallback& other_value);
DIAMETERUnitdataCallback_template& operator=(const OPTIONAL<DIAMETERUnitdataCallback>& other_value);
DIAMETERUnitdataCallback_template& operator=(const DIAMETERUnitdataCallback_template& other_value);
boolean match(DIAMETERUnitdataCallback::function_pointer other_value, boolean legacy = FALSE) const;
boolean match(const DIAMETERUnitdataCallback& other_value, boolean legacy = FALSE) const;
DIAMETERUnitdataCallback valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
DIAMETERUnitdataCallback_template& list_item(unsigned int list_index) const;
void log() const;
void log_match(const DIAMETERUnitdataCallback& match_value, boolean legacy = FALSE) const;
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
boolean is_present(boolean legacy = FALSE) const;
boolean match_omit(boolean legacy = FALSE) const;
void set_param(Module_Param& param);
void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const;
};

class DIAMETEROps {
  DIAMETERCreateCallback field_create__cb;
  DIAMETERUnitdataCallback field_unitdata__cb;
  BOOLEAN field_raw;
public:
  DIAMETEROps();
  DIAMETEROps(const DIAMETERCreateCallback& par_create__cb,
    const DIAMETERUnitdataCallback& par_unitdata__cb,
    const BOOLEAN& par_raw);
  DIAMETEROps(const DIAMETEROps& other_value);
  inline boolean is_component() { return FALSE; }
  void clean_up();
const TTCN_Typedescriptor_t* get_descriptor() const;
  DIAMETEROps& operator=(const DIAMETEROps& other_value);
  boolean operator==(const DIAMETEROps& other_value) const;
  inline boolean operator!=(const DIAMETEROps& other_value) const
    { return !(*this == other_value); }

  boolean is_bound() const;

inline boolean is_present() const { return is_bound(); }
  boolean is_value() const;

  inline DIAMETERCreateCallback& create__cb()
    {return field_create__cb;}
  inline const DIAMETERCreateCallback& create__cb() const
    {return field_create__cb;}
  inline DIAMETERUnitdataCallback& unitdata__cb()
    {return field_unitdata__cb;}
  inline const DIAMETERUnitdataCallback& unitdata__cb() const
    {return field_unitdata__cb;}
  inline BOOLEAN& raw()
    {return field_raw;}
  inline const BOOLEAN& raw() const
    {return field_raw;}
  inline int size_of() const
    {return 3;}
  void log() const;
  void set_implicit_omit();
  void set_param(Module_Param& param);
  void encode_text(Text_Buf& text_buf) const;
  void decode_text(Text_Buf& text_buf);
};

class DIAMETEROps_template : public Base_Template {
struct single_value_struct;
union {
single_value_struct *single_value;
struct {
unsigned int n_values;
DIAMETEROps_template *list_value;
} value_list;
struct {
DIAMETEROps_template* precondition;
DIAMETEROps_template* implied_template;
} implication_;
dynmatch_struct<DIAMETEROps>* dyn_match;
};

void set_specific();
void copy_value(const DIAMETEROps& other_value);
void copy_template(const DIAMETEROps_template& other_value);

public:
DIAMETEROps_template();
DIAMETEROps_template(template_sel other_value);
DIAMETEROps_template(const DIAMETEROps& other_value);
DIAMETEROps_template(const OPTIONAL<DIAMETEROps>& other_value);
DIAMETEROps_template(DIAMETEROps_template* p_precondition, DIAMETEROps_template* p_implied_template);
DIAMETEROps_template(Dynamic_Match_Interface<DIAMETEROps>* p_dyn_match);
DIAMETEROps_template(const DIAMETEROps_template& other_value);
~DIAMETEROps_template();
DIAMETEROps_template& operator=(template_sel other_value);
DIAMETEROps_template& operator=(const DIAMETEROps& other_value);
DIAMETEROps_template& operator=(const OPTIONAL<DIAMETEROps>& other_value);
DIAMETEROps_template& operator=(const DIAMETEROps_template& other_value);
boolean match(const DIAMETEROps& other_value, boolean legacy = FALSE) const;
boolean is_bound() const;
boolean is_value() const;
void clean_up();
DIAMETEROps valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
DIAMETEROps_template& list_item(unsigned int list_index) const;
DIAMETERCreateCallback_template& create__cb();
const DIAMETERCreateCallback_template& create__cb() const;
DIAMETERUnitdataCallback_template& unitdata__cb();
const DIAMETERUnitdataCallback_template& unitdata__cb() const;
BOOLEAN_template& raw();
const BOOLEAN_template& raw() const;
int size_of() const;
void log() const;
void log_match(const DIAMETEROps& match_value, boolean legacy = FALSE) const;
  void set_implicit_omit();
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
void set_param(Module_Param& param);
void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const;
boolean is_present(boolean legacy = FALSE) const;
boolean match_omit(boolean legacy = FALSE) const;
};

class DIAMETER__conn__parameters {
  CHARSTRING field_remote__ip;
  INTEGER field_remote__sctp__port;
  CHARSTRING field_local__ip;
  INTEGER field_local__sctp__port;
  CHARSTRING field_origin__host;
  CHARSTRING field_origin__realm;
  OPTIONAL< INTEGER > field_auth__app__id;
  OPTIONAL< INTEGER > field_vendor__app__id;
public:
  DIAMETER__conn__parameters();
  DIAMETER__conn__parameters(const CHARSTRING& par_remote__ip,
    const INTEGER& par_remote__sctp__port,
    const CHARSTRING& par_local__ip,
    const INTEGER& par_local__sctp__port,
    const CHARSTRING& par_origin__host,
    const CHARSTRING& par_origin__realm,
    const OPTIONAL< INTEGER >& par_auth__app__id,
    const OPTIONAL< INTEGER >& par_vendor__app__id);
  DIAMETER__conn__parameters(const DIAMETER__conn__parameters& other_value);
  inline boolean is_component() { return FALSE; }
  void clean_up();
const TTCN_Typedescriptor_t* get_descriptor() const;
  DIAMETER__conn__parameters& operator=(const DIAMETER__conn__parameters& other_value);
  boolean operator==(const DIAMETER__conn__parameters& other_value) const;
  inline boolean operator!=(const DIAMETER__conn__parameters& other_value) const
    { return !(*this == other_value); }

  boolean is_bound() const;

inline boolean is_present() const { return is_bound(); }
  boolean is_value() const;

  inline CHARSTRING& remote__ip()
    {return field_remote__ip;}
  inline const CHARSTRING& remote__ip() const
    {return field_remote__ip;}
  inline INTEGER& remote__sctp__port()
    {return field_remote__sctp__port;}
  inline const INTEGER& remote__sctp__port() const
    {return field_remote__sctp__port;}
  inline CHARSTRING& local__ip()
    {return field_local__ip;}
  inline const CHARSTRING& local__ip() const
    {return field_local__ip;}
  inline INTEGER& local__sctp__port()
    {return field_local__sctp__port;}
  inline const INTEGER& local__sctp__port() const
    {return field_local__sctp__port;}
  inline CHARSTRING& origin__host()
    {return field_origin__host;}
  inline const CHARSTRING& origin__host() const
    {return field_origin__host;}
  inline CHARSTRING& origin__realm()
    {return field_origin__realm;}
  inline const CHARSTRING& origin__realm() const
    {return field_origin__realm;}
  inline OPTIONAL< INTEGER >& auth__app__id()
    {return field_auth__app__id;}
  inline const OPTIONAL< INTEGER >& auth__app__id() const
    {return field_auth__app__id;}
  inline OPTIONAL< INTEGER >& vendor__app__id()
    {return field_vendor__app__id;}
  inline const OPTIONAL< INTEGER >& vendor__app__id() const
    {return field_vendor__app__id;}
  int size_of() const;
  void log() const;
  void set_implicit_omit();
  void set_param(Module_Param& param);
  void encode_text(Text_Buf& text_buf) const;
  void decode_text(Text_Buf& text_buf);
};

class DIAMETER__conn__parameters_template : public Base_Template {
struct single_value_struct;
union {
single_value_struct *single_value;
struct {
unsigned int n_values;
DIAMETER__conn__parameters_template *list_value;
} value_list;
struct {
DIAMETER__conn__parameters_template* precondition;
DIAMETER__conn__parameters_template* implied_template;
} implication_;
dynmatch_struct<DIAMETER__conn__parameters>* dyn_match;
};

void set_specific();
void copy_value(const DIAMETER__conn__parameters& other_value);
void copy_template(const DIAMETER__conn__parameters_template& other_value);

public:
DIAMETER__conn__parameters_template();
DIAMETER__conn__parameters_template(template_sel other_value);
DIAMETER__conn__parameters_template(const DIAMETER__conn__parameters& other_value);
DIAMETER__conn__parameters_template(const OPTIONAL<DIAMETER__conn__parameters>& other_value);
DIAMETER__conn__parameters_template(DIAMETER__conn__parameters_template* p_precondition, DIAMETER__conn__parameters_template* p_implied_template);
DIAMETER__conn__parameters_template(Dynamic_Match_Interface<DIAMETER__conn__parameters>* p_dyn_match);
DIAMETER__conn__parameters_template(const DIAMETER__conn__parameters_template& other_value);
~DIAMETER__conn__parameters_template();
DIAMETER__conn__parameters_template& operator=(template_sel other_value);
DIAMETER__conn__parameters_template& operator=(const DIAMETER__conn__parameters& other_value);
DIAMETER__conn__parameters_template& operator=(const OPTIONAL<DIAMETER__conn__parameters>& other_value);
DIAMETER__conn__parameters_template& operator=(const DIAMETER__conn__parameters_template& other_value);
boolean match(const DIAMETER__conn__parameters& other_value, boolean legacy = FALSE) const;
boolean is_bound() const;
boolean is_value() const;
void clean_up();
DIAMETER__conn__parameters valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
DIAMETER__conn__parameters_template& list_item(unsigned int list_index) const;
CHARSTRING_template& remote__ip();
const CHARSTRING_template& remote__ip() const;
INTEGER_template& remote__sctp__port();
const INTEGER_template& remote__sctp__port() const;
CHARSTRING_template& local__ip();
const CHARSTRING_template& local__ip() const;
INTEGER_template& local__sctp__port();
const INTEGER_template& local__sctp__port() const;
CHARSTRING_template& origin__host();
const CHARSTRING_template& origin__host() const;
CHARSTRING_template& origin__realm();
const CHARSTRING_template& origin__realm() const;
INTEGER_template& auth__app__id();
const INTEGER_template& auth__app__id() const;
INTEGER_template& vendor__app__id();
const INTEGER_template& vendor__app__id() const;
int size_of() const;
void log() const;
void log_match(const DIAMETER__conn__parameters& match_value, boolean legacy = FALSE) const;
  void set_implicit_omit();
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
void set_param(Module_Param& param);
void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const;
boolean is_present(boolean legacy = FALSE) const;
boolean match_omit(boolean legacy = FALSE) const;
};

class ExpectDataE2EID {
  OPTIONAL< OCTETSTRING > field_ete__id;
  COMPONENT field_vc__conn;
public:
  ExpectDataE2EID();
  ExpectDataE2EID(const OPTIONAL< OCTETSTRING >& par_ete__id,
    const COMPONENT& par_vc__conn);
  ExpectDataE2EID(const ExpectDataE2EID& other_value);
  inline boolean is_component() { return FALSE; }
  void clean_up();
const TTCN_Typedescriptor_t* get_descriptor() const;
  ExpectDataE2EID& operator=(const ExpectDataE2EID& other_value);
  boolean operator==(const ExpectDataE2EID& other_value) const;
  inline boolean operator!=(const ExpectDataE2EID& other_value) const
    { return !(*this == other_value); }

  boolean is_bound() const;

inline boolean is_present() const { return is_bound(); }
  boolean is_value() const;

  inline OPTIONAL< OCTETSTRING >& ete__id()
    {return field_ete__id;}
  inline const OPTIONAL< OCTETSTRING >& ete__id() const
    {return field_ete__id;}
  inline COMPONENT& vc__conn()
    {return field_vc__conn;}
  inline const COMPONENT& vc__conn() const
    {return field_vc__conn;}
  int size_of() const;
  void log() const;
  void set_implicit_omit();
  void set_param(Module_Param& param);
  void encode_text(Text_Buf& text_buf) const;
  void decode_text(Text_Buf& text_buf);
};

class ExpectDataE2EID_template : public Base_Template {
struct single_value_struct;
union {
single_value_struct *single_value;
struct {
unsigned int n_values;
ExpectDataE2EID_template *list_value;
} value_list;
struct {
ExpectDataE2EID_template* precondition;
ExpectDataE2EID_template* implied_template;
} implication_;
dynmatch_struct<ExpectDataE2EID>* dyn_match;
};

void set_specific();
void copy_value(const ExpectDataE2EID& other_value);
void copy_template(const ExpectDataE2EID_template& other_value);

public:
ExpectDataE2EID_template();
ExpectDataE2EID_template(template_sel other_value);
ExpectDataE2EID_template(const ExpectDataE2EID& other_value);
ExpectDataE2EID_template(const OPTIONAL<ExpectDataE2EID>& other_value);
ExpectDataE2EID_template(ExpectDataE2EID_template* p_precondition, ExpectDataE2EID_template* p_implied_template);
ExpectDataE2EID_template(Dynamic_Match_Interface<ExpectDataE2EID>* p_dyn_match);
ExpectDataE2EID_template(const ExpectDataE2EID_template& other_value);
~ExpectDataE2EID_template();
ExpectDataE2EID_template& operator=(template_sel other_value);
ExpectDataE2EID_template& operator=(const ExpectDataE2EID& other_value);
ExpectDataE2EID_template& operator=(const OPTIONAL<ExpectDataE2EID>& other_value);
ExpectDataE2EID_template& operator=(const ExpectDataE2EID_template& other_value);
boolean match(const ExpectDataE2EID& other_value, boolean legacy = FALSE) const;
boolean is_bound() const;
boolean is_value() const;
void clean_up();
ExpectDataE2EID valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
ExpectDataE2EID_template& list_item(unsigned int list_index) const;
OCTETSTRING_template& ete__id();
const OCTETSTRING_template& ete__id() const;
COMPONENT_template& vc__conn();
const COMPONENT_template& vc__conn() const;
int size_of() const;
void log() const;
void log_match(const ExpectDataE2EID& match_value, boolean legacy = FALSE) const;
  void set_implicit_omit();
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
void set_param(Module_Param& param);
void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const;
boolean is_present(boolean legacy = FALSE) const;
boolean match_omit(boolean legacy = FALSE) const;
};

class DIAMETEREM__register__eteid_call {
OCTETSTRING param_ete__id;
COMPONENT param_hdlr;
public:
inline OCTETSTRING& ete__id() { return param_ete__id; }
inline const OCTETSTRING& ete__id() const { return param_ete__id; }
inline COMPONENT& hdlr() { return param_hdlr; }
inline const COMPONENT& hdlr() const { return param_hdlr; }
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
void log() const;
};

class DIAMETEREM__register__eteid_call_redirect {
OCTETSTRING *ptr_ete__id;
COMPONENT *ptr_hdlr;
public:
DIAMETEREM__register__eteid_call_redirect(OCTETSTRING *par_ete__id = NULL, COMPONENT *par_hdlr = NULL)
 : ptr_ete__id(par_ete__id), ptr_hdlr(par_hdlr) { }
virtual ~DIAMETEREM__register__eteid_call_redirect() { }
virtual void set_parameters(const DIAMETEREM__register__eteid_call& call_par) const;
};

class DIAMETEREM__register__eteid_reply {
public:
inline void encode_text(Text_Buf&) const { }
inline void decode_text(Text_Buf&) { }
void log() const;
};

class DIAMETEREM__register__eteid_reply_redirect {
public:
inline void set_parameters(const DIAMETEREM__register__eteid_reply&) const {}
};

class DIAMETEREM__register__eteid_template {
OCTETSTRING_template param_ete__id;
COMPONENT_template param_hdlr;
public:
DIAMETEREM__register__eteid_template();
inline OCTETSTRING_template& ete__id() { return param_ete__id; }
inline const OCTETSTRING_template& ete__id() const { return param_ete__id; }
inline COMPONENT_template& hdlr() { return param_hdlr; }
inline const COMPONENT_template& hdlr() const { return param_hdlr; }
DIAMETEREM__register__eteid_call create_call() const;
inline DIAMETEREM__register__eteid_reply create_reply() const { return DIAMETEREM__register__eteid_reply(); }
boolean match_call(const DIAMETEREM__register__eteid_call& match_value, boolean legacy = FALSE) const;
inline boolean match_reply(const DIAMETEREM__register__eteid_reply&, boolean legacy = FALSE) const { return TRUE; }
void log() const;
void log_match_call(const DIAMETEREM__register__eteid_call& match_value, boolean legacy = FALSE) const;
void log_match_reply(const DIAMETEREM__register__eteid_reply& match_value, boolean legacy = FALSE) const;
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
};

class DIAMETEREM__register__imsi_call {
HEXSTRING param_imsi;
COMPONENT param_hdlr;
public:
inline HEXSTRING& imsi() { return param_imsi; }
inline const HEXSTRING& imsi() const { return param_imsi; }
inline COMPONENT& hdlr() { return param_hdlr; }
inline const COMPONENT& hdlr() const { return param_hdlr; }
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
void log() const;
};

class DIAMETEREM__register__imsi_call_redirect {
HEXSTRING *ptr_imsi;
COMPONENT *ptr_hdlr;
public:
DIAMETEREM__register__imsi_call_redirect(HEXSTRING *par_imsi = NULL, COMPONENT *par_hdlr = NULL)
 : ptr_imsi(par_imsi), ptr_hdlr(par_hdlr) { }
virtual ~DIAMETEREM__register__imsi_call_redirect() { }
virtual void set_parameters(const DIAMETEREM__register__imsi_call& call_par) const;
};

class DIAMETEREM__register__imsi_reply {
public:
inline void encode_text(Text_Buf&) const { }
inline void decode_text(Text_Buf&) { }
void log() const;
};

class DIAMETEREM__register__imsi_reply_redirect {
public:
inline void set_parameters(const DIAMETEREM__register__imsi_reply&) const {}
};

class DIAMETEREM__register__imsi_template {
HEXSTRING_template param_imsi;
COMPONENT_template param_hdlr;
public:
DIAMETEREM__register__imsi_template();
inline HEXSTRING_template& imsi() { return param_imsi; }
inline const HEXSTRING_template& imsi() const { return param_imsi; }
inline COMPONENT_template& hdlr() { return param_hdlr; }
inline const COMPONENT_template& hdlr() const { return param_hdlr; }
DIAMETEREM__register__imsi_call create_call() const;
inline DIAMETEREM__register__imsi_reply create_reply() const { return DIAMETEREM__register__imsi_reply(); }
boolean match_call(const DIAMETEREM__register__imsi_call& match_value, boolean legacy = FALSE) const;
inline boolean match_reply(const DIAMETEREM__register__imsi_reply&, boolean legacy = FALSE) const { return TRUE; }
void log() const;
void log_match_call(const DIAMETEREM__register__imsi_call& match_value, boolean legacy = FALSE) const;
void log_match_reply(const DIAMETEREM__register__imsi_reply& match_value, boolean legacy = FALSE) const;
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
};

class DIAMETEREM__PROC__PT : public PORT {
enum proc_selection { CALL_0, CALL_1, REPLY_0, REPLY_1 };
struct proc_queue_item {
proc_selection item_selection;
union {
DIAMETEREM__register__imsi_call *call_0;
DIAMETEREM__register__eteid_call *call_1;
DIAMETEREM__register__imsi_reply *reply_0;
DIAMETEREM__register__eteid_reply *reply_1;
};
component sender_component;
proc_queue_item *next_item;
} *proc_queue_head, *proc_queue_tail;
void append_to_proc_queue(proc_queue_item *new_item);
void remove_proc_queue_head();
protected:
void clear_queue();
public:
DIAMETEREM__PROC__PT(const char *par_port_name = NULL);
~DIAMETEREM__PROC__PT();
void call(const DIAMETEREM__register__imsi_template& call_template, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void call(const DIAMETEREM__register__imsi_template& call_template, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void call(const DIAMETEREM__register__imsi_template& call_template, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
void call(const DIAMETEREM__register__eteid_template& call_template, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void call(const DIAMETEREM__register__eteid_template& call_template, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void call(const DIAMETEREM__register__eteid_template& call_template, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
void reply(const DIAMETEREM__register__imsi_template& reply_template, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void reply(const DIAMETEREM__register__imsi_template& reply_template, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void reply(const DIAMETEREM__register__imsi_template& reply_template, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
void reply(const DIAMETEREM__register__eteid_template& reply_template, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void reply(const DIAMETEREM__register__eteid_template& reply_template, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void reply(const DIAMETEREM__register__eteid_template& reply_template, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
public:
alt_status getcall(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_getcall(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status getcall(const DIAMETEREM__register__imsi_template& getcall_template, const COMPONENT_template& sender_template, const DIAMETEREM__register__imsi_call_redirect& param_ref, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_getcall(const DIAMETEREM__register__imsi_template& getcall_template, const COMPONENT_template& sender_template, const DIAMETEREM__register__imsi_call_redirect& param_ref, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status getcall(const DIAMETEREM__register__eteid_template& getcall_template, const COMPONENT_template& sender_template, const DIAMETEREM__register__eteid_call_redirect& param_ref, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_getcall(const DIAMETEREM__register__eteid_template& getcall_template, const COMPONENT_template& sender_template, const DIAMETEREM__register__eteid_call_redirect& param_ref, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status getreply(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_getreply(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status getreply(const DIAMETEREM__register__imsi_template& getreply_template, const COMPONENT_template& sender_template, const DIAMETEREM__register__imsi_reply_redirect& param_ref, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_getreply(const DIAMETEREM__register__imsi_template& getreply_template, const COMPONENT_template& sender_template, const DIAMETEREM__register__imsi_reply_redirect& param_ref, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status getreply(const DIAMETEREM__register__eteid_template& getreply_template, const COMPONENT_template& sender_template, const DIAMETEREM__register__eteid_reply_redirect& param_ref, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_getreply(const DIAMETEREM__register__eteid_template& getreply_template, const COMPONENT_template& sender_template, const DIAMETEREM__register__eteid_reply_redirect& param_ref, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
private:
void incoming_call(const DIAMETEREM__register__imsi_call& incoming_par, component sender_component);
void incoming_call(const DIAMETEREM__register__eteid_call& incoming_par, component sender_component);
void incoming_reply(const DIAMETEREM__register__imsi_reply& incoming_par, component sender_component);
void incoming_reply(const DIAMETEREM__register__eteid_reply& incoming_par, component sender_component);
protected:
boolean process_call(const char *signature_name, Text_Buf& incoming_buf, component sender_component);
boolean process_reply(const char *signature_name, Text_Buf& incoming_buf, component sender_component);
};


/* Function prototypes */

extern DIAMETER__CodecPort::DIAMETER__RecvFrom_template tr__DIAMETER__RecvFrom__R(const DIAMETER__Types::PDU__DIAMETER_template& msg);
extern void start_tr__DIAMETER__RecvFrom__R(const COMPONENT& component_reference, const DIAMETER__Types::PDU__DIAMETER_template& msg);
extern BOOLEAN f__imsi__known(const HEXSTRING& imsi);
extern void start_f__imsi__known(const COMPONENT& component_reference, const HEXSTRING& imsi);
extern BOOLEAN f__comp__known(const COMPONENT& client);
extern void start_f__comp__known(const COMPONENT& component_reference, const COMPONENT& client);
extern COMPONENT f__comp__by__imsi(const HEXSTRING& imsi);
extern void start_f__comp__by__imsi(const COMPONENT& component_reference, const HEXSTRING& imsi);
extern HEXSTRING f__imsi__by__comp(const COMPONENT& client);
extern void start_f__imsi__by__comp(const COMPONENT& component_reference, const COMPONENT& client);
extern void f__imsi__table__add(const COMPONENT& comp__ref, const HEXSTRING& imsi);
extern void start_f__imsi__table__add(const COMPONENT& component_reference, const COMPONENT& comp__ref, const HEXSTRING& imsi);
extern void f__imsi__table__del(const COMPONENT& comp__ref, const HEXSTRING& imsi);
extern void start_f__imsi__table__del(const COMPONENT& component_reference, const COMPONENT& comp__ref, const HEXSTRING& imsi);
extern void f__imsi__table__init();
extern void start_f__imsi__table__init(const COMPONENT& component_reference);
extern BOOLEAN f__ete__id__known(const OCTETSTRING& ete__id);
extern void start_f__ete__id__known(const COMPONENT& component_reference, const OCTETSTRING& ete__id);
extern COMPONENT f__comp__by__ete__id(const OCTETSTRING& ete__id);
extern void start_f__comp__by__ete__id(const COMPONENT& component_reference, const OCTETSTRING& ete__id);
extern void f__eteid__table__add(const COMPONENT& comp__ref, const OCTETSTRING& ete__id);
extern void start_f__eteid__table__add(const COMPONENT& component_reference, const COMPONENT& comp__ref, const OCTETSTRING& ete__id);
extern void f__eteid__table__del(const COMPONENT& comp__ref, const OCTETSTRING& ete__id);
extern void start_f__eteid__table__del(const COMPONENT& component_reference, const COMPONENT& comp__ref, const OCTETSTRING& ete__id);
extern void f__eteid__table__init();
extern void start_f__eteid__table__init(const COMPONENT& component_reference);
extern HEXSTRING_template f__DIAMETER__get__imsi(const DIAMETER__Types::PDU__DIAMETER& pdu);
extern DIAMETER__Types::PDU__DIAMETER f__diameter__xceive(const DIAMETER__Types::PDU__DIAMETER_template& tx, const DIAMETER__Types::PDU__DIAMETER_template& rx__t);
extern void start_f__diameter__xceive(const COMPONENT& component_reference, const DIAMETER__Types::PDU__DIAMETER_template& tx, const DIAMETER__Types::PDU__DIAMETER_template& rx__t);
extern void main_(const DIAMETEROps& ops, const DIAMETER__conn__parameters& p, const CHARSTRING& id);
extern void start_main_(const COMPONENT& component_reference, const DIAMETEROps& ops, const DIAMETER__conn__parameters& p, const CHARSTRING& id);
extern void f__diameter__expect__eteid(const OCTETSTRING& ete__id);
extern void start_f__diameter__expect__eteid(const COMPONENT& component_reference, const OCTETSTRING& ete__id);
extern COMPONENT ExpectedCreateCallback(const DIAMETER__Types::PDU__DIAMETER& msg, const HEXSTRING& imsi, const CHARSTRING& );
extern void start_ExpectedCreateCallback(const COMPONENT& component_reference, const DIAMETER__Types::PDU__DIAMETER& msg, const HEXSTRING& imsi, const CHARSTRING& id);
extern void f__create__expect(const HEXSTRING& imsi, const COMPONENT& hdlr);
extern void start_f__create__expect(const COMPONENT& component_reference, const HEXSTRING& imsi, const COMPONENT& hdlr);
extern void f__diameter__expect__imsi(const HEXSTRING& imsi);
extern void start_f__diameter__expect__imsi(const COMPONENT& component_reference, const HEXSTRING& imsi);
extern void f__expect__table__init();
extern void start_f__expect__table__init(const COMPONENT& component_reference);
extern DIAMETER__Types::PDU__DIAMETER_template DummyUnitdataCallback(const DIAMETER__Types::PDU__DIAMETER& msg);
extern void start_DummyUnitdataCallback(const COMPONENT& component_reference, const DIAMETER__Types::PDU__DIAMETER& msg);
extern void f__diameter__wait__capability(DIAMETER__PT& pt);
extern void pre_init_module();
extern void post_init_module();
extern boolean init_comp_type(const char *component_type, boolean init_base_comps);
extern boolean init_system_port(const char* component_type, const char* port_name);
extern boolean start_ptc_function(const char *function_name, Text_Buf& function_arguments);

/* Global variable declarations */

extern const XERdescriptor_t IMSI_xer_;
extern const TTCN_Typedescriptor_t IMSI_descr_;
extern UNIVERSAL_CHARSTRING DiameterCapabilityExchgInd_rx_default_coding;
extern UNIVERSAL_CHARSTRING DiameterCapabilityExchgInd_tx_default_coding;
extern const TTCN_Typedescriptor_t DiameterCapabilityExchgInd_descr_;
extern const TTCN_Typedescriptor_t& DIAMETER__ConnHdlr_descr_;
extern DIAMETER__Conn__PT DIAMETER__ConnHdlr_component_DIAMETER;
extern DIAMETEREM__PROC__PT DIAMETER__ConnHdlr_component_DIAMETER__PROC;
extern const TTCN_Typedescriptor_t AssociationData_descr_;
extern const XERdescriptor_t AssociationData_imsi_xer_;
extern const TTCN_Typedescriptor_t AssociationData_imsi_descr_;
extern const TTCN_Typedescriptor_t ETEIDData_descr_;
extern const XERdescriptor_t ETEIDData_ete__id_xer_;
extern const TTCN_OERdescriptor_t ETEIDData_ete__id_oer_;
extern const TTCN_Typedescriptor_t ETEIDData_ete__id_descr_;
extern UNIVERSAL_CHARSTRING ETEIDData_ete__id_default_coding;
extern const TTCN_Typedescriptor_t& DIAMETER__Emulation__CT_descr_;
extern DIAMETER__CodecPort::DIAMETER__CODEC__PT DIAMETER__Emulation__CT_component_DIAMETER;
extern DIAMETER__Conn__PT DIAMETER__Emulation__CT_component_DIAMETER__CLIENT;
extern VALUE_ARRAY<AssociationData, 256, 0> DIAMETER__Emulation__CT_component_DiameterAssocTable;
extern VALUE_ARRAY<ETEIDData, 256, 0> DIAMETER__Emulation__CT_component_DiameterETEIDTable;
extern const TTCN_Typedescriptor_t ExpectData_descr_;
extern const XERdescriptor_t ExpectData_imsi_xer_;
extern const TTCN_Typedescriptor_t ExpectData_imsi_descr_;
extern VALUE_ARRAY<ExpectData, 256, 0> DIAMETER__Emulation__CT_component_DiameterExpectTable;
extern DIAMETEREM__PROC__PT DIAMETER__Emulation__CT_component_DIAMETER__PROC;
extern DIAMETER__PT DIAMETER__Emulation__CT_component_DIAMETER__UNIT;
extern CHARSTRING DIAMETER__Emulation__CT_component_g__diameter__id;
extern INTEGER DIAMETER__Emulation__CT_component_g__diameter__conn__id;
extern const TTCN_Typedescriptor_t DIAMETERCreateCallback_descr_;
extern const TTCN_Typedescriptor_t DIAMETERUnitdataCallback_descr_;
extern const XERdescriptor_t DIAMETEROps_raw_xer_;
extern const TTCN_OERdescriptor_t DIAMETEROps_raw_oer_;
extern const TTCN_Typedescriptor_t DIAMETEROps_raw_descr_;
extern const TTCN_Typedescriptor_t DIAMETEROps_descr_;
extern const XERdescriptor_t DIAMETER__conn__parameters_remote__ip_xer_;
extern const TTCN_Typedescriptor_t DIAMETER__conn__parameters_remote__ip_descr_;
extern const XERdescriptor_t DIAMETER__conn__parameters_remote__sctp__port_xer_;
extern const TTCN_OERdescriptor_t DIAMETER__conn__parameters_remote__sctp__port_oer_;
extern const TTCN_Typedescriptor_t DIAMETER__conn__parameters_remote__sctp__port_descr_;
extern const XERdescriptor_t DIAMETER__conn__parameters_local__ip_xer_;
extern const TTCN_Typedescriptor_t DIAMETER__conn__parameters_local__ip_descr_;
extern const XERdescriptor_t DIAMETER__conn__parameters_local__sctp__port_xer_;
extern const TTCN_OERdescriptor_t DIAMETER__conn__parameters_local__sctp__port_oer_;
extern const TTCN_Typedescriptor_t DIAMETER__conn__parameters_local__sctp__port_descr_;
extern const XERdescriptor_t DIAMETER__conn__parameters_origin__host_xer_;
extern const TTCN_Typedescriptor_t DIAMETER__conn__parameters_origin__host_descr_;
extern const XERdescriptor_t DIAMETER__conn__parameters_origin__realm_xer_;
extern const TTCN_Typedescriptor_t DIAMETER__conn__parameters_origin__realm_descr_;
extern const TTCN_Typedescriptor_t DIAMETER__conn__parameters_descr_;
extern const XERdescriptor_t DIAMETER__conn__parameters_auth__app__id_xer_;
extern const TTCN_Typedescriptor_t DIAMETER__conn__parameters_auth__app__id_descr_;
extern UNIVERSAL_CHARSTRING DIAMETER__conn__parameters_auth__app__id_default_coding;
extern const XERdescriptor_t DIAMETER__conn__parameters_vendor__app__id_xer_;
extern const TTCN_OERdescriptor_t DIAMETER__conn__parameters_vendor__app__id_oer_;
extern const TTCN_Typedescriptor_t DIAMETER__conn__parameters_vendor__app__id_descr_;
extern UNIVERSAL_CHARSTRING DIAMETER__conn__parameters_vendor__app__id_default_coding;
extern const DIAMETER__Types::PDU__DIAMETER_template& f__diameter__xceive_rx__t_defval;
extern DIAMETER__Types::PDU__DIAMETER_template template_f__diameter__xceive_rx__t_defval;
extern const TTCN_Typedescriptor_t ExpectDataE2EID_descr_;
extern const XERdescriptor_t ExpectDataE2EID_ete__id_xer_;
extern const TTCN_OERdescriptor_t ExpectDataE2EID_ete__id_oer_;
extern const TTCN_Typedescriptor_t ExpectDataE2EID_ete__id_descr_;
extern UNIVERSAL_CHARSTRING ExpectDataE2EID_ete__id_default_coding;
extern const OCTETSTRING os_0;
extern const CHARSTRING cs_1,
cs_0;
extern const unsigned char module_checksum[];
extern TTCN_Module module_object;
extern const RuntimeVersionChecker ver_checker;

} /* end of namespace */

#endif
