Subject: Forking, BYE

From: Henning Schulzrinne <[email-masked]>
Date: Wed, 08 Apr 1998 14:24:21 -0400

Problem: Proxy receives a 200 or 600 and forwards it upstream. It now
wants to cancel all pending searches. Sending a BYE may (through other
proxies) reach the one that just picked up the phone. [We avoided half
of this problem by forwarding multiple 200s to the client.]

Solution 1: Don't cancel; just wait until the branch responds and either
forward (200) or ACK (all others).

Solution 2: Add a random (i.e., globally unique) "branch" identifier to
the Call-ID. Something like

 Call-ID: 17 ;branch=18383

Each fork creates a new branch identifier and maps incoming BYEs to all
outgoing branches. If a proxy or user agent accepted an INVITE (with
200) with a particular branch-id, ignore BYEs that have a different ID.
BYEs without branch-id cancel the (pending) call, on all branches.

Solution 3: Introduce a new CANCEL method, with somewhat similar
behavior as Solution 2: If call has been accepted, ignore CANCEL (but
obviously acknowledge it), otherwise forward and cancel search. (This is
related, I believe, to something that Eve suggested doing for pending
calls.)