Hi,

Based on the discussion in the sprint meeting today, I'd like to change the 
stack behavior to echo record-routes in all responses by default. Any 
objections?

Thanks,

Arjun 

REF: http://track.sipfoundry.org/browse/XECS-1624
diff --git a/sipXtackLib/include/net/SipMessage.h 
b/sipXtackLib/include/net/SipMessage.h
index c28ff4a..2ce3dc5 100644
--- a/sipXtackLib/include/net/SipMessage.h
+++ b/sipXtackLib/include/net/SipMessage.h
@@ -687,7 +687,8 @@ public:
     void setResponseData(const SipMessage* request,
                          int responseCode,
                          const char* responseText,
-                         const char* localContact = NULL);
+                         const char* localContact = NULL,
+                         UtlBoolean echoRecordRoute = TRUE);
 
     void setResponseData(int statusCode, const char* statusText,
                          const char* fromAddress,
diff --git a/sipXtackLib/src/net/SipMessage.cpp 
b/sipXtackLib/src/net/SipMessage.cpp
index 981101a..0a8dfb1 100644
--- a/sipXtackLib/src/net/SipMessage.cpp
+++ b/sipXtackLib/src/net/SipMessage.cpp
@@ -1355,7 +1355,8 @@ UtlBoolean SipMessage::verifyMd5Authorization(const char* 
userId,
 void SipMessage::setResponseData(const SipMessage* request,
                          int responseCode,
                          const char* responseText,
-                         const char* localContact)
+                         const char* localContact,
+                         UtlBoolean echoRecordRoute)
 {
    setInterfaceIpPort(request->getInterfaceIp(), request->getInterfacePort()) ;
    UtlString fromField;
@@ -1374,6 +1375,21 @@ void SipMessage::setResponseData(const SipMessage* 
request,
                sequenceNum, sequenceMethod.data(), localContact) ;
 
    setViaFromRequest(request);
+   
+   // If this is a response for a Request that Record-Routes are accepted,
+   // then echo the Record-Routes in the Response
+   if(echoRecordRoute &&
+      request->isRecordRouteAccepted())
+   {
+      UtlString recordRouteField;
+      int recordRouteIndex = 0;
+      while(request->getRecordRouteField(recordRouteIndex,
+              &recordRouteField))
+      {
+         setRecordRouteField(recordRouteField.data(), recordRouteIndex);
+         recordRouteIndex++;
+      }
+   }
 }
 
 void SipMessage::setAckData(const char* uri,
_______________________________________________
sipx-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipx-dev
Unsubscribe: http://list.sipfoundry.org/mailman/listinfo/sipx-dev

Reply via email to