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);
}



On Thu, Apr 3, 2008 at 12:50 AM, Cosimo Fadda <cosimo.fadda@klarya.it> wrote:
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