Hi!
It looks like I still have to learn a lot to understand ser, so maybe
someone can help me:
Following scenario: IP-IP with reINVITE (call hold). I authenticate all
INVITEs, also reINVITEs.
The call setup works fine:
UA1 Proxy UA2
| -INVITE w/o cred ->| |
| <--- 407 ---- | |
| ---- ACK ---> | |
The ACK is processed and caught by ser automagically without entering
the routing script. I guess this is done by the stateless processing
because of the debug message:
Aug 14 22:34:47 sip1 /usr/sbin/ser[25694]: DEBUG: sl_filter_ACK : local
ACK found -> dropping it!
Then INVITE with credentials:
UA1 Proxy UA2
| --INVITE w cred -> | |
| | ---- INVITE ----> |
<- ...100, 180 ... --
| | <--- 200 OK --- |
| <--- 200 OK ----- | |
| ----- ACK ----> | |
| | ----- ACK ----> |
The ACK will be forwarded correct.
Now the problem: A reINVITE will be sent to the proxy, and the proxy ask
for credentials. This time, the ACK want be catched by ser and enters
the routing script, and therefore will be forwarded to UA2 (which should
not!).
UA1 Proxy UA2
|-reINVITE w/o cred->| |
| <--- 407 ---- | |
| ---- ACK ---> | |
| | ---- ACK ---> |
How can I configure ser to also handle this ACK automagically?
regards,
Klaus
Hi,
I have a problem about 487 retransmit...
After caller get a 18x from ser proxy, we cancel the call, we could see caller UA send a CANCEL message and get a 487 message from proxy.
UA get 487 message then reply a ACK.. but proxy still send next 487 again and again.
We check called party, no such problem, only one 487 received.
Could anyone give me a hint?
best regard
Kaiser
Dear sir/madam,
I am installing the Mediaproxy SER module on the SER but I am afraid I
cannot the follow the procedure closely.
I am trying to locate the "sip_router" directory on the SER. Since I cannot
locate this directory I am not able to carry forward the upcoming steps.
I am just wondering whether you can suggest where the "sip_router" is.
Thanks
Hon Chan
Wavelet Tech
Installation of mediaproxy SER module
-------------------------------------
For CVS:
cd sip_router
cvs update -Pd
#check that you have the modules/mediaproxy directory
make clean # clean old files in case you haven't updated cvs for a long time
make
make install
For stable tree:
copy the directory modules/mediaproxy from development tree
and run a make clean inside it. then recompile the module issuing "make" in
that directory. Copy the module mediaproxy.so to /usr/lib/ser/modules/ser/
For both cases, copy the 2 files listing asymmetric clients from
modules/mediaproxy/config to /etc/ser/
To configure the mediaproxy module in the ser.cfg file please check the
Readme included with the mediaproxy module (available in the SER
modules/mediaproxy directory). Also checkthe example ser.cfg file included
there too.
_________________________________________________________________
Linguaphone : Learning English? Get Japanese lessons for FREE
http://go.msnserver.com/HK/46165.asp
when I try to a call, it appear this problem
and I install ser-0.8.12 and sems(cvs)
I can't find ans_machine in my server.
how to solve it.
thanks.
Aug 14 03:17:12 knuth /usr/local/sbin/ser[19748]: voicemail - initializing
child 8
Aug 14 03:17:12 knuth /usr/local/sbin/ser[19742]: voicemail - initializing
child 6
Aug 14 03:17:12 knuth /usr/local/sbin/ser[19731]: SER: open_uac_fifo: fifo
server up at /tmp/ser_fifo...
Aug 14 03:17:12 knuth /usr/local/sbin/ser[19745]: voicemail - initializing
child 7
Aug 14 03:17:12 knuth /usr/local/sbin/ser[19752]: voicemail - initializing
child -4
Aug 14 03:17:12 knuth /usr/local/sbin/ser[19696]: voicemail - initializing
child 0
Aug 14 03:17:12 knuth /usr/local/sbin/ser[19739]: voicemail - initializing
child 5
Aug 14 03:17:18 knuth /usr/local/sbin/ser[19718]: ERROR: voicemail:
ans_machine deamon is not running !
Aug 14 03:17:18 knuth /usr/local/sbin/ser[19718]: ERROR: voicemail: No such
device or address
Aug 14 03:17:18 knuth /usr/local/sbin/ser[19718]: ERROR: vm_start:
write_to_fifo failed
----
I try to sems -E -D 3
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command t_reply is not available
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must begin with :: ringing
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must begin with :: 00004D3624F6662E
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must have at least 3 chars
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command t_reply is not available
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must have at least 3 chars
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must begin with :: 00004D3624F6662E
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must begin with :: Content-Type: application/sdp
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must begin with :: v=0
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must begin with :: s=session
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must begin with :: t=0 0
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must begin with :: a=rtpmap:0 /^H
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command t_reply is not available
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must begin with :: could not send response.
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must begin with :: 00004D3624F6662E
Aug 14 03:20:13 knuth /usr/local/sbin/ser[19731]: ERROR: fifo_server:
command must have at least 3 chars
here is my and ser.cfg sems.conf
----
debug=3
fork=yes
log_stderror=no
check_via=no
dns=no
rev_dns=no
port=5060
children=4
fifo="/tmp/ser_fifo"
loadmodule "/usr/local/lib/ser/modules/mysql.so"
loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/vm.so"
loadmodule "/usr/local/lib/ser/modules/exec.so"
modparam("usrloc", "db_mode", 2)
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("rr", "enable_full_lr", 1)
modparam("voicemail", "db_url", "sql://ser:heslo@localhost/ser")
modparam("tm", "fr_inv_timer", 15)
# ------------------------- request routing logic -------------------
# main routing logic
route{
# initial sanity checks -- messages with
# max_forwards==0, or excessively long requests
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
break;
};
if ( len_gt( max_len) ) {
sl_send_reply("513", "Message too big");
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
if (loose_route()) {
t_relay();
break;
};
#nsert_ucontact(locations, contact, expires, q, callid, cseq, flags, cont);
# if the request is for other domain use UsrLoc
# (in case, it does not work, use the following command
# with proper names and addresses in it)
if (uri==myself) {
if (method=="REGISTER") {
# Uncomment this if you want to use digest authentication
if (!www_authorize("<Myserver>", "subscriber")) {
www_challenge("<Myserver>", "0");
break;
};
save("location");
break;
};
lookup("aliases");
};
# native SIP destinations are handled using our USRLOC DB
if (!lookup("location")) {
# sl_send_reply("404", "Not Found");
# break;
#
if(method=="ACK" || method=="INVITE" || method=="BYE" ||
method=="REFER"){
if(t_newtran()){
t_reply("100","Trying -- just wait a minute !");
if(method=="INVITE" || method=="REFER"){
log("**************** vm start - begin ******************\n");
if( uri =~ "conference" ){
if(!vm("/tmp/am_fifo","conference")){
log("could not contact conference server\n");
t_reply("500","could not contact conference server");
};
}
else if( uri =~ "echo" ){
if(!vm("/tmp/am_fifo","echo")){
log("could not contact echo\n");
t_reply("500","could not contact echo");
};
}
else {
if(!vm("/tmp/am_fifo","voicemail")){
log("could not contact voicemail\n");
t_reply("500","could not contact voicemail");
};
};
log("**************** vm start - end ******************\n");
break;
};
if(method=="BYE"){
log("**************** vm end/refer - begin ******************\n");
if(!vm("/tmp/am_fifo","bye")){
log("could not contact the media server\n");
t_reply("500","could not contact the media server");
};
log("**************** vm end/refer - end ********************\n");
break;
};
}
else {
log("could not create new transaction\n");
sl_send_reply("500","could not create new transaction");
};
};
};
# forward to current uri now; use stateful forwarding; that
# works reliably even if we forward from TCP to UDP
if (!t_relay()) {
sl_reply_error();
};
}
----
# $Id: sems.conf.sample,v 1.17 2004/07/19 20:43:14 sayer 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=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: fifo_name=<filename>
#
# - path and file name of our fifo file (same as -i)
fifo_name=/tmp/am_fifo
# optional parameter: ser_fifo_name=<filename>
#
# - path and file name of Ser's fifo file (same as -o)
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/
# 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
# optional parameter: rtp_low_port=<port>
#
# - sets port of rtp lowest server
#rtp_low_port=1024
# optional parameter: rtp_high_port=<port>
#
# - sets port of rtp highest server
#rtp_high_port=65535
##################################
# module specific parameters #
##################################
# sample voicemail configuration (inline)
config.voicemail=inline
# optional parameter: rec_file_extension=<ext>
#
# - sets the file extension which will be used
# to record messages.
# - example 1: wav
# - example 2: mp3
#
# WARNING: you must compile the mp3 plug-in
# in order to use 'mp3' as default
# extension. You will need the lame
# encoder for that.
# See plug-in/mp3/ReadmeMP3.txt for
# more information.
#
rec_file_extension=wav
# optional parameter: announce_path=<path>
#
# - sets the path where announce files are searched for
# - the file to be played is determined the following way:
# <announce_path>/<domainname>/<username>.wav
# if this file is not available <announce_path>/<default_anounce> is used
announce_path=/usr/local/lib/sems/audio/
# parameter: default_announce=<filename>
#
# - sets the name of the default announce WAV file
default_announce=default_en.wav
# parameter: max_record_time=<seconds>
#
# - maximum record time
max_record_time=30
# parameter: accept_delay=<x>
#
# - delays accepting of the call for x seconds
# - default value is 0
accept_delay=0
# parameter: email_template=<filename>
#
# - email template file
#
# See the README file in <sems-src>/plug-in/voicemail
# for more information on the syntax used.
#
email_template=/usr/local/lib/sems/plug-in/mail.template
# end of configuration section for voicemail module
config.voicemail=end
# sample announcement configuration (inline)
config.announcement=inline
# optional parameter: announce_path=<path>
#
# - sets the path where announce files are searched for
announce_path=/usr/local/lib/sems/audio/
# parameter: default_announce=<filename>
#
# - sets the name of the default announce WAV file
default_announce=default_en.wav
# end of configuration section for announcement module
config.announcement=end
# sample isdngw module configuration (external file)
# config.isdngw=/etc/isdngw.conf
# sample ivr module configuration (inline)
config.ivr=inline
#
#
# The IVR checks for a script with the named of the callee
# (<local part in r-uri>.py for python, <local part in r-uri>.pl for perl)
# in the directory <ivr_script_path><domain>, then for
# <ivr_script_path><domain><ivr_script_file>. If this is not found,
# <ivr_script_path>/<local part in r-uri>.py if searched,
# and if this is not found, <ivr_script_path>/<ivr_script_file> is used.
#
# So with a call to sayer(a)iptel.org and
#ivr_script_path=/etc/ivr and
#ivr_script_file=ivr.py
# these files are checked:
#/etc/ivr/iptel.org/sayer.py
#/etc/ivr/iptel.org/ivr.py
#/etc/ivr/sayer.py
#/etc/ivr/ivr.py
#
#parameter: ivr_script_path:
# path to ivr scripts.
#
ivr_script_path=/etc/ivr/
# default script file: this will be executed if <user>.py does not exist.
#
ivr_script_file=ivr.py
# parameter : tts_caching
# y or n
# text will be read from waves already synthesized and
# cached in cache_path
tts_caching=y
# parameter : tts_cache_path
# path to cache waves
# path must exist!
tts_cache_path=/tmp/wavs
# end of configuration section for ivr module
config.ivr=end
# sample conference configuration (inline)
config.conference=inline
# parameter: default_announce=<filename>
#
# - sets the full pathed name of the default announce WAV file.
# Will be played to lonely users.
default_announce=/usr/local/lib/sems/audio/first_participant.wav
# end of configuration section for conference module
config.conference=end
# example configuration for number reader
config.number_reader=inline
number_path=/usr/local/lib/sems/audio/
prolog_file=welcome_to_number_reader.wav
epilog_file=thanks_calling_number_reader.wav
# end of number_reader configuration
config.number_reader=end
# add more module configurations here (inline or external):
#
# config.mymodule=<filename>
# or
# config.mymodule=inline
# ...
# config.mymodule=end
Greetings once again all,
Thanks so much for your help on my previous silly errors. I have again met
up with one. I'm trying to have SEMS email users their voice mail. IF the
user is offline, it works very well, however, if the user is online, it
fails.
>From the logs I see that when the user is offline it is emailing them from
"voicemail(a)mysipserver.com" but when the user is online, it tries to mail
them from "voicemail@<users_public_ip>"
The domain in the subscriber table if MySQL is set to the correct domain,
but the contact field in the location table is set to
<user_phone_number>@<user_public_ip> if that makes a difference.
Thanks in advance for your help.
Cheers,
C.
Hello all,
I am having some problems with does_uri_exist. I am getting error "find_export: <does_uri_exist> not found"
I have loaded both uri and uri_db
I have also tried to use the sample config ser.cfg.m4 and my own config which contains the function but his fails with same error.
I am using cvs head 22-juli 2004.
I have authdb running and am getting things in and out of the mysql database.
any ideas ?
Arne.
I compiled from source but acc.so can not find libradiusclient.so.0 and
fails with the message below. However, I do have radius client installed
and actually I ended up copying libradiusclient.so to
/usr/local/lib/ser/modules folder.
I guess I need to know if there is hard coded reference to the location of
the libradiusclient.so in SER which I must change to make it work.
Thanks and here is the message:
0(20090) ERROR: load_module: could not open module
</usr/local/lib/ser/modules/acc.so>: libradiusclient.so.0: cannot open
shared object file: No such file or directory
0(20090) parse error (39,13-47): failed to load module
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (79,31-32): Can't set module parameter
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (84,37-38): Can't set module parameter
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (85,64-65): Can't set module parameter
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (86,30-31): Can't set module parameter
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (87,37-38): Can't set module parameter
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (88,41-42): Can't set module parameter
ERROR: bad config file (7 errors)
_________________________________________________________________
Check out Election 2004 for up-to-date election news, plus voter tools and
more! http://special.msn.com/msn/election2004.armx
At first it seemed like a really good idea then the more I looked at real
world records I realized that to generate a bill for a customer would
require quite bit of work on MySQL's part to match up the INVITE's and the
BYE's and then calc the difference in the times. This causes a bit of a
problem for me because I like my customers to be able to see their CDR
records live. Which really isn't much unless you look at it from a 100,000
user perspective. I would either have to beat up my SQL server every time
they look at their records (or my customer service employees look at them or
even when the biller generates their bill) or run a cron job that runs every
so often to convert the data to a single record with a start time and a
duration and store it in another table. The cron idea isn't too efficient
because of wasting disk space and rewriting a lot of the same data twice.
This then leads me to ask why the SER acc module wasn't setup to generate an
initial start record identical to the INVITE message that it already does
that would be marked as "in progress"? Then when a BYE is received with a
matching Call-ID you find the original INVITE record, change its status to
"done" and populate a duration field. Any ideas why this can't be done
without affecting SER's scalability? :)
Thanks!
----------------------------------------
Michael Shuler, C.E.O.
BitWise Systems, Inc.
682 High Point Lane
East Peoria, IL 61611
Office: (217) 585-0357
Cell: (309) 657-6365
Fax: (309) 213-3500
E-Mail: mike(a)bwsys.net
Customer Service: (877) 976-0711
I compiled from source but acc.so can not find libradiusclient.so.0 and
fails with the message below. However, I do have radius client installed
and actually I ended up copying libradiusclient.so to
/usr/local/lib/ser/modules folder.
I guess I need to know if there is hard coded reference to the location of
the libradiusclient.so in SER which I must change to make it work.
Thanks and here is the message:
0(20090) ERROR: load_module: could not open module
</usr/local/lib/ser/modules/acc.so>: libradiusclient.so.0: cannot open
shared object file: No such file or directory
0(20090) parse error (39,13-47): failed to load module
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (79,31-32): Can't set module parameter
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (84,37-38): Can't set module parameter
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (85,64-65): Can't set module parameter
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (86,30-31): Can't set module parameter
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (87,37-38): Can't set module parameter
0(20090) set_mod_param_regex: No module matching acc found
| 0(20090) parse error (88,41-42): Can't set module parameter
ERROR: bad config file (7 errors)
_________________________________________________________________
Get ready for school! Find articles, homework help and more in the Back to
School Guide! http://special.msn.com/network/04backtoschool.armx