[jboss-cvs] JBoss Messaging SVN: r3343 - in branches/Branch_JBMESSAGING-544: src/main/org/jboss/jms/client/container and 14 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Nov 19 10:08:04 EST 2007


Author: jmesnil
Date: 2007-11-19 10:08:03 -0500 (Mon, 19 Nov 2007)
New Revision: 3343

Added:
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Client.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/PacketDispatcher.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveriesRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ChangeRateMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CloseMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeliverMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendTransactionRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/StartConnectionMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/server/
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/server/ServerHandler.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveriesMessage.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveryRequest.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveryResponse.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ChangeRateMessage.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CloseMessage.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ClosingRequest.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ClosingResponse.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConnectionRequest.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConnectionResponse.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConsumerRequest.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConsumerResponse.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateSessionRequest.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateSessionResponse.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/DeliverMessage.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/IDBlockRequest.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/IDBlockResponse.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/SendMessage.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/SendTransactionMessage.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/StartConnectionMessage.java
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/AbstractPacketCodecTest.java
Removed:
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/RemoteDispatcher.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/RemoteDispatcherFactory.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/RemoteDispatcherImpl.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ConnectionFactoryCreateConnectionRequest.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ConnectionFactoryCreateConnectionResponse.java
Modified:
   branches/Branch_JBMESSAGING-544/.classpath
   branches/Branch_JBMESSAGING-544/build-messaging.xml
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/ConnectionAspect.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/ConsumerAspect.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/StateCreationAspect.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConsumerDelegate.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientSessionDelegate.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/DelegateSupport.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/remoting/JMSRemotingConnection.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConnectionFactoryEndpoint.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/advised/ConnectionFactoryAdvised.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/AbstractPacketHandler.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Assert.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Constants.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/PacketHandler.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/TransportType.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AbstractPacketCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/PacketCodecFactory.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/TextPacketCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/ClientHandler.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/PacketInspector.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AbstractPacket.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/NullPacket.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/PacketType.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/TextPacket.java
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/RemoteDispatcherTest.java
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/ReverseServerHandler.java
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/TargetHandlerTest.java
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/TestSupport.java
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/PacketTypeTest.java
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/tools/ServerManagement.java
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/tools/container/ServiceContainer.java
Log:
http://jira.jboss.org/jira/browse/JBMESSAGING-544: Replace client-server transport with NIO based transport
* put new wireformat in o.j.messaging.core.remoting.wireformat
* put MINA codecs in o.j.messaging.core.remoting.codec
* switched to the MINA connection to exchange packets required to pass the most basic tests (in JMSTest)



Modified: branches/Branch_JBMESSAGING-544/.classpath
===================================================================
--- branches/Branch_JBMESSAGING-544/.classpath	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/.classpath	2007-11-19 15:08:03 UTC (rev 3343)
@@ -37,7 +37,6 @@
 	<classpathentry kind="lib" path="thirdparty/retrotranslator/lib/retrotranslator-runtime.jar"/>
 	<classpathentry kind="lib" path="thirdparty/retrotranslator/lib/retrotranslator-transformer.jar"/>
 	<classpathentry kind="lib" path="thirdparty/trove/lib/trove.jar"/>
-	<classpathentry kind="lib" path="thirdparty/jboss/remoting/lib/jboss-remoting.jar"/>
 	<classpathentry kind="lib" path="thirdparty/jboss/jbossts14/lib/jbossjta.jar"/>
 	<classpathentry kind="var" path="ANT_HOME/lib/ant.jar"/>
 	<classpathentry kind="var" path="ANT_HOME/lib/ant-junit.jar"/>
@@ -58,5 +57,6 @@
 	<classpathentry kind="lib" path="thirdparty/jbossas/core-libs/lib/jboss-xml-binding.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/mina-core"/>
+	<classpathentry kind="lib" path="thirdparty/jboss/remoting/lib/jboss-remoting.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>

Modified: branches/Branch_JBMESSAGING-544/build-messaging.xml
===================================================================
--- branches/Branch_JBMESSAGING-544/build-messaging.xml	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/build-messaging.xml	2007-11-19 15:08:03 UTC (rev 3343)
@@ -145,7 +145,10 @@
       <path refid="javassist.classpath"/>
       <path refid="jgroups.jgroups.classpath"/>
       <path refid="trove.trove.classpath"/>
-      <path refid="apache.logging.classpath"/>
+      <path refid="apache.logging.classpath"/>
+   	  <path path="${user.home}/.m2/repository/org/apache/mina/mina-core/2.0.0-M1-SNAPSHOT/mina-core-2.0.0-M1-SNAPSHOT.jar" />
+   	  <path path="${user.home}/.m2/repository/org/slf4j/slf4j-api/1.4.3/slf4j-api-1.4.3.jar" />
+   	  <path path="${user.home}/.m2/repository/org/slf4j/slf4j-log4j12/1.4.3/slf4j-log4j12-1.4.3.jar" />
    </path>
 
    <!--
@@ -233,7 +236,7 @@
       <echo message="NOTE: aopc incremental compilation might fail, if so do an ant clean first (see JBMESSAGING-271)"/>
       <aopc compilerclasspathref="aopc.classpath"
             classpathref="aopc.classpath"
-            verbose="false">
+            optimized="false">
          <classpath refid="aopc.classpath"/>
          <src path="${build.classes}/org/jboss/jms"/>
          <aoppath path="src/etc/prepare-aop.xml"/>

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/ConnectionAspect.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/ConnectionAspect.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/ConnectionAspect.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -43,6 +43,7 @@
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:clebert.suconic at jboss.com">Clebert Suconic</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * @version <tt>$Revision$</tt>
  *
  * $Id$
@@ -177,19 +178,19 @@
    		
 	      ConnectionState state = getConnectionState(invocation);
 	
-	      JMSRemotingConnection remotingConnection = state.getRemotingConnection();
-	
-	      // remove the consolidated remoting connection listener
-	
-	      ConsolidatedRemotingConnectionListener l = remotingConnection.removeConnectionListener();
-	      if (l != null)
-	      {
-	         l.clear();
-	      }
-	
-	      // Finished with the connection - we need to shutdown callback server
-	      remotingConnection.stop();
-	       
+//	      JMSRemotingConnection remotingConnection = state.getRemotingConnection();
+//	
+//	      // remove the consolidated remoting connection listener
+//	
+//	      ConsolidatedRemotingConnectionListener l = remotingConnection.removeConnectionListener();
+//	      if (l != null)
+//	      {
+//	         l.clear();
+//	      }
+//	
+//	      // Finished with the connection - we need to shutdown callback server
+//	      remotingConnection.stop();
+//	       
 	      // Remove reference to message ID generator
 	      MessageIdGeneratorFactory.instance.checkInGenerator(state.getServerID());
 	      

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/ConsumerAspect.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/ConsumerAspect.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/ConsumerAspect.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -21,8 +21,10 @@
   */
 package org.jboss.jms.client.container;
 
+import javax.jms.Message;
 import javax.jms.MessageListener;
 
+import org.apache.mina.common.IoSession;
 import org.jboss.aop.joinpoint.Invocation;
 import org.jboss.aop.joinpoint.MethodInvocation;
 import org.jboss.jms.client.delegate.DelegateSupport;
@@ -34,7 +36,16 @@
 import org.jboss.jms.delegate.ConsumerDelegate;
 import org.jboss.jms.delegate.SessionDelegate;
 import org.jboss.jms.exception.MessagingShutdownException;
+import org.jboss.jms.message.JBossMessage;
+import org.jboss.jms.message.MessageProxy;
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.impl.message.MessageFactory;
+import org.jboss.messaging.core.impl.message.MessageSupport;
+import org.jboss.messaging.core.remoting.PacketDispatcher;
+import org.jboss.messaging.core.remoting.PacketHandler;
+import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+import org.jboss.messaging.core.remoting.wireformat.DeliverMessage;
+import org.jboss.messaging.core.remoting.wireformat.PacketType;
 import org.jboss.messaging.util.MessageQueueNameHelper;
 
 import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
@@ -47,6 +58,7 @@
  * 
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * @version <tt>$Revision$</tt>
  *
  * $Id$
@@ -80,7 +92,7 @@
       ConnectionState connectionState = (ConnectionState)sessionState.getParent();
       SessionDelegate sessionDelegate = (SessionDelegate)invocation.getTargetObject();
       ConsumerState consumerState = (ConsumerState)((DelegateSupport)consumerDelegate).getState();
-      String consumerID = consumerState.getConsumerID();
+      final String consumerID = consumerState.getConsumerID();
       int prefetchSize = consumerState.getBufferSize();
       QueuedExecutor sessionExecutor = sessionState.getExecutor();
       int maxDeliveries = consumerState.getMaxDeliveries();
@@ -106,17 +118,44 @@
       
       boolean autoFlowControl = ((Boolean)mi.getArguments()[5]).booleanValue();
       
-      ClientConsumer messageHandler =
+      final ClientConsumer messageHandler =
          new ClientConsumer(isCC, sessionState.getAcknowledgeMode(),
                             sessionDelegate, consumerDelegate, consumerID, queueName,
                             prefetchSize, sessionExecutor, maxDeliveries, consumerState.isShouldAck(),
                             autoFlowControl, redeliveryDelay);
       
       sessionState.addCallbackHandler(messageHandler);
-      
-      CallbackManager cm = connectionState.getRemotingConnection().getCallbackManager();
-      cm.registerHandler(consumerID, messageHandler);
-         
+
+      PacketDispatcher.client.register(new PacketHandler() {
+
+         public String getID()
+         {
+            return consumerID;
+         }
+
+         public void handle(AbstractPacket packet, IoSession session)
+         {
+            try
+            {
+               PacketType type = packet.getType();
+               if (type == PacketType.MSG_DELIVERMESSAGE)
+               {
+                  DeliverMessage message = (DeliverMessage) packet;
+                  // FIXME Classcast exception...
+                  MessageProxy proxy = JBossMessage.
+                  createThinDelegate(message.getDeliveryID(), (JBossMessage)message.getMessage(), message.getDeliveryCount());
+                  messageHandler.handleMessage(proxy);
+               }
+            } catch (Exception e)
+            {
+               // TODO Auto-generated catch block
+               e.printStackTrace();
+            }
+         }
+      });
+//      CallbackManager cm = connectionState.getRemotingConnection().getCallbackManager();
+//      cm.registerHandler(consumerID, messageHandler);
+//         
       consumerState.setClientConsumer(messageHandler);
       
       if (autoFlowControl)

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/StateCreationAspect.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/StateCreationAspect.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/container/StateCreationAspect.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -31,7 +31,6 @@
 import org.jboss.jms.client.delegate.ClientProducerDelegate;
 import org.jboss.jms.client.delegate.ClientSessionDelegate;
 import org.jboss.jms.client.delegate.DelegateSupport;
-import org.jboss.jms.client.remoting.ConsolidatedRemotingConnectionListener;
 import org.jboss.jms.client.remoting.JMSRemotingConnection;
 import org.jboss.jms.client.state.BrowserState;
 import org.jboss.jms.client.state.ConnectionState;
@@ -59,6 +58,7 @@
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
  * @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  *
  * $Id$
  */
@@ -97,11 +97,12 @@
          // install the consolidated remoting connection listener; it will be de-installed on
          // connection closing by ConnectionAspect
 
-         ConsolidatedRemotingConnectionListener listener =
-            new ConsolidatedRemotingConnectionListener();
+         // FIXME get rif of JBR code
+//         ConsolidatedRemotingConnectionListener listener =
+//            new ConsolidatedRemotingConnectionListener();
+//
+//         remotingConnection.addConnectionListener(listener);
 
-         remotingConnection.addConnectionListener(listener);
-
          if (versionToUse == null)
          {
             throw new IllegalStateException("Connection version is null");
@@ -115,7 +116,7 @@
             new ConnectionState(serverID, connectionDelegate,
                                 remotingConnection, versionToUse, idGenerator);
 
-         listener.setConnectionState(connectionState);
+         // listener.setConnectionState(connectionState);
           
          connectionDelegate.setState(connectionState);
       }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -23,6 +23,7 @@
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
+import java.util.concurrent.TimeoutException;
 
 import javax.jms.ConnectionMetaData;
 import javax.jms.Destination;
@@ -41,18 +42,23 @@
 import org.jboss.jms.tx.MessagingXid;
 import org.jboss.jms.tx.ResourceManagerFactory;
 import org.jboss.jms.tx.TransactionRequest;
-import org.jboss.jms.wireformat.CloseRequest;
-import org.jboss.jms.wireformat.ClosingRequest;
 import org.jboss.jms.wireformat.ConnectionCreateSessionDelegateRequest;
 import org.jboss.jms.wireformat.ConnectionGetClientIDRequest;
-import org.jboss.jms.wireformat.ConnectionGetIDBlockRequest;
 import org.jboss.jms.wireformat.ConnectionGetPreparedTransactionsRequest;
-import org.jboss.jms.wireformat.ConnectionSendTransactionRequest;
 import org.jboss.jms.wireformat.ConnectionSetClientIDRequest;
 import org.jboss.jms.wireformat.ConnectionStartRequest;
 import org.jboss.jms.wireformat.ConnectionStopRequest;
 import org.jboss.jms.wireformat.RequestSupport;
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.remoting.Client;
+import org.jboss.messaging.core.remoting.wireformat.CloseMessage;
+import org.jboss.messaging.core.remoting.wireformat.ClosingResponse;
+import org.jboss.messaging.core.remoting.wireformat.CreateSessionRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateSessionResponse;
+import org.jboss.messaging.core.remoting.wireformat.IDBlockRequest;
+import org.jboss.messaging.core.remoting.wireformat.IDBlockResponse;
+import org.jboss.messaging.core.remoting.wireformat.SendTransactionMessage;
+import org.jboss.messaging.core.remoting.wireformat.StartConnectionMessage;
 import org.jboss.messaging.util.Version;
 
 /**
@@ -61,6 +67,7 @@
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
  * @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  *
  * @version <tt>$Revision$</tt>
  *
@@ -82,6 +89,8 @@
 
    private transient Version versionToUse;
 
+   private Client newclient;
+
    // Static ---------------------------------------------------------------------------------------
 
    // Constructors ---------------------------------------------------------------------------------
@@ -133,6 +142,8 @@
       ResourceManagerFactory.instance.handleFailover(serverID, newDelegate.getServerID());
 
       client = thisState.getRemotingConnection().getRemotingClient();
+      
+      newclient = thisState.getRemotingConnection().getNewRemotingClient();
 
       serverID = newDelegate.getServerID();
    }
@@ -141,23 +152,37 @@
    {
       super.setState(state);
 
-      client = ((ConnectionState)state).getRemotingConnection().getRemotingClient();
+//      client = ((ConnectionState)state).getRemotingConnection().getRemotingClient();
+      
+      newclient =  ((ConnectionState)state).getRemotingConnection().getNewRemotingClient();
    }
 
    // Closeable implementation ---------------------------------------------------------------------
 
    public void close() throws JMSException
    {
-      RequestSupport req = new CloseRequest(id, version);
-
-      doInvoke(client, req);
+      assert newclient != null;
+      
+      CloseMessage message = new CloseMessage();
+      message.setTargetID(id);
+      newclient.sendOneWay(message);
    }
 
    public long closing(long sequence) throws JMSException
    {
-      RequestSupport req = new ClosingRequest(sequence, id, version);
+      assert newclient != null;
 
-      return ((Long)doInvoke(client, req)).longValue();
+      try
+      {
+         org.jboss.messaging.core.remoting.wireformat.ClosingRequest request = new org.jboss.messaging.core.remoting.wireformat.ClosingRequest(sequence);
+         request.setTargetID(id);
+         ClosingResponse response = (ClosingResponse) newclient.sendBlocking(request);
+         return response.getID();
+      } catch (TimeoutException e)
+      {
+         e.printStackTrace();
+         return -1;
+      }
    }
 
    // ConnectionDelegate implementation ------------------------------------------------------------
@@ -179,6 +204,19 @@
                                                 int acknowledgmentMode,
                                                 boolean isXA) throws JMSException
    {
+      assert newclient != null;
+
+      CreateSessionRequest request = new CreateSessionRequest(transacted, acknowledgmentMode, isXA);
+      request.setTargetID(id);
+      
+      try {
+         CreateSessionResponse response = (CreateSessionResponse) newclient.sendBlocking(request);         
+         ClientSessionDelegate delegate = new ClientSessionDelegate(response.getSessionID(), response.getDupsOKBatchSize(), response.isStrictTCK());
+         return delegate;
+      } catch (Exception e) {
+         e.printStackTrace();
+      }
+
       RequestSupport req =
          new ConnectionCreateSessionDelegateRequest(id, version, transacted,
                                                     acknowledgmentMode, isXA);
@@ -212,13 +250,18 @@
       throw new IllegalStateException("This invocation should not be handled here!");
    }
 
-   public void sendTransaction(TransactionRequest request,
+   public void sendTransaction(TransactionRequest tr,
                                boolean checkForDuplicates) throws JMSException
    {
-      RequestSupport req =
-         new ConnectionSendTransactionRequest(id, version, request, checkForDuplicates);
+      assert newclient != null;
 
-      doInvoke(client, req);
+      SendTransactionMessage request = new SendTransactionMessage(tr, checkForDuplicates);
+      request.setTargetID(id);
+      newclient.sendOneWay(request);
+//      RequestSupport req =
+//         new ConnectionSendTransactionRequest(id, version, request, checkForDuplicates);
+//
+//      doInvoke(client, req);
    }
 
    public void setClientID(String clientID) throws JMSException
@@ -239,9 +282,14 @@
 
    public void start() throws JMSException
    {
-      RequestSupport req = new ConnectionStartRequest(id, version);
+      assert newclient != null;
 
-      doInvoke(client, req);
+      StartConnectionMessage message = new StartConnectionMessage();
+      message.setTargetID(id);
+      newclient.sendOneWay(message);
+//      RequestSupport req = new ConnectionStartRequest(id, version);
+//
+//      doInvoke(client, req);
    }
    
    public void startAfterFailover() throws JMSException
@@ -283,9 +331,19 @@
    
    public IDBlock getIdBlock(int size) throws JMSException
    {
-      RequestSupport req = new ConnectionGetIDBlockRequest(id, version, size);
+      assert newclient != null;
 
-      return (IDBlock)doInvoke(client, req);
+      IDBlockRequest request = new IDBlockRequest(size);
+      request.setTargetID(id);
+      try
+      {
+         IDBlockResponse response = (IDBlockResponse) newclient.sendBlocking(request);
+         return new IDBlock(response.getLow(), response.getHigh());
+      } catch (TimeoutException e)
+      {
+         e.printStackTrace();
+         return null;
+      }
    }
 
    // Public ---------------------------------------------------------------------------------------

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -21,6 +21,9 @@
  */
 package org.jboss.jms.client.delegate;
 
+import static org.jboss.messaging.core.remoting.Constants.PORT;
+import static org.jboss.messaging.core.remoting.TransportType.TCP;
+
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.Serializable;
@@ -36,10 +39,10 @@
 import org.jboss.jms.delegate.TopologyResult;
 import org.jboss.jms.exception.MessagingNetworkFailureException;
 import org.jboss.jms.server.ServerPeer;
-import org.jboss.jms.wireformat.ConnectionFactoryCreateConnectionDelegateRequest;
 import org.jboss.jms.wireformat.ConnectionFactoryGetClientAOPStackRequest;
 import org.jboss.jms.wireformat.JMSWireFormat;
-import org.jboss.jms.wireformat.ResponseSupport;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionResponse;
 import org.jboss.messaging.util.Version;
 import org.jboss.remoting.Client;
 import org.jboss.remoting.InvokerLocator;
@@ -49,6 +52,7 @@
  *
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  *
  * @version <tt>$Revision$</tt>
  *
@@ -148,44 +152,60 @@
       CreateConnectionResult res;
       
       try
-      {         
+      {
          remotingConnection = new JMSRemotingConnection(serverLocatorURI, clientPing, strictTck);
-         
+       
          remotingConnection.start();
-   
-         Client client = remotingConnection.getRemotingClient();
-         
-         String remotingSessionId = client.getSessionId();
-         
-         String clientVMId = JMSClientVMIdentifier.instance;
-            
-         ConnectionFactoryCreateConnectionDelegateRequest req = 
-            new ConnectionFactoryCreateConnectionDelegateRequest(id, v,
-                                                                 remotingSessionId, clientVMId,
-                                                                 username, password, failedNodeID);
-           
-         ResponseSupport rs = (ResponseSupport)client.invoke(req, null);
-         
-         res = (CreateConnectionResult)rs.getResponse();
-      }
-      catch (Throwable t)
+         org.jboss.messaging.core.remoting.Client client = remotingConnection.getNewRemotingClient();
+         CreateConnectionRequest request = new CreateConnectionRequest(v, JMSClientVMIdentifier.instance, failedNodeID, username, password);
+         request.setTargetID(id);
+         CreateConnectionResponse response = (CreateConnectionResponse) client.sendBlocking(request);
+         ClientConnectionDelegate connectionDelegate = new ClientConnectionDelegate(response.getConnectionID(), response.getServerID());
+         res = new CreateConnectionResult(connectionDelegate);
+      } catch (Throwable e)
       {
-         //If we were invoking createConnectionDelegate and failure occurs then we need to clear
-         // up the JMSRemotingConnection
-
-         if (remotingConnection != null)
-         {
-            try
-            {
-               remotingConnection.stop();
-            }
-            catch (Throwable ignore)
-            {
-            }
-         }
-         
-         throw handleThrowable(t);
+         e.printStackTrace();
+         throw handleThrowable(e);
       }
