Author: asankha
Date: Mon Oct 26 14:10:38 2009
New Revision: 829808

URL: http://svn.apache.org/viewvc?rev=829808&view=rev
Log:
fix for SYNAPSE-231

Modified:
    
synapse/branches/1.3/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
    
synapse/branches/1.3/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java

Modified: 
synapse/branches/1.3/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
URL: 
http://svn.apache.org/viewvc/synapse/branches/1.3/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java?rev=829808&r1=829807&r2=829808&view=diff
==============================================================================
--- 
synapse/branches/1.3/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
 (original)
+++ 
synapse/branches/1.3/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
 Mon Oct 26 14:10:38 2009
@@ -327,6 +327,7 @@
             if (HTTP.CONN_DIRECTIVE.equalsIgnoreCase(headerName) ||
                 HTTP.TRANSFER_ENCODING.equalsIgnoreCase(headerName) ||
                 HTTP.DATE_HEADER.equalsIgnoreCase(headerName) ||
+                HTTP.EXPECT_DIRECTIVE.equalsIgnoreCase(headerName) ||
                 HTTP.SERVER_HEADER.equalsIgnoreCase(headerName) ||
                 HTTP.CONTENT_TYPE.equalsIgnoreCase(headerName) ||
                 HTTP.CONTENT_LEN.equalsIgnoreCase(headerName) ||

Modified: 
synapse/branches/1.3/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
URL: 
http://svn.apache.org/viewvc/synapse/branches/1.3/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java?rev=829808&r1=829807&r2=829808&view=diff
==============================================================================
--- 
synapse/branches/1.3/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
 (original)
+++ 
synapse/branches/1.3/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
 Mon Oct 26 14:10:38 2009
@@ -20,8 +20,10 @@
 
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.transport.base.MetricsCollector;
-import org.apache.axis2.transport.base.threads.WorkerPoolFactory;
 import org.apache.axis2.transport.base.threads.WorkerPool;
+import org.apache.axis2.transport.base.threads.WorkerPoolFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.http.*;
 import org.apache.http.entity.BasicHttpEntity;
 import org.apache.http.entity.ByteArrayEntity;
@@ -31,19 +33,13 @@
 import org.apache.http.nio.ContentEncoder;
 import org.apache.http.nio.NHttpServerConnection;
 import org.apache.http.nio.NHttpServiceHandler;
-import org.apache.http.nio.util.ByteBufferAllocator;
-import org.apache.http.nio.util.HeapByteBufferAllocator;
-import org.apache.http.nio.util.ContentOutputBuffer;
-import org.apache.http.nio.util.ContentInputBuffer;
-import org.apache.http.nio.util.SharedInputBuffer;
-import org.apache.http.nio.util.SharedOutputBuffer;
 import org.apache.http.nio.entity.ContentInputStream;
 import org.apache.http.nio.entity.ContentOutputStream;
+import org.apache.http.nio.util.*;
+import org.apache.http.params.DefaultedHttpParams;
 import org.apache.http.params.HttpParams;
 import org.apache.http.protocol.*;
 import org.apache.http.util.EncodingUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -113,6 +109,35 @@
 
         HttpContext context = conn.getContext();
         HttpRequest request = conn.getHttpRequest();
+
+        ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
+        if (!ver.lessEquals(HttpVersion.HTTP_1_1)) {
+            // Downgrade protocol version if greater than HTTP/1.1
+            ver = HttpVersion.HTTP_1_1;
+        }
+
+        if (request instanceof HttpEntityEnclosingRequest) {
+            if (((HttpEntityEnclosingRequest) request).expectContinue()) {
+
+                HttpResponse response = responseFactory.newHttpResponse(ver, 
HttpStatus.SC_CONTINUE, context);
+                response.setParams(new 
DefaultedHttpParams(response.getParams(), this.params));
+
+                if (response.getStatusLine().getStatusCode() < 200) {
+                    // Send 1xx response indicating the server expections
+                    // have been met
+                    try {
+                        conn.submitResponse(response);
+                    } catch (Exception e) {
+                        if (metrics != null) {
+                            metrics.incrementFaultsReceiving();
+                        }
+                        handleException("Error processing request received for 
expectation continue request : " +
+                            request.getRequestLine().getUri(), e, conn);
+                    }
+                }
+            }
+        }
+
         context.setAttribute(ExecutionContext.HTTP_REQUEST, request);
 
         try {


Reply via email to