// 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 HSS__Tests_HH
#define HSS__Tests_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_ts29_272_Templates.hh"
#include "DIAMETER_Emulation.hh"
#include "Prometheus_Checker.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 HSS__Tests_HH
#endif

namespace HSS__Tests {

/* Forward declarations of classes */

class HSS__Impl;
class HSS__Impl_template;
typedef PreGenRecordOf::PREGEN__RECORD__OF__HEXSTRING SubscriberConfigs;
typedef PreGenRecordOf::PREGEN__RECORD__OF__HEXSTRING_template SubscriberConfigs_template;
class SessionPars;
class SessionPars_template;
class void__fn;
class void__fn_template;

} /* end of namespace */

#ifndef HSS__Tests_HH
#define HSS__Tests_HH

namespace HSS__Tests {

/* Type definitions */

typedef COMPONENT MTC__CT;
typedef COMPONENT_template MTC__CT_template;
typedef COMPONENT DIAMETER__ConnHdlr__CT;
typedef COMPONENT_template DIAMETER__ConnHdlr__CT_template;
typedef COMPONENT Cli__Session__CT;
typedef COMPONENT_template Cli__Session__CT_template;

/* Class definitions */

class HSS__Impl : public Base_Type { // enum
friend class HSS__Impl_template;
public:
enum enum_type { HSS__IMPL__OPEN5GS = 0, HSS__IMPL__PYHSS = 1, UNKNOWN_VALUE = 2, UNBOUND_VALUE = 3 };
private:
enum_type enum_value;

public:
HSS__Impl();
HSS__Impl(int other_value);
HSS__Impl(enum_type other_value);
HSS__Impl(const HSS__Impl& other_value);

HSS__Impl& operator=(int other_value);
HSS__Impl& operator=(enum_type other_value);
HSS__Impl& operator=(const HSS__Impl& other_value);

boolean operator==(int other_value) const;
boolean operator==(enum_type other_value) const;
boolean operator==(const HSS__Impl& other_value) const;
inline boolean operator!=(int other_value) const { return !(*this == other_value); }
inline boolean operator!=(enum_type other_value) const { return !(*this == other_value); }
inline boolean operator!=(const HSS__Impl& other_value) const { return !(*this == other_value); }
boolean operator<(int other_value) const;
boolean operator<(enum_type other_value) const;
boolean operator<(const HSS__Impl& other_value) const;
boolean operator>(int other_value) const;
boolean operator>(enum_type other_value) const;
boolean operator>(const HSS__Impl& other_value) const;
inline boolean operator<=(int other_value) const { return !(*this > other_value); }
inline boolean operator<=(enum_type other_value) const { return !(*this > other_value); }
inline boolean operator<=(const HSS__Impl& other_value) const { return !(*this > other_value); }
inline boolean operator>=(int other_value) const { return !(*this < other_value); }
inline boolean operator>=(enum_type other_value) const { return !(*this < other_value); }
inline boolean operator>=(const HSS__Impl& other_value) const { return !(*this < other_value); }

static const char *enum_to_str(enum_type enum_par);
static enum_type str_to_enum(const char *str_par, const int* int_par = NULL, const int* int_par2 = NULL);
static boolean is_valid_enum(int int_par);

static int enum2int(enum_type enum_par);
static int enum2int(const HSS__Impl& enum_par);
int as_int() const { return enum2int(enum_value); }
void from_int(int p_val) { *this = p_val; }
void int2enum(int int_val);
operator enum_type() const;
inline boolean is_bound() const { return enum_value != UNBOUND_VALUE; }
inline boolean is_value() const { return enum_value != UNBOUND_VALUE; }
inline void clean_up(){ enum_value = UNBOUND_VALUE; }
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);
};

