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);