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
|
# 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]
|
[sualibrary/docs/en/index-6.html]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
type=DATA
|
||||||
[sualibrary/sua/sua_logging.h]
|
[Workspace_1]
|
||||||
install_location=
|
openfiles=Untitled.h,Untitled.cpp,/home/p82609/siemens/sualibrary/sualibrary/sua/sua_datassoc.cpp,/home/p82609/siemens/sualibrary/sualibrary/sua/sua_distribution.cpp,
|
||||||
dist=true
|
show_outputview=true
|
||||||
install=false
|
show_treeview=true
|
||||||
type=HEADER
|
header_file=Untitled.h
|
||||||
[sualibrary/sua/sua_logging.cpp]
|
cpp_file=/home/p82609/siemens/sualibrary/sualibrary/sua/sua_datassoc.cpp
|
||||||
install_location=
|
browser_file=file:/opt/kde/share/doc/HTML/default/kdevelop/reference/C/LIBRARIES/libraries.html
|
||||||
dist=true
|
|
||||||
install=false
|
|
||||||
type=SOURCE
|
|
||||||
[sualibrary/sua/sua_adapt.cpp]
|
|
||||||
install_location=
|
|
||||||
dist=true
|
|
||||||
install=false
|
|
||||||
type=SOURCE
|
|
||||||
[COPYING]
|
[COPYING]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
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]
|
[sualibrary/sua/sua_database.h]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=HEADER
|
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]
|
[sualibrary/sua/sua_tcb.h]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=HEADER
|
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]
|
[sualibrary/testup/main.cpp]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
|
@ -62,22 +62,22 @@ install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
type=DATA
|
||||||
[sualibrary/sua/sua_file.h]
|
|
||||||
install_location=
|
|
||||||
dist=true
|
|
||||||
install=false
|
|
||||||
type=HEADER
|
|
||||||
[sualibrary/sua/sua_asp_mgnt.h]
|
[sualibrary/sua/sua_asp_mgnt.h]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=HEADER
|
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=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
type=DATA
|
||||||
[sualibrary/docs/en/index-1.html]
|
[sualibrary.kdevprj]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
|
@ -93,21 +93,26 @@ install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
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]
|
[sualibrary/sua/sua_sual.cpp]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=SOURCE
|
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]
|
[sualibrary/docs/en/index.html]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
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=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
|
@ -117,35 +122,25 @@ install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=SOURCE
|
type=SOURCE
|
||||||
[sualibrary/sua/sua_asp_mgnt.cpp]
|
[sualibrary/sua/sua_file.cpp]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=SOURCE
|
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]
|
[sualibrary/testup/assoc.sua]
|
||||||
install_location=
|
install_location=
|
||||||
dist=false
|
dist=false
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
type=DATA
|
||||||
[sualibrary/sua/sua_distribution.h]
|
[sualibrary/docs/Makefile.am]
|
||||||
install_location=
|
sub_dirs=en,
|
||||||
dist=true
|
type=normal
|
||||||
install=false
|
|
||||||
type=HEADER
|
|
||||||
[sualibrary/docs/en/index-4.html]
|
[sualibrary/docs/en/index-4.html]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
type=DATA
|
||||||
[sualibrary/testup/testuser.h]
|
[sualibrary/sua/sua_distribution.h]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
|
@ -155,20 +150,25 @@ install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=SOURCE
|
type=SOURCE
|
||||||
[sualibrary/sua/sua_tcb.cpp]
|
[sualibrary/testup/testuser.h]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=SOURCE
|
type=HEADER
|
||||||
[sualibrary/Makefile.am]
|
|
||||||
files=
|
|
||||||
type=prog_main
|
|
||||||
sub_dirs=docs,sua,testup,
|
|
||||||
[sualibrary.lsm]
|
[sualibrary.lsm]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
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]
|
[sualibrary/docs/en/index-5.html]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
|
@ -179,53 +179,48 @@ install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=SOURCE
|
type=SOURCE
|
||||||
[sualibrary/sua/sua_cl.cpp]
|
|
||||||
install_location=
|
|
||||||
dist=true
|
|
||||||
install=false
|
|
||||||
type=SOURCE
|
|
||||||
[ChangeLog]
|
[ChangeLog]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
type=DATA
|
||||||
|
[sualibrary/sua/sua_cl.cpp]
|
||||||
|
install_location=
|
||||||
|
dist=true
|
||||||
|
install=false
|
||||||
|
type=SOURCE
|
||||||
[General]
|
[General]
|
||||||
make_options=-j1
|
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,
|
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
|
version_control=None
|
||||||
project_type=normal_cpp
|
|
||||||
author=Lode Coene
|
author=Lode Coene
|
||||||
|
project_type=normal_cpp
|
||||||
sub_dir=sualibrary/
|
sub_dir=sualibrary/
|
||||||
lfv_open_groups=
|
lfv_open_groups=
|
||||||
workspace=1
|
workspace=1
|
||||||
project_name=Sualibrary
|
|
||||||
version=0.1
|
version=0.1
|
||||||
AMChanged=true
|
project_name=Sualibrary
|
||||||
|
AMChanged=false
|
||||||
sgml_file=/home/p82609/sualibrary/sualibrary/docs/en/index.sgml
|
sgml_file=/home/p82609/sualibrary/sualibrary/docs/en/index.sgml
|
||||||
short_info=,
|
short_info=,
|
||||||
email=lode.coene@siemens.atea.be
|
email=lode.coene@siemens.atea.be
|
||||||
kdevprj_version=1.2
|
kdevprj_version=1.2
|
||||||
configure_args=
|
configure_args=
|
||||||
modifyMakefiles=true
|
modifyMakefiles=true
|
||||||
[INSTALL]
|
[sualibrary/sua/Makefile.am]
|
||||||
install_location=
|
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,
|
||||||
dist=true
|
type=static_library
|
||||||
install=false
|
|
||||||
type=DATA
|
|
||||||
[TODO]
|
[TODO]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
type=DATA
|
||||||
[sualibrary/sua/Makefile.am]
|
[INSTALL]
|
||||||
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_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=HEADER
|
type=DATA
|
||||||
[sualibrary/sua/sua_co.h]
|
[sualibrary/sua/sua_syntax.h]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
|
@ -235,7 +230,17 @@ install_location=local.sua
|
||||||
dist=false
|
dist=false
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
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=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
|
@ -245,17 +250,16 @@ install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=SOURCE
|
type=SOURCE
|
||||||
[sualibrary/sua/sua_co.cpp]
|
[sualibrary/testup/testuser.cpp]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=SOURCE
|
type=SOURCE
|
||||||
[sualibrary/sua/sua_adapt.h]
|
[Makefile.am]
|
||||||
install_location=
|
files=sualibrary.kdevprj,AUTHORS,COPYING,ChangeLog,INSTALL,README,TODO,sualibrary.lsm,
|
||||||
dist=true
|
sub_dirs=sualibrary,
|
||||||
install=false
|
type=normal
|
||||||
type=HEADER
|
[sualibrary/sua/sua_cl.h]
|
||||||
[sualibrary/sua/sua_sual.h]
|
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
|
@ -265,24 +269,20 @@ install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=SOURCE
|
type=SOURCE
|
||||||
[sualibrary/sua/sua_cl.h]
|
[sualibrary/sua/sua_sual.h]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=HEADER
|
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]
|
[AUTHORS]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
dist=true
|
||||||
install=false
|
install=false
|
||||||
type=DATA
|
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]
|
[sualibrary/sua/sua_debug.h]
|
||||||
install_location=
|
install_location=
|
||||||
dist=true
|
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.
|
* SUA implementation according to SUA draft issue 6.
|
||||||
*
|
*
|
||||||
|
@ -48,7 +48,9 @@
|
||||||
* inspiration : Dorothee
|
* inspiration : Dorothee
|
||||||
* "Always admire the local beauties in their natural enviroment."
|
* "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 msg to remote node
|
||||||
* (- send a Unitdata Service msg to remote node)
|
* (- send a Unitdata Service msg to remote node)
|
||||||
* - Process a Unitdata msg
|
* - Process a Unitdata msg
|
||||||
|
@ -92,24 +94,180 @@ extern tcb_Sua_msgqueue_pool msg_store;
|
||||||
// import the received msg pool
|
// import the received msg pool
|
||||||
extern vector<sua_save_str> rec_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 */
|
/* sua_send_Unitdata */
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
int sua_send_Unitdata(sccp_QOS_str &QOS,
|
int sua_send_Unitdata ( sccp_QOS_str &QOS,
|
||||||
sccp_addr_str &called_pty_address,
|
sccp_addr_str &called_pty_address,
|
||||||
sccp_addr_str &calling_pty_address,
|
sccp_addr_str &calling_pty_address,
|
||||||
char *buffer,
|
char *buffer,
|
||||||
unsigned int len
|
unsigned int len
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Sua_container msg;
|
Sua_container msg;
|
||||||
Sua_syntax_error_struct error;
|
Sua_syntax_error_struct error;
|
||||||
int error_value;
|
int error_value = 0;
|
||||||
int string_size, datalen;
|
int string_size, datalen;
|
||||||
signed int sctp_assoc_id;
|
signed int sctp_assoc_id;
|
||||||
unsigned int sua_assoc_id;
|
int sua_assoc_id;
|
||||||
short stream_id = 0;
|
short sctp_stream_id = 0;
|
||||||
int delivery_type, result;
|
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||||
|
int sctp_delivery_type, result;
|
||||||
tcb_Sua_msg_elem sua_msg;
|
tcb_Sua_msg_elem sua_msg;
|
||||||
|
|
||||||
// init the message
|
// 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.prot_class.pcl = prot_class_0;
|
||||||
msg.sua_prim.seq_control_pres = TRUE;
|
msg.sua_prim.seq_control_pres = TRUE;
|
||||||
msg.sua_prim.seq_control = QOS.sequence_number;
|
msg.sua_prim.seq_control = QOS.sequence_number;
|
||||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||||
break;
|
break;
|
||||||
case(class1):
|
case(class1):
|
||||||
msg.sua_prim.prot_class_pres = TRUE;
|
msg.sua_prim.prot_class_pres = TRUE;
|
||||||
msg.sua_prim.prot_class.pcl = prot_class_1;
|
msg.sua_prim.prot_class.pcl = prot_class_1;
|
||||||
msg.sua_prim.seq_control_pres = TRUE;
|
msg.sua_prim.seq_control_pres = TRUE;
|
||||||
msg.sua_prim.seq_control = QOS.sequence_number;
|
msg.sua_prim.seq_control = QOS.sequence_number;
|
||||||
delivery_type = SCTP_ORDERED_DELIVERY;
|
sctp_delivery_type = SCTP_ORDERED_DELIVERY;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
||||||
|
@ -297,46 +455,35 @@ int sua_send_Unitdata(sccp_QOS_str &QOS,
|
||||||
cout << "call routing function\n";
|
cout << "call routing function\n";
|
||||||
#endif
|
#endif
|
||||||
sctp_assoc_id = Assoc_sua.route_msg( called_pty_address,
|
sctp_assoc_id = Assoc_sua.route_msg( called_pty_address,
|
||||||
calling_pty_address
|
calling_pty_address,
|
||||||
);
|
sua_assoc_id
|
||||||
|
);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
cout << "routed to SCTP assoc " << sctp_assoc_id << "\n";
|
cout << "routed to SCTP assoc " << sctp_assoc_id << "\n";
|
||||||
#endif
|
#endif
|
||||||
/* does association exist? */
|
/* does association exist? */
|
||||||
if (sctp_assoc_id > 0)
|
if (sctp_assoc_id > 0)
|
||||||
{
|
{
|
||||||
// send data to SCTP
|
/* copy data into buffer, then finally... */
|
||||||
char* databuf = new char[msg.sua_msg.length()];
|
char* databuf = new char[msg.sua_msg.length()];
|
||||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||||
|
|
||||||
datalen = msg.sua_msg.length();
|
datalen = msg.sua_msg.length();
|
||||||
|
|
||||||
/* yes it does, continue, no problem, send the msg */
|
// send data to SCTP
|
||||||
#ifdef DEBUG
|
result = sua_send_Message( sctp_assoc_id,
|
||||||
// display byte array
|
sctp_stream_id,
|
||||||
display_byte_array(databuf , msg.sua_msg.length());
|
sctp_delivery_type,
|
||||||
#endif
|
sctp_loadshare,
|
||||||
char logstring[100];
|
databuf,
|
||||||
sprintf(logstring, "SUA encoded message, ready for being send to SCTP assoc %d", sctp_assoc_id);
|
datalen
|
||||||
event_log("sua_cl.c",logstring);
|
);
|
||||||
log_byte_array("sua_cl.c", databuf,msg.sua_msg.length());
|
|
||||||
|
delete databuf;
|
||||||
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
|
#ifdef DEBUG
|
||||||
cout << "sua_cl.c:result sctp send = "<< result << "\n";
|
cout << "sua_cl.c:result sctp send = "<< result << "\n";
|
||||||
#endif
|
#endif
|
||||||
|
error_value = 0;
|
||||||
}
|
}
|
||||||
else if (sctp_assoc_id < 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 */
|
/* - save the msg till the association is setup or */
|
||||||
/* association setup fails -> drop saved msg */
|
/* association setup fails -> drop saved msg */
|
||||||
sua_msg.byte = msg.sua_msg;
|
sua_msg.byte = msg.sua_msg;
|
||||||
sua_msg.delivery_type = delivery_type;
|
sua_msg.delivery_type = sctp_delivery_type;
|
||||||
sua_msg.stream_id = stream_id;
|
sua_msg.stream_id = sctp_stream_id;
|
||||||
sua_msg.valid = true;
|
sua_msg.valid = true;
|
||||||
msg_store.add_msg ( sua_assoc_id,
|
msg_store.add_msg ( sua_assoc_id,
|
||||||
sua_msg
|
sua_msg
|
||||||
);
|
);
|
||||||
|
|
||||||
error_value = -1;
|
error_value = -1;
|
||||||
}
|
}
|
||||||
|
@ -385,8 +532,9 @@ short process_unitdata_msg ( int local_sua_id,
|
||||||
Sua_container &msg
|
Sua_container &msg
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
||||||
sua_save_str temp;
|
sua_save_str temp;
|
||||||
|
int result = 0;
|
||||||
|
int sctp_assoc_id = 0;
|
||||||
|
|
||||||
temp.primitive = N_UNITDATA;
|
temp.primitive = N_UNITDATA;
|
||||||
temp.user_ref = 0;
|
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)
|
if (msg.sua_prim.source_addr.pc_pres == TRUE)
|
||||||
{
|
{
|
||||||
temp.calling_pty_address.address_fields_present.pc = ss7_pc_present;
|
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;
|
temp.calling_pty_address.pc.ss7.ITU24.pc = msg.sua_prim.source_addr.pc;
|
||||||
}
|
}
|
||||||
if (msg.sua_prim.source_addr.gt_pres == TRUE)
|
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)
|
// retrieve the called(=destination) address(=should be our own local addr)
|
||||||
// not completely done yet
|
// 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)
|
if (msg.sua_prim.dest_addr.pc_pres == TRUE)
|
||||||
{
|
{
|
||||||
temp.called_pty_address.address_fields_present.pc = ss7_pc_present;
|
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.family = Assoc_sua.instance[sua_assoc_id].Dest.pc.ITU14.family;
|
||||||
temp.called_pty_address.pc.ss7.ITU24.pc = msg.sua_prim.source_addr.pc;
|
temp.called_pty_address.pc.ss7.ITU24.pc = msg.sua_prim.dest_addr.pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg.sua_prim.dest_addr.hostname_pres == TRUE)
|
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;
|
temp.userdata = msg.sua_prim.data_string;
|
||||||
else
|
else
|
||||||
cout << "sua_cl.c: no sua user data in unitdata msg \n";
|
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 */
|
/* Is this the final destination ? */
|
||||||
local_sua.instance[local_sua_id].SUA_APLCallBack.ulp_ClDataIndNotif
|
if ( Assoc_sua.Find_local_sua ( temp.called_pty_address) > 0 )
|
||||||
( local_sua_id,
|
{
|
||||||
N_UNITDATA,
|
/* Yes, message has arrived at its final destination -> send to upper layer */
|
||||||
temp.userdata.length()
|
/* 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);
|
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.
|
* SUA implementation according to SUA draft issue 6.
|
||||||
*
|
*
|
||||||
|
@ -44,7 +44,9 @@
|
||||||
* Contact: gery.verwimp@siemens.atea.be
|
* Contact: gery.verwimp@siemens.atea.be
|
||||||
* lode.coene@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 msg to remote node
|
||||||
* (- send a Unitdata Service msg to remote node)
|
* (- send a Unitdata Service msg to remote node)
|
||||||
* - Process a Unitdata msg
|
* - Process a Unitdata msg
|
||||||
|
@ -69,17 +71,32 @@
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
int sua_send_Unitdata(sccp_QOS_str &QOS,
|
int sua_send_Message( signed int sctp_assoc_id,
|
||||||
sccp_addr_str &called_pty_address,
|
short int sctp_stream_id,
|
||||||
sccp_addr_str &calling_pty_address,
|
int sctp_delivery_type,
|
||||||
char *buffer,
|
unsigned int sctp_loadshare,
|
||||||
unsigned int len
|
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,
|
short process_unitdata_msg ( int local_sua_id,
|
||||||
unsigned int sua_assoc_id,
|
unsigned int sua_assoc_id,
|
||||||
Sua_container &sua_msg
|
Sua_container &sua_msg
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif // SUA_CL_H
|
#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.
|
* SUA implementation according to SUA draft issue 6.
|
||||||
*
|
*
|
||||||
|
@ -70,7 +70,7 @@
|
||||||
#include "sua_distribution.h"
|
#include "sua_distribution.h"
|
||||||
#include "sua_logging.h"
|
#include "sua_logging.h"
|
||||||
#include "sua_tcb.h"
|
#include "sua_tcb.h"
|
||||||
|
#include "sua_cl.h"
|
||||||
|
|
||||||
#ifdef LINUX
|
#ifdef LINUX
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -122,9 +122,10 @@ int sua_send_CORE( sccp_QOS_str &QOS,
|
||||||
int error_value;
|
int error_value;
|
||||||
int string_size, datalen;
|
int string_size, datalen;
|
||||||
signed int SCTP_assoc_id;
|
signed int SCTP_assoc_id;
|
||||||
unsigned int sua_assoc_id;
|
int sua_assoc_id;
|
||||||
short stream_id = 0;
|
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||||
int delivery_type, result;
|
short sctp_stream_id = 0;
|
||||||
|
int sctp_delivery_type, result;
|
||||||
tcb_Sua_msg_elem sua_msg;
|
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.prot_class.pcl = prot_class_2;
|
||||||
msg.sua_prim.seq_control_pres = TRUE;
|
msg.sua_prim.seq_control_pres = TRUE;
|
||||||
msg.sua_prim.seq_control = 1;
|
msg.sua_prim.seq_control = 1;
|
||||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||||
break;
|
break;
|
||||||
case(class3):
|
case(class3):
|
||||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
||||||
|
@ -320,10 +321,11 @@ int sua_send_CORE( sccp_QOS_str &QOS,
|
||||||
cout << "call routing function\n";
|
cout << "call routing function\n";
|
||||||
#endif
|
#endif
|
||||||
SCTP_assoc_id = Assoc_sua.route_msg( called_pty_address,
|
SCTP_assoc_id = Assoc_sua.route_msg( called_pty_address,
|
||||||
calling_pty_address
|
calling_pty_address,
|
||||||
);
|
sua_assoc_id
|
||||||
|
);
|
||||||
#ifdef DEBUG
|
#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
|
#endif
|
||||||
|
|
||||||
// fill in the TCB
|
// fill in the TCB
|
||||||
|
@ -337,35 +339,24 @@ int sua_send_CORE( sccp_QOS_str &QOS,
|
||||||
/* does association exist? */
|
/* does association exist? */
|
||||||
if (SCTP_assoc_id > 0)
|
if (SCTP_assoc_id > 0)
|
||||||
{
|
{
|
||||||
// send data to SCTP
|
/* copy data into buffer, then finally... */
|
||||||
char* databuf = new char[msg.sua_msg.length()];
|
char* databuf = new char[msg.sua_msg.length()];
|
||||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||||
|
|
||||||
datalen = 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
|
#ifdef DEBUG
|
||||||
cout << "sua_co.c:result sctp send = "<< result << "\n";
|
cout << "sua_co.c:result sctp send = "<< result << "\n";
|
||||||
#endif
|
#endif
|
||||||
|
@ -395,8 +386,8 @@ int sua_send_CORE( sccp_QOS_str &QOS,
|
||||||
/* - save the msg till the association is setup or */
|
/* - save the msg till the association is setup or */
|
||||||
/* association setup fails -> drop saved msg */
|
/* association setup fails -> drop saved msg */
|
||||||
sua_msg.byte = msg.sua_msg;
|
sua_msg.byte = msg.sua_msg;
|
||||||
sua_msg.delivery_type = delivery_type;
|
sua_msg.delivery_type = sctp_delivery_type;
|
||||||
sua_msg.stream_id = stream_id;
|
sua_msg.stream_id = sctp_stream_id;
|
||||||
sua_msg.valid = true;
|
sua_msg.valid = true;
|
||||||
msg_store.add_msg ( sua_assoc_id,
|
msg_store.add_msg ( sua_assoc_id,
|
||||||
sua_msg
|
sua_msg
|
||||||
|
@ -425,8 +416,9 @@ int sua_send_CORESP( sccp_QOS_str &QOS,
|
||||||
unsigned int SCTP_assoc_id;
|
unsigned int SCTP_assoc_id;
|
||||||
unsigned int sua_assoc_id;
|
unsigned int sua_assoc_id;
|
||||||
unsigned int local_sua_id,remote_sua_id;
|
unsigned int local_sua_id,remote_sua_id;
|
||||||
short stream_id = 0;
|
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||||
int delivery_type, result = 0;
|
short sctp_stream_id = 0;
|
||||||
|
int sctp_delivery_type, result = 0;
|
||||||
|
|
||||||
// init the message
|
// init the message
|
||||||
msg.sua_init();
|
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.prot_class.pcl = prot_class_2;
|
||||||
msg.sua_prim.seq_control_pres = TRUE;
|
msg.sua_prim.seq_control_pres = TRUE;
|
||||||
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
||||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||||
break;
|
break;
|
||||||
case(class3):
|
case(class3):
|
||||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
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)
|
if (Assoc_sua.instance[sua_assoc_id].asp.status == asp_active)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
// send data to SCTP
|
/* copy data into buffer, then finally... */
|
||||||
char* databuf = new char[msg.sua_msg.length()];
|
char* databuf = new char[msg.sua_msg.length()];
|
||||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||||
|
|
||||||
datalen = msg.sua_msg.length();
|
datalen = msg.sua_msg.length();
|
||||||
|
|
||||||
#ifdef DEBUG
|
// send data to SCTP
|
||||||
// display byte array
|
result = sua_send_Message( SCTP_assoc_id,
|
||||||
display_byte_array(databuf , msg.sua_msg.length());
|
sctp_stream_id,
|
||||||
#endif
|
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
|
#ifdef SUA_MANAGEMENT
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -572,8 +553,9 @@ int sua_send_CODATA( sccp_QOS_str &QOS,
|
||||||
unsigned int SCTP_assoc_id;
|
unsigned int SCTP_assoc_id;
|
||||||
unsigned int sua_assoc_id;
|
unsigned int sua_assoc_id;
|
||||||
unsigned int local_sua_id,remote_sua_id;
|
unsigned int local_sua_id,remote_sua_id;
|
||||||
short stream_id = 0;
|
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||||
int delivery_type, result = 0;
|
short sctp_stream_id = 0;
|
||||||
|
int sctp_delivery_type, result = 0;
|
||||||
|
|
||||||
|
|
||||||
// init the message
|
// 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.prot_class.pcl = prot_class_2;
|
||||||
msg.sua_prim.seq_control_pres = TRUE;
|
msg.sua_prim.seq_control_pres = TRUE;
|
||||||
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
||||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||||
break;
|
break;
|
||||||
case(class3):
|
case(class3):
|
||||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
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)
|
if (Assoc_sua.instance[sua_assoc_id].asp.status == asp_active)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
// send data to SCTP
|
/* copy data into buffer, then finally... */
|
||||||
char* databuf = new char[msg.sua_msg.length()];
|
char* databuf = new char[msg.sua_msg.length()];
|
||||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||||
|
|
||||||
datalen = msg.sua_msg.length();
|
datalen = msg.sua_msg.length();
|
||||||
|
|
||||||
#ifdef DEBUG
|
// send data to SCTP
|
||||||
// display byte array
|
result = sua_send_Message( SCTP_assoc_id,
|
||||||
display_byte_array(databuf , msg.sua_msg.length());
|
sctp_stream_id,
|
||||||
#endif
|
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
|
#ifdef SUA_MANAGEMENT
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -714,8 +686,9 @@ int sua_send_CORELRQ( sccp_QOS_str &QOS,
|
||||||
unsigned int SCTP_assoc_id;
|
unsigned int SCTP_assoc_id;
|
||||||
unsigned int sua_assoc_id;
|
unsigned int sua_assoc_id;
|
||||||
unsigned int local_sua_id,remote_sua_id;
|
unsigned int local_sua_id,remote_sua_id;
|
||||||
short stream_id = 0;
|
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||||
int delivery_type, result = 0;
|
short sctp_stream_id = 0;
|
||||||
|
int sctp_delivery_type, result = 0;
|
||||||
|
|
||||||
|
|
||||||
// init the message
|
// 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.prot_class.pcl = prot_class_2;
|
||||||
msg.sua_prim.seq_control_pres = TRUE;
|
msg.sua_prim.seq_control_pres = TRUE;
|
||||||
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
||||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||||
break;
|
break;
|
||||||
case(class3):
|
case(class3):
|
||||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
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)
|
if (Assoc_sua.instance[sua_assoc_id].asp.status == asp_active)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
// send data to SCTP
|
/* copy data into buffer, then finally... */
|
||||||
char* databuf = new char[msg.sua_msg.length()];
|
char* databuf = new char[msg.sua_msg.length()];
|
||||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||||
|
|
||||||
datalen = 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
|
#ifdef SUA_MANAGEMENT
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -861,8 +823,9 @@ int sua_send_CORELCO( sccp_QOS_str &QOS,
|
||||||
unsigned int SCTP_assoc_id;
|
unsigned int SCTP_assoc_id;
|
||||||
unsigned int sua_assoc_id;
|
unsigned int sua_assoc_id;
|
||||||
unsigned int local_sua_id,remote_sua_id;
|
unsigned int local_sua_id,remote_sua_id;
|
||||||
short stream_id = 0;
|
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||||
int delivery_type, result = 0;
|
short sctp_stream_id = 0;
|
||||||
|
int sctp_delivery_type, result = 0;
|
||||||
|
|
||||||
|
|
||||||
// init the message
|
// 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.prot_class.pcl = prot_class_2;
|
||||||
msg.sua_prim.seq_control_pres = TRUE;
|
msg.sua_prim.seq_control_pres = TRUE;
|
||||||
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
||||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||||
break;
|
break;
|
||||||
case(class3):
|
case(class3):
|
||||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
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)
|
if (Assoc_sua.instance[sua_assoc_id].asp.status == asp_active)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
// send data to SCTP
|
/* copy data into buffer, then finally... */
|
||||||
char* databuf = new char[msg.sua_msg.length()];
|
char* databuf = new char[msg.sua_msg.length()];
|
||||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||||
|
|
||||||
datalen = msg.sua_msg.length();
|
datalen = msg.sua_msg.length();
|
||||||
|
|
||||||
#ifdef DEBUG
|
// send data to SCTP
|
||||||
// display byte array
|
result = sua_send_Message( SCTP_assoc_id,
|
||||||
display_byte_array(databuf , msg.sua_msg.length());
|
sctp_stream_id,
|
||||||
#endif
|
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
|
#ifdef SUA_MANAGEMENT
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1007,8 +959,9 @@ int sua_send_COREF( sccp_QOS_str &QOS,
|
||||||
unsigned int SCTP_assoc_id;
|
unsigned int SCTP_assoc_id;
|
||||||
unsigned int sua_assoc_id;
|
unsigned int sua_assoc_id;
|
||||||
unsigned int local_sua_id,remote_sua_id;
|
unsigned int local_sua_id,remote_sua_id;
|
||||||
short stream_id = 0;
|
signed int sctp_loadshare = SCTP_USE_PRIMARY;
|
||||||
int delivery_type, result = 0;
|
short sctp_stream_id = 0;
|
||||||
|
int sctp_delivery_type, result = 0;
|
||||||
sccp_addr_str called_pty_address;
|
sccp_addr_str called_pty_address;
|
||||||
|
|
||||||
// init the message
|
// 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.prot_class.pcl = prot_class_2;
|
||||||
msg.sua_prim.seq_control_pres = TRUE;
|
msg.sua_prim.seq_control_pres = TRUE;
|
||||||
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
msg.sua_prim.seq_control = tcb_ptr->seq_number ;
|
||||||
delivery_type = SCTP_UNORDERED_DELIVERY;
|
sctp_delivery_type = SCTP_UNORDERED_DELIVERY;
|
||||||
break;
|
break;
|
||||||
case(class3):
|
case(class3):
|
||||||
return(PROTOCOL_CLASS_NOT_SPECIFIED);
|
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)
|
if (Assoc_sua.instance[sua_assoc_id].asp.status == asp_active)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
// send data to SCTP
|
/* copy data into buffer, then finally... */
|
||||||
char* databuf = new char[msg.sua_msg.length()];
|
char* databuf = new char[msg.sua_msg.length()];
|
||||||
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
msg.sua_msg.copy(databuf, msg.sua_msg.length());
|
||||||
|
|
||||||
datalen = 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
|
#ifdef SUA_MANAGEMENT
|
||||||
}
|
}
|
||||||
else
|
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.
|
* SUA implementation according to SUA draft issue 8.
|
||||||
*
|
*
|
||||||
|
@ -317,23 +317,27 @@ class db_Sua_AssociationList{
|
||||||
);
|
);
|
||||||
short Terminate_remote_assoc_instance();
|
short Terminate_remote_assoc_instance();
|
||||||
short shutdown();
|
short shutdown();
|
||||||
signed int route_msg(sccp_addr_str& cld,
|
signed int resolve_host_name( hostname_str& dest_name,
|
||||||
sccp_addr_str& clg
|
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,
|
signed int route_on_IPpc ( ipvxunion& dest_pc,
|
||||||
ipvxunion& org_pc,
|
ipvxunion& org_pc,
|
||||||
int& sua_assoc_id
|
int& sua_assoc_id
|
||||||
);
|
);
|
||||||
signed int route_on_SS7pc ( SS7union& dest_pc,
|
signed int route_on_SS7pc ( SS7union& dest_pc,
|
||||||
SS7union& org_pc,
|
SS7union& org_pc,
|
||||||
int& sua_assoc_id
|
int& sua_assoc_id
|
||||||
);
|
);
|
||||||
signed int route_on_GTname ( hostname_str& dest_name,
|
signed int route_on_GTname ( hostname_str& dest_name,
|
||||||
hostname_str& org_name,
|
hostname_str& org_name,
|
||||||
int& sua_assoc_id,
|
int& sua_assoc_id,
|
||||||
pointcode_str& dest_pc,
|
pointcode_str& dest_pc,
|
||||||
pointcode_str& org_pc
|
pointcode_str& org_pc
|
||||||
);
|
);
|
||||||
void increase_instance();
|
void increase_instance();
|
||||||
bool activate( unsigned int sua_id,
|
bool activate( unsigned int sua_id,
|
||||||
short mode
|
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.
|
* 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){
|
string db_Sua_NameList::read_host_name(string name){
|
||||||
|
|
||||||
char *hostname;
|
char *hostname;
|
||||||
|
@ -165,6 +168,7 @@ string db_Sua_NameList::read_host_name(string name){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// end of module sua_dataname.c
|
// 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.
|
* SUA implementation according to SUA draft issue 6.
|
||||||
*
|
*
|
||||||
|
@ -70,6 +70,7 @@
|
||||||
* - route on IP pointcode address
|
* - route on IP pointcode address
|
||||||
* - route on Global Title/Hostname
|
* - route on Global Title/Hostname
|
||||||
* - route message to a association
|
* - route message to a association
|
||||||
|
* - Final destination?
|
||||||
* - increase instance
|
* - increase instance
|
||||||
* - Dynamic association setup(initiating)
|
* - 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 */
|
/* Sua_AssociationList::register_instance */
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
|
@ -390,28 +451,125 @@ Find_association( unsigned int sctp_assoc_id,
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
unsigned int db_Sua_AssociationList::
|
unsigned int db_Sua_AssociationList::
|
||||||
Find_local_sua( sccp_addr_str& local_address
|
Find_local_sua( sccp_addr_str& local_address
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
short i = 1, j = 0;
|
pointcode_str dest_pc;
|
||||||
unsigned int Local_sua_id = 0;
|
short i = 1, j = 0, count, addr_start, addr_stop;
|
||||||
bool result = FALSE;
|
unsigned int Local_sua_id = 0;
|
||||||
|
bool result = FALSE;
|
||||||
|
|
||||||
while ((i < db_MAX_REMOTE_SUA) && !(result) && (instance[i].Source.nr_of_addrs != 0))
|
while ((i < db_MAX_REMOTE_SUA) && !(result) && (instance[i].Source.nr_of_addrs != 0))
|
||||||
{
|
{
|
||||||
j = 0;
|
j = 0;
|
||||||
while ((j < instance[i].Source.nr_of_addrs) && !(result))
|
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));
|
(instance[i].Source.addrs[j].sin6.sin6_addr.s6_addr == local_address.pc.ipvx.sin6.sin6_addr.s6_addr));
|
||||||
if (result)
|
*/
|
||||||
{
|
if (local_address.address_fields_present.pc == ipvx_pc_present)
|
||||||
Local_sua_id = instance[i].local_sua_id;
|
{
|
||||||
|
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
|
#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
|
#endif
|
||||||
}
|
}
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -431,6 +589,7 @@ passive_associate( unsigned int assoc_id,
|
||||||
){
|
){
|
||||||
|
|
||||||
SCTP_AssociationStatus status;
|
SCTP_AssociationStatus status;
|
||||||
|
SCTP_Path_Status path_x_status;
|
||||||
int result;
|
int result;
|
||||||
short k;
|
short k;
|
||||||
int bla;
|
int bla;
|
||||||
|
@ -471,13 +630,21 @@ passive_associate( unsigned int assoc_id,
|
||||||
event_log("sua_database.c",logstring);
|
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 */
|
/* conversion and fill in the destination address */
|
||||||
instance[assoc_instance_idx].Dest.nr_of_addrs = nr_of_dest_addr;
|
instance[assoc_instance_idx].Dest.nr_of_addrs = nr_of_dest_addr;
|
||||||
instance[assoc_instance_idx].Dest.address_string[0] = status.primaryDestinationAddress;
|
for(k=0; k < instance[assoc_instance_idx].Dest.nr_of_addrs ; k++)
|
||||||
instance[assoc_instance_idx].Dest.addrs[0].sin.sin_port = status.destPort;
|
{
|
||||||
|
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 */
|
/* try to figure out ipv4 or v6 address family: get it from the source address */
|
||||||
k = 0;
|
k = 0;
|
||||||
instance[assoc_instance_idx].Dest.addrs[0].sa.sa_family = AF_LOCAL;
|
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::
|
signed int db_Sua_AssociationList::
|
||||||
route_on_GTname ( hostname_str& dest_name,
|
route_on_GTname ( hostname_str& dest_name,
|
||||||
hostname_str& org_name,
|
hostname_str& org_name,
|
||||||
int& sua_assoc_id,
|
int& sua_assoc_id,
|
||||||
pointcode_str& dest_pc,
|
pointcode_str& dest_pc,
|
||||||
pointcode_str& org_pc
|
pointcode_str& org_pc
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
struct hostent *hptr;
|
int result = 0;
|
||||||
char **pptr;
|
unsigned int sctp_assoc_id = 0;
|
||||||
unsigned int sctp_assoc_id = 0;
|
|
||||||
char str[INET6_ADDRSTRLEN];
|
|
||||||
char *dest_carr;
|
|
||||||
|
|
||||||
sua_assoc_id = 0;
|
sua_assoc_id = 0;
|
||||||
|
|
||||||
/* resolving can be done via: */
|
/* resolving can be done via: */
|
||||||
/* - local global Titel database */
|
/* - local global Titel database */
|
||||||
/* - resolve hostname via DNS(simplest for single hop translations) */
|
/* - resolve hostname via DNS(simplest for single hop translations) */
|
||||||
dest_carr = dest_name;
|
result = resolve_host_name ( dest_name,
|
||||||
|
dest_pc
|
||||||
if ((hptr = gethostbyname( dest_carr )) == NULL)
|
);
|
||||||
{
|
|
||||||
cout << "Hostname " << dest_name << " not known in DNS.\n";
|
/*result = resolve_host_name ( org_name,
|
||||||
return(-1);
|
org_pc
|
||||||
}
|
); */
|
||||||
|
|
||||||
#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";
|
|
||||||
|
|
||||||
sctp_assoc_id = route_on_IPpc( dest_pc.ipvx,
|
sctp_assoc_id = route_on_IPpc( dest_pc.ipvx,
|
||||||
org_pc.ipvx,
|
org_pc.ipvx,
|
||||||
sua_assoc_id
|
sua_assoc_id
|
||||||
);
|
);
|
||||||
|
|
||||||
if (sctp_assoc_id != 0 )
|
if (sctp_assoc_id != 0 )
|
||||||
return(sctp_assoc_id);
|
return(sctp_assoc_id);
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return(sctp_assoc_id);
|
return(sctp_assoc_id);
|
||||||
};
|
};
|
||||||
|
@ -766,12 +897,14 @@ route_on_GTname ( hostname_str& dest_name,
|
||||||
/* Sua_AssociationList::route_msg */
|
/* Sua_AssociationList::route_msg */
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
signed int db_Sua_AssociationList::
|
signed int db_Sua_AssociationList::
|
||||||
route_msg( sccp_addr_str& cld,
|
route_msg( sccp_addr_str& cld,
|
||||||
sccp_addr_str& clg
|
sccp_addr_str& clg,
|
||||||
|
int& sua_assoc_id
|
||||||
){
|
){
|
||||||
|
|
||||||
unsigned int sctp_assoc_id = 0;
|
unsigned int sctp_assoc_id = 0;
|
||||||
int sua_assoc_id = 0;
|
|
||||||
|
sua_assoc_id = 0;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
cout << "num_of_instance : "<< num_of_instance << "\n";
|
cout << "num_of_instance : "<< num_of_instance << "\n";
|
||||||
|
@ -837,7 +970,6 @@ route_msg( sccp_addr_str& cld,
|
||||||
return(sctp_assoc_id);
|
return(sctp_assoc_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* Sua_AssociationList::increase_instance */
|
/* 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.
|
* SUA implementation according to SUA draft issue 6.
|
||||||
*
|
*
|
||||||
|
@ -57,8 +57,8 @@
|
||||||
#ifndef SUA_DEBUG_H
|
#ifndef SUA_DEBUG_H
|
||||||
#define SUA_DEBUG_H
|
#define SUA_DEBUG_H
|
||||||
|
|
||||||
/*#define DEBUG activates debuging msg on screen */
|
//#define DEBUG /* activates debuging msg on screen */
|
||||||
/*#define FILE_DEBUG activates debugging info to output file */
|
//#define FILE_DEBUG /* activates debugging info to output file */
|
||||||
#define SUA_MANAGEMENT /* activates SUA management */
|
#define SUA_MANAGEMENT /* activates SUA management */
|
||||||
#define SG_ASP_MODE /* implementation acts as ASP towards a SG */
|
#define SG_ASP_MODE /* implementation acts as ASP towards a SG */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue