/[resiprocate]/branches/resiprocate-1.8/resip/stack/TransactionState.cxx
ViewVC logotype

Diff of /branches/resiprocate-1.8/resip/stack/TransactionState.cxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 10013 by sgodin, Tue Sep 18 15:49:52 2012 UTC revision 10014 by dpocock, Fri Feb 22 21:31:46 2013 UTC
# Line 687  Line 687 
687              {              {
688                 // Maybe respond if a request?                 // Maybe respond if a request?
689                 delete sip;                 delete sip;
690                 return;                 return;
691              }              }
692              break;              break;
693           default:           default:
694              if(state->mMethod != method)              if(state->mMethod != method)
695              {              {
696                 // Maybe respond if a request?                 // Maybe respond if a request?
697                 delete sip;                 delete sip;
698                 return;                 return;
699              }              }
700              break;              break;
701        }        }
702    
703          // .bwc. in private email 1 Feb 2013:
704          // According to the spec, there is no such thing as a reliable NIT
705          // retransmission; what we have just observed is a transaction id collision
706          // technically. Maybe a reliable NIT transaction collision needs special
707          // handling? It is probably a lot more common that this is a confused client,
708          // than a client that has innocently used the same tid as some other client,
709          // though. Maybe we should just ignore such requests?
710          if(sip->isExternal() && sip->isRequest() &&
711             method != ACK &&
712             state->mIsReliable)
713          {
714             InfoLog(<<"Someone sent us a request with a repeated transaction ID "
715                         "over a reliable transport.  Discarding the request.");
716             delete sip;
717             return;
718          }
719     }     }
720    
721     if (state) // found transaction for sip msg     if (state) // found transaction for sip msg
722     {     {
723        StackLog (<< "Found matching transaction for " << message->brief() << " -> " << *state);        StackLog (<< "Found matching transaction for " << message->brief() << " -> " << *state);
724    
725        switch (state->mMachine)        switch (state->mMachine)
726        {        {
727           case ClientNonInvite:           case ClientNonInvite:
728              state->processClientNonInvite(message);              state->processClientNonInvite(message);
729              break;              break;
730           case ClientInvite:           case ClientInvite:
731              // ACK from TU will be Stateless              // ACK from TU will be Stateless
732              assert (!sip || !(state->isFromTU(sip) &&  sip->isRequest() && method == ACK));              assert (!sip || !(state->isFromTU(sip) &&  sip->isRequest() && method == ACK));
733              state->processClientInvite(message);              state->processClientInvite(message);

Legend:
Removed from v.10013  
changed lines
  Added in v.10014

webmaster AT resiprocate DOT org
ViewVC Help
Powered by ViewVC 1.1.26