[reSIProcate] 100rel and digest authentication
Hi there,
I've encountered the following scenario, using the resiprocate stack alone
(without DUM):
I send an INVITE (WITHOUT an Authorization header, but WITH a Supported:
100rel) and get back a 401 response. OK. The 401 response also includes
"Supported: 100rel".
When resiprocate receives this 401 response, it decides to send an ACK and
terminate the transaction. I believe the responsible code is in
TransactionState.cxx, method processClientInvite():
else if (code >= 300)
{
// When in either the "Calling" or "Proceeding" states,
reception of a
// response with status code from 300-699 MUST cause the
client
// transaction to transition to "Completed".
if (mIsReliable)
{
// Stack MUST pass the received response up to the TU, and
the client
// transaction MUST generate an ACK request, even if the
transport is
// reliable
SipMessage* invite = mMsgToRetransmit;
mMsgToRetransmit = Helper::makeFailureAck(*invite, *sip);
delete invite;
// want to use the same transport as was selected for
Invite
assert(mTarget.getType() != UNKNOWN_TRANSPORT);
sendToWire(mMsgToRetransmit);
sendToTU(msg); // don't delete msg
terminateClientTransaction(mId);
delete this;
}
else
{
...
}
My question is: where's the bug here? I think I'm using 100rel correctly,
but maybe not. Any advice would be appreciated.
Thanks,
- Jeremy -
Jeremy Geras
Software Developer,
NewHeights Software
jgeras@xxxxxxxxxxxxxx