Author: elecharny
Date: Thu Dec  1 15:26:25 2011
New Revision: 1209120

URL: http://svn.apache.org/viewvc?rev=1209120&view=rev
Log:
Roll back my changes about using IoBuffer in the selector. it's a non-sense. 
IoBuffer should be an utility class used only when accumutating data, not a 
general purpose class.

Modified:
    
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
    
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolDecoder.java
    
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolEncoder.java
    
mina/trunk/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
    mina/trunk/core/src/main/java/org/apache/mina/session/AbstractIoSession.java
    
mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
    mina/trunk/core/src/main/java/org/apache/mina/util/IoBuffer.java
    
mina/trunk/examples/src/main/java/org/apache/mina/examples/http/HttpTest.java
    mina/trunk/http/src/main/java/org/apache/mina/http/HttpServerDecoder.java
    mina/trunk/ldap/src/main/java/org/apache/mina/ldap/LdapProtocolDecoder.java

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=1209120&r1=1209119&r2=1209120&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
 Thu Dec  1 15:26:25 2011
@@ -19,6 +19,8 @@
  */
 package org.apache.mina.filter.codec;
 
+import java.nio.ByteBuffer;
+
 import org.apache.mina.api.DefaultIoFilter;
 import org.apache.mina.api.IoFilter;
 import org.apache.mina.api.IoSession;
