Revision: 6a67aedfb0fb
Author:   Jean Deruelle <[email protected]>
Date:     Fri Dec 21 03:24:48 2012
Log:      Update Issue 186

Fix committed. Avoiding the cloning for performance reasons and rather resetting the transport back to what it was before any changes could be made by the resolving

http://code.google.com/p/sipservlets/source/detail?r=6a67aedfb0fb

Modified:
/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletRequestImpl.java

=======================================
--- /sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletRequestImpl.java Fri Nov 23 03:34:01 2012 +++ /sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletRequestImpl.java Fri Dec 21 03:24:48 2012
@@ -965,7 +965,7 @@
                        } else {
                                javax.sip.address.URI uriToResolve =  
request.getRequestURI();
RouteHeader routeHeader = (RouteHeader) request.getHeader(RouteHeader.NAME);
-                               if(routeHeader != null) {
+                               if(routeHeader != null) {
                                        uriToResolve = 
routeHeader.getAddress().getURI();
                                } else {
                                        // RFC5626 - see if we are to find a 
flow for this request.
@@ -976,17 +976,32 @@
                                        // up right now...
                                        uriToResolve = 
resolveSipOutbound(uriToResolve);
                                }
-
- if(session.getProxy() == null && session.getTransport() != null && uriToResolve.isSipURI() && ((javax.sip.address.SipURI)uriToResolve).getTransportParam() == null && + String uriToResolveTransport = ((javax.sip.address.SipURI)uriToResolve).getTransportParam();
+                               boolean transportParamModified = false;
+ if(session.getProxy() == null && session.getTransport() != null && uriToResolve.isSipURI() && uriToResolveTransport == null && // no need to modify the Request URI for UDP which is the default transport
                                                
!session.getTransport().equalsIgnoreCase(ListeningPoint.UDP)) {
                                        try {
((javax.sip.address.SipURI)uriToResolve).setTransportParam(session.getTransport());
+                                               transportParamModified = true;
                                        } catch (ParseException e) {
                                                // nothing to do here, will 
never happen
                                        }
                                }
                                Queue<Hop> hops = 
dnsServerLocator.locateHops(uriToResolve);
+                               if(transportParamModified) {
+                                       // Issue 
http://code.google.com/p/sipservlets/issues/detail?id=186
+ // Resetting the transport to what is was before the modification to avoid modifying the route set
+                                       if(uriToResolveTransport == null) {
+ ((javax.sip.address.SipURI)uriToResolve).removeParameter("transport");
+                                       } else {
+                                               try {
+ ((javax.sip.address.SipURI)uriToResolve).setTransportParam(uriToResolveTransport);
+                                               } catch (ParseException e) {
+                                                       // nothing to do here, 
will never happen
+                                               }
+                                       }
+                               }
                                if(hops.size() > 0) {
// RFC 3263 support don't remove the current hop, it will be the one to reuse for CANCEL and ACK to non 2xx transactions
                                        hop = hops.peek();

Reply via email to