update to sualibrary-0.1.1 from 2002-03-15:
* Contains Relaying functionality using hostnames. * Correct some bugs (multihoming....) * Compiles and runs on Linux, FreeBSD .... * Tested on IPv4 and IPV6 networks * interoperable with other SUA implementations * corresponds to sua draft v11 * requires SCTP implementation from www.sctp.de
This commit is contained in:
parent
acd8cf6013
commit
7e7186ca00
|
@ -1,57 +1,57 @@
|
|||
# KDE Config File
|
||||
[Workspace_1]
|
||||
openfiles=Untitled.h,Untitled.cpp,/home/p82609/siemens/sualibrary/sualibrary/docs/en/index.html,/home/p82609/siemens/sualibrary/sualibrary/docs/en/index-1.html,/home/p82609/siemens/sualibrary/sualibrary/docs/en/index-4.html,/home/p82609/siemens/sualibrary/sualibrary/docs/en/index-2.html,/home/p82609/siemens/sualibrary/sualibrary/docs/en/index-3.html,/home/p82609/siemens/sualibrary/sualibrary/docs/en/index-5.html,/home/p82609/siemens/sualibrary/sualibrary/docs/en/index-6.html,/home/p82609/siemens/sualibrary/sualibrary/docs/en/Makefile.in,/home/p82609/siemens/sualibrary/sualibrary/docs/en/index.sgml,
|
||||
show_outputview=true
|
||||
show_treeview=true
|
||||
header_file=/home/p82609/siemens/sualibrary/sualibrary/docs/en/index-4.html
|
||||
cpp_file=Untitled.cpp
|
||||
browser_file=file:/opt/kde/share/doc/HTML/default/kdevelop/reference/C/LIBRARIES/libraries.html
|
||||
[sualibrary/docs/en/index-6.html]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/sua/sua_logging.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary/sua/sua_logging.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/sua/sua_adapt.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[Workspace_1]
|
||||
openfiles=Untitled.h,Untitled.cpp,/home/p82609/siemens/sualibrary/sualibrary/sua/sua_datassoc.cpp,/home/p82609/siemens/sualibrary/sualibrary/sua/sua_distribution.cpp,
|
||||
show_outputview=true
|
||||
show_treeview=true
|
||||
header_file=Untitled.h
|
||||
cpp_file=/home/p82609/siemens/sualibrary/sualibrary/sua/sua_datassoc.cpp
|
||||
browser_file=file:/opt/kde/share/doc/HTML/default/kdevelop/reference/C/LIBRARIES/libraries.html
|
||||
[COPYING]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/sua/sua_adapt.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/sua/sua_logging.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/sua/sua_logging.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary/sua/sua_database.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[Config for BinMakefileAm]
|
||||
ldflags=
|
||||
addcxxflags=
|
||||
ldadd=
|
||||
cxxflags=-O0 -g3 -Wall
|
||||
bin_program=sualibrary
|
||||
[sualibrary/sua/sua.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary/sua/sua_tcb.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary/sua/sua.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[Config for BinMakefileAm]
|
||||
ldflags=
|
||||
addcxxflags=
|
||||
ldadd=
|
||||
bin_program=sualibrary
|
||||
cxxflags=-O0 -g3 -Wall
|
||||
[sualibrary/testup/main.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
|
@ -62,22 +62,22 @@ install_location=
|
|||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/sua/sua_file.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary/sua/sua_asp_mgnt.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary.kdevprj]
|
||||
[sualibrary/sua/sua_file.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary/docs/en/index-1.html]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/docs/en/index-1.html]
|
||||
[sualibrary.kdevprj]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
|
@ -93,21 +93,26 @@ install_location=
|
|||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/docs/en/Makefile.am]
|
||||
files=sualibrary/docs/en/index.html,sualibrary/docs/en/index-1.html,sualibrary/docs/en/index-2.html,sualibrary/docs/en/index-3.html,sualibrary/docs/en/index-4.html,sualibrary/docs/en/index-5.html,sualibrary/docs/en/index-6.html,
|
||||
sub_dirs=
|
||||
type=normal
|
||||
[sualibrary/sua/sua_sual.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/docs/en/Makefile.am]
|
||||
files=sualibrary/docs/en/index.html,sualibrary/docs/en/index-1.html,sualibrary/docs/en/index-2.html,sualibrary/docs/en/index-3.html,sualibrary/docs/en/index-4.html,sualibrary/docs/en/index-5.html,sualibrary/docs/en/index-6.html,
|
||||
type=normal
|
||||
sub_dirs=
|
||||
[sualibrary/docs/en/index.html]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/sua/sua_file.cpp]
|
||||
[sualibrary/docs/en/index-3.html]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/sua/sua_asp_mgnt.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
|
@ -117,35 +122,25 @@ install_location=
|
|||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/sua/sua_asp_mgnt.cpp]
|
||||
[sualibrary/sua/sua_file.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/docs/en/index-3.html]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/docs/Makefile.am]
|
||||
type=normal
|
||||
sub_dirs=en,
|
||||
[sualibrary/testup/assoc.sua]
|
||||
install_location=
|
||||
dist=false
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/sua/sua_distribution.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary/docs/Makefile.am]
|
||||
sub_dirs=en,
|
||||
type=normal
|
||||
[sualibrary/docs/en/index-4.html]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/testup/testuser.h]
|
||||
[sualibrary/sua/sua_distribution.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
|
@ -155,20 +150,25 @@ install_location=
|
|||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/sua/sua_tcb.cpp]
|
||||
[sualibrary/testup/testuser.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/Makefile.am]
|
||||
files=
|
||||
type=prog_main
|
||||
sub_dirs=docs,sua,testup,
|
||||
type=HEADER
|
||||
[sualibrary.lsm]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/Makefile.am]
|
||||
files=
|
||||
sub_dirs=docs,sua,testup,
|
||||
type=prog_main
|
||||
[sualibrary/sua/sua_tcb.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/docs/en/index-5.html]
|
||||
install_location=
|
||||
dist=true
|
||||
|
@ -179,53 +179,48 @@ install_location=
|
|||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/sua/sua_cl.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[ChangeLog]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/sua/sua_cl.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[General]
|
||||
make_options=-j1
|
||||
makefiles=Makefile.am,sualibrary/Makefile.am,sualibrary/docs/Makefile.am,sualibrary/docs/en/Makefile.am,sualibrary/sua/Makefile.am,sualibrary/testup/Makefile.am,
|
||||
version_control=None
|
||||
project_type=normal_cpp
|
||||
author=Lode Coene
|
||||
project_type=normal_cpp
|
||||
sub_dir=sualibrary/
|
||||
lfv_open_groups=
|
||||
workspace=1
|
||||
project_name=Sualibrary
|
||||
version=0.1
|
||||
AMChanged=true
|
||||
project_name=Sualibrary
|
||||
AMChanged=false
|
||||
sgml_file=/home/p82609/sualibrary/sualibrary/docs/en/index.sgml
|
||||
short_info=,
|
||||
email=lode.coene@siemens.atea.be
|
||||
kdevprj_version=1.2
|
||||
configure_args=
|
||||
modifyMakefiles=true
|
||||
[INSTALL]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/sua/Makefile.am]
|
||||
files=sualibrary/sua/sua.h,sualibrary/sua/sua_adapt.cpp,sualibrary/sua/sua_adapt.h,sualibrary/sua/sua_asp_mgnt.cpp,sualibrary/sua/sua_asp_mgnt.h,sualibrary/sua/sua_cl.cpp,sualibrary/sua/sua_cl.h,sualibrary/sua/sua_datassoc.cpp,sualibrary/sua/sua_co.cpp,sualibrary/sua/sua_co.h,sualibrary/sua/sua_database.cpp,sualibrary/sua/sua_database.h,sualibrary/sua/sua_dataname.cpp,sualibrary/sua/sua_debug.h,sualibrary/sua/sua_distribution.cpp,sualibrary/sua/sua_distribution.h,sualibrary/sua/sua_file.cpp,sualibrary/sua/sua_file.h,sualibrary/sua/sua_logging.cpp,sualibrary/sua/sua_logging.h,sualibrary/sua/sua_sual.cpp,sualibrary/sua/sua_sual.h,sualibrary/sua/sua_syntax.cpp,sualibrary/sua/sua_syntax.h,sualibrary/sua/sua_tcb.cpp,sualibrary/sua/sua_tcb.h,
|
||||
type=static_library
|
||||
[TODO]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/sua/Makefile.am]
|
||||
files=sualibrary/sua/sua.h,sualibrary/sua/sua_adapt.cpp,sualibrary/sua/sua_adapt.h,sualibrary/sua/sua_asp_mgnt.cpp,sualibrary/sua/sua_asp_mgnt.h,sualibrary/sua/sua_cl.cpp,sualibrary/sua/sua_cl.h,sualibrary/sua/sua_datassoc.cpp,sualibrary/sua/sua_co.cpp,sualibrary/sua/sua_co.h,sualibrary/sua/sua_database.cpp,sualibrary/sua/sua_database.h,sualibrary/sua/sua_dataname.cpp,sualibrary/sua/sua_debug.h,sualibrary/sua/sua_distribution.cpp,sualibrary/sua/sua_distribution.h,sualibrary/sua/sua_file.cpp,sualibrary/sua/sua_file.h,sualibrary/sua/sua_logging.cpp,sualibrary/sua/sua_logging.h,sualibrary/sua/sua_sual.cpp,sualibrary/sua/sua_sual.h,sualibrary/sua/sua_syntax.cpp,sualibrary/sua/sua_syntax.h,sualibrary/sua/sua_tcb.cpp,sualibrary/sua/sua_tcb.h,
|
||||
type=static_library
|
||||
[sualibrary/sua/sua_syntax.h]
|
||||
[INSTALL]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary/sua/sua_co.h]
|
||||
type=DATA
|
||||
[sualibrary/sua/sua_syntax.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
|
@ -235,7 +230,17 @@ install_location=local.sua
|
|||
dist=false
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/testup/testuser.cpp]
|
||||
[sualibrary/sua/sua_co.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary/sua/sua_adapt.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary/sua/sua_co.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
|
@ -245,17 +250,16 @@ install_location=
|
|||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/sua/sua_co.cpp]
|
||||
[sualibrary/testup/testuser.cpp]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/sua/sua_adapt.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[sualibrary/sua/sua_sual.h]
|
||||
[Makefile.am]
|
||||
files=sualibrary.kdevprj,AUTHORS,COPYING,ChangeLog,INSTALL,README,TODO,sualibrary.lsm,
|
||||
sub_dirs=sualibrary,
|
||||
type=normal
|
||||
[sualibrary/sua/sua_cl.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
|
@ -265,24 +269,20 @@ install_location=
|
|||
dist=true
|
||||
install=false
|
||||
type=SOURCE
|
||||
[sualibrary/sua/sua_cl.h]
|
||||
[sualibrary/sua/sua_sual.h]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=HEADER
|
||||
[Makefile.am]
|
||||
files=sualibrary.kdevprj,AUTHORS,COPYING,ChangeLog,INSTALL,README,TODO,sualibrary.lsm,
|
||||
type=normal
|
||||
sub_dirs=sualibrary,
|
||||
[sualibrary/testup/Makefile.am]
|
||||
files=sualibrary/testup/main.cpp,sualibrary/testup/testuser.cpp,sualibrary/testup/testuser.h,sualibrary/testup/local.sua,sualibrary/testup/assoc.sua,
|
||||
sub_dirs=
|
||||
type=static_library
|
||||
[AUTHORS]
|
||||
install_location=
|
||||
dist=true
|
||||
install=false
|
||||
type=DATA
|
||||
[sualibrary/testup/Makefile.am]
|
||||
files=sualibrary/testup/main.cpp,sualibrary/testup/testuser.cpp,sualibrary/testup/testuser.h,sualibrary/testup/local.sua,sualibrary/testup/assoc.sua,
|
||||
type=static_library
|
||||
sub_dirs=
|
||||
[sualibrary/sua/sua_debug.h]
|
||||
install_location=
|
||||
dist=true
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
* *
|
||||
***************************************************************************/
|
||||
/*
|
||||
* $Id: sua_cl.cpp,v 1.1.1.1 2002/02/04 14:30:41 p82609 Exp $
|
||||
* $Id: sua_cl.cpp,v 1.3 2002/03/01 12:57:38 p82609 Exp $
|
||||
*
|
||||
* SUA implementation according to SUA draft issue 6.
|
||||
*
|
||||
|
@ -48,7 +48,9 @@
|
|||
* inspiration : Dorothee
|
||||
* "Always admire the local beauties in their natural enviroment."
|
||||
*
|
||||
* Purpose: This code-file defines the SUA connectionless message handling:
|
||||
* Purpose: This code-file defines the SUA connectionless message handling:
|
||||
* - send a SUA message(CL or CO) to SCTP
|
||||
* - route a SUA message(CL or CO)
|
||||
* - send a Unitdata msg to remote node
|
||||
* (- send a Unitdata Service msg to remote node)
|
||||
* - Process a Unitdata msg
|
||||
|
@ -92,24 +94,180 @@ extern tcb_Sua_msgqueue_pool msg_store;
|
|||
// import the received msg pool
|
||||
extern vector<sua_save_str> rec_msg_pool;
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
/* sua_send_Message */
|
||||
/***********************************************************************/
|
||||
int sua_send_Message( signed int sctp_assoc_id,
|
||||
short int sctp_stream_id,
|
||||
int sctp_delivery_type,
|
||||
unsigned int sctp_loadshare,
|
||||
char *databuf,
|
||||
unsigned int datalen
|
||||
)
|
||||
{
|
||||
signed int result;
|
||||
/* send data to SCTP */
|
||||
/* yes it does, continue, no problem, send the msg */
|
||||
#ifdef DEBUG
|
||||
/* display byte array */
|
||||
display_byte_array(databuf , datalen);
|
||||
#endif
|
||||
char logstring[100];
|
||||
sprintf(logstring, "SUA encoded message, ready for being send to SCTP assoc %d", sctp_assoc_id);
|
||||
event_log("sua_cl.c",logstring);
|
||||
log_byte_array("sua_cl.c", databuf,datalen);
|
||||
|
||||
result = sctp_send ( sctp_assoc_id,
|
||||
sctp_stream_id,
|
||||
(unsigned char *) databuf,
|
||||
datalen,
|
||||
SUA_PPI,
|
||||
SCTP_USE_PRIMARY, /* replace in future with sctp_loadshare*/
|
||||
SCTP_NO_CONTEXT,
|
||||
SCTP_INFINITE_LIFETIME,
|
||||
sctp_delivery_type,
|
||||
SCTP_BUNDLING_DISABLED
|
||||
);
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
cout << "sua_cl.c:result sctp send = "<< result << "\n";
|
||||
printf( "%d \n", result);
|
||||
#endif
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
/***********************************************************************/
|
||||
/* sua_route_Message */
|
||||
/***********************************************************************/
|
||||
int sua_route_Message( unsigned int sctp_assoc_id,
|
||||
unsigned int local_sua_id,
|
||||
Sua_container &msg,
|
||||
sccp_addr_str &called_pty_address,
|
||||
sccp_addr_str &calling_pty_address
|
||||
)
|
||||
{
|
||||
int result = 0;
|
||||
short int sctp_stream_id = 0;
|
||||
int sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||
int sua_assoc_id = 0;
|
||||
int datalen = 0;
|
||||
Sua_syntax_error_struct error;
|
||||
|
||||
// call routing to figure out which association to take for sending
|
||||
// out the message
|
||||
#ifdef DEBUG
|
||||
cout << "call routing function\n";
|
||||
#endif
|
||||
sctp_assoc_id = Assoc_sua.route_msg( called_pty_address,
|
||||
calling_pty_address,
|
||||
sua_assoc_id
|
||||
);
|
||||
#ifdef DEBUG
|
||||
cout << "routed to SCTP assoc " << sctp_assoc_id << "/SUA assoc id " << sua_assoc_id <<"\n";
|
||||
#endif
|
||||
|
||||
/* does association exist? */
|
||||
if (sctp_assoc_id > 0)
|
||||
{
|
||||
/* YES, encode the SUA unitdata message and ... */
|
||||
error = msg.sua_encode();
|
||||
|
||||
/* figure out SCTP delivery type, stream to send msg on,...and.. */
|
||||
if (msg.sua_prim.prot_class_pres)
|
||||
{
|
||||
switch(msg.sua_prim.prot_class.pcl)
|
||||
{
|
||||
case(prot_class_0): /* connectionless transport, non sequenced */
|
||||
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
break;
|
||||
case(prot_class_1): /* connectionless transport, sequenced */
|
||||
sctp_delivery_type = SCTP_ORDERED_DELIVERY;
|
||||
break;
|
||||
case(prot_class_2): /* connection-oriented transport, ... */
|
||||
sctp_delivery_type = SCTP_ORDERED_DELIVERY;
|
||||
break;
|
||||
case(prot_class_3): /* connection-oriented transport, ... */
|
||||
sctp_delivery_type = SCTP_ORDERED_DELIVERY;
|
||||
break;
|
||||
default:
|
||||
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
break;
|
||||
}
|
||||
sctp_stream_id = Assoc_sua.instance[sua_assoc_id].nr_of_outbound_streams;
|
||||
sctp_stream_id = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
sctp_stream_id = 0;
|
||||
}
|
||||
|
||||
/* copy data into buffer, then finally... */
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||
|
||||
datalen = msg.sua_msg.length();
|
||||
|
||||
// send data to SCTP
|
||||
result = sua_send_Message( sctp_assoc_id,
|
||||
sctp_stream_id,
|
||||
sctp_delivery_type,
|
||||
sctp_loadshare,
|
||||
databuf,
|
||||
datalen
|
||||
);
|
||||
|
||||
delete databuf;
|
||||
|
||||
#ifdef DEBUG
|
||||
cout.setf(ios::internal);
|
||||
cout << "sua_cl.c:result sua send = "<< result << "\n";
|
||||
#endif
|
||||
|
||||
}
|
||||
else if (sctp_assoc_id < 0)
|
||||
{
|
||||
/* NOPE, message is routable, but destination is blocked */
|
||||
/* due to administration or management descisions */
|
||||
#ifdef DEBUG
|
||||
cout << "sua_cl.c:sending msg prohibited \n";
|
||||
#endif
|
||||
result = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* NOPE message is NOT routable, destination not found. */
|
||||
/* drop the message, no route present for that address */
|
||||
result = 0;
|
||||
}
|
||||
|
||||
return(result);
|
||||
|
||||
}
|
||||
|
||||
/***********************************************************************/
|
||||
/* sua_send_Unitdata */
|
||||
/***********************************************************************/
|
||||
int sua_send_Unitdata(sccp_QOS_str &QOS,
|
||||
sccp_addr_str &called_pty_address,
|
||||
sccp_addr_str &calling_pty_address,
|
||||
char *buffer,
|
||||
unsigned int len
|
||||
)
|
||||
int sua_send_Unitdata ( sccp_QOS_str &QOS,
|
||||
sccp_addr_str &called_pty_address,
|
||||
sccp_addr_str &calling_pty_address,
|
||||
char *buffer,
|
||||
unsigned int len
|
||||
)
|
||||
{
|
||||
Sua_container msg;
|
||||
Sua_syntax_error_struct error;
|
||||
int error_value;
|
||||
int error_value = 0;
|
||||
int string_size, datalen;
|
||||
signed int sctp_assoc_id;
|
||||
unsigned int sua_assoc_id;
|
||||
short stream_id = 0;
|
||||
int delivery_type, result;
|
||||
int sua_assoc_id;
|
||||
short sctp_stream_id = 0;
|
||||
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||
int sctp_delivery_type, result;
|
||||
tcb_Sua_msg_elem sua_msg;
|
||||
|
||||
// init the message
|
||||
|
@ -134,14 +292,14 @@ int sua_send_Unitdata(sccp_QOS_str &QOS,
|
|||
msg.sua_prim.prot_class.pcl = prot_class_0;
|
||||
msg.sua_prim.seq_control_pres = TRUE;
|
||||
msg.sua_prim.seq_control = QOS.sequence_number;
|
||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
break;
|
||||
case(class1):
|
||||
msg.sua_prim.prot_class_pres = TRUE;
|
||||
msg.sua_prim.prot_class.pcl = prot_class_1;
|
||||
msg.sua_prim.seq_control_pres = TRUE;
|
||||
msg.sua_prim.seq_control = QOS.sequence_number;
|
||||
delivery_type = SCTP_ORDERED_DELIVERY;
|
||||
sctp_delivery_type = SCTP_ORDERED_DELIVERY;
|
||||
break;
|
||||
default:
|
||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
||||
|
@ -297,46 +455,35 @@ int sua_send_Unitdata(sccp_QOS_str &QOS,
|
|||
cout << "call routing function\n";
|
||||
#endif
|
||||
sctp_assoc_id = Assoc_sua.route_msg( called_pty_address,
|
||||
calling_pty_address
|
||||
);
|
||||
calling_pty_address,
|
||||
sua_assoc_id
|
||||
);
|
||||
#ifdef DEBUG
|
||||
cout << "routed to SCTP assoc " << sctp_assoc_id << "\n";
|
||||
#endif
|
||||
/* does association exist? */
|
||||
if (sctp_assoc_id > 0)
|
||||
{
|
||||
// send data to SCTP
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
/* copy data into buffer, then finally... */
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||
|
||||
datalen = msg.sua_msg.length();
|
||||
|
||||
/* yes it does, continue, no problem, send the msg */
|
||||
#ifdef DEBUG
|
||||
// display byte array
|
||||
display_byte_array(databuf , msg.sua_msg.length());
|
||||
#endif
|
||||
char logstring[100];
|
||||
sprintf(logstring, "SUA encoded message, ready for being send to SCTP assoc %d", sctp_assoc_id);
|
||||
event_log("sua_cl.c",logstring);
|
||||
log_byte_array("sua_cl.c", databuf,msg.sua_msg.length());
|
||||
|
||||
result = sctp_send ( sctp_assoc_id,
|
||||
stream_id,
|
||||
(unsigned char *) databuf,
|
||||
datalen,
|
||||
SUA_PPI,
|
||||
SCTP_USE_PRIMARY,
|
||||
SCTP_NO_CONTEXT,
|
||||
SCTP_INFINITE_LIFETIME,
|
||||
delivery_type,
|
||||
SCTP_BUNDLING_DISABLED
|
||||
);
|
||||
|
||||
error_value = result;
|
||||
delete databuf;
|
||||
|
||||
// send data to SCTP
|
||||
result = sua_send_Message( sctp_assoc_id,
|
||||
sctp_stream_id,
|
||||
sctp_delivery_type,
|
||||
sctp_loadshare,
|
||||
databuf,
|
||||
datalen
|
||||
);
|
||||
|
||||
delete databuf;
|
||||
#ifdef DEBUG
|
||||
cout << "sua_cl.c:result sctp send = "<< result << "\n";
|
||||
#endif
|
||||
error_value = 0;
|
||||
}
|
||||
else if (sctp_assoc_id < 0)
|
||||
{
|
||||
|
@ -361,12 +508,12 @@ int sua_send_Unitdata(sccp_QOS_str &QOS,
|
|||
/* - save the msg till the association is setup or */
|
||||
/* association setup fails -> drop saved msg */
|
||||
sua_msg.byte = msg.sua_msg;
|
||||
sua_msg.delivery_type = delivery_type;
|
||||
sua_msg.stream_id = stream_id;
|
||||
sua_msg.delivery_type = sctp_delivery_type;
|
||||
sua_msg.stream_id = sctp_stream_id;
|
||||
sua_msg.valid = true;
|
||||
msg_store.add_msg ( sua_assoc_id,
|
||||
sua_msg
|
||||
);
|
||||
sua_msg
|
||||
);
|
||||
|
||||
error_value = -1;
|
||||
}
|
||||
|
@ -385,8 +532,9 @@ short process_unitdata_msg ( int local_sua_id,
|
|||
Sua_container &msg
|
||||
)
|
||||
{
|
||||
|
||||
sua_save_str temp;
|
||||
int result = 0;
|
||||
int sctp_assoc_id = 0;
|
||||
|
||||
temp.primitive = N_UNITDATA;
|
||||
temp.user_ref = 0;
|
||||
|
@ -435,7 +583,7 @@ short process_unitdata_msg ( int local_sua_id,
|
|||
if (msg.sua_prim.source_addr.pc_pres == TRUE)
|
||||
{
|
||||
temp.calling_pty_address.address_fields_present.pc = ss7_pc_present;
|
||||
temp.calling_pty_address.pc.ss7.ITU24.family = ITU24bit;
|
||||
temp.calling_pty_address.pc.ss7.ITU24.family = Assoc_sua.instance[sua_assoc_id].Dest.pc.ITU14.family;
|
||||
temp.calling_pty_address.pc.ss7.ITU24.pc = msg.sua_prim.source_addr.pc;
|
||||
}
|
||||
if (msg.sua_prim.source_addr.gt_pres == TRUE)
|
||||
|
@ -483,11 +631,25 @@ short process_unitdata_msg ( int local_sua_id,
|
|||
|
||||
// retrieve the called(=destination) address(=should be our own local addr)
|
||||
// not completely done yet
|
||||
if (msg.sua_prim.dest_addr.ip_addr_pres == TRUE)
|
||||
{
|
||||
temp.called_pty_address.address_fields_present.pc = ipvx_pc_present;
|
||||
if (msg.sua_prim.dest_addr.ip_addr_type == ip_v4) {
|
||||
temp.called_pty_address.pc.ipvx.sin = msg.sua_prim.dest_addr.ip_addr.ipv4;
|
||||
temp.called_pty_address.pc.ipvx.sa.sa_family = AF_INET;
|
||||
temp.called_pty_address.pc.ipvx.sin.sin_port = Assoc_sua.instance[sua_assoc_id].Dest.addrs[0].sin.sin_port;
|
||||
}
|
||||
else if (msg.sua_prim.dest_addr.ip_addr_type == ip_v6) {
|
||||
temp.called_pty_address.pc.ipvx.sin6 = msg.sua_prim.dest_addr.ip_addr.ipv6;
|
||||
temp.called_pty_address.pc.ipvx.sa.sa_family = AF_INET6;
|
||||
temp.called_pty_address.pc.ipvx.sin6.sin6_port = Assoc_sua.instance[sua_assoc_id].Dest.addrs[0].sin.sin_port;
|
||||
}
|
||||
}
|
||||
if (msg.sua_prim.dest_addr.pc_pres == TRUE)
|
||||
{
|
||||
temp.called_pty_address.address_fields_present.pc = ss7_pc_present;
|
||||
temp.called_pty_address.pc.ss7.ITU24.family = ITU24bit;
|
||||
temp.called_pty_address.pc.ss7.ITU24.pc = msg.sua_prim.source_addr.pc;
|
||||
temp.called_pty_address.pc.ss7.ITU24.family = Assoc_sua.instance[sua_assoc_id].Dest.pc.ITU14.family;
|
||||
temp.called_pty_address.pc.ss7.ITU24.pc = msg.sua_prim.dest_addr.pc;
|
||||
}
|
||||
|
||||
if (msg.sua_prim.dest_addr.hostname_pres == TRUE)
|
||||
|
@ -525,19 +687,33 @@ short process_unitdata_msg ( int local_sua_id,
|
|||
temp.userdata = msg.sua_prim.data_string;
|
||||
else
|
||||
cout << "sua_cl.c: no sua user data in unitdata msg \n";
|
||||
|
||||
// store primitive in a list(is retrieve via sua_receive_msg)
|
||||
rec_msg_pool.push_back(temp);
|
||||
|
||||
|
||||
|
||||
/* call the application/user callBack function */
|
||||
local_sua.instance[local_sua_id].SUA_APLCallBack.ulp_ClDataIndNotif
|
||||
( local_sua_id,
|
||||
N_UNITDATA,
|
||||
temp.userdata.length()
|
||||
);
|
||||
/* Is this the final destination ? */
|
||||
if ( Assoc_sua.Find_local_sua ( temp.called_pty_address) > 0 )
|
||||
{
|
||||
/* Yes, message has arrived at its final destination -> send to upper layer */
|
||||
/* store primitive in a list(is retrieve via sua_receive_msg) */
|
||||
rec_msg_pool.push_back(temp);
|
||||
|
||||
/* call the application/user callBack function */
|
||||
local_sua.instance[local_sua_id].SUA_APLCallBack.ulp_ClDataIndNotif
|
||||
( local_sua_id,
|
||||
N_UNITDATA,
|
||||
temp.userdata.length()
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* No, Message has not arrived at its final destination -> */
|
||||
/* route it to the next SUA node via an SCTP association nr x */
|
||||
result = sua_route_Message( sctp_assoc_id,
|
||||
local_sua_id,
|
||||
msg,
|
||||
temp.called_pty_address,
|
||||
temp.calling_pty_address
|
||||
);
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
* *
|
||||
***************************************************************************/
|
||||
/*
|
||||
* $Id: sua_cl.h,v 1.1.1.1 2002/02/04 14:30:41 p82609 Exp $
|
||||
* $Id: sua_cl.h,v 1.2 2002/03/01 12:57:38 p82609 Exp $
|
||||
*
|
||||
* SUA implementation according to SUA draft issue 6.
|
||||
*
|
||||
|
@ -44,7 +44,9 @@
|
|||
* Contact: gery.verwimp@siemens.atea.be
|
||||
* lode.coene@siemens.atea.be
|
||||
*
|
||||
* Purpose: This header-file defines the SUA connectionless message handling:
|
||||
* Purpose: This header-file defines the SUA connectionless message handling:
|
||||
* - send a SUA message to SCTP
|
||||
* - route/relay a received SUA msg towards to the correct SCTP association
|
||||
* - send a Unitdata msg to remote node
|
||||
* (- send a Unitdata Service msg to remote node)
|
||||
* - Process a Unitdata msg
|
||||
|
@ -69,17 +71,32 @@
|
|||
|
||||
using namespace std;
|
||||
|
||||
int sua_send_Unitdata(sccp_QOS_str &QOS,
|
||||
sccp_addr_str &called_pty_address,
|
||||
sccp_addr_str &calling_pty_address,
|
||||
char *buffer,
|
||||
unsigned int len
|
||||
);
|
||||
int sua_send_Message( signed int sctp_assoc_id,
|
||||
short int sctp_stream_id,
|
||||
int sctp_delivery_type,
|
||||
unsigned int sctp_loadshare,
|
||||
char *databuf,
|
||||
unsigned int datalen
|
||||
);
|
||||
|
||||
int sua_route_Message( unsigned int sctp_assoc_id,
|
||||
unsigned int local_sua_id,
|
||||
Sua_container &msg,
|
||||
sccp_addr_str &called_pty_address,
|
||||
sccp_addr_str &calling_pty_address
|
||||
);
|
||||
|
||||
int sua_send_Unitdata( sccp_QOS_str &QOS,
|
||||
sccp_addr_str &called_pty_address,
|
||||
sccp_addr_str &calling_pty_address,
|
||||
char *buffer,
|
||||
unsigned int len
|
||||
);
|
||||
|
||||
short process_unitdata_msg ( int local_sua_id,
|
||||
unsigned int sua_assoc_id,
|
||||
Sua_container &sua_msg
|
||||
);
|
||||
unsigned int sua_assoc_id,
|
||||
Sua_container &sua_msg
|
||||
);
|
||||
|
||||
#endif // SUA_CL_H
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
* *
|
||||
***************************************************************************/
|
||||
/*
|
||||
* $Id: sua_co.cpp,v 1.1.1.1 2002/02/04 14:30:41 p82609 Exp $
|
||||
* $Id: sua_co.cpp,v 1.2 2002/03/01 12:57:38 p82609 Exp $
|
||||
*
|
||||
* SUA implementation according to SUA draft issue 6.
|
||||
*
|
||||
|
@ -70,7 +70,7 @@
|
|||
#include "sua_distribution.h"
|
||||
#include "sua_logging.h"
|
||||
#include "sua_tcb.h"
|
||||
|
||||
#include "sua_cl.h"
|
||||
|
||||
#ifdef LINUX
|
||||
#include <unistd.h>
|
||||
|
@ -122,9 +122,10 @@ int sua_send_CORE( sccp_QOS_str &QOS,
|
|||
int error_value;
|
||||
int string_size, datalen;
|
||||
signed int SCTP_assoc_id;
|
||||
unsigned int sua_assoc_id;
|
||||
short stream_id = 0;
|
||||
int delivery_type, result;
|
||||
int sua_assoc_id;
|
||||
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||
short sctp_stream_id = 0;
|
||||
int sctp_delivery_type, result;
|
||||
tcb_Sua_msg_elem sua_msg;
|
||||
|
||||
|
||||
|
@ -150,7 +151,7 @@ int sua_send_CORE( sccp_QOS_str &QOS,
|
|||
msg.sua_prim.prot_class.pcl = prot_class_2;
|
||||
msg.sua_prim.seq_control_pres = TRUE;
|
||||
msg.sua_prim.seq_control = 1;
|
||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
break;
|
||||
case(class3):
|
||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
||||
|
@ -320,10 +321,11 @@ int sua_send_CORE( sccp_QOS_str &QOS,
|
|||
cout << "call routing function\n";
|
||||
#endif
|
||||
SCTP_assoc_id = Assoc_sua.route_msg( called_pty_address,
|
||||
calling_pty_address
|
||||
);
|
||||
calling_pty_address,
|
||||
sua_assoc_id
|
||||
);
|
||||
#ifdef DEBUG
|
||||
cout << "routed to SCTP assoc " << SCTP_assoc_id << "\n";
|
||||
cout << "routed to SCTP assoc " << SCTP_assoc_id << "/SUA association " << sua_assoc_id << "\n";
|
||||
#endif
|
||||
|
||||
// fill in the TCB
|
||||
|
@ -337,35 +339,24 @@ int sua_send_CORE( sccp_QOS_str &QOS,
|
|||
/* does association exist? */
|
||||
if (SCTP_assoc_id > 0)
|
||||
{
|
||||
// send data to SCTP
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
/* copy data into buffer, then finally... */
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||
|
||||
datalen = msg.sua_msg.length();
|
||||
|
||||
// send data to SCTP
|
||||
result = sua_send_Message( SCTP_assoc_id,
|
||||
sctp_stream_id,
|
||||
sctp_delivery_type,
|
||||
sctp_loadshare,
|
||||
databuf,
|
||||
datalen
|
||||
);
|
||||
|
||||
delete databuf;
|
||||
error_value = 0;
|
||||
|
||||
/* yes it does, continue, no problem, send the msg */
|
||||
#ifdef DEBUG
|
||||
// display byte array
|
||||
display_byte_array(databuf , msg.sua_msg.length());
|
||||
#endif
|
||||
char logstring[100];
|
||||
sprintf(logstring, "SUA encoded message, ready for being send to SCTP assoc %d", SCTP_assoc_id);
|
||||
event_log("sua_co.c",logstring);
|
||||
log_byte_array("sua_co.c", databuf,msg.sua_msg.length());
|
||||
|
||||
result = sctp_send ( SCTP_assoc_id,
|
||||
stream_id,
|
||||
(unsigned char *) databuf,
|
||||
datalen,
|
||||
SUA_PPI,
|
||||
SCTP_USE_PRIMARY,
|
||||
SCTP_NO_CONTEXT,
|
||||
SCTP_INFINITE_LIFETIME,
|
||||
delivery_type,
|
||||
SCTP_BUNDLING_DISABLED
|
||||
);
|
||||
|
||||
error_value = result;
|
||||
delete databuf;
|
||||
#ifdef DEBUG
|
||||
cout << "sua_co.c:result sctp send = "<< result << "\n";
|
||||
#endif
|
||||
|
@ -395,8 +386,8 @@ int sua_send_CORE( sccp_QOS_str &QOS,
|
|||
/* - save the msg till the association is setup or */
|
||||
/* association setup fails -> drop saved msg */
|
||||
sua_msg.byte = msg.sua_msg;
|
||||
sua_msg.delivery_type = delivery_type;
|
||||
sua_msg.stream_id = stream_id;
|
||||
sua_msg.delivery_type = sctp_delivery_type;
|
||||
sua_msg.stream_id = sctp_stream_id;
|
||||
sua_msg.valid = true;
|
||||
msg_store.add_msg ( sua_assoc_id,
|
||||
sua_msg
|
||||
|
@ -425,8 +416,9 @@ int sua_send_CORESP( sccp_QOS_str &QOS,
|
|||
unsigned int SCTP_assoc_id;
|
||||
unsigned int sua_assoc_id;
|
||||
unsigned int local_sua_id,remote_sua_id;
|
||||
short stream_id = 0;
|
||||
int delivery_type, result = 0;
|
||||
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||
short sctp_stream_id = 0;
|
||||
int sctp_delivery_type, result = 0;
|
||||
|
||||
// init the message
|
||||
msg.sua_init();
|
||||
|
@ -450,7 +442,7 @@ int sua_send_CORESP( sccp_QOS_str &QOS,
|
|||
msg.sua_prim.prot_class.pcl = prot_class_2;
|
||||
msg.sua_prim.seq_control_pres = TRUE;
|
||||
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
break;
|
||||
case(class3):
|
||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
||||
|
@ -508,35 +500,24 @@ int sua_send_CORESP( sccp_QOS_str &QOS,
|
|||
if (Assoc_sua.instance[sua_assoc_id].asp.status == asp_active)
|
||||
{
|
||||
#endif
|
||||
// send data to SCTP
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
/* copy data into buffer, then finally... */
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||
|
||||
datalen = msg.sua_msg.length();
|
||||
|
||||
#ifdef DEBUG
|
||||
// display byte array
|
||||
display_byte_array(databuf , msg.sua_msg.length());
|
||||
#endif
|
||||
|
||||
// send data to SCTP
|
||||
result = sua_send_Message( SCTP_assoc_id,
|
||||
sctp_stream_id,
|
||||
sctp_delivery_type,
|
||||
sctp_loadshare,
|
||||
databuf,
|
||||
datalen
|
||||
);
|
||||
|
||||
delete databuf;
|
||||
error_value = 0;
|
||||
|
||||
char logstring[100];
|
||||
sprintf(logstring, "SUA encoded message, ready for being send to SCTP assoc %d", SCTP_assoc_id);
|
||||
event_log("sua_co.c",logstring);
|
||||
log_byte_array("sua_co.c", databuf,msg.sua_msg.length());
|
||||
|
||||
result = sctp_send ( SCTP_assoc_id,
|
||||
stream_id,
|
||||
(unsigned char *) databuf,
|
||||
datalen,
|
||||
SUA_PPI,
|
||||
SCTP_USE_PRIMARY,
|
||||
SCTP_NO_CONTEXT,
|
||||
SCTP_INFINITE_LIFETIME,
|
||||
delivery_type,
|
||||
SCTP_BUNDLING_DISABLED
|
||||
);
|
||||
|
||||
error_value = result;
|
||||
delete databuf;
|
||||
#ifdef SUA_MANAGEMENT
|
||||
}
|
||||
else
|
||||
|
@ -572,8 +553,9 @@ int sua_send_CODATA( sccp_QOS_str &QOS,
|
|||
unsigned int SCTP_assoc_id;
|
||||
unsigned int sua_assoc_id;
|
||||
unsigned int local_sua_id,remote_sua_id;
|
||||
short stream_id = 0;
|
||||
int delivery_type, result = 0;
|
||||
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||
short sctp_stream_id = 0;
|
||||
int sctp_delivery_type, result = 0;
|
||||
|
||||
|
||||
// init the message
|
||||
|
@ -598,7 +580,7 @@ int sua_send_CODATA( sccp_QOS_str &QOS,
|
|||
msg.sua_prim.prot_class.pcl = prot_class_2;
|
||||
msg.sua_prim.seq_control_pres = TRUE;
|
||||
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
break;
|
||||
case(class3):
|
||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
||||
|
@ -650,35 +632,25 @@ int sua_send_CODATA( sccp_QOS_str &QOS,
|
|||
if (Assoc_sua.instance[sua_assoc_id].asp.status == asp_active)
|
||||
{
|
||||
#endif
|
||||
// send data to SCTP
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
/* copy data into buffer, then finally... */
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||
|
||||
datalen = msg.sua_msg.length();
|
||||
|
||||
#ifdef DEBUG
|
||||
// display byte array
|
||||
display_byte_array(databuf , msg.sua_msg.length());
|
||||
#endif
|
||||
|
||||
// send data to SCTP
|
||||
result = sua_send_Message( SCTP_assoc_id,
|
||||
sctp_stream_id,
|
||||
sctp_delivery_type,
|
||||
sctp_loadshare,
|
||||
databuf,
|
||||
datalen
|
||||
);
|
||||
|
||||
delete databuf;
|
||||
error_value = 0;
|
||||
|
||||
char logstring[100];
|
||||
sprintf(logstring, "SUA encoded message, ready for being send to SCTP assoc %d", SCTP_assoc_id);
|
||||
event_log("sua_co.c",logstring);
|
||||
log_byte_array("sua_co.c", databuf,msg.sua_msg.length());
|
||||
|
||||
result = sctp_send ( SCTP_assoc_id,
|
||||
stream_id,
|
||||
(unsigned char *) databuf,
|
||||
datalen,
|
||||
SUA_PPI,
|
||||
SCTP_USE_PRIMARY,
|
||||
SCTP_NO_CONTEXT,
|
||||
SCTP_INFINITE_LIFETIME,
|
||||
delivery_type,
|
||||
SCTP_BUNDLING_DISABLED
|
||||
);
|
||||
|
||||
error_value = result;
|
||||
delete databuf;
|
||||
#ifdef SUA_MANAGEMENT
|
||||
}
|
||||
else
|
||||
|
@ -714,8 +686,9 @@ int sua_send_CORELRQ( sccp_QOS_str &QOS,
|
|||
unsigned int SCTP_assoc_id;
|
||||
unsigned int sua_assoc_id;
|
||||
unsigned int local_sua_id,remote_sua_id;
|
||||
short stream_id = 0;
|
||||
int delivery_type, result = 0;
|
||||
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||
short sctp_stream_id = 0;
|
||||
int sctp_delivery_type, result = 0;
|
||||
|
||||
|
||||
// init the message
|
||||
|
@ -740,7 +713,7 @@ int sua_send_CORELRQ( sccp_QOS_str &QOS,
|
|||
msg.sua_prim.prot_class.pcl = prot_class_2;
|
||||
msg.sua_prim.seq_control_pres = TRUE;
|
||||
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
break;
|
||||
case(class3):
|
||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
||||
|
@ -797,35 +770,24 @@ int sua_send_CORELRQ( sccp_QOS_str &QOS,
|
|||
if (Assoc_sua.instance[sua_assoc_id].asp.status == asp_active)
|
||||
{
|
||||
#endif
|
||||
// send data to SCTP
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
/* copy data into buffer, then finally... */
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||
|
||||
datalen = msg.sua_msg.length();
|
||||
|
||||
// send data to SCTP
|
||||
result = sua_send_Message( SCTP_assoc_id,
|
||||
sctp_stream_id,
|
||||
sctp_delivery_type,
|
||||
sctp_loadshare,
|
||||
databuf,
|
||||
datalen
|
||||
);
|
||||
|
||||
delete databuf;
|
||||
error_value = 0;
|
||||
|
||||
#ifdef DEBUG
|
||||
// display byte array
|
||||
display_byte_array(databuf , msg.sua_msg.length());
|
||||
#endif
|
||||
|
||||
char logstring[100];
|
||||
sprintf(logstring, "SUA encoded message, ready for being send to SCTP assoc %d", SCTP_assoc_id);
|
||||
event_log("sua_co.c",logstring);
|
||||
log_byte_array("sua_co.c", databuf,msg.sua_msg.length());
|
||||
|
||||
result = sctp_send ( SCTP_assoc_id,
|
||||
stream_id,
|
||||
(unsigned char *) databuf,
|
||||
datalen,
|
||||
SUA_PPI,
|
||||
SCTP_USE_PRIMARY,
|
||||
SCTP_NO_CONTEXT,
|
||||
SCTP_INFINITE_LIFETIME,
|
||||
delivery_type,
|
||||
SCTP_BUNDLING_DISABLED
|
||||
);
|
||||
|
||||
error_value = result;
|
||||
delete databuf;
|
||||
#ifdef SUA_MANAGEMENT
|
||||
}
|
||||
else
|
||||
|
@ -861,8 +823,9 @@ int sua_send_CORELCO( sccp_QOS_str &QOS,
|
|||
unsigned int SCTP_assoc_id;
|
||||
unsigned int sua_assoc_id;
|
||||
unsigned int local_sua_id,remote_sua_id;
|
||||
short stream_id = 0;
|
||||
int delivery_type, result = 0;
|
||||
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||
short sctp_stream_id = 0;
|
||||
int sctp_delivery_type, result = 0;
|
||||
|
||||
|
||||
// init the message
|
||||
|
@ -887,7 +850,7 @@ int sua_send_CORELCO( sccp_QOS_str &QOS,
|
|||
msg.sua_prim.prot_class.pcl = prot_class_2;
|
||||
msg.sua_prim.seq_control_pres = TRUE;
|
||||
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
break;
|
||||
case(class3):
|
||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
||||
|
@ -940,35 +903,24 @@ int sua_send_CORELCO( sccp_QOS_str &QOS,
|
|||
if (Assoc_sua.instance[sua_assoc_id].asp.status == asp_active)
|
||||
{
|
||||
#endif
|
||||
// send data to SCTP
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
/* copy data into buffer, then finally... */
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||
|
||||
datalen = msg.sua_msg.length();
|
||||
|
||||
#ifdef DEBUG
|
||||
// display byte array
|
||||
display_byte_array(databuf , msg.sua_msg.length());
|
||||
#endif
|
||||
|
||||
// send data to SCTP
|
||||
result = sua_send_Message( SCTP_assoc_id,
|
||||
sctp_stream_id,
|
||||
sctp_delivery_type,
|
||||
sctp_loadshare,
|
||||
databuf,
|
||||
datalen
|
||||
);
|
||||
|
||||
delete databuf;
|
||||
error_value = 0;
|
||||
|
||||
char logstring[100];
|
||||
sprintf(logstring, "SUA encoded message, ready for being send to SCTP assoc %d", SCTP_assoc_id);
|
||||
event_log("sua_co.c",logstring);
|
||||
log_byte_array("sua_co.c", databuf,msg.sua_msg.length());
|
||||
|
||||
result = sctp_send ( SCTP_assoc_id,
|
||||
stream_id,
|
||||
(unsigned char *) databuf,
|
||||
datalen,
|
||||
SUA_PPI,
|
||||
SCTP_USE_PRIMARY,
|
||||
SCTP_NO_CONTEXT,
|
||||
SCTP_INFINITE_LIFETIME,
|
||||
delivery_type,
|
||||
SCTP_BUNDLING_DISABLED
|
||||
);
|
||||
|
||||
error_value = result;
|
||||
delete databuf;
|
||||
#ifdef SUA_MANAGEMENT
|
||||
}
|
||||
else
|
||||
|
@ -1007,8 +959,9 @@ int sua_send_COREF( sccp_QOS_str &QOS,
|
|||
unsigned int SCTP_assoc_id;
|
||||
unsigned int sua_assoc_id;
|
||||
unsigned int local_sua_id,remote_sua_id;
|
||||
short stream_id = 0;
|
||||
int delivery_type, result = 0;
|
||||
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||
short sctp_stream_id = 0;
|
||||
int sctp_delivery_type, result = 0;
|
||||
sccp_addr_str called_pty_address;
|
||||
|
||||
// init the message
|
||||
|
@ -1033,7 +986,7 @@ int sua_send_COREF( sccp_QOS_str &QOS,
|
|||
msg.sua_prim.prot_class.pcl = prot_class_2;
|
||||
msg.sua_prim.seq_control_pres = TRUE;
|
||||
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||
break;
|
||||
case(class3):
|
||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
||||
|
@ -1125,35 +1078,24 @@ int sua_send_COREF( sccp_QOS_str &QOS,
|
|||
if (Assoc_sua.instance[sua_assoc_id].asp.status == asp_active)
|
||||
{
|
||||
#endif
|
||||
// send data to SCTP
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
/* copy data into buffer, then finally... */
|
||||
char* databuf = new char[msg.sua_msg.length()];
|
||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||
|
||||
datalen = msg.sua_msg.length();
|
||||
|
||||
// send data to SCTP
|
||||
result = sua_send_Message( SCTP_assoc_id,
|
||||
sctp_stream_id,
|
||||
sctp_delivery_type,
|
||||
sctp_loadshare,
|
||||
databuf,
|
||||
datalen
|
||||
);
|
||||
|
||||
delete databuf;
|
||||
error_value = 0;
|
||||
|
||||
#ifdef DEBUG
|
||||
// display byte array
|
||||
display_byte_array(databuf , msg.sua_msg.length());
|
||||
#endif
|
||||
|
||||
char logstring[100];
|
||||
sprintf(logstring, "SUA encoded message, ready for being send to SCTP assoc %d", SCTP_assoc_id);
|
||||
event_log("sua_co.c",logstring);
|
||||
log_byte_array("sua_co.c", databuf,msg.sua_msg.length());
|
||||
|
||||
result = sctp_send ( SCTP_assoc_id,
|
||||
stream_id,
|
||||
(unsigned char *) databuf,
|
||||
datalen,
|
||||
SUA_PPI,
|
||||
SCTP_USE_PRIMARY,
|
||||
SCTP_NO_CONTEXT,
|
||||
SCTP_INFINITE_LIFETIME,
|
||||
delivery_type,
|
||||
SCTP_BUNDLING_DISABLED
|
||||
);
|
||||
|
||||
error_value = result;
|
||||
delete databuf;
|
||||
#ifdef SUA_MANAGEMENT
|
||||
}
|
||||
else
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
* *
|
||||
***************************************************************************/
|
||||
/*
|
||||
* $Id: sua_database.h,v 1.2 2002/02/07 16:34:27 p82609 Exp $
|
||||
* $Id: sua_database.h,v 1.4 2002/03/01 12:57:38 p82609 Exp $
|
||||
*
|
||||
* SUA implementation according to SUA draft issue 8.
|
||||
*
|
||||
|
@ -317,23 +317,27 @@ class db_Sua_AssociationList{
|
|||
);
|
||||
short Terminate_remote_assoc_instance();
|
||||
short shutdown();
|
||||
signed int route_msg(sccp_addr_str& cld,
|
||||
sccp_addr_str& clg
|
||||
);
|
||||
signed int resolve_host_name( hostname_str& dest_name,
|
||||
pointcode_str& dest_pc
|
||||
);
|
||||
signed int route_msg( sccp_addr_str& cld,
|
||||
sccp_addr_str& clg,
|
||||
int& sua_assoc_id
|
||||
);
|
||||
signed int route_on_IPpc ( ipvxunion& dest_pc,
|
||||
ipvxunion& org_pc,
|
||||
int& sua_assoc_id
|
||||
);
|
||||
signed int route_on_SS7pc ( SS7union& dest_pc,
|
||||
SS7union& org_pc,
|
||||
int& sua_assoc_id
|
||||
);
|
||||
SS7union& 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
|
||||
);
|
||||
hostname_str& org_name,
|
||||
int& sua_assoc_id,
|
||||
pointcode_str& dest_pc,
|
||||
pointcode_str& org_pc
|
||||
);
|
||||
void increase_instance();
|
||||
bool activate( unsigned int sua_id,
|
||||
short mode
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
* *
|
||||
***************************************************************************/
|
||||
/*
|
||||
* $Id: sua_dataname.cpp,v 1.1.1.1 2002/02/04 14:30:41 p82609 Exp $
|
||||
* $Id: sua_dataname.cpp,v 1.2 2002/03/01 12:57:38 p82609 Exp $
|
||||
*
|
||||
* SUA implementation according to SUA draft issue 6.
|
||||
*
|
||||
|
@ -104,6 +104,9 @@ void db_Sua_NameList::initialize(){
|
|||
}
|
||||
}
|
||||
|
||||
/***********************************************************************/
|
||||
/* Sua_NameList::read_host_name */
|
||||
/***********************************************************************/
|
||||
string db_Sua_NameList::read_host_name(string name){
|
||||
|
||||
char *hostname;
|
||||
|
@ -165,6 +168,7 @@ string db_Sua_NameList::read_host_name(string name){
|
|||
}
|
||||
|
||||
|
||||
|
||||
// end of module sua_dataname.c
|
||||
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
* *
|
||||
***************************************************************************/
|
||||
/*
|
||||
* $Id: sua_datassoc.cpp,v 1.3 2002/02/15 16:19:46 p82609 Exp $
|
||||
* $Id: sua_datassoc.cpp,v 1.6 2002/03/15 12:53:53 p82609 Exp $
|
||||
*
|
||||
* SUA implementation according to SUA draft issue 6.
|
||||
*
|
||||
|
@ -70,6 +70,7 @@
|
|||
* - route on IP pointcode address
|
||||
* - route on Global Title/Hostname
|
||||
* - route message to a association
|
||||
* - Final destination?
|
||||
* - increase instance
|
||||
* - Dynamic association setup(initiating)
|
||||
*/
|
||||
|
@ -239,6 +240,66 @@ void db_Sua_AssociationList:: read_stream_number(string stream_num){
|
|||
}
|
||||
}
|
||||
|
||||
/***********************************************************************/
|
||||
/* db_Sua_AssociationList::resolve_host_name */
|
||||
/***********************************************************************/
|
||||
signed int db_Sua_AssociationList::resolve_host_name ( hostname_str& dest_name,
|
||||
pointcode_str& dest_pc
|
||||
)
|
||||
{
|
||||
struct hostent *hptr;
|
||||
char **pptr;
|
||||
char str[INET6_ADDRSTRLEN];
|
||||
char *dest_carr;
|
||||
|
||||
/* resolving can be done via: */
|
||||
/* - local global Titel database */
|
||||
/* - resolve hostname via DNS(simplest for single hop translations) */
|
||||
dest_carr = dest_name;
|
||||
|
||||
if ((hptr = gethostbyname( dest_carr )) == NULL)
|
||||
{
|
||||
cout << "Hostname " << dest_name << " not known in DNS.\n";
|
||||
return(-1);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
cout << "Hostname " << dest_name << " resolved to dest IP address(es)\n";
|
||||
cout << "IP address length = "<< hptr->h_length << "\n";
|
||||
#endif
|
||||
|
||||
/* initialise the length field of the structure: */
|
||||
/* length field is NOT always present in every Unix like operating system */
|
||||
dest_pc.ipvx.ch[0] = 0;
|
||||
|
||||
pptr = hptr->h_addr_list;
|
||||
for ( ; (*pptr != NULL) ;pptr++)
|
||||
{
|
||||
inet_ntop(hptr->h_addrtype, *pptr, str,sizeof(str));
|
||||
#ifdef DEBUG
|
||||
cout << str << "\n";
|
||||
#endif
|
||||
/* got a IP address */
|
||||
dest_pc.ipvx.sa.sa_family = hptr->h_addrtype;
|
||||
if (dest_pc.ipvx.sa.sa_family == AF_INET)
|
||||
inet_pton( AF_INET,
|
||||
str,
|
||||
&dest_pc.ipvx.sin.sin_addr
|
||||
);
|
||||
else if (dest_pc.ipvx.sa.sa_family == AF_INET6)
|
||||
inet_pton( AF_INET6,
|
||||
str,
|
||||
&dest_pc.ipvx.sin6.sin6_addr
|
||||
);
|
||||
else
|
||||
{
|
||||
cout << "ERROR resolve_host_name: Unknown IP addresstype\n";
|
||||
return(-2);
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
};
|
||||
|
||||
/***********************************************************************/
|
||||
/* Sua_AssociationList::register_instance */
|
||||
/***********************************************************************/
|
||||
|
@ -390,28 +451,125 @@ Find_association( unsigned int sctp_assoc_id,
|
|||
/***********************************************************************/
|
||||
unsigned int db_Sua_AssociationList::
|
||||
Find_local_sua( sccp_addr_str& local_address
|
||||
)
|
||||
)
|
||||
{
|
||||
short i = 1, j = 0;
|
||||
unsigned int Local_sua_id = 0;
|
||||
bool result = FALSE;
|
||||
pointcode_str dest_pc;
|
||||
short i = 1, j = 0, count, addr_start, addr_stop;
|
||||
unsigned int Local_sua_id = 0;
|
||||
bool result = FALSE;
|
||||
|
||||
while ((i < db_MAX_REMOTE_SUA) && !(result) && (instance[i].Source.nr_of_addrs != 0))
|
||||
{
|
||||
j = 0;
|
||||
while ((j < instance[i].Source.nr_of_addrs) && !(result))
|
||||
{
|
||||
result = ((instance[i].Source.addrs[j].sin.sin_addr.s_addr == local_address.pc.ipvx.sin.sin_addr.s_addr) ||
|
||||
{
|
||||
/*result = ((instance[i].Source.addrs[j].sin.sin_addr.s_addr == local_address.pc.ipvx.sin.sin_addr.s_addr) ||
|
||||
(instance[i].Source.addrs[j].sin6.sin6_addr.s6_addr == local_address.pc.ipvx.sin6.sin6_addr.s6_addr));
|
||||
if (result)
|
||||
{
|
||||
Local_sua_id = instance[i].local_sua_id;
|
||||
*/
|
||||
if (local_address.address_fields_present.pc == ipvx_pc_present)
|
||||
{
|
||||
result = (local_address.pc.ipvx.sa.sa_family == instance[i].Source.addrs[j].sa.sa_family);
|
||||
if (local_address.pc.ipvx.sa.sa_family == AF_INET)
|
||||
{
|
||||
addr_start = 4;
|
||||
addr_stop = addr_start + 4;
|
||||
}
|
||||
else if (local_address.pc.ipvx.sa.sa_family == AF_INET6)
|
||||
{
|
||||
addr_start = 8;
|
||||
addr_stop = addr_start + 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
addr_start = 0;
|
||||
addr_stop = 0;
|
||||
result = false;
|
||||
cout << "ERROR Find_local_sua: Unknown IPvx addresstype\n";
|
||||
}
|
||||
/* compare the address family field */
|
||||
result = result &&
|
||||
(local_address.pc.ipvx.ch[1] == instance[i].Source.addrs[j].ch[1]);
|
||||
|
||||
/* compare the ipv4/ipv6 address field */
|
||||
for (count = addr_start; count < addr_stop; count++)
|
||||
{
|
||||
result = result &&
|
||||
(local_address.pc.ipvx.ch[count] == instance[i].Source.addrs[j].ch[count]);
|
||||
}
|
||||
}
|
||||
else if (local_address.address_fields_present.pc == ss7_pc_present)
|
||||
{
|
||||
result = (local_address.pc.ss7.ITU14.family == instance[i].Source.pc.ITU14.family);
|
||||
if (((local_address.pc.ss7.ITU14.family == ITU14bit) ||
|
||||
(local_address.pc.ss7.ITU14.family == ITU24bit)) ||
|
||||
(local_address.pc.ss7.ITU14.family == ANSI24bit))
|
||||
{
|
||||
/* compare the ITU 14/24bit or ANSI 24bit PC address field */
|
||||
result = result &&
|
||||
(local_address.pc.ss7.ITU14.pc == instance[i].Source.pc.ITU14.pc);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = false;
|
||||
cout << "ERROR Find_local_sua: Unknown SS7 pointcode addresstype\n";
|
||||
}
|
||||
}
|
||||
else if (local_address.address_fields_present.name_gt == hostname_present)
|
||||
{
|
||||
count = 0;
|
||||
result = resolve_host_name ( local_address.name.HostName,
|
||||
dest_pc
|
||||
);
|
||||
|
||||
result = (dest_pc.ipvx.sa.sa_family == instance[i].Source.addrs[j].sa.sa_family);
|
||||
|
||||
if (dest_pc.ipvx.sa.sa_family == AF_INET)
|
||||
{
|
||||
addr_start = 4;
|
||||
addr_stop = addr_start + 4;
|
||||
}
|
||||
else if (dest_pc.ipvx.sa.sa_family == AF_INET6)
|
||||
{
|
||||
addr_start = 8;
|
||||
addr_stop = addr_start + 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
addr_start = 0;
|
||||
addr_stop = 0;
|
||||
result = false;
|
||||
cout << "ERROR Find_local_sua: Unknown IPvx addresstype\n";
|
||||
}
|
||||
/* compare the address family field : already done */
|
||||
/* compare the ipv4/ipv6 address field */
|
||||
short k=0;
|
||||
for (count = addr_start; count < addr_stop; count++)
|
||||
{
|
||||
result = result &&
|
||||
(dest_pc.ipvx.ch[count] == instance[i].Source.addrs[j].ch[count]);
|
||||
k++;
|
||||
}
|
||||
|
||||
}
|
||||
else if (local_address.address_fields_present.name_gt == GT_present)
|
||||
{
|
||||
cout << "ERROR Find_local_sua: GT code not implemented yet\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "ERROR Find_local_sua: Unknown SUA addresstype\n";
|
||||
result = false;
|
||||
}
|
||||
|
||||
if (result)
|
||||
{
|
||||
Local_sua_id = instance[i].local_sua_id;
|
||||
#ifdef DEBUG
|
||||
cout << "local_sua_id = " << Local_sua_id << " , instance "<< i << "\n";
|
||||
cout << "Find_local_sua: local_sua_id = " << Local_sua_id << " , instance "<< i << "\n";
|
||||
#endif
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
j++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
|
@ -431,6 +589,7 @@ passive_associate( unsigned int assoc_id,
|
|||
){
|
||||
|
||||
SCTP_AssociationStatus status;
|
||||
SCTP_Path_Status path_x_status;
|
||||
int result;
|
||||
short k;
|
||||
int bla;
|
||||
|
@ -471,13 +630,21 @@ passive_associate( unsigned int assoc_id,
|
|||
event_log("sua_database.c",logstring);
|
||||
|
||||
|
||||
result = sctp_getAssocStatus(instance[assoc_instance_idx].SCTP_assoc_id, &status);
|
||||
result = sctp_getAssocStatus( instance[assoc_instance_idx].SCTP_assoc_id,
|
||||
&status
|
||||
);
|
||||
|
||||
/* conversion and fill in the destination address */
|
||||
instance[assoc_instance_idx].Dest.nr_of_addrs = nr_of_dest_addr;
|
||||
instance[assoc_instance_idx].Dest.address_string[0] = status.primaryDestinationAddress;
|
||||
instance[assoc_instance_idx].Dest.addrs[0].sin.sin_port = status.destPort;
|
||||
|
||||
for(k=0; k < instance[assoc_instance_idx].Dest.nr_of_addrs ; k++)
|
||||
{
|
||||
result = sctp_getPathStatus( instance[assoc_instance_idx].SCTP_assoc_id,
|
||||
k,
|
||||
&path_x_status
|
||||
);
|
||||
instance[assoc_instance_idx].Dest.address_string[k] = path_x_status.destinationAddress;
|
||||
instance[assoc_instance_idx].Dest.addrs[k].sin.sin_port = status.destPort;
|
||||
}
|
||||
/* try to figure out ipv4 or v6 address family: get it from the source address */
|
||||
k = 0;
|
||||
instance[assoc_instance_idx].Dest.addrs[0].sa.sa_family = AF_LOCAL;
|
||||
|
@ -692,72 +859,36 @@ route_on_SS7pc ( SS7union& dest_pc,
|
|||
/***********************************************************************/
|
||||
signed int db_Sua_AssociationList::
|
||||
route_on_GTname ( hostname_str& dest_name,
|
||||
hostname_str& org_name,
|
||||
int& sua_assoc_id,
|
||||
pointcode_str& dest_pc,
|
||||
pointcode_str& org_pc
|
||||
)
|
||||
hostname_str& org_name,
|
||||
int& sua_assoc_id,
|
||||
pointcode_str& dest_pc,
|
||||
pointcode_str& org_pc
|
||||
)
|
||||
{
|
||||
struct hostent *hptr;
|
||||
char **pptr;
|
||||
unsigned int sctp_assoc_id = 0;
|
||||
char str[INET6_ADDRSTRLEN];
|
||||
char *dest_carr;
|
||||
int result = 0;
|
||||
unsigned int sctp_assoc_id = 0;
|
||||
|
||||
sua_assoc_id = 0;
|
||||
|
||||
/* resolving can be done via: */
|
||||
/* - local global Titel database */
|
||||
/* - resolve hostname via DNS(simplest for single hop translations) */
|
||||
dest_carr = dest_name;
|
||||
|
||||
if ((hptr = gethostbyname( dest_carr )) == NULL)
|
||||
{
|
||||
cout << "Hostname " << dest_name << " not known in DNS.\n";
|
||||
return(-1);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
cout << "Hostname " << dest_name << " resolved to dest IP address(es)\n";
|
||||
cout << "IP address length = "<< hptr->h_length << "\n";
|
||||
#endif
|
||||
|
||||
/* initialise the length field of the structure: */
|
||||
/* length field is NOT always present in every Unix like operating system */
|
||||
dest_pc.ipvx.ch[0] = 0;
|
||||
org_pc.ipvx.ch[0] = 0;
|
||||
|
||||
pptr = hptr->h_addr_list;
|
||||
for ( ; (*pptr != NULL) ;pptr++)
|
||||
{
|
||||
inet_ntop(hptr->h_addrtype, *pptr, str,sizeof(str));
|
||||
#ifdef DEBUG
|
||||
cout << str << "\n";
|
||||
#endif
|
||||
/* got IP address, look if association already exists */
|
||||
dest_pc.ipvx.sa.sa_family = hptr->h_addrtype;
|
||||
if (dest_pc.ipvx.sa.sa_family == AF_INET)
|
||||
inet_pton( AF_INET,
|
||||
str,
|
||||
&dest_pc.ipvx.sin.sin_addr
|
||||
);
|
||||
else if (dest_pc.ipvx.sa.sa_family == AF_INET6)
|
||||
inet_pton( AF_INET6,
|
||||
str,
|
||||
&dest_pc.ipvx.sin6.sin6_addr
|
||||
);
|
||||
else
|
||||
cout << "ERROR route_on_GTname: Unknown IP addresstype\n";
|
||||
result = resolve_host_name ( dest_name,
|
||||
dest_pc
|
||||
);
|
||||
|
||||
/*result = resolve_host_name ( org_name,
|
||||
org_pc
|
||||
); */
|
||||
|
||||
sctp_assoc_id = route_on_IPpc( dest_pc.ipvx,
|
||||
org_pc.ipvx,
|
||||
sua_assoc_id
|
||||
);
|
||||
sctp_assoc_id = route_on_IPpc( dest_pc.ipvx,
|
||||
org_pc.ipvx,
|
||||
sua_assoc_id
|
||||
);
|
||||
|
||||
if (sctp_assoc_id != 0 )
|
||||
return(sctp_assoc_id);
|
||||
if (sctp_assoc_id != 0 )
|
||||
return(sctp_assoc_id);
|
||||
|
||||
}
|
||||
|
||||
return(sctp_assoc_id);
|
||||
};
|
||||
|
@ -766,12 +897,14 @@ route_on_GTname ( hostname_str& dest_name,
|
|||
/* Sua_AssociationList::route_msg */
|
||||
/***********************************************************************/
|
||||
signed int db_Sua_AssociationList::
|
||||
route_msg( sccp_addr_str& cld,
|
||||
sccp_addr_str& clg
|
||||
route_msg( sccp_addr_str& cld,
|
||||
sccp_addr_str& clg,
|
||||
int& sua_assoc_id
|
||||
){
|
||||
|
||||
unsigned int sctp_assoc_id = 0;
|
||||
int sua_assoc_id = 0;
|
||||
|
||||
sua_assoc_id = 0;
|
||||
|
||||
#ifdef DEBUG
|
||||
cout << "num_of_instance : "<< num_of_instance << "\n";
|
||||
|
@ -837,7 +970,6 @@ route_msg( sccp_addr_str& cld,
|
|||
return(sctp_assoc_id);
|
||||
};
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
/* Sua_AssociationList::increase_instance */
|
||||
/***********************************************************************/
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
* *
|
||||
***************************************************************************/
|
||||
/*
|
||||
* $Id: sua_debug.h,v 1.1.1.1 2002/02/04 14:30:41 p82609 Exp $
|
||||
* $Id: sua_debug.h,v 1.2 2002/02/22 16:12:11 p82609 Exp $
|
||||
*
|
||||
* SUA implementation according to SUA draft issue 6.
|
||||
*
|
||||
|
@ -57,8 +57,8 @@
|
|||
#ifndef SUA_DEBUG_H
|
||||
#define SUA_DEBUG_H
|
||||
|
||||
/*#define DEBUG activates debuging msg on screen */
|
||||
/*#define FILE_DEBUG activates debugging info to output file */
|
||||
//#define DEBUG /* activates debuging msg on screen */
|
||||
//#define FILE_DEBUG /* activates debugging info to output file */
|
||||
#define SUA_MANAGEMENT /* activates SUA management */
|
||||
#define SG_ASP_MODE /* implementation acts as ASP towards a SG */
|
||||
|
||||
|
|
Loading…
Reference in New Issue