Here is how I solve this.
In Asterisk, I add a SIP header just before sending it to OpenSER using the function: SipAddHeader(P-hint: From Asterisk).
Then, in OpenSER I have the following:
# check to see if user is online
if (!lookup("location")) {
# SIP from Asterisk or not a call attempt
if (search("(P-hint):.From Asterisk") || !(method==INVITE)) {
sl_send_reply("480","User Temporarily Unavailable");
exit;
} else {
route(2);
exit;
};
};
route[2] {
# Let Asterisk deal with voicemail/forward
sl_send_reply("181", "Forward to Voicemail");
prefix("vm");
setflag(9); # forward to Asterisk
route(1);
}
Hi everybody,
I'm using Opeser as Proxy and one Asterisk as Gateway and Voicemail server.
Suppose that an incoming calls arrives to Ser from Asterisk and the user
is offline;
Then Openser sends back the Invite to Asterisk that should activate the
voicemail application but
unfortunately it detects a Loop (482) and rejects the invite.
I think I have to mangle the SIP message in Openser before the send to
Asterisk again.
This is what I currently do:
if(!lookup("location"))
{
#send to voicemail if active but not registerd
xlog("L_INFO", "Local user offline - M=$rm RURI=$ru F=$fu T=$tu
IP=$si ID=$ci\n");
if($avp(s:vmail) == "1")
{
route(11);
}
else
{
route(20);
}
}
else
{
xlog("L_INFO", "Local user online - M=$rm RURI=$ru F=$fu T=$tu
IP=$si ID=$ci\n");
route(9);
}
exit;
....
route[11]
{
xlog("L_INFO", "Forwarding request to VM\n");
prefix("vm");
sethostport("asterisk-gw:5060");
#append_branch();
if (!t_relay())
{
xlog("L_INFO", "Unable TO Forward the request to VM\n");
route(20);
exit;
}
What can I do to avoid Loop Detection?
Thanks in advance,
Cosimo Fadda
___________
_______________________________________________
Users mailing list
Users@lists.openser.org
http://lists.openser.org/cgi-bin/mailman/listinfo/users