[Serusers] ISDNgw + CAPI
Atle Samuelsen
clona at camaro.no
Fri Mar 19 10:28:07 CET 2004
* F.S.Salloum <ssal at intracom.gr> [040319 09:54]:
> Dear all,
>
> Has anybody installed ser with sems and isdngw?
I'v installed it, works like a dream..
>
> I checked the website and i found out a conf file (berlios)
> but has problems when it calls the vm module.
>
Could you send the log file with the problems ? wihtout knowing I would
check the fifo rights and that sems is reading from the ser fifo .. and
that ser is reading from sems fifo
> The CAPI works fine with Asterisk PBX, but i prefer ser in order
> to develop more advanced hybrid services (HOLD, TRANSFER etc).
Remember to put in the capinumbers that you wound want it to answer at.
>
> Attached you can find the conf files.
>
>
> Thanks in advance
> Sotiris
>
>
>
>
>
>
> # $Id: isdngw.conf.sample,v 1.5 2003/11/16 19:24:56 ullstar Exp $
> #
> #
> # Copyright (C) 2003 Ulrich Abend
> #
> # This file is part of isdngw, a free isdn gateway plugin
> # for sems, a free SIP media server.
> #
> # isdngw is free software; you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> # the Free Software Foundation; either version 2 of the License, or
> # (at your option) any later version
> #
> # For a license to use the ser software under conditions
> # other than those described here, or to purchase support for this
> # software, please contact iptel.org by e-mail at the following addresses:
> # info at iptel.org
> #
> # isdngw is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> # GNU General Public License for more details.
> #
> # You should have received a copy of the GNU General Public License
> # along with this program; if not, write to the Free Software
> # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> #
> #
> # isdngw.conf.sample
> #
> # ISDN Gateway Application Module for 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=value1, value2 # i like this option
> #
> # this file must be referenced in the global sems configuration file:
> #
> # sems.conf:
> #
> # isdngw module configuration (external file)
> # config.isdngw=/etc/isdngw.conf
> #
>
>
> ###############################################################################
> # backend selection: #
> # #
> # isdngw supports the classical isdn4linux standard by accessing the #
> # /dev/ttyI* devices as well as CAPI 2.0 based drivers. You can mix both #
> # technologies, e.g. using your classic fritzCard PCI with isdn4linux drivers #
> # and your C4 card with CAPI. #
> # #
> ###############################################################################
>
> # required parameter: enablei4l=< yes | no >
> #
> # enable I4L support?
> # For isdn4linux support, you need
> # - the linux kernel drivers for i4l loaded
> # - read/write permissions for sems user on (some) /dev/ttyI* devices
> # - you can (for whatever reason) use the "capidrv" kernel module
> # to use CAPI based cards with I4L (this is not recommended though)
> enablei4l=no
>
> # required parameter: enablecapi=< yes | no >
> #
> # enable CAPI20 support?
> # For CAPI support you need
> # - a sems compiled with CAPI support (-DUSE_CAPI20 uncommented in Makefile)
> # - the capi20 libraries from the isdn4k package properly installed
> # - the kernel capi drivers loaded (run capiinfo to check!)
> # CAPI20 support is experimental, tested with AVM FritzCard PCIV2 and C4
> enablecapi=yes
>
>
> ###############################################################################
> # i4l backend configuration: #
> # #
> # If you enabled isdn4linux backend support above, you can configure the #
> # according parameters here. #
> # Backend selection for in- and outgoing calls is done according to your #
> # configuration. If a call matches the configuration of multiple backends #
> # the device selection is non-deterministic. #
> # #
> ###############################################################################
>
> # optional parameter: i4l_numoutdevices=<number of devices to be used>
> #
> # - specifies how many ttyI* devices to use for outgoing telephony calls
> # - devices must be fully accessible by the vm process' user
> # - this number also specified the maximum number of simultaneous
> # outgoing phone calls (if not otherwise restricted)
> # - you must specify exactly one parameter of i4l_numoutdevices and i4l_outdevices, not both
> i4l_numoutdevices=5
>
> # optional parameter: i4l_outdevices=<dev1>, <dev2>, <dev3>, ...
> #
> # - specifies which ttyI* devices to use for outgoing telephony calls
> # - devices must be fully accessible by the vm process' user
> # - the number of devices listed is the maximum of simultaneous
> # outgoing phone calls (if not otherwise restricted)
> # - you may not set i4l_numoutdevices if this parameter is set
> # - e.g. i4l_outdevices=/dev/ttyI10, /dev/ttyI11, /dev/ttyI12
> i4l_outdevices=
>
> # optional parameter: i4l_numindevices=<number of devices used>
> #
> # - specifies how many ttyI* devices to use for incoming telephony calls
> # - devices must be fully accessible by the sems process' user
> # - the number of devices listed is also the maximum of simultaneous
> # incoming phone calls (if not otherwise restricted)
> # - you may specify only i4l_numindevices OR i4l_indevices, not both.
> i4l_numindevices=5
>
> # optional parameter: i4l_indevices=<dev1>, <dev2>, <dev3>, ...
> #
> # - specifies which ttyI* devices to use for incoming telephony calls
> # - devices must be fully accessible by the vm process' user
> # - the number of devices listed is the maximum of simultaneous
> # incoming phone calls (if not otherwise restricted)
> # - you may specify only i4l_numindevices OR i4l_indevices, not both.
> # - e.g. i4l_indevices=/dev/ttyI13, /dev/ttyI14
> i4l_indevices=
>
> # optional parameter: i4l_lockdir=/where/to/store/lockfiles
> #
> # - specifies the directory where to put the lockfiles
> # - may be useful if not run as root
> # - default: i4l_lockdir=/var/lock
> i4l_lockdir=/var/lock
>
> # optional parameter: i4l_inmsn=<msn1>, <msn2>, <msn3>, ...
> #
> # - specifies the all msn's the i4l backend listens for calls on
> # - a call is only accepted if the according SIP call is successfully placed
> # - other ISDN equipment *may* also listen on this numbers, the
> # first to accept the call is the lucky one then
> # - IMPORTANT: no other isdn4linux application may bind to any of that numbers
> # - wildcards may be specified here like 81462* or *
> # - example: i4l_inmsn=12345, 54321*
> i4l_inmsn=*
>
> # optional parameter: i4l_mapping=<number1>, <number2>, ...
> #
> # - specifies what numbers are called via the isdn4linux backend
> # - a call is only placed to the PSTN network if it matches one mapping (i4l
> # or capi controller mapping below)
> # - wildcards may be specified here like 81462* or *
> # - A "*" means that all calls are allowed and get routed via i4l
> i4l_mapping=*
>
> # optional parameter: i4l_numchannel=<number of available b-channels>
> #
> # - specifies how many B-channels should be used with isdn4linux backend
> # - isdngw checks for availability of a channel before trying to route
> # the call, if another backend allows a connection and i4l has no
> # more channels available, other backend will be used
> # - the value does not have to be the real number of channels, you can
> # limit the max number of simulatenous connections with this parameter
> # - if this parameter is omitted, isdngw tries to detect this number
> # by accessing /dev/isdninfo, this fails if capidrv is used or the
> # user running sems does not have read permissions on this device
> i4l_numchannel=
>
>
> ###############################################################################
> # CAPI 2.0 backend configuration: #
> # #
> # If you enabled capi backend support above, you can configure the #
> # according parameters here. #
> # Backend selection for in- and outgoing calls is done according to your #
> # configuration. If a call matches the configuration of multiple backends #
> # the device selection is non-deterministic. #
> # #
> ###############################################################################
>
> # optional parameter: capi_inmsn=<msn1>, <msn2>, <msn3>, ...
> #
> # - specifies the all msn's the capi backend listens for calls on, this
> # setting is per controller based
> # - cards with multiple interfaces supply multiple
> # (virtual) controllers (e.g. AVM c4 supplies controller 1 to 4)
> # - you can use the capiinfo utility to see what controllers are available
> # - a call is only accepted if the according SIP call is successfully placed
> # - other ISDN equipment *may* also listen on this numbers, the
> # first to accept the call is the lucky one then
> # - wildcards may be specified here like 81462* or *
> # - isdngw currently supports up to 8 controllers
> # - example: capi_inmsn=12345, 54321*
> capi_1_inmsn=*
> capi_2_inmsn=*
> capi_3_inmsn=*
> capi_4_inmsn=*
> capi_5_inmsn=*
> capi_6_inmsn=*
> capi_7_inmsn=*
> capi_8_inmsn=*
>
> # optional parameter: capi_<ctrlnumber>_mapping=<number1>, <number2>, ...
> #
> # - specifies what numbers are called via each capi based controller backend
> # - this parameter must be specified for every controller to be used
> # (first controller: "capi_1_mapping" second controller: "capi_2_mapping"
> # - a call is only placed to the PSTN network if it matches one mapping (i4l
> # or capi controller mapping below)
> # - wildcards may be specified here like 81462* or *
> # - A "*" means that all calls are allowed and get routed via the specified
> # capi controller
> # - if multiple expressions match the longest wins, e.g. if controller 1
> # handles 12345* and controller 2 handles 1*, controller 1 gets the calla
> # to 1234567
> # - if you use the same expression for two or more controllers, the lower
> # controller number is tried first, if no line is available the other(s)
> # is tried. In case of other errors, the call is not tried more than once.
> # - isdngw currently supports up to 8 controllers
> # - example:
> # capi_1_mapping=0*
> # capi_2_mapping=8*, 9*
> # capi_3_mapping=1*, 2*, 3*, 4*, 5*, 6*, 7*
> capi_1_mapping=*
> capi_2_mapping=*
> capi_3_mapping=*
> capi_4_mapping=*
> capi_5_mapping=*
> capi_6_mapping=*
> capi_7_mapping=*
> capi_8_mapping=*
>
> # optional parameter: capi_<ctrlnumber>_numchannel=<number of available channels>
> #
> # - specifies how many B-channels should be used with each CAPI controller
> # - the value does not have to be the real number of channels, you can
> # limit the max number of simulatenous connections with this parameter
> # - if this parameter is omitted, isdngw detects the number of available
> # channels automatically
> # - example:
> # capi_1_numchannel=1
> # capi_2_numchannel=1
> # capi_3_numchannel=
> capi_1_numchannel=
> capi_2_numchannel=
> capi_3_numchannel=
> capi_4_numchannel=
> capi_5_numchannel=
> capi_6_numchannel=
> capi_7_numchannel=
> capi_8_numchannel=
>
>
> ###############################################################################
> # SIP configuration: #
> # #
> # Configure all SIP related settings here. #
> # #
> ###############################################################################
>
> # optional parameter: msnsipcaller=< yes | no >
> #
> # - specifies if the SIP caller username should be used as
> # outgoing msn (works only if SIP caller userpart is e164 style number)
> # - defaults to yes
> msnsipcaller=no
>
> # optional parameter: outmsn=<msn>
> #
> # - specifies the default msn for outgoing calls
> # - if msnsipcallee is set to "yes" this number is only used,
> # if SIP caller userpart is not e164 compliant
> # - if 0 is used, the number used depends on the configuration
> # of the PSTN telephony system
> defaultmsn=0
>
> # required parameter: callerdomain=<domainname>
> #
> # - specifies the domainname that is used as initiator of the SIP calls
> # - the caller address is composed as follows:
> # <calling-number>@<callerdomain>
> #callerdomain=mycaller.domain.com
> #SSAL_ADITION
> callerdomain=146.124.2.235
>
> # required parameter: calleedomain=<domainname>
> #
> # - specifies the domainname that is used as destination of the SIP calls
> # - the callee address is composed as follows:
> # <called-number>@<calleedomain>
> #calleedomain=mycallee.domain.com
> calleedomain=146.124.2.235
>
>
> ###############################################################################
> # misc configuration: #
> # #
> # Other configuration options follow. #
> # #
> ###############################################################################
>
> # optional parameter: clip=< yes | no >
> #
> # - specifies whether Caller LIne Representation should be used
> # - no means hide caller number, yes means show caller number
> # - this works for CAPI but not for i4l, behaviour of i4l depends on
> # the configuration of the telephony system
> # - defaults to yes
> clip=
>
> # optional parameter: minnumberlen=<minimum lenght of number>
> #
> # - specifies the minimum number of digits on an outgoing call
> # - shorter numbers are rejected
> # - defaults to 4
> minnumberlen=
>
> # optional parameter: outlogfile=<file>
> #
> # - specifies a log file, where all calls are listed
> # - WARNING: this function is unimplemented yet!
> outlogfile=
>
> # end of file.
>
> # $Id: sems.conf.sample,v 1.1.2.1 2003/08/28 19:13:25 rco Exp $
> #
> # 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=value1, value2 # i like this option
> #
>
> ##################################
> # global parameters #
> ##################################
>
> # optional parameter: fork={yes|no}
> #
> # - specifies if sems should run in daemon mode (background)
> fork=yes
>
> # optional parameter: stderr={yes|no}
> #
> # - debug mode: do not fork and log to stderr
> stderr=no
>
> # optional parameter: loglevel={0|1|2|3}
> #
> # - sets log level (error=0, warning=1, info=2, debug=3)
> loglevel=1
>
> # optional parameter: fifo_name=<filename>
> #
> # - path and file name of our fifo file
> fifo_name=/tmp/am_fifo
>
> # optional parameter: ser_fifo_name=<filename>
> #
> # - path and file name of Ser's fifo file
> ser_fifo_name=/tmp/ser_fifo
>
> # optional parameter: plugin_path=<path>
> #
> # - sets the path to the plug-ins
> # - may be absolute or relative to CWD
> plugin_path=/usr/local/lib/sems/plug-in/
>
>
> ##################################
> # voicemail specific parameters #
> ##################################
>
> # optional parameter: announce_path=<path>
> #
> # - sets the path where announce files are searched for
> announce_path=/usr/local/lib/sems/audio/
>
> # optional parameter: default_announce=<filename>
> #
> # - sets the name of the default announce WAV file
> default_announce=default_en.wav
>
> # optional parameter: max_record=<seconds>
> #
> # - maximum record time
> max_record=30
>
> # optional parameter: smtp_server=<hostname>
> #
> # - sets address of smtp server
> smtp_server=localhost
>
> # optional parameter: smtp_port=<port>
> #
> # - sets port of smtp server
> smtp_port=25
>
>
> ##################################
> # module specific parameters #
> ##################################
>
> # add more module configurations here (inline or external):
> #
> # config.mymodule=<filename>
> # or
> # config.mymodule=inline
> # ...
> # config.mymodule=end
> #isdngw module configuration (external file)
> config.isdngw=/root/ser/isdngw.conf
>
> #
> # $Id: ser-isdngw.conf,v 1.2 2003/09/09 17:48:22 ullstar Exp $
> #
> # isdngw sample config script
> # please direct comments to ullstar at iptel.org
> #
>
> # ----------- global configuration parameters ------------------------
>
> # setup parameters according to your needs. Most people will only have
> # to adjust the listen and alias parameters below.
>
> debug=1 # debug level (cmd line: -dddddddddd)
> fork=yes
>
> log_stderror=no # (cmd line: -E)
> check_via=yes # (cmd. line: -v)
> dns=0 # (cmd. line: -r)
> rev_dns=0 # (cmd. line: -R)
> port=5060
> children=4
> fifo="/tmp/ser_fifo"
>
> # Add the name of your system here
> #listen=yourhostname
> # for more names add alias entries, all that might be used as domain in SIP URI
> #alias=yourhostname.yourdomain.com
> #alias=your.ip.addr.ess
>
>
> # ------------------ module loading ----------------------------------
>
> loadmodule "/usr/local/lib/ser/modules/sl.so"
> loadmodule "/usr/local/lib/ser/modules/tm.so"
> loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
> loadmodule "/usr/local/lib/ser/modules/rr.so"
> loadmodule "/usr/local/lib/ser/modules/textops.so"
> loadmodule "/usr/local/lib/ser/modules/vm.so"
> loadmodule "/usr/local/lib/ser/modules/dbtext.so"
> loadmodule "/usr/local/lib/ser/modules/usrloc.so"
> loadmodule "/usr/local/lib/ser/modules/registrar.so"
>
>
> # ----------------- setting module-specific parameters ---------------
>
> # You may want to define things like databases here. Please refer to
> # the extensive SER documentation for this purpose. Module parameters
> # are always described in the modules README files.
> #
> # For pure isdn gateway functionality only a database is needed, we use
> # a simple textfile for this purpose. Actually this is only neccessary until
> # the vm module is reworked. Simply copy the etc/db directory from the isdngw
> # directory somewhere and specify it in the following statement:
>
> modparam("voicemail", "db_url","/root/ser/db")
>
>
> # ------------------------- request routing logic -------------------
>
> # This section describes how SIP messages are handled.
>
> # workaround needed for some buggy UAs (e.g. MS Messenger)
> modparam("rr", "enable_full_lr", 1)
>
> # The routing is described now:
> route{
>
> # initial sanity checks -- messages with
> # max_forwars==0, or excessively long requests
> if (!mf_process_maxfwd_header("10")) {
> sl_send_reply("483","Too Many Hops");
> break;
> };
>
> # we record-route all messages -- to make sure that
> # subsequent messages will go through our proxy; that's
> # particularly good if upstream and downstream entities
> # use different transport protocol
> record_route();
> # loose-route processing
> loose_route();
>
> # deal with my domain first
> if (uri==myself) {
>
>
> # the following allows for user-agent registration
> # in concerns of the isdn gateway this means:
> # register a SIP phone with <telephonenumber>@<this server name>
> # and configure the isdn gateway to listen on the number specified as
> # the user (<telephonenumber>).
> # Incoming calls are then directed to this user agent
> # Note: This sample configuration does not use a persistent storage, so
> # if you restart SER you have to re-register your SIP client to make this
> # work. Refer to the userloc module's documentation for setting up
> # persistent contact storage.
> if (method=="REGISTER") {
> save("location");
> break;
> };
> if (lookup("location")) {
> if (!t_relay()) {
> sl_reply_error();
> };
> break;
> };
>
> # ############################## #
> # isdngw specific configuration #
> # ############################## #
> if(t_newtran()){
>
> if(method=="INVITE" || method=="BYE" || method=="CANCEL"){
>
> # send a response right at the start to avoid retransmissions
> t_reply("100","Trying -- just wait a minute !");
>
> # isdngw only gets activated on invite requests
> if(method=="INVITE"){
>
> # isdngw feels to be responsible for numeric userparts
> # all numbers followed by @ and anything after it match
> # this expression
> # for example: sip:555123123 at yourdomain.com:5061 matches.
> # The vm command (from module vm) is used to contact the
> # media server and though it the isdngw.
> # /tmp/am_fifo is the fifo filename ued for communications, make
> # shure the permissions are correct and that the same fifo
> # filename is defined in sems.conf.
> if(uri=~"sip:[0-9]+ at .*"){
> if(!vm("/tmp/am_fifo","isdngw")){
> log("could not contact isdngw\n");
> t_reply("500","could not contact isdngw");
> };
> # we dont feel responsible for sip addresses not starting with
> # a number, so send the right error code.
> } else {
> t_reply("404","Not Found");
> };
> # stop routing here, the message is now processed by the media server
> break;
> };
>
> # The following handles the call termination, we must pass these requests
> # to the media server as follows. Again make shure the fifo name and permissions
> # are set correctly (like im sems.conf).
> if((method=="BYE")||(method=="CANCEL")){
> if(!vm("/tmp/am_fifo","bye")){
> log("could not contact the media server\n");
> t_reply("500","could not contact the media server");
> };
> break;
> };
> # other methods than INVITE, BYE and CANCEL are not handled by this SIP Server
> # so we sent an error message
> } else {
> log("ERROR: method not supported\n");
> t_reply("500", "sorry, method not supported");
> };
> } else {
> # for any reason the transaction could not be created, send error code
> log("could not create new transaction\n");
> sl_send_reply("500","could not create new transaction");
> };
> # not uri=myself, this SIP request is not directed to us, simply direct it to its
> # correct destination
> } else {
> if (!t_relay()) {
> sl_reply_error();
> };
> };
> # end of routing.
> }
> _______________________________________________
> Serusers mailing list
> serusers at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
More information about the sr-users
mailing list