Prechádzať zdrojové kódy

ims: Updated example configurations

Enhancements:
- Added Ro to the S-CSCF
- Added database support, optionally use db_cluster
- Replaced RTPProxy with RTPEngine module, support for originating WebRTC on the Proxy-CSCF (with SRTP Breaking)
- Optionally engage a SBC between the P-CSCF and the Core, SEMS sample configuration
- smaller adjustments
Carsten Bock 11 rokov pred
rodič
commit
17fa8ffec5

+ 24 - 23
examples/icscf/icscf.cfg

@@ -1,21 +1,26 @@
-# IP-Adress for incoming SIP-Traffic, in the following format:
-#!define NETWORK_INTERFACE "192.168.0.2"
-
-# Port, where we listen to Traffic
-#!define PORT 5060
-
-#!define NETWORKNAME "kamailio-ims.org"
-#!define HOSTNAME "icscf.kamailio-ims.org"
+# SIP / UDP
+listen=udp:141.0.21.79:5060
+# SIP / TCP
+listen=tcp:192.168.6.1:5060
+# SIP / TCP/TLS
+#listen=tls:134.119.8.166:5061
+# SIP / Websocket
+#listen=tcp:134.119.8.166:80
+# SIP / Websocket/TLS
+#listen=tls:134.119.8.166:443
+
+alias=ims.imscore.org
+alias=icscf-1.imscore.org
+
+#!define NETWORKNAME "ims.imscore.org"
+#!define HOSTNAME "icscf-1.imscore.org"
 
 
 # SIP-Address of capturing node, if not set, capturing is disabled.
 # SIP-Address of capturing node, if not set, capturing is disabled.
-##!define CAPTURE_NODE "sip:10.0.6.1"
+#!define CAPTURE_NODE "sip:10.1.8.55"
 
 
 # Connection URL for the database:
 # Connection URL for the database:
-#!define DB_MODULE "db_mysql"
-#!define DB_URL "mysql://icscf:[email protected]/icscf"
-
-# Set a forced CX/DX-Peer, do not try to find one
-#!define CXDX_FORCED_PEER "hss.kamailio-ims.org"
+#!define DB_URL "con1=>mysql://icscf:[email protected]/icscf"
+#!define DB_URL2 "con2=>mysql://icscf:[email protected]/icscf"
 
 
 # Allowed IPs for XML-RPC-Queries
 # Allowed IPs for XML-RPC-Queries
 #!define XMLRPC_WHITELIST_1 "127.0.0.1"
 #!define XMLRPC_WHITELIST_1 "127.0.0.1"
@@ -25,12 +30,13 @@
 # *** To run in debug mode: 
 # *** To run in debug mode: 
 #     - define WITH_DEBUG
 #     - define WITH_DEBUG
 #
 #
-# *** To enable TCP support execute:
-#     - define WITH_TCP
+# *** To enable TLS support execute:
+#     - adjust CFGDIR/tls.cfg as needed
+#     - define WITH_TLS
 #
 #
 # *** To enable XMLRPC support execute:
 # *** To enable XMLRPC support execute:
 #     - define WITH_XMLRPC
 #     - define WITH_XMLRPC
-#     - this will automagically enable TCP
+#     - adjust route[XMLRPC] for access policy
 #
 #
 # *** To enable a Homer SIP-Capter-Node:
 # *** To enable a Homer SIP-Capter-Node:
 #     - define CAPTURE_NODE with a proper address
 #     - define CAPTURE_NODE with a proper address
@@ -38,14 +44,9 @@
 # *** To forwarding to PSTN for unknown users:
 # *** To forwarding to PSTN for unknown users:
 #     - define PEERING
 #     - define PEERING
 #
 #
-# *** User not found? Try to forward request to a S-CSCF
-#      and see, if it get's challenged.
-#     - define FALLBACK_AUTH
-#
 # Enabled Features for this host:
 # Enabled Features for this host:
 ##!define WITH_DEBUG
 ##!define WITH_DEBUG
 ##!define WITH_TLS
 ##!define WITH_TLS
-##!define WITH_XMLRPC
+#!define WITH_XMLRPC
 ##!define PEERING
 ##!define PEERING
 ##!define FALLBACK_AUTH
 ##!define FALLBACK_AUTH
-

+ 38 - 21
examples/icscf/kamailio.cfg

@@ -12,6 +12,9 @@
 # For more information about the various parameters, functions and statements
 # For more information about the various parameters, functions and statements
 # try http://sip-router.org/wiki/ .
 # try http://sip-router.org/wiki/ .
 #
 #
+
+system.shutdownmode = 0 desc "System shutdown mode"
+
 include_file "icscf.cfg"
 include_file "icscf.cfg"
 
 
 ####### Defined Values #########
 ####### Defined Values #########
@@ -23,8 +26,6 @@ include_file "icscf.cfg"
 
 
 #!define FLT_CAPTURE 1
 #!define FLT_CAPTURE 1
 
 
-system.shutdownmode = 0 desc "System shutdown mode"
-
 ####### Global Parameters #########
 ####### Global Parameters #########
 #!ifdef WITH_DEBUG
 #!ifdef WITH_DEBUG
 debug=5
 debug=5
@@ -36,18 +37,6 @@ log_stderror=no
 sip_warning=no
 sip_warning=no
 #!endif
 #!endif
 
 
-/* uncomment and configure the following line if you want Kamailio to 
-   bind on a specific interface/port/proto (default bind on all available) */
-#!ifdef NETWORK_INTERFACE
-listen=NETWORK_INTERFACE
-#!endif
-
-/* port to listen to
- * - can be specified more than once if needed to listen on many ports */
-port=PORT
-alias=HOSTNAME
-alias=NETWORKNAME
-
 user_agent_header="User-Agent: Kamailio I-CSCF"
 user_agent_header="User-Agent: Kamailio I-CSCF"
 server_header="Server: Kamailio I-CSCF"
 server_header="Server: Kamailio I-CSCF"
 
 
@@ -60,7 +49,7 @@ dns_srv_lb=yes
 # Always: Also try IPv6:
 # Always: Also try IPv6:
 dns_try_ipv6=yes
 dns_try_ipv6=yes
 # Query NAPTR-Records as well:
 # Query NAPTR-Records as well:
-dns_try_naptr=yes
+dns_try_naptr=no
 
 
 #!ifdef WITH_XMLRPC
 #!ifdef WITH_XMLRPC
 #!ifndef WITH_TCP
 #!ifndef WITH_TCP
@@ -113,7 +102,10 @@ loadmodule "xmlrpc"
 #!endif
 #!endif
 
 
 # Load the according DB-Module:
 # Load the according DB-Module:
-loadmodule DB_MODULE
+loadmodule "db_mysql"
+#!ifdef DB_URL2
+loadmodule "db_cluster"
+#!endif
 
 
 loadmodule "cdp.so"
 loadmodule "cdp.so"
 loadmodule "cdp_avp.so"
 loadmodule "cdp_avp.so"
@@ -138,6 +130,13 @@ loadmodule "enum"
 #!endif
 #!endif
 
 
 # ----------------- setting module-specific parameters ---------------
 # ----------------- setting module-specific parameters ---------------
+#!ifdef DB_URL2
+# ----- db_cluster params -----
+modparam("db_cluster", "connection", DB_URL)
+modparam("db_cluster", "connection", DB_URL2)
+modparam("db_cluster", "cluster", "cluster1=>con1=2s2s;con2=1s1s")
+#!endif
+
 # ----- mi_fifo params -----
 # ----- mi_fifo params -----
 modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
 modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
 modparam("mi_fifo", "fifo_mode", 0666)
 modparam("mi_fifo", "fifo_mode", 0666)
@@ -157,8 +156,14 @@ modparam("cdp","config_file","/etc/kamailio/icscf.xml")
 modparam("ims_icscf", "cxdx_forced_peer", CXDX_FORCED_PEER)
 modparam("ims_icscf", "cxdx_forced_peer", CXDX_FORCED_PEER)
 #!endif
 #!endif
 modparam("ims_icscf","cxdx_dest_realm", NETWORKNAME)
 modparam("ims_icscf","cxdx_dest_realm", NETWORKNAME)
+
 # DB-URL, where information about S-CSCF-Server can be found:
 # DB-URL, where information about S-CSCF-Server can be found:
-modparam("ims_icscf","db_url", DB_URL)
+#!ifdef DB_URL2
+modparam("ims_icscf", "db_url", "cluster://cluster1")
+#!else
+modparam("ims_icscf", "db_url", DB_URL)
+#!endif
+
 modparam("ims_icscf","cxdx_dest_realm", NETWORKNAME)
 modparam("ims_icscf","cxdx_dest_realm", NETWORKNAME)
 #!ifdef PEERING
 #!ifdef PEERING
 # Route which is executed, in case HSS returned "User-Unknown" on LIR request
 # Route which is executed, in case HSS returned "User-Unknown" on LIR request
@@ -200,11 +205,21 @@ modparam("siptrace", "hep_mode_on", 1)
 modparam("enum", "domain_suffix", ENUM_SUFFIX)
 modparam("enum", "domain_suffix", ENUM_SUFFIX)
 #!endif
 #!endif
 
 
