[Freeswitch-users] Un-Subscribing on 481

Joseph Barrero joe at expert.net
Fri Mar 12 04:14:19 UTC 2021

Hi, everyone.

I recently noticed that Freeswitch continues sending NOTIFY messages even
after receiving a 481 from my proxy after not being able to deliver the
messages to the UA.  This seems to happen when the UA disconnects from the
Internet briefly and registers again before the previous subscription

Below is the code I found in sofia.c that seems to handle the 481 response.

if (status == 481 && sip && !sip->sip_retry_after && sip->sip_call_id &&
(!sofia_private || !sofia_private->is_call)) {
        char *sql;

        sql = switch_mprintf("delete from sip_subscriptions where
call_id='%q'", sip->sip_call_id->i_id);
        switch_assert(sql != NULL);
        sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE);

Assuming that the variable sofia_private->is_call evaluates to true when
NOTIFY messages are sent during a call, it seems to curtail the removal of
the SUBSCRIPTION even after receiving a 481 from the proxy.

Is there a drawback to removing a subscription on a 481 response during a
call?  Would it make sense to simply remove the check if there is a call in
place? Is checking ofia_private->is_call there for another purpose?

Joe Barrero
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20210311/2c3a9f2c/attachment.html>

More information about the FreeSWITCH-users mailing list