You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/12/01 06:19:07 UTC
svn commit: r350169 [9/16] - in /directory/network:
branches/chain_refactor/src/java/org/apache/mina/common/
trunk/src/examples/org/apache/mina/examples/echoserver/
trunk/src/examples/org/apache/mina/examples/httpserver/
trunk/src/examples/org/apache/m...
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderAdapter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderAdapter.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderAdapter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderAdapter.java Wed Nov 30 21:17:41 2005
@@ -1,39 +1,39 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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 org.apache.mina.common.IoSession;
-
-/**
- * An abstract {@link ProtocolDecoder} implementation for those who don't have any
- * resources to dispose.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- */
-public abstract class ProtocolDecoderAdapter implements ProtocolDecoder
-{
- /**
- * Override this method dispose all resources related with this decoder.
- * The default implementation does nothing.
- */
- public void dispose( IoSession session ) throws Exception
- {
- }
-}
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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 org.apache.mina.common.IoSession;
+
+/**
+ * An abstract {@link ProtocolDecoder} implementation for those who don't have any
+ * resources to dispose.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public abstract class ProtocolDecoderAdapter implements ProtocolDecoder
+{
+ /**
+ * Override this method dispose all resources related with this decoder.
+ * The default implementation does nothing.
+ */
+ public void dispose( IoSession session ) throws Exception
+ {
+ }
+}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderException.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderException.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderException.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderException.java Wed Nov 30 21:17:41 2005
@@ -1,111 +1,111 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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 org.apache.mina.common.ByteBuffer;
-
-/**
- * An exception that is thrown when {@link ProtocolDecoder}
- * cannot understand or failed to validate the specified {@link ByteBuffer}
- * content.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- */
-public class ProtocolDecoderException extends ProtocolCodecException
-{
- private static final long serialVersionUID = 3545799879533408565L;
-
- private String hexdump;
-
- /**
- * Constructs a new instance.
- */
- public ProtocolDecoderException()
- {
- }
-
- /**
- * Constructs a new instance with the specified message.
- */
- public ProtocolDecoderException( String message )
- {
- super( message );
- }
-
- /**
- * Constructs a new instance with the specified cause.
- */
- public ProtocolDecoderException( Throwable cause )
- {
- super( cause );
- }
-
- /**
- * Constructs a new instance with the specified message and the specified
- * cause.
- */
- public ProtocolDecoderException( String message, Throwable cause )
- {
- super( message, cause );
- }
-
- /**
- * Returns the message and the hexdump of the unknown part.
- */
- public String getMessage()
- {
- String message = super.getMessage();
-
- if( message == null )
- {
- message = "";
- }
-
- if( hexdump != null )
- {
- return message + ( ( message.length() > 0 ) ? " " : "" )
- + "(Hexdump: " + hexdump + ')';
- }
- else
- {
- return message;
- }
- }
-
- /**
- * Returns the hexdump of the unknown message part.
- */
- public String getHexdump()
- {
- return hexdump;
- }
-
- /**
- * Sets the hexdump of the unknown message part.
- */
- public void setHexdump( String hexdump )
- {
- if( this.hexdump != null )
- {
- throw new IllegalStateException( "Hexdump cannot be set more than once." );
- }
- this.hexdump = hexdump;
- }
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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 org.apache.mina.common.ByteBuffer;
+
+/**
+ * An exception that is thrown when {@link ProtocolDecoder}
+ * cannot understand or failed to validate the specified {@link ByteBuffer}
+ * content.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class ProtocolDecoderException extends ProtocolCodecException
+{
+ private static final long serialVersionUID = 3545799879533408565L;
+
+ private String hexdump;
+
+ /**
+ * Constructs a new instance.
+ */
+ public ProtocolDecoderException()
+ {
+ }
+
+ /**
+ * Constructs a new instance with the specified message.
+ */
+ public ProtocolDecoderException( String message )
+ {
+ super( message );
+ }
+
+ /**
+ * Constructs a new instance with the specified cause.
+ */
+ public ProtocolDecoderException( Throwable cause )
+ {
+ super( cause );
+ }
+
+ /**
+ * Constructs a new instance with the specified message and the specified
+ * cause.
+ */
+ public ProtocolDecoderException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ /**
+ * Returns the message and the hexdump of the unknown part.
+ */
+ public String getMessage()
+ {
+ String message = super.getMessage();
+
+ if( message == null )
+ {
+ message = "";
+ }
+
+ if( hexdump != null )
+ {
+ return message + ( ( message.length() > 0 ) ? " " : "" )
+ + "(Hexdump: " + hexdump + ')';
+ }
+ else
+ {
+ return message;
+ }
+ }
+
+ /**
+ * Returns the hexdump of the unknown message part.
+ */
+ public String getHexdump()
+ {
+ return hexdump;
+ }
+
+ /**
+ * Sets the hexdump of the unknown message part.
+ */
+ public void setHexdump( String hexdump )
+ {
+ if( this.hexdump != null )
+ {
+ throw new IllegalStateException( "Hexdump cannot be set more than once." );
+ }
+ this.hexdump = hexdump;
+ }
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderOutput.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderOutput.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderOutput.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderOutput.java Wed Nov 30 21:17:41 2005
@@ -1,39 +1,39 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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;
-
-/**
- * Callback for {@link ProtocolDecoder} to generate decoded messages.
- * {@link ProtocolDecoder} must call {@link #write(Object)} for each decoded
- * messages.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- */
-public interface ProtocolDecoderOutput
-{
- /**
- * Callback for {@link ProtocolDecoder} to generate decoded messages.
- * {@link ProtocolDecoder} must call {@link #write(Object)} for each
- * decoded messages.
- *
- * @param message the decoded message
- */
- void write( Object message );
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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;
+
+/**
+ * Callback for {@link ProtocolDecoder} to generate decoded messages.
+ * {@link ProtocolDecoder} must call {@link #write(Object)} for each decoded
+ * messages.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public interface ProtocolDecoderOutput
+{
+ /**
+ * Callback for {@link ProtocolDecoder} to generate decoded messages.
+ * {@link ProtocolDecoder} must call {@link #write(Object)} for each
+ * decoded messages.
+ *
+ * @param message the decoded message
+ */
+ void write( Object message );
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoder.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoder.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoder.java Wed Nov 30 21:17:41 2005
@@ -1,61 +1,61 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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 org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoSession;
-
-/**
- * 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 {@link ByteBuffer}s into
- * {@link ProtocolEncoderOutput} by calling
- * {@link ProtocolEncoderOutput#write(ByteBuffer)}.
- * <p>
- * Please refer to
- * <a href="../../../../../xref-examples/org/apache/mina/examples/reverser/TextLineEncoder.html"><code>TextLineEncoder</code></a>
- * example.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- */
-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 {@link ByteBuffer}s into
- * {@link ProtocolEncoderOutput}.
- *
- * @throws Exception if the message violated protocol specification
- */
- void encode( IoSession session, Object message,
- ProtocolEncoderOutput out ) throws Exception;
-
-
- /**
- * Releases all resources related with this encoder.
- *
- * @throws Exception if failed to dispose all resources
- */
- void dispose( IoSession session ) throws Exception;
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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 org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.IoSession;
+
+/**
+ * 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 {@link ByteBuffer}s into
+ * {@link ProtocolEncoderOutput} by calling
+ * {@link ProtocolEncoderOutput#write(ByteBuffer)}.
+ * <p>
+ * Please refer to
+ * <a href="../../../../../xref-examples/org/apache/mina/examples/reverser/TextLineEncoder.html"><code>TextLineEncoder</code></a>
+ * example.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+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 {@link ByteBuffer}s into
+ * {@link ProtocolEncoderOutput}.
+ *
+ * @throws Exception if the message violated protocol specification
+ */
+ void encode( IoSession session, Object message,
+ ProtocolEncoderOutput out ) throws Exception;
+
+
+ /**
+ * Releases all resources related with this encoder.
+ *
+ * @throws Exception if failed to dispose all resources
+ */
+ void dispose( IoSession session ) throws Exception;
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderAdapter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderAdapter.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderAdapter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderAdapter.java Wed Nov 30 21:17:41 2005
@@ -1,39 +1,39 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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 org.apache.mina.common.IoSession;
-
-/**
- * An abstract {@link ProtocolEncoder} implementation for those who don't have any
- * resources to dispose.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- */
-public abstract class ProtocolEncoderAdapter implements ProtocolEncoder
-{
- /**
- * Override this method dispose all resources related with this encoder.
- * The default implementation does nothing.
- */
- public void dispose( IoSession session ) throws Exception
- {
- }
-}
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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 org.apache.mina.common.IoSession;
+
+/**
+ * An abstract {@link ProtocolEncoder} implementation for those who don't have any
+ * resources to dispose.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public abstract class ProtocolEncoderAdapter implements ProtocolEncoder
+{
+ /**
+ * Override this method dispose all resources related with this encoder.
+ * The default implementation does nothing.
+ */
+ public void dispose( IoSession session ) throws Exception
+ {
+ }
+}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderException.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderException.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderException.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderException.java Wed Nov 30 21:17:41 2005
@@ -1,63 +1,63 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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;
-
-/**
- * An exception that is thrown when {@link ProtocolEncoder}
- * cannot understand or failed to validate the specified message object.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- */
-public class ProtocolEncoderException extends ProtocolCodecException
-{
- private static final long serialVersionUID = 8752989973624459604L;
-
- /**
- * Constructs a new instance.
- */
- public ProtocolEncoderException()
- {
- }
-
- /**
- * Constructs a new instance with the specified message.
- */
- public ProtocolEncoderException( String message )
- {
- super( message );
- }
-
- /**
- * Constructs a new instance with the specified cause.
- */
- public ProtocolEncoderException( Throwable cause )
- {
- super( cause );
- }
-
- /**
- * Constructs a new instance with the specified message and the specified
- * cause.
- */
- public ProtocolEncoderException( String message, Throwable cause )
- {
- super( message, cause );
- }
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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;
+
+/**
+ * An exception that is thrown when {@link ProtocolEncoder}
+ * cannot understand or failed to validate the specified message object.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class ProtocolEncoderException extends ProtocolCodecException
+{
+ private static final long serialVersionUID = 8752989973624459604L;
+
+ /**
+ * Constructs a new instance.
+ */
+ public ProtocolEncoderException()
+ {
+ }
+
+ /**
+ * Constructs a new instance with the specified message.
+ */
+ public ProtocolEncoderException( String message )
+ {
+ super( message );
+ }
+
+ /**
+ * Constructs a new instance with the specified cause.
+ */
+ public ProtocolEncoderException( Throwable cause )
+ {
+ super( cause );
+ }
+
+ /**
+ * Constructs a new instance with the specified message and the specified
+ * cause.
+ */
+ public ProtocolEncoderException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderOutput.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderOutput.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderOutput.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderOutput.java Wed Nov 30 21:17:41 2005
@@ -1,58 +1,58 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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 org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.WriteFuture;
-
-/**
- * Callback for {@link ProtocolEncoder} to generate encoded {@link ByteBuffer}s.
- * {@link ProtocolEncoder} must call {@link #write(ByteBuffer)} for each decoded
- * messages.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- */
-public interface ProtocolEncoderOutput
-{
- /**
- * Callback for {@link ProtocolEncoder} to generate encoded
- * {@link ByteBuffer}s. {@link ProtocolEncoder} must call
- * {@link #write(ByteBuffer)} for each decoded messages.
- *
- * @param buf the buffer which contains encoded data
- */
- void write( ByteBuffer buf );
-
- /**
- * Merges all buffers you wrote via {@link #write(ByteBuffer)} into
- * one {@link ByteBuffer} and replaces the old fragmented ones with it.
- * This method is useful when you want to control the way MINA generates
- * network packets.
- */
- void mergeAll();
-
- /**
- * Flushes all buffers you wrote via {@link #write(ByteBuffer)} to
- * the session. This operation is asynchronous; please wait for
- * the returned {@link WriteFuture} if you want to wait for
- * the buffers flushed.
- */
- WriteFuture flush();
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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 org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.WriteFuture;
+
+/**
+ * Callback for {@link ProtocolEncoder} to generate encoded {@link ByteBuffer}s.
+ * {@link ProtocolEncoder} must call {@link #write(ByteBuffer)} for each decoded
+ * messages.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public interface ProtocolEncoderOutput
+{
+ /**
+ * Callback for {@link ProtocolEncoder} to generate encoded
+ * {@link ByteBuffer}s. {@link ProtocolEncoder} must call
+ * {@link #write(ByteBuffer)} for each decoded messages.
+ *
+ * @param buf the buffer which contains encoded data
+ */
+ void write( ByteBuffer buf );
+
+ /**
+ * Merges all buffers you wrote via {@link #write(ByteBuffer)} into
+ * one {@link ByteBuffer} and replaces the old fragmented ones with it.
+ * This method is useful when you want to control the way MINA generates
+ * network packets.
+ */
+ void mergeAll();
+
+ /**
+ * Flushes all buffers you wrote via {@link #write(ByteBuffer)} to
+ * the session. This operation is asynchronous; please wait for
+ * the returned {@link WriteFuture} if you want to wait for
+ * the buffers flushed.
+ */
+ WriteFuture flush();
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/DemuxingProtocolCodecFactory.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/DemuxingProtocolCodecFactory.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/DemuxingProtocolCodecFactory.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/DemuxingProtocolCodecFactory.java Wed Nov 30 21:17:41 2005
@@ -1,431 +1,431 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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.demux;
-
-import java.util.IdentityHashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
-import org.apache.mina.filter.codec.ProtocolCodecFactory;
-import org.apache.mina.filter.codec.ProtocolDecoder;
-import org.apache.mina.filter.codec.ProtocolDecoderException;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.ProtocolEncoder;
-import org.apache.mina.filter.codec.ProtocolEncoderException;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.util.IdentityHashSet;
-
-/**
- * A composite {@link ProtocolCodecFactory} that consists of multiple
- * {@link MessageEncoder}s and {@link MessageDecoder}s.
- * {@link ProtocolEncoder} and {@link ProtocolDecoder} this factory
- * returns demultiplex incoming messages and buffers to
- * appropriate {@link MessageEncoder}s and {@link MessageDecoder}s.
- *
- * <h2>Disposing resources acquired by {@link MessageEncoder} and {@link MessageDecoder}</h2>
- * <p>
- * Make your {@link MessageEncoder} and {@link MessageDecoder} to put all
- * resources that need to be released as a session attribute. {@link #disposeCodecResources(IoSession)}
- * method will be invoked when a session is closed. Override {@link #disposeCodecResources(IoSession)}
- * to release the resources you've put as an attribute.
- * <p>
- * We didn't provide any <tt>dispose</tt> method for {@link MessageEncoder} and {@link MessageDecoder}
- * because they can give you a big performance penalty in case you have a lot of
- * message types to handle.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- *
- * @see MessageEncoder
- * @see MessageDecoder
- */
-public class DemuxingProtocolCodecFactory implements ProtocolCodecFactory {
- private MessageDecoderFactory[] decoderFactories = new MessageDecoderFactory[0];
- private MessageEncoderFactory[] encoderFactories = new MessageEncoderFactory[0];
-
- public DemuxingProtocolCodecFactory()
- {
- }
-
- public void register( Class encoderOrDecoderClass )
- {
- if( encoderOrDecoderClass == null )
- {
- throw new NullPointerException( "encoderOrDecoderClass" );
- }
-
- boolean registered = false;
- if( MessageEncoder.class.isAssignableFrom( encoderOrDecoderClass ) )
- {
- register( new DefaultConstructorMessageEncoderFactory( encoderOrDecoderClass ) );
- registered = true;
- }
-
- if( MessageDecoder.class.isAssignableFrom( encoderOrDecoderClass ) )
- {
- register( new DefaultConstructorMessageDecoderFactory( encoderOrDecoderClass ) );
- registered = true;
- }
-
- if( !registered )
- {
- throw new IllegalArgumentException( "Unregisterable type: " + encoderOrDecoderClass );
- }
- }
-
-
- public void register( MessageEncoder encoder )
- {
- register( new SingletonMessageEncoderFactory( encoder ) );
- }
-
- public void register( MessageEncoderFactory factory )
- {
- if( factory == null )
- {
- throw new NullPointerException( "factory" );
- }
- MessageEncoderFactory[] encoderFactories = this.encoderFactories;
- MessageEncoderFactory[] newEncoderFactories = new MessageEncoderFactory[ encoderFactories.length + 1 ];
- System.arraycopy( encoderFactories, 0, newEncoderFactories, 0, encoderFactories.length );
- newEncoderFactories[ encoderFactories.length ] = factory;
- this.encoderFactories = newEncoderFactories;
- }
-
- public void register( MessageDecoder decoder )
- {
- register( new SingletonMessageDecoderFactory( decoder ) );
- }
-
- public void register( MessageDecoderFactory factory )
- {
- if( factory == null )
- {
- throw new NullPointerException( "factory" );
- }
- MessageDecoderFactory[] decoderFactories = this.decoderFactories;
- MessageDecoderFactory[] newDecoderFactories = new MessageDecoderFactory[ decoderFactories.length + 1 ];
- System.arraycopy( decoderFactories, 0, newDecoderFactories, 0, decoderFactories.length );
- newDecoderFactories[ decoderFactories.length ] = factory;
- this.decoderFactories = newDecoderFactories;
- }
-
- public ProtocolEncoder getEncoder() {
- return new ProtocolEncoderImpl();
- }
-
- public ProtocolDecoder getDecoder() {
- return new ProtocolDecoderImpl();
- }
-
- /**
- * Implement this method to release all resources acquired to perform
- * encoding and decoding messages for the specified <tt>session</tt>.
- * By default, this method does nothing.
- *
- * @param session the session that requires resource deallocation now
- */
- protected void disposeCodecResources( IoSession session )
- {
- // Do nothing by default; let users implement it as they want.
- }
-
- private class ProtocolEncoderImpl implements ProtocolEncoder
- {
- private final Map encoders = new IdentityHashMap();
-
- private ProtocolEncoderImpl()
- {
- MessageEncoderFactory[] encoderFactories = DemuxingProtocolCodecFactory.this.encoderFactories;
- for( int i = encoderFactories.length - 1; i >= 0; i-- )
- {
- MessageEncoder encoder = encoderFactories[ i ].newEncoder();
- Iterator it = encoder.getMessageTypes().iterator();
- while( it.hasNext() )
- {
- Class type = ( Class ) it.next();
- encoders.put( type, encoder );
- }
- }
- }
-
- public void encode( IoSession session, Object message,
- ProtocolEncoderOutput out ) throws Exception
- {
- Class type = message.getClass();
- MessageEncoder encoder = findEncoder( type );
- if( encoder == null )
- {
- throw new ProtocolEncoderException( "Unexpected message type: " + type );
- }
-
- encoder.encode( session, message, out );
- }
-
- private MessageEncoder findEncoder( Class type )
- {
- MessageEncoder encoder = ( MessageEncoder ) encoders.get( type );
- if( encoder == null )
- {
- encoder = findEncoder( type, new IdentityHashSet() );
- }
-
- return encoder;
- }
-
- private MessageEncoder findEncoder( Class type, Set triedClasses )
- {
- MessageEncoder encoder;
-
- if( triedClasses.contains( type ) )
- return null;
- triedClasses.add( type );
-
- encoder = ( MessageEncoder ) encoders.get( type );
- if( encoder == null )
- {
- encoder = findEncoder( type, triedClasses );
- if( encoder != null )
- return encoder;
-
- Class[] interfaces = type.getInterfaces();
- for( int i = 0; i < interfaces.length; i ++ )
- {
- encoder = findEncoder( interfaces[ i ], triedClasses );
- if( encoder != null )
- return encoder;
- }
-
- return null;
- }
- else
- return encoder;
- }
-
- public void dispose( IoSession session ) throws Exception
- {
- DemuxingProtocolCodecFactory.this.disposeCodecResources( session );
- }
- }
-
- private class ProtocolDecoderImpl extends CumulativeProtocolDecoder
- {
- private final MessageDecoder[] decoders;
- private MessageDecoder currentDecoder;
-
- protected ProtocolDecoderImpl()
- {
- super( 16 );
-
- MessageDecoderFactory[] decoderFactories = DemuxingProtocolCodecFactory.this.decoderFactories;
- decoders = new MessageDecoder[ decoderFactories.length ];
- for( int i = decoderFactories.length - 1; i >= 0; i-- )
- {
- decoders[ i ] = decoderFactories[ i ].newDecoder();
- }
- }
-
- protected boolean doDecode( IoSession session, ByteBuffer in,
- ProtocolDecoderOutput out ) throws Exception
- {
- if( currentDecoder == null )
- {
- MessageDecoder[] decoders = this.decoders;
- int undecodables = 0;
- for( int i = decoders.length - 1; i >= 0; i -- )
- {
- MessageDecoder decoder = decoders[i];
- int limit = in.limit();
- int pos = in.position();
-
- MessageDecoderResult result;
- try
- {
- result = decoder.decodable( session, in );
- }
- finally
- {
- in.position( pos );
- in.limit( limit );
- }
-
- if( result == MessageDecoder.OK )
- {
- currentDecoder = decoder;
- break;
- }
- else if( result == MessageDecoder.NOT_OK )
- {
- undecodables ++;
- }
- else if( result != MessageDecoder.NEED_DATA )
- {
- throw new IllegalStateException( "Unexpected decode result (see your decodable()): " + result );
- }
- }
-
- if( undecodables == decoders.length )
- {
- // Throw an exception if all decoders cannot decode data.
- in.position( in.limit() ); // Skip data
- throw new ProtocolDecoderException(
- "No appropriate message decoder: " + in.getHexDump() );
- }
-
- if( currentDecoder == null )
- {
- // Decoder is not determined yet (i.e. we need more data)
- return false;
- }
- }
-
- MessageDecoderResult result = currentDecoder.decode( session, in, out );
- if( result == MessageDecoder.OK )
- {
- currentDecoder = null;
- return true;
- }
- else if( result == MessageDecoder.NEED_DATA )
- {
- return false;
- }
- else if( result == MessageDecoder.NOT_OK )
- {
- throw new ProtocolDecoderException( "Message decoder returned NOT_OK." );
- }
- else
- {
- throw new IllegalStateException( "Unexpected decode result (see your decode()): " + result );
- }
- }
-
- public void dispose( IoSession session ) throws Exception
- {
- super.dispose( session );
-
- // ProtocolEncoder.dispose() already called disposeCodec(),
- // so there's nothing more we need to do.
- }
- }
-
- private static class SingletonMessageEncoderFactory implements MessageEncoderFactory
- {
- private final MessageEncoder encoder;
-
- private SingletonMessageEncoderFactory( MessageEncoder encoder )
- {
- if( encoder == null )
- {
- throw new NullPointerException( "encoder" );
- }
- this.encoder = encoder;
- }
-
- public MessageEncoder newEncoder()
- {
- return encoder;
- }
- }
-
- private static class SingletonMessageDecoderFactory implements MessageDecoderFactory
- {
- private final MessageDecoder decoder;
-
- private SingletonMessageDecoderFactory( MessageDecoder decoder )
- {
- if( decoder == null )
- {
- throw new NullPointerException( "decoder" );
- }
- this.decoder = decoder;
- }
-
- public MessageDecoder newDecoder()
- {
- return decoder;
- }
- }
-
-
- private static class DefaultConstructorMessageEncoderFactory implements MessageEncoderFactory
- {
- private final Class encoderClass;
-
- private DefaultConstructorMessageEncoderFactory( Class encoderClass )
- {
- if( encoderClass == null )
- {
- throw new NullPointerException( "encoderClass" );
- }
-
- if( !MessageEncoder.class.isAssignableFrom( encoderClass ) )
- {
- throw new IllegalArgumentException( "encoderClass is not assignable to MessageEncoder" );
- }
- this.encoderClass = encoderClass;
- }
-
- public MessageEncoder newEncoder()
- {
- try
- {
- return ( MessageEncoder ) encoderClass.newInstance();
- }
- catch( Exception e )
- {
- throw new RuntimeException( "Failed to create a new instance of " + encoderClass, e );
- }
- }
- }
-
- private static class DefaultConstructorMessageDecoderFactory implements MessageDecoderFactory
- {
- private final Class decoderClass;
-
- private DefaultConstructorMessageDecoderFactory( Class decoderClass )
- {
- if( decoderClass == null )
- {
- throw new NullPointerException( "decoderClass" );
- }
-
- if( !MessageDecoder.class.isAssignableFrom( decoderClass ) )
- {
- throw new IllegalArgumentException( "decoderClass is not assignable to MessageDecoder" );
- }
- this.decoderClass = decoderClass;
- }
-
- public MessageDecoder newDecoder()
- {
- try
- {
- return ( MessageDecoder ) decoderClass.newInstance();
- }
- catch( Exception e )
- {
- throw new RuntimeException( "Failed to create a new instance of " + decoderClass, e );
- }
- }
- }
-}
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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.demux;
+
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolCodecFactory;
+import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolDecoderException;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+import org.apache.mina.filter.codec.ProtocolEncoder;
+import org.apache.mina.filter.codec.ProtocolEncoderException;
+import org.apache.mina.filter.codec.ProtocolEncoderOutput;
+import org.apache.mina.util.IdentityHashSet;
+
+/**
+ * A composite {@link ProtocolCodecFactory} that consists of multiple
+ * {@link MessageEncoder}s and {@link MessageDecoder}s.
+ * {@link ProtocolEncoder} and {@link ProtocolDecoder} this factory
+ * returns demultiplex incoming messages and buffers to
+ * appropriate {@link MessageEncoder}s and {@link MessageDecoder}s.
+ *
+ * <h2>Disposing resources acquired by {@link MessageEncoder} and {@link MessageDecoder}</h2>
+ * <p>
+ * Make your {@link MessageEncoder} and {@link MessageDecoder} to put all
+ * resources that need to be released as a session attribute. {@link #disposeCodecResources(IoSession)}
+ * method will be invoked when a session is closed. Override {@link #disposeCodecResources(IoSession)}
+ * to release the resources you've put as an attribute.
+ * <p>
+ * We didn't provide any <tt>dispose</tt> method for {@link MessageEncoder} and {@link MessageDecoder}
+ * because they can give you a big performance penalty in case you have a lot of
+ * message types to handle.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ *
+ * @see MessageEncoder
+ * @see MessageDecoder
+ */
+public class DemuxingProtocolCodecFactory implements ProtocolCodecFactory {
+ private MessageDecoderFactory[] decoderFactories = new MessageDecoderFactory[0];
+ private MessageEncoderFactory[] encoderFactories = new MessageEncoderFactory[0];
+
+ public DemuxingProtocolCodecFactory()
+ {
+ }
+
+ public void register( Class encoderOrDecoderClass )
+ {
+ if( encoderOrDecoderClass == null )
+ {
+ throw new NullPointerException( "encoderOrDecoderClass" );
+ }
+
+ boolean registered = false;
+ if( MessageEncoder.class.isAssignableFrom( encoderOrDecoderClass ) )
+ {
+ register( new DefaultConstructorMessageEncoderFactory( encoderOrDecoderClass ) );
+ registered = true;
+ }
+
+ if( MessageDecoder.class.isAssignableFrom( encoderOrDecoderClass ) )
+ {
+ register( new DefaultConstructorMessageDecoderFactory( encoderOrDecoderClass ) );
+ registered = true;
+ }
+
+ if( !registered )
+ {
+ throw new IllegalArgumentException( "Unregisterable type: " + encoderOrDecoderClass );
+ }
+ }
+
+
+ public void register( MessageEncoder encoder )
+ {
+ register( new SingletonMessageEncoderFactory( encoder ) );
+ }
+
+ public void register( MessageEncoderFactory factory )
+ {
+ if( factory == null )
+ {
+ throw new NullPointerException( "factory" );
+ }
+ MessageEncoderFactory[] encoderFactories = this.encoderFactories;
+ MessageEncoderFactory[] newEncoderFactories = new MessageEncoderFactory[ encoderFactories.length + 1 ];
+ System.arraycopy( encoderFactories, 0, newEncoderFactories, 0, encoderFactories.length );
+ newEncoderFactories[ encoderFactories.length ] = factory;
+ this.encoderFactories = newEncoderFactories;
+ }
+
+ public void register( MessageDecoder decoder )
+ {
+ register( new SingletonMessageDecoderFactory( decoder ) );
+ }
+
+ public void register( MessageDecoderFactory factory )
+ {
+ if( factory == null )
+ {
+ throw new NullPointerException( "factory" );
+ }
+ MessageDecoderFactory[] decoderFactories = this.decoderFactories;
+ MessageDecoderFactory[] newDecoderFactories = new MessageDecoderFactory[ decoderFactories.length + 1 ];
+ System.arraycopy( decoderFactories, 0, newDecoderFactories, 0, decoderFactories.length );
+ newDecoderFactories[ decoderFactories.length ] = factory;
+ this.decoderFactories = newDecoderFactories;
+ }
+
+ public ProtocolEncoder getEncoder() {
+ return new ProtocolEncoderImpl();
+ }
+
+ public ProtocolDecoder getDecoder() {
+ return new ProtocolDecoderImpl();
+ }
+
+ /**
+ * Implement this method to release all resources acquired to perform
+ * encoding and decoding messages for the specified <tt>session</tt>.
+ * By default, this method does nothing.
+ *
+ * @param session the session that requires resource deallocation now
+ */
+ protected void disposeCodecResources( IoSession session )
+ {
+ // Do nothing by default; let users implement it as they want.
+ }
+
+ private class ProtocolEncoderImpl implements ProtocolEncoder
+ {
+ private final Map encoders = new IdentityHashMap();
+
+ private ProtocolEncoderImpl()
+ {
+ MessageEncoderFactory[] encoderFactories = DemuxingProtocolCodecFactory.this.encoderFactories;
+ for( int i = encoderFactories.length - 1; i >= 0; i-- )
+ {
+ MessageEncoder encoder = encoderFactories[ i ].newEncoder();
+ Iterator it = encoder.getMessageTypes().iterator();
+ while( it.hasNext() )
+ {
+ Class type = ( Class ) it.next();
+ encoders.put( type, encoder );
+ }
+ }
+ }
+
+ public void encode( IoSession session, Object message,
+ ProtocolEncoderOutput out ) throws Exception
+ {
+ Class type = message.getClass();
+ MessageEncoder encoder = findEncoder( type );
+ if( encoder == null )
+ {
+ throw new ProtocolEncoderException( "Unexpected message type: " + type );
+ }
+
+ encoder.encode( session, message, out );
+ }
+
+ private MessageEncoder findEncoder( Class type )
+ {
+ MessageEncoder encoder = ( MessageEncoder ) encoders.get( type );
+ if( encoder == null )
+ {
+ encoder = findEncoder( type, new IdentityHashSet() );
+ }
+
+ return encoder;
+ }
+
+ private MessageEncoder findEncoder( Class type, Set triedClasses )
+ {
+ MessageEncoder encoder;
+
+ if( triedClasses.contains( type ) )
+ return null;
+ triedClasses.add( type );
+
+ encoder = ( MessageEncoder ) encoders.get( type );
+ if( encoder == null )
+ {
+ encoder = findEncoder( type, triedClasses );
+ if( encoder != null )
+ return encoder;
+
+ Class[] interfaces = type.getInterfaces();
+ for( int i = 0; i < interfaces.length; i ++ )
+ {
+ encoder = findEncoder( interfaces[ i ], triedClasses );
+ if( encoder != null )
+ return encoder;
+ }
+
+ return null;
+ }
+ else
+ return encoder;
+ }
+
+ public void dispose( IoSession session ) throws Exception
+ {
+ DemuxingProtocolCodecFactory.this.disposeCodecResources( session );
+ }
+ }
+
+ private class ProtocolDecoderImpl extends CumulativeProtocolDecoder
+ {
+ private final MessageDecoder[] decoders;
+ private MessageDecoder currentDecoder;
+
+ protected ProtocolDecoderImpl()
+ {
+ super( 16 );
+
+ MessageDecoderFactory[] decoderFactories = DemuxingProtocolCodecFactory.this.decoderFactories;
+ decoders = new MessageDecoder[ decoderFactories.length ];
+ for( int i = decoderFactories.length - 1; i >= 0; i-- )
+ {
+ decoders[ i ] = decoderFactories[ i ].newDecoder();
+ }
+ }
+
+ protected boolean doDecode( IoSession session, ByteBuffer in,
+ ProtocolDecoderOutput out ) throws Exception
+ {
+ if( currentDecoder == null )
+ {
+ MessageDecoder[] decoders = this.decoders;
+ int undecodables = 0;
+ for( int i = decoders.length - 1; i >= 0; i -- )
+ {
+ MessageDecoder decoder = decoders[i];
+ int limit = in.limit();
+ int pos = in.position();
+
+ MessageDecoderResult result;
+ try
+ {
+ result = decoder.decodable( session, in );
+ }
+ finally
+ {
+ in.position( pos );
+ in.limit( limit );
+ }
+
+ if( result == MessageDecoder.OK )
+ {
+ currentDecoder = decoder;
+ break;
+ }
+ else if( result == MessageDecoder.NOT_OK )
+ {
+ undecodables ++;
+ }
+ else if( result != MessageDecoder.NEED_DATA )
+ {
+ throw new IllegalStateException( "Unexpected decode result (see your decodable()): " + result );
+ }
+ }
+
+ if( undecodables == decoders.length )
+ {
+ // Throw an exception if all decoders cannot decode data.
+ in.position( in.limit() ); // Skip data
+ throw new ProtocolDecoderException(
+ "No appropriate message decoder: " + in.getHexDump() );
+ }
+
+ if( currentDecoder == null )
+ {
+ // Decoder is not determined yet (i.e. we need more data)
+ return false;
+ }
+ }
+
+ MessageDecoderResult result = currentDecoder.decode( session, in, out );
+ if( result == MessageDecoder.OK )
+ {
+ currentDecoder = null;
+ return true;
+ }
+ else if( result == MessageDecoder.NEED_DATA )
+ {
+ return false;
+ }
+ else if( result == MessageDecoder.NOT_OK )
+ {
+ throw new ProtocolDecoderException( "Message decoder returned NOT_OK." );
+ }
+ else
+ {
+ throw new IllegalStateException( "Unexpected decode result (see your decode()): " + result );
+ }
+ }
+
+ public void dispose( IoSession session ) throws Exception
+ {
+ super.dispose( session );
+
+ // ProtocolEncoder.dispose() already called disposeCodec(),
+ // so there's nothing more we need to do.
+ }
+ }
+
+ private static class SingletonMessageEncoderFactory implements MessageEncoderFactory
+ {
+ private final MessageEncoder encoder;
+
+ private SingletonMessageEncoderFactory( MessageEncoder encoder )
+ {
+ if( encoder == null )
+ {
+ throw new NullPointerException( "encoder" );
+ }
+ this.encoder = encoder;
+ }
+
+ public MessageEncoder newEncoder()
+ {
+ return encoder;
+ }
+ }
+
+ private static class SingletonMessageDecoderFactory implements MessageDecoderFactory
+ {
+ private final MessageDecoder decoder;
+
+ private SingletonMessageDecoderFactory( MessageDecoder decoder )
+ {
+ if( decoder == null )
+ {
+ throw new NullPointerException( "decoder" );
+ }
+ this.decoder = decoder;
+ }
+
+ public MessageDecoder newDecoder()
+ {
+ return decoder;
+ }
+ }
+
+
+ private static class DefaultConstructorMessageEncoderFactory implements MessageEncoderFactory
+ {
+ private final Class encoderClass;
+
+ private DefaultConstructorMessageEncoderFactory( Class encoderClass )
+ {
+ if( encoderClass == null )
+ {
+ throw new NullPointerException( "encoderClass" );
+ }
+
+ if( !MessageEncoder.class.isAssignableFrom( encoderClass ) )
+ {
+ throw new IllegalArgumentException( "encoderClass is not assignable to MessageEncoder" );
+ }
+ this.encoderClass = encoderClass;
+ }
+
+ public MessageEncoder newEncoder()
+ {
+ try
+ {
+ return ( MessageEncoder ) encoderClass.newInstance();
+ }
+ catch( Exception e )
+ {
+ throw new RuntimeException( "Failed to create a new instance of " + encoderClass, e );
+ }
+ }
+ }
+
+ private static class DefaultConstructorMessageDecoderFactory implements MessageDecoderFactory
+ {
+ private final Class decoderClass;
+
+ private DefaultConstructorMessageDecoderFactory( Class decoderClass )
+ {
+ if( decoderClass == null )
+ {
+ throw new NullPointerException( "decoderClass" );
+ }
+
+ if( !MessageDecoder.class.isAssignableFrom( decoderClass ) )
+ {
+ throw new IllegalArgumentException( "decoderClass is not assignable to MessageDecoder" );
+ }
+ this.decoderClass = decoderClass;
+ }
+
+ public MessageDecoder newDecoder()
+ {
+ try
+ {
+ return ( MessageDecoder ) decoderClass.newInstance();
+ }
+ catch( Exception e )
+ {
+ throw new RuntimeException( "Failed to create a new instance of " + decoderClass, e );
+ }
+ }
+ }
+}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoder.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoder.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoder.java Wed Nov 30 21:17:41 2005
@@ -1,81 +1,81 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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.demux;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-
-/**
- * Decodes specific messages.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- *
- * @see DemuxingProtocolCodecFactory
- * @see MessageDecoderFactory
- */
-public interface MessageDecoder {
- /**
- * Represents a result from {@link #decodable(IoSession, ByteBuffer)} and
- * {@link #decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}. Please
- * refer to each method's documentation for detailed explanation.
- */
- static MessageDecoderResult OK = MessageDecoderResult.OK;
-
- /**
- * Represents a result from {@link #decodable(IoSession, ByteBuffer)} and
- * {@link #decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}. Please
- * refer to each method's documentation for detailed explanation.
- */
- static MessageDecoderResult NEED_DATA = MessageDecoderResult.NEED_DATA;
-
- /**
- * Represents a result from {@link #decodable(IoSession, ByteBuffer)} and
- * {@link #decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}. Please
- * refer to each method's documentation for detailed explanation.
- */
- static MessageDecoderResult NOT_OK = MessageDecoderResult.NOT_OK;
-
- /**
- * Checks the specified buffer is decodable by this decoder.
- *
- * @return {@link #OK} if this decoder can decode the specified buffer.
- * {@link #NOT_OK} if this decoder cannot decode the specified buffer.
- * {@link #NEED_DATA} if more data is required to determine if the
- * specified buffer is decodable ({@link #OK}) or not decodable
- * {@link #NOT_OK}.
- */
- MessageDecoderResult decodable( IoSession session, ByteBuffer in );
-
- /**
- * Decodes binary or protocol-specific content into higher-level message objects.
- * MINA invokes {@link #decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}
- * method with read data, and then the decoder implementation puts decoded
- * messages into {@link ProtocolDecoderOutput}.
- *
- * @return {@link #OK} if you finished decoding messages successfully.
- * {@link #NEED_DATA} if you need more data to finish decoding current message.
- * {@link #NOT_OK} if you cannot decode current message due to protocol specification violation.
- *
- * @throws Exception if the read data violated protocol specification
- */
- MessageDecoderResult decode( IoSession session, ByteBuffer in,
- ProtocolDecoderOutput out ) throws Exception;
-}
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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.demux;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+
+/**
+ * Decodes specific messages.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ *
+ * @see DemuxingProtocolCodecFactory
+ * @see MessageDecoderFactory
+ */
+public interface MessageDecoder {
+ /**
+ * Represents a result from {@link #decodable(IoSession, ByteBuffer)} and
+ * {@link #decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}. Please
+ * refer to each method's documentation for detailed explanation.
+ */
+ static MessageDecoderResult OK = MessageDecoderResult.OK;
+
+ /**
+ * Represents a result from {@link #decodable(IoSession, ByteBuffer)} and
+ * {@link #decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}. Please
+ * refer to each method's documentation for detailed explanation.
+ */
+ static MessageDecoderResult NEED_DATA = MessageDecoderResult.NEED_DATA;
+
+ /**
+ * Represents a result from {@link #decodable(IoSession, ByteBuffer)} and
+ * {@link #decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}. Please
+ * refer to each method's documentation for detailed explanation.
+ */
+ static MessageDecoderResult NOT_OK = MessageDecoderResult.NOT_OK;
+
+ /**
+ * Checks the specified buffer is decodable by this decoder.
+ *
+ * @return {@link #OK} if this decoder can decode the specified buffer.
+ * {@link #NOT_OK} if this decoder cannot decode the specified buffer.
+ * {@link #NEED_DATA} if more data is required to determine if the
+ * specified buffer is decodable ({@link #OK}) or not decodable
+ * {@link #NOT_OK}.
+ */
+ MessageDecoderResult decodable( IoSession session, ByteBuffer in );
+
+ /**
+ * Decodes binary or protocol-specific content into higher-level message objects.
+ * MINA invokes {@link #decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}
+ * method with read data, and then the decoder implementation puts decoded
+ * messages into {@link ProtocolDecoderOutput}.
+ *
+ * @return {@link #OK} if you finished decoding messages successfully.
+ * {@link #NEED_DATA} if you need more data to finish decoding current message.
+ * {@link #NOT_OK} if you cannot decode current message due to protocol specification violation.
+ *
+ * @throws Exception if the read data violated protocol specification
+ */
+ MessageDecoderResult decode( IoSession session, ByteBuffer in,
+ ProtocolDecoderOutput out ) throws Exception;
+}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderFactory.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderFactory.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderFactory.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderFactory.java Wed Nov 30 21:17:41 2005
@@ -1,35 +1,35 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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.demux;
-
-/**
- * A factory that creates a new instance of {@link MessageDecoder}.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- *
- * @see DemuxingProtocolCodecFactory
- */
-public interface MessageDecoderFactory
-{
- /**
- * Creates a new message decoder.
- */
- MessageDecoder newDecoder();
-}
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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.demux;
+
+/**
+ * A factory that creates a new instance of {@link MessageDecoder}.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ *
+ * @see DemuxingProtocolCodecFactory
+ */
+public interface MessageDecoderFactory
+{
+ /**
+ * Creates a new message decoder.
+ */
+ MessageDecoder newDecoder();
+}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderResult.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderResult.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderResult.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderResult.java Wed Nov 30 21:17:41 2005
@@ -1,67 +1,67 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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.demux;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-
-/**
- * Represents results from {@link MessageDecoder}.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- *
- * @see MessageDecoder
- */
-public class MessageDecoderResult
-{
- /**
- * Represents a result from {@link MessageDecoder#decodable(IoSession, ByteBuffer)}
- * and {@link MessageDecoder#decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}.
- * Please refer to each method's documentation for detailed explanation.
- */
- public static MessageDecoderResult OK = new MessageDecoderResult( "OK" );
-
- /**
- * Represents a result from {@link MessageDecoder#decodable(IoSession, ByteBuffer)}
- * and {@link MessageDecoder#decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}.
- * Please refer to each method's documentation for detailed explanation.
- */
- public static MessageDecoderResult NEED_DATA = new MessageDecoderResult( "NEED_DATA" );
-
- /**
- * Represents a result from {@link MessageDecoder#decodable(IoSession, ByteBuffer)}
- * and {@link MessageDecoder#decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}.
- * Please refer to each method's documentation for detailed explanation.
- */
- public static MessageDecoderResult NOT_OK = new MessageDecoderResult( "NOT_OK" );
-
- private final String name;
-
- private MessageDecoderResult( String name )
- {
- this.name = name;
- }
-
- public String toString()
- {
- return name;
- }
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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.demux;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+
+/**
+ * Represents results from {@link MessageDecoder}.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ *
+ * @see MessageDecoder
+ */
+public class MessageDecoderResult
+{
+ /**
+ * Represents a result from {@link MessageDecoder#decodable(IoSession, ByteBuffer)}
+ * and {@link MessageDecoder#decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}.
+ * Please refer to each method's documentation for detailed explanation.
+ */
+ public static MessageDecoderResult OK = new MessageDecoderResult( "OK" );
+
+ /**
+ * Represents a result from {@link MessageDecoder#decodable(IoSession, ByteBuffer)}
+ * and {@link MessageDecoder#decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}.
+ * Please refer to each method's documentation for detailed explanation.
+ */
+ public static MessageDecoderResult NEED_DATA = new MessageDecoderResult( "NEED_DATA" );
+
+ /**
+ * Represents a result from {@link MessageDecoder#decodable(IoSession, ByteBuffer)}
+ * and {@link MessageDecoder#decode(IoSession, ByteBuffer, ProtocolDecoderOutput)}.
+ * Please refer to each method's documentation for detailed explanation.
+ */
+ public static MessageDecoderResult NOT_OK = new MessageDecoderResult( "NOT_OK" );
+
+ private final String name;
+
+ private MessageDecoderResult( String name )
+ {
+ this.name = name;
+ }
+
+ public String toString()
+ {
+ return name;
+ }
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoder.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoder.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoder.java Wed Nov 30 21:17:41 2005
@@ -1,54 +1,54 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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.demux;
-
-import java.util.Set;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-
-/**
- * Encodes messages of specific types specified by {@link #getMessageTypes()}.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- *
- * @see DemuxingProtocolCodecFactory
- * @see MessageEncoderFactory
- */
-public interface MessageEncoder
-{
- /**
- * Returns the set of message classes this encoder can encode.
- */
- Set getMessageTypes();
-
- /**
- * 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 {@link ByteBuffer}s into
- * {@link ProtocolEncoderOutput}.
- *
- * @throws Exception if the message violated protocol specification
- */
- void encode( IoSession session, Object message,
- ProtocolEncoderOutput out ) throws Exception;
-}
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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.demux;
+
+import java.util.Set;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolEncoderOutput;
+
+/**
+ * Encodes messages of specific types specified by {@link #getMessageTypes()}.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ *
+ * @see DemuxingProtocolCodecFactory
+ * @see MessageEncoderFactory
+ */
+public interface MessageEncoder
+{
+ /**
+ * Returns the set of message classes this encoder can encode.
+ */
+ Set getMessageTypes();
+
+ /**
+ * 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 {@link ByteBuffer}s into
+ * {@link ProtocolEncoderOutput}.
+ *
+ * @throws Exception if the message violated protocol specification
+ */
+ void encode( IoSession session, Object message,
+ ProtocolEncoderOutput out ) throws Exception;
+}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoderFactory.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoderFactory.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoderFactory.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoderFactory.java Wed Nov 30 21:17:41 2005
@@ -1,35 +1,35 @@
-/*
- * @(#) $Id$
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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.demux;
-
-/**
- * A factory that creates a new instance of {@link MessageEncoder}.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- *
- * @see DemuxingProtocolCodecFactory
- */
-public interface MessageEncoderFactory
-{
- /**
- * Creates a new message encoder.
- */
- MessageEncoder newEncoder();
-}
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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.demux;
+
+/**
+ * A factory that creates a new instance of {@link MessageEncoder}.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ *
+ * @see DemuxingProtocolCodecFactory
+ */
+public interface MessageEncoderFactory
+{
+ /**
+ * Creates a new message encoder.
+ */
+ MessageEncoder newEncoder();
+}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/support/SimpleProtocolDecoderOutput.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/support/SimpleProtocolDecoderOutput.java?rev=350169&r1=350168&r2=350169&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/support/SimpleProtocolDecoderOutput.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/support/SimpleProtocolDecoderOutput.java Wed Nov 30 21:17:41 2005
@@ -1,33 +1,33 @@
-/**
- *
- */
-package org.apache.mina.filter.codec.support;
-
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.util.Queue;
-
-/**
- * A {@link ProtocolDecoderOutput} based on queue.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- *
- */
-public class SimpleProtocolDecoderOutput implements ProtocolDecoderOutput
-{
- private final Queue messageQueue = new Queue();
-
- public SimpleProtocolDecoderOutput()
- {
- }
-
- public Queue getMessageQueue()
- {
- return messageQueue;
- }
-
- public void write( Object message )
- {
- messageQueue.push( message );
- }
+/**
+ *
+ */
+package org.apache.mina.filter.codec.support;
+
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+import org.apache.mina.util.Queue;
+
+/**
+ * A {@link ProtocolDecoderOutput} based on queue.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ *
+ */
+public class SimpleProtocolDecoderOutput implements ProtocolDecoderOutput
+{
+ private final Queue messageQueue = new Queue();
+
+ public SimpleProtocolDecoderOutput()
+ {
+ }
+
+ public Queue getMessageQueue()
+ {
+ return messageQueue;
+ }
+
+ public void write( Object message )
+ {
+ messageQueue.push( message );
+ }
}