Author: hiranya
Date: Sat May 28 20:52:04 2016
New Revision: 1745938

URL: http://svn.apache.org/viewvc?rev=1745938&view=rev
Log:
Fixing the support for FORCE_HTTP_CONTENT_LENGTH and 
COPY_CONTENT_LENGTH_FROM_INCOMING; Applying the patch from SYNAPSE-923

Modified:
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ClientWorker.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetRequest.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/SourceResponseFactory.java

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ClientWorker.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ClientWorker.java?rev=1745938&r1=1745937&r2=1745938&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ClientWorker.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ClientWorker.java
 Sat May 28 20:52:04 2016
@@ -141,6 +141,10 @@ public class ClientWorker implements Run
             headerMap.put(headerEntry.getKey(), headerEntry.getValue());
         }
         responseMsgCtx.setProperty(MessageContext.TRANSPORT_HEADERS, 
headerMap);
+        if (headerMap.get(HTTP.CONTENT_LEN) != null){
+            
responseMsgCtx.setProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH,
+                    headerMap.get(HTTP.CONTENT_LEN));
+        }
 
         if (response.getStatus() == 202) {
             responseMsgCtx.setProperty(AddressingConstants.

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java?rev=1745938&r1=1745937&r2=1745938&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java
 Sat May 28 20:52:04 2016
@@ -126,4 +126,6 @@ public class PassThroughConstants {
        
        public static final String GET_REQUEST_HANDLED = "GET_REQUEST_HANDLED";
 
+    public static final String 
COPY_CONTENT_LENGTH_FROM_INCOMING="COPY_CONTENT_LENGTH_FROM_INCOMING";
+    public static final String ORIGINAL_CONTENT_LENGTH 
="ORIGINAL_CONTENT_LENGTH";
 }

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java?rev=1745938&r1=1745937&r2=1745938&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java
 Sat May 28 20:52:04 2016
@@ -359,6 +359,20 @@ public class PassThroughHttpSender exten
     }
 
        private void sendRequestContent(final MessageContext msgContext) throws 
AxisFault {
+        // NOTE:this a special case where, when the backend service expects 
content-length but,
+        // we don't want the message to be built. If FORCE_HTTP_CONTENT_LENGTH 
and
+        // COPY_CONTENT_LENGTH_FROM_INCOMING, we assume that the content 
coming from the
+        // client side has not changed.
+        boolean forceContentLength = 
msgContext.isPropertyTrue(NhttpConstants.FORCE_HTTP_CONTENT_LENGTH);
+        boolean copyContentLength = 
msgContext.isPropertyTrue(PassThroughConstants.COPY_CONTENT_LENGTH_FROM_INCOMING);
+
+        if (forceContentLength && copyContentLength &&
+                
msgContext.getProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH) != null) {
+            long contentLength = Long.parseLong((String) 
msgContext.getProperty(
+                    PassThroughConstants.ORIGINAL_CONTENT_LENGTH));
+            
msgContext.setProperty(PassThroughConstants.PASS_THROUGH_MESSAGE_LENGTH, 
contentLength);
+        }
+
                if 
(Boolean.TRUE.equals(msgContext.getProperty(PassThroughConstants.MESSAGE_BUILDER_INVOKED)))
 {
                        synchronized (msgContext) {
                                while 
(!Boolean.TRUE.equals(msgContext.getProperty("READY2ROCK")) &&

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java?rev=1745938&r1=1745937&r2=1745938&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java
 Sat May 28 20:52:04 2016
@@ -477,6 +477,10 @@ public class ServerWorker implements Run
             headers.put(entry.getKey(), entry.getValue());
         }
         msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, headers);
+        if (headers.get(HTTP.CONTENT_LEN) != null){
+            
msgContext.setProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH,
+                    headers.get(HTTP.CONTENT_LEN));
+        }
 
         // Following section is required for throttling to work
         

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetRequest.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetRequest.java?rev=1745938&r1=1745937&r2=1745938&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetRequest.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetRequest.java
 Sat May 28 20:52:04 2016
@@ -163,11 +163,19 @@ public class TargetRequest {
 
             BasicHttpEntity entity = new BasicHttpEntity();
 
-            if (contentLength != -1) {
+            if 
(requestMsgCtx.isPropertyTrue(NhttpConstants.FORCE_HTTP_CONTENT_LENGTH)) {
                 entity.setChunked(false);
-                entity.setContentLength(contentLength);
+                if 
(requestMsgCtx.isPropertyTrue(PassThroughConstants.COPY_CONTENT_LENGTH_FROM_INCOMING)
+                        && contentLength > 0) {
+                    entity.setContentLength(contentLength);
+                }
             } else {
-                entity.setChunked(chunk);
+                if (contentLength != -1) {
+                    entity.setChunked(false);
+                    entity.setContentLength(contentLength);
+                } else {
+                    entity.setChunked(chunk);
+                }
             }
             ((BasicHttpEntityEnclosingRequest) request).setEntity(entity);
            

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/SourceResponseFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/SourceResponseFactory.java?rev=1745938&r1=1745937&r2=1745938&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/SourceResponseFactory.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/SourceResponseFactory.java
 Sat May 28 20:52:04 2016
@@ -29,6 +29,7 @@ import org.apache.synapse.transport.nhtt
 import org.apache.synapse.transport.passthru.SourceRequest;
 import org.apache.synapse.transport.passthru.SourceResponse;
 import org.apache.synapse.transport.passthru.config.SourceConfiguration;
+import org.apache.synapse.transport.passthru.PassThroughConstants;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -46,6 +47,14 @@ public class SourceResponseFactory {
 
         // set any transport headers
         Map transportHeaders = (Map) 
msgContext.getProperty(MessageContext.TRANSPORT_HEADERS);
+
+        if 
(msgContext.isPropertyTrue(NhttpConstants.FORCE_HTTP_CONTENT_LENGTH) &&
+                
msgContext.isPropertyTrue(PassThroughConstants.COPY_CONTENT_LENGTH_FROM_INCOMING)
 &&
+                
msgContext.getProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH) != null) {
+            sourceResponse.addHeader(HTTP.CONTENT_LEN,
+                    (String) 
msgContext.getProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH));
+        }
+
         if (transportHeaders != null) {
             addResponseHeader(sourceResponse, transportHeaders);
         } else {


Reply via email to