class HSS__Impl_template : public Base_Template {
union {
HSS__Impl::enum_type single_value;
struct {
unsigned int n_values;
HSS__Impl_template *list_value;
} value_list;
struct {
HSS__Impl_template* precondition;
HSS__Impl_template* implied_template;
} implication_;
dynmatch_struct<HSS__Impl>* dyn_match;
};

void copy_template(const HSS__Impl_template& other_value);

public:
HSS__Impl_template();
HSS__Impl_template(template_sel other_value);
HSS__Impl_template(int other_value);
HSS__Impl_template(HSS__Impl::enum_type other_value);
HSS__Impl_template(const HSS__Impl& other_value);
HSS__Impl_template(const OPTIONAL<HSS__Impl>& other_value);
HSS__Impl_template(HSS__Impl_template* p_precondition, HSS__Impl_template* p_implied_template);
HSS__Impl_template(Dynamic_Match_Interface<HSS__Impl>* p_dyn_match);
HSS__Impl_template(const HSS__Impl_template& other_value);
~HSS__Impl_template();

boolean is_bound() const;
boolean is_value() const;
void clean_up();
HSS__Impl_template& operator=(template_sel other_value);
HSS__Impl_template& operator=(int other_value);
HSS__Impl_template& operator=(HSS__Impl::enum_type other_value);
HSS__Impl_template& operator=(const HSS__Impl& other_value);
HSS__Impl_template& operator=(const OPTIONAL<HSS__Impl>& other_value);
HSS__Impl_template& operator=(const HSS__Impl_template& other_value);

boolean match(HSS__Impl::enum_type other_value, boolean legacy = FALSE) const;
boolean match(const HSS__Impl& other_value, boolean legacy = FALSE) const;
HSS__Impl::enum_type valueof() const;
void set_type(template_sel template_type, unsigned int list_length = 0);
HSS__Impl_template& list_item(unsigned int list_index);
void log() const;
void log_match(const HSS__Impl& 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 SessionPars {
  HEXSTRING field_imsi;
  INTEGER field_s6a__next__hbh__id;
  INTEGER field_s6a__next__ete__id;
public:
  SessionPars();
  SessionPars(const HEXSTRING& par_imsi,
    const INTEGER& par_s6a__next__hbh__id,
    const INTEGER& par_s6a__next__ete__id);
  SessionPars(const SessionPars& other_value);
  inline boolean is_component() { return FALSE; }
  void clean_up();
const TTCN_Typedescriptor_t* get_descriptor() const;
  SessionPars& operator=(const SessionPars& other_value);
  boolean operator==(const SessionPars& other_value) const;
  inline boolean operator!=(const SessionPars& other_value) const
    { return !(*this == other_value); }

  boolean is_bound() const;

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

  inline HEXSTRING& imsi()
    {return field_imsi;}
  inline const HEXSTRING& imsi() const
    {return field_imsi;}
  inline INTEGER& s6a__next__hbh__id()
    {return field_s6a__next__hbh__id;}
  inline const INTEGER& s6a__next__hbh__id() const
    {return field_s6a__next__hbh__id;}
  inline INTEGER& s6a__next__ete__id()
    {return field_s6a__next__ete__id;}
  inline const INTEGER& s6a__next__ete__id() const
    {return field_s6a__next__ete__id;}
  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 SessionPars_template : public Base_Template {
struct single_value_struct;
union {
single_value_struct *single_value;
struct {
unsigned int n_values;
SessionPars_template *list_value;
} value_list;
struct {
SessionPars_template* precondition;
SessionPars_template* implied_template;
} implication_;
dynmatch_struct<SessionPars>* dyn_match;
};

void set_specific();
void copy_value(const SessionPars& other_value);
void copy_template(const SessionPars_template& other_value);

public:
SessionPars_template();
SessionPars_template(template_sel other_value);
SessionPars_template(const SessionPars& other_value);
SessionPars_template(const OPTIONAL<SessionPars>& other_value);
SessionPars_template(SessionPars_template* p_precondition, SessionPars_template* p_implied_template);
SessionPars_template(Dynamic_Match_Interface<SessionPars>* p_dyn_match);
SessionPars_template(const SessionPars_template& other_value);
~SessionPars_template();
SessionPars_template& operator=(template_sel other_value);
SessionPars_template& operator=(const SessionPars& other_value);
SessionPars_template& operator=(const OPTIONAL<SessionPars>& other_value);
SessionPars_template& operator=(const SessionPars_template& other_value);
boolean match(const SessionPars& other_value, boolean legacy = FALSE) const;
boolean is_bound() const;
boolean is_value() const;
void clean_up();
SessionPars valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
SessionPars_template& list_item(unsigned int list_index) const;
HEXSTRING_template& imsi();
const HEXSTRING_template& imsi() const;
INTEGER_template& s6a__next__hbh__id();
const INTEGER_template& s6a__next__hbh__id() const;
INTEGER_template& s6a__next__ete__id();
const INTEGER_template& s6a__next__ete__id() const;
int size_of() const;
void log() const;
void log_match(const SessionPars& 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 void__fn : public Base_Type {
public:
typedef void (*function_pointer)();
typedef void (*start_pointer)(const COMPONENT& component_reference);
private:
friend class void__fn_template;
friend boolean operator==(void__fn::function_pointer value, const void__fn& other_value);
function_pointer referred_function;
public:
void__fn();
void__fn(function_pointer other_value);
void__fn(const void__fn& other_value);
void__fn& operator=(function_pointer other_value);
void__fn& operator=(const void__fn& other_value);
boolean operator==(function_pointer other_value) const;
boolean operator==(const void__fn& other_value) const;
inline boolean operator!=(function_pointer other_value) const
{ return !(*this == other_value); }
inline boolean operator!=(const void__fn& other_value) const
{ return !(*this == other_value); }

void invoke() const;
void start(const COMPONENT& component_reference) 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==(void__fn::function_pointer value, const void__fn& other_value);
inline boolean operator!=(void__fn::function_pointer value, const void__fn& other_value)
{ return !(value == other_value); } 

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

  void copy_template(const void__fn_template& other_value);
public:
void__fn_template();
void__fn_template(template_sel other_value);
void__fn_template(void__fn::function_pointer other_value);
void__fn_template(const void__fn& other_value);
void__fn_template(const OPTIONAL<void__fn>& other_value);
void__fn_template(const void__fn_template& other_value);
~void__fn_template();
void clean_up();
void__fn_template& operator=(template_sel other_value);
void__fn_template& operator=(void__fn::function_pointer other_value);
void__fn_template& operator=(const void__fn& other_value);
void__fn_template& operator=(const OPTIONAL<void__fn>& other_value);
void__fn_template& operator=(const void__fn_template& other_value);
boolean match(void__fn::function_pointer other_value, boolean legacy = FALSE) const;
boolean match(const void__fn& other_value, boolean legacy = FALSE) const;
void__fn valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
void__fn_template& list_item(unsigned int list_index) const;
void log() const;
void log_match(const void__fn& 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 as__Tguard_Default : public Default_Base {
public:
as__Tguard_Default();
alt_status call_altstep(boolean first_alt_run);
};


/* Function prototypes */

extern alt_status as__Tguard_instance(boolean first_alt_run);
extern void as__Tguard(boolean nodefault_modifier);
extern Default_Base *activate_as__Tguard();
extern void f__diam__connhldr__ct__main(const HEXSTRING& imsi);
extern void start_f__diam__connhldr__ct__main(const COMPONENT& component_reference, const HEXSTRING& imsi);
extern void f__diam__connhldr__expect__eteid(const OCTETSTRING& ete__id);
extern void start_f__diam__connhldr__expect__eteid(const COMPONENT& component_reference, const OCTETSTRING& ete__id);
extern SessionPars_template t__SessionPars(const HEXSTRING& imsi, const INTEGER& s6a__next__hbh__id, const INTEGER& s6a__next__ete__id);
extern DIAMETER__Types::PDU__DIAMETER_template DiameterForwardUnitdataCallback(const DIAMETER__Types::PDU__DIAMETER& msg);
extern void start_DiameterForwardUnitdataCallback(const COMPONENT& component_reference, const DIAMETER__Types::PDU__DIAMETER& msg);
extern void f__init__diameter(const CHARSTRING& id);
extern void start_f__init__diameter(const COMPONENT& component_reference, const CHARSTRING& id);
extern void f__init(const FLOAT& guard__timeout);
extern void start_f__init(const COMPONENT& component_reference, const FLOAT& guard__timeout);
extern COMPONENT f__start__handler(const void__fn& fn, const SessionPars_template& pars__tmpl);
extern void start_f__start__handler(const COMPONENT& component_reference, const void__fn& fn, const SessionPars_template& pars__tmpl);
extern void f__handler__init(const void__fn& fn, const SessionPars& pars);
extern void start_f__handler__init(const COMPONENT& component_reference, const void__fn& fn, const SessionPars& pars);
extern void f__dia__ulr__ula(const DIAMETER__Types::AVP__list_template& ula__sub__data);
extern void start_f__dia__ulr__ula(const COMPONENT& component_reference, const DIAMETER__Types::AVP__list_template& ula__sub__data);
extern void f__TC__ulr__ula();
extern void start_f__TC__ulr__ula(const COMPONENT& component_reference);
extern verdicttype testcase_TC__ulr__ula(boolean has_timer, double timer_value);
extern void f__TC__ulr__ula__subscr__op__det__barring__7();
extern void start_f__TC__ulr__ula__subscr__op__det__barring__7(const COMPONENT& component_reference);
extern verdicttype testcase_TC__ulr__ula__subscr__op__det__barring__7(boolean has_timer, double timer_value);
extern void module_control_part();
extern void pre_init_module();
extern void post_init_module();
extern boolean set_module_param(Module_Param& param);
extern void log_module_param();
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 TTCN_Typedescriptor_t HSS__Impl_descr_;
extern const TTCN_Typedescriptor_t SubscriberConfigs_descr_;
extern const XERdescriptor_t SubscriberConfigs_0_xer_;
extern const TTCN_Typedescriptor_t SubscriberConfigs_0_descr_;
extern const CHARSTRING& mp__hss__hostname;
extern CHARSTRING modulepar_mp__hss__hostname;
extern const INTEGER& mp__hss__port;
extern INTEGER modulepar_mp__hss__port;
extern const CHARSTRING& mp__hss__prometheus__hostname;
extern CHARSTRING modulepar_mp__hss__prometheus__hostname;
extern const INTEGER& mp__hss__prometheus__port;
extern INTEGER modulepar_mp__hss__prometheus__port;
extern const CHARSTRING& mp__diam__local__hostname;
extern CHARSTRING modulepar_mp__diam__local__hostname;
extern const INTEGER& mp__diam__local__port;
extern INTEGER modulepar_mp__diam__local__port;
extern const CHARSTRING& mp__diam__orig__realm;
extern CHARSTRING modulepar_mp__diam__orig__realm;
extern const CHARSTRING& mp__diam__orig__host;
extern CHARSTRING modulepar_mp__diam__orig__host;
extern const CHARSTRING& mp__diam__dest__realm;
extern CHARSTRING modulepar_mp__diam__dest__realm;
extern const CHARSTRING& mp__diam__dest__host;
extern CHARSTRING modulepar_mp__diam__dest__host;
extern const SubscriberConfigs& subscribers;
extern SubscriberConfigs modulepar_subscribers;
extern const HSS__Impl& mp__hss__impl;
extern HSS__Impl modulepar_mp__hss__impl;
extern const TTCN_Typedescriptor_t& MTC__CT_descr_;
extern COMPONENT MTC__CT_component_vc__S6a;
extern DIAMETER__Emulation::DIAMETER__PT MTC__CT_component_S6a__UNIT;
extern DIAMETER__Emulation::DIAMETEREM__PROC__PT MTC__CT_component_S6a__PROC;
extern TIMER MTC__CT_component_T__guard;
extern const TTCN_Typedescriptor_t& DIAMETER__ConnHdlr__CT_descr_;
extern DIAMETER__Emulation::DIAMETER__Conn__PT DIAMETER__ConnHdlr__CT_component_DIAMETER__CLIENT;
extern DIAMETER__Emulation::DIAMETEREM__PROC__PT DIAMETER__ConnHdlr__CT_component_DIAMETER__PROC__CLIENT;
extern const TTCN_Typedescriptor_t& Cli__Session__CT_descr_;
extern const XERdescriptor_t SessionPars_imsi_xer_;
extern const TTCN_Typedescriptor_t SessionPars_imsi_descr_;
extern const XERdescriptor_t SessionPars_s6a__next__hbh__id_xer_;
extern const TTCN_OERdescriptor_t SessionPars_s6a__next__hbh__id_oer_;
extern const TTCN_Typedescriptor_t SessionPars_s6a__next__hbh__id_descr_;
extern UNIVERSAL_CHARSTRING SessionPars_s6a__next__hbh__id_default_coding;
extern const XERdescriptor_t SessionPars_s6a__next__ete__id_xer_;
extern const TTCN_OERdescriptor_t SessionPars_s6a__next__ete__id_oer_;
extern const TTCN_Typedescriptor_t SessionPars_s6a__next__ete__id_descr_;
extern UNIVERSAL_CHARSTRING SessionPars_s6a__next__ete__id_default_coding;
extern const TTCN_Typedescriptor_t SessionPars_descr_;
extern SessionPars Cli__Session__CT_component_g__pars;
extern DIAMETER__Emulation::DIAMETER__Conn__PT Cli__Session__CT_component_S6a;
extern DIAMETER__Emulation::DIAMETEREM__PROC__PT Cli__Session__CT_component_S6a__PROC;
extern const INTEGER& t__SessionPars_s6a__next__hbh__id_defval;
extern INTEGER const_t__SessionPars_s6a__next__hbh__id_defval;
extern const INTEGER& t__SessionPars_s6a__next__ete__id_defval;
extern INTEGER const_t__SessionPars_s6a__next__ete__id_defval;
extern const TTCN_Typedescriptor_t void__fn_descr_;
extern const FLOAT& f__init_guard__timeout_defval;
extern FLOAT const_f__init_guard__timeout_defval;
extern const SessionPars_template& f__start__handler_pars__tmpl_defval;
extern SessionPars_template template_f__start__handler_pars__tmpl_defval;
extern const HEXSTRING hs_0,
hs_1;
extern const OCTETSTRING os_1,
os_0;
extern const CHARSTRING cs_2,
cs_0,
cs_1,
cs_6,
cs_5,
cs_3,
cs_4,
cs_7,
cs_8;
extern const unsigned char module_checksum[];
extern TTCN_Module module_object;
extern const RuntimeVersionChecker ver_checker;

} /* end of namespace */

#endif
