461 lines
16 KiB
C++
461 lines
16 KiB
C++
/***************************************************************************
|
|
sua_database.h - description
|
|
-------------------
|
|
begin : Tue Jan 8 2002
|
|
copyright : (C) 2002 by Lode Coene
|
|
email : lode.coene@siemens.atea.be
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
/*
|
|
* $Id: sua_database.h,v 1.7 2003/08/28 09:30:20 p82609 Exp $
|
|
*
|
|
* SUA implementation according to SUA draft issue 8.
|
|
*
|
|
* Author(s): Lode Coene
|
|
*
|
|
*
|
|
* Copyright (C) 2001 by Siemens Atea, Herentals, Belgium.
|
|
*
|
|
* Realized in co-operation between Siemens Atea and
|
|
* Siemens AG, Munich, Germany.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* Contact: gery.verwimp@siemens.atea.be
|
|
* lode.coene@siemens.atea.be
|
|
*
|
|
* The alternative comment
|
|
* inspiration : Ann S.
|
|
* "Don't mention the war."
|
|
*
|
|
* Purpose: This code-file defines the SUA database objects for:
|
|
* - Sybsystem Number(SSN) Object
|
|
* - Address Object
|
|
* - Local SUA Object
|
|
* - Local SUA List
|
|
* - Remote SUA object
|
|
* - Remote SUA List
|
|
* - SUA Name Object(host names/Global Titles)
|
|
* - SUA Name List
|
|
* - SUA Association Object
|
|
* - SUA Association List
|
|
* - SUA Application Server Process (ASP) Object
|
|
* - SUA Application Server (AS) Object
|
|
* - SUA Application Server (AS) List
|
|
*/
|
|
|
|
#ifndef SUA_DATABASE_H
|
|
#define SUA_DATABASE_H
|
|
|
|
#include "sua.h"
|
|
#include "sua_asp_mgnt.h"
|
|
#include "sua_snm_mgnt.h"
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
typedef enum {nc_empty, nc_ipv4, nc_ipv6} db_net_class;
|
|
|
|
const int db_MAX_MULTIHOME_ADDR = 2;
|
|
const int db_MAX_LOCAL_SUA = 10;
|
|
const int db_MAX_REMOTE_SUA = 1000;
|
|
const int db_MAX_SSN_SUA = 256;
|
|
const int db_MAX_SUA_AS = 100;
|
|
const int db_MAX_ASP_IN_1AS = 8; /* maximal 8 ASP's can be covered by a single AS */
|
|
const int db_MAX_1ASP_IN_AS = 4; /* 1 ASP can appear in maximal up till 4 different AS's */
|
|
|
|
/***********************************************************************/
|
|
/* Sua_SSNObject */
|
|
/***********************************************************************/
|
|
class db_Sua_SSNObject {
|
|
public:
|
|
short ssn;
|
|
public:
|
|
void read_ssn(string ssn);
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_AddressObject */
|
|
/***********************************************************************/
|
|
class db_Sua_AddressObject {
|
|
public:
|
|
int nr_of_addrs; // number of ip addresses used(multihoming)
|
|
unsigned char address_string[db_MAX_MULTIHOME_ADDR][SCTP_MAX_IP_LEN];
|
|
ipvxunion addrs[db_MAX_MULTIHOME_ADDR];
|
|
SS7union pc;
|
|
public:
|
|
void read_addr_param(string address);
|
|
void read_pointcode_param(string point_code);
|
|
void read_port_num(string port);
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_LocalObject */
|
|
/***********************************************************************/
|
|
class db_Sua_LocalObject{
|
|
public:
|
|
/* ssn supported */
|
|
db_Sua_SSNObject ssn;
|
|
/* maximum number of streams for this instance */
|
|
unsigned int max_streams;
|
|
/* SCTP registered local instance name */
|
|
unsigned int SCTP_instance_name;
|
|
Sua_ULP_CallBacks SUA_APLCallBack;
|
|
/* local source address(es) of instance */
|
|
db_Sua_AddressObject Source;
|
|
name_str Name;
|
|
public:
|
|
// functions of the Class
|
|
void initialize();
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_LocalList */
|
|
/***********************************************************************/
|
|
class db_Sua_LocalList{
|
|
public:
|
|
int num_of_instance;
|
|
db_Sua_LocalObject instance[db_MAX_LOCAL_SUA];
|
|
void initialize();
|
|
void read_ssn(string ssn);
|
|
short register_instance( SCTP_ulp_Callbacks APLCallbackFunctions,
|
|
Sua_ULP_CallBacks SUACallbackFunctions
|
|
);
|
|
short unregister_instance();
|
|
void increase_instance();
|
|
bool found( SS7union pc);
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_RemoteObject */
|
|
/***********************************************************************/
|
|
class db_Sua_RemoteObject{
|
|
public:
|
|
db_Sua_SSNObject ssn;
|
|
/* contains the association sua id with which it is linked. */
|
|
unsigned int SUA_assoc_id;
|
|
/* status of the remote node */
|
|
snm_Sua_pc_state_set status;
|
|
/* dest address of the remote sua node */
|
|
db_Sua_AddressObject Dest;
|
|
public:
|
|
// functions of the Class
|
|
void initialize();
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_RemoteList */
|
|
/***********************************************************************/
|
|
class db_Sua_RemoteList{
|
|
public:
|
|
int num_of_instance;
|
|
public:
|
|
db_Sua_RemoteObject instance[db_MAX_REMOTE_SUA];
|
|
void initialize();
|
|
void read_ssn(string ssn);
|
|
void increase_instance();
|
|
bool found( SS7union pc);
|
|
void Dest_Available( SS7union pc);
|
|
void Dest_Unavailable( SS7union pc);
|
|
void Activate_dests( unsigned int sua_assoc_id);
|
|
void Deactivate_dests( unsigned int sua_assoc_id);
|
|
snm_Sua_pc_state_set get_Dest_status(SS7union pc);
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_GlobalTitleObject */
|
|
/***********************************************************************/
|
|
class db_Sua_GlobalTitle {
|
|
public:
|
|
short Translation_Type;
|
|
short Numbering_Plan;
|
|
short Nature_of_Address;
|
|
/*short nr_of_digits;*/
|
|
string digits;
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_NameObject */
|
|
/***********************************************************************/
|
|
class db_Sua_NameObject {
|
|
public:
|
|
unsigned int SUA_assoc_id;
|
|
boolean GT_present;
|
|
db_Sua_GlobalTitle GT;
|
|
string hostname;
|
|
public:
|
|
void initialize();
|
|
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_NameList */
|
|
/***********************************************************************/
|
|
class db_Sua_NameList{
|
|
public:
|
|
int num_of_instance;
|
|
db_Sua_NameObject instance[db_MAX_REMOTE_SUA];
|
|
public:
|
|
void initialize();
|
|
void read_host_name( unsigned int gtname_id,
|
|
string name
|
|
);
|
|
void read_Global_Title( unsigned int gtname_id,
|
|
unsigned int tt,
|
|
unsigned int na,
|
|
unsigned int np,
|
|
string digits
|
|
);
|
|
signed int resolve_host_name( hostname_str& dest_name,
|
|
pointcode_str& dest_pc
|
|
);
|
|
signed int perform_GTT( global_title_str& cld_in,
|
|
global_title_str& clg_in,
|
|
global_title_str& cld_out,
|
|
global_title_str& clg_out,
|
|
pointcode_str& dest_pc
|
|
);
|
|
void increase_instance();
|
|
}; ///:~
|
|
|
|
|
|
/***********************************************************************/
|
|
/* Sua_ApplicationServerProcessObject (ASP) */
|
|
/***********************************************************************/
|
|
class db_Sua_ASPObject {
|
|
public:
|
|
asp_Sua_asp_state_set status; /* status of the ASP */
|
|
short linked_to_AS[db_MAX_1ASP_IN_AS]; /* this ASP may belong to different Application Servers(AS) */
|
|
public:
|
|
void initialize();
|
|
bool activate( unsigned int sua_assoc_id, short mode );
|
|
void deactivate( unsigned int sua_assoc_id, short mode );
|
|
void down( unsigned sua_assoc_id, short mode );
|
|
void up( unsigned sua_assoc_id, short mode );
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_LS_OverRideObject (LS_OverRide) */
|
|
/***********************************************************************/
|
|
class db_Sua_LS_OverRideObject {
|
|
private:
|
|
short ASP_to_use; /* ASP presently being the workhorse)*/
|
|
public:
|
|
void assign_ASP(short ASP_num);
|
|
short ASP_used();
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_LS_RoundRobinObject (LS_RoundRobin) */
|
|
/***********************************************************************/
|
|
class db_Sua_LS_RoundRobinObject {
|
|
private:
|
|
short ASP_to_use; /* ASP presently being the workhorse)*/
|
|
public:
|
|
short ASP_used();
|
|
};
|
|
|
|
/***********************************************************************/
|
|
/* Sua_LoadShareObject (LS_AS) */
|
|
/***********************************************************************/
|
|
class db_Sua_LoadShareObject {
|
|
public:
|
|
asp_Sua_loadmode_set load_mode; /* mode of loadsharing)*/
|
|
db_Sua_LS_OverRideObject override; /* AS has a ASP in override */
|
|
db_Sua_LS_RoundRobinObject RRobin; /* AS is RR all active ASP's */
|
|
}; ///:~
|
|
|
|
|
|
/***********************************************************************/
|
|
/* Sua_ApplicationServerObject (AS) */
|
|
/***********************************************************************/
|
|
class db_Sua_ASObject {
|
|
public:
|
|
asp_Sua_as_state_set status; /* status of the AS */
|
|
short ASP_linked_to_this_AS[db_MAX_ASP_IN_1AS];/* AS may contain a couple of ASP's */
|
|
db_Sua_LoadShareObject loadshare;
|
|
public:
|
|
void initialize();
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_ApplicationServerList (AS list) */
|
|
/***********************************************************************/
|
|
class db_Sua_ASList{
|
|
public:
|
|
int num_of_instance;
|
|
db_Sua_ASObject instance[db_MAX_SUA_AS];
|
|
public:
|
|
void initialize();
|
|
short read_AS( string address_str,
|
|
unsigned int sua_id
|
|
);
|
|
void override_ASP( unsigned int asp_sua_assoc_id,
|
|
unsigned int AS_id,
|
|
short mode
|
|
);
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_AssociationsObject */
|
|
/***********************************************************************/
|
|
class db_Sua_AssociationObject {
|
|
public:
|
|
unsigned int SCTP_assoc_id;
|
|
unsigned int SCTP_instance_name;
|
|
unsigned int remote_sua_id;
|
|
unsigned int local_sua_id;
|
|
short nr_of_inbound_streams;
|
|
short nr_of_outbound_streams;
|
|
boolean init_assoc;
|
|
db_Sua_ASPObject asp;
|
|
db_net_class netw; // sort of network(v4/v6) to be used
|
|
// ip source/destination addresses , should be the same network type
|
|
db_Sua_AddressObject Source;
|
|
db_Sua_AddressObject Dest;
|
|
public:
|
|
void initialize();
|
|
short shutdown();
|
|
}; ///:~
|
|
|
|
/***********************************************************************/
|
|
/* Sua_AssociationList */
|
|
/***********************************************************************/
|
|
class db_Sua_AssociationList{
|
|
public:
|
|
int num_of_instance;
|
|
db_Sua_AssociationObject instance[db_MAX_REMOTE_SUA];
|
|
public:
|
|
void initialize();
|
|
void read_Source_addr(string address);
|
|
void read_Dest_addr(string address);
|
|
void read_Source_pointcode(string address);
|
|
void read_Dest_pointcode(string address);
|
|
void read_Source_port(string port);
|
|
void read_Dest_port(string port);
|
|
void read_stream_number(string stream_num);
|
|
unsigned int Find_association( unsigned int sctp_assoc_id,
|
|
unsigned int &Local_sua_id,
|
|
unsigned int &Remote_sua_id
|
|
);
|
|
short associate_instance( db_Sua_LocalList& local_sua,
|
|
db_Sua_RemoteList& remote_sua
|
|
);
|
|
unsigned int passive_associate( unsigned int assoc_id,
|
|
db_Sua_LocalList& local_sua,
|
|
db_Sua_RemoteList& remote_sua,
|
|
unsigned short nr_of_dest_addr,
|
|
unsigned short nr_of_input_streams,
|
|
unsigned short nr_of_output_streams
|
|
);
|
|
unsigned int Dynamic_Associate( db_Sua_LocalList& local_sua,
|
|
db_Sua_RemoteList& remote_sua,
|
|
sccp_addr_str& cld,
|
|
sccp_addr_str& clg,
|
|
unsigned short nr_of_dest_addr,
|
|
unsigned short nr_of_input_streams,
|
|
unsigned short nr_of_output_streams
|
|
);
|
|
short Terminate_remote_assoc_instance();
|
|
short shutdown();
|
|
void increase_instance();
|
|
bool activate( unsigned int sua_id,
|
|
short mode
|
|
);
|
|
void deactivate( unsigned int sua_id,
|
|
short mode
|
|
);
|
|
void down( unsigned int sua_id,
|
|
short mode
|
|
);
|
|
void up( unsigned int sua_id,
|
|
short mode
|
|
);
|
|
}; ///:~
|
|
|
|
|
|
/***********************************************************************/
|
|
/* Sua_DatabaseList */
|
|
/***********************************************************************/
|
|
class db_Sua_DatabaseList{
|
|
public:
|
|
db_Sua_LocalList local_sua;
|
|
db_Sua_RemoteList remote_sua;
|
|
db_Sua_AssociationList AssocDB;
|
|
db_Sua_NameList NameDB;
|
|
db_Sua_ASList ApplicServ;
|
|
public:
|
|
void initialize();
|
|
unsigned int Find_local_sua( sccp_addr_str& local_address
|
|
);
|
|
unsigned int Dynamic_Associate( sccp_addr_str& cld,
|
|
sccp_addr_str& clg,
|
|
unsigned short nr_of_dest_addr,
|
|
unsigned short nr_of_input_streams,
|
|
unsigned short nr_of_output_streams
|
|
);
|
|
signed int route_on_SS7pc ( SS7union& dest_pc,
|
|
SS7union& org_pc,
|
|
int& sua_assoc_id
|
|
);
|
|
signed int route_on_IPpc ( ipvxunion& dest_pc,
|
|
ipvxunion& org_pc,
|
|
int& sua_assoc_id
|
|
);
|
|
signed int route_on_GTname ( hostname_str& dest_name,
|
|
hostname_str& org_name,
|
|
int& sua_assoc_id,
|
|
pointcode_str& dest_pc,
|
|
pointcode_str& org_pc
|
|
);
|
|
signed int route_on_GTT( global_title_str& dest_GT,
|
|
global_title_str& org_GT,
|
|
int& sua_assoc_id,
|
|
pointcode_str& dest_pc,
|
|
pointcode_str& org_pc
|
|
);
|
|
signed int route_msg( sccp_addr_str& cld,
|
|
sccp_addr_str& clg,
|
|
int& sua_assoc_id
|
|
);
|
|
}; ///:~
|
|
|
|
|
|
#endif // SUA_DATABASE_H
|
|
|
|
//end of module sua_database.h
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|