Juha Heinanen wrote:
Timo Reimann writes:
That will definitely break the single-dialog
approach. However, one could
work around this by introducing a counter to dialogs which is incremented
for each re-seen, unconfirmed request and decremented when responses are
forwarded (i.e., when the dialog module calls dlg_onreply()). There, the
dialog's state wouldn't be modified unless the counter drops to zero.
if you don't like two dialogs, why not just do not call the dialog
functions when request spirals to P1 the second time?
By "dialog functions", do you mean the dialog module-internal ones that
manage dialogs or the dialog callback functions?
In case of the former: My custom patch does exactly that: If a spiral is
detected, skip calls to internal functions that would otherwise create a
new dialog. That's how my notion of dialog continuation works but as
Ovidiu showed, it breaks stuff in certain scenarios (which should be
solved by using a counter just like I proposed).
In case of the latter (and assuming that the former isn't done): From a
dialog callback user's perspective, you cannot easily tell whether a
call is spiraling or is a "real" new call without keeping additional
state (e.g., "have I seen this call before?"). That's the main reason
why I think multiple dialogs are troublesome.
Cheers,
--Timo