Juha Heinanen wrote:
Greg Fausak writes:
It seems to me that the ser proxy is responding
to the cancel with
a 487. If I had to make it come from the far end can that be
accomplished with ser?
ser is not responding to cancel with 487. response to cancel is 200
canceling. 487 is sent by uas when it receives a cancel to an invite to
which it has not yet sent a final response.
now the question is what is the proper thing for statefull ser to do,
when uac cancels an invite which is forked by ser to multiple
destinations and some of the branches have already responded with final
non 2xx reply.
The behavior is defined in 3261 section 16.7, item 6 (page 110). It also
states clearly: "3-6xx responses are delivered hop-by-hop."
regards
klaus
currently in failure route ser.cfg sees the lowest
numbered reply
whereas ser itself responds to uac with 200 canceling and then with 487.
in my opinion this makes no sense, because it makes failure route think
that a uas was, for example, busy and acts accordingly. a better
behavior would be if also failure route would see 487 as the final
reply.
i'm currently experimenting with the following change to t_reply.c
t_pick_branch to solve this problem:
for ( b=t->first_branch; b<t->nr_of_outgoings ; b++ ) {
/* "fake" for the currently processed branch */
if (b==inc_branch) {
if (inc_code == 487) {
lowest_b=b;
lowest_s=inc_code;
break;
}
if (inc_code<lowest_s) {
lowest_b=b;
lowest_s=inc_code;
}
continue;
}
...
-- juha