@@ -197,12 +199,12 @@ public class ProtocolCodecFilter extends
     public void messageReceived(IoSession session, Object message, 
ReadFilterChainController controller) {
         LOGGER.debug("Processing a MESSAGE_RECEIVED for session {}", session);
 
-        if (!(message instanceof IoBuffer)) {
+        if (!(message instanceof ByteBuffer)) {
             controller.callReadNextFilter(session, message);
             return;
         }
 
-        IoBuffer in = (IoBuffer) message;
+        ByteBuffer in = (ByteBuffer) message;
         ProtocolDecoder decoder = getDecoder(session);
 
         // Loop until we don't have anymore byte in the buffer,

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolDecoder.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolDecoder.java?rev=1209120&r1=1209119&r2=1209120&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolDecoder.java 
(original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolDecoder.java 
Thu Dec  1 15:26:25 2011
@@ -19,6 +19,8 @@
  */
 package org.apache.mina.filter.codec;
 
+import java.nio.ByteBuffer;
+
 import org.apache.mina.api.IoSession;
 import org.apache.mina.filterchain.ReadFilterChainController;
 import org.apache.mina.util.IoBuffer;
@@ -48,13 +50,13 @@ public interface ProtocolDecoder {
      *
      * @throws Exception if the read data violated protocol specification
      */
-    Object decode(IoSession session, IoBuffer in, ReadFilterChainController 
controller);// throws Exception;
+    Object decode(IoSession session, ByteBuffer in, ReadFilterChainController 
controller);// throws Exception;
 
     /**
      * Invoked when the specified <tt>session</tt> is closed.  This method is 
useful
      * when you deal with the protocol which doesn't specify the length of a 
message
      * such as HTTP response without <tt>content-length</tt> header. Implement 
this
-     * method to process the remaining data that {@link #decode(IoSession, 
IoBuffer, ProtocolDecoderOutput)}
+     * method to process the remaining data that {@link #decode(IoSession, 
ByteBuffer, ProtocolDecoderOutput)}
      * method didn't process completely.
      *
      * @throws Exception if the read data violated protocol specification

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolEncoder.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolEncoder.java?rev=1209120&r1=1209119&r2=1209120&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolEncoder.java 
(original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolEncoder.java 
Thu Dec  1 15:26:25 2011
@@ -43,7 +43,7 @@ public interface ProtocolEncoder {
      * Encodes higher-level message objects into binary or protocol-specific 
data.
      * MINA invokes {@link #encode(IoSession, Object, ProtocolEncoderOutput)}
      * method with message which is popped from the session write queue, and 
then
-     * the encoder implementation puts encoded messages (typically {@link 
IoBuffer}s)
+     * the encoder implementation puts encoded messages (typically {@link 
ByteBuffer}s)
      * into {@link ProtocolEncoderOutput}.
      *
      * @throws Exception if the message violated protocol specification

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java?rev=1209120&r1=1209119&r2=1209120&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java 
(original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java 
Thu Dec  1 15:26:25 2011
@@ -27,7 +27,6 @@ import org.apache.mina.api.IoSession;
 import org.apache.mina.filterchain.ReadFilterChainController;
 import org.apache.mina.filterchain.WriteFilterChainController;
 import org.apache.mina.util.ByteBufferDumper;
-import org.apache.mina.util.IoBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -190,8 +189,8 @@ public class LoggingFilter implements Io
      */
     @Override
     public void messageReceived(IoSession session, Object message, 
ReadFilterChainController controller) {
-        if (message instanceof IoBuffer) {
-            log(messageReceivedLevel, "RECEIVED: {}", 
ByteBufferDumper.dump((IoBuffer) message));
+        if (message instanceof ByteBuffer) {
+            log(messageReceivedLevel, "RECEIVED: {}", 
ByteBufferDumper.dump((ByteBuffer) message));
         } else {
             log(messageReceivedLevel, "RECEIVED: {}", message);
         }

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/session/AbstractIoSession.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/session/AbstractIoSession.java?rev=1209120&r1=1209119&r2=1209120&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/session/AbstractIoSession.java 
(original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/session/AbstractIoSession.java 
Thu Dec  1 15:26:25 2011
@@ -32,7 +32,6 @@ import org.apache.mina.api.IoSession;
 import org.apache.mina.filterchain.DefaultIoFilterController;
 import org.apache.mina.filterchain.IoFilterController;
 import org.apache.mina.service.SelectorProcessor;
-import org.apache.mina.util.IoBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -87,9 +86,6 @@ public abstract class AbstractIoSession 
 
     private IoFilterController filterProcessor;
     
-    /** The internal buffer used to store incoming data */
-    private IoBuffer ioBuffer;
-
     /**
      * Create an {@link org.apache.mina.api.IoSession} with a unique 
identifier (
      * {@link org.apache.mina.api.IoSession#getId()}) and an associated {@link 
IoService}
@@ -104,7 +100,6 @@ public abstract class AbstractIoSession 
         this.service = service;
         this.writeProcessor = writeProcessor;
         this.filterProcessor = new 
DefaultIoFilterController(service.getFilters());
-        ioBuffer = new IoBuffer();
 
         LOG.debug("Created new session with id : {}", id);
         synchronized (stateMonitor) {
@@ -286,11 +281,4 @@ public abstract class AbstractIoSession 
     public IoFilterController getFilterChain() {
         return filterProcessor;
     }
-    
-    /**
-     * @return The inner buffer
-     */
-    public IoBuffer getIoBuffer() {
-        return ioBuffer;
-    }
 }
\ No newline at end of file

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java?rev=1209120&r1=1209119&r2=1209120&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
 Thu Dec  1 15:26:25 2011
@@ -46,7 +46,6 @@ import org.apache.mina.service.SelectorS
 import org.apache.mina.session.DefaultWriteFuture;
 import org.apache.mina.session.WriteRequest;
 import org.apache.mina.transport.tcp.nio.NioTcpServer;
-import org.apache.mina.util.IoBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -71,9 +70,9 @@ public class NioSelectorProcessor implem
     private Map<SocketAddress, ServerSocketChannel> serverSocketChannels = new 
ConcurrentHashMap<SocketAddress, ServerSocketChannel>();
 
     // read buffer for all the incoming bytes
-    private ByteBuffer readBuffer;
+    private ByteBuffer readBuffer = ByteBuffer.allocate(64 * 1024);
 
-    // the thread polling and processing the I/O events 
+    // the thread polling and processing the I/O events
     private SelectorWorker worker = null;
 
     /**
@@ -355,28 +354,20 @@ public class NioSelectorProcessor implem
                                 LOGGER.debug("readable client {}", key);
                                 NioTcpSession session = (NioTcpSession) 
key.attachment();
                                 SocketChannel channel = 
session.getSocketChannel();
-                                int readCount = 0;
-                                IoBuffer ioBuffer = session.getIoBuffer();
-                                
-                                do {
-                                    ByteBuffer readBuffer = 
ByteBuffer.allocate(1024);
-                                    readCount = channel.read(readBuffer);
-                                    LOGGER.debug("read {} bytes", readCount);
-    
-                                    if (readCount < 0) {
-                                        // session closed by the remote peer
-                                        LOGGER.debug("session closed by the 
remote peer");
-                                        sessionsToClose.add(session);
-                                        break;
-                                    } else if (readCount > 0) {
-                                        readBuffer.flip();
-                                        ioBuffer.add(readBuffer);
-                                    }
-                                } while (readCount > 0);
-                                
-                                // we have read some data
-                                // limit at the current position & rewind 
buffer back to start & push to the chain
-                                
session.getFilterChain().processMessageReceived(session, ioBuffer);
+                                readBuffer.rewind();
+                                int readCount = channel.read(readBuffer);
+                                LOGGER.debug("read {} bytes", readCount);
+
+                                if (readCount < 0) {
+                                    // session closed by the remote peer
+                                    LOGGER.debug("session closed by the remote 
peer");
+                                    sessionsToClose.add(session);
+                                } else {
+                                    // we have read some data
+                                    // limit at the current position & rewind 
buffer back to start & push to the chain
+                                    readBuffer.flip();
+                                    
session.getFilterChain().processMessageReceived(session, readBuffer);
+                                }
                             }
                             
                             if (key.isWritable()) {

Modified: mina/trunk/core/src/main/java/org/apache/mina/util/IoBuffer.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/util/IoBuffer.java?rev=1209120&r1=1209119&r2=1209120&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/util/IoBuffer.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/util/IoBuffer.java Thu Dec  1 
15:26:25 2011
@@ -248,14 +248,6 @@ public class IoBuffer {
     }
 
     /**
-     * @see ByteBuffer#asShortBuffer()
-     *
-    public ShortBuffer asShortBuffer() {
-        // TODO code me !
-        throw new UnsupportedOperationException();
-    }
-    
-    /**
      * @return the IoBuffer total capacity
      */
     public int capacity() {

Modified: 
mina/trunk/examples/src/main/java/org/apache/mina/examples/http/HttpTest.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/examples/src/main/java/org/apache/mina/examples/http/HttpTest.java?rev=1209120&r1=1209119&r2=1209120&view=diff
==============================================================================
--- 
mina/trunk/examples/src/main/java/org/apache/mina/examples/http/HttpTest.java 
(original)
+++ 
mina/trunk/examples/src/main/java/org/apache/mina/examples/http/HttpTest.java 
Thu Dec  1 15:26:25 2011
@@ -62,7 +62,7 @@ public class HttpTest {
         acceptor.bind(new InetSocketAddress(8080));
 
         // run for 20 seconds
-        Thread.sleep(200000);
+        Thread.sleep(300000);
         acceptor.unbindAll();
 
     }

Modified: 
mina/trunk/http/src/main/java/org/apache/mina/http/HttpServerDecoder.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/http/src/main/java/org/apache/mina/http/HttpServerDecoder.java?rev=1209120&r1=1209119&r2=1209120&view=diff
==============================================================================
--- mina/trunk/http/src/main/java/org/apache/mina/http/HttpServerDecoder.java 
(original)
+++ mina/trunk/http/src/main/java/org/apache/mina/http/HttpServerDecoder.java 
Thu Dec  1 15:26:25 2011
@@ -19,6 +19,7 @@
  */
 package org.apache.mina.http;
 
+import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
 import java.util.HashMap;
 import java.util.Map;
@@ -30,7 +31,6 @@ import org.apache.mina.filterchain.ReadF
 import org.apache.mina.http.api.HttpEndOfContent;
 import org.apache.mina.http.api.HttpMethod;
 import org.apache.mina.http.api.HttpVersion;
-import org.apache.mina.util.IoBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -71,12 +71,18 @@ public class HttpServerDecoder implement
     public static final Pattern COOKIE_SEPARATOR_PATTERN = 
Pattern.compile(";");
 
     @Override
-    public Object decode(IoSession session, IoBuffer msg, 
ReadFilterChainController controller) {
+    public Object decode(IoSession session, ByteBuffer msg, 
ReadFilterChainController controller) {
         DecoderState state = session.getAttribute(DECODER_STATE_ATT);
 
         switch (state) {
         case HEAD:
             LOG.debug("decoding HEAD");
+            // grab the stored a partial HEAD request
+            ByteBuffer oldBuffer = session.getAttribute(PARTIAL_HEAD_ATT);
+            // concat the old buffer and the new incoming one
+            msg = ByteBuffer.allocate(oldBuffer.remaining() + 
msg.remaining()).put(oldBuffer).put(msg);
+            msg.flip();
+            // now let's decode like it was a new message
 
         case NEW:
             LOG.debug("decoding NEW");
@@ -84,8 +90,9 @@ public class HttpServerDecoder implement
 
             if (rq == null) {
                 // we copy the incoming BB because it's going to be recycled 
by the inner IoProcessor for next reads
-                //ByteBuffer partial = ByteBuffer.allocate(msg.remaining());
-                IoBuffer partial = new IoBuffer(msg);
+                ByteBuffer partial = ByteBuffer.allocate(msg.remaining());
+                partial.put(msg);
+                partial.flip();
                 // no request decoded, we accumulate
                 session.setAttribute(PARTIAL_HEAD_ATT, partial);
                 session.setAttribute(DECODER_STATE_ATT, DecoderState.HEAD);
@@ -150,7 +157,7 @@ public class HttpServerDecoder implement
     public void dispose(IoSession session) throws Exception {
     }
 
-    private HttpRequestImpl parseHttpRequestHead(IoBuffer buffer) {
+    private HttpRequestImpl parseHttpRequestHead(ByteBuffer buffer) {
         String raw = new String(buffer.array(), 0, buffer.limit(), 
Charset.forName("ISO-8859-1"));
         String[] headersAndBody = RAW_VALUE_PATTERN.split(raw, -1);
 

Modified: 
mina/trunk/ldap/src/main/java/org/apache/mina/ldap/LdapProtocolDecoder.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/ldap/src/main/java/org/apache/mina/ldap/LdapProtocolDecoder.java?rev=1209120&r1=1209119&r2=1209120&view=diff
==============================================================================
--- mina/trunk/ldap/src/main/java/org/apache/mina/ldap/LdapProtocolDecoder.java 
(original)
+++ mina/trunk/ldap/src/main/java/org/apache/mina/ldap/LdapProtocolDecoder.java 
Thu Dec  1 15:26:25 2011
@@ -34,7 +34,6 @@ import org.apache.directory.shared.util.
 import org.apache.mina.api.IoSession;
 import org.apache.mina.filter.codec.ProtocolDecoder;
 import org.apache.mina.filterchain.ReadFilterChainController;
-import org.apache.mina.util.IoBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -68,7 +67,7 @@ public class LdapProtocolDecoder impleme
     /**
      * {@inheritDoc}
      */
-    public Object decode(IoSession session, IoBuffer in, 
ReadFilterChainController controller) {
+    public Object decode(IoSession session, ByteBuffer in, 
ReadFilterChainController controller) {
         @SuppressWarnings("unchecked")
         LdapMessageContainer<MessageDecorator<? extends Message>> 
messageContainer =
             (LdapMessageContainer<MessageDecorator<? extends Message>>)
@@ -84,10 +83,7 @@ public class LdapProtocolDecoder impleme
             Object message = null;
             
             do {
-                byte[] bytes = in.array();
-                ByteBuffer buffer = ByteBuffer.allocate(bytes.length);
-                buffer.wrap(bytes);
-                message = decode( buffer, messageContainer );
+                message = decode( in, messageContainer );
                 
                 controller.callReadNextFilter(session, message );
             } while( message != null);


Reply via email to