+//      try
+//      {         
+//         remotingConnection = new JMSRemotingConnection(serverLocatorURI, clientPing, strictTck);
+//         
+//         remotingConnection.start();
+//   
+//         Client client = remotingConnection.getRemotingClient();
+//         
+//         String remotingSessionId = client.getSessionId();
+//         
+//         String clientVMId = JMSClientVMIdentifier.instance;
+//            
+//         ConnectionFactoryCreateConnectionDelegateRequest req = 
+//            new ConnectionFactoryCreateConnectionDelegateRequest(id, v,
+//                                                                 remotingSessionId, clientVMId,
+//                                                                 username, password, failedNodeID);
+//           
+//         ResponseSupport rs = (ResponseSupport)client.invoke(req, null);
+//         
+//         res = (CreateConnectionResult)rs.getResponse();
+//      }
+//      catch (Throwable t)
+//      {
+//         //If we were invoking createConnectionDelegate and failure occurs then we need to clear
+//         // up the JMSRemotingConnection
+//
+//         if (remotingConnection != null)
+//         {
+//            try
+//            {
+//               remotingConnection.stop();
+//            }
+//            catch (Throwable ignore)
+//            {
+//            }
+//         }
+//         
+//         throw handleThrowable(t);
+//      }
          
       ClientConnectionDelegate connectionDelegate = (ClientConnectionDelegate)res.getDelegate();
       

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConsumerDelegate.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConsumerDelegate.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientConsumerDelegate.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -21,6 +21,8 @@
   */
 package org.jboss.jms.client.delegate;
 
+import static org.jboss.messaging.core.remoting.TransportType.TCP;
+
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 
@@ -34,15 +36,18 @@
 import org.jboss.jms.destination.JBossDestination;
 import org.jboss.jms.wireformat.CloseRequest;
 import org.jboss.jms.wireformat.ClosingRequest;
-import org.jboss.jms.wireformat.ConsumerChangeRateRequest;
 import org.jboss.jms.wireformat.RequestSupport;
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.remoting.Client;
+import org.jboss.messaging.core.remoting.Constants;
+import org.jboss.messaging.core.remoting.wireformat.ChangeRateMessage;
 
 /**
  * The client-side Consumer delegate class.
  *
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  *
  * @version <tt>$Revision$</tt>
  *
@@ -92,6 +97,9 @@
       client = ((ConnectionState)state.getParent().getParent()).getRemotingConnection().
          getRemotingClient();
 
+      newClient = ((ConnectionState)state.getParent().getParent()).getRemotingConnection().
+      getNewRemotingClient();
+
       // synchronize server endpoint state
 
       // synchronize (recursively) the client-side state
@@ -109,8 +117,11 @@
    {
       super.setState(state);
 
-      client = ((ConnectionState)state.getParent().getParent()).getRemotingConnection().
-                  getRemotingClient();
+//      client = ((ConnectionState)state.getParent().getParent()).getRemotingConnection().
+//                  getRemotingClient();
+
+      newClient = ((ConnectionState)state.getParent().getParent()).getRemotingConnection().
+      getNewRemotingClient();
    }
 
    // Closeable implementation ---------------------------------------------------------------------
@@ -133,9 +144,16 @@
 
    public void changeRate(float newRate) throws JMSException
    {
-      RequestSupport req = new ConsumerChangeRateRequest(id, version, newRate);
+      assert newClient != null;
 
-      doInvoke(client, req);
+      
+      ChangeRateMessage message = new ChangeRateMessage(newRate);
+      message.setTargetID(id);
+      newClient.sendOneWay(message);
+      
+//      RequestSupport req = new ConsumerChangeRateRequest(id, version, newRate);
+//
+//      doInvoke(client, req);
    }
 
    /**
@@ -245,4 +263,5 @@
    // Private --------------------------------------------------------------------------------------
 
    // Inner Classes --------------------------------------------------------------------------------
+
 }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientSessionDelegate.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientSessionDelegate.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientSessionDelegate.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -25,6 +25,7 @@
 import java.io.DataOutputStream;
 import java.io.Serializable;
 import java.util.List;
+import java.util.concurrent.TimeoutException;
 
 import javax.jms.JMSException;
 import javax.jms.MessageListener;
@@ -54,20 +55,24 @@
 import org.jboss.jms.wireformat.CloseRequest;
 import org.jboss.jms.wireformat.ClosingRequest;
 import org.jboss.jms.wireformat.RequestSupport;
-import org.jboss.jms.wireformat.SessionAcknowledgeDeliveriesRequest;
-import org.jboss.jms.wireformat.SessionAcknowledgeDeliveryRequest;
 import org.jboss.jms.wireformat.SessionAddTemporaryDestinationRequest;
 import org.jboss.jms.wireformat.SessionCancelDeliveriesRequest;
 import org.jboss.jms.wireformat.SessionCancelDeliveryRequest;
 import org.jboss.jms.wireformat.SessionCreateBrowserDelegateRequest;
-import org.jboss.jms.wireformat.SessionCreateConsumerDelegateRequest;
 import org.jboss.jms.wireformat.SessionCreateQueueRequest;
 import org.jboss.jms.wireformat.SessionCreateTopicRequest;
 import org.jboss.jms.wireformat.SessionDeleteTemporaryDestinationRequest;
 import org.jboss.jms.wireformat.SessionRecoverDeliveriesRequest;
-import org.jboss.jms.wireformat.SessionSendRequest;
 import org.jboss.jms.wireformat.SessionUnsubscribeRequest;
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveriesMessage;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryRequest;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryResponse;
+import org.jboss.messaging.core.remoting.wireformat.CreateConsumerRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateConsumerResponse;
+import org.jboss.messaging.core.remoting.wireformat.NullPacket;
+import org.jboss.messaging.core.remoting.wireformat.SendMessage;
 
 /**
  * The client-side Session delegate class.
@@ -75,6 +80,7 @@
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
  * @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  *
  * @version <tt>$Revision$</tt>
  *
@@ -104,7 +110,15 @@
 
       this.dupsOKBatchSize = dupsOKBatchSize;
    }
+   
+   public ClientSessionDelegate(String objectID, int dupsOKBatchSize, boolean strictTCK)
+   {
+      super(objectID);
 
+      this.dupsOKBatchSize = dupsOKBatchSize;
+      this.strictTck = strictTCK;
+   }
+
    public ClientSessionDelegate()
    {
    }
@@ -138,9 +152,10 @@
       
       JMSRemotingConnection conn = ((ConnectionState)state.getParent()).getRemotingConnection();
 
-      client = conn.getRemotingClient();
-      
-      strictTck = conn.isStrictTck();
+      newClient = conn.getNewRemotingClient();
+//      client = conn.getRemotingClient();
+//      
+ //     strictTck = conn.isStrictTck();
    }
 
    // Closeable implementation ---------------------------------------------------------------------
@@ -163,16 +178,46 @@
 
    public boolean acknowledgeDelivery(Ack ack) throws JMSException
    {
-      RequestSupport req = new SessionAcknowledgeDeliveryRequest(id, version, ack);
+      assert newClient != null;
 
-      return ((Boolean)doInvoke(client, req)).booleanValue();
+      try
+      {
+         AcknowledgeDeliveryRequest request = new AcknowledgeDeliveryRequest(ack.getDeliveryID());
+         request.setTargetID(id);
+         
+         AcknowledgeDeliveryResponse  response = (AcknowledgeDeliveryResponse) newClient.sendBlocking(request);
+         return response.isAcknowledged();
+      } catch (Exception e)
+      {
+         e.printStackTrace();
+         return false;
+      }
+//
+//      //FIXME 
+//      RequestSupport req = new SessionAcknowledgeDeliveryRequest(id, version, ack);
+//
+//      return ((Boolean)doInvoke(client, req)).booleanValue();
    }
 
    public void acknowledgeDeliveries(List acks) throws JMSException
    {
-      RequestSupport req = new SessionAcknowledgeDeliveriesRequest(id, version, acks);
+      assert newClient != null;
+      
+      try
+      {
+         AcknowledgeDeliveriesMessage message = new AcknowledgeDeliveriesMessage(acks);
+         message.setTargetID(id);
+         AbstractPacket response = newClient.sendBlocking(message);
+         
+         assert response instanceof NullPacket;
+      } catch (TimeoutException e)
+      {
+         e.printStackTrace();
+      }
 
-      doInvoke(client, req);
+//      RequestSupport req = new SessionAcknowledgeDeliveriesRequest(id, version, acks);
+//
+//      doInvoke(client, req);
    }
 
    /**
@@ -234,11 +279,21 @@
                                                   boolean noLocal, String subscriptionName,
                                                   boolean connectionConsumer, boolean started) throws JMSException
    {
-      RequestSupport req = new SessionCreateConsumerDelegateRequest(id, version, destination,
-                                                                    selector, noLocal, subscriptionName,
-                                                                    connectionConsumer, started);
+      assert newClient != null;
 
-      return (ConsumerDelegate)doInvoke(client, req);
+      try 
+      {
+         CreateConsumerRequest request = new CreateConsumerRequest(destination, selector, noLocal, subscriptionName, connectionConsumer, started);
+         request.setTargetID(id);
+         CreateConsumerResponse response = (CreateConsumerResponse) newClient.sendBlocking(request);
+         ClientConsumerDelegate delegate = new ClientConsumerDelegate(response.getConsumerID(), response.getBufferSize(), response.getMaxDeliveries(), response.getRedeliveryDelay());
+         
+         return delegate;
+      } catch (Exception e)
+      {
+         e.printStackTrace();
+         return null;
+      }
    }
 
    /**
@@ -452,6 +507,8 @@
    
    public void send(JBossMessage m, boolean checkForDuplicates) throws JMSException
    {   	
+      assert newClient != null;
+      
    	long seq;
    	
    	if (m.isReliable() || strictTck)
@@ -467,16 +524,29 @@
    		sstate.incNpSendSequence();
    	}
    	
-      RequestSupport req = new SessionSendRequest(id, version, m, checkForDuplicates, seq);
-
-      if (seq == -1)
-      {      
-      	doInvoke(client, req);
-      }
-      else
+   	try
       {
-      	doInvokeOneway(client, req);
+         SendMessage message = new SendMessage(m, checkForDuplicates, seq);
+         message.setTargetID(id);
+         
+         newClient.sendOneWay(message);
+      } catch (Exception e)
+      {
+         // TODO Auto-generated catch block
+         e.printStackTrace();
       }
+   	
+   	
+//      RequestSupport req = new SessionSendRequest(id, version, m, checkForDuplicates, seq);
+//
+//      if (seq == -1)
+//      {      
+//      	doInvoke(client, req);
+//      }
+//      else
+//      {
+//      	doInvokeOneway(client, req);
+//      }
    }
 
    public void cancelDeliveries(List cancels) throws JMSException
@@ -523,6 +593,11 @@
       return dupsOKBatchSize;
    }
 
+   public boolean isStrictTck()
+   {
+      return strictTck;
+   }
+
    public String toString()
    {
       return "SessionDelegate[" + System.identityHashCode(this) + ", ID=" + id + "]";

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/DelegateSupport.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/DelegateSupport.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/DelegateSupport.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -54,6 +54,7 @@
  *
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  *
  * @version <tt>$Revision$</tt>
  *
@@ -84,6 +85,8 @@
    
    protected transient Client client;
 
+   protected transient org.jboss.messaging.core.remoting.Client newClient;
+
    // Static ---------------------------------------------------------------------------------------
 
    // Constructors ---------------------------------------------------------------------------------

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/remoting/JMSRemotingConnection.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/remoting/JMSRemotingConnection.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/remoting/JMSRemotingConnection.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -29,6 +29,8 @@
 import org.jboss.jms.server.ServerPeer;
 import org.jboss.jms.wireformat.JMSWireFormat;
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.remoting.Constants;
+import org.jboss.messaging.core.remoting.TransportType;
 import org.jboss.messaging.util.GUIDGenerator;
 import org.jboss.remoting.Client;
 import org.jboss.remoting.ConnectionListener;
@@ -50,6 +52,7 @@
  *
  * @author <a href="tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="ovidiu at feodorov.com">Ovidiu Feodorov</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * @version <tt>$Revision$</tt>
  * $Id$
  */
@@ -251,6 +254,8 @@
    private CallbackManager callbackManager;
    private boolean strictTck;
 
+   private org.jboss.messaging.core.remoting.Client newClient;
+
    // When a failover is performed, this flag is set to true
    protected boolean failed = false;
 
@@ -297,6 +302,9 @@
          }
       });
 
+      newClient = new org.jboss.messaging.core.remoting.Client();
+      newClient.connect(Constants.PORT, TransportType.TCP);
+
       // We explicitly set the Marshaller since otherwise remoting tries to resolve the marshaller
       // every time which is very slow - see org.jboss.remoting.transport.socket.ProcessInvocation
       // This can make a massive difference on performance. We also do this in
@@ -348,6 +356,17 @@
 
       client = null;
       
+      try
+      {
+         newClient.disconnect();
+      }
+      catch (Throwable ignore)
+      {        
+         log.trace(this + " failed to disconnect the new client", ignore);
+      }
+
+      newClient = null;
+
       log.trace(this + " closed");
    }
 
@@ -355,6 +374,11 @@
    {
       return client;
    }
+   
+   public org.jboss.messaging.core.remoting.Client getNewRemotingClient()
+   {
+      return newClient;
+   }
 
    public CallbackManager getCallbackManager()
    {

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -51,6 +51,7 @@
 import org.jboss.messaging.core.contract.ClusterNotification;
 import org.jboss.messaging.core.contract.ClusterNotificationListener;
 import org.jboss.messaging.core.contract.Replicator;
+import org.jboss.messaging.core.remoting.PacketDispatcher;
 import org.jboss.messaging.util.JNDIUtil;
 import org.jboss.messaging.util.Version;
 import org.jboss.remoting.InvokerLocator;
@@ -59,6 +60,7 @@
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:clebert.suconic at jboss.com">Clebert Suconic</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * @version <tt>$Revision$</tt>
  *
  * $Id$
@@ -128,7 +130,7 @@
       }
 
       // See http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4076040#4076040
-      String id = uniqueName;
+     final String id = uniqueName;
       
       Version version = serverPeer.getVersion();
 
@@ -215,7 +217,7 @@
       // Now bind it in JNDI
       rebindConnectionFactory(initialContext, jndiBindings, delegate);
 
-      ConnectionFactoryAdvised advised;
+      final ConnectionFactoryAdvised advised;
 
       // Need to synchronized to prevent a deadlock
       // See http://jira.jboss.com/jira/browse/JBMESSAGING-797
@@ -228,6 +230,8 @@
       // use a partially initialised object
       Dispatcher.instance.registerTarget(id, advised);
 
+      PacketDispatcher.server.register(advised.new ConnectionFactoryAdvisedPacketHandler(id));
+      
       // Replicate the change - we will ignore this locally
 
       if (replicator != null) replicator.put(Replicator.CF_PREFIX + uniqueName, localDelegate);
@@ -277,6 +281,8 @@
       }
 
       Dispatcher.instance.unregisterTarget(endpoint.getID(), endpoint);
+      
+      PacketDispatcher.server.unregister(endpoint.getID());
    }
 
    // MessagingComponent implementation ------------------------------------------------------------

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -21,6 +21,13 @@
   */
 package org.jboss.jms.server.endpoint;
 
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CLOSE;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SENDTRANSACTION;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_STARTCONNECTION;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CLOSING;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATESESSION;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_IDBLOCK;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -35,6 +42,7 @@
 import javax.jms.JMSException;
 import javax.jms.Session;
 
+import org.apache.mina.common.IoSession;
 import org.jboss.aop.AspectManager;
 import org.jboss.jms.client.delegate.ClientSessionDelegate;
 import org.jboss.jms.client.remoting.CallbackManager;
@@ -63,6 +71,16 @@
 import org.jboss.messaging.core.contract.Queue;
 import org.jboss.messaging.core.impl.tx.Transaction;
 import org.jboss.messaging.core.impl.tx.TransactionRepository;
+import org.jboss.messaging.core.remoting.PacketDispatcher;
+import org.jboss.messaging.core.remoting.PacketHandler;
+import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+import org.jboss.messaging.core.remoting.wireformat.ClosingResponse;
+import org.jboss.messaging.core.remoting.wireformat.CreateSessionRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateSessionResponse;
+import org.jboss.messaging.core.remoting.wireformat.IDBlockRequest;
+import org.jboss.messaging.core.remoting.wireformat.IDBlockResponse;
+import org.jboss.messaging.core.remoting.wireformat.PacketType;
+import org.jboss.messaging.core.remoting.wireformat.SendTransactionMessage;
 import org.jboss.messaging.util.ExceptionUtil;
 import org.jboss.messaging.util.GUIDGenerator;
 import org.jboss.messaging.util.Util;
@@ -74,6 +92,7 @@
  * 
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * @version <tt>$Revision$</tt>
  *
  * $Id$
@@ -194,7 +213,8 @@
       
       this.callbackHandler = callbackHandler;
       
-      Client callbackClient = callbackHandler.getCallbackClient();
+      // FIXME callbackHandler passed in parameter is null
+      Client callbackClient = null; //callbackHandler.getCallbackClient();
       
       if (callbackClient != null)
       {
@@ -265,6 +285,8 @@
 
          Dispatcher.instance.registerTarget(sessionID, sessionAdvised);
 
+         PacketDispatcher.server.register(ep.new ServerSessionEndpointPacketHandler());
+         
          log.trace("created and registered " + ep);
          
          ClientSessionDelegate d = new ClientSessionDelegate(sessionID, dupsOKBatchSize);
@@ -420,6 +442,8 @@
          cm.unregisterConnection(jmsClientVMID, remotingClientSessionID);
    
          Dispatcher.instance.unregisterTarget(id, this);
+         
+         PacketDispatcher.server.unregister(id);
 
          closed = true;
       }
@@ -808,7 +832,63 @@
       }
             
       if (trace) { log.trace(this + " processed transaction " + tx); }
-   }   
+   }
 
+
    // Inner classes --------------------------------------------------------------------------------
+
+   class ServerConnectionEndpointPacketHandler implements PacketHandler
+   {
+
+      public String getID()
+      {
+         return id;
+      }
+
+      public void handle(AbstractPacket packet, IoSession session)
+      {
+         try
+         {
+            PacketType type = packet.getType();
+            if (type == REQ_CREATESESSION)
+            {
+               CreateSessionRequest request = (CreateSessionRequest) packet;
+               ClientSessionDelegate sessionDelegate = (ClientSessionDelegate) createSessionDelegate(request.isTransacted(), request.getAcknowledgementMode(), request.isXA());
+               CreateSessionResponse response = new CreateSessionResponse(sessionDelegate.getID(), sessionDelegate.getDupsOKBatchSize(), sessionDelegate.isStrictTck());
+               response.normalize(request);
+               session.write(response);
+            } else if (type == REQ_IDBLOCK)
+            {
+               IDBlockRequest request = (IDBlockRequest) packet;
+               IDBlock idBlock = getIdBlock(request.getSize());
+               IDBlockResponse response = new IDBlockResponse(idBlock.getLow(), idBlock.getHigh());
+               response.normalize(request);
+               session.write(response);
+            } else if (type == MSG_STARTCONNECTION)
+            {
+               start();
+            } else if (type == REQ_CLOSING)
+            {
+               org.jboss.messaging.core.remoting.wireformat.ClosingRequest request = (org.jboss.messaging.core.remoting.wireformat.ClosingRequest) packet;
+               long id = closing(request.getSequence());
+               ClosingResponse response = new ClosingResponse(id);
+               response.normalize(request);
+               session.write(response);
+            } else if (type == MSG_CLOSE)
+            {
+               close();
+            } else if (type == MSG_SENDTRANSACTION)
+            {
+               SendTransactionMessage message = (SendTransactionMessage) packet;
+               sendTransaction(message.getTransactionRequest(), message.checkForDuplicates());
+            } else 
+            {
+               log.error("Unsupported packet for connection: " + packet);
+            }
+         } catch (JMSException e)
+         {
+            e.printStackTrace();
+         }
+      }
+   }
 }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConnectionFactoryEndpoint.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConnectionFactoryEndpoint.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConnectionFactoryEndpoint.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -21,10 +21,13 @@
   */
 package org.jboss.jms.server.endpoint;
 
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATECONNECTION;
+
 import java.util.Map;
 
 import javax.jms.JMSException;
 
+import org.apache.mina.common.IoSession;
 import org.jboss.aop.AspectManager;
 import org.jboss.jms.client.delegate.ClientConnectionDelegate;
 import org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate;
@@ -37,15 +40,22 @@
 import org.jboss.jms.wireformat.ConnectionFactoryUpdate;
 import org.jboss.jms.wireformat.Dispatcher;
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.remoting.PacketDispatcher;
+import org.jboss.messaging.core.remoting.PacketHandler;
+import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionResponse;
+import org.jboss.messaging.core.remoting.wireformat.PacketType;
 import org.jboss.messaging.util.ExceptionUtil;
 import org.jboss.remoting.callback.Callback;
