You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/12/10 11:10:21 UTC

svn commit: r602839 - /mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpVersionDecodingState.java

Author: trustin
Date: Mon Dec 10 02:10:19 2007
New Revision: 602839

URL: http://svn.apache.org/viewvc?rev=602839&view=rev
Log:
* Improved HttpVersionDecodingState to throw ProtocolDecoderException even if it failed to decode the product buffer
* HttpVersionDecodingState doesn't expose READ_PROTOCOL_VERSION state at all anymore 

Modified:
    mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpVersionDecodingState.java

Modified: mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpVersionDecodingState.java
URL: http://svn.apache.org/viewvc/mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpVersionDecodingState.java?rev=602839&r1=602838&r2=602839&view=diff
==============================================================================
--- mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpVersionDecodingState.java (original)
+++ mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpVersionDecodingState.java Mon Dec 10 02:10:19 2007
@@ -19,6 +19,7 @@
  */
 package org.apache.mina.filter.codec.http;
 
+import java.nio.charset.CharacterCodingException;
 import java.nio.charset.CharsetDecoder;
 
 import org.apache.mina.common.IoBuffer;
@@ -41,9 +42,20 @@
         @Override
         protected DecodingState finishDecode(IoBuffer product,
                 ProtocolDecoderOutput out) throws Exception {
-            String versionStr = product.getString(asciiDecoder);
-            HttpVersion version = HttpVersion.valueOf(versionStr);
+            String versionStr = null;
+            HttpVersion version = null;
+            try {
+                versionStr = product.getString(asciiDecoder);
+                version = HttpVersion.valueOf(versionStr);
+            } catch (CharacterCodingException e) {
+                // Will take care down the
+            }
+            
             if (version == null) {
+                if (versionStr != null) {
+                    versionStr = product.getHexDump();
+                }
+
                 HttpCodecUtils.throwDecoderException(
                         "Unsupported HTTP version: " + versionStr,
                         HttpResponseStatus.HTTP_VERSION_NOT_SUPPORTED);
@@ -60,7 +72,12 @@
     
     public DecodingState decode(IoBuffer in, ProtocolDecoderOutput out)
             throws Exception {
-        return READ_PROTOCOL_VERSION.decode(in, out);
+        DecodingState nextState = READ_PROTOCOL_VERSION.decode(in, out);
+        if (nextState == READ_PROTOCOL_VERSION) {
+            return this;
+        } else {
+            return nextState;
+        }
     }
 
     public DecodingState finishDecode(ProtocolDecoderOutput out)