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