-import org.jboss.remoting.callback.ServerInvokerCallbackHandler; 
+import org.jboss.remoting.callback.ServerInvokerCallbackHandler;
 
 /**
  * Concrete implementation of ConnectionFactoryEndpoint
  *
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * @version <tt>$Revision$</tt>
  *
  * $Id$
@@ -240,14 +250,14 @@
 
       // create the corresponding "server-side" connection endpoint and register it with the
       // server peer's ClientManager
-      ServerConnectionEndpoint endpoint =
+      final ServerConnectionEndpoint endpoint =
          new ServerConnectionEndpoint(serverPeer, clientIDUsed, username, password, prefetchSize,
                                       defaultTempQueueFullSize, defaultTempQueuePageSize,
                                       defaultTempQueueDownCacheSize, failedNodeID, this,
                                       remotingSessionID, clientVMID, versionToUse,
                                       callbackHandler, dupsOKBatchSize);
 
-      String connectionID = endpoint.getConnectionID();
+      final String connectionID = endpoint.getConnectionID();
 
       ConnectionAdvised connAdvised;
       
@@ -259,6 +269,8 @@
       }
       
       Dispatcher.instance.registerTarget(connectionID, connAdvised);
+      
+      PacketDispatcher.server.register(endpoint.new ServerConnectionEndpointPacketHandler());
 
       log.trace("created and registered " + endpoint);
 
@@ -366,10 +378,10 @@
    {
    	return supportsFailover;
    }
-   
+
    // Protected ------------------------------------------------------------------------------------
-   
+
    // Private --------------------------------------------------------------------------------------
-   
+
    // Inner classes --------------------------------------------------------------------------------
 }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -21,10 +21,13 @@
  */
 package org.jboss.jms.server.endpoint;
 
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CHANGERATE;
+
 import javax.jms.IllegalStateException;
 import javax.jms.InvalidSelectorException;
 import javax.jms.JMSException;
 
+import org.apache.mina.common.IoSession;
 import org.jboss.jms.delegate.ConsumerEndpoint;
 import org.jboss.jms.destination.JBossDestination;
 import org.jboss.jms.message.JBossMessage;
@@ -45,6 +48,11 @@
 import org.jboss.messaging.core.contract.Replicator;
 import org.jboss.messaging.core.impl.SimpleDelivery;
 import org.jboss.messaging.core.impl.tx.Transaction;
+import org.jboss.messaging.core.remoting.PacketHandler;
+import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+import org.jboss.messaging.core.remoting.wireformat.ChangeRateMessage;
+import org.jboss.messaging.core.remoting.wireformat.DeliverMessage;
+import org.jboss.messaging.core.remoting.wireformat.PacketType;
 import org.jboss.messaging.util.ExceptionUtil;
 
 /**
@@ -53,6 +61,7 @@
  * 
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * @version <tt>$Revision$</tt> $Id$
  */
 public class ServerConsumerEndpoint implements Receiver, ConsumerEndpoint
@@ -630,7 +639,53 @@
    {
       sessionEndpoint.promptDelivery(messageQueue);
    }
+   
+   
+   private IoSession session;
 
+   private void setSession(IoSession session)
+   {
+      this.session = session;
+   }   
+
+   public void deliver(DeliverMessage message)
+   {
+      if (session != null)
+      {
+         message.setTargetID(id);
+         session.write(message);
+      } else {
+         log.error("No session to deliver message");
+      }
+   }
+
    // Inner classes --------------------------------------------------------------------------------
+   
+   public class ServerConsumerEndpointPacketHandler implements PacketHandler {
 
+      public String getID()
+      {
+         return id;
+      }
+
+      public void handle(AbstractPacket packet, IoSession session)
+      {
+         setSession(session);
+         try
+         {
+            PacketType type = packet.getType();
+            if (type == MSG_CHANGERATE)
+            {
+               ChangeRateMessage message = (ChangeRateMessage) packet;
+               changeRate(message.getRate());
+            } else {
+               log.error("unsupported packet by server consumer endpoint: "  + packet);
+            }
+         } catch (JMSException e)
+         {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+         }
+      }
+   }
 }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -21,6 +21,11 @@
   */
 package org.jboss.jms.server.endpoint;
 
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_ACKDELIVERIES;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SENDMESSAGE;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_ACKDELIVERY;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATECONSUMER;
+
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -37,6 +42,7 @@
 import javax.jms.InvalidDestinationException;
 import javax.jms.JMSException;
 
+import org.apache.mina.common.IoSession;
 import org.jboss.aop.AspectManager;
 import org.jboss.jms.client.delegate.ClientBrowserDelegate;
 import org.jboss.jms.client.delegate.ClientConsumerDelegate;
@@ -44,6 +50,7 @@
 import org.jboss.jms.delegate.BrowserDelegate;
 import org.jboss.jms.delegate.Cancel;
 import org.jboss.jms.delegate.ConsumerDelegate;
+import org.jboss.jms.delegate.DefaultAck;
 import org.jboss.jms.delegate.DeliveryInfo;
 import org.jboss.jms.delegate.DeliveryRecovery;
 import org.jboss.jms.delegate.SessionEndpoint;
@@ -62,7 +69,6 @@
 import org.jboss.jms.server.endpoint.advised.ConsumerAdvised;
 import org.jboss.jms.server.messagecounter.MessageCounter;
 import org.jboss.jms.server.selector.Selector;
-import org.jboss.jms.wireformat.ClientDelivery;
 import org.jboss.jms.wireformat.Dispatcher;
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.contract.Binding;
@@ -83,11 +89,21 @@
 import org.jboss.messaging.core.impl.tx.TransactionException;
 import org.jboss.messaging.core.impl.tx.TransactionRepository;
 import org.jboss.messaging.core.impl.tx.TxCallback;
+import org.jboss.messaging.core.remoting.PacketDispatcher;
+import org.jboss.messaging.core.remoting.PacketHandler;
+import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveriesMessage;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryRequest;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryResponse;
+import org.jboss.messaging.core.remoting.wireformat.CreateConsumerRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateConsumerResponse;
+import org.jboss.messaging.core.remoting.wireformat.DeliverMessage;
+import org.jboss.messaging.core.remoting.wireformat.NullPacket;
+import org.jboss.messaging.core.remoting.wireformat.PacketType;
+import org.jboss.messaging.core.remoting.wireformat.SendMessage;
 import org.jboss.messaging.util.ExceptionUtil;
 import org.jboss.messaging.util.GUIDGenerator;
 import org.jboss.messaging.util.MessageQueueNameHelper;
-import org.jboss.remoting.Client;
-import org.jboss.remoting.callback.Callback;
 import org.jboss.remoting.callback.ServerInvokerCallbackHandler;
 
 import EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap;
@@ -112,6 +128,7 @@
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:clebert.suconic at jboss.com">Clebert Suconic</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * @version <tt>$Revision$</tt>
  *
  * $Id$
@@ -1451,69 +1468,72 @@
       // We send the message to the client on the current thread. The message is written onto the
       // transport and then the thread returns immediately without waiting for a response.
 
-      Client callbackClient = callbackHandler.getCallbackClient();
+   	DeliverMessage m = new DeliverMessage(ref.getMessage(), consumer.getID(), deliveryID, ref.getDeliveryCount());
+      consumer.deliver(m);
 
-      ClientDelivery del = new ClientDelivery(ref.getMessage(), consumer.getID(), deliveryID, ref.getDeliveryCount());
-
-      Callback callback = new Callback(del);
-
-      try
-      {
-         // FIXME - due a design (flaw??) in the socket based transports, they use a pool of TCP
-         // connections, so subsequent invocations can end up using different underlying
-         // connections meaning that later invocations can overtake earlier invocations, if there
-         // are more than one user concurrently invoking on the same transport. We need someway
-         // of pinning the client object to the underlying invocation. For now we just serialize
-         // all access so that only the first connection in the pool is ever used - but this is
-         // far from ideal!!!
-         // See http://jira.jboss.com/jira/browse/JBMESSAGING-789
-
-         Object invoker = null;
-
-         if (callbackClient != null)
-         {
-            invoker = callbackClient.getInvoker();                              
-         }
-         else
-         {
-            // TODO: dummy synchronization object, in case there's no clientInvoker. This will
-            // happen during the first invocation anyway. It's a kludge, I know, but this whole
-            // synchronization thing is a huge kludge. Needs to be reviewed.
-            invoker = new Object();
-         }
-         
-         synchronized (invoker)
-         {
-            // one way invocation, no acknowledgment sent back by the client
-            if (trace) { log.trace(this + " submitting message " + ref.getMessage() + " to the remoting layer to be sent asynchronously"); }
-            
-            callbackHandler.handleCallbackOneway(callback);
-                                    
-            //We store the delivery id so we know to wait for any deliveries in transit on close
-            consumer.setLastDeliveryID(deliveryID);
-         }
-      }
-      catch (Throwable t)
-      {
-         // it's an oneway callback, so exception could only have happened on the server, while
-         // trying to send the callback. This is a good reason to smack the whole connection.
-         // I trust remoting to have already done its own cleanup via a CallbackErrorHandler,
-         // I need to do my own cleanup at ConnectionManager level.
-
-         log.trace(this + " failed to handle callback", t);
-         
-         //We stop the consumer - some time later the lease will expire and the connection will be closed        
-         //which will remove the consumer
-         
-         consumer.setStarted(false);
-         
-         consumer.setDead();
-
-         //** IMPORTANT NOTE! We must return the delivery NOT null. **
-         //This is because if we return NULL then message will remain in the queue, but later
-         //the connection checker will cleanup and close this consumer which will cancel all the deliveries in it
-         //including this one, so the message will go back on the queue twice!         
-      }
+//      ClientDelivery del = new ClientDelivery(ref.getMessage(), consumer.getID(), deliveryID, ref.getDeliveryCount());
+//
+//      Client callbackClient = callbackHandler.getCallbackClient();
+//
+//      Callback callback = new Callback(del);
+//
+//      try
+//      {
+//         // FIXME - due a design (flaw??) in the socket based transports, they use a pool of TCP
+//         // connections, so subsequent invocations can end up using different underlying
+//         // connections meaning that later invocations can overtake earlier invocations, if there
+//         // are more than one user concurrently invoking on the same transport. We need someway
+//         // of pinning the client object to the underlying invocation. For now we just serialize
+//         // all access so that only the first connection in the pool is ever used - but this is
+//         // far from ideal!!!
+//         // See http://jira.jboss.com/jira/browse/JBMESSAGING-789
+//
+//         Object invoker = null;
+//
+//         if (callbackClient != null)
+//         {
+//            invoker = callbackClient.getInvoker();                              
+//         }
+//         else
+//         {
+//            // TODO: dummy synchronization object, in case there's no clientInvoker. This will
+//            // happen during the first invocation anyway. It's a kludge, I know, but this whole
+//            // synchronization thing is a huge kludge. Needs to be reviewed.
+//            invoker = new Object();
+//         }
+//         
+//         synchronized (invoker)
+//         {
+//            // one way invocation, no acknowledgment sent back by the client
+//            if (trace) { log.trace(this + " submitting message " + ref.getMessage() + " to the remoting layer to be sent asynchronously"); }
+//            
+//            callbackHandler.handleCallbackOneway(callback);
+//                                    
+//            //We store the delivery id so we know to wait for any deliveries in transit on close
+//            consumer.setLastDeliveryID(deliveryID);
+//         }
+//      }
+//      catch (Throwable t)
+//      {
+//         // it's an oneway callback, so exception could only have happened on the server, while
+//         // trying to send the callback. This is a good reason to smack the whole connection.
+//         // I trust remoting to have already done its own cleanup via a CallbackErrorHandler,
+//         // I need to do my own cleanup at ConnectionManager level.
+//
+//         log.trace(this + " failed to handle callback", t);
+//         
+//         //We stop the consumer - some time later the lease will expire and the connection will be closed        
+//         //which will remove the consumer
+//         
+//         consumer.setStarted(false);
+//         
+//         consumer.setDead();
+//
+//         //** IMPORTANT NOTE! We must return the delivery NOT null. **
+//         //This is because if we return NULL then message will remain in the queue, but later
+//         //the connection checker will cleanup and close this consumer which will cancel all the deliveries in it
+//         //including this one, so the message will go back on the queue twice!         
+//      }
    }
    
    void acknowledgeTransactionally(List acks, Transaction tx) throws Throwable
@@ -1833,6 +1853,8 @@
       }
       
       Dispatcher.instance.registerTarget(consumerID, advised);
+
+      PacketDispatcher.server.register(ep.new ServerConsumerEndpointPacketHandler());
       
       ClientConsumerDelegate stub =
          new ClientConsumerDelegate(consumerID, prefetchSize, -1, 0);
@@ -2150,6 +2172,8 @@
       
       Dispatcher.instance.registerTarget(consumerID, advised);
       
+      PacketDispatcher.server.register(ep.new ServerConsumerEndpointPacketHandler());
+
       ClientConsumerDelegate stub =
          new ClientConsumerDelegate(consumerID, prefetchSize, maxDeliveryAttemptsToUse, redeliveryDelayToUse);
       
@@ -2396,4 +2420,53 @@
          delList.add(deliveryId);
       }
    }
+   
+   public class ServerSessionEndpointPacketHandler implements PacketHandler {
+
+      public String getID()
+      {
+         return id;
+      }
+
+      public void handle(AbstractPacket packet, IoSession session)
+      {
+         try
+         {
+            PacketType type = packet.getType();
+            if (type == MSG_SENDMESSAGE)
+            {
+               SendMessage message = (SendMessage) packet;
+               send(message.getMessage(), message.checkForDuplicates(), message.getSequence());
+            } else if (type == REQ_CREATECONSUMER)
+            {
+               CreateConsumerRequest request = (CreateConsumerRequest) packet;
+               ClientConsumerDelegate consumer = (ClientConsumerDelegate) createConsumerDelegate(request.getDestination(), request.getSelector(), request.isNoLocal(), request.getSubscriptionName(), request.isConnectionConsumer(), request.isAutoFlowControl());
+               CreateConsumerResponse response = new CreateConsumerResponse(consumer.getID(), consumer.getBufferSize(), consumer.getMaxDeliveries(), consumer.getRedeliveryDelay());
+               response.normalize(request);
+               session.write(response);
+            } else if (type == REQ_ACKDELIVERY)
+            {
+               AcknowledgeDeliveryRequest request = (AcknowledgeDeliveryRequest) packet;
+               boolean acknowledged = acknowledgeDelivery(new DefaultAck(request.getDeliveryID()));
+               AcknowledgeDeliveryResponse response = new AcknowledgeDeliveryResponse(acknowledged);
+               response.normalize(request);
+               session.write(response);
+            } else if (type == MSG_ACKDELIVERIES)
+            {
+               AcknowledgeDeliveriesMessage message = (AcknowledgeDeliveriesMessage) packet;
+               acknowledgeDeliveries(message.getAcks());
+               
+               NullPacket p = new NullPacket();
+               p.normalize(message);
+               session.write(p);
+            } else {
+               log.error("Unsupported packet for session: " + packet);
+            }
+         } catch (JMSException e)
+         {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+         }
+      }      
+   }
 }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/advised/ConnectionFactoryAdvised.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/advised/ConnectionFactoryAdvised.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/advised/ConnectionFactoryAdvised.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -21,19 +21,29 @@
   */
 package org.jboss.jms.server.endpoint.advised;
 
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATECONNECTION;
+
 import javax.jms.JMSException;
 
+import org.apache.mina.common.IoSession;
 import org.jboss.jms.delegate.ConnectionFactoryEndpoint;
 import org.jboss.jms.delegate.CreateConnectionResult;
 import org.jboss.jms.delegate.TopologyResult;
 import org.jboss.jms.server.endpoint.ConnectionFactoryInternalEndpoint;
 import org.jboss.jms.server.endpoint.ServerConnectionFactoryEndpoint;
