Hi Everyone,
I am trying to implement Serial Forking (Find Me Follow Me) where an IVR
message
is played out before call forwarding (t-relaying of calls) is initiated.
My implementation is as follows:
1. Main dialed number is tried.
2. When the callee does not pick up the call, a timeout occurs
3. Upon timeout, I want to forward the call to an IVR to play the
audio message:
"The party you are trying to reach is not answering. You will be
forwarded to their secondary numbers. please wait."
4. After the message is played out, the call is forwarded to the
callee's first FindMeFollowMe number
5. If there is no answer at the forwarded number, call is forwarded
to the callee's next FindMeFollowMe number
6. if there is no answer at the callee's last FindMeFollowMe
number, the call is forwarded to the callee's voicemail
The problem I am having is that at step 4, after the message is played
out by the asterisk IVR
successfully, a BYE message is sent by asterisk IVR to SER. In SER, I
catch the BYE SIP
message and then try to execute a "t_relay" to forward the call to the
callee's first FindMeFollowMe
number. But, t_relay generates this error:
12(20843) ERROR: t_newtran: transaction already in process 0xb5468b38^M
12(20843) route[2]: t_relay failed^M
12(20843) route[2]: sl_reply_error executed^M
12(20843) ERROR: sl_reply_error used: I'm terribly sorry, server error
occurred (1/SL)^M
I read the following section from "iptel.org SIP Express Router v0.11.0
-- Admin's Guide"
(http://www.iptel.org/ser/doc/seruser/seruser.html#AEN1078):
3.3.6. I receive "ERROR: t_newtran: transaction already in process" in
my logs.
That looks like an erroneous use of tm module in script. tm can handle
only one transaction per request. If you attempt to instantiate a
transaction multiple times, ser will complain. Anytime any of t_newtran,
t_relay or t_relay_to_udp actions is encountered, tm attempts to
instantiate a transaction. Doing so twice fails. Make sure that any of
this commands is called only once during script execution.
And my understanding was that because the first call that I had
forwarded to the Asterisk IVR at step 3 had not been terminated,
and therefore its associated transaction still existed, SER did not
allow the creation of a new transaction through the invocation of
t_relay. And Asterisk continuously retransmitted the BYE message to SER.
My question is : How can terminate the connection that was set up to
Asterisk IVR at step 3 successfully before
Initiating the first call forward at step 4? I tried sending SIP 200
(OK) responses from SER back to Asterisk IVR,
in response to the BYE requests SER receives from it, to force Asterisk
IVR to terminate the connection but it
doesn't seem to work?! I sent these responses back using sl_send_reply
and t_reply. I tried t_release() instead
of sending 200 (OK) SIP response back to Asterisk but that didn't
terminate the call either!
Can anyone suggest any solutions?
Thanks
Ramin
rnikaeen(a)goldline.net
Hi!
I've configured openser to listen on a ceratin IP address.
listen=83.xxx.32.83:5060
Nevertheless, if t_relay tries to sned via TCP, openser opens the TCP
connection from the default interface.
I also tried
force_send_socket(tcp:83.xxx.32.83:5060);
with the same results.
Are there any known problems? IMO openser should always use the IP
address on which it listens.
regards
klaus
hello
i am using following
http://www.voip-info.org/tiki-index.php?page=SER+example+NAThelper
when i use serctl ul show it is showing me that that
my user Agent is registered but My SJphone is still
showing not registered.
SER is on public IP and SJPhone is on private IP what
could be the reason same configuration was working in
my previous installation of ser on other mechine.
ANY COMMENTS
#my ser.cfg
#
# $Id: ser.cfg,v 1.21 2003/06/04 13:47:36 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=7
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"
alias=mydomain.dyndns.org
# ------------------ module loading
----------------------------------
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/textops.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"
# ----------------- setting module-specific
parameters ---------------
# -- usrloc params --
modparam("usrloc", "db_mode", 0)
# -- rr params --
# add value to ;lr param to make some broken UAs
happy
modparam("rr", "enable_full_lr", 1)
# ------------------------- 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;
};
# 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;
};
# 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") {
save("location");
break;
};
# native SIP destinations are handled using our
USRLOC DB
if (!lookup("location")) {
sl_send_reply("404", "Not Found");
break;
};
};
#inserted by klaus
if (method=="INVITE") {
record_route();
force_rtp_proxy();
/* set up reply processing */
t_on_reply("1");
};
# 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();
};
}
#inserted by klaus
# all incoming replies for t_onrepli-ed transactions
enter here
onreply_route[1] {
if (status=~"[12][0-9][0-9]")
force_rtp_proxy();
}
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
i would like to add a new user in the server using mysql .. i dont have
much about mysql, when i give the command serctl add <username>
<passwd> <email> its returns to mysql passward> buti havent give any
password in the database .. Is ther any default password already exist ?
if so whatz that ?
Hi
I'm in need of some help using the schemes with AVPops!
What I would like to do, is extract a value from the coloum:username in
table:aliases, matched by a specific user.
First of all I'm uncertain of how to create such a scheme and match it
with a specific user, and second of all, can I push this in to the
header as a P-Asserted-Identity?
And I'm not mistaken, when I under the impression thatI dont need to
create a AVP table for this, am I?
Thank you in advance
Kind regards
Martin
Hello,
To get the username of the caller, I use the following code in my shell
scripts:
POS1=`expr index "$SIP_HF_FROM" : + 1`;
LENGTH=`expr index "$SIP_HF_FROM" @ - $POS1`;
USER=`expr substr "$SIP_HF_FROM" $POS1 $LENGTH`;
Is there any other way to do that? I need to make a query with the username
of the CALLING user...
Thanks!
Sebastian
What is the correct error code number for the error "Relay not allowed",
that is a request that isn't either FROM neither TO an user of ours?
I'm undecided between "403 Forbidden" and "502 Bad Gateway".
What do you think?
Thanks.
--
___________________________________________________
__
|- giannici(a)neomedia.it
|ederico Giannici http://www.neomedia.it
___________________________________________________
hi,
there are some variables to get fields from SIP header with SER like
SIP_ORUI to get the "TO" field or SIP_HF_FROM to get the "FROM" field
but i'm looking for a mean to get the body of the SIP message...
do someone know how can i do it?
best regards,
Michael