Hi All !
I 've installed the SER version 0.8.11 it works OK but i cant implement some of commands.
For example when i add
loadmodule "/usr/home/mark/lib/ser/modules/acc.so"
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1 )
acc_log_request("some comment","acc");
to my ser.cgf , there is nothing in acc table of the ser db.
Commands are taken from acc.pdf - documentation written by Jiri Kuthan
I ll be grateful for any help.
Thanks in advance
Mark Chehovsky
Hi,
Can anyone provide any documentation on SerWeb...I have problem when I
register as a subscriber the info is stored into the Pending table instead
of the Subscriber table. Therefore I cannot login after register please
advice. Also for the ser.cfg do I have to add on to the script in order to
connect to SIP. Please advice as I still cannot get my server working.
*Have a nice day (",)*
Regards,
Shirley Toh
Greg,
You can set a timer when the phone rings and isn't answered.
modparam("tm", "fr_inv_timer", 20 )
20 is the time before the failure. You can change this.
Stephen
-----Original Message-----
From: Greg Fausak [mailto:greg@august.net]
Sent: Friday, September 26, 2003 11:56 AM
To: 'Jiri Kuthan'; 'Gavin Bensom'; serusers(a)lists.iptel.org
Subject: RE: [Serusers] voicemail question - dial plan example -
pstngatewayexample
Jiri,
I believe this is what you and I talked about
at VON. I am very interested in an easy way to
do serial forking. For instance, if I have 3 sip endpoints
like :
1000(a)myproxy.com
1010(a)myproxy.com
1020(a)myproxy.com
And finally, a voice mail reference:
1000(a)myvoicemailmediaserver.com
I currently am doing a serial forking like this:
First, create a table called 'forward' that works exactly like
'aliases'.
Then, put all 'forward' instructions in the table. This includes
forwarding
to voicemail server.
{
...
if(lookup("forward"))
{
xlog("L_WARN", "HUNTGROUP: %Ts call-id:%ci cseq:%ci\n");
t_on_failure("1");
}
if(!t_relay())
{
sl_reply_error();
break;
}
...
}
# here is the 'failure_route' for number forwarding
failure_route[1]
{
if(lookup("forward"))
{
xlog("L_WARN", "CONTINUE HUNT: %Ts call-id:%ci cseq:%ci
messageid:%mi\n");
t_on_failure("1");
append_branch();
t_relay();
break;
};
xlog("L_WARN", "NO CONTINUE HUNT: %Ts call-id:%ci cseq:%ci
messageid:%mi\n");
#sl_reply_error();
t_reply("486","Busy puppy.");
break;
}
This setup sort of works, but, it seems that I get many
t_relay() events that just hang and eventually time out,
which I don't understand how is happening.
Also, it would be nice if I could set a timer, say for 15 seconds, that
causes a failure to occur in the event a phone rings but isn't
answered.
---greg
>
> There is other problem though -- the failure_route logic for
> VM should be different
> from that in route block -- you can't create transaction
> state two times
> (first time with t_relay, second time with t_newtran). SER
> will certainly
> complain with some error message in your logs.
>
> I will introduce some new command which hides details of
> transaction processing
> from script writers and can be used from both route[] and
> failure_route[].
> (I didn't think of it before since I used voicemail on some
> other machine
> than proxy server.)
>
> -jiri
>
> >
> >Thanks,
> >G.
> >
> >
> >Do you Yahoo!?
> ><http://shopping.yahoo.com/?__yltc=s%3A150000443%2Cd%3A227082
> 28%2Cslk%3Atext%2Csec%3Amail>The New Yahoo! Shopping - with
> improved product search
> >#
> ># $Id: ser.cfg,v 1.20 2003/05/31 21:12:19 jiri Exp $
> >#
> ># simple quick-start config script
> >#
> >
> ># ----------- global configuration parameters
> ------------------------
> >
> >debug=3 # debug level (cmd line: -dddddddddd)
> >fork=yes
> >log_stderror=no # (cmd line: -E)
> >
> >/* Uncomment these lines to enter debugging mode
> >debug=8
> >fork=no
> >log_stderror=yes
> >*/
> >
> >check_via=no # (cmd. line: -v)
> >dns=no # (cmd. line: -r)
> >rev_dns=no # (cmd. line: -R)
> >port=5060
> >children=4
> >fifo="/tmp/ser_fifo"
> >sip_warning=no
> >#
> ># ------------------ module loading
> ----------------------------------
> >#
> ># Uncomment this if you want to use SQL database
> >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/vm.so"
> >loadmodule "/usr/local/lib/ser/modules/pa.so"
> >loadmodule "/usr/local/lib/ser/modules/msilo.so"
> >loadmodule "/usr/local/lib/ser/modules/acc.so"
> >loadmodule "/usr/local/lib/ser/modules/textops.so"
> >#
> >#loadmodule "/usr/local/lib/ser/modules/nathelper.so"
> >#loadmodule "/usr/local/lib/ser/modules/uri.so"
> >#loadmodule "/usr/local/lib/ser/modules/group.so"
> >#
> ># Uncomment this if you want digest authentication
> ># mysql.so must be loaded !
> >loadmodule "/usr/local/lib/ser/modules/auth.so"
> >loadmodule "/usr/local/lib/ser/modules/auth_db.so"
> >#
> ># ----------------- setting module-specific parameters
> ---------------
> >#
> ># -- usrloc params --
> >#
> >#modparam("usrloc", "db_mode", 0)
> >#
> ># Uncomment this if you want to use SQL database
> ># for persistent storage and comment the previous line
> >modparam("usrloc", "db_mode", 2)
> >#
> ># -- auth params --
> ># Uncomment if you are using auth module
> >#
> >modparam("auth_db", "calculate_ha1", yes)
> >#
> ># If you set "calculate_ha1" parameter to yes (which true in
> this config),
> ># uncomment also the following parameter)
> >#
> >modparam("auth_db", "password_column", "password")
> >#
> >#
> >modparam("acc", "log_level", 1)
> >modparam("acc", "log_flag", 2)
> >modparam("acc", "log_missed_flag", 2)
> >modparam("acc", "log_fmt", "fimos")
> >#
> >#modparam("tm", "fr_inv_timer", 35) #INVITE timeout
> >#modparam("tm", "fr_timer", 30) #negative INVITE replay or no
> > #final reply for a request for ACK
> >#
> >modparam("voicemail", "db_url", "sql://ser:heslo@localhost/ser")
> >#
> >#modparam("acc", "db_url", "sql://ser:heslo@localhost/ser")
> >#modparam("acc", "db_flag", 2)
> >#modparam("acc", "db_missed_flag", 2)
> >#
> ># ------------------------- request routing logic
> -------------------
> >#
> ># main routing logic
> >#
> >alias=10.10.10.49 #sip server IP address
> >alias=jiffypop #sip server name
> >alias=mydomain.com #sip domain/realm
> >alias=jiffypop.mydomain.com #sip server FQDN
> >#
> >route{
> > log(1,"entering main route");
> > #prevent strangers from claiming to belong to our domain;
> > #if sender claims to be in our domain in From header field,
> > #better authenticate him
> > # code not inserted yet :)
> >
> > # 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;
> > };
> >
> > setflag(2); #set flag for accounting
> >
> > # 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") {
> > # digest authentication
> > log(1,"request for registration");
> > if (!www_authorize("mydomain.com",
> "subscriber")) {
> > www_challenge("mydomain.com", "0");
> > break;
> > };
> > save("location");
> > break;
> > };
> >
> >/* ********** Dial out to PSTN logic ************* */
> >
> > #forward numerical 7 digit requests to gateway
> >
> if(uri=~"^sip:[0-9]{7}@(mydomain\.com|10\.10\.10\.49)"){
> >#
> append_hf("Remote-Party-ID:<sip:6508466600@mydomain.com>;party
> =calling;id-type=subscriber;privacy=off;screen=no;\r\n");
> > rewritehostport("10.10.10.5:5060");
> > log(1,"7 digit expression match");
> > route(2);
> > break;
> >
> > };
> > # strip 650 and forward to GW is user dials
> 650 before phone no.
> >
> if(uri=~"^sip:650[0-9]{7}@(mydomain\.com|10\.10\.10\.49)"){
> > strip(3);
> > rewritehostport("10.10.10.5:5060");
> > log(1,"650 area code dialed, 650 stripped");
> > route(2);
> > break;
> >
> > };
> > #forward numerical 10 digit requests to
> gateway, append a 1 first
> >
> if(uri=~"^sip:[0-9]{10}@(mydomain\.com|10\.10\.10\.49)"){
> > prefix("1");
> > rewritehostport("10.10.10.5:5060");
> > log(1,"10 digit expression match, prefix 1");
> > route(2);
> > break;
> > };
> > #forward numerical 11 digit requests that
> start with a 1 to GW
> >
> if(uri=~"^sip:1[0-9]{10}@(mydomain\.com|10\.10\.10\.49)"){
> > rewritehostport("10.10.10.5:5060");
> > log(1,"10 digit exp match w/leading 1");
> > route(2);
> > break;
> > };
> > #forward international N digit requests to gateway
> >
> if(uri=~"^sip:011[0-9]+@(mydomain\.com|10\.10\.10\.49)"){
> > rewritehostport("10.10.10.5:5060");
> > log(1,"international expression match");
> > route(2);
> > break;
> > };
> >
> >/* ********** VOICEMAIL logic ************* */
> >
> > if (uri=~"^sip:voicemail\+@"){
> > t_newtran();
> > t_reply("100", "Trying -- just a second");
> > if(!vm("/tmp/am_fifo","announcement")){
> > t_reply("500", "SEMS error");
> > };
> > log(1,"sip:voicemail uri match");
> > break;
> > };
> >/* ****** Find Aliases and Locations of users ********* */
> >
> ># It is very important to lookup "aliases" before looking up
> "locations"
> >
> > if(!lookup("aliases")){
> > log(1,"Couldn't find any matching alias");
> > sl_send_reply("404", "User does not exist");
> > break;
> > };
> >
> > if(!lookup("location")) {
> > log(1,"unable to locate user");
> > route(3);
> > break;
> > };
> >
> > };
> >
> >
> > # forward to current uri now; use stateful forwarding; that
> > # works reliably even if we forward from TCP to UDP
> > t_on_failure("1");
> > if (!t_relay()) {
> > sl_reply_error();
> > };
> > log(1,"eof");
> >}
> >
> >route[2]{
> > log(1,"route[2]:SIP-to-PSTN call routed");
> > if(!t_relay()){
> > sl_reply_error();
> > };
> >}
> >
> >route[3]{
> > log(1,"route[3]: voicemail processing");
> > if(method=="INVITE" || method=="ACK"){
> > log(1,"1st if entered in route[3] *vm*");
> > t_newtran();
> > t_reply("100","Trying -- just a second");
> > if(!vm("/tmp/am_fifo","voicemail")){ #
> "announcement" was replaced with "voicemail"
> > log(1,"vm module called and failed");
> > t_reply("500", "SEMS error");
> > };
> > break;
> > };
> > log(1,"end of route[3], 1st if check not entered");
> >}
> >
> >failure_route[1]{
> > log(1,"failure_route[1]:jump to vm processing");
> > route(3);
> ># break;
> >}
> >
> >_______________________________________________
> >Serusers mailing list
> >serusers(a)lists.iptel.org
> >http://lists.iptel.org/mailman/listinfo/serusers
>
> --
> Jiri Kuthan http://iptel.org/~jiri/
>
> _______________________________________________
> Serusers mailing list
> serusers(a)lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
>
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers
In the ser admin guide it says
"You can refer to voicemail example config file to know what your configuration file should include. Note that voicemail uses subsriber database table to determine recepient's email address. Read the README file in the vm module directory for complete description of the functions and variables that are used by voicemail and how they work."
I can't find any complete descriptions of the functions and variables and how they work. The README file is very short and basic.
In the example config file there are many calls to vm(/tmp/am_fifo", "*"); where * is "announcement" or "voicemail" or "echo" or "bye" or "conference." Are these all required in a basic voicemail setup? Can anyone point me to more information on how this works and what each of these modules are doing?
If I call a user who isn't logged in I can hear the voicemail default greeting, but then the line goes silent. I don't think there is any voice recording happening. See ser.cfg attached.
Also, if a timer is set to send calls to vm (using failure_route) after a certain timeout, is there a way to prevent that timeout from killing calls routed to the PSTN?
Thanks,
G.
---------------------------------
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
#
# $Id: ser.cfg,v 1.20 2003/05/31 21:12:19 jiri Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters ------------------------
debug=3 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
debug=8
fork=no
log_stderror=yes
*/
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
port=5060
children=4
fifo="/tmp/ser_fifo"
sip_warning=no
#
# ------------------ module loading ----------------------------------
#
# Uncomment this if you want to use SQL database
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/vm.so"
loadmodule "/usr/local/lib/ser/modules/pa.so"
loadmodule "/usr/local/lib/ser/modules/msilo.so"
loadmodule "/usr/local/lib/ser/modules/acc.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
#
#loadmodule "/usr/local/lib/ser/modules/nathelper.so"
#loadmodule "/usr/local/lib/ser/modules/uri.so"
#loadmodule "/usr/local/lib/ser/modules/group.so"
#
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
#
# ----------------- setting module-specific parameters ---------------
#
# -- usrloc params --
#
#modparam("usrloc", "db_mode", 0)
#
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 2)
#
# -- auth params --
# Uncomment if you are using auth module
#
modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this config),
# uncomment also the following parameter)
#
modparam("auth_db", "password_column", "password")
#
#
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 2)
modparam("acc", "log_missed_flag", 2)
modparam("acc", "log_fmt", "fimos")
#
#modparam("tm", "fr_inv_timer", 35) #INVITE timeout
#modparam("tm", "fr_timer", 30) #negative INVITE replay or no
#final reply for a request for ACK
#
modparam("voicemail", "db_url", "sql://ser:heslo@localhost/ser")
#
#modparam("acc", "db_url", "sql://ser:heslo@localhost/ser")
#modparam("acc", "db_flag", 2)
#modparam("acc", "db_missed_flag", 2)
#
# ------------------------- request routing logic -------------------
#
# main routing logic
#
alias=10.10.10.49 #sip server IP address
alias=jiffypop #sip server name
alias=mydomain.com #sip domain/realm
alias=jiffypop.mydomain.com #sip server FQDN
#
route{
log(1,"entering main route");
#prevent strangers from claiming to belong to our domain;
#if sender claims to be in our domain in From header field,
#better authenticate him
# code not inserted yet :)
# 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;
};
setflag(2); #set flag for accounting
# 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") {
# digest authentication
log(1,"request for registration");
if (!www_authorize("mydomain.com", "subscriber")) {
www_challenge("mydomain.com", "0");
break;
};
save("location");
break;
};
/* ********** Dial out to PSTN logic ************* */
#forward numerical 7 digit requests to gateway
if(uri=~"^sip:[0-9]{7}@(mydomain\.com|10\.10\.10\.49)"){
# append_hf("Remote-Party-ID:<sip:6508466600@mydomain.com>;party=calling;id-type=subscriber;privacy=off;screen=no;\r\n");
rewritehostport("10.10.10.5:5060");
log(1,"7 digit expression match");
route(2);
break;
};
# strip 650 and forward to GW is user dials 650 before phone no.
if(uri=~"^sip:650[0-9]{7}@(mydomain\.com|10\.10\.10\.49)"){
strip(3);
rewritehostport("10.10.10.5:5060");
log(1,"650 area code dialed, 650 stripped");
route(2);
break;
};
#forward numerical 10 digit requests to gateway, append a 1 first
if(uri=~"^sip:[0-9]{10}@(mydomain\.com|10\.10\.10\.49)"){
prefix("1");
rewritehostport("10.10.10.5:5060");
log(1,"10 digit expression match, prefix 1");
route(2);
break;
};
#forward numerical 11 digit requests that start with a 1 to GW
if(uri=~"^sip:1[0-9]{10}@(mydomain\.com|10\.10\.10\.49)"){
rewritehostport("10.10.10.5:5060");
log(1,"10 digit exp match w/leading 1");
route(2);
break;
};
#forward international N digit requests to gateway
if(uri=~"^sip:011[0-9]+@(mydomain\.com|10\.10\.10\.49)"){
rewritehostport("10.10.10.5:5060");
log(1,"international expression match");
route(2);
break;
};
/* ********** VOICEMAIL logic ************* */
if (uri=~"^sip:voicemail\+@"){
t_newtran();
t_reply("100", "Trying -- just a second");
if(!vm("/tmp/am_fifo","announcement")){
t_reply("500", "SEMS error");
};
log(1,"sip:voicemail uri match");
break;
};
/* ****** Find Aliases and Locations of users ********* */
# It is very important to lookup "aliases" before looking up "locations"
if(!lookup("aliases")){
log(1,"Couldn't find any matching alias");
sl_send_reply("404", "User does not exist");
break;
};
if(!lookup("location")) {
log(1,"unable to locate user");
route(3);
break;
};
};
# forward to current uri now; use stateful forwarding; that
# works reliably even if we forward from TCP to UDP
t_on_failure("1");
if (!t_relay()) {
sl_reply_error();
};
log(1,"eof");
}
route[2]{
log(1,"route[2]:SIP-to-PSTN call routed");
if(!t_relay()){
sl_reply_error();
};
}
route[3]{
log(1,"route[3]: voicemail processing");
if(method=="INVITE" || method=="ACK"){
log(1,"1st if entered in route[3] *vm*");
t_newtran();
t_reply("100","Trying -- just a second");
if(!vm("/tmp/am_fifo","voicemail")){ # "announcement" was replaced with "voicemail"
log(1,"vm module called and failed");
t_reply("500", "SEMS error");
};
break;
};
log(1,"end of route[3], 1st if check not entered");
}
failure_route[1]{
log(1,"failure_route[1]:jump to vm processing");
route(3);
# break;
}
Jiri,
That would be great. When this is done, would you be able to post an
example of the multiple calls so we don't have to bug you about it
again?
------------------------------------------------------------------------
---
If you want failure_route to be evoked only for some calls, then
set t_on_failure_route for such. You already do so in your script,
don't you?
There is other problem though -- the failure_route logic for VM should
be different
from that in route block -- you can't create transaction state two times
(first time with t_relay, second time with t_newtran). SER will
certainly
complain with some error message in your logs.
I will introduce some new command which hides details of transaction
processing
from script writers and can be used from both route[] and
failure_route[].
(I didn't think of it before since I used voicemail on some other
machine
than proxy server.)
-jiri
>
>Thanks,
>G.
>
>
>Do you Yahoo!?
><http://shopping.yahoo.com/?__yltc=s%3A150000443%2Cd%3A22708228%2Cslk%3
Atext%2Csec%3Amail>The New Yahoo! Shopping - with improved product
search
>#
># $Id: ser.cfg,v 1.20 2003/05/31 21:12:19 jiri Exp $
>#
># simple quick-start config script
>#
>
># ----------- global configuration parameters ------------------------
>
>debug=3 # debug level (cmd line: -dddddddddd)
>fork=yes
>log_stderror=no # (cmd line: -E)
>
>/* Uncomment these lines to enter debugging mode
>debug=8
>fork=no
>log_stderror=yes
>*/
>
>check_via=no # (cmd. line: -v)
>dns=no # (cmd. line: -r)
>rev_dns=no # (cmd. line: -R)
>port=5060
>children=4
>fifo="/tmp/ser_fifo"
>sip_warning=no
>#
># ------------------ module loading ----------------------------------
>#
># Uncomment this if you want to use SQL database
>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/vm.so"
>loadmodule "/usr/local/lib/ser/modules/pa.so"
>loadmodule "/usr/local/lib/ser/modules/msilo.so"
>loadmodule "/usr/local/lib/ser/modules/acc.so"
>loadmodule "/usr/local/lib/ser/modules/textops.so"
>#
>#loadmodule "/usr/local/lib/ser/modules/nathelper.so"
>#loadmodule "/usr/local/lib/ser/modules/uri.so"
>#loadmodule "/usr/local/lib/ser/modules/group.so"
>#
># Uncomment this if you want digest authentication
># mysql.so must be loaded !
>loadmodule "/usr/local/lib/ser/modules/auth.so"
>loadmodule "/usr/local/lib/ser/modules/auth_db.so"
>#
># ----------------- setting module-specific parameters ---------------
>#
># -- usrloc params --
>#
>#modparam("usrloc", "db_mode", 0)
>#
># Uncomment this if you want to use SQL database
># for persistent storage and comment the previous line
>modparam("usrloc", "db_mode", 2)
>#
># -- auth params --
># Uncomment if you are using auth module
>#
>modparam("auth_db", "calculate_ha1", yes)
>#
># If you set "calculate_ha1" parameter to yes (which true in this
config),
># uncomment also the following parameter)
>#
>modparam("auth_db", "password_column", "password")
>#
>#
>modparam("acc", "log_level", 1)
>modparam("acc", "log_flag", 2)
>modparam("acc", "log_missed_flag", 2)
>modparam("acc", "log_fmt", "fimos")
>#
>#modparam("tm", "fr_inv_timer", 35) #INVITE timeout
>#modparam("tm", "fr_timer", 30) #negative INVITE replay or no
> #final reply for a request for ACK
>#
>modparam("voicemail", "db_url", "sql://ser:heslo@localhost/ser")
>#
>#modparam("acc", "db_url", "sql://ser:heslo@localhost/ser")
>#modparam("acc", "db_flag", 2)
>#modparam("acc", "db_missed_flag", 2)
>#
># ------------------------- request routing logic -------------------
>#
># main routing logic
>#
>alias=10.10.10.49 #sip server IP address
>alias=jiffypop #sip server name
>alias=mydomain.com #sip domain/realm
>alias=jiffypop.mydomain.com #sip server FQDN
>#
>route{
> log(1,"entering main route");
> #prevent strangers from claiming to belong to our domain;
> #if sender claims to be in our domain in From header field,
> #better authenticate him
> # code not inserted yet :)
>
> # 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;
> };
>
> setflag(2); #set flag for accounting
>
> # 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") {
> # digest authentication
> log(1,"request for registration");
> if (!www_authorize("mydomain.com",
"subscriber")) {
> www_challenge("mydomain.com", "0");
> break;
> };
> save("location");
> break;
> };
>
>/* ********** Dial out to PSTN logic ************* */
>
> #forward numerical 7 digit requests to gateway
>
if(uri=~"^sip:[0-9]{7}@(mydomain\.com|10\.10\.10\.49)"){
>#
append_hf("Remote-Party-ID:<sip:6508466600@mydomain.com>;party=calling;i
d-type=subscriber;privacy=off;screen=no;\r\n");
> rewritehostport("10.10.10.5:5060");
> log(1,"7 digit expression match");
> route(2);
> break;
>
> };
> # strip 650 and forward to GW is user dials 650 before
phone no.
>
if(uri=~"^sip:650[0-9]{7}@(mydomain\.com|10\.10\.10\.49)"){
> strip(3);
> rewritehostport("10.10.10.5:5060");
> log(1,"650 area code dialed, 650 stripped");
> route(2);
> break;
>
> };
> #forward numerical 10 digit requests to gateway, append
a 1 first
>
if(uri=~"^sip:[0-9]{10}@(mydomain\.com|10\.10\.10\.49)"){
> prefix("1");
> rewritehostport("10.10.10.5:5060");
> log(1,"10 digit expression match, prefix 1");
> route(2);
> break;
> };
> #forward numerical 11 digit requests that start with a
1 to GW
>
if(uri=~"^sip:1[0-9]{10}@(mydomain\.com|10\.10\.10\.49)"){
> rewritehostport("10.10.10.5:5060");
> log(1,"10 digit exp match w/leading 1");
> route(2);
> break;
> };
> #forward international N digit requests to gateway
>
if(uri=~"^sip:011[0-9]+@(mydomain\.com|10\.10\.10\.49)"){
> rewritehostport("10.10.10.5:5060");
> log(1,"international expression match");
> route(2);
> break;
> };
>
>/* ********** VOICEMAIL logic ************* */
>
> if (uri=~"^sip:voicemail\+@"){
> t_newtran();
> t_reply("100", "Trying -- just a second");
> if(!vm("/tmp/am_fifo","announcement")){
> t_reply("500", "SEMS error");
> };
> log(1,"sip:voicemail uri match");
> break;
> };
>/* ****** Find Aliases and Locations of users ********* */
>
># It is very important to lookup "aliases" before looking up
"locations"
>
> if(!lookup("aliases")){
> log(1,"Couldn't find any matching alias");
> sl_send_reply("404", "User does not exist");
> break;
> };
>
> if(!lookup("location")) {
> log(1,"unable to locate user");
> route(3);
> break;
> };
>
> };
>
>
> # forward to current uri now; use stateful forwarding; that
> # works reliably even if we forward from TCP to UDP
> t_on_failure("1");
> if (!t_relay()) {
> sl_reply_error();
> };
> log(1,"eof");
>}
>
>route[2]{
> log(1,"route[2]:SIP-to-PSTN call routed");
> if(!t_relay()){
> sl_reply_error();
> };
>}
>
>route[3]{
> log(1,"route[3]: voicemail processing");
> if(method=="INVITE" || method=="ACK"){
> log(1,"1st if entered in route[3] *vm*");
> t_newtran();
> t_reply("100","Trying -- just a second");
> if(!vm("/tmp/am_fifo","voicemail")){ # "announcement"
was replaced with "voicemail"
> log(1,"vm module called and failed");
> t_reply("500", "SEMS error");
> };
> break;
> };
> log(1,"end of route[3], 1st if check not entered");
>}
>
>failure_route[1]{
> log(1,"failure_route[1]:jump to vm processing");
> route(3);
># break;
>}
>
>_______________________________________________
>Serusers mailing list
>serusers(a)lists.iptel.org
>http://lists.iptel.org/mailman/listinfo/serusers
--
Jiri Kuthan http://iptel.org/~jiri/
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers
Приглашаем руководителей и специалистов по маркетингу принять
участие в актуальном семинаре:
"МАРКЕТИНГ УСЛУГ"
29-30 сентября 2003 года
Услугу нельзя пощупать. Поэтому покупатель услуги должен обязательно доверять продавцу.
Этот и другие факторы делают работу на рынке услуг весьма специфичной. Нельзя забывать,
что торговля вообще - тоже услуга.
Основная цель - дать участникам необходимый набор знаний для организации маркетинговой
деятельности на рынке услуг.
В программе семинара:
СУЩНОСТЬ И КОНЦЕПЦИЯ МАРКЕТИНГА УСЛУГ.
· Специфика российского маркетинга услуг.
· Ассортиментная политика в сфере услуг.
· Организация контроля качества услуги.
ОРГАНИЗАЦИЯ СБОРОРА И АНАЛИЗА ВТОРИЧНОЙ ИНФОРМАЦИИ НА РЫНКЕ УСЛУГ.
· Порядок сбора вторичных маркетинговых данных.
· Составление гипотезы целевого рынка потребителей услуг.
· Анализ конкурентов.
ОСНОВЫ МАРКЕТИНГОВЫХ ИССЛЕДОВАНИЙ НА РЫНКЕ УСЛУГ.
· Виды и инструменты маркетинговых исследований.
· Как составить анкету для опроса.
· Оценка полученных результатов.
СЕГМЕНТАЦИЯ, ПОЗИЦИОНИРОВАНИЕ И РАЗРАБОТКА КОНЦЕПЦИИ УСЛУГИ.
· Виды сегментирования рынка услуг.
· Методики позиционирования.
· Разработка концепции услуги.
ПРОДВИЖЕНИЕ НА РЫНКЕ УСЛУГ.
· Реклама на рынке услуг.
· Стимулирование сбыта на рынке услуг.
· Ценообразование на рынке услуг.
Ведущий семинара, имеющий большой опыт управления маркетингом в сфере страховых,
образовательных и других услуг, объяснит как строить свою деятельность на рынке услуг,
в чем маркетинговая специфика такой деятельности, откроет секреты успешных
маркетинговых ходов,
расскажет о специфике маркетинга фирм "b2b", "b2c", познакомит с возможностями рынка
Интернет - услуг.
Звоните нам по телефону: (095) 258-51-84
Some media servers want request URIs like
sip:ivr@bla.de;play=file:////fasel/blubb.wav
which SER is "regretfully is not able to handle". Thanks
to Open Source, I was quickly able to find a workaround
by inserting the port number, like in
sip:ivr@bla.de:5060;play=file:////fasel/blubb.wav
parser/parse_uri.c takes the first colon as beginning
of the port number and balks at '////'.
My SER version (8.8) is quite outdated. If the error has
already been fixed, ignore this message. I did not find it
in the 'issues' list, though.
--
Wolfgang Beck
T-Systems Nova GmbH
Hi,
I tried to use MSN Messenger 6.0 on windows 2000 with ser. I went through
http://www.iptel.org/ser/doc/jabgw/use_msn.html , but at step C my
messenger only .NET passport, it doesn't have Communications Service
option? Is this "Communications Service" option only available on XP?
Thanks!
Dong