// 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__CodecPort_HH
#define DIAMETER__CodecPort_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 "IPL4asp_PortType.hh"
#include "DIAMETER_Types.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__CodecPort_HH
#endif

namespace DIAMETER__CodecPort {

/* Forward declarations of classes */

class DIAMETER__RecvFrom;
class DIAMETER__RecvFrom_template;
class DIAMETER__Send;
class DIAMETER__Send_template;
class DIAMETER__CODEC__PT;

} /* end of namespace */

#ifndef DIAMETER__CodecPort_HH
#define DIAMETER__CodecPort_HH

namespace DIAMETER__CodecPort {

/* Class definitions */

class DIAMETER__RecvFrom {
  INTEGER field_connId;
  CHARSTRING field_remName;
  INTEGER field_remPort;
  CHARSTRING field_locName;
  INTEGER field_locPort;
  DIAMETER__Types::PDU__DIAMETER field_msg;
public:
  DIAMETER__RecvFrom();
  DIAMETER__RecvFrom(const INTEGER& par_connId,
    const CHARSTRING& par_remName,
    const INTEGER& par_remPort,
    const CHARSTRING& par_locName,
    const INTEGER& par_locPort,
    const DIAMETER__Types::PDU__DIAMETER& par_msg);
  DIAMETER__RecvFrom(const DIAMETER__RecvFrom& other_value);
  inline boolean is_component() { return FALSE; }
  void clean_up();
const TTCN_Typedescriptor_t* get_descriptor() const;
  DIAMETER__RecvFrom& operator=(const DIAMETER__RecvFrom& other_value);
  boolean operator==(const DIAMETER__RecvFrom& other_value) const;
  inline boolean operator!=(const DIAMETER__RecvFrom& other_value) const
    { return !(*this == other_value); }

  boolean is_bound() const;

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

