You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When a SIP call is forked, the client will send an INVITE with the
same Call ID and same From tag as an earlier INVITE, but with a
different Branch ID in the topmost Via header.
There were two issues with sofia-sip which prevented call forking from
working; first, its logic for merging SIP requests (as per RFC3261
section 8.2.2.2) did not respect the Branch ID. It would merge requests
with a different Branch ID, which is contrary to RFC3261 section 17.2.3.
Second, sofia-sip has some logic for checking whether incoming requests
are part of an established SIP dialog or not. The matching criteria
were such that incoming INVITE requests forking a call would be
treated as part of the already established dialog, and then an error
would be returned to the client, essentially telling the client that
this new INVITE is invalid because the call is already established.
Therefore, add some extra matching conditions which ensure that an
INVITE forking a call will not be treated as part of the previously
established call leg. The matching conditions are as specific as
possible, to minimize the chances of unintentionally affecting how
other types of SIP messages are handled.
Implementing these new matching conditions can only be done by
recording the Branch ID for established calls, so we can check whether
another INVITE which comes later has the same Branch ID or a different
one. This requires adding a new member to nta_leg_s.
Co-Authored-By: João Arruda <[email protected]>
0 commit comments