[OpenSER-Devel] [Serdev] Possible bug in the tm module in the presence of packet loss/branches
Dan Pascu
dan at ag-projects.com
Wed Mar 12 11:08:23 CET 2008
On Wednesday 12 March 2008, Jan Janak wrote:
> Dan Pascu wrote:
> > It makes sense, however I still have reservations that accounting is
> > handled as one would expect in this case. While all the approach you
> > details here makes sense from a technical point of view as per RFC
> > requirements, then end user experience is different.
> >
> > Consider the case where I call a number that has a high setup fee,
> > say 5 euros only to connect even if the call duration is 0. While I
> > wait for this call to setup, I receive no provisional reply, so my
> > phone is not ringing. Then I change my mind and hang-up the phone. My
> > end user expectation is that the call was not setup and I have
> > nothing to pay for. But in reality, if there is network packet loss
> > and a scenario like the one described before happens, the call will
> > actually be setup and show up like a 0 second call with a 5 euro
> > price, not as a canceled call.
>
> The same can happen even if you receive a 180 and hangup while the
> phone is ringing. I, as a user, would expect not to be charged, but
> if a 200 OK made it to the server then I would probably see it on my
> bill.
>
That is not the case. If a 200 OK happens to come at the same time with
the CANCEL and there is a race condition and the call does get setup and
charged, I can explain my subscriber that he happened to put the call on
hook at the same time it was answered by the other side and it was just
the fact that it was answered while he was placing it on hook. He can
understand that.
But if I tell my subscriber that he has put the phone on hook effectively
canceling the call, but a 200 OK came out of nowhere 10 seconds later and
did setup a session despite the user indicating it has no intention to
carry on with it, that there was no race condition, but simply the system
ignored his request because there was packet loss and the RFC mandates
that it has to wait for some timers to expire, that he won't understand.
Try to tell your subscribers that your wonderful next generation VoIP
system takes away their ability to cancel a call, that it may randomly
(based on network packet loss) decide to setup a call at a later time
despite the user canceling it, and do this based not on an understandable
race condition situations, but on purpose, and see how many of them would
want to use your system.
The new issue that is introduced by this approach is that it takes away
control from the user when canceling the call. There is a fundamental
difference between a canceled call and a call that is answered and closed
immediately. If that would have not been the case, then this would have
not been an issue, but unfortunately it is. And the feeling a user has
from the system behaving under these (RFC conforming) rules, is that it
doesn't matter that he decided to cancel the call, the system may still
decide to go through with it, not based on some race condition, but on
purpose.
> So the race condition is there in anyway. If you want to be just to
> your users then you probably should charge the high setup fee only if
> the call took at least a few seconds.
All these workarounds do not address the real problem (the fact that my
ability to cancel a call is taken away) and they may not even help (see
below).
>
> Seeing a high setup fee on your bill and a call duration of 0 looks
> strange in any case, no matter what was going on in signalling.
That's my point exactly. But we are operating here under the assumption
that we have packet loss. Which means that the BYE may not go trough
immediately, but will also start a series of retransmissions and in the
end the call will appear to have taken a few seconds.
--
Dan
More information about the Devel
mailing list