+# ----- tm params -----
+# auto-discard branches from previous serial forking leg
+modparam("tm", "failure_reply_mode", 3)
+# default retransmission timeout: 10sec
+modparam("tm", "fr_timer", 10000)
+# default invite retransmission timeout after 1xx: 120sec
+modparam("tm", "fr_inv_timer", 120000)
+
 # -------------------------  request routing logic -------------------
 # -------------------------  request routing logic -------------------
 # main routing logic
 # main routing logic
 
 
 route{
 route{
-	xlog("L_DBG", "$rm ($fu ($si:$sp) to $tu, $ci)\n");
+#!ifdef WITH_DEBUG
+	xlog("$rm ($fu ($si:$sp) to $tu, $ci)\n");
+#!endif
 
 
 	# per request initial checks
 	# per request initial checks
 	route(REQINIT);
 	route(REQINIT);
@@ -262,6 +277,10 @@ route[REQINIT] {
 	if (t_lookup_request()) {
 	if (t_lookup_request()) {
 		exit;
 		exit;
 	}
 	}
+
+	if (is_method("INVITE|REGISTER")) {
+		send_reply("100", "Trying");
+	}
 }
 }
 
 
 ######################################################################
 ######################################################################
@@ -374,9 +393,7 @@ onreply_route[register_reply]
 ######################################################################
 ######################################################################
 failure_route[register_failure]
 failure_route[register_failure]
 {
 {
-	xlog("L_DBG", "Enter register failure block");
-	if (t_check_status("(408)|(480)")){
-		xlog("L_DBG", "Got a failure on register");
+	if (t_check_status("(403)|(408)|(480)|([5-6][0-9][0-9])")){
 		if (I_scscf_select("1")) {
 		if (I_scscf_select("1")) {
 			t_on_reply("register_reply");
 			t_on_reply("register_reply");
 			t_on_failure("register_failure");
 			t_on_failure("register_failure");

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 389 - 335
examples/pcscf/kamailio.cfg


+ 46 - 20
examples/pcscf/pcscf.cfg

@@ -1,25 +1,49 @@
 # IP-Adress for incoming SIP-Traffic, in the following format:
 # IP-Adress for incoming SIP-Traffic, in the following format:
-##!define NETWORK_INTERFACE 192.168.0.1
-##!define NETWORK_INTERFACE_2 [some ipv6 address maybe?]
+
+# SIP / UDP
+listen=udp:109.239.57.200:5060
+listen=tcp:109.239.57.200:5060
+# SIP / TCP (Monitoring)
+listen=tcp:127.0.0.1:5060
+# SIP / TCP/TLS
+#listen=tls:109.239.57.200:5061
+# SIP / Websocket
+#listen=tcp:109.239.57.200:80
+# SIP / Websocket/TLS
+#listen=tls:109.239.57.200:443
+
+alias=pcscf-1.imscore.org
+alias=pcscf.imscore.org
+alias=proxy.imscore.org
+#alias=tls:"wss-proxy.imscore.org":443
 
 
 # Port, where we listen to Traffic
 # Port, where we listen to Traffic
 #!define PORT 5060
 #!define PORT 5060
 
 
-#!subst "/NETWORKNAME/kamailio-ims.org/"
-#!subst "/HOSTNAME/pcscf.kamailio-ims.org/"
-#!define HOSTNAME_IP pcscf.kamailio-ims.org
-#!define HOSTNAME_ESC "pcscf\.kamailio-ims\.org"
+#!subst "/NETWORKNAME/imscore.org/"
+#!subst "/HOSTNAME/pcscf-1.imscore.org/"
+#!define HOSTNAME_IP pcscf-1.imscore.org
+#!define HOSTNAME_ESC "pcscf-1\.imscore\.org"
 
 
 # SIP-Address of capturing node, if not set, capturing is disabled.
 # SIP-Address of capturing node, if not set, capturing is disabled.
-##!define CAPTURE_NODE "sip:10.0.6.1"
+#!define CAPTURE_NODE "sip:10.1.8.55"
 
 
 # Allowed IPs for XML-RPC-Queries
 # Allowed IPs for XML-RPC-Queries
 #!define XMLRPC_WHITELIST_1 "127.0.0.1"
 #!define XMLRPC_WHITELIST_1 "127.0.0.1"
 ##!define XMLRPC_WHITELIST_2 "127.0.0.1"
 ##!define XMLRPC_WHITELIST_2 "127.0.0.1"
 ##!define XMLRPC_WHITELIST_3 "127.0.0.1"
 ##!define XMLRPC_WHITELIST_3 "127.0.0.1"
 
 
+# Databases:
+#!define DB_URL "mysql://pcscf:[email protected]/pcscf"
+##!define DB_URL "con1=>mysql://pcscf:[email protected]/pcscf"
+##!define DB_URL2 "con2=>mysql://pcscf:[email protected]/pcscf"
+
+#! Optional: Server-URL for Websocket-Requests
+##!define WEBSOCKET_WEBSERVER "phone.imscore.org"
+
 # IP-Adress(es) of the RTP-Proxy
 # IP-Adress(es) of the RTP-Proxy
-#!define RTPPROXY_ADDRESS "udp:127.0.0.1:22222"
+##!define RTPPROXY_ADDRESS "udp:10.1.2.186:22222 udp:10.1.27.217:22222"
+#!define RTPPROXY_ADDRESS "udp:10.1.2.186:22222"
 #
 #
 # Several features can be enabled using '#!define WITH_FEATURE' directives:
 # Several features can be enabled using '#!define WITH_FEATURE' directives:
 #
 #
@@ -29,9 +53,6 @@
 # *** To enable nat traversal execute:
 # *** To enable nat traversal execute:
 #     - define WITH_NAT
 #     - define WITH_NAT
 #     - define the connection to the RTP-Proxy: RTPPROXY_ADDRESS
 #     - define the connection to the RTP-Proxy: RTPPROXY_ADDRESS
-#     - install RTPProxy: http://www.rtpproxy.org
-#     - start RTPProxy:
-#        rtpproxy -l _your_public_ip_ -s udp:localhost:7722
 #
 #
 # *** To force alls calls through the RTP-Proxy
 # *** To force alls calls through the RTP-Proxy
 #     - this will automagically enable NAT-Traversal
 #     - this will automagically enable NAT-Traversal
@@ -62,22 +83,27 @@
 #     - Configure Rx-Diameter-Interface in pcscf.xml
 #     - Configure Rx-Diameter-Interface in pcscf.xml
 #     - define WITH_RX
 #     - define WITH_RX
 #
 #
-# *** To enable P SUBSCRIPTION TO REG EVENT:
-#     - define WITH_P_SUBSCRIPTION_TO_REG_EVENT
-#
 # *** To enable a Homer SIP-Capter-Node:
 # *** To enable a Homer SIP-Capter-Node:
 #     - define CAPTURE_NODE with a proper address
 #     - define CAPTURE_NODE with a proper address
 #
 #
+# *** To enable support for the SEMS-SBC
+#     - define WITH_SBC
+#     - configure dispatcher-list with a set of SBC's
+#
+# *** To enable support for Websocket
+#     - define WITH_WEBSOCKET
+#     - this will automagically enable TCP
+#
 # Enabled Features for this host:
 # Enabled Features for this host:
 ##!define WITH_DEBUG
 ##!define WITH_DEBUG
-##!define WITH_NAT
-##!define FORCE_RTPRELAY
+#!define WITH_NAT
+#!define FORCE_RTPRELAY
 ##!define WITH_TLS
 ##!define WITH_TLS
 #!define WITH_XMLRPC
 #!define WITH_XMLRPC
 #!define WITH_ANTIFLOOD
 #!define WITH_ANTIFLOOD
 ##!define WITH_RX
 ##!define WITH_RX
 ##!define WITH_TCP
 ##!define WITH_TCP
-##!define WITH_RTPIPV4
-##!define WITH_P_SUBSCRIPTION_TO_REG_EVENT
-
-
+#!define WITH_SBC
+##!define WITH_WEBSOCKET
+#!define WITH_IMS_HDR_CACHE
+#!define WITH_NATPING

+ 2 - 0
examples/pcscf/sems/etc/methodmap.conf

@@ -0,0 +1,2 @@
+OPTIONS=>refuse_with_200
+REGISTER=>register

+ 75 - 0
examples/pcscf/sems/etc/mo.sbcprofile.conf

@@ -0,0 +1,75 @@
+# transparent SBC profile
+#
+# This implements a transparent B2BUA - all possible options are commented
+
+# defaults: transparent
+#RURI=$r
+#From=$f
+To=sip:[email protected]
+
+#Call-ID
+#Call-ID=$ci-ngv
+
+## routing
+# outbound proxy:
+outbound_proxy=$H(P-Route)
+# force outbound proxy (in-dialog requests)?
+#force_outbound_proxy=yes
+# destination IP[:port] for outgoing requests
+#next_hop_ip=$si
+#next_hop_port=$sp
+# use next_hop for replies, too?
+#next_hop_for_replies=yes
+# outbound interface to use (interface ID)
+#outbound_interface=extern
+
+## RTP relay
+# enable RTP relaying (bridging):
+enable_rtprelay=no
+# force symmetric RTP (start with passive mode):
+#rtprelay_force_symmetric_rtp=yes
+# use symmetric RTP indication from P-MsgFlags flag 2
+#rtprelay_msgflags_symmetric_rtp=yes
+
+## filters: 
+header_filter=whitelist
+header_list=Diversion,P-Asserted-Identity,Privacy,Allow,Event,Expires,Accept
+#header_filter=blacklist
+#header_list=
+#header_list=P-App-Param,P-App-Name
+message_filter=blacklist
+message_list=SUBSCRIBE
+sdp_filter=whitelist
+sdpfilter_list=g722,pcma,pcmu,gsm,h264,h263-1998,telephone-event
+sdp_anonymize=yes
+#sdp_anonymize=no
+# Filter A-Lines:
+sdp_alines_filter=blacklist
+sdp_alinesfilter_list=crypto,nortpproxy
+
+## Transcoding
+enable_transcoder=on_missing_compatible
+#enable_transcoder=yes
+transcoder_codecs=pcma,pcmu,gsm
+prefer_existing_codecs=yes
+# Minimum G711!
+callee_codeccaps=pcma,pcmu
+
+## reply translations
+# translate some 6xx class replies to 4xx class:
+#reply_translations="603=>488 Not acceptable here|600=>406 Not Acceptable"
+
+# From the mobile network
+enable_aleg_session_timer=yes
+aleg_session_expires=120
+aleg_minimum_timer=90
+aleg_maximum_timer=180
+
+# From our network
+enable_session_timer=yes
+session_expires=120
+minimum_timer=90
+maximum_timer=7200
+
+#session_refresh_method=UPDATE_FALLBACK_INVITE
+#accept_501_reply=yes

+ 20 - 0
examples/pcscf/sems/etc/monitoring.conf

@@ -0,0 +1,20 @@
+
+#run_garbage_collector=[yes | no]
+#
+# run garbage collection on expired session info? 
+# Default: no
+#
+run_garbage_collector = yes
+
+#garbage_collector_interval=10
+#
+# run garbage collection every n seconds
+# Default: 10
+#
+#garbage_collector_interval = 20
+
+# retain_samples_s=10
+# 
+# retain "sample" type values for n seconds
+#
+#retain_samples_s=20

+ 79 - 0
examples/pcscf/sems/etc/mt.sbcprofile.conf

@@ -0,0 +1,79 @@
+# transparent SBC profile
+#
+# This implements a transparent B2BUA - all possible options are commented
+
+# defaults: transparent
+#RURI=$r
+#From=$f
+#To=sip:[email protected]
+
+#Call-ID
+#Call-ID=$ci_leg2
+
+## routing
+# outbound proxy:
+outbound_proxy=sip:109.239.57.200:5060
+# force outbound proxy (in-dialog requests)?
+#force_outbound_proxy=yes
+# destination IP[:port] for outgoing requests
+#next_hop_ip=$si
+#next_hop_port=$sp
+# use next_hop for replies, too?
+#next_hop_for_replies=yes
+# outbound interface to use (interface ID)
+#outbound_interface=extern
+
+## RTP relay
+# enable RTP relaying (bridging):
+enable_rtprelay=no
+# force symmetric RTP (start with passive mode):
+#rtprelay_force_symmetric_rtp=yes
+# use symmetric RTP indication from P-MsgFlags flag 2
+#rtprelay_msgflags_symmetric_rtp=yes
+
+## filters: 
+header_filter=whitelist
+header_list=Diversion,P-Asserted-Identity,Privacy,P-Route,P-NAT,P-Source,Allow,Event,Expires,Accept
+#header_filter=blacklist
+#header_list=
+#header_list=P-App-Param,P-App-Name
+#message_filter=blacklist
+#message_list=OPTIONS
+sdp_filter=whitelist
+sdpfilter_list=g722,pcma,pcmu,gsm,h263-1998,telephone-event
+sdp_anonymize=yes
+# Filter A-Lines:
+sdp_alines_filter=blacklist
+sdp_alinesfilter_list=crypto,nortpproxy
+
+## Transcoding
+enable_transcoder=on_missing_compatible
+transcoder_codecs=pcma,pcmu,ilbc,gsm
+prefer_existing_codecs=yes
+callee_codeccaps=ilbc
+
+## reply translations
+# translate some 6xx class replies to 4xx class:
+#reply_translations="603=>488 Not acceptable here|600=>406 Not Acceptable"
+
+## session timer:
+enable_session_timer=yes
+
+# From our network
+aleg_session_expires=120
+aleg_minimum_timer=90
+aleg_maximum_timer=7200
+
+# From the mobile network
+session_expires=120
+minimum_timer=90
+maximum_timer=180
+
+#session_refresh_method=UPDATE_FALLBACK_INVITE
+#accept_501_reply=yes
+
+## Registration Caching
+enable_reg_caching=yes
+min_reg_expires=7200
+max_ua_expires=120
+

+ 38 - 0
examples/pcscf/sems/etc/nocache.sbcprofile.conf

@@ -0,0 +1,38 @@
+# transparent SBC profile
+#
+# This implements a transparent B2BUA - all possible options are commented
+
+# defaults: transparent
+
+## routing
+# outbound proxy:
+outbound_proxy=sip:$si:$sp
+# force outbound proxy (in-dialog requests)?
+#force_outbound_proxy=yes
+# destination IP[:port] for outgoing requests
+#next_hop_ip=$si
+#next_hop_port=$sp
+# use next_hop for replies, too?
+#next_hop_for_replies=yes
+# outbound interface to use (interface ID)
+#outbound_interface=extern
+
+## filters: 
+#header_filter=whitelist
+#header_list=Diversion,P-Asserted-Identity,Privacy,P-Route,P-Destination,P-Source
+#header_filter=blacklist
+#header_list=
+#header_list=P-App-Param,P-App-Name
+#message_filter=blacklist
+#message_list=OPTIONS
+sdp_filter=whitelist
+sdpfilter_list=g722,pcma,pcmu,isac,ilbc,gsm,telephone-event
+sdp_anonymize=yes
+# Filter A-Lines:
+sdp_alines_filter=blacklist
+sdp_alinesfilter_list=crypto,nortpproxy
+
+## Registration Caching
+enable_reg_caching=no
+min_reg_expires=60
+max_ua_expires=60

+ 1 - 0
examples/pcscf/sems/etc/refuse.sbcprofile.conf

@@ -0,0 +1 @@
+refuse_with="403 Forbidden"

+ 1 - 0
examples/pcscf/sems/etc/refuse_with_200.sbcprofile.conf

@@ -0,0 +1 @@
+refuse_with="200 OK"

+ 28 - 0
examples/pcscf/sems/etc/register.sbcprofile.conf

@@ -0,0 +1,28 @@
+# transparent SBC profile
+#
+# This implements a transparent B2BUA - all possible options are commented
+
+# defaults: transparent
+
+## routing
+# outbound proxy:
+#outbound_proxy=sip:$si:$sp
+# force outbound proxy (in-dialog requests)?
+#force_outbound_proxy=yes
+# destination IP[:port] for outgoing requests
+#next_hop_ip=$si
+#next_hop_port=$sp
+# use next_hop for replies, too?
+#next_hop_for_replies=yes
+# outbound interface to use (interface ID)
+#outbound_interface=extern
+
+## filters: 
+#header_filter=whitelist
+#header_list=P-Visited-Network-ID
+
+## Registration Caching
+enable_reg_caching=yes
+min_reg_expires=28800
+min_reg_expires=57600
+max_ua_expires=120

+ 1 - 0
examples/pcscf/sems/etc/rurimap.conf

@@ -0,0 +1 @@
+ims.voiceblue.com=>mo

+ 62 - 0
examples/pcscf/sems/etc/sbc.conf

@@ -0,0 +1,62 @@
+
+# profiles - comma-separated list of call profiles to load
+#
+# <name>.sbcprofile.conf is loaded from module config 
+# path (the path where this file resides)
+profiles=refuse_with_200,mo,mt,register,refuse
+
+# active call profile - comma separated list, first non-empty is used
+#
+# o active_profile=<profile_name>  always use <profile_name>
+#
+# o active_profile=$(ruri.user)    use user part of INVITE Request URI
+#
+# o active_profile=$(paramhdr)     use  "profile" option in P-App-Param header
+#
+# o any replacement pattern
+#
+active_profile=$M($m=>methodmap),$M($si=>src_ipmap),refuse
+
+# regex_maps - comma-separated list of regex maps to load at startup, for $M()
+# 
+# regex=>value maps for which names are given here are loaded from 
+# this path, e.g. src_ipmap.conf, ruri_map.conf, usermap.conf
+#
+regex_maps=methodmap,src_ipmap
+
+## RFC4028 Session Timer
+# default configuration - can be overridden by call profiles
+
+# - enables the session timer ([yes,no]; default: no)
+#
+#enable_session_timer=yes
+
+# - set the "Session-Expires" parameter for the session timer.
+#
+#session_expires=120
+
+# - set the "Min-SE" parameter for the session timer.
+#
+#minimum_timer=90
+
+# session refresh (Session Timer, RFC4028) method
+#
+# INVITE                 - use re-INVITE
+# UPDATE                 - use UPDATE
+# UPDATE_FALLBACK_INVITE - use UPDATE if indicated in Allow, re-INVITE otherwise
+#
+# Default: UPDATE_FALLBACK_INVITE
+#
+#session_refresh_method=UPDATE
+
+# accept_501_reply - accept 501 reply as successful refresh? [yes|no]
+#
+# Default: yes
+#
+#accept_501_reply=no
+
+# handle OPTIONS messages in the core? (with limits etc)
+# Default: no
+core_options_handling=yes
+
+

+ 4 - 0
examples/pcscf/sems/etc/src_ipmap.conf

@@ -0,0 +1,4 @@
+134.119.8.166=>mo
+109.239.57.200=>mo
+134.119.4.76=>mt
+141.0.21.99=>mt

+ 5 - 0
examples/pcscf/sems/etc/stats.conf

@@ -0,0 +1,5 @@
+# IP of the monitoring interface:
+monit_udp_ip=127.0.0.1
+
+# port the statistics server should listen to:
+monit_udp_port=5040

+ 42 - 0
examples/pcscf/sems/etc/xmlrpc2di.conf

@@ -0,0 +1,42 @@
+# server_ip : IP to bind XMLRPC server to
+# leave empty for ANY interface
+server_ip=127.0.0.1
+
+# port to bind XMLRPC server to 
+xmlrpc_port=8090
+
+# run multi-threaded server? 
+# Default: yes
+# 
+# multithreaded = yes
+
+# threads to run - this many requests can be processed in parallel
+# Default: 5
+#
+# threads=5
+
+# export all DI functions with the function call 'di'?
+# defaults to: yes
+# export_di=yes
+
+#
+# these DI interfaces are searched for functions to 
+# export under their proper function names
+# defaults to: none
+# direct_export=di_dial;registrar_client
+direct_export=sbc
+
+# run the XMLRPC server at all (default: yes)
+#
+# run_server=yes 
+
+# timeout for client requests, in milliseconds (0 to disable)
+#
+# server_timeout=500
+
+# print parameters of XMLRPC server calls into debug log [yes|no]
+#  debug_server_params=yes
+#
+# print result of XMLRPC server calls into debug log [yes|no]
+#  debug_server_result=yes
+#

+ 538 - 0
examples/pcscf/sems/sems.conf

@@ -0,0 +1,538 @@
+# $Id$
+#
+# sems.conf.sample
+#
+# Sip Express Media Server (sems)
+# 
+# sample configuration file
+# 
+#
+# whitespaces (spaces and tabs) are ignored
+# comments start with a "#" and may be used inline
+# 
+# example: option=value # i like this option
+#
+# @filename includes mod_config_path/filename
+# @/absolute/path/to/file includes file
+
+############################################################
+# Network configuration
+
+# optional parameter: media_ip=<ip_address>|<device>
+# 
+# - this informs SEMS about the IP address or interface that 
+#   SEMS uses to send and receive media.  
+# - If neither 'media_ip' nor 'sip_ip' are set, defaults 
+#   to first non-loopback interface. If 'sip_ip' is set,
+#   'media_ip' defaults to 'sip_ip.
+#
+# Examples: 
+#  media_ip=10.0.0.34
+#  media_ip=eth0
+
+#media_ip=eth0
+media_ip=109.239.57.200
+
+# optional parameter: sip_ip=<ip_address>|<device>
+#
+# - this informs SEMS about the SIP IP where its SIP stack is 
+#   bound to or should be bound to. This also sets 
+#   the value used for contact header in outgoing calls and 
+#   registrations.
+# - If neither 'media_ip' nor 'sip_ip' are set, defaults 
+#   to first non-loopback interface. If 'media_ip' is set,
+#   'sip_ip' defaults to 'media_ip.
+#
+# Example:
+#  sip_ip=10.0.0.34
+#  sip_ip=en0
+#
+
+sip_ip=127.0.0.1
+
+# optional parameter: public_ip=<ip_address>
+# 
+# - when running SEMS behind certain simple NAT configurations,
+#   you can use this parameter to inform SEMS of its public IP
+#   address. If this parameter is set, SEMS will write this value
+#   into SDP bodies.
+#   If this parameter is not set, the local IP address is used.
+#   N.B., there is no support for port translation; the local 
+#   RTP port is advertised in SDP in either case.
+#   
+# Example:
+#  public_ip=75.101.219.48
+#  
+  
+# optional parameter: sip_port=<port_number>
+#
+# - this informs SEMS about the port where its SIP stack is 
+#   bound to or should be bound to. SEMS needs this information
+#   to correctly set the contact header in outgoing calls 
+#   and registrations. Should be set to equal the 'port' 
+#   configuration option in ser_sems.cfg.
+#  
+#   default: 5060
+#
+sip_port=5080
+
+# optional parameter: outbound_proxy=uri
+#
+# - this sets an outbound proxy for calls and registrations initiated 
+#   by SEMS. This does not apply to requests in a dialog that 
+#   is initiated by someone else and incoming to SEMS.
+#   If this is not set (default setting), then for dialogs 
+#   initiated by SEMS the r-uri is resolved and the request 
+#   is sent there directly.
+#   This is resolved by the SIP stack with DNS if a name is given.
+#   Warning: If the value set here can not be resolved, no 
+#            requests will be sent out at all!
+#  
+#   default: empty
+#
+# Example:
+#   outbound_proxy=sip:proxy.mydomain.net
+
+# optional parameter: force_outbound_proxy={yes|no}
+#
+# - forces SEMS to send any request to the outbound proxy in any
+#   situation, by adding an extra first Route to the outbound_proxy.
+#   This option will only have an effect if the outbound_proxy
+#   option has been set, and it will break 3261 compatibility
+#   in some cases; better use next_hop_ip/next_hop_port.
+#
+#   default: no
+#
+# Example:
+#   force_outbound_proxy=yes
+
+# optional parameter: next_hop_ip
+# - if this is set, all outgoing requests will be sent to
+#   this IP, regardless of R-URI etc.
+#
+#next_hop_ip=192.168.5.106
+
+# optional parameter: next_hop_port
+# defaults to 5060
+#next_hop_port=5060
+
+# optional parameter:next_hop_for_replies
+# - use next_hop for replies, too?
+#
+#next_hop_for_replies=yes
+
+# optional parameter: rtp_low_port=<port>
+#
+# - sets lowest for RTP used port
+rtp_low_port=10000
+
+# optional parameter: rtp_high_port=<port>
+#
+# - sets highest for RTP used port 
+rtp_high_port=19999
+
+# Additional IFs (optional): 
+#   additional_interfaces = <list of interfaces>
+#
+# additional_interfaces must be set if more than one
+# interface is to be used for the same purpose (e.g.
+# more than one interface for SIP). Configure additional
+# interfaces if networks should be bridged or separate
+# networks should be served.
+#
+# For each additional interface, a set of parameters
+# suffixed with the interface name should be listed
+# with the 'additional_interfaces' parameter.
+#
+# Please note that for each additional interface,
+# 'sip_ip_[if_name]' is mandatory. The other
+# parameters are optional. 'media_ip_[if_name]'
+# is derived from 'sip_ip_[if_name]' if not set.
+# 'public_ip_[ip_name]' is also based on 'sip_ip_[if_name]'
+# if not set explicitly.
+# 
+# Example:
+#  additional_interfaces=intern,extern
+#  
+#  sip_ip_intern=192.168.0.5
+#  sip_port_intern=5060
+#  media_ip_intern=192.168.10.5
+#  rtp_low_port_intern=2000
+#  rtp_high_port_intern=5000
+#
+#  sip_ip_extern=213.192.59.73
+#  sip_port_extern=5060
+#  media_ip_extern=213.192.59.73
+#  rtp_low_port_extern=2000
+#  rtp_high_port_extern=5000
+#  public_ip_extern=213.192.35.73 
+#
+
+############################################################
+# modules and application configuration
+#
+# Configuration of plugin (module) loading:
+# - if load_plugins is set, only those are loaded.
+# - if load_plugins is not set, all modules in the plugin_path
+#   directory are loaded, except those which are listed 
+#   in exclude_plugins.
+#
+
+# optional parameter: plugin_path=<path>
+# 
+# - sets the path to the plug-ins' binaries
+# - may be absolute or relative to CWD
+plugin_path=/usr/lib/sems/plug-in/
+
+# optional parameter: load_plugins=<modules list>
+# 
+# semicolon-separated list of modules to load.
+# If empty, all modules in plugin_path are loaded.
+#
+# example for announcement with only g711 and ilbc codecs  
+# load_plugins=wav;ilbc;announcement
+load_plugins=wav;gsm;isac;ilbc;xmlrpc2di;monitoring;stats;uac_auth;session_timer;sbc
+
+# optional parameter: exclude_plugins=<modules list>
+#
+# semicolon-separated list of modules to exclude from loading
+# ('blacklist'). If empty, all modules in plugin_path are loaded.
+# This has only effect it load_plugins is not set.
+#
+# o precoded_announce: no precoded sample files present
+# o py_sems: conflicts with ivr (in some cases)
+exclude_plugins=precoded_announce;py_sems
+
+# optional parameter: application
+# 
+# This controls which application is to be executed if there 
+# is no explicit application requested from the SIP stack 
+# (i.e. unixsockctrl and second parameter of t_write_unix).
+#
+# This can be one of 
+#    $(ruri.user)       - user part of ruri is taken as application,
+#                         e.g. sip:announcement@host
+#    $(ruri.param)      - uri parameter "app", e.g. 
+#                         sip:[email protected];app=announcement
+#    $(apphdr)          - the value of the P-App-Name header is used
+#
+#    $(mapping)         - regex=>application mapping is read from
+#                         app_mapping.conf (see app_mapping.conf)
+#    <application name> - application name configured here, e.g.
+#                         application=announcement
+#   
+# examples:
+# application = conference
+# application = $(mapping)
+# application = $(ruri.user)
+# application = $(ruri.param)
+application = sbc
+
+# parameter: plugin_config_path=<path>
+#
+# - in this path configuration files of the applications 
+#   (e.g. announcement.conf) are searched
+plugin_config_path=/etc/sems/etc/
+
+# optional parameter: exclude_payloads=<payload list>
+#
+# semicolon-separated list of payloads to exclude from loading
+# ('blacklist'). 
+# 
+# For example, to only use low bandwidth codecs:
+#  exclude_payloads=PCMU;PCMA;G726-40;G726-32;G721;L16
+# or, to use only codecs which are not CPU-intensive:
+#  exclude_payloads=iLBC;speex;
+# only use G711 (exclude everything else):
+#  exclude_payloads=iLBC;speex;G726-40;G726-32;G721;G726-24;G726-16;GSM;L16
+
+############################################################
+# logging and running
+
+# optional parameter: fork={yes|no}
+# 
+# - specifies if sems should run in daemon mode (background)
+#   (fork=no is the same as -E)
+fork=yes
+
+# optional parameter: stderr={yes|no}
+#
+# - debug mode: do not fork and log to stderr
+#   (stderr=yes is the same as -E)
+stderr=no
+
+# optional parameter: loglevel={0|1|2|3}
+#
+# - sets log level (error=0, warning=1, info=2, debug=3)
+#   (same as -D)
+loglevel=1
+
+# optional parameter: syslog_facility={DAEMON|USER|LOCAL[0-7]}
+#
+# - sets the log facility that is used for syslog. Using this,
+#   the log can for example be filtered into a special file 
+#   by the syslog daemon.
+#
+# Default: DAEMON
+#
+# Example:
+# syslog_facility=LOCAL0
+
+# optional parameter: log_sessions=[yes|no]
+# 
+# Default: no
+# 
+# If log_sessions=yes is set, INFO level log messages are generated
+# for each session when it is started and stopped.
+#
+# log_sessions=yes
+
+# optional parameter: log_events=[yes|no]
+# 
+# Default: no
+# 
+# If log_eventy=yes is set, generic DBG level log messages are 
+# generated for each event that is posted into an event queue.
+#
+# log_events=yes
+
+# optional parameter: max_shutdown_time=<time in seconds>
+#
+# Limit on server shutdown time (time to send/resend BYE
+# to active calls). 0 to disable (infinite).
+#
+# Default: 10
+#
+max_shutdown_time = 60
+
+# optional parameter: shutdown_mode_reply="<code> <reason>"
+#
+# Error reply that is used as reply to INVITE and OPTION
+# when SEMS is shutting down.
+#
+# Default: shutdown_mode_reply="503 Server shutting down"
+
+
+############################################################
+# tuning
+
+# optional parameter: session_processor_threads=<num_value>
+# 
+# - controls how many threads should be created that
+#   process the application logic and in-dialog signaling. 
+#   This is only available if compiled with threadpool support!
+#   (set USE_THREADPOOL in Makefile.defs)
+#   Defaults to 10
+#
+# session_processor_threads=50
+
+# optional parameter: media_processor_threads=<num_value>
+# 
+# - controls how many threads should be created that
+#   process media - on single-processor systems set this 
+#   parameter to 1 (default), on MP systems to a higher
+#   value
+#
+# media_processor_threads=1
+
+
+# optional parameter: session_limit=<limit>;<err code>;<err reason>
+# 
+# - this sets a maximum active session limit. If that limit is 
+#   reached, no further calls are accepted, but the error reply 
+#   with err code/err reason is sent out.
+# 
+# Default: 0 (None)
+#
+# Example:
+#  session_limit="1000;503;Server overload"
+
+# optional parameter: options_session_limit=<limit>;<err code>;<err reason>
+# 
+# - this sets a custom response to OPTIONS, if the session count reaches
+#   a certain limit. This way health monitor could raise an alarm to syste
+#   administrator. 
+# 
+# Default: 0 (None)
+#
+# Example:
+#  options_session_limit="900;503;Warning, server soon overloaded"
+
+
+# optional parameter: dead_rtp_time=<unsigned int>
+#
+# - if != 0, after this time (in seconds) of no RTP
+#   a session is considered dead and stopped. If set
+#   to 0 no check is done for rtp timeout.
+#
+#   default=300 (5 minutes)
+#
+# Examples:
+#    # disable RTP timeout
+#    dead_rtp_time=0  
+#    # RTP timeout after 10 seconds
+#    dead_rtp_time=10  
+
+# optional parameter: use_default_signature={yes|no}
+#
+# - use a Server/User-Agent header with the SEMS server 
+#   signature and version.
+#   Set server_signature=0 in ser_sems.cfg if you use SER 
+#   as SIP stack.
+#
+#   default=no
+#
+use_default_signature=yes
+
+# optional parameter: signature=<signature string>
+#
+# - use a Server/User-Agent header with a custom user agent
+#   signature.
+#   Overridden by default signature if 
+#   use_default_signature is set.
+#   Set server_signature=0 in ser_sems.cfg if you use it.   
+#
+#
+# signature="SEMS media server 1.0"
+
+# optional parameter: single_codec_in_ok={yes|no}
+#
+# - use single codec in 200 OK response
+#
+#   default=no
+#
+# single_codec_in_ok=no
+
+# optional parameter: codec_order=codec_name_1,codec_name2,...
+#
+# - Codec order used when sending INVITE requests.  Codecs in codec_order
+#   will be on the top of the list followed by other supported codecs
+#   (if any).
+#
+#   default=empty
+#
+# codec_order=iLBC,GSM
+
+# optional parameter: ignore_rtpxheaders={yes|no}
+#
+# - if this is set to yes, RTP extension headers (e.g. when using ZRTP)
+#   are ignored. If set to no, the whole RTP packets with extension 
+#   headers will be ignored and a debug message is printed on every 
+#   received packet.
+#
+#   default=no
+#
+# ignore_rtpxheaders=yes
+
+# optional parameter: dtmf_detector={spandsp|internal}
+#
+# sets inband DTMF detector to use. spandsp support must be compiled in
+# for this to have effect if dtmf_detector=spandsp.
+#  
+# default: internal
+#
+# dtmf_detector=spandsp
+
+# optional parameter: wait_for_bye_transaction={yes|no}
+#
+# when SEMS stops a call sending BYE as UAC, this option sets whether
+# SEMS waits for the BYE transaction to finish before forgetting the call.
+# This may be necessary e.g. to authenticate the BYE request.
+#
+# default: no
+#
+# wait_for_bye_transaction=yes
+
+# optional parameter: unhandled_reply_loglevel={error|warn|info|debug|no}
+# 
+# the default application logic implemented in the applications is to stop 
+# the session right after sending BYE, without waiting for a reply. this 
+# leads to many log entries of the form 
+# ERROR: [b6fa6bb0] handleSipMsg (AmSipDispatcher.cpp:48): unhandled 
+#    reply:  [code:200;phrase:[OK];... ]
+#
+# This parameter sets the log lovel of unhandled positive (200 class) replies.
+#
+# default: error
+# 
+# unhandled_reply_loglevel=info
+
+############################################################
+# SIP stack settings
+#   default settings (i.e. leave out) for these should be OK
+#   for most applications
+
+# skip DNS SRV lookup? [yes, no]
+#
+# according to RFC, if no port is specified, destination IP address
+# should be resolved with a DNS SRV lookup. If SEMS should not do that
+# (only an A record lookup), set disable_dns_srv=yes.
+#
+# Default: no
+#
+#disable_dns_srv=yes
+
+# support 100rel (PRACK) extension (RFC3262)? [disabled|supported|require]
+#
+# disabled - disable support for 100rel
+# supported - support it if remote end does, default
+# require - required
+#
+# Default: supported
+#
+#100rel=require
+
+# Make SIP authenticated requests sticky to the proxy? [yes | no]
+#
+# If enabled, host of request-URI of out-of-dialog requests that are 
+# authenticated with SIP auth is changed to the previously resolved
+# next-hop IP:port.
+#
+# default: no
+#
+# proxy_sticky_auth=yes
+
+#
+# Accept final replies without To-tag? [yes|no]
+#
+#accept_fr_without_totag=yes
+
+#
+# Log raw messages?  [no|debug|info|warn|error]
+#
+# Default: debug
+#
+#log_raw_messages=no
+
+#
+# Log parsed received messages?  [yes|no]
+#
+# Default: yes
+#
+#log_parsed_messages=no
+
+# SIP UDP socket receive buffer size (in bytes)
+#
+# if not set, system default is used (which usually
+# is modest). set sytem wide upper limit with
+# e.g. sysctl -w net.core.rmem_max=8388608
+#
+# udp_rcvbuf = <value>
+
+# Number of SIP UDP receiver threads
+#
+# Default: 4
+#
+# sip_server_threads=8
+
+#
+# accept forked dialogs on UAS side? [yes|no]
+#
+#  no - INVITE with existing callid+remote_tag is replied with 482.
+# yes - INVITE with existing callid+remote_tag+via_branch is replied with 482.
+#       Forked INVITEs (!= via-branch) are accepted. 
+#
+# Default: yes
+#
+accept_forked_dialogs=yes
+

+ 174 - 131
examples/scscf/kamailio.cfg

@@ -13,8 +13,6 @@
 # try http://sip-router.org/wiki/ .
 # try http://sip-router.org/wiki/ .
 #
 #
 
 
-include_file "scscf.cfg"
-
 ####### Defined Values #########
 ####### Defined Values #########
 # *** Value defines - IDs used later in config
 # *** Value defines - IDs used later in config
 
 
@@ -30,10 +28,13 @@ include_file "scscf.cfg"
 #!define DISPATCHER_DST_AVP "i:3"
 #!define DISPATCHER_DST_AVP "i:3"
 #!define DISPATCHER_GRP_AVP "i:4"
 #!define DISPATCHER_GRP_AVP "i:4"
 #!define DISPATCHER_CNT_AVP "i:5"
 #!define DISPATCHER_CNT_AVP "i:5"
+#!define PDB_CARRIER "i:6"
 
 
-system.shutdownmode = 0 desc "System shutdown mode"
 
 
 ####### Global Parameters #########
 ####### Global Parameters #########
+
+include_file "scscf.cfg"
+
 #!ifdef WITH_DEBUG
 #!ifdef WITH_DEBUG
 debug=5
 debug=5
 log_stderror=no
 log_stderror=no
@@ -44,15 +45,6 @@ log_stderror=no
 sip_warning=no
 sip_warning=no
 #!endif
 #!endif
 
 
-/* uncomment and configure the following line if you want Kamailio to 
-   bind on a specific interface/port/proto (default bind on all available) */
-#!ifdef NETWORK_INTERFACE
-listen=NETWORK_INTERFACE
-#!endif
-
-/* port to listen to
- * - can be specified more than once if needed to listen on many ports */
-port=PORT
 alias=HOSTNAME
 alias=HOSTNAME
 
 
 user_agent_header="User-Agent: Kamailio S-CSCF"
 user_agent_header="User-Agent: Kamailio S-CSCF"
@@ -70,10 +62,12 @@ rev_dns=no      # (cmd. line: -R)
 dns_srv_lb=yes
 dns_srv_lb=yes
 # Always: Also try IPv6:
 # Always: Also try IPv6:
 dns_try_ipv6=yes
 dns_try_ipv6=yes
-# Try only IPv6:
+# Always prefer IPv6:
 dns_cache_flags=6
 dns_cache_flags=6
+# DNS-Based failover
+use_dns_failover = on
 # Query NAPTR-Records as well:
 # Query NAPTR-Records as well:
-dns_try_naptr=yes
+dns_try_naptr=no
 
 
 #!ifdef WITH_XMLRPC
 #!ifdef WITH_XMLRPC
 #!ifndef WITH_TCP
 #!ifndef WITH_TCP
@@ -98,6 +92,8 @@ disable_tcp=yes
 
 
 children=64
 children=64
 
 
+system.shutdownmode = 0 desc "System shutdown mode"
+
 # ------------------ module loading ----------------------------------
 # ------------------ module loading ----------------------------------
 mpath="/usr/lib64/kamailio/modules_k/:/usr/lib64/kamailio/modules/:/usr/lib/kamailio/modules_k/:/usr/lib/kamailio/modules/"
 mpath="/usr/lib64/kamailio/modules_k/:/usr/lib64/kamailio/modules/:/usr/lib/kamailio/modules_k/:/usr/lib/kamailio/modules/"
 # (we try both the lib64 and the lib directory)
 # (we try both the lib64 and the lib directory)
@@ -113,8 +109,19 @@ loadmodule "xlog.so"
 loadmodule "sanity.so"
 loadmodule "sanity.so"
 loadmodule "siputils.so"
 loadmodule "siputils.so"
 loadmodule "kex.so"
 loadmodule "kex.so"
+#!ifdef DB_URL
+loadmodule "presence"
+#!endif
+
+#!ifdef DB_URL
+loadmodule "db_mysql"
+#!ifdef DB_URL2
+loadmodule "db_cluster"
+#!endif
+#!endif
 
 
 loadmodule "dispatcher"
 loadmodule "dispatcher"
+
 loadmodule "enum"
 loadmodule "enum"
 loadmodule "uac"
 loadmodule "uac"
 
 
@@ -129,15 +136,16 @@ loadmodule "xmlrpc"
 
 
 loadmodule "cdp.so"
 loadmodule "cdp.so"
 loadmodule "cdp_avp.so"
 loadmodule "cdp_avp.so"
-#!ifdef WITH_RO
-loadmodule "ims_diameter_ro.so"
-#!endif
 
 
 loadmodule "ims_usrloc_scscf.so" 
 loadmodule "ims_usrloc_scscf.so" 
 loadmodule "ims_registrar_scscf.so"
 loadmodule "ims_registrar_scscf.so"
 loadmodule "ims_auth.so"
 loadmodule "ims_auth.so"
 loadmodule "ims_isc.so"
 loadmodule "ims_isc.so"
 
 
+#!ifdef WITH_RO
+loadmodule "ims_charging.so"
+#!endif
+
 #!ifdef CAPTURE_NODE
 #!ifdef CAPTURE_NODE
 loadmodule "siptrace.so"
 loadmodule "siptrace.so"
 #!endif
 #!endif
@@ -146,29 +154,31 @@ loadmodule "siptrace.so"
 loadmodule "debugger.so"
 loadmodule "debugger.so"
 #!endif
 #!endif
 
 
-#!ifdef WITH_DIALPLAN
-loadmodule "db_text.so"
-loadmodule "dialplan.so"
+# ----------------- setting module-specific parameters ---------------
+#!ifdef DB_URL2
+# ----- db_cluster params -----
+modparam("db_cluster", "connection", DB_URL)
+modparam("db_cluster", "connection", DB_URL2)
+modparam("db_cluster", "cluster", "cluster1=>con1=2s2s;con2=1s1s")
+#!endif
+
+# ----- presence params -----
+#!ifdef DB_URL
+#!ifdef DB_URL2
+modparam("presence", "db_url", "cluster://cluster1")
+#!else
+modparam("presence", "db_url", DB_URL)
+#!endif
+#modparam("presence", "fallback2db", 1)
+modparam("presence", "db_update_period", 20)
 #!endif
 #!endif
 
 
-# ----------------- setting module-specific parameters ---------------
 # ----- mi_fifo params -----
 # ----- mi_fifo params -----
 modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
 modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
 modparam("mi_fifo", "fifo_mode", 0666)
 modparam("mi_fifo", "fifo_mode", 0666)
 modparam("mi_fifo", "fifo_user", "kamailio")
 modparam("mi_fifo", "fifo_user", "kamailio")
 modparam("mi_fifo", "fifo_group", "kamailio")
 modparam("mi_fifo", "fifo_group", "kamailio")
 
 
-#!ifdef WITH_DIALPLAN
-# ----- db_text params -----
-# Non-Caching-Mode, Caching is done by the dialplan module
-modparam("db_text", "db_mode", 1)
-
-# ----- dialplan params -----
-# Comment the following line to enable realm routing
-# Database files can be found in CFG_DIR/db (e.g. /etc/kamailio/db/)
-modparam("dialplan","db_url", "text:///etc/kamailio/db/")
-#!endif
-
 # ----- mi_fifo params -----
 # ----- mi_fifo params -----
 modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
 modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
 modparam("mi_fifo", "fifo_mode", 0666)
 modparam("mi_fifo", "fifo_mode", 0666)
@@ -183,7 +193,7 @@ modparam("tm", "fr_timer", 10000)
 # default invite retransmission timeout after 1xx: 120sec
 # default invite retransmission timeout after 1xx: 120sec
 modparam("tm", "fr_inv_timer", 120000)
 modparam("tm", "fr_inv_timer", 120000)
 # Don't reply automatically with "100 Trying"
 # Don't reply automatically with "100 Trying"
-modparam("tm", "auto_inv_100", 1)
+modparam("tm", "auto_inv_100", 0)
 
 
 # ----- rr params -----
 # ----- rr params -----
 # add value to ;lr param to cope with most of the UAs
 # add value to ;lr param to cope with most of the UAs
@@ -196,9 +206,23 @@ modparam("rr", "add_username", 1)
 modparam("rr", "custom_user_avp", "$avp(RR_CUSTOM_USER_AVP)")
 modparam("rr", "custom_user_avp", "$avp(RR_CUSTOM_USER_AVP)")
 
 
 # -- usrloc params --
 # -- usrloc params --
-modparam("ims_usrloc_scscf", "enable_debug_file", 1)
-modparam("ims_usrloc_scscf", "usrloc_debug_file", "/var/log/usrloc_debug")
+modparam("ims_usrloc_scscf", "enable_debug_file", 0)
 modparam("ims_usrloc_scscf", "matching_mode", 0)
 modparam("ims_usrloc_scscf", "matching_mode", 0)
+modparam("ims_registrar_scscf", "max_contacts", 5);
+#!ifdef DB_URL
+#!ifdef DB_URL2
+modparam("ims_usrloc_scscf", "db_url", "cluster://cluster1")
+#!else
+modparam("ims_usrloc_scscf", "db_url", DB_URL)
+#!endif
+modparam("ims_usrloc_scscf", "db_mode", 1)
+#!endif
+modparam("ims_registrar_scscf", "default_expires",  604800)
+modparam("ims_registrar_scscf", "min_expires", 3600)
+modparam("ims_registrar_scscf", "max_expires",  604800)
+modparam("ims_registrar_scscf", "subscription_default_expires", 654800)
+modparam("ims_registrar_scscf", "subscription_min_expires", 3700)
+modparam("ims_registrar_scscf", "subscription_max_expires", 605800)
 
 
 # -- CDP params --
 # -- CDP params --
 modparam("cdp","config_file","/etc/kamailio/scscf.xml")
 modparam("cdp","config_file","/etc/kamailio/scscf.xml")
@@ -244,16 +268,10 @@ modparam("ims_auth", "av_check_only_impu", 1)
 modparam("ims_registrar_scscf", "default_expires", 60)
 modparam("ims_registrar_scscf", "default_expires", 60)
 modparam("ims_registrar_scscf", "min_expires", 60)
 modparam("ims_registrar_scscf", "min_expires", 60)
 modparam("ims_registrar_scscf", "max_expires", 60)
 modparam("ims_registrar_scscf", "max_expires", 60)
-modparam("ims_registrar_scscf", "subscription_default_expires", 80)
-modparam("ims_registrar_scscf", "subscription_min_expires", 80)
-modparam("ims_registrar_scscf", "subscription_max_expires", 80)
 #!else
 #!else
 modparam("ims_registrar_scscf", "default_expires",  604800)
 modparam("ims_registrar_scscf", "default_expires",  604800)
 modparam("ims_registrar_scscf", "min_expires", 3600)
 modparam("ims_registrar_scscf", "min_expires", 3600)
 modparam("ims_registrar_scscf", "max_expires",  604800)
 modparam("ims_registrar_scscf", "max_expires",  604800)
-modparam("ims_registrar_scscf", "subscription_default_expires", 654800)
-modparam("ims_registrar_scscf", "subscription_min_expires", 3700)
-modparam("ims_registrar_scscf", "subscription_max_expires", 605800)
 #!endif
 #!endif
 modparam("ims_registrar_scscf", "use_path", 1)
 modparam("ims_registrar_scscf", "use_path", 1)
 modparam("ims_registrar_scscf", "support_wildcardPSI",1)
 modparam("ims_registrar_scscf", "support_wildcardPSI",1)
@@ -266,14 +284,22 @@ modparam("ims_isc", "my_uri", HOSTNAME)
 
 
 #!ifdef WITH_RO
 #!ifdef WITH_RO
 # ----- ims_diameter_ro params -----
 # ----- ims_diameter_ro params -----
-modparam("ims_diameter_ro", "ro_origin_host", HOSTNAME);
+modparam("ims_charging", "origin_host", HOSTNAME);
+modparam("ims_charging", "origin_realm", NETWORKNAME);
 #!ifdef RO_FORCED_PEER
 #!ifdef RO_FORCED_PEER
-modparam("ims_diameter_ro", "ro_forced_peer", RO_FORCED_PEER);
+modparam("ims_charging", "ro_forced_peer", RO_FORCED_PEER);
 #!endif
 #!endif
-modparam("ims_diameter_ro", "ro_dest_realm", NETWORKNAME);
+modparam("ims_charging", "destination_host", RO_DESTINATION);
+modparam("ims_charging", "destination_realm", NETWORKNAME);
+
+modparam("ims_charging","service_context_id_root", RO_ROOT);
+modparam("ims_charging","service_context_id_ext", RO_EXT);
+modparam("ims_charging","service_context_id_mnc", RO_MNC);
+modparam("ims_charging","service_context_id_mcc", RO_MCC);
+modparam("ims_charging","service_context_id_release", RO_RELEASE);
 
 
-modparam("ims_diameter_ro","interim_request_credits",30);
-modparam("ims_diameter_ro","timer_buffer",5);
+modparam("ims_charging","interim_update_credits",30);
+modparam("ims_charging","timer_buffer",5);
 #!endif
 #!endif
 
 
 # ----- enum params -----
 # ----- enum params -----
@@ -302,9 +328,9 @@ modparam("dispatcher", "ds_probing_mode", 1)
 # - processing of any incoming SIP request starts with this route
 # - processing of any incoming SIP request starts with this route
 
 
 route {
 route {
-##!ifdef WITH_DEBUG
+#!ifdef WITH_DEBUG
 	xlog("L_ERR", "$rm ($fu ($si:$sp) to $tu, $ci)\n");
 	xlog("L_ERR", "$rm ($fu ($si:$sp) to $tu, $ci)\n");
-##!endif
+#!endif
 
 
 	# per request initial checks
 	# per request initial checks
 	route(REQINIT);
 	route(REQINIT);
@@ -365,7 +391,7 @@ route {
 		# Terminating
 		# Terminating
 		if (uri=~"sip:(.*)@"+NETWORKNAME_ESC +"(.*)" || uri=~"tel:.*") {
 		if (uri=~"sip:(.*)@"+NETWORKNAME_ESC +"(.*)" || uri=~"tel:.*") {
 			if (!term_impu_registered("location")) {
 			if (!term_impu_registered("location")) {
-				xlog("L_ERR", "We need to do an UNREG server SAR assignemnt");
+				xlog("L_DBG", "We need to do an UNREG server SAR assignemnt");
                                 assign_server_unreg("UNREG_SAR_REPLY", "location", "term");
                                 assign_server_unreg("UNREG_SAR_REPLY", "location", "term");
                                 exit;
                                 exit;
 		        }
 		        }
@@ -437,37 +463,42 @@ route[REQINIT] {
 	if (t_lookup_request()) {
 	if (t_lookup_request()) {
 		exit;
 		exit;
 	}
 	}
+	if (is_method("INVITE")) {
+		send_reply("100", "Trying");
+	}
+
 }
 }
 
 
+
 ######################################################################
 ######################################################################
 # Publish route
 # Publish route
 ######################################################################
 ######################################################################
 route[PUBLISH]
 route[PUBLISH]
 {
 {
-        if (!t_newtran()) {
-                #absorb retransmissions
-                sl_reply("500","Could not create transaction");
-                exit;
-        }
+	if (!t_newtran()) {
+		#absorb retransmissions
+		sl_reply("500","Could not create transaction");
+		exit;
+	}
 
 
-        if (can_publish_reg("location")){
-                $var(ret)= publish_reg("location");        
-                switch ($var(ret)){
-                        case 1: #success
-                                xlog("L_DBG", "Publish reg successful");
-                                break;
-                        case -1: #failure
-                                xlog("L_ERR", "Publish reg failure - sending 500 Error now\n");
-                                t_reply("500","Server Error publishing subscription");
-                                break;
-                        default:
-                                xlog("L_ERR", "Unknown return code from publish reg event alue is [$var(ret)]\n");
-                                break;
-                }
-        } else {
-                t_reply("403","Forbidden to PUBLISH");
-                exit;
-        }
+	if (can_publish_reg("location")) {
+		$var(ret)= publish_reg("location");        
+		switch ($var(ret)){
+			case 1: #success
+				xlog("L_DBG", "Publish reg successful");
+				break;
+			case -1: #failure
+				xlog("L_ERR", "Publish reg failure - sending 500 Error now\n");
+				t_reply("500","Server Error publishing subscription");
+				break;
+			default:
+				xlog("L_ERR", "Unknown return code from publish reg event alue is [$var(ret)]\n");
+				break;
+		}
+	} else {
+		t_reply("403","Forbidden to PUBLISH");
+		exit;
+	}
 }
 }
 
 
 ######################################################################
 ######################################################################
@@ -498,19 +529,19 @@ route[SUBSCRIBE]
 
 
         $var(ret)= subscribe_to_reg("location");        
         $var(ret)= subscribe_to_reg("location");        
         switch ($var(ret)){
         switch ($var(ret)){
-        case 1: #success
-                xlog("L_DBG", "Subscribe to reg successful");
-                break;
-        case -1: #failure
-                xlog("L_ERR", "Subscribe to reg failure - sending 500 Error now\n");
-                t_reply("500","Server Error saving subscription");
-                break;
-        case -2: #error
-                xlog("L_ERR", "Subscribe to reg error sending notify - 200 OK so subscription already sent\n");
-                break;
-        default:
-                xlog("L_ERR", "Unknown return code from subscribe to reg event alue is [$var(ret)]\n");
-                break;
+		case 1: #success
+		        xlog("L_DBG", "Subscribe to reg successful");
+		        break;
+		case -1: #failure
+		        xlog("L_ERR", "Subscribe to reg failure - sending 500 Error now\n");
+		        t_reply("500","Server Error saving subscription");
+		        break;
+		case -2: #error
+		        xlog("L_ERR", "Subscribe to reg error sending notify - 200 OK so subscription already sent\n");
+		        break;
+		default:
+		        xlog("L_ERR", "Unknown return code from subscribe to reg event alue is [$var(ret)]\n");
+		        break;
         }
         }
 }
 }
 
 
@@ -559,7 +590,6 @@ route[SUBSCRIBE_UNREG_SAR_REPLY]
         exit;
         exit;
 }
 }
 
 
-
 ######################################################################
 ######################################################################
 # XMLRPC routing
 # XMLRPC routing
 ######################################################################
 ######################################################################
@@ -718,46 +748,77 @@ route[orig]
 		$avp(RR_CUSTOM_USER_AVP)="mo";
 		$avp(RR_CUSTOM_USER_AVP)="mo";
         	record_route();    
         	record_route();    
 	}
 	}
+	
+	# Start new transaction:
+	t_newtran();
 
 
-	if (is_method("INVITE|MESSAGE")) {
-                append_hf("P-Called-Party-ID: <$ruri>\r\n");
-        }
+	# check if dialog saved as fwded to AS
+	if (isc_match_filter("orig", "location")) {
+		t_on_failure("isc_orig_failure");       
+		#xlog("Orig - msg was fwded to AS\n");
+		exit;
+	}
+
+	if (!isc_from_as("orig")) {
+		remove_hf("P-Asserted-Identity");
+		append_hf("P-Asserted-Identity: <sip:$fU@$fd>\r\n");
+	}
 
 
 #!ifdef WITH_RO
 #!ifdef WITH_RO
 	# before we allow call - lets check credit
 	# before we allow call - lets check credit
 	if (is_method("INVITE")) {
 	if (is_method("INVITE")) {
 		xlog("L_DBG","Sending initial CCR Request for call\n");
 		xlog("L_DBG","Sending initial CCR Request for call\n");
-		$var(cc_ret) = Ro_send_ccr(10);
+		$var(cc_ret) = Ro_CCR("CHARGING_CCR_REPLY", "orig", "SCUR", "", "30", "location");
 		if ($var(cc_ret) < 0) {
 		if ($var(cc_ret) < 0) {
-			xlog("L_DBG","CCR Request failure\n");
+			xlog("L_ERR","CCR Request failure\n");
 			sl_send_reply("402","Payment required");
 			sl_send_reply("402","Payment required");
 			exit;
 			exit;
 		}
 		}
 		xlog("L_DBG","CCR Request success\n");    
 		xlog("L_DBG","CCR Request success\n");    
-	}
-#!endif
-	# check if dialog saved as fwded to AS
-	if (isc_match_filter("orig", "location")) {
-		t_on_failure("isc_orig_failure");       
-		xlog("Orig - msg was fwded to AS\n");
 		exit;
 		exit;
 	}
 	}
+#!endif
+	route(Finalize_Orig);
+}
 
 
-	#if (!isc_from_as("orig")) {
-	#	remove_hf("P-Asserted-Identity");
-	#	append_hf("P-Asserted-Identity: <sip:$fU@$fd>\r\n");
-	#}
+route[Finalize_Orig]
+{
+        # Check for PSTN destinations:
+        if (is_method("INVITE")) {
+                route(PSTN_handling);
+        }
 
 
-	# Check for PSTN destinations:
-	if (is_method("INVITE")) {
-		route(PSTN_handling);	
-	}
+        t_on_reply("orig_reply");
 
 
-	t_on_reply("orig_reply");
+        t_relay();
+}
 
 
-	t_relay();
+route[CHARGING_CCR_REPLY]
+{
+        xlog("L_DBG","saa_return code is $avp(s:cca_return_code)\n");
+
+        switch ($avp(s:cca_return_code)){
+            case 1: #success
+                xlog("L_DBG", "CCR success - will route message\n");
+		route(Finalize_Orig);
+                break;
+            case -1: #failure
+                xlog("L_ERR", "CCR failure - error response sent from module\n");
+		send_reply("402","Payment required");
+                break;
+            case -2: #error
+                xlog("L_ERR", "CCR error - error response sent from module\n");
+		send_reply("500", "Charging Error");
+                break;
+            default:
+                xlog("L_ERR", "Unknown return code from CCR: [$avp(s:cca_return_code)] \n");
+		send_reply("500", "Charging Error");
+                break;
+        }
+        exit;
 }
 }
 
 
+
 ######################################################################
 ######################################################################
 # Replies to the Initial Requests
 # Replies to the Initial Requests
 ######################################################################
 ######################################################################
@@ -766,18 +827,6 @@ onreply_route[orig_reply]
 	xlog("L_DBG","Orig reply\n");
 	xlog("L_DBG","Orig reply\n");
 
 
 	route(apply_privacy);
 	route(apply_privacy);
-#!ifdef WITH_RO
-	# before we allow call - lets check credit
-	if (t_check_status("183")){
-		xlog("L_DBG","Sending initial CCR Request for call\n");
-        	$var(cc_ret) = Ro_send_ccr(10);  commented by Jason 5/4/2012
-        	if ($var(cc_ret) < 0) {
-			xlog("L_DBG","CCR Request failure\n");
-			dlg_terminate("all", "Sorry no funds available");
-		}
-		xlog("L_DBG", "IMS: Received 183 inside orig_initial_reply\n");
-	}
-#!endif
 	break;
 	break;
 }
 }
 
 
@@ -930,14 +979,6 @@ route[PSTN_handling]
 	if (!tel2sip("$ru", "$fd", "$ru"))
 	if (!tel2sip("$ru", "$fd", "$ru"))
 		xlog("L_WARN","Failed to convert $ru to a sip:-URI - M=$rm R=$ru F=$fu T=$tu IP=$si:$sp ID=$ci\n\n");
 		xlog("L_WARN","Failed to convert $ru to a sip:-URI - M=$rm R=$ru F=$fu T=$tu IP=$si:$sp ID=$ci\n\n");
 
 
-#!ifdef WITH_DIALPLAN
-	# Check for numeric Request-Username
-	if ($rU =~ "[0-9]+") {
-		if (dp_translate("1")) {
-			xlog("L_INFO", "R-URI rewritten to $rU - M=$rm R=$ru F=$fu T=$tu IP=$si:$sp ID=$ci\n");
-		}			
-	}
-#!endif
 	if ($rU =~ "\+[0-9]+") {
 	if ($rU =~ "\+[0-9]+") {
 		# Now let's check, if the number can be found in ENUM:
 		# Now let's check, if the number can be found in ENUM:
 		if(!enum_query()) {
 		if(!enum_query()) {
@@ -953,13 +994,14 @@ route[PSTN_handling]
 ######################################################################
 ######################################################################
 route[PSTN]
 route[PSTN]
 {
 {
-	t_on_failure("PSTN_failure");
-	# Relay the request towards the PSTN-Gateway:
-	if (!ds_select_dst("1", "4")) {
+	if (!ds_select_domain("1", "4")) {
+		xlog("L_WARN","No PSTN-Gateways available - M=$rm R=$ru F=$fu T=$tu IP=$si:$sp ID=$ci\n\n");
 		send_reply("503", "Service not available");
 		send_reply("503", "Service not available");
 		exit;
 		exit;
 	}
 	}
 	# Relay the request:
 	# Relay the request:
+	t_on_failure("PSTN_failure");
+
 	t_relay();
 	t_relay();
 	exit;
 	exit;
 }
 }
@@ -972,7 +1014,7 @@ failure_route[PSTN_failure] {
 	# - get a local generated "408"
 	# - get a local generated "408"
 	# - receive a 5xx or 6xx reply from the proxy.
 	# - receive a 5xx or 6xx reply from the proxy.
 	if (t_branch_timeout() || t_check_status("[5-6]..")) {
 	if (t_branch_timeout() || t_check_status("[5-6]..")) {
-		if (ds_next_dst()) {
+		if (ds_next_domain()) {
 			# Do Failover in case problems:		
 			# Do Failover in case problems:		
 			t_on_failure("PSTN_failure");
 			t_on_failure("PSTN_failure");
 			t_relay();
 			t_relay();
@@ -984,3 +1026,4 @@ failure_route[PSTN_failure] {
 		exit;
 		exit;
 	}
 	}
 }
 }
+

+ 27 - 19
examples/scscf/scscf.cfg

@@ -1,20 +1,24 @@
 # IP-Adress for incoming SIP-Traffic, in the following format:
 # IP-Adress for incoming SIP-Traffic, in the following format:
-#!define NETWORK_INTERFACE "192.168.0.3"
+listen=udp:141.0.21.99:5060
+listen=tcp:192.168.2.1:5060
 
 
-# Port, where we listen to Traffic
-#!define PORT 5060
+#!define NETWORKNAME "ims.imscore.org"
+#!define NETWORKNAME_ESC "ims\.imscore\.org"
+#!define HOSTNAME "scscf-1.imscore.org"
+#!define URI "sip:scscf-1.imscore.org:5060"
+#!define HOSTNAME_ESC "scscf-1\.imscore\.org"
 
 
-#!define NETWORKNAME "kamailio-ims.org"
-#!define NETWORKNAME_ESC "kamailio-ims\.org"
-#!define HOSTNAME "scscf.kamailio-ims.org"
-#!define URI "sip:scscf.kamailio-ims.org:5060"
-#!define HOSTNAME_ESC "scscf\.kamailio-ims\.org"
+alias=scscf-1.imscore.org
 
 
 # ENUM-Server to query:
 # ENUM-Server to query:
-#!define ENUM_SUFFIX "ng-voice.com."
+#!define ENUM_SUFFIX "imscore.org."
 
 
 # SIP-Address of capturing node, if not set, capturing is disabled.
 # SIP-Address of capturing node, if not set, capturing is disabled.
-##!define CAPTURE_NODE "sip:10.0.6.1"
+#!define CAPTURE_NODE "sip:10.1.8.55"
+
+# Connection URL for the database:
+#!define DB_URL "con1=>mysql://scscf:[email protected]/scscf"
+#!define DB_URL2 "con2=>mysql://scscf:[email protected]/scscf"
 
 
 # Select Authorization Algorhithm:
 # Select Authorization Algorhithm:
 ##!define REG_AUTH_DEFAULT_ALG "AKAv1-MD5"
 ##!define REG_AUTH_DEFAULT_ALG "AKAv1-MD5"
@@ -29,10 +33,19 @@
 # Number of TCP Processes
 # Number of TCP Processes
 #!define TCP_PROCESSES 3
 #!define TCP_PROCESSES 3
 
 
-# Allowed IPs for XML-RPC-Queries
+##!define RO_FORCED_PEER "[email protected]"
+#!define RO_DESTINATION "hssocs.imscore.org"
+#!define RO_ROOT "[email protected]"
+#!define RO_EXT "ext"
+#!define RO_MNC "07"
+#!define RO_MCC "262"
+#(see https://en.wikipedia.org/wiki/Mobile_country_code_(MCC))
+#!define RO_RELEASE "8"
+# See http://tools.ietf.org/html/rfc4006#section-4.1.2 for the definition of the Service-Context
+
 #!define XMLRPC_WHITELIST_1 "127.0.0.1"
 #!define XMLRPC_WHITELIST_1 "127.0.0.1"
-##!define XMLRPC_WHITELIST_2 "127.0.0.1"
-##!define XMLRPC_WHITELIST_3 "127.0.0.1"
+#!define XMLRPC_WHITELIST_2 "10.1.8.55"
+#!define XMLRPC_WHITELIST_3 "192.168.2.1"
 
 
 # Several features can be enabled using '#!define WITH_FEATURE' directives:
 # Several features can be enabled using '#!define WITH_FEATURE' directives:
 #
 #
@@ -46,10 +59,6 @@
 #     - define WITH_XMLRPC
 #     - define WITH_XMLRPC
 #     - this will automagically enable TCP
 #     - this will automagically enable TCP
 #
 #
-# *** To enable basic dialplan support:
-#     - define WITH_DIALPLAN
-#     - adjust dialplan in the database
-#
 # *** To enable the Ro-Interface:
 # *** To enable the Ro-Interface:
 #     - Configure Ro-Diameter-Interface in scscf.xml
 #     - Configure Ro-Diameter-Interface in scscf.xml
 #     - define WITH_RO
 #     - define WITH_RO
@@ -60,6 +69,5 @@
 # Enabled Features for this host:
 # Enabled Features for this host:
 ##!define WITH_DEBUG
 ##!define WITH_DEBUG
 #!define WITH_XMLRPC
 #!define WITH_XMLRPC
-##!define WITH_RO
-#!define WITH_DIALPLAN
+#!define WITH_RO
 
 

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov