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/08/22 14:23:39 UTC

svn commit: r568584 - in /mina/trunk: core/src/main/java/org/apache/mina/common/ core/src/main/java/org/apache/mina/filter/codec/ core/src/main/java/org/apache/mina/transport/socket/nio/ core/src/main/java/org/apache/mina/transport/vmpipe/ transport-se...

Author: trustin
Date: Wed Aug 22 05:23:39 2007
New Revision: 568584

URL: http://svn.apache.org/viewvc?rev=568584&view=rev
Log:
* Added ProtocolCodecSession
* Renamed DefaultIoServiceMetadata to DefaultTransportMetadata


Added:
    mina/trunk/core/src/main/java/org/apache/mina/common/DefaultTransportMetadata.java
      - copied, changed from r568350, mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoServiceMetadata.java
    mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecSession.java   (with props)
Removed:
    mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoServiceMetadata.java
Modified:
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramSessionImpl.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeSessionImpl.java
    mina/trunk/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java

Copied: mina/trunk/core/src/main/java/org/apache/mina/common/DefaultTransportMetadata.java (from r568350, mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoServiceMetadata.java)
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/DefaultTransportMetadata.java?p2=mina/trunk/core/src/main/java/org/apache/mina/common/DefaultTransportMetadata.java&p1=mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoServiceMetadata.java&r1=568350&r2=568584&rev=568584&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoServiceMetadata.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/DefaultTransportMetadata.java Wed Aug 22 05:23:39 2007
@@ -32,7 +32,7 @@
  * @author The Apache MINA Project (dev@mina.apache.org)
  * @version $Rev$, $Date$
  */
