< Previous by Date Date Index Next by Date >
  Thread Index Next in Thread >

[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