You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2009/04/27 15:12:37 UTC
svn commit: r768967 - in /activemq/activemq-cpp/trunk:
activemq-cpp-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/commands/
activemq-cpp/ activemq-cpp/src/main/
activemq-cpp/src/main/activemq/commands/ activemq-cpp/src/main/activem...
Author: tabish
Date: Mon Apr 27 13:12:37 2009
New Revision: 768967
URL: http://svn.apache.org/viewvc?rev=768967&view=rev
Log:
Add more code to support Stomp WireFormat.
Modified:
activemq/activemq-cpp/trunk/activemq-cpp-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/commands/CommandCodeGeneratorsFactory.java
activemq/activemq-cpp/trunk/activemq-cpp/pom.xml
activemq/activemq-cpp/trunk/activemq-cpp/src/main/Makefile.am
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BaseCommand.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/Command.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ConnectionInfo.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/TransactionInfo.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/marshal/Marshaler.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/marshal/Marshaler.h
Modified: activemq/activemq-cpp/trunk/activemq-cpp-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/commands/CommandCodeGeneratorsFactory.java
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/commands/CommandCodeGeneratorsFactory.java?rev=768967&r1=768966&r2=768967&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/commands/CommandCodeGeneratorsFactory.java (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/commands/CommandCodeGeneratorsFactory.java Mon Apr 27 13:12:37 2009
@@ -48,6 +48,8 @@
commandsWithShortcuts.add( "ProducerAck" );
commandsWithShortcuts.add( "MessageDispatchNotification" );
commandsWithShortcuts.add( "ShutdownInfo" );
+ commandsWithShortcuts.add( "TransactionInfo" );
+ commandsWithShortcuts.add( "ConnectionInfo" );
}
/**
Modified: activemq/activemq-cpp/trunk/activemq-cpp/pom.xml
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/pom.xml?rev=768967&r1=768966&r2=768967&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/pom.xml (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/pom.xml Mon Apr 27 13:12:37 2009
@@ -165,7 +165,7 @@
<excludes>
<exclude>**/decaf/security/**\*.cpp</exclude>
<exclude>**/decaf/security_provider/**\*.cpp</exclude>
- <exclude>**/activemq/wireformat/stomp/**\*.cpp</exclude>
+<!-- <exclude>**/activemq/wireformat/stomp/**\*.cpp</exclude> -->
</excludes>
</sources>
<headers>
@@ -176,7 +176,7 @@
<excludes>
<exclude>**/decaf/security/**\*.h</exclude>
<exclude>**/decaf/security_provider/**\*.h</exclude>
- <exclude>**/activemq/wireformat/stomp/**\*.h</exclude>
+<!-- <exclude>**/activemq/wireformat/stomp/**\*.h</exclude> -->
</excludes>
</headers>
</configuration>
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/Makefile.am
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/Makefile.am?rev=768967&r1=768966&r2=768967&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/Makefile.am (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/Makefile.am Mon Apr 27 13:12:37 2009
@@ -304,6 +304,11 @@
activemq/wireformat/openwire/utils/BooleanStream.cpp \
activemq/wireformat/openwire/utils/HexTable.cpp \
activemq/wireformat/openwire/OpenWireFormatNegotiator.cpp \
+ activemq/wireformat/stomp/StompResponseBuilder.cpp \
+ activemq/wireformat/stomp/StompCommandConstants.cpp \
+ activemq/wireformat/stomp/marshal/Marshaler.cpp \
+ activemq/wireformat/stomp/StompWireFormatFactory.cpp \
+ activemq/wireformat/stomp/StompWireFormat.cpp \
activemq/wireformat/WireFormatRegistry.cpp \
activemq/cmsutil/PooledSession.cpp \
activemq/cmsutil/ResourceLifecycleManager.cpp \
@@ -832,6 +837,12 @@
activemq/wireformat/openwire/utils/MessagePropertyInterceptor.h \
activemq/wireformat/WireFormat.h \
activemq/wireformat/WireFormatNegotiator.h \
+ activemq/wireformat/stomp/StompFrame.h \
+ activemq/wireformat/stomp/StompCommandConstants.h \
+ activemq/wireformat/stomp/StompResponseBuilder.h \
+ activemq/wireformat/stomp/StompWireFormatFactory.h \
+ activemq/wireformat/stomp/marshal/Marshaler.h \
+ activemq/wireformat/stomp/StompWireFormat.h \
activemq/wireformat/WireFormatFactory.h \
activemq/wireformat/MarshalAware.h \
activemq/wireformat/WireFormatRegistry.h \
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BaseCommand.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BaseCommand.h?rev=768967&r1=768966&r2=768967&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BaseCommand.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BaseCommand.h Mon Apr 27 13:12:37 2009
@@ -112,6 +112,9 @@
return BaseDataStructure::equals( value );
}
+ virtual bool isConnectionInfo() const {
+ return false;
+ }
virtual bool isBrokerInfo() const {
return false;
}
@@ -142,6 +145,9 @@
virtual bool isShutdownInfo() const {
return false;
}
+ virtual bool isTransactionInfo() const {
+ return false;
+ }
virtual bool isWireFormatInfo() const {
return false;
}
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/Command.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/Command.h?rev=768967&r1=768966&r2=768967&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/Command.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/Command.h Mon Apr 27 13:12:37 2009
@@ -80,6 +80,7 @@
* Command is of a certain type. These are the most commonly used Commands
* and we save several casts and some ugly code by just adding these here.
*/
+ virtual bool isConnectionInfo() const = 0;
virtual bool isBrokerInfo() const = 0;
virtual bool isKeepAliveInfo() const = 0;
virtual bool isMessage() const = 0;
@@ -90,6 +91,7 @@
virtual bool isResponse() const = 0;
virtual bool isRemoveInfo() const = 0;
virtual bool isShutdownInfo() const = 0;
+ virtual bool isTransactionInfo() const = 0;
virtual bool isWireFormatInfo() const = 0;
};
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ConnectionInfo.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ConnectionInfo.h?rev=768967&r1=768966&r2=768967&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ConnectionInfo.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ConnectionInfo.h Mon Apr 27 13:12:37 2009
@@ -138,6 +138,13 @@
virtual void setClientMaster( bool clientMaster );
/**
+ * @return an answer of true to the isConnectionInfo() query.
+ */
+ virtual bool isConnectionInfo() const {
+ return true;
+ }
+
+ /**
* Allows a Visitor to visit this command and return a response to the
* command based on the command type being visited. The command will call
* the proper processXXX method in the visitor.
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/TransactionInfo.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/TransactionInfo.h?rev=768967&r1=768966&r2=768967&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/TransactionInfo.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/TransactionInfo.h Mon Apr 27 13:12:37 2009
@@ -115,6 +115,13 @@
virtual void setType( unsigned char type );
/**
+ * @return an answer of true to the isTransactionInfo() query.
+ */
+ virtual bool isTransactionInfo() const {
+ return true;
+ }
+
+ /**
* Allows a Visitor to visit this command and return a response to the
* command based on the command type being visited. The command will call
* the proper processXXX method in the visitor.
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.cpp?rev=768967&r1=768966&r2=768967&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.cpp Mon Apr 27 13:12:37 2009
@@ -112,13 +112,13 @@
frame.reset( new StompFrame() );
// Read the command header.
- readStompCommandHeader( *( frame.get() ), in );
+ readStompCommandHeader( frame, in );
// Read the headers.
- readStompHeaders( *( frame.get() ), in );
+ readStompHeaders( frame, in );
// Read the body.
- readStompBody( *( frame.get() ), in );
+ readStompBody( frame, in );
// Return the Command.
return marshaler.marshal( frame );
@@ -138,7 +138,7 @@
}
////////////////////////////////////////////////////////////////////////////////
-void StompWireFormat::readStompCommandHeader( StompFrame& frame, decaf::io::DataInputStream* in )
+void StompWireFormat::readStompCommandHeader( Pointer<StompFrame>& frame, decaf::io::DataInputStream* in )
throw ( decaf::io::IOException ) {
try{
@@ -154,7 +154,7 @@
for( size_t ix = 0; ix < buffer.size()-1; ++ix ) {
// Find the first non whitespace character
- if( !Character::isWhitespace(buffer[ix]) ){
+ if( !Character::isWhitespace( buffer[ix] ) ){
offset = (long long)ix;
break;
}
@@ -162,7 +162,7 @@
if( offset >= 0 ) {
// Set the command in the frame - copy the memory.
- frame.setCommand( reinterpret_cast<char*>(&buffer[(size_t)offset]) );
+ frame->setCommand( reinterpret_cast<char*>( &buffer[(size_t)offset] ) );
break;
}
}
@@ -173,7 +173,7 @@
}
////////////////////////////////////////////////////////////////////////////////
-void StompWireFormat::readStompHeaders( StompFrame& frame, decaf::io::DataInputStream* in )
+void StompWireFormat::readStompHeaders( Pointer<StompFrame>& frame, decaf::io::DataInputStream* in )
throw ( decaf::io::IOException ) {
try{
@@ -211,11 +211,11 @@
// Null-terminate the key.
buffer[ix] = '\0';
- const char* key = reinterpret_cast<char*>(&buffer[0]);
- const char* value = reinterpret_cast<char*>(&buffer[ix+1]);
+ const char* key = reinterpret_cast<char*>( &buffer[0] );
+ const char* value = reinterpret_cast<char*>( &buffer[ix+1] );
// Assign the header key/value pair.
- frame.getProperties().setProperty(key, value);
+ frame->getProperties().setProperty( key, value );
// Break out of the for loop.
break;
@@ -250,11 +250,9 @@
// If we reached the line terminator, return the total number
// of characters read.
- if( buffer[count-1] == '\n' )
- {
+ if( buffer[count-1] == '\n' ) {
// Overwrite the line feed with a null character.
buffer[count-1] = '\0';
-
return count;
}
}
@@ -271,7 +269,7 @@
}
////////////////////////////////////////////////////////////////////////////////
-void StompWireFormat::readStompBody( StompFrame& frame, decaf::io::DataInputStream* in )
+void StompWireFormat::readStompBody( Pointer<StompFrame>& frame, decaf::io::DataInputStream* in )
throw ( decaf::io::IOException ) {
try{
@@ -281,12 +279,12 @@
unsigned int content_length = 0;
- if(frame.getProperties().hasProperty(
+ if( frame->getProperties().hasProperty(
StompCommandConstants::toString(
StompCommandConstants::HEADER_CONTENTLENGTH ) ) ) {
string length =
- frame.getProperties().getProperty(
+ frame->getProperties().getProperty(
StompCommandConstants::toString(
StompCommandConstants::HEADER_CONTENTLENGTH ) );
@@ -305,7 +303,7 @@
// Resize doesn't realloc the vector smaller if content_length
// is less than capacity of the buffer, it just move the end
// iterator. Reserve adds the benefit that the mem is set to
- // zero. Over time as larger messages come in thsi will cause
+ // zero. Over time as larger messages come in this will cause
// us to adapt to that size so that future messages that are
// around that size won't alloc any new memory.
@@ -346,7 +344,7 @@
if( content_length != 0 ) {
// Set the body contents in the frame - copy the memory
- frame.getBody() = buffer;
+ frame->getBody() = buffer;
}
}
AMQ_CATCH_RETHROW( decaf::io::IOException )
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.h?rev=768967&r1=768966&r2=768967&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.h Mon Apr 27 13:12:37 2009
@@ -72,7 +72,7 @@
* Set the Version
* @param the version of the wire format
*/
- virtual void setVersion( int version ) {}
+ virtual void setVersion( int version AMQCPP_UNUSED ) {}
/**
* Get the Version
@@ -108,7 +108,7 @@
* @param reference to a Stomp Frame
* @throws StompConnectorException
*/
- void readStompCommandHeader( StompFrame& frame, decaf::io::DataInputStream* in )
+ void readStompCommandHeader( Pointer<StompFrame>& frame, decaf::io::DataInputStream* in )
throw ( decaf::io::IOException );
/**
@@ -116,7 +116,7 @@
* @param Frame to place data into
* @throws StompConnectorException
*/
- void readStompHeaders( StompFrame& frame, decaf::io::DataInputStream* in )
+ void readStompHeaders( Pointer<StompFrame>& frame, decaf::io::DataInputStream* in )
throw ( decaf::io::IOException );
/**
@@ -124,13 +124,14 @@
* @return number of bytes read, zero if there was a problem.
* @throws StompConnectorException
*/
- std::size_t readStompHeaderLine( decaf::io::DataInputStream* in ) throw ( decaf::io::IOException );
+ std::size_t readStompHeaderLine( decaf::io::DataInputStream* in )
+ throw ( decaf::io::IOException );
/**
* Reads the Stomp Body from the Wire and store it in the frame.
* @param Stomp Frame to place data in
*/
- void readStompBody( StompFrame& frame, decaf::io::DataInputStream* in )
+ void readStompBody( Pointer<StompFrame>& frame, decaf::io::DataInputStream* in )
throw ( decaf::io::IOException );
};
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/marshal/Marshaler.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/marshal/Marshaler.cpp?rev=768967&r1=768966&r2=768967&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/marshal/Marshaler.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/marshal/Marshaler.cpp Mon Apr 27 13:12:37 2009
@@ -28,6 +28,7 @@
#include <activemq/commands/BrokerError.h>
using namespace activemq;
+using namespace activemq::commands;
using namespace activemq::exceptions;
using namespace activemq::wireformat;
using namespace activemq::wireformat::stomp;
@@ -46,34 +47,19 @@
Pointer<Command> command;
if( commandId == StompCommandConstants::CONNECTED ){
-// command = new ConnectedCommand( frame );
- }
- else if( commandId == StompCommandConstants::ERROR_CMD ){
-// command = new ErrorCommand( frame );
- }
- else if( commandId == StompCommandConstants::RECEIPT ){
-// command = new ReceiptCommand( frame );
- }
- else if( commandId == StompCommandConstants::MESSAGE ){
-
-// if( !frame->getProperties().hasProperty(
-// CommandConstants::toString(
-// CommandConstants::HEADER_CONTENTLENGTH ) ) ) {
-// command = new TextMessageCommand( frame );
-// } else {
-// command = new BytesMessageCommand( frame );
-// }
+ return this->unmarshalConnected( frame );
+ } else if( commandId == StompCommandConstants::ERROR_CMD ){
+ return this->unmarshalError( frame );
+ } else if( commandId == StompCommandConstants::RECEIPT ){
+ return this->unmarshalReceipt( frame );
+ } else if( commandId == StompCommandConstants::MESSAGE ){
+ return this->unmarshalMessage( frame );
}
- // We either got a command or a response, but if we got neither
- // then complain, something went wrong.
- if( command == NULL ) {
- throw decaf::io::IOException(
- __FILE__, __LINE__,
- "Marshaler::marshal - No Command Created from frame");
- }
-
- return command;
+ // We didn't seem to know what it was we got, so throw an exception.
+ throw decaf::io::IOException(
+ __FILE__, __LINE__,
+ "Marshaler::marshal - No Command Created from frame");
}
AMQ_CATCH_RETHROW( decaf::io::IOException )
AMQ_CATCH_EXCEPTION_CONVERT( ActiveMQException, decaf::io::IOException )
@@ -87,6 +73,17 @@
try{
+ if( command->isMessage() ) {
+ return this->marshalMessage( command );
+ } else if( command->isRemoveInfo() ) {
+ return this->marshalRemoveInfo( command );
+ } else if( command->isShutdownInfo() ) {
+ return this->marshalShutdownInfo( command );
+ } else if( command->isMessageAck() ) {
+ return this->marshalAck( command );
+ }
+
+ // Ignoreing this command.
return Pointer<StompFrame>();
}
AMQ_CATCH_RETHROW( decaf::io::IOException )
@@ -94,3 +91,76 @@
AMQ_CATCH_EXCEPTION_CONVERT( Exception, decaf::io::IOException )
AMQ_CATCHALL_THROW( decaf::io::IOException )
}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<Command> Marshaler::unmarshalMessage( const Pointer<StompFrame>& frame ) {
+
+// if( !frame->getProperties().hasProperty(
+// CommandConstants::toString(
+// CommandConstants::HEADER_CONTENTLENGTH ) ) ) {
+// command = new TextMessageCommand( frame );
+// } else {
+// command = new BytesMessageCommand( frame );
+// }
+
+ return Pointer<Command>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<Command> Marshaler::unmarshalReceipt( const Pointer<StompFrame>& frame ){
+
+ return Pointer<Command>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<Command> Marshaler::unmarshalConnected( const Pointer<StompFrame>& frame ) {
+
+ return Pointer<Command>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<Command> Marshaler::unmarshalError( const Pointer<StompFrame>& frame ) {
+
+ Pointer<BrokerError> error( new BrokerError() );
+ error->setMessage(
+ frame->getProperties().getProperty(
+ StompCommandConstants::toString( StompCommandConstants::HEADER_MESSAGE ), "" ) );
+
+ return error;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<StompFrame> Marshaler::marshalMessage( const Pointer<Command>& command ) {
+
+ return Pointer<StompFrame>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<StompFrame> Marshaler::marshalAck( const Pointer<Command>& command ) {
+
+ return Pointer<StompFrame>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<StompFrame> Marshaler::marshalConnect( const Pointer<Command>& command ) {
+
+ return Pointer<StompFrame>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<StompFrame> Marshaler::marshalTransactionInfo( const Pointer<Command>& command ) {
+
+ return Pointer<StompFrame>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<StompFrame> Marshaler::marshalShutdownInfo( const Pointer<Command>& command ) {
+
+ return Pointer<StompFrame>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<StompFrame> Marshaler::marshalRemoveInfo( const Pointer<Command>& command ) {
+
+ return Pointer<StompFrame>();
+}
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/marshal/Marshaler.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/marshal/Marshaler.h?rev=768967&r1=768966&r2=768967&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/marshal/Marshaler.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/marshal/Marshaler.h Mon Apr 27 13:12:37 2009
@@ -59,6 +59,20 @@
virtual Pointer<StompFrame> marshal( const Pointer<Command>& command )
throw ( decaf::io::IOException );
+ private:
+
+ Pointer<Command> unmarshalMessage( const Pointer<StompFrame>& frame );
+ Pointer<Command> unmarshalReceipt( const Pointer<StompFrame>& frame );
+ Pointer<Command> unmarshalConnected( const Pointer<StompFrame>& frame );
+ Pointer<Command> unmarshalError( const Pointer<StompFrame>& frame );
+
+ Pointer<StompFrame> marshalMessage( const Pointer<Command>& command );
+ Pointer<StompFrame> marshalAck( const Pointer<Command>& command );
+ Pointer<StompFrame> marshalConnect( const Pointer<Command>& command );
+ Pointer<StompFrame> marshalTransactionInfo( const Pointer<Command>& command );
+ Pointer<StompFrame> marshalShutdownInfo( const Pointer<Command>& command );
+ Pointer<StompFrame> marshalRemoveInfo( const Pointer<Command>& command );
+
};
}}}}