-public class DefaultIoServiceMetadata implements TransportMetadata {
+public class DefaultTransportMetadata implements TransportMetadata {
 
     private final String name;
     private final boolean connectionless;
@@ -41,7 +41,7 @@
     private final Class<? extends IoSessionConfig> sessionConfigType;
     private final Set<Class<? extends Object>> envelopeTypes;
 
-    public DefaultIoServiceMetadata(
+    public DefaultTransportMetadata(
             String name,
             boolean connectionless,
             boolean fragmentation,

Added: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecSession.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecSession.java?rev=568584&view=auto
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecSession.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecSession.java Wed Aug 22 05:23:39 2007
@@ -0,0 +1,268 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.mina.filter.codec;
+
+import java.io.IOException;
+import java.net.SocketAddress;
+import java.util.Queue;
+
+import org.apache.mina.common.AbstractIoAcceptor;
+import org.apache.mina.common.AbstractIoFilterChain;
+import org.apache.mina.common.AbstractIoSession;
+import org.apache.mina.common.AbstractIoSessionConfig;
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.DefaultTransportMetadata;
+import org.apache.mina.common.DefaultWriteFuture;
+import org.apache.mina.common.IoAcceptor;
+import org.apache.mina.common.IoFilterChain;
+import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoHandlerAdapter;
+import org.apache.mina.common.IoService;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.common.IoSessionConfig;
+import org.apache.mina.common.TransportMetadata;
+import org.apache.mina.common.WriteFuture;
+import org.apache.mina.common.WriteRequest;
+
+/**
+ * A virtual {@link IoSession} that provides {@link ProtocolEncoderOutput}
+ * and {@link ProtocolDecoderOutput}.  It is useful for unit testing
+ * codec and reusing codec for non-network use (e.g. serialization).
+ * 
+ * <h2>Decoding</h2>
+ * <pre>
+ * ProtocolCodecSession session = new ProtocolCodecSession();
+ * ProtocolDecoder decoder = ...;
+ * ByteBuffer in = ...;
+ * 
+ * decoder.decode(session, in, session.getProtocolDecoderOutput());
+ * 
+ * Object message = session.getProtocolDecoderOutputQueue().poll();
+ * </pre>
+ * 
+ * <h2>Encoding</h2>
+ * <pre>
+ * ProtocolCodecSession session = new ProtocolCodecSession();
+ * ProtocolEncoder encoder = ...;
+ * MessageX in = ...;
+ * 
+ * encoder.encode(session, in, session.getProtocolEncoderOutput());
+ * 
+ * ByteBuffer buffer = session.getProtocolDecoderOutputQueue().poll();
+ * </pre>
+ * 
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class ProtocolCodecSession extends AbstractIoSession {
+    
+    private static final TransportMetadata METADATA =
+        new DefaultTransportMetadata(
+                "codec", false, false,
+                SocketAddress.class, IoSessionConfig.class, Object.class);
+    
+    private static final IoSessionConfig SERVICE_CONFIG = new AbstractIoSessionConfig() {
+        @Override
+        protected void doSetAll(IoSessionConfig config) {
+        }
+    };
+    
+    private static final SocketAddress ANONYMOUS_ADDRESS = new SocketAddress() {
+        private static final long serialVersionUID = -496112902353454179L;
+
+        @Override
+        public String toString() {
+            return "?";
+        }
+    };
+    
+    private static final IoAcceptor SERVICE = new AbstractIoAcceptor(SERVICE_CONFIG) {
+        @Override
+        protected void doBind() throws IOException {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        protected void doUnbind() {
+            throw new UnsupportedOperationException();
+        }
+
+        public IoSession newSession(SocketAddress remoteAddress) {
+            throw new UnsupportedOperationException();
+        }
+
+        public TransportMetadata getTransportMetadata() {
+            return METADATA;
+        }
+    };
+    
+    static {
+        // Set meaningless default values.
+        SERVICE.setHandler(new IoHandlerAdapter());
+        SERVICE.setLocalAddress(ANONYMOUS_ADDRESS);
+    }
+
+    private final IoSessionConfig config = new AbstractIoSessionConfig() {
+        @Override
+        protected void doSetAll(IoSessionConfig config) {
+        }
+    };
+    
+    private final IoFilterChain filterChain = new AbstractIoFilterChain(this) {
+        @Override
+        protected void doClose(IoSession session) throws Exception {
+        }
+
+        @Override
+        protected void doWrite(IoSession session, WriteRequest writeRequest)
+                throws Exception {
+        }
+    };
+    
+    private final WriteFuture notWrittenFuture =
+        DefaultWriteFuture.newNotWrittenFuture(this);
+    
+    private final AbstractProtocolEncoderOutput encoderOutput =
+        new AbstractProtocolEncoderOutput() {
+            public WriteFuture flush() {
+                return notWrittenFuture;
+            }
+    };
+    
+    private final AbstractProtocolDecoderOutput decoderOutput =
+        new AbstractProtocolDecoderOutput() {
+            public void flush() {
+            }
+    };
+    
+    private volatile IoHandler handler = new IoHandlerAdapter();
+    private volatile SocketAddress localAddress = ANONYMOUS_ADDRESS;
+    private volatile SocketAddress remoteAddress = ANONYMOUS_ADDRESS;
+
+    /**
+     * Creates a new instance.
+     */
+    public ProtocolCodecSession() {
+    }
+    
+    /**
+     * Returns the {@link ProtocolEncoderOutput} that buffers
+     * {@link ByteBuffer}s generated by {@link ProtocolEncoder}.
+     */
+    public ProtocolEncoderOutput getEncoderOutput() {
+        return encoderOutput;
+    }
+    
+    /**
+     * Returns the {@link Queue} of the buffered encoder output.
+     */
+    public Queue<ByteBuffer> getEncoderOutputQueue() {
+        return encoderOutput.getBufferQueue();
+    }
+    
+    /**
+     * Returns the {@link ProtocolEncoderOutput} that buffers
+     * messages generated by {@link ProtocolDecoder}.
+     */
+    public ProtocolDecoderOutput getDecoderOutput() {
+        return decoderOutput;
+    }
+    
+    /**
+     * Returns the {@link Queue} of the buffered decoder output.
+     */
+    public Queue<Object> getDecoderOutputQueue() {
+        return decoderOutput.getMessageQueue();
+    }
+    
+    @Override
+    protected void updateTrafficMask() {
+    }
+
+    public IoSessionConfig getConfig() {
+        return config;
+    }
+
+    public IoFilterChain getFilterChain() {
+        return filterChain;
+    }
+
+    public IoHandler getHandler() {
+        return handler;
+    }
+    
+    /**
+     * Sets the {@link IoHandler} which handles this session.
+     */
+    public void setHandler(IoHandler handler) {
+        if (handler == null) {
+            throw new NullPointerException("handler");
+        }
+        
+        this.handler = handler;
+    }
+
+    public SocketAddress getLocalAddress() {
+        return localAddress;
+    }
+
+    public SocketAddress getRemoteAddress() {
+        return remoteAddress;
+    }
+    
+    /**
+     * Sets the socket address of local machine which is associated with
+     * this session.
+     */
+    public void setLocalAddress(SocketAddress localAddress) {
+        if (localAddress == null) {
+            throw new NullPointerException("localAddress");
+        }
+        
+        this.localAddress = localAddress;
+    }
+    
+    /**
+     * Sets the socket address of remote peer. 
+     */
+    public void setRemoteAddress(SocketAddress remoteAddress) {
+        if (remoteAddress == null) {
+            throw new NullPointerException("remoteAddress");
+        }
+        
+        this.remoteAddress = remoteAddress;
+    }
+
+    public int getScheduledWriteBytes() {
+        return 0;
+    }
+
+    public int getScheduledWriteMessages() {
+        return 0;
+    }
+
+    public IoService getService() {
+        return SERVICE;
+    }
+
+    public TransportMetadata getTransportMetadata() {
+        return METADATA;
+    }
+}

Propchange: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecSession.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecSession.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramSessionImpl.java?rev=568584&r1=568583&r2=568584&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramSessionImpl.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramSessionImpl.java Wed Aug 22 05:23:39 2007
@@ -29,7 +29,7 @@
 
 import org.apache.mina.common.AbstractIoSession;
 import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.DefaultIoServiceMetadata;
+import org.apache.mina.common.DefaultTransportMetadata;
 import org.apache.mina.common.IoAcceptor;
 import org.apache.mina.common.IoFilterChain;
 import org.apache.mina.common.IoHandler;
@@ -49,7 +49,7 @@
 class DatagramSessionImpl extends AbstractIoSession implements DatagramSession {
     
     static final TransportMetadata METADATA =
-        new DefaultIoServiceMetadata(
+        new DefaultTransportMetadata(
                 "datagram", true, false,
                 InetSocketAddress.class,
                 DatagramSessionConfig.class, ByteBuffer.class);

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java?rev=568584&r1=568583&r2=568584&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java Wed Aug 22 05:23:39 2007
@@ -28,7 +28,7 @@
 
 import org.apache.mina.common.AbstractIoSession;
 import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.DefaultIoServiceMetadata;
+import org.apache.mina.common.DefaultTransportMetadata;
 import org.apache.mina.common.FileRegion;
 import org.apache.mina.common.IoFilterChain;
 import org.apache.mina.common.IoHandler;
@@ -47,7 +47,7 @@
 class SocketSessionImpl extends AbstractIoSession implements SocketSession {
     
     static final TransportMetadata METADATA = 
-        new DefaultIoServiceMetadata(
+        new DefaultTransportMetadata(
                 "socket", false, true,
                 InetSocketAddress.class,
                 SocketSessionConfig.class,

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeSessionImpl.java?rev=568584&r1=568583&r2=568584&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeSessionImpl.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeSessionImpl.java Wed Aug 22 05:23:39 2007
@@ -25,7 +25,7 @@
 import java.util.concurrent.LinkedBlockingQueue;
 
 import org.apache.mina.common.AbstractIoSession;
-import org.apache.mina.common.DefaultIoServiceMetadata;
+import org.apache.mina.common.DefaultTransportMetadata;
 import org.apache.mina.common.IoFilterChain;
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.common.IoService;
@@ -43,7 +43,7 @@
 class VmPipeSessionImpl extends AbstractIoSession implements VmPipeSession {
     
     static final TransportMetadata METADATA = 
-        new DefaultIoServiceMetadata(
+        new DefaultTransportMetadata(
             "vmpipe", false, false,
             VmPipeAddress.class,
             VmPipeSessionConfig.class,

Modified: mina/trunk/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java
URL: http://svn.apache.org/viewvc/mina/trunk/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java?rev=568584&r1=568583&r2=568584&view=diff
==============================================================================
--- mina/trunk/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java (original)
+++ mina/trunk/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java Wed Aug 22 05:23:39 2007
@@ -33,7 +33,7 @@
 
 import org.apache.mina.common.AbstractIoSession;
 import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.DefaultIoServiceMetadata;
+import org.apache.mina.common.DefaultTransportMetadata;
 import org.apache.mina.common.ExceptionMonitor;
 import org.apache.mina.common.IdleStatusChecker;
 import org.apache.mina.common.IoFilterChain;
@@ -76,7 +76,7 @@
     private final Logger log;
 
     static final TransportMetadata METADATA =
-        new DefaultIoServiceMetadata(
+        new DefaultTransportMetadata(
             "serial", false, true, SerialAddress.class,
             SerialSessionConfig.class, ByteBuffer.class);