[Serusers] SEMS problem
Greger V. Teigre
greger at teigre.com
Mon Dec 4 12:53:30 CET 2006
1. Please don't copy specific people on posts
2. serusers is very useful for answering specific questions, but then
you need to provide enough info for people to be able to respond. Most
people don't have time to do generic quality assurance of somebody's
complete configs.
g-)
Meidiana Ten wrote:
> Hi,
> Like u told me before, I've tried to install and configure SEMS into
> my SER server to setup the voicemail feature.
> I add some configuration file into ser.cfg and configure the sems.conf.
> But when I try to run SER, I got some error. Please review my ser.cfg
> and sems.conf file below:
>
> ser.cfg:
>
> debug=9
> fork=yes
> log_stderror=yes
>
> listen=202.95.149.2 # put your server IP address here
> port=5060
> children=4
>
> dns=no
> rev_dns=no
>
> fifo="/tmp/ser_fifo"
> fifo_db_url="mysql://ser:heslo@localhost/ser"
> fifo_mode=0666
>
> 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/nathelper.so"
> loadmodule "/usr/local/lib/ser/modules/textops.so"
> loadmodule "/usr/local/lib/ser/modules/uri_db.so"
> loadmodule "/usr/local/lib/ser/modules/uri.so"
> loadmodule "/usr/local/lib/ser/modules/avpops.so"
> loadmodule "/usr/local/lib/ser/modules/domain.so"
> loadmodule "/usr/local/lib/ser/modules/permissions.so"
> loadmodule "/usr/local/lib/ser/modules/msilo.so"
>
> modparam("auth_db|permissions|uri_db|usrloc","db_url",
> "mysql://ser:heslo@localhost/ser")
> modparam("auth_db|uri_db|usrloc", "db_url",
> "mysql://ser:heslo@localhost/ser")
> modparam("auth_db", "calculate_ha1", 1)
> modparam("auth_db", "password_column", "password")
>
> modparam("nathelper", "natping_interval", 30)
> modparam("nathelper", "ping_nated_only", 1)
> modparam("nathelper", "rtpproxy_sock", "/var/run/rtpproxy.sock")
>
> modparam("usrloc", "db_mode", 2)
>
> modparam("registrar", "nat_flag", 6)
>
> modparam("rr", "enable_full_lr", 1)
>
> modparam("tm", "fr_inv_timer", 27)
> modparam("tm", "fr_inv_timer_avp", "inv_timeout")
>
> modparam("permissions", "db_mode", 1)
> modparam("permissions", "trusted_table", "trusted")
>
> modparam("tm", "fr_timer", 10 )
> modparam("tm", "fr_inv_timer", 15 )
> modparam("tm", "wt_timer", 10 )
> # configure tm to append this when tw_appent voicemail_headers is used
> #modparam("tm", "tw_append",
> "voicemail_headers:hdr[User-Agent];P-Email-Address=avp[$email]")
> #modparam("tm", "pass_provisional_replies", 1)
>
> modparam("msilo", "db_url", "mysql://ser:heslo@localhost/ser")
> modparam("msilo", "db_table", "silo")
> modparam("msilo","registrar","sip:registrar at pcr.ac.id")
> modparam("msilo","expire_time",259200)
> modparam("msilo","check_time",30)
> modparam("msilo","clean_period",5)
>
> modparam( "avpops", "avp_aliases", "email=i:67" )
>
> alias="pcr.ac.id"
> route {
> #
> -----------------------------------------------------------------
> # Sanity Check Section
> #
> -----------------------------------------------------------------
>
> if (!mf_process_maxfwd_header("10")) {
> sl_send_reply("483", "Too Many Hops");
> break;
> };
>
> if (msg:len > max_len) {
> sl_send_reply("513", "Message Overflow");
> break;
> };
>
> #
> -----------------------------------------------------------------
> # Record Route Section
> #
> -----------------------------------------------------------------
>
> if (method!="REGISTER") {
> record_route();
> };
>
> if (method=="BYE" || method=="CANCEL") {
> unforce_rtp_proxy();
> }
>
> #
> -----------------------------------------------------------------
> # Loose Route Section
> #
> -----------------------------------------------------------------
>
> if (loose_route()) {
> if (has_totag() && (method=="INVITE" || method=="ACK")) {
> if (nat_uac_test("19")) {
> setflag(6);
> force_rport();
> fix_nated_contact();
> };
> force_rtp_proxy("l");
> };
> route(1);
> break;
> };
> #------------------------------------------------------------------
> # make transaction
> #-----------------------------------------------------------------
> if (!t_newtran()){
> log("could not create transaction\n");
> sl_send_reply("500","could not create transaction");
> break;
> }
>
> # actively absorb ACKs
> if (method == "ACK") {
> t_relay();
> break;
> }
>
> # pass INFO to SEMS
> if (method=="INFO") {
> if(!t_write_unix("/tmp/sems_sock","sems/info_append")){
> log("could not contact sems\n");
> t_reply("500","could not contact media server");
> }
> }
>
> if (uri =~ "sip:101.*@") {
> if (!t_write_unix("/tmp/sems_sock","myapp")){
> log("could not contact media server\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> if (uri =~ "sip:102.*@") {
> if (!t_write_unix("/tmp/sems_sock","myconfigurableapp")){
> log("could not contact media server\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> if (uri =~ "sip:103.*@") {
> if (!t_write_unix("/tmp/sems_sock","myannounceapp")){
> log("could not contact media server\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> if (uri =~ "sip:104.*@") {
> if (!t_write_unix("/tmp/sems_sock","myjukebox")){
> log("could not contact media server\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> if (uri =~ "sip:105.*@") {
> if (!t_write_unix("/tmp/sems_sock","mycc")){
> log("could not contact media server\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> if (uri =~ "sip:106.*@") {
> if (!t_write_unix("/tmp/sems_sock","ivr_announce")){
> log("could not contact media server\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> # default sems apps
> if (uri =~ "sip:110.*@") {
> if (!t_write_unix("/tmp/sems_sock","echo")){
> log("could not contact echo\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> if (uri =~ "sip:111.*@") {
> if (!t_write_unix("/tmp/sems_sock","announcement")){
> log("could not contact announcement\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> if (uri =~ "sip:112.*@") {
> if (!t_write_unix("/tmp/sems_sock","conference")){
> log("could not contact conference\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> if (uri =~ "sip:113.*@") {
> if (!t_write_unix("/tmp/sems_sock","mailbox")){
> log("could not contact mailbox\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> if (uri =~ "sip:114.*@") {
> if (!t_write_unix("/tmp/sems_sock","early_announce")){
> log("could not contact early_announce\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> if (uri =~ "sip:115.*@") {
> # load email avp with some email address
> avp_write("root at localhost","$email");
> # use voicemail_headers append to pass it to sems
> if
> (!t_write_unix("/tmp/sems_sock","voicemail/voicemail_headers")){
> log("could not contact voicemail\n");
> t_reply("500","could not contact media server");
> break;
> }
> break;
> }
>
> t_reply("404","Not found");
>
> #
> -----------------------------------------------------------------
> # Offline Message Store Section
> #
> -----------------------------------------------------------------
> if (is_from_local()) {
> if (method=="REGISTER") {
> save("location");
> log("REGISTER received -> dumping messages with MSILO\n");
>
> # MSILO - dumping user's offline messages
> if (m_dump())
> {
> log("MSILO: offline messages dumped - if they were\n");
> }else{
> log("MSILO: no offline messages dumped\n");
> };
> break;
> };
>
> # domestic SIP destinations are handled using our USRLOC DB
>
> if(!lookup("location"))
> {
> if (! t_newtran())
> {
> sl_reply_error();
> break;
> };
> # we do not care about anything else but MESSAGEs
> if (!method=="MESSAGE")
> {
> if (!t_reply("404", "Not found"))
> {
> sl_reply_error();
> };
> break;
> };
> log("MESSAGE received -> storing using MSILO\n");
> # MSILO - storing as offline message
> if (m_store("0"))
> {
> log("MSILO: offline message stored\n");
> if (!t_reply("202", "Accepted"))
> {
> sl_reply_error();
> };
> }else{
> log("MSILO: offline message NOT stored\n");
> if (!t_reply("503", "Service Unavailable"))
> {
> sl_reply_error();
> };
> };
> break;
> };
> # if the downstream UA does not support MESSAGE requests
> # go to failure_route[1]
> t_on_failure("1");
> t_relay();
> break;
> };
> # 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();
> };
>
> # -----------------------------------------------------------------
> # Call Type Processing Section
> #
> -----------------------------------------------------------------
>
> if (uri!=myself) {
> route(5);
> route(1);
> break;
> };
>
> if (uri==myself) {
> if (method=="ACK") {
> route(6);
> break;
> } else if (method=="CANCEL") {
> route(3);
> break;
> } else if (method=="INVITE") {
> route(3);
> break;
> } else if (method=="REGISTER") {
> route(2);
> break;
> };
> lookup("aliases");
> if (uri!=myself) {
> route(5);
> route(1);
> break;
> };
>
> if (!lookup("location")) {
> sl_send_reply("404", "User Not Found");
> break;
> };
> };
> route(1);
> }
>
> failure_route[1] {
> # forwarding failed -- check if the request was a MESSAGE
> if (!method=="MESSAGE")
> {
> break;
> };
>
> log(1,"MSILO:the downstream UA doesn't support MESSAGEs\n");
> # we have changed the R-URI with the contact address, ignore it now
> if (m_store("1"))
> {
> log("MSILO: offline message stored\n");
> t_reply("202", "Accepted");
> }else{
> log("MSILO: offline message NOT stored\n");
> t_reply("503", "Service Unavailable");
> };
> }
>
> route[1] {
>
> #
> -----------------------------------------------------------------
> # Default Message Handler
> #
> -----------------------------------------------------------------
>
> t_on_reply("1");
> if (!t_relay()) {
> if (method=="INVITE" && isflagset(6)) {
> unforce_rtp_proxy();
> };
> sl_reply_error();
> };
> }
>
> route[2] {
>
> #
> -----------------------------------------------------------------
> # REGISTER Message Handler
> # ----------------------------------------------------------------
>
> if (!search("^Contact:\ +\*") && nat_uac_test("19")) {
> setflag(6);
> fix_nated_register();
> force_rport();
> };
> sl_send_reply("100", "Trying");
>
> if (!www_authorize("pcr.ac.id","subscriber")) {
> www_challenge("pcr.ac.id","0");
> break;
> };
>
> if (!check_to()) {
> sl_send_reply("401", "Unauthorized");
> break;
> };
> consume_credentials();
> if (!save("location")) {
> sl_reply_error();
> };
> }
>
> route[3] {
>
> #
> -----------------------------------------------------------------
> # CANCEL and INVITE Message Handler
> #
> -----------------------------------------------------------------
>
> if (!allow_trusted() && nat_uac_test("19")) {
> setflag(6);
> }
> lookup("aliases");
> if (method=="INVITE" && !allow_trusted())
> {
> if (!proxy_authorize("pcr.ac.id","subscriber")) {
> proxy_challenge("pcr.ac.id","0");
> break;
> } else if (!check_from()) {
> sl_send_reply("403", "Use From=ID");
> break;
> };
> consume_credentials();
> };
>
> if (uri=~"^sip:9[0-9]*@") {
> route(4);
> break;
> };
>
> if (uri!=myself) {
> route(5);
> route(1);
> break;
> };
>
> if (!lookup("location")) {
> if (uri=~"^sip:[0-9]{10}@") {
> route(4);
> break;
> };
> sl_send_reply("404", "User Not Found");
> break;
> };
>
> if (isflagset(6)) {
> force_rport();
> fix_nated_contact();
> force_rtp_proxy();
> };
> t_on_reply("1");
>
> if (!t_relay()) {
> if(isflagset(6)) {
> unforce_rtp_proxy();
> }
> sl_reply_error();
> };
> }
>
> route[4] {
>
> # -----------------------------------------------------------------
> # PSTN Handler
> # -----------------------------------------------------------------
>
> rewritehostport("202.95.149.2:5060"); # INSERT YOUR PSTN GATEWAY IP
> ADDRESS
> avp_write("i:45", "inv_timeout");
>
> if (isflagset(6)) {
> force_rport();
> fix_nated_contact();
> force_rtp_proxy();
> };
> route(1);
> }
>
> onreply_route[1] {
> if (isflagset(6) && status=~"(180)|(183)|2[0-9][0-9]") {
> if (!search("^Content-Length:\ +0")) {
> force_rtp_proxy();
> };
> };
>
> if (nat_uac_test("1")) {
> fix_nated_contact();
> };
> }
> -------------------------------------------------------------------------------------------------------------------
> sems.conf:
> # 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: ser_fifo_name=<filename>
> #
> # - path and file name of Ser's fifo file (same as -o)
> ser_fifo_name=/tmp/ser_fifo
>
> # optional parameter: socket_name=<filename>
> #
> # - path and file name of our unix socket
> socket_name=/tmp/am_sock
>
> # optional parameter: ser_socket_name=<filename>
> #
> # - path and file name of Ser's unix socket
> ser_socket_name=/tmp/ser_sock
>
> # optional parameter: send_method=<filename>
> #
> # - sets which method will be used to contact Ser:
> # FIFO or unix socket server.
> # - values: fifo (default), unix_socket
> #
> # - PLEASE NOTE THAT: if you use 'fifo', make sure that
> # fifo_name and ser_fifo_name have been set. if you use 'unix_socket',
> # make sure that socket_name and ser_socket_name have been set.
> #
> send_method=fifo
>
> # optional parameter: user_prefix_separator
> # if set, sems will reply with a Contact header in the form
> # Contact: <plugin-name><user_prefix_separator><user>
> # needed if a single ser instance is used with sems.
> #
> # user_prefix_separator=+
>
> # 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/
> plugin_path=lib
>
> # 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: 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/
> announce_path=wav
>
> # 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: 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
> email_template=plug-in/voicemail/default.template.sample
>
> # 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/
> announce_path=wav
>
> # 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
>
> #parameter: python_script_path=<full path>
> #python_script_path=/etc/ivr
>
> #parameter: python_script_file=<filename>
> #python_script_file=example.py
>
> # 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
> default_announce=wav/first_participant.wav
>
> # parameter: join_sound=<filename>
> #
> # - sets the full pathed name of a WAV file
> # which will be played to conference users
> # when a new user joins the conference.
> #join_sound=/usr/local/lib/sems/audio/beep.wav
> join_sound=wav/beep.wav
>
> # parameter: drop_sound=<filename>
> #
> # - sets the full pathed name of a WAV file
> # which will be played to conference users
> # when a user drops the conference.
> #drop_sound=/usr/local/lib/sems/audio/beep.wav
> drop_sound=wav/beep.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/
> number_path=wav
>
> 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
> -------------------------------------------------------------------------------------------------------------------
> In addition, I'm using SER 0.9.7.
> Please tell me what's wrong.
> Thanx
>
> Regards,
> Meidiana
>
> ------------------------------------------------------------------------
> Access over 1 million songs - Yahoo! Music Unlimited.
> <http://pa.yahoo.com/*http://us.rd.yahoo.com/evt=36035/*http://music.yahoo.com/unlimited/>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Serusers mailing list
> Serusers at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20061204/3eed7a07/attachment.htm>
More information about the sr-users
mailing list