+import org.jboss.messaging.core.remoting.Assert;
+import org.jboss.messaging.core.remoting.PacketHandler;
+import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionResponse;
+import org.jboss.messaging.core.remoting.wireformat.PacketType;
 import org.jboss.remoting.callback.ServerInvokerCallbackHandler;
 
 /**
  *
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * @version <tt>1.5</tt>
  *
  * ConnectionFactoryAdvised.java,v 1.3 2006/03/01 22:56:51 ovidiu Exp
@@ -133,4 +143,46 @@
 
    // Inner classes --------------------------------------------------------------------------------
 
+   public final class ConnectionFactoryAdvisedPacketHandler implements
+   PacketHandler
+   {
+      private String id;
+
+      public ConnectionFactoryAdvisedPacketHandler(String id)
+      {
+         Assert.assertValidID(id);
+         
+         this.id = id;
+      }
+      
+      public String getID()
+      {
+         return id;
+      }
+
+      public void handle(AbstractPacket packet, IoSession session)
+      {
+         PacketType type = packet.getType();
+         if (type == REQ_CREATECONNECTION)
+         {
+            CreateConnectionRequest request = (CreateConnectionRequest) packet;
+            try
+            {
+               CreateConnectionResult del = 
+                  createConnectionDelegate(request.getUsername(), request.getPassword(), request.getFailedNodeID(), null, request.getClientVMID(), request.getVersion(), null);
+               CreateConnectionResponse response = new CreateConnectionResponse(del.getDelegate().getID(), del.getDelegate().getServerID());
+               response.normalize(request);
+               session.write(response);
+            } catch (Exception e)
+            {
+               // TODO Auto-generated catch block
+               e.printStackTrace();
+            }
+
+         } else
+         {
+            System.err.println("unhandled packet:" + packet);
+         }
+      }
 }
+}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/AbstractPacketHandler.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/AbstractPacketHandler.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/AbstractPacketHandler.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -10,6 +10,7 @@
 
 import java.util.UUID;
 
+import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
 
 /**
@@ -18,6 +19,8 @@
  * @see UUID#randomUUID()
  * 
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public abstract class AbstractPacketHandler implements PacketHandler
 {
@@ -52,7 +55,7 @@
       return id;
    }
 
-   public abstract void handle(AbstractPacket packet);
+   public abstract void handle(AbstractPacket packet, IoSession session);
 
    // Package protected ---------------------------------------------
 

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Assert.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Assert.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Assert.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -1,3 +1,9 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
 package org.jboss.messaging.core.remoting;
 
 /**
@@ -2,2 +8,4 @@
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Client.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Client.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Client.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,224 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.jboss.messaging.core.remoting.Constants.CONNECTION_TIMEOUT;
+import static org.jboss.messaging.core.remoting.TransportType.HTTP;
+import static org.jboss.messaging.core.remoting.TransportType.TCP;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import org.apache.mina.common.CloseFuture;
+import org.apache.mina.common.ConnectFuture;
+import org.apache.mina.common.DefaultIoFilterChainBuilder;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.logging.LoggingFilter;
+import org.apache.mina.filter.logging.MdcInjectionFilter;
+import org.apache.mina.filter.reqres.Request;
+import org.apache.mina.filter.reqres.RequestResponseFilter;
+import org.apache.mina.filter.reqres.RequestTimeoutException;
+import org.apache.mina.filter.reqres.Response;
+import org.apache.mina.filter.ssl.SslFilter;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.jboss.messaging.core.remoting.codec.PacketCodecFactory;
+import org.jboss.messaging.core.remoting.internal.ClientHandler;
+import org.jboss.messaging.core.remoting.internal.PacketInspector;
+import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class Client
+{
+   // Attributes ----------------------------------------------------
+
+   private IoSession session;
+   private SslFilter sslFilter;
+
+   // By default, a blocking request will timeout after 5 seconds
+   private int blockingRequestTimeout = 5;
+   private TimeUnit blockingRequestTimeUnit = SECONDS;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+   
+   public Client()
+   {
+   }
+   
+   // Public --------------------------------------------------------
+
+   public void connect(int port, TransportType transport) throws Exception
+   {
+      connect(port, transport, false);
+   }
+
+   public void connect(int port, TransportType transport, boolean useSSL)
+         throws Exception
+   {
+      assert port > 0;
+      assert transport != null;
+
+      NioSocketConnector connector = new NioSocketConnector();
+
+      connector.setConnectTimeout(CONNECTION_TIMEOUT);
+
+      if (useSSL)
+         addSSLSupport(connector.getFilterChain());
+
+      MdcInjectionFilter mdcInjectionFilter = new MdcInjectionFilter();
+      connector.getFilterChain().addLast("mdc", mdcInjectionFilter);
+
+      if (transport == TCP)
+      {
+         connector.getFilterChain().addLast("codec",
+               new ProtocolCodecFilter(new PacketCodecFactory()));
+      } else
+      {
+         assert transport == HTTP;
+
+         // TODO support HTTP
+         // URL url = new URL("http://localhost:" + port + "/");
+         // connector.getFilterChain().addLast("http_codec",
+         // new ProtocolCodecFilter(new HttpProtocolCodecFactory(url)));
+         // connector.getFilterChain().addLast("http_logger", new
+         // LoggingFilter());
+         // connector.getFilterChain().addLast("http_filter",
+         // new HTTPFilter(false));
+      }
+
+      addBlockingRequestResponseFilter(connector.getFilterChain());
+
+      connector.getFilterChain().addLast("logger", new LoggingFilter());
+
+      connector.setHandler(new ClientHandler());
+      InetSocketAddress address = new InetSocketAddress(port);
+      ConnectFuture future = connector.connect(address);
+      future.awaitUninterruptibly();
+      if (!future.isConnected())
+      {
+         throw new IOException("Cannot connect to " + address.toString());
+      }
+      this.session = future.getSession();
+   }
+
+   public boolean disconnect() throws Exception
+   {
+      assert session != null;
+
+      if (sslFilter != null)
+      {
+         sslFilter.stopSsl(session).awaitUninterruptibly();
+         // FIXME: w/o the delay, an exception is thrown:
+         // "Inbound closed before receiving peer's close_notify"
+         Thread.sleep(500);
+      }
+      CloseFuture closeFuture = session.close().awaitUninterruptibly();
+      return closeFuture.isClosed();
+   }
+
+   public void sendOneWay(AbstractPacket packet)
+   {
+      assert packet != null;
+      checkConnected();
+
+      session.write(packet);
+   }
+
+   public void sendOneWay(AbstractPacket packet, PacketHandler callbackHandler)
+   {
+      assert packet != null;
+      assert callbackHandler != null;
+      checkConnected();
+
+      PacketDispatcher.client.register(callbackHandler);
+      packet.setCallbackID(callbackHandler.getID());
+      session.write(packet);
+   }
+
+   public AbstractPacket sendBlocking(AbstractPacket packet)
+         throws TimeoutException
+   {
+      assert packet != null;
+      checkConnected();
+
+      packet.setCorrelationID(System.nanoTime());
+
+      // TODO request timeout must be configurable
+      Request req = new Request(packet.getCorrelationID(), packet,
+            blockingRequestTimeout, blockingRequestTimeUnit);
+      session.write(req);
+      Response response;
+      try
+      {
+         response = req.awaitResponse();
+         return (AbstractPacket) response.getMessage();
+      } catch (RequestTimeoutException e)
+      {
+         TimeoutException toe = new TimeoutException();
+         toe.initCause(e);
+         throw toe;
+      } catch (InterruptedException e)
+      {
+         TimeoutException toe = new TimeoutException();
+         toe.initCause(e);
+         throw toe;
+      }
+   }
+
+   public void setBlockingRequestTimeout(int timeout, TimeUnit unit)
+   {
+      this.blockingRequestTimeout = timeout;
+      this.blockingRequestTimeUnit = unit;
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   private void addBlockingRequestResponseFilter(
+         DefaultIoFilterChainBuilder chain)
+   {
+      ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+      RequestResponseFilter filter = new RequestResponseFilter(
+            new PacketInspector(), scheduler);
+      chain.addLast("reqres", filter);
+   }
+
+   private void addSSLSupport(DefaultIoFilterChainBuilder chain)
+         throws Exception
+   {
+      // TODO support SSL
+      // this.sslFilter = new
+      // SslFilter(BogusSslContextFactory.getInstance(false));
+      // sslFilter.setUseClientMode(true);
+      // chain.addLast("sslFilter", sslFilter);
+   }
+
+   private void checkConnected()
+   {
+      if (session == null)
+      {
+         throw new IllegalStateException("RemoteDispatcher is not connected.");
+      }
+   }
+
+   // Inner classes -------------------------------------------------
+
+}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Constants.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Constants.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/Constants.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -6,12 +6,10 @@
  */
 package org.jboss.messaging.core.remoting;
 
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public class Constants
 {
@@ -19,28 +17,10 @@
 
    public static final int CONNECTION_TIMEOUT = 20 * 1000;
 
-   public static final byte NULL_BYTE = (byte) 0;
-
-   public static final CharsetEncoder UTF_8_ENCODER = Charset.forName("UTF-8")
-         .newEncoder();
-
-   public static final CharsetDecoder UTF_8_DECODER = Charset.forName("UTF-8")
-         .newDecoder();
-
    public static final long NO_CORRELATION_ID = -1L;
 
-   public static final String NO_TARGET_ID = "NO_TARGET_ID_SET";
+   public static final String NO_ID_SET = "NO_ID_SET";
 
-   public static final String NO_CALLBACK_ID = "NO_CALLBACK_ID_SET";
-
-   public static final int INT_LENGTH = 4;
-
-   public static final int LONG_LENGTH = 8;
-
-   public static final byte TRUE = (byte) 0;
-
-   public static final byte FALSE = (byte) 1;
-
    public static final int PORT = 8080;
 
    public static final String PACKET_TYPE_HEADER = "PACKET_TYPE";

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/PacketDispatcher.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/PacketDispatcher.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/PacketDispatcher.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,69 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting;
+
+import static org.jboss.messaging.core.remoting.Assert.assertValidID;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class PacketDispatcher
+{
+
+   // Attributes ----------------------------------------------------
+
+   private Map<String, PacketHandler> handlers;
+
+   // Static --------------------------------------------------------
+
+   public static final PacketDispatcher client = new PacketDispatcher();
+   public static final PacketDispatcher server = new PacketDispatcher();
+
+   // Constructors --------------------------------------------------
+
+   private PacketDispatcher()
+   {
+      handlers = new ConcurrentHashMap<String, PacketHandler>();
+   }
+
+   // Public --------------------------------------------------------
+
+   public void register(PacketHandler handler)
+   {
+      assertValidID(handler.getID());
+      assert handler != null;
+
+      handlers.put(handler.getID(), handler);
+   }
+
+   public void unregister(String handlerID)
+   {
+      assertValidID(handlerID);
+
+      handlers.remove(handlerID);
+   }
+
+   public PacketHandler getHandler(String handlerID)
+   {
+      assertValidID(handlerID);
+
+      return handlers.get(handlerID);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/PacketHandler.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/PacketHandler.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/PacketHandler.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -6,6 +6,7 @@
  */
 package org.jboss.messaging.core.remoting;
 
+import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
 
 /**
@@ -15,11 +16,13 @@
  * It must have an ID unique among all PacketHandlers (or at least among those
  * registered into the same RemoteDispatcher).
  * 
- * @see RemoteDispatcher#register(PacketHandler)
- * @see RemoteDispatcher#unregister(String)
+ * @see PacketDispatcher#register(PacketHandler)
+ * @see PacketDispatcher#unregister(String)
  * @see AbstractPacketHandler
  * 
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public interface PacketHandler
 {
@@ -33,5 +36,5 @@
     */
    String getID();
 
-   void handle(AbstractPacket packet);
+   void handle(AbstractPacket packet, IoSession session);
 }

Deleted: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/RemoteDispatcher.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/RemoteDispatcher.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/RemoteDispatcher.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -1,36 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.messaging.core.remoting;
-
-import java.util.concurrent.TimeUnit;
-
-import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
-
-/**
- * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
- */
-public interface RemoteDispatcher
-{
-   public void sendOneWay(AbstractPacket packet);
-
-   public void sendOneWay(AbstractPacket packet, PacketHandler callbackHandler);
-
-   public AbstractPacket sendBlocking(AbstractPacket packet) throws Exception;
-
-   public void connect(int port, TransportType transport) throws Exception;
-
-   public void connect(int port, TransportType transport, boolean useSSL)
-         throws Exception;
-
-   public boolean disconnect() throws Exception;
-
-   public void register(PacketHandler handler);
-
-   public void unregister(String handlerID);
-
-   public void setBlockingRequestTimeout(int timeout, TimeUnit unit);
-}
\ No newline at end of file

Deleted: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/RemoteDispatcherFactory.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/RemoteDispatcherFactory.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/RemoteDispatcherFactory.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -1,41 +0,0 @@
-/**
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.messaging.core.remoting;
-
-import org.jboss.messaging.core.remoting.internal.RemoteDispatcherImpl;
-
-
-/**
- * A factory to create new {@link RemoteDispatcher}.
- * 
- * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
- */
-public class RemoteDispatcherFactory
-{
-   // Constants -----------------------------------------------------
-
-   // Attributes ----------------------------------------------------
-
-   // Static --------------------------------------------------------
-
-   // Constructors --------------------------------------------------
-
-   // Public --------------------------------------------------------
-
-   public static RemoteDispatcher newDispatcher()
-   {
-      return new RemoteDispatcherImpl();
-   }
-
-   // Package protected ---------------------------------------------
-
-   // Protected -----------------------------------------------------
-
-   // Private -------------------------------------------------------
-
-   // Inner classes -------------------------------------------------
-}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/TransportType.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/TransportType.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/TransportType.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -10,6 +10,8 @@
  * The transport types supported by JBoss Messaging.
  * 
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public enum TransportType
 {

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AbstractPacketCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AbstractPacketCodec.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AbstractPacketCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -6,13 +6,10 @@
  */
 package org.jboss.messaging.core.remoting.codec;
 
-import static org.jboss.messaging.core.remoting.Constants.INT_LENGTH;
-import static org.jboss.messaging.core.remoting.Constants.LONG_LENGTH;
-import static org.jboss.messaging.core.remoting.Constants.NULL_BYTE;
-import static org.jboss.messaging.core.remoting.Constants.UTF_8_DECODER;
-import static org.jboss.messaging.core.remoting.Constants.UTF_8_ENCODER;
-
 import java.nio.charset.CharacterCodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CharsetEncoder;
 
 import org.apache.mina.common.IoBuffer;
 import org.apache.mina.common.IoSession;
@@ -32,6 +29,29 @@
 {
    // Constants -----------------------------------------------------
 
+   private static final CharsetEncoder UTF_8_ENCODER = Charset.forName("UTF-8")
+         .newEncoder();
+
+   private static final CharsetDecoder UTF_8_DECODER = Charset.forName("UTF-8")
+         .newDecoder();
+
+   private static final byte TRUE = (byte) 0;
+
+   private static final byte FALSE = (byte) 1;
+
+   protected static final int INT_LENGTH = 4;
+
+   protected static final int FLOAT_LENGTH = 4;
+
+   protected static final int LONG_LENGTH = 8;
+
+   // used to terminate encoded Strings
+   protected static final byte NULL_BYTE = (byte) 0;
+
+   protected static final byte NULL_STRING = (byte) 0;
+
+   protected static final byte NOT_NULL_STRING = (byte) 1;
+
    // Attributes ----------------------------------------------------
 
    private PacketType type;
@@ -58,8 +78,7 @@
       String targetID = packet.getTargetID();
       String callbackID = packet.getCallbackID();
 
-      int headerLength = LONG_LENGTH + targetID.getBytes().length
-            + callbackID.getBytes().length + 2 /* NULL bytes */;
+      int headerLength = LONG_LENGTH + sizeof(targetID) + sizeof(callbackID);
 
       IoBuffer buf = IoBuffer.allocate(256);
 
@@ -69,10 +88,8 @@
       buf.put(packet.getType().byteValue());
       buf.putInt(headerLength);
       buf.putLong(correlationID);
-      buf.putString(targetID, UTF_8_ENCODER);
-      buf.put(NULL_BYTE);
-      buf.putString(callbackID, UTF_8_ENCODER);
-      buf.put(NULL_BYTE);
+      putString(buf, targetID);
+      putString(buf, callbackID);
 
       encodeBody(session, packet, buf);
 
@@ -142,8 +159,8 @@
       in.get(); // skip message type
       in.getInt(); // skip header length
       long correlationID = in.getLong();
-      String targetID = in.getString(UTF_8_DECODER);
-      String callbackID = in.getString(UTF_8_DECODER);
+      String targetID = getString(in);
+      String callbackID = getString(in);
 
       P packet = decodeBody(session, in);
 
@@ -168,12 +185,77 @@
 
    // Protected -----------------------------------------------------
 
-   protected abstract void encodeBody(IoSession session, P packet, IoBuffer buf)
+   protected abstract void encodeBody(IoSession session, P packet, IoBuffer out)
          throws Exception;
 
    protected abstract P decodeBody(IoSession session, IoBuffer in)
          throws Exception;
 
+   public static int sizeof(String nullableString)
+   {
+      if (nullableString == null)
+      {
+         return 1; // NULL_STRING byte
+      } else
+      {
+         return nullableString.getBytes().length + 2;// NOT_NULL_STRING +
+         // NULL_BYTE
+      }
+   }
+
+   public static void putString(IoBuffer out, String nullableString)
+         throws CharacterCodingException
+   {
+
+      if (nullableString == null)
+      {
+         out.put(NULL_STRING);
+      } else
+      {
+         out.put(NOT_NULL_STRING);
+         out.putString(nullableString, UTF_8_ENCODER);
+         out.put(NULL_BYTE);
+      }
+   }
+
+   public static String getString(IoBuffer in) throws CharacterCodingException
+   {
+      byte check = in.get();
+      if (check == NULL_STRING)
+      {
+         return null;
+      } else
+      {
+         assert check == NOT_NULL_STRING;
+
+         return in.getString(UTF_8_DECODER);
+      }
+   }
+
+   public static void putBoolean(IoBuffer out, boolean b)
+   {
+      if (b)
+      {
+         out.put(TRUE);
+      } else
+      {
+         out.put(FALSE);
+      }
+   }
+
+   public static boolean getBoolean(IoBuffer in)
+   {
+      byte b = in.get();
+      if (b == TRUE)
+      {
+         return true;
+      } else
+      {
+         assert b == FALSE;
+         return false;
+      }
+   }
+
    // Private -------------------------------------------------------
 
    // Inner classes -------------------------------------------------

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveriesRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveriesRequestCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveriesRequestCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,105 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_ACKDELIVERIES;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.jms.delegate.Ack;
+import org.jboss.jms.delegate.DefaultAck;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveriesMessage;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class AcknowledgeDeliveriesRequestCodec extends
+      AbstractPacketCodec<AcknowledgeDeliveriesMessage>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public AcknowledgeDeliveriesRequestCodec()
+   {
+      super(MSG_ACKDELIVERIES);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session,
+         AcknowledgeDeliveriesMessage request, IoBuffer out) throws Exception
+   {
+
+      long[] deliveryIDs = convert(request.getAcks());
+
+      int bodyLength = LONG_LENGTH * deliveryIDs.length;
+      out.putInt(bodyLength);
+      for (long id : deliveryIDs)
+      {
+         out.putLong(id);
+      }
+   }
+
+   @Override
+   protected AcknowledgeDeliveriesMessage decodeBody(IoSession session,
+         IoBuffer in) throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      int numOfDeliveryIds = bodyLength / LONG_LENGTH;
+      long[] deliveryIDs = new long[numOfDeliveryIds];
+      for (int i = 0; i < numOfDeliveryIds; i++)
+      {
+         deliveryIDs[i] = in.getLong();
+      }
+      List<Ack> acks = convert(deliveryIDs);
+
+      return new AcknowledgeDeliveriesMessage(acks);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   private static long[] convert(List<Ack> acks)
+   {
+      long[] deliveryIDs = new long[acks.size()];
+      for (int i = 0; i < acks.size(); i++)
+      {
+         deliveryIDs[i] = acks.get(i).getDeliveryID();
+      }
+      return deliveryIDs;
+   }
+
+   private List<Ack> convert(long[] deliveryIDs)
+   {
+      List<Ack> acks = new ArrayList<Ack>(deliveryIDs.length);
+      for (long deliveryID : deliveryIDs)
+      {
+         acks.add(new DefaultAck(deliveryID));
+      }
+      return acks;
+   }
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryRequestCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryRequestCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,70 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_ACKDELIVERY;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryRequest;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class AcknowledgeDeliveryRequestCodec extends
+      AbstractPacketCodec<AcknowledgeDeliveryRequest>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public AcknowledgeDeliveryRequestCodec()
+   {
+      super(REQ_ACKDELIVERY);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session,
+         AcknowledgeDeliveryRequest request, IoBuffer out) throws Exception
+   {
+      long deliveryID = request.getDeliveryID();
+
+      out.putInt(LONG_LENGTH);
+      out.putLong(deliveryID);
+   }
+
+   @Override
+   protected AcknowledgeDeliveryRequest decodeBody(IoSession session,
+         IoBuffer in) throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      long deliveryID = in.getLong();
+
+      return new AcknowledgeDeliveryRequest(deliveryID);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryResponseCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryResponseCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,68 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_ACKDELIVERY;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryResponse;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class AcknowledgeDeliveryResponseCodec extends
+      AbstractPacketCodec<AcknowledgeDeliveryResponse>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public AcknowledgeDeliveryResponseCodec()
+   {
+      super(RESP_ACKDELIVERY);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session,
+         AcknowledgeDeliveryResponse response, IoBuffer out) throws Exception
+   {
+      out.putInt(1); //body length
+      putBoolean(out, response.isAcknowledged());
+   }
+
+   @Override
+   protected AcknowledgeDeliveryResponse decodeBody(IoSession session,
+         IoBuffer in) throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      boolean acknowledged = getBoolean(in);
+
+      return new AcknowledgeDeliveryResponse(acknowledged);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ChangeRateMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ChangeRateMessageCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ChangeRateMessageCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,68 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CHANGERATE;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.ChangeRateMessage;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class ChangeRateMessageCodec extends
+      AbstractPacketCodec<ChangeRateMessage>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public ChangeRateMessageCodec()
+   {
+      super(MSG_CHANGERATE);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, ChangeRateMessage message,
+         IoBuffer out) throws Exception
+   {
+      out.putInt(FLOAT_LENGTH);
+      out.putFloat(message.getRate());
+   }
+
+   @Override
+   protected ChangeRateMessage decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      float rate = in.getFloat();
+
+      return new ChangeRateMessage(rate);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private ----------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CloseMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CloseMessageCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CloseMessageCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,61 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CLOSE;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.CloseMessage;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class CloseMessageCodec extends
+      AbstractPacketCodec<CloseMessage>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CloseMessageCodec()
+   {
+      super(MSG_CLOSE);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, CloseMessage message,
+         IoBuffer out) throws Exception
+   {
+      out.putInt(0);
+   }
+
+   @Override
+   protected CloseMessage decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      in.getInt(); // skip body length
+
+      return new CloseMessage();
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private ----------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingRequestCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingRequestCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,67 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CLOSING;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.ClosingRequest;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class ClosingRequestCodec extends AbstractPacketCodec<ClosingRequest>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public ClosingRequestCodec()
+   {
+      super(REQ_CLOSING);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, ClosingRequest request,
+         IoBuffer out) throws Exception
+   {
+      out.putInt(LONG_LENGTH);
+      out.putLong(request.getSequence());
+   }
+
+   @Override
+   protected ClosingRequest decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      long sequence = in.getLong();
+      
+      return new ClosingRequest(sequence);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingResponseCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingResponseCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,67 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CLOSING;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.ClosingResponse;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class ClosingResponseCodec extends AbstractPacketCodec<ClosingResponse>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public ClosingResponseCodec()
+   {
+      super(RESP_CLOSING);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, ClosingResponse response,
+         IoBuffer out) throws Exception
+   {
+      out.putInt(LONG_LENGTH);
+      out.putLong(response.getID());
+   }
+
+   @Override
+   protected ClosingResponse decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      long id = in.getLong();
+
+      return new ClosingResponse(id);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionRequestCodec.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionRequestCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -6,17 +6,17 @@
  */
 package org.jboss.messaging.core.remoting.codec;
 
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CONNECTIONFACTORY_CREATECONNECTION;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATECONNECTION;
 
 import org.apache.mina.common.IoBuffer;
 import org.apache.mina.common.IoSession;
-import org.jboss.messaging.core.remoting.wireformat.ConnectionFactoryCreateConnectionRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionRequest;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
  */
 public class ConnectionFactoryCreateConnectionRequestCodec extends
-      AbstractPacketCodec<ConnectionFactoryCreateConnectionRequest>
+      AbstractPacketCodec<CreateConnectionRequest>
 {
    // Constants -----------------------------------------------------
 
@@ -30,26 +30,53 @@
 
    public ConnectionFactoryCreateConnectionRequestCodec()
    {
-      super(REQ_CONNECTIONFACTORY_CREATECONNECTION);
+      super(REQ_CREATECONNECTION);
    }
 
    // AbstractPackedCodec overrides----------------------------------
-   
+
    @Override
    protected void encodeBody(IoSession session,
-         ConnectionFactoryCreateConnectionRequest request, IoBuffer out)
+         CreateConnectionRequest request, IoBuffer out)
          throws Exception
    {
-      // no body
-      out.putInt(0);
+      byte version = request.getVersion();
+      String clientVMID = request.getClientVMID();
+      int failedNodeID = request.getFailedNodeID();
+      String username = request.getUsername();
+      String password = request.getPassword();
+
+      int bodyLength = 1 // version
+            + sizeof(clientVMID)
+            + INT_LENGTH // failedNodeID
+            + sizeof(username) 
+            + sizeof(password);
+
+      out.putInt(bodyLength);
+      out.put(version);
+      putString(out, clientVMID);
+      out.putInt(failedNodeID);
+      putString(out, username);
+      putString(out, password);
    }
 
    @Override
-   protected ConnectionFactoryCreateConnectionRequest decodeBody(
+   protected CreateConnectionRequest decodeBody(
          IoSession session, IoBuffer in) throws Exception
    {
-      in.getInt(); // skip body length
-      return new ConnectionFactoryCreateConnectionRequest();
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+      byte version = in.get();
+      String clientVMID = getString(in);
+      int failedNodeID = in.getInt();
+      String username = getString(in);
+      String password = getString(in);
+
+      return new CreateConnectionRequest(version, clientVMID,
+            failedNodeID, username, password);
    }
 
    // Package protected ---------------------------------------------

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionResponseCodec.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionResponseCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -6,20 +6,17 @@
  */
 package org.jboss.messaging.core.remoting.codec;
 
-import static org.jboss.messaging.core.remoting.Constants.NULL_BYTE;
-import static org.jboss.messaging.core.remoting.Constants.UTF_8_DECODER;
-import static org.jboss.messaging.core.remoting.Constants.UTF_8_ENCODER;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CONNECTIONFACTORY_CREATECONNECTION;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATECONNECTION;
 
 import org.apache.mina.common.IoBuffer;
 import org.apache.mina.common.IoSession;
-import org.jboss.messaging.core.remoting.wireformat.ConnectionFactoryCreateConnectionResponse;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionResponse;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
  */
 public class ConnectionFactoryCreateConnectionResponseCodec extends
-      AbstractPacketCodec<ConnectionFactoryCreateConnectionResponse>
+      AbstractPacketCodec<CreateConnectionResponse>
 {
    // Constants -----------------------------------------------------
 
@@ -33,27 +30,28 @@
 
    public ConnectionFactoryCreateConnectionResponseCodec()
    {
-      super(RESP_CONNECTIONFACTORY_CREATECONNECTION);
+      super(RESP_CREATECONNECTION);
    }
 
    // AbstractPackedCodec overrides----------------------------------
 
    @Override
    protected void encodeBody(IoSession session,
-         ConnectionFactoryCreateConnectionResponse response, IoBuffer out)
+         CreateConnectionResponse response, IoBuffer out)
          throws Exception
    {
-      String id = response.getID();
+      String id = response.getConnectionID();
+      int serverID = response.getServerID();
+      
+      int bodyLength = sizeof(id) + INT_LENGTH;
 
-      int bodyLength = id.getBytes().length + 1 /* NULL byte */;
-
       out.putInt(bodyLength);
-      out.putString(id, UTF_8_ENCODER);
-      out.put(NULL_BYTE);
+      putString(out, id);
+      out.putInt(serverID);
    }
 
    @Override
-   protected ConnectionFactoryCreateConnectionResponse decodeBody(
+   protected CreateConnectionResponse decodeBody(
          IoSession session, IoBuffer in) throws Exception
    {
       int bodyLength = in.getInt();
@@ -61,9 +59,10 @@
       {
          return null;
       }
-      String id = in.getString(UTF_8_DECODER);
-
-      return new ConnectionFactoryCreateConnectionResponse(id);
+      String id = getString(in);
+      int serverID = in.getInt();
+      
+      return new CreateConnectionResponse(id, serverID);
    }
 
    // Package protected ---------------------------------------------

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerRequestCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerRequestCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,115 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.jms.destination.JBossDestination.readDestination;
+import static org.jboss.jms.destination.JBossDestination.writeDestination;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATECONSUMER;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.jms.destination.JBossDestination;
+import org.jboss.messaging.core.remoting.wireformat.CreateConsumerRequest;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class CreateConsumerRequestCodec extends
+      AbstractPacketCodec<CreateConsumerRequest>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CreateConsumerRequestCodec()
+   {
+      super(REQ_CREATECONSUMER);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, CreateConsumerRequest request,
+         IoBuffer out) throws Exception
+   {
+      byte[] destination = encode(request.getDestination());
+      String selector = request.getSelector();
+      boolean noLocal = request.isNoLocal();
+      String subName = request.getSubscriptionName();
+      boolean connectionConsumer = request.isConnectionConsumer();
+      boolean autoFlowControl = request.isAutoFlowControl();
+
+      int bodyLength = INT_LENGTH + destination.length + sizeof(selector)
+            + sizeof(subName) + 3;
+
+      out.putInt(bodyLength);
+      out.putInt(destination.length);
+      out.put(destination);
+      putString(out, selector);
+      putBoolean(out, noLocal);
+      putString(out, subName);
+      putBoolean(out, connectionConsumer);
+      putBoolean(out, autoFlowControl);
+   }
+
+   @Override
+   protected CreateConsumerRequest decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      int destinationLength = in.getInt();
+      byte[] b = new byte[destinationLength];
+      in.get(b);
+      JBossDestination destination = decode(b);
+      String selector = getString(in);
+      boolean noLocal = getBoolean(in);
+      String subName = getString(in);
+      boolean connectionConsumer = getBoolean(in);
+      boolean autoflowControl = getBoolean(in);
+
+      return new CreateConsumerRequest(destination, selector, noLocal, subName,
+            connectionConsumer, autoflowControl);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   private static byte[] encode(JBossDestination destination) throws Exception
+   {
+      ByteArrayOutputStream baos = new ByteArrayOutputStream();
+      writeDestination(new DataOutputStream(baos), destination);
+      baos.flush();
+      return baos.toByteArray();
+   }
+
+   private static JBossDestination decode(byte[] b) throws Exception
+   {
+      ByteArrayInputStream bais = new ByteArrayInputStream(b);
+      return readDestination(new DataInputStream(bais));
+   }
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerResponseCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerResponseCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,83 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATECONSUMER;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.CreateConsumerResponse;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class CreateConsumerResponseCodec extends
+      AbstractPacketCodec<CreateConsumerResponse>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CreateConsumerResponseCodec()
+   {
+      super(RESP_CREATECONSUMER);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session,
+         CreateConsumerResponse response, IoBuffer out) throws Exception
+   {
+      String consumerID = response.getConsumerID();
+      int bufferSize = response.getBufferSize();
+      int maxDeliveries = response.getMaxDeliveries();
+      long redeliveryDelay = response.getRedeliveryDelay();
+
+      int bodyLength = sizeof(consumerID) + 2 * INT_LENGTH
+            + LONG_LENGTH;
+
+      out.putInt(bodyLength);
+      putString(out, consumerID);
+      out.putInt(bufferSize);
+      out.putInt(maxDeliveries);
+      out.putLong(redeliveryDelay);
+   }
+
+   @Override
+   protected CreateConsumerResponse decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      String consumerID = getString(in);
+      int bufferSize = in.getInt();
+      int maxDeliveries = in.getInt();
+      long redeliveryDelay = in.getLong();
+
+      return new CreateConsumerResponse(consumerID, bufferSize, maxDeliveries,
+            redeliveryDelay);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionRequestCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionRequestCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,78 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATESESSION;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.CreateSessionRequest;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class CreateSessionRequestCodec extends
+      AbstractPacketCodec<CreateSessionRequest>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CreateSessionRequestCodec()
+   {
+      super(REQ_CREATESESSION);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, CreateSessionRequest request,
+         IoBuffer out) throws Exception
+   {
+      boolean transacted = request.isTransacted();
+      int acknowledgementMode = request.getAcknowledgementMode();
+      boolean xa = request.isXA();
+
+      int bodyLength = 1 + INT_LENGTH + 1;
+
+      out.putInt(bodyLength);
+      putBoolean(out, transacted);
+      out.putInt(acknowledgementMode);
+      putBoolean(out, xa);
+   }
+
+   @Override
+   protected CreateSessionRequest decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      boolean transacted = getBoolean(in);
+      int acknowledgementMode = in.getInt();
+      boolean xa = getBoolean(in);
+
+      return new CreateSessionRequest(transacted, acknowledgementMode, xa);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionResponseCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionResponseCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,77 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.CreateSessionResponse;
+import org.jboss.messaging.core.remoting.wireformat.PacketType;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class CreateSessionResponseCodec extends
+      AbstractPacketCodec<CreateSessionResponse>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CreateSessionResponseCodec()
+   {
+      super(PacketType.RESP_CREATESESSION);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, CreateSessionResponse response,
+         IoBuffer out) throws Exception
+   {
+      String sessionID = response.getSessionID();
+      int dupsOKBatchSize = response.getDupsOKBatchSize();
+      boolean strictTCK = response.isStrictTCK();
+
+      int bodyLength = sizeof(sessionID) + INT_LENGTH + 1;
+
+      out.putInt(bodyLength);
+      putString(out, sessionID);
+      out.putInt(dupsOKBatchSize);
+      putBoolean(out, strictTCK);
+   }
+
+   @Override
+   protected CreateSessionResponse decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      String sessionID = getString(in);
+      int dupsOKBatchSize = in.getInt();
+      boolean strictTCK = getBoolean(in);
+
+      return new CreateSessionResponse(sessionID, dupsOKBatchSize, strictTCK);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeliverMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeliverMessageCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeliverMessageCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,111 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_DELIVERMESSAGE;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.contract.Message;
+import org.jboss.messaging.core.impl.message.MessageFactory;
+import org.jboss.messaging.core.remoting.wireformat.DeliverMessage;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class DeliverMessageCodec extends AbstractPacketCodec<DeliverMessage>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public DeliverMessageCodec()
+   {
+      super(MSG_DELIVERMESSAGE);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, DeliverMessage message,
+         IoBuffer out) throws Exception
+   {
+      Message msg = message.getMessage();
+      byte[] encodedMsg = encode(message.getMessage());
+      String consumerID = message.getConsumerID();
+      long deliveryID = message.getDeliveryID();
+      int deliveryCount = message.getDeliveryCount();
+
+      int bodyLength = 1 + INT_LENGTH + encodedMsg.length + sizeof(consumerID)
+            + LONG_LENGTH + INT_LENGTH;
+      out.putInt(bodyLength);
+
+      out.put(msg.getType());
+      out.putInt(encodedMsg.length);
+      out.put(encodedMsg);
+      putString(out, consumerID);
+      out.putLong(deliveryID);
+      out.putInt(deliveryCount);
+   }
+
+   @Override
+   protected DeliverMessage decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      byte type = in.get();
+      int msgLength = in.getInt();
+      byte[] encodedMsg = new byte[msgLength];
+      in.get(encodedMsg);
+      Message msg = decode(type, encodedMsg);
+      String consumerID = getString(in);
+      long deliveryID = in.getLong();
+      int deliveryCount = in.getInt();
+
+      return new DeliverMessage(msg, consumerID, deliveryID, deliveryCount);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private ----------------------------------------------------
+
+   private static byte[] encode(Message message) throws Exception
+   {
+      ByteArrayOutputStream baos = new ByteArrayOutputStream();
+      message.write(new DataOutputStream(baos));
+      baos.flush();
+      return baos.toByteArray();
+   }
+
+   private static Message decode(byte type, byte[] b) throws Exception
+   {
+      Message msg = MessageFactory.createMessage(type);
+      ByteArrayInputStream bais = new ByteArrayInputStream(b);
+      msg.read(new DataInputStream(bais));
+      return msg;
+   }
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockRequestCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockRequestCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,67 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_IDBLOCK;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.IDBlockRequest;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class IDBlockRequestCodec extends AbstractPacketCodec<IDBlockRequest>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public IDBlockRequestCodec()
+   {
+      super(REQ_IDBLOCK);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, IDBlockRequest request,
+         IoBuffer out) throws Exception
+   {
+      out.putInt(INT_LENGTH);
+      out.putInt(request.getSize());
+   }
+
+   @Override
+   protected IDBlockRequest decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      int size = in.getInt();
+
+      return new IDBlockRequest(size);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockResponseCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockResponseCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,69 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_IDBLOCK;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.IDBlockResponse;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class IDBlockResponseCodec extends AbstractPacketCodec<IDBlockResponse>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public IDBlockResponseCodec()
+   {
+      super(RESP_IDBLOCK);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, IDBlockResponse response,
+         IoBuffer out) throws Exception
+   {
+      out.putInt(LONG_LENGTH * 2);
+      out.putLong(response.getLow());
+      out.putLong(response.getHigh());
+   }
+
+   @Override
+   protected IDBlockResponse decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      long low = in.getLong();
+      long high = in.getLong();
+
+      return new IDBlockResponse(low, high);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/PacketCodecFactory.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/PacketCodecFactory.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/PacketCodecFactory.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -7,9 +7,26 @@
 package org.jboss.messaging.core.remoting.codec;
 
 import org.apache.mina.filter.codec.demux.DemuxingProtocolCodecFactory;
-import org.jboss.messaging.core.remoting.wireformat.ConnectionFactoryCreateConnectionRequest;
-import org.jboss.messaging.core.remoting.wireformat.ConnectionFactoryCreateConnectionResponse;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveriesMessage;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryRequest;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryResponse;
+import org.jboss.messaging.core.remoting.wireformat.ChangeRateMessage;
+import org.jboss.messaging.core.remoting.wireformat.CloseMessage;
+import org.jboss.messaging.core.remoting.wireformat.ClosingRequest;
+import org.jboss.messaging.core.remoting.wireformat.ClosingResponse;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionResponse;
+import org.jboss.messaging.core.remoting.wireformat.CreateConsumerRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateConsumerResponse;
+import org.jboss.messaging.core.remoting.wireformat.CreateSessionRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateSessionResponse;
+import org.jboss.messaging.core.remoting.wireformat.DeliverMessage;
+import org.jboss.messaging.core.remoting.wireformat.IDBlockRequest;
+import org.jboss.messaging.core.remoting.wireformat.IDBlockResponse;
 import org.jboss.messaging.core.remoting.wireformat.NullPacket;
+import org.jboss.messaging.core.remoting.wireformat.SendMessage;
+import org.jboss.messaging.core.remoting.wireformat.SendTransactionMessage;
+import org.jboss.messaging.core.remoting.wireformat.StartConnectionMessage;
 import org.jboss.messaging.core.remoting.wireformat.TextPacket;
 
 /**
@@ -37,28 +54,81 @@
 
       super
             .addMessageDecoder(ConnectionFactoryCreateConnectionRequestCodec.class);
-      super.addMessageEncoder(ConnectionFactoryCreateConnectionRequest.class,
+      super.addMessageEncoder(CreateConnectionRequest.class,
             ConnectionFactoryCreateConnectionRequestCodec.class);
 
       super
             .addMessageDecoder(ConnectionFactoryCreateConnectionResponseCodec.class);
-      super.addMessageEncoder(ConnectionFactoryCreateConnectionResponse.class,
+      super.addMessageEncoder(CreateConnectionResponse.class,
             ConnectionFactoryCreateConnectionResponseCodec.class);
 
       // super.addMessageDecoder(ClientDeliveryCodec.class);
       // super.addMessageEncoder(ClientDelivery.class,
       // ClientDeliveryCodec.class);
       //
-      // super.addMessageDecoder(ConnectionCreateSessionRequestCodec.class);
-      // super.addMessageEncoder(ConnectionCreateSessionRequest.class,
-      // ConnectionCreateSessionRequestCodec.class);
-      //
-      // super.addMessageDecoder(ConnectionCreateSessionResponseCodec.class);
-      // super.addMessageEncoder(ConnectionCreateSessionResponse.class,
-      // ConnectionCreateSessionResponseCodec.class);
+      super.addMessageDecoder(CreateSessionRequestCodec.class);
+      super.addMessageEncoder(CreateSessionRequest.class,
+            CreateSessionRequestCodec.class);
 
-   }
+      super.addMessageDecoder(CreateSessionResponseCodec.class);
+      super.addMessageEncoder(CreateSessionResponse.class,
+            CreateSessionResponseCodec.class);
 
+      super.addMessageDecoder(IDBlockRequestCodec.class);
+      super.addMessageEncoder(IDBlockRequest.class, IDBlockRequestCodec.class);
+
+      super.addMessageDecoder(IDBlockResponseCodec.class);
+      super
+            .addMessageEncoder(IDBlockResponse.class,
+                  IDBlockResponseCodec.class);
+
+      super.addMessageDecoder(SendMessageCodec.class);
+      super.addMessageEncoder(SendMessage.class, SendMessageCodec.class);
+
+      super.addMessageDecoder(CreateConsumerRequestCodec.class);
+      super.addMessageEncoder(CreateConsumerRequest.class,
+            CreateConsumerRequestCodec.class);
+
+      super.addMessageDecoder(CreateConsumerResponseCodec.class);
+      super.addMessageEncoder(CreateConsumerResponse.class,
+            CreateConsumerResponseCodec.class);
+
+      super.addMessageDecoder(StartConnectionMessageCodec.class);
+      super.addMessageEncoder(StartConnectionMessage.class,
+            StartConnectionMessageCodec.class);
+
+      super.addMessageDecoder(ChangeRateMessageCodec.class);
+      super.addMessageEncoder(ChangeRateMessage.class,
+            ChangeRateMessageCodec.class);
+
+      super.addMessageDecoder(DeliverMessageCodec.class);
+      super.addMessageEncoder(DeliverMessage.class, DeliverMessageCodec.class);
+
+      super.addMessageDecoder(AcknowledgeDeliveryRequestCodec.class);
+      super.addMessageEncoder(AcknowledgeDeliveryRequest.class,
+            AcknowledgeDeliveryRequestCodec.class);
+
+      super.addMessageDecoder(AcknowledgeDeliveryResponseCodec.class);
+      super.addMessageEncoder(AcknowledgeDeliveryResponse.class,
+            AcknowledgeDeliveryResponseCodec.class);
+
+      super.addMessageDecoder(AcknowledgeDeliveriesRequestCodec.class);
+      super.addMessageEncoder(AcknowledgeDeliveriesMessage.class,
+            AcknowledgeDeliveriesRequestCodec.class);
+
+      super.addMessageDecoder(ClosingRequestCodec.class);
+      super.addMessageEncoder(ClosingRequest.class, ClosingRequestCodec.class);
+
+      super.addMessageDecoder(ClosingResponseCodec.class);
+      super.addMessageEncoder(ClosingResponse.class, ClosingResponseCodec.class);
+
+      super.addMessageDecoder(CloseMessageCodec.class);
+      super.addMessageEncoder(CloseMessage.class, CloseMessageCodec.class);
+      
+      super.addMessageDecoder(SendTransactionRequestCodec.class);
+      super.addMessageEncoder(SendTransactionMessage.class, SendTransactionRequestCodec.class);
+}
+
    // Public --------------------------------------------------------
 
    // Package protected ---------------------------------------------

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendMessageCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendMessageCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,107 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SENDMESSAGE;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.jms.message.JBossMessage;
+import org.jboss.messaging.core.contract.Message;
+import org.jboss.messaging.core.impl.message.MessageFactory;
+import org.jboss.messaging.core.remoting.wireformat.SendMessage;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class SendMessageCodec extends AbstractPacketCodec<SendMessage>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public SendMessageCodec()
+   {
+      super(MSG_SENDMESSAGE);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, SendMessage message,
+         IoBuffer out) throws Exception
+   {
+      byte[] encodedMsg = encode(message.getMessage());
+      boolean checkForDuplicates = message.checkForDuplicates();
+      long sequence = message.getSequence();
+
+      int bodyLength = INT_LENGTH + 1 + encodedMsg.length + 1 + LONG_LENGTH;
+
+      out.putInt(bodyLength);
+      out.put(message.getMessage().getType());
+      out.putInt(encodedMsg.length);
+      out.put(encodedMsg);
+      putBoolean(out, checkForDuplicates);
+      out.putLong(sequence);
+   }
+
+   @Override
+   protected SendMessage decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      byte msgType = in.get();
+      int msgLength = in.getInt();
+      byte[] encodedMsg = new byte[msgLength];
+      in.get(encodedMsg);
+      JBossMessage msg = (JBossMessage) decode(msgType, encodedMsg);
+      boolean checkForDuplicates = getBoolean(in);
+      long sequence = in.getLong();
+
+      return new SendMessage(msg, checkForDuplicates, sequence);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private ----------------------------------------------------
+
+   private static byte[] encode(Message message) throws Exception
+   {
+      ByteArrayOutputStream baos = new ByteArrayOutputStream();
+      message.write(new DataOutputStream(baos));
+      baos.flush();
+      return baos.toByteArray();
+   }
+
+   private static Message decode(byte type, byte[] b) throws Exception
+   {
+      Message msg = MessageFactory.createMessage(type);
+      ByteArrayInputStream bais = new ByteArrayInputStream(b);
+      msg.read(new DataInputStream(bais));
+      return msg;
+   }
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendTransactionRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendTransactionRequestCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendTransactionRequestCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,100 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SENDTRANSACTION;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.jms.tx.TransactionRequest;
+import org.jboss.messaging.core.remoting.wireformat.SendTransactionMessage;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class SendTransactionRequestCodec extends AbstractPacketCodec<SendTransactionMessage>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public SendTransactionRequestCodec()
+   {
+      super(MSG_SENDTRANSACTION);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, SendTransactionMessage request,
+         IoBuffer out) throws Exception
+   {
+      byte[] encodedTxReq = encode(request.getTransactionRequest());
+      boolean checkForDuplicates = request.checkForDuplicates();
+
+      int bodyLength = INT_LENGTH + encodedTxReq.length + 1;
+      
+      out.putInt(bodyLength);
+      out.putInt(encodedTxReq.length);
+      out.put(encodedTxReq);
+      putBoolean(out, checkForDuplicates);
+   }
+
+   @Override
+   protected SendTransactionMessage decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      int txReqLength = in.getInt();
+      byte[] encodedTxReq = new byte[txReqLength];
+      in.get(encodedTxReq);
+      TransactionRequest tr = decode(encodedTxReq);
+      boolean checkForDuplicates = getBoolean(in);
+
+      return new SendTransactionMessage(tr, checkForDuplicates);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private ----------------------------------------------------
+
+   private static byte[] encode(TransactionRequest tr) throws Exception
+   {
+      ByteArrayOutputStream baos = new ByteArrayOutputStream();
+      tr.write(new DataOutputStream(baos));
+      baos.flush();
+      return baos.toByteArray();
+   }
+
+   private static TransactionRequest decode(byte[] b) throws Exception
+   {
+      TransactionRequest tr = new TransactionRequest();
+      ByteArrayInputStream bais = new ByteArrayInputStream(b);
+      tr.read(new DataInputStream(bais));
+      return tr;
+   }
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/StartConnectionMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/StartConnectionMessageCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/StartConnectionMessageCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,62 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_STARTCONNECTION;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.wireformat.StartConnectionMessage;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class StartConnectionMessageCodec extends
+      AbstractPacketCodec<StartConnectionMessage>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public StartConnectionMessageCodec()
+   {
+      super(MSG_STARTCONNECTION);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, StartConnectionMessage message,
+         IoBuffer out) throws Exception
+   {
+      // no body
+      out.putInt(0);
+   }
+
+   @Override
+   protected StartConnectionMessage decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      in.getInt(); // skip body length
+
+      return new StartConnectionMessage();
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private ----------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/TextPacketCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/TextPacketCodec.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/TextPacketCodec.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -6,9 +6,6 @@
  */
 package org.jboss.messaging.core.remoting.codec;
 
-import static org.jboss.messaging.core.remoting.Constants.NULL_BYTE;
-import static org.jboss.messaging.core.remoting.Constants.UTF_8_DECODER;
-import static org.jboss.messaging.core.remoting.Constants.UTF_8_ENCODER;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.TEXT;
 
 import org.apache.mina.common.IoBuffer;
@@ -42,11 +39,10 @@
    protected void encodeBody(IoSession session, TextPacket packet, IoBuffer out)
          throws Exception
    {
-      int bodyLength = packet.getText().getBytes().length + 1; // for NULL byte
+      String text = packet.getText();
 
-      out.putInt(bodyLength);
-      out.putString(packet.getText(), UTF_8_ENCODER);
-      out.put(NULL_BYTE);
+      out.putInt(sizeof(text));
+      putString(out, text);
    }
 
    @Override
@@ -58,7 +54,7 @@
       {
          return null;
       }
-      String text = in.getString(UTF_8_DECODER);
+      String text = getString(in);
 
       return new TextPacket(text);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/ClientHandler.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/ClientHandler.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/ClientHandler.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -9,11 +9,14 @@
 import org.apache.mina.common.IoHandlerAdapter;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.filter.reqres.Response;
+import org.jboss.messaging.core.remoting.PacketDispatcher;
 import org.jboss.messaging.core.remoting.PacketHandler;
 import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public class ClientHandler extends IoHandlerAdapter
 {
@@ -36,11 +39,13 @@
       if (message instanceof AbstractPacket)
       {
          AbstractPacket packet = (AbstractPacket) message;
+         System.err.println("ClientHandler.messageReceived() packet: " + packet);
          String targetID = packet.getTargetID();
-         PacketHandler handler = (PacketHandler) session.getAttribute(targetID);
+         PacketHandler handler = PacketDispatcher.client.getHandler(targetID);
          if (handler != null)
          {
-            handler.handle(packet);
+            System.err.println("ClientHandler.messageReceived() handler: " + handler);
+            handler.handle(packet, session);
          } else
          {
             System.err

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/PacketInspector.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/PacketInspector.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/PacketInspector.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -15,6 +15,8 @@
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public class PacketInspector implements ResponseInspector
 {

Deleted: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/RemoteDispatcherImpl.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/RemoteDispatcherImpl.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/RemoteDispatcherImpl.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -1,243 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.messaging.core.remoting.internal;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.jboss.messaging.core.remoting.Assert.assertValidID;
-import static org.jboss.messaging.core.remoting.Constants.CONNECTION_TIMEOUT;
-import static org.jboss.messaging.core.remoting.TransportType.HTTP;
-import static org.jboss.messaging.core.remoting.TransportType.TCP;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-import org.apache.mina.common.CloseFuture;
-import org.apache.mina.common.ConnectFuture;
-import org.apache.mina.common.DefaultIoFilterChainBuilder;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.ProtocolCodecFilter;
-import org.apache.mina.filter.logging.LoggingFilter;
-import org.apache.mina.filter.logging.MdcInjectionFilter;
-import org.apache.mina.filter.reqres.Request;
-import org.apache.mina.filter.reqres.RequestResponseFilter;
-import org.apache.mina.filter.reqres.RequestTimeoutException;
-import org.apache.mina.filter.reqres.Response;
-import org.apache.mina.filter.ssl.SslFilter;
-import org.apache.mina.transport.socket.nio.NioSocketConnector;
-import org.jboss.messaging.core.remoting.PacketHandler;
-import org.jboss.messaging.core.remoting.RemoteDispatcher;
-import org.jboss.messaging.core.remoting.TransportType;
-import org.jboss.messaging.core.remoting.codec.PacketCodecFactory;
-import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
-
-/**
- * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
- */
-public class RemoteDispatcherImpl implements RemoteDispatcher
-{
-
-   // Attributes ----------------------------------------------------
-
-   private IoSession session;
-   private SslFilter sslFilter;
-
-   // By default, a blocking request will timeout after 5 seconds
-   private int blockingRequestTimeout = 5;
-   private TimeUnit blockingRequestTimeUnit = SECONDS;
-
-   // Static --------------------------------------------------------
-
-   // Constructors --------------------------------------------------
-
-   // Public --------------------------------------------------------
-
-   public RemoteDispatcherImpl()
-   {
-   }
-
-   // RemoteDispatcher implementation -------------------------------
-
-   public void connect(int port, TransportType transport) throws Exception
-   {
-      connect(port, transport, false);
-   }
-
-   public void connect(int port, TransportType transport, boolean useSSL)
-         throws Exception
-   {
-      assert port > 0;
-      assert transport != null;
-
-      NioSocketConnector connector = new NioSocketConnector();
-
-      connector.setConnectTimeout(CONNECTION_TIMEOUT);
-
-      if (useSSL)
-         addSSLSupport(connector.getFilterChain());
-
-      MdcInjectionFilter mdcInjectionFilter = new MdcInjectionFilter();
-      connector.getFilterChain().addLast("mdc", mdcInjectionFilter);
-
-      if (transport == TCP)
-      {
-         connector.getFilterChain().addLast("codec",
-               new ProtocolCodecFilter(new PacketCodecFactory()));
-      } else
-      {
-         assert transport == HTTP;
-
-         // TODO support HTTP
-         // URL url = new URL("http://localhost:" + port + "/");
-         // connector.getFilterChain().addLast("http_codec",
-         // new ProtocolCodecFilter(new HttpProtocolCodecFactory(url)));
-         // connector.getFilterChain().addLast("http_logger", new
-         // LoggingFilter());
-         // connector.getFilterChain().addLast("http_filter",
-         // new HTTPFilter(false));
-      }
-
-      addBlockingRequestResponseFilter(connector.getFilterChain());
-
-      connector.getFilterChain().addLast("logger", new LoggingFilter());
-
-      connector.setHandler(new ClientHandler());
-      InetSocketAddress address = new InetSocketAddress(port);
-      ConnectFuture future = connector.connect(address);
-      future.awaitUninterruptibly();
-      if (!future.isConnected())
-      {
-         throw new IOException("Cannot connect to " + address.toString());
-      }
-      this.session = future.getSession();
-   }
-
-   public boolean disconnect() throws Exception
-   {
-      assert session != null;
-
-      if (sslFilter != null)
-      {
-         sslFilter.stopSsl(session).awaitUninterruptibly();
-         // FIXME: w/o the delay, an exception is thrown:
-         // "Inbound closed before receiving peer's close_notify"
-         Thread.sleep(500);
-      }
-      CloseFuture closeFuture = session.close().awaitUninterruptibly();
-      return closeFuture.isClosed();
-   }
-
-   public void register(PacketHandler handler)
-   {
-      assert session != null;
-      assertValidID(handler.getID());
-      assert handler != null;
-
-      session.setAttribute(handler.getID(), handler);
-   }
-
-   public void unregister(String handlerID)
-   {
-      assert session != null;
-      assertValidID(handlerID);
-
-      session.removeAttribute(handlerID);
-   }
-
-   public void sendOneWay(AbstractPacket packet)
-   {
-      assert packet != null;
-      checkConnected();
-
-      session.write(packet);
-   }
-
-   public void sendOneWay(AbstractPacket packet, PacketHandler callbackHandler)
-   {
-      assert packet != null;
-      assert callbackHandler != null;
-      checkConnected();
-
-      register(callbackHandler);
-      packet.setCallbackID(callbackHandler.getID());
-      session.write(packet);
-   }
-
-   public AbstractPacket sendBlocking(AbstractPacket packet)
-         throws TimeoutException
-   {
-      assert packet != null;
-      checkConnected();
-
-      packet.setCorrelationID(System.nanoTime());
-
-      // TODO request timeout must be configurable
-      Request req = new Request(packet.getCorrelationID(), packet,
-            blockingRequestTimeout, blockingRequestTimeUnit);
-      session.write(req);
-      Response response;
-      try
-      {
-         response = req.awaitResponse();
-         return (AbstractPacket) response.getMessage();
-      } catch (RequestTimeoutException e)
-      {
-         TimeoutException toe = new TimeoutException();
-         toe.initCause(e);
-         throw toe;
-      } catch (InterruptedException e)
-      {
-         TimeoutException toe = new TimeoutException();
-         toe.initCause(e);
-         throw toe;
-      }
-   }
-
-   public void setBlockingRequestTimeout(int timeout, TimeUnit unit)
-   {
-      this.blockingRequestTimeout = timeout;
-      this.blockingRequestTimeUnit = unit;
-   }
-
-   // Package protected ---------------------------------------------
-
-   // Protected -----------------------------------------------------
-
-   // Private -------------------------------------------------------
-
-   private void addBlockingRequestResponseFilter(
-         DefaultIoFilterChainBuilder chain)
-   {
-      ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
-      RequestResponseFilter filter = new RequestResponseFilter(
-            new PacketInspector(), scheduler);
-      chain.addLast("reqres", filter);
-   }
-
-   private void addSSLSupport(DefaultIoFilterChainBuilder chain)
-         throws Exception
-   {
-      // TODO support SSL
-      // this.sslFilter = new
-      // SslFilter(BogusSslContextFactory.getInstance(false));
-      // sslFilter.setUseClientMode(true);
-      // chain.addLast("sslFilter", sslFilter);
-   }
-
-   private void checkConnected()
-   {
-      if (session == null)
-      {
-         throw new IllegalStateException("RemoteDispatcher is not connected.");
-      }
-   }
-
-   // Inner classes -------------------------------------------------
-}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/server/ServerHandler.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/server/ServerHandler.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/server/ServerHandler.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,75 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.server;
+
+import org.apache.mina.common.IoHandlerAdapter;
+import org.apache.mina.common.IoSession;
+import org.jboss.logging.Logger;
+import org.jboss.messaging.core.remoting.PacketDispatcher;
+import org.jboss.messaging.core.remoting.PacketHandler;
+import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class ServerHandler extends IoHandlerAdapter
+{
+   // Constants -----------------------------------------------------
+
+   private static final Logger log = Logger.getLogger(ServerHandler.class);
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   // Public --------------------------------------------------------
+
+   // IoHandlerAdapter overrides ------------------------------------
+
+   @Override
+   public void exceptionCaught(IoSession session, Throwable cause)
+   {
+      // Close connection when unexpected exception is caught.
+      session.close();
+   }
+
+   @Override
+   public void messageReceived(final IoSession session, Object msg)
+   {
+      if (!(msg instanceof AbstractPacket))
+      {
+         log.error("Unsupported message: " + msg);
+         return;
+      }
+
+      AbstractPacket packet = (AbstractPacket) msg;
+
+      String targetID = packet.getTargetID();
+      PacketHandler handler = PacketDispatcher.server.getHandler(targetID);
+      if (handler != null)
+      {
+         handler.handle(packet, session);
+         return;
+      } else
+      {
+         log.warn("Unhandled packet:" + packet);
+      }
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+
+}
\ No newline at end of file

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AbstractPacket.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AbstractPacket.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AbstractPacket.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -1,10 +1,20 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
 package org.jboss.messaging.core.remoting.wireformat;
 
 import static org.jboss.messaging.core.remoting.Assert.assertValidID;
-import static org.jboss.messaging.core.remoting.Constants.NO_CALLBACK_ID;
 import static org.jboss.messaging.core.remoting.Constants.NO_CORRELATION_ID;
-import static org.jboss.messaging.core.remoting.Constants.NO_TARGET_ID;
+import static org.jboss.messaging.core.remoting.Constants.NO_ID_SET;
 
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
 public class AbstractPacket
 {
    // Constants -----------------------------------------------------
@@ -13,9 +23,9 @@
 
    private long correlationID = NO_CORRELATION_ID;
 
-   private String targetID = NO_TARGET_ID;
+   private String targetID = NO_ID_SET;
 
-   private String callbackID = NO_CALLBACK_ID;
+   private String callbackID = NO_ID_SET;
 
    private final PacketType type;
 
@@ -71,20 +81,28 @@
       return callbackID;
    }
 
+   public void normalize(AbstractPacket other)
+   {
+      assert other != null;
+
+      setCorrelationID(other.getCorrelationID());
+      setTargetID(other.getCallbackID());
+   }
+
    @Override
    public String toString()
    {
       return getParentString() + "]";
    }
 
+   // Package protected ---------------------------------------------
+
    protected String getParentString()
    {
       return "PACKET[type=" + type + ", correlationID=" + correlationID
-            + ", targetID=" + targetID + ", callabckID=" + callbackID;
+            + ", targetID=" + targetID + ", callbackID=" + callbackID;
    }
 
-   // Package protected ---------------------------------------------
-
    // Protected -----------------------------------------------------
 
    // Private -------------------------------------------------------

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveriesMessage.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveriesMessage.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveriesMessage.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,64 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_ACKDELIVERIES;
+
+import java.util.List;
+
+import org.jboss.jms.delegate.Ack;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class AcknowledgeDeliveriesMessage extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final List<Ack> acks;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public AcknowledgeDeliveriesMessage(List<Ack> acks)
+   {
+         super(MSG_ACKDELIVERIES);
+
+         assert acks != null;
+         assert acks.size() != 0;
+
+         this.acks = acks;
+   }
+
+
+   // Public --------------------------------------------------------
+
+   public List<Ack> getAcks()
+   {
+      return acks;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", acks=" + acks + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveryRequest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveryRequest.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveryRequest.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,56 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_ACKDELIVERY;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ *  
+ * @version <tt>$Revision$</tt>
+ */
+public class AcknowledgeDeliveryRequest extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final long deliveryID;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public AcknowledgeDeliveryRequest(long deliveryID)
+   {
+      super(REQ_ACKDELIVERY);
+
+      this.deliveryID = deliveryID;
+   }
+
+   // Public --------------------------------------------------------
+
+   public long getDeliveryID()
+   {
+      return deliveryID;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", deliveryID=" + deliveryID + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveryResponse.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveryResponse.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/AcknowledgeDeliveryResponse.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,55 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_ACKDELIVERY;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class AcknowledgeDeliveryResponse extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final boolean acknowledged;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public AcknowledgeDeliveryResponse(boolean acknowledged)
+   {
+      super(RESP_ACKDELIVERY);
+
+      this.acknowledged = acknowledged;
+   }
+
+   // Public --------------------------------------------------------
+
+   public boolean isAcknowledged()
+   {
+      return acknowledged;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", acknowledged=" + acknowledged + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ChangeRateMessage.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ChangeRateMessage.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ChangeRateMessage.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,55 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CHANGERATE;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class ChangeRateMessage extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final float rate;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public ChangeRateMessage(float rate)
+   {
+      super(MSG_CHANGERATE);
+
+      this.rate = rate;
+   }
+
+   // Public --------------------------------------------------------
+
+   public float getRate()
+   {
+      return rate;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", rate=" + rate + "]";
+   }
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CloseMessage.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CloseMessage.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CloseMessage.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,41 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CLOSE;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class CloseMessage extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CloseMessage()
+   {
+      super(MSG_CLOSE);
+   }
+   
+   // Public --------------------------------------------------------
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ClosingRequest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ClosingRequest.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ClosingRequest.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,56 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CLOSING;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class ClosingRequest extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final long sequence;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public ClosingRequest(long sequence)
+   {
+      super(REQ_CLOSING);
+
+      this.sequence = sequence;
+   }
+
+   // Public --------------------------------------------------------
+
+   public long getSequence()
+   {
+      return sequence;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", sequence=" + sequence + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ClosingResponse.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ClosingResponse.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ClosingResponse.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,56 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+
+/**
+ * 
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class ClosingResponse extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final long id;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public ClosingResponse(long id)
+   {
+      super(PacketType.RESP_CLOSING);
+
+      this.id = id;
+   }
+
+   // Public --------------------------------------------------------
+
+   public long getID()
+   {
+      return id;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", id=" + id + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Deleted: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ConnectionFactoryCreateConnectionRequest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ConnectionFactoryCreateConnectionRequest.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ConnectionFactoryCreateConnectionRequest.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -1,41 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.messaging.core.remoting.wireformat;
-
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CONNECTIONFACTORY_CREATECONNECTION;
-
-/**
- * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
- */
-public class ConnectionFactoryCreateConnectionRequest extends AbstractPacket
-{
-   // Constants -----------------------------------------------------
-
-   // Attributes ----------------------------------------------------
-
-   // TODO: add auth credentials
-
-   // Static --------------------------------------------------------
-
-   // Constructors --------------------------------------------------
-
-   public ConnectionFactoryCreateConnectionRequest()
-   {
-      super(REQ_CONNECTIONFACTORY_CREATECONNECTION);
-   }
-
-   // Public --------------------------------------------------------
-
-   // Package protected ---------------------------------------------
-
-   // Protected -----------------------------------------------------
-
-   // Private -------------------------------------------------------
-
-   // Inner classes -------------------------------------------------
-
-}

Deleted: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ConnectionFactoryCreateConnectionResponse.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ConnectionFactoryCreateConnectionResponse.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ConnectionFactoryCreateConnectionResponse.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -1,56 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.messaging.core.remoting.wireformat;
-
-import static org.jboss.messaging.core.remoting.Assert.assertValidID;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CONNECTIONFACTORY_CREATECONNECTION;
-
-/**
- * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
- */
-public class ConnectionFactoryCreateConnectionResponse extends AbstractPacket
-{
-   // Constants -----------------------------------------------------
-
-   // Attributes ----------------------------------------------------
-
-   private final String id;
-
-   // Static --------------------------------------------------------
-
-   // Constructors --------------------------------------------------
-
-   public ConnectionFactoryCreateConnectionResponse(String id)
-   {
-      super(RESP_CONNECTIONFACTORY_CREATECONNECTION);
-
-      assertValidID(id);
-
-      this.id = id;
-   }
-
-   // Public --------------------------------------------------------
-
-   public String getID()
-   {
-      return id;
-   }
-
-   @Override
-   public String toString()
-   {
-      return getParentString() + ", id=" + id + "]";
-   }
-
-   // Package protected ---------------------------------------------
-
-   // Protected -----------------------------------------------------
-
-   // Private -------------------------------------------------------
-
-   // Inner classes -------------------------------------------------
-}

Copied: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConnectionRequest.java (from rev 3327, branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ConnectionFactoryCreateConnectionRequest.java)
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConnectionRequest.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConnectionRequest.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.Assert.assertValidID;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATECONNECTION;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class CreateConnectionRequest extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final byte version;
+   private final String clientVMID;
+   private final String username;
+   private final String password;
+   private final int failedNodeID;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CreateConnectionRequest(byte version,
+         String clientVMID, int failedNodeID, String username, String password)
+   {
+      super(REQ_CREATECONNECTION);
+
+      assertValidID(clientVMID);
+      this.version = version;
+      this.clientVMID = clientVMID;
+      this.failedNodeID = failedNodeID;
+      this.username = username;
+      this.password = password;
+   }
+
+   // Public --------------------------------------------------------
+
+   public byte getVersion()
+   {
+      return version;
+   }
+
+   public String getClientVMID()
+   {
+      return clientVMID;
+   }
+
+   public int getFailedNodeID()
+   {
+      return failedNodeID;
+   }
+
+   public String getUsername()
+   {
+      return username;
+   }
+
+   public String getPassword()
+   {
+      return password;
+   }
+
+   @Override
+   public String toString()
+   {
+      StringBuffer buf = new StringBuffer(getParentString());
+      buf.append(", version=" + version);
+      buf.append(", clientVMID=" + clientVMID);
+      buf.append(", failedNodeID=" + failedNodeID);
+      buf.append(", username=" + username);
+      buf.append(", password=" + password);
+      buf.append("]");
+      return buf.toString();
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+
+}

Copied: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConnectionResponse.java (from rev 3327, branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/ConnectionFactoryCreateConnectionResponse.java)
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConnectionResponse.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConnectionResponse.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,66 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.Assert.assertValidID;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATECONNECTION;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class CreateConnectionResponse extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final String connectionID;
+   private final int serverID;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CreateConnectionResponse(String connectionID, int serverID)
+   {
+      super(RESP_CREATECONNECTION);
+
+      assertValidID(connectionID);
+
+      this.connectionID = connectionID;
+      this.serverID = serverID;
+   }
+
+   // Public --------------------------------------------------------
+
+   public String getConnectionID()
+   {
+      return connectionID;
+   }
+   
+   public int getServerID()
+   {
+      return serverID;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", id=" + connectionID + ", serverID=" + serverID + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConsumerRequest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConsumerRequest.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConsumerRequest.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,103 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import org.jboss.jms.destination.JBossDestination;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class CreateConsumerRequest extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final JBossDestination destination;
+   private final String selector;
+   private final boolean noLocal;
+   private final String subscriptionName;
+   private final boolean connectionConsumer;
+   private final boolean autoFlowControl;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CreateConsumerRequest(JBossDestination destination, String selector,
+         boolean noLocal, String subscriptionName, boolean connectionConsumer,
+         boolean autoFlowControl)
+   {
+      super(PacketType.REQ_CREATECONSUMER);
+
+      assert destination != null;
+
+      this.destination = destination;
+      this.selector = selector;
+      this.noLocal = noLocal;
+      this.subscriptionName = subscriptionName;
+      this.connectionConsumer = connectionConsumer;
+      this.autoFlowControl = autoFlowControl;
+   }
+
+   // Public --------------------------------------------------------
+
+   public JBossDestination getDestination()
+   {
+      return destination;
+   }
+
+   public String getSelector()
+   {
+      return selector;
+   }
+
+   public boolean isNoLocal()
+   {
+      return noLocal;
+   }
+
+   public String getSubscriptionName()
+   {
+      return subscriptionName;
+   }
+
+   public boolean isConnectionConsumer()
+   {
+      return connectionConsumer;
+   }
+
+   public boolean isAutoFlowControl()
+   {
+      return autoFlowControl;
+   }
+
+   @Override
+   public String toString()
+   {
+      StringBuffer buff = new StringBuffer(getParentString());
+      buff.append(", destination=" + destination);
+      buff.append(", selector=" + selector);
+      buff.append(", noLocal=" + noLocal);
+      buff.append(", subName=" + subscriptionName);
+      buff.append(", connectionConsumer=" + connectionConsumer);
+      buff.append(", autoFlowControl=" + autoFlowControl);
+      buff.append("]");
+      return buff.toString();
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConsumerResponse.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConsumerResponse.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateConsumerResponse.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,88 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATECONSUMER;
+
+import org.jboss.messaging.core.remoting.Assert;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class CreateConsumerResponse extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final String consumerID;
+   private final int bufferSize;
+   private final int maxDeliveries;
+   private final long redeliveryDelay;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CreateConsumerResponse(String consumerID, int bufferSize,
+         int maxDeliveries, long redeliveryDelay)
+   {
+      super(RESP_CREATECONSUMER);
+
+      Assert.assertValidID(consumerID);
+
+      this.consumerID = consumerID;
+      this.bufferSize = bufferSize;
+      this.maxDeliveries = maxDeliveries;
+      this.redeliveryDelay = redeliveryDelay;
+   }
+
+   // Public --------------------------------------------------------
+
+   public String getConsumerID()
+   {
+      return consumerID;
+   }
+
+   public int getBufferSize()
+   {
+      return bufferSize;
+   }
+
+   public int getMaxDeliveries()
+   {
+      return maxDeliveries;
+   }
+
+   public long getRedeliveryDelay()
+   {
+      return redeliveryDelay;
+   }
+
+   @Override
+   public String toString()
+   {
+      StringBuffer buf = new StringBuffer(getParentString());
+      buf.append(", consumerID=" + consumerID);
+      buf.append(", bufferSize=" + bufferSize);
+      buf.append(", maxDeliveries=" + maxDeliveries);
+      buf.append(", redeliveryDelay=" + redeliveryDelay);
+      buf.append("]");
+      return buf.toString();
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateSessionRequest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateSessionRequest.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateSessionRequest.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,75 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATESESSION;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class CreateSessionRequest extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final boolean transacted;
+
+   private final int acknowledgementMode;
+
+   private final boolean xa;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CreateSessionRequest(boolean transacted, int acknowledgementMode,
+         boolean xa)
+   {
+      super(REQ_CREATESESSION);
+
+      this.transacted = transacted;
+      this.acknowledgementMode = acknowledgementMode;
+      this.xa = xa;
+   }
+
+   // Public --------------------------------------------------------
+
+   public boolean isTransacted()
+   {
+      return transacted;
+   }
+
+   public int getAcknowledgementMode()
+   {
+      return acknowledgementMode;
+   }
+
+   public boolean isXA()
+   {
+      return xa;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", transacted=" + transacted
+            + ", acknowledgementMode=" + acknowledgementMode + ", xa=" + xa
+            + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateSessionResponse.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateSessionResponse.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/CreateSessionResponse.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,77 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.Assert.assertValidID;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class CreateSessionResponse extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final String sessionID;
+
+   private final int dupsOKBatchSize;
+
+   private final boolean strictTCK;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public CreateSessionResponse(String sessionID, int dupsOKBatchSize,
+         boolean strictTCK)
+   {
+      super(PacketType.RESP_CREATESESSION);
+
+      assertValidID(sessionID);
+
+      this.sessionID = sessionID;
+      this.dupsOKBatchSize = dupsOKBatchSize;
+      this.strictTCK = strictTCK;
+   }
+
+   // Public --------------------------------------------------------
+
+   public String getSessionID()
+   {
+      return sessionID;
+   }
+
+   public int getDupsOKBatchSize()
+   {
+      return dupsOKBatchSize;
+   }
+
+   public boolean isStrictTCK()
+   {
+      return strictTCK;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", sessionID=" + sessionID
+            + ", dupsOKBatchSize=" + dupsOKBatchSize + ", strictTCK="
+            + strictTCK + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/DeliverMessage.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/DeliverMessage.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/DeliverMessage.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.Assert.assertValidID;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_DELIVERMESSAGE;
+
+import org.jboss.messaging.core.contract.Message;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class DeliverMessage extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final Message message;
+
+   private final String consumerID;
+
+   private final long deliveryID;
+
+   private final int deliveryCount;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public DeliverMessage(Message message, String consumerID, long deliveryID,
+         int deliveryCount)
+   {
+      super(MSG_DELIVERMESSAGE);
+
+      assert message != null;
+      assertValidID(consumerID);
+
+      this.message = message;
+      this.consumerID = consumerID;
+      this.deliveryID = deliveryID;
+      this.deliveryCount = deliveryCount;
+
+   }
+
+   // Public --------------------------------------------------------
+
+   public Message getMessage()
+   {
+      return message;
+   }
+
+   public String getConsumerID()
+   {
+      return consumerID;
+   }
+
+   public long getDeliveryID()
+   {
+      return deliveryID;
+   }
+
+   public int getDeliveryCount()
+   {
+      return deliveryCount;
+   }
+
+   @Override
+   public String toString()
+   {
+      StringBuffer buf = new StringBuffer(getParentString());
+      buf.append(", message=" + message);
+      buf.append(", consumerID=" + consumerID);
+      buf.append(", deliveryID=" + deliveryID);
+      buf.append(", deliveryCount=" + deliveryCount);
+      buf.append("]");
+      return buf.toString();
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/IDBlockRequest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/IDBlockRequest.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/IDBlockRequest.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,56 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_IDBLOCK;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class IDBlockRequest extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final int size;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public IDBlockRequest(int size)
+   {
+      super(REQ_IDBLOCK);
+
+      this.size = size;
+   }
+
+   // Public --------------------------------------------------------
+
+   public int getSize()
+   {
+      return size;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", size=" + size + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/IDBlockResponse.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/IDBlockResponse.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/IDBlockResponse.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,66 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_IDBLOCK;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class IDBlockResponse extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final long low;
+   private final long high;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   /**
+    * 
+    */
+   public IDBlockResponse(long low, long high)
+   {
+      super(RESP_IDBLOCK);
+
+      this.low = low;
+      this.high = high;
+   }
+
+   // Public --------------------------------------------------------
+
+   public long getLow()
+   {
+      return low;
+   }
+
+   public long getHigh()
+   {
+      return high;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", low=" + low + ", high=" + high + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/NullPacket.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/NullPacket.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/NullPacket.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -10,6 +10,8 @@
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public class NullPacket extends AbstractPacket
 {

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/PacketType.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/PacketType.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/PacketType.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -8,17 +8,43 @@
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public enum PacketType
 {
+   // FIXME better choice of byte value...
+   
    NULL((byte)1),
-   CLIENT_DELIVERY((byte) 2),
    TEXT((byte) 3),
-   REQ_CONNECTIONFACTORY_CREATECONNECTION((byte) 100),
-   RESP_CONNECTIONFACTORY_CREATECONNECTION((byte) 100100),
-   REQ_CONNECTION_CREATESESSION((byte) 201),
-   RESP_CONNECTION_CREATESESSION((byte) 100200);
-
+   // Connection factory
+   REQ_CREATECONNECTION((byte) 4),
+   RESP_CREATECONNECTION((byte) 5),
+   // Connection
+   REQ_IDBLOCK((byte)6),
+   RESP_IDBLOCK((byte)7),
+   REQ_CREATESESSION((byte) 8),
+   RESP_CREATESESSION((byte) 9),
+   MSG_STARTCONNECTION((byte)10),
+   MSG_SENDTRANSACTION((byte)11),
+   RESP_SENDTRANSACTION((byte)12),
+   // Session
+   REQ_CREATECONSUMER((byte)13),
+   RESP_CREATECONSUMER((byte)14),   
+   MSG_SENDMESSAGE((byte)15),
+   MSG_DELIVERMESSAGE((byte)16),
+   REQ_ACKDELIVERY((byte)17),
+   RESP_ACKDELIVERY((byte)18),
+   MSG_ACKDELIVERIES((byte)19),
+   RESP_ACKDELIVERIES((byte)20),
+   // Consumer
+   MSG_CHANGERATE((byte)21),
+   // Misc
+   REQ_CLOSING((byte)22),
+   RESP_CLOSING((byte)23),
+   MSG_CLOSE((byte)24);
+   
+   
    private byte type;
 
    PacketType(byte type)

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/SendMessage.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/SendMessage.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/SendMessage.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,77 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SENDMESSAGE;
+
+import org.jboss.jms.message.JBossMessage;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class SendMessage extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final JBossMessage message;
+   private final boolean checkForDuplicates;
+   private final long sequence;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public SendMessage(JBossMessage message, boolean checkForDuplicates,
+         long sequence)
+   {
+      super(MSG_SENDMESSAGE);
+
+      assert message != null;
+
+      this.message = message;
+      this.checkForDuplicates = checkForDuplicates;
+      this.sequence = sequence;
+   }
+
+   // Public --------------------------------------------------------
+
+   public JBossMessage getMessage()
+   {
+      return message;
+   }
+
+   public boolean checkForDuplicates()
+   {
+      return checkForDuplicates;
+   }
+
+   public long getSequence()
+   {
+      return sequence;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", message=" + message
+            + ", checkForDuplicates=" + checkForDuplicates + ", sequence="
+            + sequence + "]";
+   }
+   
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/SendTransactionMessage.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/SendTransactionMessage.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/SendTransactionMessage.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,67 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import org.jboss.jms.tx.TransactionRequest;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class SendTransactionMessage extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final TransactionRequest transactionRequest;
+   private final boolean checkForDuplicates;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public SendTransactionMessage(TransactionRequest transactionRequest,
+         boolean checkForDuplicates)
+   {
+      super(PacketType.MSG_SENDTRANSACTION);
+
+      assert transactionRequest != null;
+
+      this.transactionRequest = transactionRequest;
+      this.checkForDuplicates = checkForDuplicates;
+   }
+
+   // Public --------------------------------------------------------
+
+   public TransactionRequest getTransactionRequest()
+   {
+      return transactionRequest;
+   }
+
+   public boolean checkForDuplicates()
+   {
+      return checkForDuplicates;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", transactionRequest=" + transactionRequest
+            + ", checkForDuplicates=" + checkForDuplicates + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/StartConnectionMessage.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/StartConnectionMessage.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/StartConnectionMessage.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,41 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_STARTCONNECTION;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class StartConnectionMessage extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public StartConnectionMessage()
+   {
+      super(MSG_STARTCONNECTION);
+   }
+
+   // Public --------------------------------------------------------
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/TextPacket.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/TextPacket.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/TextPacket.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -8,10 +8,10 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.TEXT;
 
-
-
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public class TextPacket extends AbstractPacket
 {

Modified: branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/RemoteDispatcherTest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/RemoteDispatcherTest.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/RemoteDispatcherTest.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -14,15 +14,17 @@
 import java.util.List;
 import java.util.concurrent.TimeoutException;
 
+import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.AbstractPacketHandler;
-import org.jboss.messaging.core.remoting.RemoteDispatcher;
-import org.jboss.messaging.core.remoting.RemoteDispatcherFactory;
+import org.jboss.messaging.core.remoting.Client;
 import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
 import org.jboss.messaging.core.remoting.wireformat.NullPacket;
 import org.jboss.messaging.core.remoting.wireformat.TextPacket;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public class RemoteDispatcherTest extends TestSupport
 {
@@ -38,11 +40,11 @@
 
    public void testCanNotSendPacketIfNotConnected() throws Exception
    {
-      RemoteDispatcher dispatcher = RemoteDispatcherFactory.newDispatcher();
-
+      Client client = new Client();
+      
       try
       {
-         dispatcher.sendOneWay(new NullPacket());
+         client.sendOneWay(new NullPacket());
          fail("can not send a packet if the dispatcher is not connected");
       } catch (IllegalStateException e)
       {
@@ -53,7 +55,7 @@
    public void testSendOneWay() throws Exception
    {
       TextPacket packet = new TextPacket("testSendOneWay");
-      clientDispatcher.sendOneWay(packet);
+      client.sendOneWay(packet);
 
       Thread.sleep(300);
 
@@ -69,7 +71,7 @@
       for (int i = 0; i < MANY_MESSAGES; i++)
       {
          packets[i] = new TextPacket("testSendManyOneWay " + i);
-         clientDispatcher.sendOneWay(packets[i]);
+         client.sendOneWay(packets[i]);
       }
 
       List<AbstractPacket> receivedPackets = serverHandler.getPackets();
@@ -95,7 +97,7 @@
 
       TextPacket packet = new TextPacket("testSendOneWayWithCallbackHandler");
 
-      clientDispatcher.sendOneWay(packet, callbackHandler);
+      client.sendOneWay(packet, callbackHandler);
       assertEquals(0, callbackHandler.getPackets().size());
 
       Thread.sleep(600);
@@ -109,7 +111,7 @@
    {
       TextPacket request = new TextPacket("testSendBlocking");
 
-      AbstractPacket receivedPacket = clientDispatcher.sendBlocking(request);
+      AbstractPacket receivedPacket = client.sendBlocking(request);
 
       assertNotNull(receivedPacket);
       assertTrue(receivedPacket instanceof TextPacket);
@@ -119,14 +121,14 @@
 
    public void testSendBlockingWithTimeout() throws Exception
    {
-      clientDispatcher.setBlockingRequestTimeout(5, SECONDS);
+      client.setBlockingRequestTimeout(5, SECONDS);
       serverHandler.setSleepTime(7, SECONDS);
       
       AbstractPacket packet = new TextPacket("testSendBlockingWithTimeout");
 
       try
       {
-         clientDispatcher.sendBlocking(packet);
+         client.sendBlocking(packet);
          fail("a RequestTimeoutException should be thrown");
       } catch (TimeoutException e)
       {
@@ -145,7 +147,7 @@
    @Override
    protected void tearDown() throws Exception
    {
-      clientDispatcher.disconnect();
+      client.disconnect();
       serverAcceptor.unbind();
    }
 
@@ -166,7 +168,7 @@
          packets = new ArrayList<TextPacket>();
       }
 
-      public void handle(AbstractPacket packet)
+      public void handle(AbstractPacket packet, IoSession session)
       {
          packets.add((TextPacket) packet);
       }

Modified: branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/ReverseServerHandler.java
===================================================================
--- branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/ReverseServerHandler.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/ReverseServerHandler.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -6,8 +6,8 @@
  */
 package org.jboss.test.messaging.core.remoting;
 
-import static org.jboss.messaging.core.remoting.Constants.NO_CALLBACK_ID;
 import static org.jboss.messaging.core.remoting.Constants.NO_CORRELATION_ID;
+import static org.jboss.messaging.core.remoting.Constants.NO_ID_SET;
 import static org.jboss.messaging.core.remoting.TransportType.HTTP;
 import static org.jboss.test.messaging.core.remoting.TestSupport.reverse;
 
@@ -24,6 +24,8 @@
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ *
+ * @version <tt>$Revision$</tt>
  */
 public class ReverseServerHandler extends IoHandlerAdapter
 {
@@ -89,7 +91,7 @@
                Thread.sleep(sleepTime);
                TextPacket p = new TextPacket(reverse(incomingPacket.getText()));
                p.setCorrelationID(incomingPacket.getCorrelationID());
-               if (!NO_CALLBACK_ID.equals(incomingPacket.getCallbackID()))
+               if (!NO_ID_SET.equals(incomingPacket.getCallbackID()))
                {
                   p.setTargetID(incomingPacket.getCallbackID());
                }
@@ -124,7 +126,7 @@
    private boolean mustReply(AbstractPacket incomingPacket)
    {
       boolean mustReply = (incomingPacket.getCorrelationID() != NO_CORRELATION_ID)
-            || (!NO_CALLBACK_ID.equals(incomingPacket.getCallbackID()));
+            || (!NO_ID_SET.equals(incomingPacket.getCallbackID()));
       return mustReply;
    }
 

Modified: branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/TargetHandlerTest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/TargetHandlerTest.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/TargetHandlerTest.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -13,11 +13,14 @@
 
 import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.AbstractPacketHandler;
+import org.jboss.messaging.core.remoting.PacketDispatcher;
 import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
 import org.jboss.messaging.core.remoting.wireformat.TextPacket;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public class TargetHandlerTest extends TestSupport
 {
@@ -35,10 +38,10 @@
    {
       ClientTargetHandler targetHandler = new ClientTargetHandler();
 
-      clientDispatcher.register(targetHandler);
+      PacketDispatcher.client.register(targetHandler);
 
       // send a packet to create the IoSession on the server
-      clientDispatcher.sendOneWay(new TextPacket(
+      client.sendOneWay(new TextPacket(
             "testClientHandlePacketSentByServer from client"));
 
       Thread.sleep(300);
@@ -68,7 +71,7 @@
 
    public void tearDown() throws Exception
    {
-      clientDispatcher.disconnect();
+      client.disconnect();
       serverAcceptor.unbind();
    }
 
@@ -89,7 +92,7 @@
          packets = new ArrayList<TextPacket>();
       }
 
-      public void handle(AbstractPacket packet)
+      public void handle(AbstractPacket packet, IoSession session)
       {
          packets.add((TextPacket) packet);
       }

Modified: branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/TestSupport.java
===================================================================
--- branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/TestSupport.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/TestSupport.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -18,13 +18,14 @@
 import org.apache.mina.filter.logging.LoggingFilter;
 import org.apache.mina.filter.logging.MdcInjectionFilter;
 import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
-import org.jboss.messaging.core.remoting.RemoteDispatcher;
-import org.jboss.messaging.core.remoting.RemoteDispatcherFactory;
+import org.jboss.messaging.core.remoting.Client;
 import org.jboss.messaging.core.remoting.TransportType;
 import org.jboss.messaging.core.remoting.codec.PacketCodecFactory;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public abstract class TestSupport extends TestCase
 {
@@ -44,7 +45,7 @@
 
    ReverseServerHandler serverHandler;
 
-   RemoteDispatcher clientDispatcher;
+   Client client;
 
    // Static --------------------------------------------------------
 
@@ -130,8 +131,8 @@
    void startClient(int port, TransportType transport, boolean useSSL)
          throws Exception
    {
-      clientDispatcher = RemoteDispatcherFactory.newDispatcher();
-      clientDispatcher.connect(port, transport, useSSL);
+      client = new Client();
+      client.connect(port, transport, useSSL);
    }
 
    // Package protected ---------------------------------------------

Added: branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/AbstractPacketCodecTest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/AbstractPacketCodecTest.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/AbstractPacketCodecTest.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -0,0 +1,93 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.test.messaging.core.remoting.wireformat;
+
+import static java.util.UUID.randomUUID;
+
+import java.nio.charset.CharacterCodingException;
+
+import junit.framework.TestCase;
+
+import org.apache.mina.common.IoBuffer;
+import org.jboss.messaging.core.remoting.codec.AbstractPacketCodec;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class AbstractPacketCodecTest extends TestCase
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   // Public --------------------------------------------------------
+
+   public void testNullString() throws Exception
+   {
+      String result = putAndGet(null);
+
+      assertNull(result);
+   }
+
+   public void testEmptyString() throws Exception
+   {
+      String result = putAndGet("");
+
+      assertNotNull(result);
+      assertEquals("", result);
+   }
+
+   public void testNonEmptyString() throws Exception
+   {
+      String junk = randomUUID().toString();
+
+      String result = putAndGet(junk);
+
+      assertNotNull(result);
+      assertEquals(junk, result);
+   }
+
+   public void testTrueBoolean() throws Exception
+   {
+      assertTrue(putAndGet(true));
+   }
+
+   public void testFalseBoolean() throws Exception
+   {
+      assertFalse(putAndGet(false));
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   private static String putAndGet(String s) throws CharacterCodingException
+   {
+      IoBuffer buffer = IoBuffer.allocate(256);
+      AbstractPacketCodec.putString(buffer, s);
+      buffer.flip();
+      return AbstractPacketCodec.getString(buffer);
+   }
+
+   private static boolean putAndGet(boolean b) throws CharacterCodingException
+   {
+      IoBuffer buffer = IoBuffer.allocate(256);
+      AbstractPacketCodec.putBoolean(buffer, b);
+      buffer.flip();
+      return AbstractPacketCodec.getBoolean(buffer);
+   }
+
+   // Inner classes -------------------------------------------------
+}

Modified: branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/PacketTypeTest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/PacketTypeTest.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/PacketTypeTest.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -7,25 +7,73 @@
 package org.jboss.test.messaging.core.remoting.wireformat;
 
 import static java.util.UUID.randomUUID;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CHANGERATE;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CLOSE;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_DELIVERMESSAGE;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SENDMESSAGE;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SENDTRANSACTION;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_STARTCONNECTION;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.NULL;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CONNECTIONFACTORY_CREATECONNECTION;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CONNECTIONFACTORY_CREATECONNECTION;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_ACKDELIVERY;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CLOSING;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATECONNECTION;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATECONSUMER;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATESESSION;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_IDBLOCK;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_ACKDELIVERY;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CLOSING;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATECONNECTION;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATECONSUMER;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATESESSION;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_IDBLOCK;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.TEXT;
+
+import java.util.ArrayList;
+import java.util.List;
+
 import junit.framework.TestCase;
 
 import org.apache.mina.common.IoBuffer;
 import org.apache.mina.filter.codec.ProtocolCodecSession;
 import org.apache.mina.filter.codec.ProtocolDecoder;
 import org.apache.mina.filter.codec.ProtocolEncoder;
+import org.jboss.jms.delegate.Ack;
+import org.jboss.jms.delegate.DefaultAck;
+import org.jboss.jms.destination.JBossDestination;
+import org.jboss.jms.destination.JBossQueue;
+import org.jboss.jms.message.JBossMessage;
+import org.jboss.jms.tx.ClientTransaction;
+import org.jboss.jms.tx.TransactionRequest;
+import org.jboss.messaging.core.contract.Message;
 import org.jboss.messaging.core.remoting.codec.PacketCodecFactory;
 import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
-import org.jboss.messaging.core.remoting.wireformat.ConnectionFactoryCreateConnectionRequest;
-import org.jboss.messaging.core.remoting.wireformat.ConnectionFactoryCreateConnectionResponse;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveriesMessage;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryRequest;
+import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryResponse;
+import org.jboss.messaging.core.remoting.wireformat.ChangeRateMessage;
+import org.jboss.messaging.core.remoting.wireformat.CloseMessage;
+import org.jboss.messaging.core.remoting.wireformat.ClosingRequest;
+import org.jboss.messaging.core.remoting.wireformat.ClosingResponse;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateConnectionResponse;
+import org.jboss.messaging.core.remoting.wireformat.CreateConsumerRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateConsumerResponse;
+import org.jboss.messaging.core.remoting.wireformat.CreateSessionRequest;
+import org.jboss.messaging.core.remoting.wireformat.CreateSessionResponse;
+import org.jboss.messaging.core.remoting.wireformat.DeliverMessage;
+import org.jboss.messaging.core.remoting.wireformat.IDBlockRequest;
+import org.jboss.messaging.core.remoting.wireformat.IDBlockResponse;
 import org.jboss.messaging.core.remoting.wireformat.NullPacket;
+import org.jboss.messaging.core.remoting.wireformat.PacketType;
+import org.jboss.messaging.core.remoting.wireformat.SendMessage;
+import org.jboss.messaging.core.remoting.wireformat.SendTransactionMessage;
+import org.jboss.messaging.core.remoting.wireformat.StartConnectionMessage;
 import org.jboss.messaging.core.remoting.wireformat.TextPacket;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
  */
 public class PacketTypeTest extends TestCase
 {
@@ -36,6 +84,16 @@
 
    // Static --------------------------------------------------------
 
+   private static void assertSameAcks(List<Ack> expected, List<Ack> actual)
+   {
+      assertEquals(expected.size(), actual.size());
+      for (int i = 0; i < expected.size(); i++)
+      {
+         assertEquals(expected.get(i).getDeliveryID(), actual.get(i)
+               .getDeliveryID());
+      }
+   }
+
    // Constructors --------------------------------------------------
 
    // Public --------------------------------------------------------
@@ -71,41 +129,308 @@
       assertEquals(packet.getText(), p.getText());
    }
 
-   public void testConnectionFactoryCreateConnectionRequest() throws Exception
+   public void testCreateConnectionRequest() throws Exception
    {
-      ConnectionFactoryCreateConnectionRequest packet = new ConnectionFactoryCreateConnectionRequest();
+      byte version = (byte) 4;
+      String clientVMID = randomUUID().toString();
+      int failedNodeID = 0;
+      String username = null;
+      String password = null;
 
-      AbstractPacket decodedPacket = encodeAndDecode(packet);
+      CreateConnectionRequest request = new CreateConnectionRequest(version,
+            clientVMID, failedNodeID, username, password);
 
-      assertTrue(decodedPacket instanceof ConnectionFactoryCreateConnectionRequest);
-      assertEquals(REQ_CONNECTIONFACTORY_CREATECONNECTION, decodedPacket
-            .getType());
+      AbstractPacket decodedPacket = encodeAndDecode(request);
+
+      assertTrue(decodedPacket instanceof CreateConnectionRequest);
+      CreateConnectionRequest decodedRequest = (CreateConnectionRequest) decodedPacket;
+
+      assertEquals(REQ_CREATECONNECTION, decodedPacket.getType());
+      assertEquals(request.getVersion(), decodedRequest.getVersion());
+      assertEquals(request.getClientVMID(), decodedRequest.getClientVMID());
+      assertEquals(request.getFailedNodeID(), decodedRequest.getFailedNodeID());
+      assertEquals(request.getUsername(), decodedRequest.getUsername());
+      assertEquals(request.getPassword(), decodedRequest.getPassword());
    }
 
-   public void testConnectionFactoryCreateConnectionResponse() throws Exception
+   public void testCreateConnectionResponse() throws Exception
    {
-      ConnectionFactoryCreateConnectionResponse packet = new ConnectionFactoryCreateConnectionResponse(
-            randomUUID().toString());
+      CreateConnectionResponse response = new CreateConnectionResponse(
+            randomUUID().toString(), 1234);
 
+      AbstractPacket decodedPacket = encodeAndDecode(response);
+
+      assertTrue(decodedPacket instanceof CreateConnectionResponse);
+
+      CreateConnectionResponse decodedResponse = (CreateConnectionResponse) decodedPacket;
+      assertEquals(RESP_CREATECONNECTION, decodedResponse.getType());
+      assertEquals(response.getConnectionID(), decodedResponse
+            .getConnectionID());
+      assertEquals(response.getServerID(), decodedResponse.getServerID());
+   }
+
+   public void testCreateSessionRequest() throws Exception
+   {
+      CreateSessionRequest request = new CreateSessionRequest(true, 0, false);
+
+      AbstractPacket decodedPacket = encodeAndDecode(request);
+
+      assertTrue(decodedPacket instanceof CreateSessionRequest);
+
+      CreateSessionRequest decodedRequest = (CreateSessionRequest) decodedPacket;
+      assertEquals(REQ_CREATESESSION, decodedRequest.getType());
+      assertEquals(request.isTransacted(), decodedRequest.isTransacted());
+      assertEquals(request.getAcknowledgementMode(), decodedRequest
+            .getAcknowledgementMode());
+      assertEquals(request.isXA(), decodedRequest.isXA());
+   }
+
+   public void testCreateSessionResponse() throws Exception
+   {
+      CreateSessionResponse response = new CreateSessionResponse(randomUUID()
+            .toString(), 23, false);
+
+      AbstractPacket decodedPacket = encodeAndDecode(response);
+
+      assertTrue(decodedPacket instanceof CreateSessionResponse);
+
+      CreateSessionResponse decodedResponse = (CreateSessionResponse) decodedPacket;
+      assertEquals(RESP_CREATESESSION, decodedResponse.getType());
+      assertEquals(response.getSessionID(), decodedResponse.getSessionID());
+      assertEquals(response.getDupsOKBatchSize(), decodedResponse
+            .getDupsOKBatchSize());
+      assertEquals(response.isStrictTCK(), decodedResponse.isStrictTCK());
+   }
+
+   public void testIDBlockRequest() throws Exception
+   {
+      IDBlockRequest request = new IDBlockRequest(23);
+
+      AbstractPacket decodedPacket = encodeAndDecode(request);
+
+      assertTrue(decodedPacket instanceof IDBlockRequest);
+
+      IDBlockRequest decodedRequest = (IDBlockRequest) decodedPacket;
+      assertEquals(REQ_IDBLOCK, decodedRequest.getType());
+      assertEquals(request.getSize(), decodedRequest.getSize());
+   }
+
+   public void testIDBlockResponse() throws Exception
+   {
+      IDBlockResponse response = new IDBlockResponse(
+            System.currentTimeMillis(), System.currentTimeMillis() * 2);
+
+      AbstractPacket decodedPacket = encodeAndDecode(response);
+
+      assertTrue(decodedPacket instanceof IDBlockResponse);
+
+      IDBlockResponse decodedResponse = (IDBlockResponse) decodedPacket;
+      assertEquals(RESP_IDBLOCK, decodedResponse.getType());
+      assertEquals(response.getLow(), decodedResponse.getLow());
+      assertEquals(response.getHigh(), decodedResponse.getHigh());
+   }
+
+   public void testSendMessage() throws Exception
+   {
+      SendMessage packet = new SendMessage(new JBossMessage(System
+            .currentTimeMillis()), true, System.currentTimeMillis());
+
+      AbstractPacket p = encodeAndDecode(packet);
+
+      assertTrue(p instanceof SendMessage);
+
+      SendMessage decodedPacket = (SendMessage) p;
+      assertEquals(MSG_SENDMESSAGE, decodedPacket.getType());
+      assertEquals(packet.checkForDuplicates(), decodedPacket
+            .checkForDuplicates());
+      assertEquals(packet.getSequence(), decodedPacket.getSequence());
+      assertEquals(packet.getMessage().getMessageID(), decodedPacket
+            .getMessage().getMessageID());
+   }
+
+   public void testCreateConsumerRequest() throws Exception
+   {
+      JBossDestination destination = new JBossQueue(
+            "testCreateConsumerRequest", true);
+      CreateConsumerRequest request = new CreateConsumerRequest(destination,
+            "color = 'red'", false, null, false, false);
+
+      AbstractPacket decodedPacket = encodeAndDecode(request);
+
+      assertTrue(decodedPacket instanceof CreateConsumerRequest);
+
+      CreateConsumerRequest decodedRequest = (CreateConsumerRequest) decodedPacket;
+      assertEquals(REQ_CREATECONSUMER, decodedRequest.getType());
+      assertEquals(request.getDestination(), decodedRequest.getDestination());
+      assertEquals(request.getSelector(), decodedRequest.getSelector());
+      assertEquals(request.isNoLocal(), decodedRequest.isNoLocal());
+      assertEquals(request.getSubscriptionName(), decodedRequest
+            .getSubscriptionName());
+      assertEquals(request.isConnectionConsumer(), decodedRequest
+            .isConnectionConsumer());
+      assertEquals(request.isAutoFlowControl(), decodedRequest
+            .isAutoFlowControl());
+   }
+
+   public void testCreateConsumerResponse() throws Exception
+   {
+
+      CreateConsumerResponse response = new CreateConsumerResponse(randomUUID()
+            .toString(), 23, 42, System.currentTimeMillis());
+
+      AbstractPacket decodedPacket = encodeAndDecode(response);
+
+      assertTrue(decodedPacket instanceof CreateConsumerResponse);
+
+      CreateConsumerResponse decodedResponse = (CreateConsumerResponse) decodedPacket;
+      assertEquals(RESP_CREATECONSUMER, decodedResponse.getType());
+      assertEquals(response.getBufferSize(), decodedResponse.getBufferSize());
+      assertEquals(response.getMaxDeliveries(), decodedResponse
+            .getMaxDeliveries());
+      assertEquals(response.getRedeliveryDelay(), decodedResponse
+            .getRedeliveryDelay());
+   }
+
+   public void testStartConnectionMessage() throws Exception
+   {
+      StartConnectionMessage packet = new StartConnectionMessage();
+
       AbstractPacket decodedPacket = encodeAndDecode(packet);
 
-      assertTrue(decodedPacket instanceof ConnectionFactoryCreateConnectionResponse);
-      assertEquals(RESP_CONNECTIONFACTORY_CREATECONNECTION, decodedPacket
-            .getType());
+      assertTrue(decodedPacket instanceof StartConnectionMessage);
+      assertEquals(MSG_STARTCONNECTION, decodedPacket.getType());
    }
 
-   // TestCase overrides ---------------------------------------------------
+   public void testChangeRateMessage() throws Exception
+   {
+      ChangeRateMessage message = new ChangeRateMessage(0.63f);
 
-   protected void setUp() throws Exception
+      AbstractPacket decodedPacket = encodeAndDecode(message);
+
+      assertTrue(decodedPacket instanceof ChangeRateMessage);
+      ChangeRateMessage decodedMessage = (ChangeRateMessage) decodedPacket;
+      assertEquals(MSG_CHANGERATE, decodedMessage.getType());
+      assertEquals(message.getRate(), decodedMessage.getRate());
+   }
+
+   public void testDeliverMessage() throws Exception
    {
-      super.setUp();
+      Message msg = new JBossMessage(System.currentTimeMillis());
+      DeliverMessage message = new DeliverMessage(msg, randomUUID().toString(),
+            System.currentTimeMillis(), 23);
+
+      AbstractPacket decodedPacket = encodeAndDecode(message);
+
+      assertTrue(decodedPacket instanceof DeliverMessage);
+      DeliverMessage decodedMessage = (DeliverMessage) decodedPacket;
+      assertEquals(MSG_DELIVERMESSAGE, decodedMessage.getType());
+      assertEquals(message.getMessage().getMessageID(), decodedMessage
+            .getMessage().getMessageID());
+      assertEquals(message.getConsumerID(), decodedMessage.getConsumerID());
+      assertEquals(message.getDeliveryID(), decodedMessage.getDeliveryID());
+      assertEquals(message.getDeliveryCount(), decodedMessage
+            .getDeliveryCount());
    }
 
-   protected void tearDown() throws Exception
+   public void testAcknowledgeDeliveryRequest() throws Exception
    {
-      super.tearDown();
+      AcknowledgeDeliveryRequest request = new AcknowledgeDeliveryRequest(
+            System.currentTimeMillis());
+
+      AbstractPacket decodedPacket = encodeAndDecode(request);
+
+      assertTrue(decodedPacket instanceof AcknowledgeDeliveryRequest);
+      AcknowledgeDeliveryRequest decodedRequest = (AcknowledgeDeliveryRequest) decodedPacket;
+      assertEquals(REQ_ACKDELIVERY, decodedRequest.getType());
+      assertEquals(request.getDeliveryID(), decodedRequest.getDeliveryID());
    }
 
+   public void testAcknowledgeDeliveriesRequest() throws Exception
+   {
+      List<Ack> acks = new ArrayList<Ack>();
+      acks.add(new DefaultAck(System.nanoTime()));
+      acks.add(new DefaultAck(System.nanoTime()));
+      acks.add(new DefaultAck(System.nanoTime()));
+
+      AcknowledgeDeliveriesMessage request = new AcknowledgeDeliveriesMessage(
+            acks);
+
+      AbstractPacket decodedPacket = encodeAndDecode(request);
+
+      assertTrue(decodedPacket instanceof AcknowledgeDeliveriesMessage);
+      AcknowledgeDeliveriesMessage decodedRequest = (AcknowledgeDeliveriesMessage) decodedPacket;
+      assertEquals(PacketType.MSG_ACKDELIVERIES, decodedRequest.getType());
+      assertSameAcks(request.getAcks(), decodedRequest.getAcks());
+   }
+
+   public void testAcknowledgeDeliveryResponse() throws Exception
+   {
+      AcknowledgeDeliveryResponse response = new AcknowledgeDeliveryResponse(
+            true);
+
+      AbstractPacket decodedPacket = encodeAndDecode(response);
+
+      assertTrue(decodedPacket instanceof AcknowledgeDeliveryResponse);
+      AcknowledgeDeliveryResponse decodedResponse = (AcknowledgeDeliveryResponse) decodedPacket;
+      assertEquals(RESP_ACKDELIVERY, decodedResponse.getType());
+      assertEquals(response.isAcknowledged(), decodedResponse.isAcknowledged());
+
+   }
+
+   public void testClosingRequest() throws Exception
+   {
+      ClosingRequest request = new ClosingRequest(System.currentTimeMillis());
+
+      AbstractPacket decodedPacket = encodeAndDecode(request);
+
+      assertTrue(decodedPacket instanceof ClosingRequest);
+      ClosingRequest decodedRequest = (ClosingRequest) decodedPacket;
+      assertEquals(REQ_CLOSING, decodedRequest.getType());
+      assertEquals(request.getSequence(), decodedRequest.getSequence());
+   }
+
+   public void testClosingResponse() throws Exception
+   {
+      ClosingResponse response = new ClosingResponse(System.currentTimeMillis());
+
+      AbstractPacket decodedPacket = encodeAndDecode(response);
+
+      assertTrue(decodedPacket instanceof ClosingResponse);
+      ClosingResponse decodedRequest = (ClosingResponse) decodedPacket;
+      assertEquals(RESP_CLOSING, decodedRequest.getType());
+      assertEquals(response.getID(), decodedRequest.getID());
+   }
+
+   public void testCloseMessage() throws Exception
+   {
+      CloseMessage message = new CloseMessage();
+
+      AbstractPacket decodedPacket = encodeAndDecode(message);
+
+      assertTrue(decodedPacket instanceof CloseMessage);
+      CloseMessage decodedMessage = (CloseMessage) decodedPacket;
+      assertEquals(MSG_CLOSE, decodedMessage.getType());
+   }
+
+   public void testSendTransactionMessage() throws Exception
+   {
+      ClientTransaction tx = new ClientTransaction();
+      TransactionRequest tr = new TransactionRequest(
+            TransactionRequest.ONE_PHASE_COMMIT_REQUEST, null, tx);
+
+      SendTransactionMessage request = new SendTransactionMessage(tr, true);
+
+      AbstractPacket decodedPacket = encodeAndDecode(request);
+
+      assertTrue(decodedPacket instanceof SendTransactionMessage);
+      SendTransactionMessage decodedRequest = (SendTransactionMessage) decodedPacket;
+      assertEquals(MSG_SENDTRANSACTION, decodedRequest.getType());
+      assertEquals(request.getTransactionRequest().getRequestType(),
+            decodedRequest.getTransactionRequest().getRequestType());
+      assertEquals(request.checkForDuplicates(), decodedRequest
+            .checkForDuplicates());
+   }
+
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------
@@ -121,18 +446,17 @@
 
    private IoBuffer encode(AbstractPacket packet) throws Exception
    {
-      ProtocolCodecSession httpCodecSession = new ProtocolCodecSession();
-      ProtocolEncoder encoder = new PacketCodecFactory().getEncoder();
-      encoder.encode(httpCodecSession, packet, httpCodecSession
-            .getEncoderOutput());
-      IoBuffer buffer = httpCodecSession.getEncoderOutputQueue().poll();
+      ProtocolCodecSession session = new ProtocolCodecSession();
+      ProtocolEncoder encoder = new PacketCodecFactory().getEncoder(session);
+      encoder.encode(session, packet, session.getEncoderOutput());
+      IoBuffer buffer = session.getEncoderOutputQueue().poll();
       return buffer;
    }
 
    private AbstractPacket decode(IoBuffer buffer) throws Exception
    {
       ProtocolCodecSession session = new ProtocolCodecSession();
-      ProtocolDecoder decoder = new PacketCodecFactory().getDecoder();
+      ProtocolDecoder decoder = new PacketCodecFactory().getDecoder(session);
       decoder.decode(session, buffer, session.getDecoderOutput());
 
       Object o = session.getDecoderOutputQueue().poll();

Modified: branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/tools/ServerManagement.java
===================================================================
--- branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/tools/ServerManagement.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/tools/ServerManagement.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -370,7 +370,7 @@
          int index = Integer.parseInt(remoteDebugIndex);
 
          sb.append("-Xmx1024M -Xdebug -Xnoagent -Djava.compiler=NONE ").
-            append("-Xrunjdwp:transport=dt_shmem,server=n,suspend=n,address=rmiserver_").
+            append("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=800").
             append(index).append(' ');
       }
 

Modified: branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/tools/container/ServiceContainer.java
===================================================================
--- branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/tools/container/ServiceContainer.java	2007-11-19 14:56:33 UTC (rev 3342)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/tools/container/ServiceContainer.java	2007-11-19 15:08:03 UTC (rev 3343)
@@ -21,9 +21,13 @@
 */
 package org.jboss.test.messaging.tools.container;
 
+import static org.jboss.messaging.core.remoting.Constants.PORT;
+import static org.jboss.remoting.transport.PortUtil.findFreePort;
+
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.InputStream;
+import java.net.InetSocketAddress;
 import java.net.URL;
 import java.sql.Connection;
 import java.sql.DriverManager;
@@ -32,6 +36,7 @@
 import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Formatter;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
@@ -56,6 +61,10 @@
 import javax.transaction.TransactionManager;
 import javax.transaction.UserTransaction;
 
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.logging.LoggingFilter;
+import org.apache.mina.filter.logging.MdcInjectionFilter;
+import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
 import org.hsqldb.Server;
 import org.hsqldb.persist.HsqlProperties;
 import org.jboss.jms.jndi.JMSProviderAdapter;
@@ -63,6 +72,8 @@
 import org.jboss.jms.server.ServerPeer;
 import org.jboss.jms.server.remoting.JMSServerInvocationHandler;
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.remoting.codec.PacketCodecFactory;
+import org.jboss.messaging.core.remoting.server.ServerHandler;
 import org.jboss.messaging.util.JNDIUtil;
 import org.jboss.messaging.util.XMLUtil;
 import org.jboss.remoting.InvokerLocator;
@@ -88,6 +99,8 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
+import sun.management.StringFlag;
+
 import com.arjuna.ats.arjuna.recovery.RecoveryManager;
 
 /**
@@ -230,6 +243,8 @@
    // so we don't start up multiple servers with services running on the same port
    private int serverIndex;
 
+   private NioSocketAcceptor acceptor;
+
    // Static ---------------------------------------------------------------------------------------
 
    public static Object type(MBeanInfo mbeanInfo, String attributeName, String valueAsString)
@@ -528,6 +543,8 @@
 
       stopService(REMOTING_OBJECT_NAME);
 
+      stopMINAServer();
+
       if (httpConnectionFactory)
       {
          stopService(HTTP_REMOTING_OBJECT_NAME);
@@ -1400,9 +1417,45 @@
                                         "org.jboss.remoting.ServerInvocationHandler"});
 
       log.debug("started " + objectName);
+      
+      startMINAServer();
    }
 
 
+   private void startMINAServer() throws Exception
+   {
+      acceptor = new NioSocketAcceptor();
+
+      // Prepare the configuration
+      MdcInjectionFilter mdcInjectionFilter = new MdcInjectionFilter();
+      acceptor.getFilterChain().addLast("mdc", mdcInjectionFilter);
+      acceptor.getFilterChain().addLast("codec",
+            new ProtocolCodecFilter(new PacketCodecFactory()));
+      acceptor.getFilterChain().addLast("logger", new LoggingFilter());
+
+      // Bind
+      acceptor.setLocalAddress(new InetSocketAddress(PORT));
+      acceptor.setHandler(new ServerHandler());
+      acceptor.bind();
+
+      info("Listening on port " + PORT);
+   }
+   
+   private void stopMINAServer()
+   {
+      if (acceptor != null)
+      {
+         acceptor.setDisconnectOnUnbind(true);
+         acceptor.unbind();
+      }
+   }
+   
+   private void info(String s)
+   {
+      log.info(new Formatter().format("##MINA## %-50s ###\n", s).toString());
+   }
+
+
    private void startSecurityManager() throws Exception
    {
       MockJBossSecurityManager sm = new MockJBossSecurityManager();




More information about the jboss-cvs-commits mailing list