Hi Juha,
On 06.10.10 07:52, Juha Heinanen wrote:
Raphael Coeffic writes:
Parallel forking is somehow more complex, due to the fact that SEMS
supports only one SIP dialog per session. This means that SEMS does not
behave correctly if the INVITE is forked later on (for example using a
SIP proxy).
raphael,
my call center app has not control on if outbound proxy forks the call
or not. when its onOtherReply function receives a 1xx reply, it simply
resets its provisional reply timer and returns.
are you saying that it does not work if it receives an early dialog
reply (eg. 180 or 183) from many UAs? if not, then i consider it a
bug in sems.
What will happen at the moment is that all provisional replies will be
passed to the session, whereby the first positive final reply will lock
the dialog. Any further reply (any type; containing either another
to-tag, or no to-tag) will be simple ignored, thus causing the remote
UAS' ACK timer to expire (or PRACK timer, if PRACK is used).
I won't play with words, but I do not consider it to be a bug, as I
never expected the code to work differently. But I will second you in
considering that SEMS should handle the case more nicely.
Now the question is: how should this be handled:
- first possibility: SEMS should wait for a positive final reply and
BYE the other dialogs. The issue is that some phones do not support BYE
in early state. CANCEL is not an option in such a case, as it would
cancel all the dialogs resulting from the forking (could be confusing
for some UAs).
- second possibility: SEMS should create a new dialog/session for each
different to-tag, and let the app choose which dialog(s) to pick. This
is much more challenging, as we have to either: support multiple dialog
per session, or create sessions on the fly and connect them back to the
caller session or conference status.
At the end, we might even need both possibilities, to be able cover all
types of applications.
To be able to support that, we can either:
- modify the Am*Session classes to support multiple sip dialogs,
- or, create one session instance per dialog and keep there a list of
the other sessions (just like AmB2BSession does, but with more sessions).
The first option would probably allow for simpler application
programming, as you could directly access the other dialogs' pointers.
But in my opinion, the second option would be better suited for your
scenario, and would allow for merging calls as well, as described in
earlier emails.
i don't care how it is done as long my ivr app does not need to know
anything about it, i.e., the complexity is hidden in the wrapper. the
only thing this kind of simple app cares about is if it receives a 200
ok before its final reply timer hits.
Does that mean that you would prefer the first possibility as described
above?
-Raphael.
_______________________________________________
Sems mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/sems