  inline INTEGER& connId()
    {return field_connId;}
  inline const INTEGER& connId() const
    {return field_connId;}
  inline CHARSTRING& remName()
    {return field_remName;}
  inline const CHARSTRING& remName() const
    {return field_remName;}
  inline INTEGER& remPort()
    {return field_remPort;}
  inline const INTEGER& remPort() const
    {return field_remPort;}
  inline CHARSTRING& locName()
    {return field_locName;}
  inline const CHARSTRING& locName() const
    {return field_locName;}
  inline INTEGER& locPort()
    {return field_locPort;}
  inline const INTEGER& locPort() const
    {return field_locPort;}
  inline DIAMETER__Types::PDU__DIAMETER& msg()
    {return field_msg;}
  inline const DIAMETER__Types::PDU__DIAMETER& msg() const
    {return field_msg;}
  inline int size_of() const
    {return 6;}
  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__RecvFrom_template : public Base_Template {
struct single_value_struct;
union {
single_value_struct *single_value;
struct {
unsigned int n_values;
DIAMETER__RecvFrom_template *list_value;
} value_list;
struct {
DIAMETER__RecvFrom_template* precondition;
DIAMETER__RecvFrom_template* implied_template;
} implication_;
dynmatch_struct<DIAMETER__RecvFrom>* dyn_match;
};

void set_specific();
void copy_value(const DIAMETER__RecvFrom& other_value);
void copy_template(const DIAMETER__RecvFrom_template& other_value);

public:
DIAMETER__RecvFrom_template();
DIAMETER__RecvFrom_template(template_sel other_value);
DIAMETER__RecvFrom_template(const DIAMETER__RecvFrom& other_value);
DIAMETER__RecvFrom_template(const OPTIONAL<DIAMETER__RecvFrom>& other_value);
DIAMETER__RecvFrom_template(DIAMETER__RecvFrom_template* p_precondition, DIAMETER__RecvFrom_template* p_implied_template);
DIAMETER__RecvFrom_template(Dynamic_Match_Interface<DIAMETER__RecvFrom>* p_dyn_match);
DIAMETER__RecvFrom_template(const DIAMETER__RecvFrom_template& other_value);
~DIAMETER__RecvFrom_template();
DIAMETER__RecvFrom_template& operator=(template_sel other_value);
DIAMETER__RecvFrom_template& operator=(const DIAMETER__RecvFrom& other_value);
DIAMETER__RecvFrom_template& operator=(const OPTIONAL<DIAMETER__RecvFrom>& other_value);
DIAMETER__RecvFrom_template& operator=(const DIAMETER__RecvFrom_template& other_value);
boolean match(const DIAMETER__RecvFrom& other_value, boolean legacy = FALSE) const;
boolean is_bound() const;
boolean is_value() const;
void clean_up();
DIAMETER__RecvFrom valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
DIAMETER__RecvFrom_template& list_item(unsigned int list_index) const;
INTEGER_template& connId();
const INTEGER_template& connId() const;
CHARSTRING_template& remName();
const CHARSTRING_template& remName() const;
INTEGER_template& remPort();
const INTEGER_template& remPort() const;
CHARSTRING_template& locName();
const CHARSTRING_template& locName() const;
INTEGER_template& locPort();
const INTEGER_template& locPort() const;
DIAMETER__Types::PDU__DIAMETER_template& msg();
const DIAMETER__Types::PDU__DIAMETER_template& msg() const;
int size_of() const;
void log() const;
void log_match(const DIAMETER__RecvFrom& 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__Send {
  INTEGER field_connId;
  DIAMETER__Types::PDU__DIAMETER field_msg;
public:
  DIAMETER__Send();
  DIAMETER__Send(const INTEGER& par_connId,
    const DIAMETER__Types::PDU__DIAMETER& par_msg);
  DIAMETER__Send(const DIAMETER__Send& other_value);
  inline boolean is_component() { return FALSE; }
  void clean_up();
const TTCN_Typedescriptor_t* get_descriptor() const;
  DIAMETER__Send& operator=(const DIAMETER__Send& other_value);
  boolean operator==(const DIAMETER__Send& other_value) const;
  inline boolean operator!=(const DIAMETER__Send& other_value) const
    { return !(*this == other_value); }

  boolean is_bound() const;

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

  inline INTEGER& connId()
    {return field_connId;}
  inline const INTEGER& connId() const
    {return field_connId;}
  inline DIAMETER__Types::PDU__DIAMETER& msg()
    {return field_msg;}
  inline const DIAMETER__Types::PDU__DIAMETER& msg() const
    {return field_msg;}
  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 DIAMETER__Send_template : public Base_Template {
struct single_value_struct;
union {
single_value_struct *single_value;
struct {
unsigned int n_values;
DIAMETER__Send_template *list_value;
} value_list;
struct {
DIAMETER__Send_template* precondition;
DIAMETER__Send_template* implied_template;
} implication_;
dynmatch_struct<DIAMETER__Send>* dyn_match;
};

void set_specific();
void copy_value(const DIAMETER__Send& other_value);
void copy_template(const DIAMETER__Send_template& other_value);

public:
DIAMETER__Send_template();
DIAMETER__Send_template(template_sel other_value);
DIAMETER__Send_template(const DIAMETER__Send& other_value);
DIAMETER__Send_template(const OPTIONAL<DIAMETER__Send>& other_value);
DIAMETER__Send_template(DIAMETER__Send_template* p_precondition, DIAMETER__Send_template* p_implied_template);
DIAMETER__Send_template(Dynamic_Match_Interface<DIAMETER__Send>* p_dyn_match);
DIAMETER__Send_template(const DIAMETER__Send_template& other_value);
~DIAMETER__Send_template();
DIAMETER__Send_template& operator=(template_sel other_value);
DIAMETER__Send_template& operator=(const DIAMETER__Send& other_value);
DIAMETER__Send_template& operator=(const OPTIONAL<DIAMETER__Send>& other_value);
DIAMETER__Send_template& operator=(const DIAMETER__Send_template& other_value);
boolean match(const DIAMETER__Send& other_value, boolean legacy = FALSE) const;
boolean is_bound() const;
boolean is_value() const;
void clean_up();
DIAMETER__Send valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
DIAMETER__Send_template& list_item(unsigned int list_index) const;
INTEGER_template& connId();
const INTEGER_template& connId() const;
DIAMETER__Types::PDU__DIAMETER_template& msg();
const DIAMETER__Types::PDU__DIAMETER_template& msg() const;
int size_of() const;
void log() const;
void log_match(const DIAMETER__Send& 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__CODEC__PT : public IPL4asp__PortType::IPL4asp__PT_PROVIDER {
enum msg_selection { MESSAGE_0, MESSAGE_1, MESSAGE_2 };
struct msg_queue_item : public msg_queue_item_base {
msg_selection item_selection;
union {
DIAMETER__RecvFrom *message_0;
IPL4asp__Types::ASP__ConnId__ReadyToRelease *message_1;
Socket__API__Definitions::PortEvent *message_2;
};
component sender_component;
};

void remove_msg_queue_head();
protected:
void clear_queue();
public:
DIAMETER__CODEC__PT(const char *par_port_name = NULL);
~DIAMETER__CODEC__PT();
void send(const DIAMETER__Send& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Send& send_par, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Send& send_par, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Send_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Send_template& send_par, size_t nof_components, const COMPONENT* destination_components, FLOAT* timestamp_redirect = NULL);
void send(const DIAMETER__Send_template& send_par, boolean broadcast = FALSE, FLOAT* timestamp_redirect = NULL);
public:
PORT* get_provider_port();
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__RecvFrom_template& value_template, DIAMETER__RecvFrom *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const DIAMETER__RecvFrom_template& value_template, DIAMETER__RecvFrom *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const DIAMETER__RecvFrom_template& value_template, DIAMETER__RecvFrom *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const IPL4asp__Types::ASP__ConnId__ReadyToRelease_template& value_template, IPL4asp__Types::ASP__ConnId__ReadyToRelease *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const IPL4asp__Types::ASP__ConnId__ReadyToRelease_template& value_template, IPL4asp__Types::ASP__ConnId__ReadyToRelease *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const IPL4asp__Types::ASP__ConnId__ReadyToRelease_template& value_template, IPL4asp__Types::ASP__ConnId__ReadyToRelease *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const Socket__API__Definitions::PortEvent_template& value_template, Socket__API__Definitions::PortEvent *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const Socket__API__Definitions::PortEvent_template& value_template, Socket__API__Definitions::PortEvent *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const Socket__API__Definitions::PortEvent_template& value_template, Socket__API__Definitions::PortEvent *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
private:
void incoming_message(const IPL4asp__Types::ASP__RecvFrom& incoming_par, component sender_component);
void incoming_message(const Socket__API__Definitions::PortEvent& incoming_par, component sender_component);
void incoming_message(const IPL4asp__Types::ASP__ConnId__ReadyToRelease& incoming_par, component sender_component);
protected:
void incoming_message(const IPL4asp__Types::ASP__RecvFrom& incoming_par);
void incoming_message(const Socket__API__Definitions::PortEvent& incoming_par);
void incoming_message(const IPL4asp__Types::ASP__ConnId__ReadyToRelease& incoming_par);
boolean process_message(const char *message_type, Text_Buf& incoming_buf, component sender_component, OCTETSTRING& slider);
};


/* Function prototypes */

extern DIAMETER__RecvFrom_template t__DIAMETER__RecvFrom(const DIAMETER__Types::PDU__DIAMETER_template& msg);
extern DIAMETER__Send_template t__DIAMETER__Send(const INTEGER_template& connId, const DIAMETER__Types::PDU__DIAMETER_template& msg);
extern void IPL4__to__DIAMETER__RecvFrom(const IPL4asp__Types::ASP__RecvFrom& pin, DIAMETER__RecvFrom& pout);
extern void DIAMETER__to__IPL4__Send(const DIAMETER__Send& pin, IPL4asp__Types::ASP__Send& pout);
extern void pre_init_module();
extern void post_init_module();

/* Global variable declarations */

extern const XERdescriptor_t DIAMETER__RecvFrom_connId_xer_;
extern const TTCN_Typedescriptor_t DIAMETER__RecvFrom_connId_descr_;
extern const XERdescriptor_t DIAMETER__RecvFrom_remName_xer_;
extern const TTCN_Typedescriptor_t DIAMETER__RecvFrom_remName_descr_;
extern const XERdescriptor_t DIAMETER__RecvFrom_remPort_xer_;
extern const TTCN_Typedescriptor_t DIAMETER__RecvFrom_remPort_descr_;
extern const XERdescriptor_t DIAMETER__RecvFrom_locName_xer_;
extern const TTCN_Typedescriptor_t DIAMETER__RecvFrom_locName_descr_;
extern const XERdescriptor_t DIAMETER__RecvFrom_locPort_xer_;
extern const TTCN_OERdescriptor_t DIAMETER__RecvFrom_locPort_oer_;
extern const TTCN_Typedescriptor_t DIAMETER__RecvFrom_locPort_descr_;
extern UNIVERSAL_CHARSTRING DIAMETER__RecvFrom_msg_default_coding;
extern const TTCN_Typedescriptor_t DIAMETER__RecvFrom_descr_;
extern const XERdescriptor_t DIAMETER__Send_connId_xer_;
extern const TTCN_OERdescriptor_t DIAMETER__Send_connId_oer_;
extern const TTCN_Typedescriptor_t DIAMETER__Send_connId_descr_;
extern UNIVERSAL_CHARSTRING DIAMETER__Send_msg_default_coding;
extern const TTCN_Typedescriptor_t DIAMETER__Send_descr_;
extern const unsigned char module_checksum[];
extern TTCN_Module module_object;
extern const RuntimeVersionChecker ver_checker;

} /* end of namespace */

#endif
