diff options
Diffstat (limited to 'cpp/common/framing')
58 files changed, 0 insertions, 5141 deletions
diff --git a/cpp/common/framing/Makefile b/cpp/common/framing/Makefile deleted file mode 100644 index 1dfc286050..0000000000 --- a/cpp/common/framing/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (c) 2006 The Apache Software Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -.PHONY: all clean test - -all: - @$(MAKE) -C generated all - -test: - @$(MAKE) -C test all - -clean : - @$(MAKE) -C generated clean - @$(MAKE) -C test clean - diff --git a/cpp/common/framing/generated/Makefile b/cpp/common/framing/generated/Makefile deleted file mode 100644 index 12ec402760..0000000000 --- a/cpp/common/framing/generated/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -# -# Copyright (c) 2006 The Apache Software Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -QPID_HOME = ../../../.. -include ${QPID_HOME}/cpp/options.mk - -STYLESHEET_DIR = stylesheets -JAVA = java -XSLTP = ${TOOLS_DIR}/saxon8.jar - -SPEC = ${SPEC_DIR}/amqp-8.0.xml -STYLESHEETS = $(wildcard stylesheets/*.xsl) - -GENERATED_SOURCES=amqp_methods.cpp # Seed generation - -.PHONY: all clean - -all: ${GENERATED_SOURCES} - -clean : - -@rm -f *.cpp *.h - -${GENERATED_SOURCES}: ${STYLESHEETS} ${SPEC} - ${JAVA} -jar ${XSLTP} -o results.out ${SPEC} ${STYLESHEET_DIR}/code_gen.xsl - ${JAVA} -jar ${XSLTP} -o results.out ${SPEC} ${STYLESHEET_DIR}/framing.xsl - --include $(GENERATED_SOURCES:.cpp=.d) - diff --git a/cpp/common/framing/generated/stylesheets/amqp_client.xsl b/cpp/common/framing/generated/stylesheets/amqp_client.xsl deleted file mode 100644 index 13a912a926..0000000000 --- a/cpp/common/framing/generated/stylesheets/amqp_client.xsl +++ /dev/null @@ -1,155 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - - <xsl:import href="code_utils.xsl"/> - - <!-- - ================== - Template: client_h - ================== - Client header file. - --> - <xsl:template match="amqp" mode="client_h"> - <xsl:param name="domain-cpp-table"/> - <xsl:result-document href="AMQP_ServerProxy.h" format="textFormat"> - <xsl:value-of select="amqp:copyright()"/> - <xsl:text> -#ifndef _AMQP_ServerProxy_ -#define _AMQP_ServerProxy_ - -#include "AMQP_ServerOperations.h" -#include "FieldTable.h" -#include "OutputHandler.h" - -namespace qpid { -namespace framing { - -class AMQP_ServerProxy : virtual public AMQP_ServerOperations -{ - OutputHandler* out; - - public: - AMQP_ServerProxy(OutputHandler* _out); - virtual ~AMQP_ServerProxy() {}

</xsl:text> - <xsl:for-each select="class"> - <xsl:variable name="class" select="amqp:cpp-class-name(@name)"/> - <xsl:if test="doc"> - <xsl:text>
/**
===== Class: </xsl:text><xsl:value-of select="$class"/><xsl:text> =====
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>
*/
</xsl:text> - </xsl:if> - <xsl:text> class </xsl:text><xsl:value-of select="$class"/><xsl:text> : virtual public AMQP_ServerOperations::</xsl:text><xsl:value-of select="$class"/><xsl:text>Handler - { - OutputHandler* out; - - public: - /* Constructors and destructors */ - </xsl:text><xsl:value-of select="$class"/><xsl:text>(OutputHandler* _out); - virtual ~</xsl:text><xsl:value-of select="$class"/><xsl:text>(); - - /* Protocol methods */
</xsl:text> - <xsl:for-each select="method"> - <xsl:if test="chassis[@name='server']"> - <xsl:variable name="method" select="amqp:cpp-name(@name)"/> - <xsl:if test="doc"> - <xsl:text>
/**
----- Method: </xsl:text><xsl:value-of select="$class"/><xsl:text>.</xsl:text><xsl:value-of select="$method"/><xsl:text> -----
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>
*/
</xsl:text> - </xsl:if> - <xsl:for-each select="rule"> - <xsl:text>
/**
</xsl:text> - <xsl:text>Rule "</xsl:text><xsl:value-of select="@name"/><xsl:text>":
</xsl:text><xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>
*/
</xsl:text> - </xsl:for-each> - <xsl:text> virtual void </xsl:text><xsl:value-of select="$method"/> - <xsl:text>( u_int16_t channel</xsl:text><xsl:if test="field"><xsl:text>,
 </xsl:text> - <xsl:for-each select="field"> - <xsl:variable name="domain-cpp-type" select="amqp:cpp-lookup(@domain, $domain-cpp-table)"/> - <xsl:value-of select="concat($domain-cpp-type, amqp:cpp-arg-ref($domain-cpp-type), ' ', amqp:cpp-name(@name))"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:if> - <xsl:text> );
</xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text> }; /* class </xsl:text><xsl:value-of select="$class"/><xsl:text> */
</xsl:text> - </xsl:for-each> - <xsl:text>}; /* class AMQP_ServerProxy */ - -} /* namespace framing */ -} /* namespace qpid */ - -#endif
</xsl:text> - </xsl:result-document> - </xsl:template> - - - <!-- - ==================== - Template: client_cpp - ==================== - Client body. - --> - <xsl:template match="amqp" mode="client_cpp"> - <xsl:param name="domain-cpp-table"/> - <xsl:result-document href="AMQP_ServerProxy.cpp" format="textFormat"> - <xsl:value-of select="amqp:copyright()"/> - <xsl:text> - -#include "AMQP_ServerProxy.h" - -namespace qpid { -namespace framing { - -AMQP_ServerProxy::AMQP_ServerProxy(OutputHandler* _out) : - out(_out) -{ -}

</xsl:text> - <xsl:for-each select="class"> - <xsl:variable name="class" select="amqp:cpp-class-name(@name)"/> - <xsl:text>
/* ++++++++++ Class: </xsl:text><xsl:value-of select="$class"/><xsl:text> ++++++++++ */ - -AMQP_ServerProxy::</xsl:text><xsl:value-of select="$class"/><xsl:text>::</xsl:text><xsl:value-of select="$class"/><xsl:text>(OutputHandler* _out) : - out(_out) -{ -} - -AMQP_ServerProxy::</xsl:text><xsl:value-of select="$class"/><xsl:text>::~</xsl:text><xsl:value-of select="$class"/><xsl:text>() {}

</xsl:text> - <xsl:for-each select="method"> - <xsl:if test="chassis[@name='server']"> - <xsl:text>void AMQP_ServerProxy::</xsl:text><xsl:value-of select="$class"/><xsl:text>::</xsl:text> - <xsl:value-of select="amqp:cpp-name(@name)"/><xsl:text>( u_int16_t channel</xsl:text><xsl:if test="field"> - <xsl:text>,
 </xsl:text> - <xsl:for-each select="field"> - <xsl:variable name="domain-cpp-type" select="amqp:cpp-lookup(@domain, $domain-cpp-table)"/> - <xsl:value-of select="concat($domain-cpp-type, amqp:cpp-arg-ref($domain-cpp-type), ' ', amqp:cpp-name(@name))"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:if> - <xsl:text> ) -{ - out->send( new AMQFrame( channel, - new </xsl:text><xsl:value-of select="concat($class, amqp:field-name(@name), 'Body')"/><xsl:text>( </xsl:text> - <xsl:for-each select="field"> - <xsl:value-of select="amqp:cpp-name(@name)"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text> ) ) ); -}

</xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:for-each> - <xsl:text> - -} /* namespace framing */ -} /* namespace qpid */
</xsl:text> - </xsl:result-document> - </xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/amqp_client_handler_impl.xsl b/cpp/common/framing/generated/stylesheets/amqp_client_handler_impl.xsl deleted file mode 100644 index 0cc34e0ecf..0000000000 --- a/cpp/common/framing/generated/stylesheets/amqp_client_handler_impl.xsl +++ /dev/null @@ -1,187 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - - <xsl:import href="code_utils.xsl"/> - - <!-- - =============================== - Template: client_handler_impl_h - =============================== - Template to generate the AMQP_ClientHandlerImpl class header file. - --> - <xsl:template match="amqp" mode="client_handler_impl_h"> - <xsl:param name="domain-cpp-table"/> - <xsl:result-document href="AMQP_ClientHandlerImpl.h" format="textFormat"> - <xsl:value-of select="amqp:copyright()"/> - <xsl:text> -#ifndef _AMQP_ClientHandlerImpl_ -#define _AMQP_ClientHandlerImpl_ - -#include "AMQP_ClientOperations.h" -#include "FieldTable.h" - -namespace qpid { -namespace framing { - -class AMQP_ClientHandlerImpl : virtual public AMQP_ClientOperations -{
</xsl:text> - - <!-- List of pointers to each inner class instance --> - <xsl:for-each select="class"> - <xsl:variable name="class" select="concat(amqp:cpp-class-name(@name), 'Handler')"/> - <xsl:text> AMQP_ClientOperations::</xsl:text><xsl:value-of select="$class"/><xsl:text>* </xsl:text> - <xsl:value-of select="$class"/><xsl:text>Ptr;
</xsl:text> - </xsl:for-each> - <xsl:text> - public: - AMQP_ClientHandlerImpl(); - virtual ~AMQP_ClientHandlerImpl();

</xsl:text> - - <!-- List of functions to return pointer to each inner class instance --> - <xsl:for-each select="class"> - <xsl:variable name="class" select="concat(amqp:cpp-class-name(@name), 'Handler')"/> - <xsl:text> inline AMQP_ClientOperations::</xsl:text> - <xsl:value-of select="$class"/><xsl:text>* get</xsl:text><xsl:value-of select="$class"/> - <xsl:text>() { return </xsl:text><xsl:value-of select="$class"/><xsl:text>Ptr; }
</xsl:text> - </xsl:for-each> - <xsl:text>
</xsl:text> - - <!-- Inner classes --> - <xsl:for-each select="class"> - <xsl:variable name="class" select="concat(amqp:cpp-class-name(@name), 'Handler')"/> - - <!-- Inner class documentation & rules --> - <xsl:if test="doc"> - <xsl:text>
/**
</xsl:text> - <xsl:text>===== Class: </xsl:text><xsl:value-of select="$class"/><xsl:text>Impl =====
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:if> - - <!-- Inner class definition --> - <xsl:text> class </xsl:text><xsl:value-of select="$class"/> - <xsl:text>Impl : virtual public AMQP_ClientOperations::</xsl:text><xsl:value-of select="$class"/> - <xsl:text>
 { - public: - /* Constructors and destructors */ - </xsl:text><xsl:value-of select="$class"/><xsl:text>Impl(); - virtual ~</xsl:text><xsl:value-of select="$class"/><xsl:text>Impl(); - - /* Protocol methods */
</xsl:text> - - <!-- Inner class methods (only if the chassis is set to "client") --> - <xsl:for-each select="method"> - <xsl:if test="chassis[@name='client']"> - <xsl:variable name="method" select="amqp:cpp-name(@name)"/> - - <!-- Inner class method documentation & rules --> - <xsl:if test="doc"> - <xsl:text>
/**
</xsl:text> - <xsl:text>----- Method: </xsl:text><xsl:value-of select="$class"/> - <xsl:text>Impl.</xsl:text><xsl:value-of select="@name"/><xsl:text> -----
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:if> - <xsl:for-each select="rule"> - <xsl:text>
/**
</xsl:text> - <xsl:text>Rule "</xsl:text><xsl:value-of select="@name"/><xsl:text>":
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:for-each> - - <!-- Inner class method definition --> - <xsl:text>
 virtual void </xsl:text><xsl:value-of select="$method"/> - <xsl:text>( u_int16_t channel</xsl:text> - - <!-- Inner class method parameter definition --> - <xsl:if test="field"> - <xsl:text>,
 </xsl:text> - <xsl:for-each select="field"> - <xsl:variable name="domain-cpp-type" select="amqp:cpp-lookup(@domain, $domain-cpp-table)"/> - <xsl:value-of select="concat($domain-cpp-type, amqp:cpp-arg-ref($domain-cpp-type), ' ', amqp:cpp-name(@name))"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:if> - <xsl:text> );
</xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text>
 }; /* class </xsl:text><xsl:value-of select="$class"/><xsl:text>Impl */
</xsl:text> - </xsl:for-each> - <xsl:text>
}; /* AMQP_ClientHandlerImpl */ - -} /* namespace framing */ -} /* namespace qpid */ - -#endif
</xsl:text> - </xsl:result-document> - </xsl:template> - - <!-- - ================================= - Template: client_handler_impl_cpp - ================================= - Template to generate the AMQP_ClientHandlerImpl class stubs. - --> - <xsl:template match="amqp" mode="client_handler_impl_cpp"> - <xsl:param name="domain-cpp-table"/> - <xsl:result-document href="AMQP_ClientHandlerImpl.cpp" format="textFormat"> - <xsl:value-of select="amqp:copyright()"/> - <xsl:text> -#include "AMQP_ClientHandlerImpl.h" - -namespace qpid { -namespace framing { - -AMQP_ClientHandlerImpl::AMQP_ClientHandlerImpl() :
 </xsl:text> - <xsl:for-each select="class"> - <xsl:variable name="class" select="amqp:cpp-class-name(@name)"/> - <xsl:value-of select="$class"/> - <xsl:text>HandlerPtr( new </xsl:text><xsl:value-of select="$class"/><xsl:text>HandlerImpl() )</xsl:text> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text> -{ -} - -AMQP_ClientHandlerImpl::~AMQP_ClientHandlerImpl() -{
</xsl:text> - <xsl:for-each select="class"> - <xsl:text> delete </xsl:text><xsl:value-of select="amqp:cpp-class-name(@name)"/><xsl:text>HandlerPtr;
</xsl:text> - </xsl:for-each>} - - <xsl:for-each select="class"> - <xsl:variable name="class" select="amqp:cpp-class-name(@name)"/> - <xsl:text>
/* ===== Class: </xsl:text><xsl:value-of select="$class"/><xsl:text>HandlerImpl ===== */

</xsl:text> - <xsl:text>AMQP_ClientHandlerImpl::</xsl:text><xsl:value-of select="$class"/><xsl:text>HandlerImpl::</xsl:text> - <xsl:value-of select="$class"/><xsl:text>HandlerImpl()
{
}

</xsl:text> - <xsl:text>AMQP_ClientHandlerImpl::</xsl:text><xsl:value-of select="$class"/><xsl:text>HandlerImpl::~</xsl:text> - <xsl:value-of select="$class"/><xsl:text>HandlerImpl()
{
}

</xsl:text> - <xsl:for-each select="method"> - <xsl:if test="chassis[@name='client']"> - <xsl:text>void AMQP_ClientHandlerImpl::</xsl:text><xsl:value-of select="$class"/><xsl:text>HandlerImpl::</xsl:text> - <xsl:value-of select="amqp:cpp-name(@name)"/><xsl:text>( u_int16_t /*channel*/</xsl:text> - <xsl:if test="field"> - <xsl:text>,
 </xsl:text> - <xsl:for-each select="field"> - <xsl:variable name="domain-cpp-type" select="amqp:cpp-lookup(@domain, $domain-cpp-table)"/> - <xsl:value-of select="concat($domain-cpp-type, amqp:cpp-arg-ref($domain-cpp-type), ' /*', amqp:cpp-name(@name), '*/')"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:if><xsl:text> )
{
}

</xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:for-each> - <xsl:text> - -} /* namespace framing */ -} /* namespace qpid */

</xsl:text> - </xsl:result-document> - </xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/amqp_client_operations.xsl b/cpp/common/framing/generated/stylesheets/amqp_client_operations.xsl deleted file mode 100644 index 234b7080ba..0000000000 --- a/cpp/common/framing/generated/stylesheets/amqp_client_operations.xsl +++ /dev/null @@ -1,105 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - - <xsl:import href="code_utils.xsl"/> - - <!-- - ============================= - Template: client-operations-h - ============================= - Template to generate the AMQP_ClientHandler virtual class. This is the pure - virtual class from which the AMQP_Server and AMQP_ClientHandlerImpl classes - are derived. - --> - <xsl:template match="amqp" mode="client-operations-h"> - <xsl:param name="domain-cpp-table"/> - <xsl:result-document href="AMQP_ClientOperations.h" format="textFormat"> - <xsl:value-of select="amqp:copyright()"/> - <xsl:text> -#ifndef _AMQP_ClientOperations_ -#define _AMQP_ClientOperations_ - -#include "AMQP_Constants.h" -#include "FieldTable.h" - -namespace qpid { -namespace framing { - -class AMQP_ClientOperations -{ - public: - AMQP_ClientOperations() {} - virtual ~AMQP_ClientOperations() {} - inline u_int16_t getAmqpMajor() { return (u_int16_t)</xsl:text><xsl:value-of select="@major"/><xsl:text>; } - inline u_int16_t getAmqpMinor() { return (u_int16_t)</xsl:text><xsl:value-of select="@minor"/><xsl:text>; }

</xsl:text> - - <!-- Inner classes --> - <xsl:for-each select="class"> - <xsl:variable name="class" select="concat(amqp:cpp-class-name(@name), 'Handler')"/> - - <!-- Inner class documentation & rules --> - <xsl:if test="doc"> - <xsl:text>
/**
===== Class: </xsl:text><xsl:value-of select="$class"/><xsl:text> =====
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:if> - - <!-- Inner class definition --> - <xsl:text> class </xsl:text><xsl:value-of select="$class"/><xsl:text> - { - public: - /* Constructors and destructors */ - </xsl:text><xsl:value-of select="$class"/><xsl:text>() {} - virtual ~</xsl:text><xsl:value-of select="$class"/><xsl:text>() {} - - /* Protocol methods */
</xsl:text> - - <!-- Inner class methods (only if the chassis is set to "client") --> - <xsl:for-each select="method"> - <xsl:if test="chassis[@name='client']"> - <xsl:variable name="method" select="amqp:cpp-name(@name)"/> - - <!-- Inner class method documentation & rules --> - <xsl:if test="doc"> - <xsl:text>
/**
----- Method: </xsl:text><xsl:value-of select="$class"/><xsl:text>.</xsl:text> - <xsl:value-of select="@name"/><xsl:text> -----
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:if> - <xsl:for-each select="rule"> - <xsl:text>
/**
</xsl:text> - <xsl:text>Rule "</xsl:text><xsl:value-of select="@name"/><xsl:text>":
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:for-each> - - <!-- Inner class method definition --> - <xsl:text> virtual void </xsl:text><xsl:value-of select="$method"/> - <xsl:text>( u_int16_t channel</xsl:text> - - <!-- Inner class method parameter definition --> - <xsl:if test="field"> - <xsl:text>,
 </xsl:text> - <xsl:for-each select="field"> - <xsl:variable name="domain-cpp-type" select="amqp:cpp-lookup(@domain, $domain-cpp-table)"/> - <xsl:value-of select="concat($domain-cpp-type, amqp:cpp-arg-ref($domain-cpp-type), ' ', amqp:cpp-name(@name))"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:if> - <xsl:text> ) = 0;
</xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text>
 }; /* class </xsl:text><xsl:value-of select="$class"/><xsl:text> */
</xsl:text> - </xsl:for-each> - <xsl:text>
}; /* class AMQP_ClientOperations */ - -} /* namespace framing */ -} /* namespace qpid */ - -#endif
</xsl:text> - </xsl:result-document> - </xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/amqp_consts.xsl b/cpp/common/framing/generated/stylesheets/amqp_consts.xsl deleted file mode 100644 index c1c927f941..0000000000 --- a/cpp/common/framing/generated/stylesheets/amqp_consts.xsl +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - - <xsl:import href="code_utils.xsl"/> - <xsl:output method="text" indent="yes" name="textFormat"/> - - <xsl:template match="/"> - <xsl:apply-templates select="amqp" mode="domain-table"/> - <xsl:apply-templates select="amqp" mode="domain-consts"/> - </xsl:template> - - <!-- - ====================== - Template: domain-table - ====================== - Generates the domain name to C++ type lookup table - which is required for later generation. - Format: - <domains> - <domain doamin-name="dname1" cpp-type="type1"/> - <domain doamin-name="dname2" cpp-type="type2"/> - ... - </domains> - --> - <xsl:template match="amqp" mode="domain-table"> - <domains><xsl:text>
</xsl:text> - <xsl:for-each select="domain"> - <xsl:text> </xsl:text><domain> - <xsl:attribute name="domain-name"> - <xsl:value-of select="@name"/> - </xsl:attribute> - <xsl:attribute name="cpp-type"> - <xsl:value-of select="amqp:cpp-type(@type)"/> - </xsl:attribute> - </domain><xsl:text>
</xsl:text> - </xsl:for-each> - </domains> - </xsl:template> - - <!-- - ======================= - Template: domain-consts - ======================= - Generates a header file (AMQP_Constants.h) containing definitions of - all the <constant> declarations in the AMQP XML specification. - --> - <xsl:template match="amqp" mode="domain-consts"> - <xsl:result-document href="AMQP_Constants.h" format="textFormat"> - <xsl:value-of select="amqp:copyright()"/> - <xsl:text> -#ifndef _AMQP_Constants_ -#define _AMQP_Constants_ - -#include "amqp_types.h" - -namespace qpid { -namespace framing { - -/**** Constants ****/

</xsl:text> - <xsl:for-each select="constant"> - <xsl:if test="doc"> - <xsl:text>
/*
</xsl:text> - <xsl:value-of select="normalize-space(doc)"/> - <xsl:text>
*/
</xsl:text> - </xsl:if> - <xsl:text>const u_int16_t </xsl:text><xsl:value-of select="concat('AMQP_', upper-case(amqp:cpp-name(@name)), ' = ', @value)"/><xsl:text>;
</xsl:text> - </xsl:for-each> - <xsl:text> - -} /* namespace framing */ -} /* namespace qpid */ - -#endif
</xsl:text> - </xsl:result-document> - </xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/amqp_server.xsl b/cpp/common/framing/generated/stylesheets/amqp_server.xsl deleted file mode 100644 index 5ff8994888..0000000000 --- a/cpp/common/framing/generated/stylesheets/amqp_server.xsl +++ /dev/null @@ -1,187 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - - <xsl:import href="code_utils.xsl"/> - - <!-- - ================== - Template: server_h - ================== - Server header file. - --> - <xsl:template match="amqp" mode="server_h"> - <xsl:param name="domain-cpp-table"/> - <xsl:result-document href="AMQP_ClientProxy.h" format="textFormat"> - <xsl:value-of select="amqp:copyright()"/> -#ifndef _AMQP_ClientProxy_ -#define _AMQP_ClientProxy_ - -#include "AMQP_ClientOperations.h" -#include "FieldTable.h" -#include "OutputHandler.h" - -namespace qpid { -namespace framing { - -class AMQP_ClientProxy : virtual public AMQP_ClientOperations -{ - public: - - AMQP_ClientProxy(OutputHandler* _out); - virtual ~AMQP_ClientProxy() {}; - - <!-- inner classes --> - <xsl:for-each select="class"> - <xsl:variable name="class" select="amqp:cpp-class-name(@name)"/> - <xsl:if test="doc"> - <xsl:text>
/**
===== Class: </xsl:text><xsl:value-of select="$class"/><xsl:text> =====
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>
*/
</xsl:text> - </xsl:if> - <xsl:text> class </xsl:text><xsl:value-of select="$class"/><xsl:text> : virtual public AMQP_ClientOperations::</xsl:text><xsl:value-of select="$class"/><xsl:text>Handler - { - OutputHandler* out; - - public: - /* Constructors and destructors */ - </xsl:text><xsl:value-of select="$class"/><xsl:text>(OutputHandler* _out); - virtual ~</xsl:text><xsl:value-of select="$class"/><xsl:text>(); - - /* Protocol methods */
</xsl:text> - <xsl:for-each select="method"> - <xsl:if test="chassis[@name='client']"> - <xsl:variable name="method" select="amqp:cpp-name(@name)"/> - <xsl:if test="doc"> - <xsl:text>
/**
----- Method: </xsl:text><xsl:value-of select="$class"/><xsl:text>.</xsl:text><xsl:value-of select="$method"/><xsl:text> -----
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>
*/
</xsl:text> - </xsl:if> - <xsl:for-each select="rule"> - <xsl:text>
/**
</xsl:text> - <xsl:text>Rule "</xsl:text><xsl:value-of select="@name"/><xsl:text>":
</xsl:text><xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>
*/
</xsl:text> - </xsl:for-each> - <xsl:text> virtual void </xsl:text><xsl:value-of select="$method"/> - <xsl:text>( u_int16_t channel</xsl:text><xsl:if test="field"><xsl:text>,
 </xsl:text> - <xsl:for-each select="field"> - <xsl:variable name="domain-cpp-type" select="amqp:cpp-lookup(@domain, $domain-cpp-table)"/> - <xsl:value-of select="concat($domain-cpp-type, amqp:cpp-arg-ref($domain-cpp-type), ' ', amqp:cpp-name(@name))"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:if> - <xsl:text> );
</xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text> }; /* class </xsl:text><xsl:value-of select="$class"/> */ - </xsl:for-each> - - <!-- Accessors for each nested class instance --> - <xsl:for-each select="class"> - <xsl:value-of select="concat(amqp:cpp-class-name(@name), '& get', amqp:cpp-class-name(@name), '()')"/>; - </xsl:for-each> - - private: - - OutputHandler* out; - - <!-- An instance of each nested class --> - <xsl:for-each select="class"> - <xsl:value-of select="concat(amqp:cpp-class-name(@name), ' ', amqp:cpp-name(@name))"/>; - </xsl:for-each> - - - - }; /* class AMQP_ClientProxy */ - -} /* namespace framing */ -} /* namespace qpid */ - -#endif -</xsl:result-document> - </xsl:template> - - - <!-- - ==================== - Template: server_cpp - ==================== - Server body. - --> - <xsl:template match="amqp" mode="server_cpp"> - <xsl:param name="domain-cpp-table"/> - <xsl:result-document href="AMQP_ClientProxy.cpp" format="textFormat"> - <xsl:value-of select="amqp:copyright()"/> - -#include "AMQP_ClientProxy.h" - -namespace qpid { -namespace framing { - -AMQP_ClientProxy::AMQP_ClientProxy(OutputHandler* _out) : - out(_out), - <!-- Initialisation of each nested class instance --> - <xsl:for-each select="class"> - <xsl:value-of select="concat(amqp:cpp-name(@name), '(_out)')"/> - <xsl:if test="position()!=last()">, - </xsl:if> - </xsl:for-each> - -{ -} - - <xsl:for-each select="class"> - <xsl:variable name="class" select="amqp:cpp-class-name(@name)"/> - <xsl:text>
/* ++++++++++ Class: </xsl:text><xsl:value-of select="$class"/><xsl:text> ++++++++++ */ - -AMQP_ClientProxy::</xsl:text><xsl:value-of select="$class"/><xsl:text>::</xsl:text><xsl:value-of select="$class"/><xsl:text>(OutputHandler* _out) : - out(_out) -{ -} - -AMQP_ClientProxy::</xsl:text><xsl:value-of select="$class"/><xsl:text>::~</xsl:text><xsl:value-of select="$class"/><xsl:text>() {}

</xsl:text> - <xsl:for-each select="method"> - <xsl:if test="chassis[@name='client']"> - <xsl:text>void AMQP_ClientProxy::</xsl:text><xsl:value-of select="$class"/><xsl:text>::</xsl:text> - <xsl:value-of select="amqp:cpp-name(@name)"/><xsl:text>( u_int16_t channel</xsl:text><xsl:if test="field"> - <xsl:text>,
 </xsl:text> - <xsl:for-each select="field"> - <xsl:variable name="domain-cpp-type" select="amqp:cpp-lookup(@domain, $domain-cpp-table)"/> - <xsl:value-of select="concat($domain-cpp-type, amqp:cpp-arg-ref($domain-cpp-type), ' ', amqp:cpp-name(@name))"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:if> - <xsl:text> ) -{ - out->send( new AMQFrame( channel, - new </xsl:text><xsl:value-of select="concat($class, amqp:field-name(@name), 'Body')"/><xsl:text>( </xsl:text> - <xsl:for-each select="field"> - <xsl:value-of select="amqp:cpp-name(@name)"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text> ) ) ); -}

</xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:for-each> - - <!-- Accessors for each nested class instance --> - <xsl:for-each select="class"> - <xsl:value-of select="concat('AMQP_ClientProxy::', amqp:cpp-class-name(@name), '& AMQP_ClientProxy::get', amqp:cpp-class-name(@name), '()')"/>{ - <xsl:value-of select="concat(' return ', amqp:cpp-name(@name))"/>; - } - - </xsl:for-each> - - <xsl:text> -} /* namespace framing */ -} /* namespace qpid */
</xsl:text> - </xsl:result-document> - </xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/amqp_server_handler_impl.xsl b/cpp/common/framing/generated/stylesheets/amqp_server_handler_impl.xsl deleted file mode 100644 index 6450d3fd0c..0000000000 --- a/cpp/common/framing/generated/stylesheets/amqp_server_handler_impl.xsl +++ /dev/null @@ -1,187 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - - <xsl:import href="code_utils.xsl"/> - - <!-- - =============================== - Template: server_handler_impl_h - =============================== - Template to generate the AMQP_ServerHandlerImpl class header file. - --> - <xsl:template match="amqp" mode="server_handler_impl_h"> - <xsl:param name="domain-cpp-table"/> - <xsl:result-document href="AMQP_ServerHandlerImpl.h" format="textFormat"> - <xsl:value-of select="amqp:copyright()"/> - <xsl:text> -#ifndef _AMQP_ServerHandlerImpl_ -#define _AMQP_ServerHandlerImpl_ - -#include "AMQP_ServerOperations.h" -#include "FieldTable.h" - -namespace qpid { -namespace framing { - -class AMQP_ServerHandlerImpl : virtual public AMQP_ServerOperations -{
</xsl:text> - - <!-- List of pointers to each inner class instance --> - <xsl:for-each select="class"> - <xsl:variable name="class" select="concat(amqp:cpp-class-name(@name), 'Handler')"/> - <xsl:text> AMQP_ServerOperations::</xsl:text><xsl:value-of select="$class"/><xsl:text>* </xsl:text> - <xsl:value-of select="$class"/><xsl:text>Ptr;
</xsl:text> - </xsl:for-each> - <xsl:text> - public: - AMQP_ServerHandlerImpl(); - virtual ~AMQP_ServerHandlerImpl();

</xsl:text> - - <!-- List of functions to return pointer to each inner class instance --> - <xsl:for-each select="class"> - <xsl:variable name="class" select="concat(amqp:cpp-class-name(@name), 'Handler')"/> - <xsl:text> virtual inline AMQP_ServerOperations::</xsl:text> - <xsl:value-of select="$class"/><xsl:text>* get</xsl:text><xsl:value-of select="$class"/> - <xsl:text>() { return </xsl:text><xsl:value-of select="$class"/><xsl:text>Ptr; }
</xsl:text> - </xsl:for-each> - <xsl:text>
</xsl:text> - - <!-- Inner classes --> - <xsl:for-each select="class"> - <xsl:variable name="class" select="concat(amqp:cpp-class-name(@name), 'Handler')"/> - - <!-- Inner class documentation & rules --> - <xsl:if test="doc"> - <xsl:text>
/**
</xsl:text> - <xsl:text>===== Class: </xsl:text><xsl:value-of select="$class"/><xsl:text>Impl =====
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:if> - - <!-- Inner class definition --> - <xsl:text> class </xsl:text><xsl:value-of select="$class"/> - <xsl:text>Impl : virtual public AMQP_ServerOperations::</xsl:text><xsl:value-of select="$class"/> - <xsl:text>
 { - public: - /* Constructors and destructors */ - </xsl:text><xsl:value-of select="$class"/><xsl:text>Impl(); - virtual ~</xsl:text><xsl:value-of select="$class"/><xsl:text>Impl(); - - /* Protocol methods */
</xsl:text> - - <!-- Inner class methods (only if the chassis is set to "server") --> - <xsl:for-each select="method"> - <xsl:if test="chassis[@name='server']"> - <xsl:variable name="method" select="amqp:cpp-name(@name)"/> - - <!-- Inner class method documentation & rules --> - <xsl:if test="doc"> - <xsl:text>
/**
</xsl:text> - <xsl:text>----- Method: </xsl:text><xsl:value-of select="$class"/> - <xsl:text>Impl.</xsl:text><xsl:value-of select="@name"/><xsl:text> -----
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:if> - <xsl:for-each select="rule"> - <xsl:text>
/**
</xsl:text> - <xsl:text>Rule "</xsl:text><xsl:value-of select="@name"/><xsl:text>":
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:for-each> - - <!-- Inner class method definition --> - <xsl:text>
 virtual void </xsl:text><xsl:value-of select="$method"/> - <xsl:text>( u_int16_t channel</xsl:text> - - <!-- Inner class method parameter definition --> - <xsl:if test="field"> - <xsl:text>,
 </xsl:text> - <xsl:for-each select="field"> - <xsl:variable name="domain-cpp-type" select="amqp:cpp-lookup(@domain, $domain-cpp-table)"/> - <xsl:value-of select="concat($domain-cpp-type, amqp:cpp-arg-ref($domain-cpp-type), ' ', amqp:cpp-name(@name))"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:if> - <xsl:text> );
</xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text>
 }; /* class </xsl:text><xsl:value-of select="$class"/><xsl:text>Impl */
</xsl:text> - </xsl:for-each> - <xsl:text>
}; /* AMQP_ServerHandlerImpl */ - -} /* namespace framing */ -} /* namespace qpid */ - -#endif
</xsl:text> - </xsl:result-document> - </xsl:template> - - <!-- - ================================= - Template: server_handler_impl_cpp - ================================= - Template to generate the AMQP_ServerHandlerImpl class stubs. - --> - <xsl:template match="amqp" mode="server_handler_impl_cpp"> - <xsl:param name="domain-cpp-table"/> - <xsl:result-document href="AMQP_ServerHandlerImpl.cpp" format="textFormat"> - <xsl:value-of select="amqp:copyright()"/> - <xsl:text> -#include "AMQP_ServerHandlerImpl.h" - -namespace qpid { -namespace framing { - -AMQP_ServerHandlerImpl::AMQP_ServerHandlerImpl() :
 </xsl:text> - <xsl:for-each select="class"> - <xsl:variable name="class" select="amqp:cpp-class-name(@name)"/> - <xsl:value-of select="$class"/> - <xsl:text>HandlerPtr( new </xsl:text><xsl:value-of select="$class"/><xsl:text>HandlerImpl() )</xsl:text> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text> -{ -} - -AMQP_ServerHandlerImpl::~AMQP_ServerHandlerImpl() -{
</xsl:text> - <xsl:for-each select="class"> - <xsl:text> delete </xsl:text><xsl:value-of select="amqp:cpp-class-name(@name)"/><xsl:text>HandlerPtr;
</xsl:text> - </xsl:for-each>} - - <xsl:for-each select="class"> - <xsl:variable name="class" select="amqp:cpp-class-name(@name)"/> - <xsl:text>
/* ===== Class: </xsl:text><xsl:value-of select="$class"/><xsl:text>HandlerImpl ===== */

</xsl:text> - <xsl:text>AMQP_ServerHandlerImpl::</xsl:text><xsl:value-of select="$class"/><xsl:text>HandlerImpl::</xsl:text> - <xsl:value-of select="$class"/><xsl:text>HandlerImpl()
{
}

</xsl:text> - <xsl:text>AMQP_ServerHandlerImpl::</xsl:text><xsl:value-of select="$class"/><xsl:text>HandlerImpl::~</xsl:text> - <xsl:value-of select="$class"/><xsl:text>HandlerImpl()
{
}

</xsl:text> - <xsl:for-each select="method"> - <xsl:if test="chassis[@name='server']"> - <xsl:text>void AMQP_ServerHandlerImpl::</xsl:text><xsl:value-of select="$class"/><xsl:text>HandlerImpl::</xsl:text> - <xsl:value-of select="amqp:cpp-name(@name)"/><xsl:text>( u_int16_t /*channel*/</xsl:text> - <xsl:if test="field"> - <xsl:text>,
 </xsl:text> - <xsl:for-each select="field"> - <xsl:variable name="domain-cpp-type" select="amqp:cpp-lookup(@domain, $domain-cpp-table)"/> - <xsl:value-of select="concat($domain-cpp-type, amqp:cpp-arg-ref($domain-cpp-type), ' /*', amqp:cpp-name(@name), '*/')"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:if><xsl:text> )
{
}

</xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:for-each> - <xsl:text> - -} /* namespace framing */ -} /* namespace qpid */

</xsl:text> - </xsl:result-document> - </xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/amqp_server_operations.xsl b/cpp/common/framing/generated/stylesheets/amqp_server_operations.xsl deleted file mode 100644 index 4b97700f04..0000000000 --- a/cpp/common/framing/generated/stylesheets/amqp_server_operations.xsl +++ /dev/null @@ -1,113 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - - <xsl:import href="code_utils.xsl"/> - - <!-- - ============================= - Template: server-operations-h - ============================= - Template to generate the AMQP_ServerHandler virtual class. This is the pure - virtual class from which the AMQP_Client and AMQP_ServerHandlerImpl classes - are derived. - --> - <xsl:template match="amqp" mode="server-operations-h"> - <xsl:param name="domain-cpp-table"/> - <xsl:result-document href="AMQP_ServerOperations.h" format="textFormat"> - <xsl:value-of select="amqp:copyright()"/> - <xsl:text> -#ifndef _AMQP_ServerOperations_ -#define _AMQP_ServerOperations_ - -#include "AMQP_Constants.h" -#include "FieldTable.h" - -namespace qpid { -namespace framing { - -class AMQP_ServerOperations -{ - public: - AMQP_ServerOperations() {} - virtual ~AMQP_ServerOperations() {} - inline u_int16_t getAmqpMajor() { return (u_int16_t)</xsl:text><xsl:value-of select="@major"/><xsl:text>; } - inline u_int16_t getAmqpMinor() { return (u_int16_t)</xsl:text><xsl:value-of select="@minor"/><xsl:text>; }

</xsl:text> - - <!-- Inner classes --> - <xsl:for-each select="class"> - <xsl:variable name="class" select="concat(amqp:cpp-class-name(@name), 'Handler')"/> - - <!-- Inner class documentation & rules --> - <xsl:if test="doc"> - <xsl:text>
/**
===== Class: </xsl:text><xsl:value-of select="$class"/><xsl:text> =====
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:if> - - <!-- Inner class definition --> - <xsl:text> class </xsl:text><xsl:value-of select="$class"/><xsl:text> - { - public: - /* Constructors and destructors */ - </xsl:text><xsl:value-of select="$class"/><xsl:text>() {} - virtual ~</xsl:text><xsl:value-of select="$class"/><xsl:text>() {} - - /* Protocol methods */
</xsl:text> - - <!-- Inner class methods (only if the chassis is set to "server") --> - <xsl:for-each select="method"> - <xsl:if test="chassis[@name='server']"> - <xsl:variable name="method" select="amqp:cpp-name(@name)"/> - - <!-- Inner class method documentation & rules --> - <xsl:if test="doc"> - <xsl:text>
/**
----- Method: </xsl:text><xsl:value-of select="$class"/><xsl:text>.</xsl:text> - <xsl:value-of select="@name"/><xsl:text> -----
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:if> - <xsl:for-each select="rule"> - <xsl:text>
/**
</xsl:text> - <xsl:text>Rule "</xsl:text><xsl:value-of select="@name"/><xsl:text>":
</xsl:text> - <xsl:value-of select="amqp:process-docs(doc)"/> - <xsl:text>*/
</xsl:text> - </xsl:for-each> - - <!-- Inner class method definition --> - <xsl:text> virtual void </xsl:text><xsl:value-of select="$method"/> - <xsl:text>( u_int16_t channel</xsl:text> - - <!-- Inner class method parameter definition --> - <xsl:if test="field"> - <xsl:text>,
 </xsl:text> - <xsl:for-each select="field"> - <xsl:variable name="domain-cpp-type" select="amqp:cpp-lookup(@domain, $domain-cpp-table)"/> - <xsl:value-of select="concat($domain-cpp-type, amqp:cpp-arg-ref($domain-cpp-type), ' ', amqp:cpp-name(@name))"/> - <xsl:if test="position()!=last()"> - <xsl:text>,
 </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:if> - <xsl:text> ) = 0;
</xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text> }; /* class </xsl:text><xsl:value-of select="$class"/><xsl:text> */
</xsl:text> - </xsl:for-each> - - <xsl:for-each select="class"> - <xsl:variable name="class" select="concat(amqp:cpp-class-name(@name), 'Handler')"/> - <xsl:text> virtual AMQP_ServerOperations::</xsl:text> - <xsl:value-of select="$class"/><xsl:text>* get</xsl:text><xsl:value-of select="$class"/> - <xsl:text>() = 0;</xsl:text> - </xsl:for-each> - - <xsl:text>}; /* class AMQP_ServerOperations */ - -} /* namespace framing */ -} /* namespace qpid */ - -#endif
</xsl:text> - </xsl:result-document> - </xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/code_gen.xsl b/cpp/common/framing/generated/stylesheets/code_gen.xsl deleted file mode 100644 index 5e9f4ef8f0..0000000000 --- a/cpp/common/framing/generated/stylesheets/code_gen.xsl +++ /dev/null @@ -1,91 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - - <xsl:import href="convert_0.81.xsl"/> - <xsl:import href="amqp_consts.xsl"/> - <xsl:import href="amqp_server_operations.xsl"/> - <xsl:import href="amqp_client_operations.xsl"/> - <xsl:import href="amqp_server.xsl"/> - <xsl:import href="amqp_client.xsl"/> - <xsl:import href="amqp_server_handler_impl.xsl"/> - <xsl:import href="amqp_client_handler_impl.xsl"/> - - <xsl:output method="text" indent="yes" name="textFormat"/> - <xsl:key name="domain-lookup" match="domains/domain" use="@domain-name"/> - - <xsl:template match="/"> - - <!-- 0. Convert to 0.81 format --> - <!-- - NOTE: The XML specification change from 0.8 to 0.81 is primarily a change to - the XML itself, not the protocol it represents. However, at the time of this - commit, the 0.81 specification has not been approved by the AMQP working group, - so this converter from the 0.8 format to the 0.81 format has been included as - a temporary measure. When the 0.81 format becomes official, then this conversion - should be removed, and all of the templates below will revert to select=".". - - TODO: Remove this conversion when the new 0.81 spec is checked in. - --> - <xsl:variable name="format-v081"> - <xsl:apply-templates mode="do-amqp" select="amqp"/> - </xsl:variable> - <!-- == Uncomment this to view output for debugging == - <xsl:result-document href="convert_081.out"> - <xsl:copy-of select="$format-v081"/> - </xsl:result-document> - --> - - <!-- 1. Domain to C++ type lookup table --> - <xsl:variable name="domain-cpp-table"> - <xsl:apply-templates mode="domain-table" select="$format-v081"/> - </xsl:variable> - <!-- == Uncomment this to view output for debugging == - <xsl:result-document href="domain_cpp_table.out"> - <xsl:copy-of select="$domain-cpp-table"/> - </xsl:result-document> - --> - - <!-- 2. Constant declarations (AMQP_Constants.h) --> - <xsl:apply-templates mode="domain-consts" select="$format-v081"/> - - <!-- 3. Client and server handler pure virtual classes --> - <xsl:apply-templates mode="server-operations-h" select="$format-v081"> - <xsl:with-param name="domain-cpp-table" select="$domain-cpp-table"/> - </xsl:apply-templates> - <xsl:apply-templates mode="client-operations-h" select="$format-v081"> - <xsl:with-param name="domain-cpp-table" select="$domain-cpp-table"/> - </xsl:apply-templates> - - <!-- 4. Client and server output classes --> - <xsl:apply-templates mode="server_h" select="$format-v081"> - <xsl:with-param name="domain-cpp-table" select="$domain-cpp-table"/> - </xsl:apply-templates> - <xsl:apply-templates mode="client_h" select="$format-v081"> - <xsl:with-param name="domain-cpp-table" select="$domain-cpp-table"/> - </xsl:apply-templates> - <xsl:apply-templates mode="server_cpp" select="$format-v081"> - <xsl:with-param name="domain-cpp-table" select="$domain-cpp-table"/> - </xsl:apply-templates> - <xsl:apply-templates mode="client_cpp" select="$format-v081"> - <xsl:with-param name="domain-cpp-table" select="$domain-cpp-table"/> - </xsl:apply-templates> - - <!-- 5. Client and server handler stub classes --> - <xsl:apply-templates mode="server_handler_impl_h" select="$format-v081"> - <xsl:with-param name="domain-cpp-table" select="$domain-cpp-table"/> - </xsl:apply-templates> - <xsl:apply-templates mode="client_handler_impl_h" select="$format-v081"> - <xsl:with-param name="domain-cpp-table" select="$domain-cpp-table"/> - </xsl:apply-templates> - <!-- TODO: Find a way to only run the .cpp stub generator when required, as - running this will overwrite any stub code in existance! --> - <xsl:apply-templates mode="server_handler_impl_cpp" select="$format-v081"> - <xsl:with-param name="domain-cpp-table" select="$domain-cpp-table"/> - </xsl:apply-templates> - <xsl:apply-templates mode="client_handler_impl_cpp" select="$format-v081"> - <xsl:with-param name="domain-cpp-table" select="$domain-cpp-table"/> - </xsl:apply-templates> - - </xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/code_utils.xsl b/cpp/common/framing/generated/stylesheets/code_utils.xsl deleted file mode 100644 index f4a0f6e5ce..0000000000 --- a/cpp/common/framing/generated/stylesheets/code_utils.xsl +++ /dev/null @@ -1,210 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - - <!-- - ======================== - Function: amqp:copyright - ======================== - Print out a standard Apache copyright notice and generated code warning. - --> - <xsl:function name="amqp:copyright">/** -* -* Copyright (c) 2006 The Apache Software Foundation -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -*/ - -/** -* -* NOTE: This file is generated directly from the AMQP XML specification. -* === DO NOT EDIT === -* -*/
</xsl:function> - - <!-- - ========================== - Function: amqp:upper-first - ========================== - Convert the first character of the parameter to upper-case - --> - <xsl:function name="amqp:upper-first"> - <xsl:param name="in"/> - <xsl:value-of select="concat(upper-case(substring($in, 1, 1)), substring($in, 2))"/> - </xsl:function> - - <!-- - ======================== - Function: amqp:cpp-name-1 - ======================== - Convert parameter "name" to a valid C++ identifier, finding spaces and '-'s - in the parameter name and replacing them with '_' chars. Also check for C++ - reserved words and prefix them with '_'. No capitalization is performed. - --> - <xsl:function name="amqp:cpp-name-1"> - <xsl:param name="name"/> - <xsl:choose> - <!-- C++ reserved words. --> - <xsl:when test="$name='delete'">delete_</xsl:when> - <xsl:when test="$name='return'">return_</xsl:when> - <!-- Change unsuitable C++ identifier characters. --> - <xsl:otherwise><xsl:value-of select="translate($name, ' -', '__')"/></xsl:otherwise> - </xsl:choose> - </xsl:function> - - <!-- - ======================= - Function: amqp:cpp-name - ======================= - Convert parameter "name" to a valid, camel cased C++ name. - --> - <xsl:function name="amqp:cpp-name"> - <xsl:param name="name"/> - <xsl:value-of select="amqp:cpp-name-1(amqp:camel-case($name))"/> - </xsl:function> - - <!-- - ============================= - Function: amqp:cpp-class-name - ============================= - Convert parameter "name" to a valid C++ identifier, finding spaces and '-'s - in the parameter name and replacing them with '_' chars. Also check for C++ - reserved words and prefix them with '_'. First letter only is capitalized. - --> - <xsl:function name="amqp:cpp-class-name"> - <xsl:param name="name"/> - <xsl:value-of select="amqp:upper-first(amqp:cpp-name($name))"/> - </xsl:function> - - <!-- - ========================= - Function: amqp:camel-case - ========================= - *** NOTE: Only works with *one* of either '-' or ' '. If a name contains 2 or - *** more of these characters, then this will break. - Convert parameter "name" to camel case, where words are separated by ' ' or '-' - --> - <xsl:function name="amqp:camel-case"> - <xsl:param name="name"/> - <xsl:choose> - <xsl:when test="contains($name, ' ')"> - <xsl:value-of select="concat(substring-before($name, ' '), amqp:upper-first(substring-after($name, ' ')))"/> - </xsl:when> - <xsl:when test="contains($name, '-')"> - <xsl:value-of select="concat(substring-before($name, '-'), amqp:upper-first(substring-after($name, '-')))"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$name"/> - </xsl:otherwise> - </xsl:choose> - </xsl:function> - - <!-- - ========================= - Function: amqp:field-name - ========================= - Get a valid field name, processing spaces and '-'s where appropriate - --> - <xsl:function name="amqp:field-name"> - <xsl:param name="name"/> - <xsl:value-of select="amqp:upper-first(amqp:camel-case($name))"/> - </xsl:function> - - <!-- - ======================= - Function: amqp:cpp-type - ======================= - Map the set of simple AMQP types to C++ types. Also map the AMQP table - domain to appropriate C++ class. - --> - <xsl:function name="amqp:cpp-type"> - <xsl:param name="type"/> - <xsl:choose> - <!-- Simple AMQP domain types --> - <xsl:when test="$type='octet'">u_int8_t</xsl:when> - <xsl:when test="$type='short'">u_int16_t</xsl:when> - <xsl:when test="$type='shortstr'">string</xsl:when> - <xsl:when test="$type='longstr'">string</xsl:when> - <xsl:when test="$type='bit'">bool</xsl:when> - <xsl:when test="$type='long'">u_int32_t</xsl:when> - <xsl:when test="$type='longlong'">u_int64_t</xsl:when> - <xsl:when test="$type='timestamp'">u_int64_t</xsl:when> - <!-- AMQP structures --> - <xsl:when test="$type='table'">FieldTable</xsl:when> - <!-- Fallback: unknown type --> - <xsl:otherwise>unknown_type /* WARNING: undefined type */</xsl:otherwise> - </xsl:choose> - </xsl:function> - - <!-- - ========================== - Function: amqp:cpp-arg-ref - ========================== - Determines whether a C++ reference is required for an argument. - --> - <xsl:function name="amqp:cpp-arg-ref"> - <xsl:param name="type"/> - <xsl:choose> - <xsl:when test="$type='string'">&</xsl:when> - <xsl:when test="$type='FieldTable'">&</xsl:when> - </xsl:choose> - </xsl:function> - - <!-- - ========================= - Function: amqp:cpp-lookup - ========================= - Template and function for looking up the cpp type from the domain name. - The template runs on a lookup table XML generated by the "domain_table" - template in amqp_domaintypes.xsl. - --> - <xsl:template match="/" mode="cpp-lookup"> - <xsl:param name="domain-name"/> - <xsl:for-each select="key('domain-lookup', $domain-name)"> - <xsl:value-of select="@cpp-type"/> - </xsl:for-each> - </xsl:template> - - <xsl:function name="amqp:cpp-lookup"> - <xsl:param name="domain-name"/> - <xsl:param name="domain-cpp-table"/> - <xsl:apply-templates mode="cpp-lookup" select="$domain-cpp-table"> - <xsl:with-param name="domain-name" select="$domain-name"/> - </xsl:apply-templates> - </xsl:function> - - <!-- - ========================= - Function: amqp:cpp-lookup - ========================= - Template and function for processing the possibly multiple <doc> elements - within a node. - --> - <xsl:template match="doc" mode="process-doc-elts"> - <xsl:for-each select="."> - <xsl:choose> - <xsl:when test=".[@type='grammar']"><xsl:value-of select="."/></xsl:when> - <xsl:when test=".[@type='scenario']"><xsl:value-of select="concat('
Test Scenario: ', normalize-space(.))"/></xsl:when> - <xsl:otherwise><xsl:value-of select="normalize-space(.)"/></xsl:otherwise> - </xsl:choose> - </xsl:for-each> - </xsl:template> - - <xsl:function name="amqp:process-docs"> - <xsl:param name="doc-elts"/> - <xsl:apply-templates mode="process-doc-elts" select="$doc-elts"/> - </xsl:function> - - -</xsl:stylesheet> - diff --git a/cpp/common/framing/generated/stylesheets/convert_0.81.xsl b/cpp/common/framing/generated/stylesheets/convert_0.81.xsl deleted file mode 100644 index 9924f165da..0000000000 --- a/cpp/common/framing/generated/stylesheets/convert_0.81.xsl +++ /dev/null @@ -1,407 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - -<xsl:template match="/"> - <xsl:apply-templates select="/" mode="do-amqp"/> -</xsl:template> - -<!-- ====== - <amqp> - ====== --> -<xsl:template match="amqp" mode="do-amqp"> - -<!-- <xsl:text>
</xsl:text> --> -<xsl:element name= "amqp"> -<xsl:attribute name="major"><xsl:value-of select="@major"/></xsl:attribute> -<xsl:attribute name="minor"><xsl:value-of select="@minor"/></xsl:attribute> -<xsl:attribute name="port"><xsl:value-of select="@port"/></xsl:attribute> -<xsl:attribute name="comment"><xsl:value-of select="@comment"/></xsl:attribute> -<xsl:text>
</xsl:text> - -<!-- constant elements --> -<xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:comment> - ==================== - Constants - ==================== - </xsl:comment><xsl:text>
</xsl:text> -<xsl:text>
</xsl:text> -<xsl:apply-templates select="constant" mode="do-constant"> -<xsl:with-param name="indent" select="' '"/> -</xsl:apply-templates> - -<!-- domain elements --> -<xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:comment> - ==================== - Domains - ==================== - </xsl:comment><xsl:text>
</xsl:text> -<xsl:text>
</xsl:text> -<xsl:apply-templates select="domain" mode="do-domain"> -<xsl:with-param name="indent" select="' '"/> -</xsl:apply-templates> - -<!-- required elementary domain definition elements added into v0.81 --> -<xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:comment> Elementary domains </xsl:comment><xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:element name="domain"> - <xsl:attribute name="name">bit</xsl:attribute> - <xsl:attribute name="type">bit</xsl:attribute> - <xsl:attribute name="label">single bit</xsl:attribute> -</xsl:element><xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:element name="domain"> - <xsl:attribute name="name">octet</xsl:attribute> - <xsl:attribute name="type">octet</xsl:attribute> - <xsl:attribute name="label">single octet</xsl:attribute> -</xsl:element><xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:element name="domain"> - <xsl:attribute name="name">short</xsl:attribute> - <xsl:attribute name="type">short</xsl:attribute> - <xsl:attribute name="label">16-bit integer</xsl:attribute> -</xsl:element><xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:element name="domain"> - <xsl:attribute name="name">long</xsl:attribute> - <xsl:attribute name="type">long</xsl:attribute> - <xsl:attribute name="label">32-bit integer</xsl:attribute> -</xsl:element><xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:element name="domain"> - <xsl:attribute name="name">longlong</xsl:attribute> - <xsl:attribute name="type">longlong</xsl:attribute> - <xsl:attribute name="label">64-bit integer</xsl:attribute> -</xsl:element><xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:element name="domain"> - <xsl:attribute name="name">shortstr</xsl:attribute> - <xsl:attribute name="type">shortstr</xsl:attribute> - <xsl:attribute name="label">short string</xsl:attribute> -</xsl:element><xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:element name="domain"> - <xsl:attribute name="name">longstr</xsl:attribute> - <xsl:attribute name="type">longstr</xsl:attribute> - <xsl:attribute name="label">long string</xsl:attribute> -</xsl:element><xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:element name="domain"> - <xsl:attribute name="name">timestamp</xsl:attribute> - <xsl:attribute name="type">timestamp</xsl:attribute> - <xsl:attribute name="label">64-bit timestamp</xsl:attribute> -</xsl:element><xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:element name="domain"> - <xsl:attribute name="name">table</xsl:attribute> - <xsl:attribute name="type">table</xsl:attribute> - <xsl:attribute name="label">field table</xsl:attribute> -</xsl:element><xsl:text>
</xsl:text> - -<!-- class elements --> -<xsl:text>
</xsl:text> -<xsl:text> </xsl:text><xsl:comment> - ==================== - Classes - ==================== - </xsl:comment><xsl:text>
</xsl:text> -<xsl:apply-templates select="class" mode="do-class"> -<xsl:with-param name="indent" select="' '"/> -</xsl:apply-templates> - -</xsl:element><!-- amqp --> -<!-- <xsl:text>
</xsl:text> --> -</xsl:template> - -<!-- ========== - <constant> - ========== --> -<xsl:template match="constant" mode="do-constant"> -<xsl:param name="indent"/> -<xsl:variable name="constant" select="translate(@name, ' ', '-')"/> - -<xsl:value-of select="$indent"/><xsl:element name="constant"> -<xsl:attribute name="name"><xsl:value-of select="$constant"/></xsl:attribute> -<xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute> -<xsl:if test="@class"> -<xsl:attribute name="class"><xsl:value-of select="translate(@class, ' ', '-')"/></xsl:attribute> -</xsl:if> - -<!-- If there is content, place in child <doc> element --> -<xsl:if test="string-length(.) > 0"> -<xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/><xsl:text> </xsl:text><xsl:element name="doc"><xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/><xsl:text> </xsl:text><xsl:value-of select="normalize-space(.)"/><xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/><xsl:text> </xsl:text></xsl:element><xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/> -</xsl:if> - -</xsl:element><xsl:text>
</xsl:text> - -</xsl:template> - -<!-- ======== - <domain> - ======== --> -<xsl:template match="domain" mode="do-domain"> -<xsl:param name="indent"/> -<xsl:variable name="domain" select="translate(@name, ' ', '-')"/> - -<xsl:value-of select="$indent"/><xsl:element name="domain"> -<xsl:attribute name="name"><xsl:value-of select="$domain"/></xsl:attribute> -<xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute> -<xsl:if test="doc|assert|rule"><xsl:text>
</xsl:text></xsl:if> - -<!-- doc elements --> -<xsl:apply-templates select="doc" mode="do-doc"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -</xsl:apply-templates> - -<!-- assert elements --> -<xsl:apply-templates select="assert" mode="do-assert"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -</xsl:apply-templates> - -<!-- rule elements --> -<xsl:apply-templates select="rule" mode="do-rule"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -<xsl:with-param name="label" select="$domain"/> -</xsl:apply-templates> - -<xsl:if test="doc|assert|rule"><xsl:value-of select="$indent"/></xsl:if></xsl:element><xsl:text>
</xsl:text> - -</xsl:template> - -<!-- ======== - <class> - ======== --> - -<xsl:template match="class" mode="do-class"> -<xsl:param name="indent"/> -<xsl:variable name="class" select="translate(@name, ' ', '-')"/> - -<!-- Ignore class test - removed from 0.81 --> -<xsl:if test="not($class = 'test')"> -<xsl:text>
</xsl:text><xsl:value-of select="$indent"/><xsl:comment><xsl:value-of select="concat(' == Class: ', $class, ' == ')"/></xsl:comment><xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/><xsl:element name="class"> -<xsl:attribute name="name"><xsl:value-of select="$class"/></xsl:attribute> -<xsl:attribute name="handler"><xsl:value-of select="@handler"/></xsl:attribute> -<xsl:attribute name="index"><xsl:value-of select="@index"/></xsl:attribute> -<xsl:if test="doc|chassis|rule|field|method"><xsl:text>
</xsl:text></xsl:if> - -<!-- doc elements --> -<xsl:apply-templates select="doc" mode="do-doc"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -<xsl:with-param name="label" select="$class"/> -</xsl:apply-templates> - -<!-- chassis elements --> -<xsl:apply-templates select="chassis" mode="do-chassis"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -</xsl:apply-templates> - -<!-- rule elements --> -<xsl:apply-templates select="rule" mode="do-rule"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -<xsl:with-param name="label" select="$class"/> -</xsl:apply-templates> - -<!-- field elements --> -<xsl:apply-templates select="field" mode="do-field"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -<xsl:with-param name="label" select="$class"/> -</xsl:apply-templates> - -<!-- method elements --> -<xsl:apply-templates select="method" mode="do-method"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -<xsl:with-param name="label" select="$class"/> -</xsl:apply-templates> - -<xsl:if test="doc|chassis|rule|field|method"><xsl:value-of select="$indent"/></xsl:if></xsl:element><xsl:text>
</xsl:text> -</xsl:if> -</xsl:template> - -<!-- ======== - <method> - ======== --> - -<xsl:template match="method" mode="do-method"> -<xsl:param name="indent"/> -<xsl:param name="label"/> -<xsl:variable name="method" select="translate(@name, ' ', '-')"/> - -<xsl:text>
</xsl:text><xsl:value-of select="$indent"/><xsl:comment><xsl:value-of select="concat(' == Method: ', $label, '.', $method, ' == ')"/></xsl:comment><xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/><xsl:element name="method"> -<xsl:attribute name="name"><xsl:value-of select="$method"/></xsl:attribute> -<xsl:if test="@synchronous"><xsl:attribute name="synchronous"><xsl:value-of select="@synchronous"/></xsl:attribute></xsl:if> -<xsl:attribute name="index"><xsl:value-of select="@index"/></xsl:attribute> -<xsl:if test="doc|chassis|response|rule|field"><xsl:text>
</xsl:text></xsl:if> - -<!-- doc elements --> -<xsl:apply-templates select="doc" mode="do-doc"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -<xsl:with-param name="label" select="concat($label, '.', $method)"/> -</xsl:apply-templates> - -<!-- chassis and response elements --> -<xsl:apply-templates select="chassis" mode="do-chassis"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -</xsl:apply-templates> -<xsl:apply-templates select="response" mode="do-response"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -</xsl:apply-templates> - -<!-- rule elements --> -<xsl:apply-templates select="rule" mode="do-rule"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -<xsl:with-param name="label" select="concat($label, '.', $method)"/> -</xsl:apply-templates> - -<!-- field elements --> -<xsl:apply-templates select="field" mode="do-field"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -<xsl:with-param name="label" select="concat($label, '.', $method)"/> -</xsl:apply-templates> - -<xsl:if test="doc|chassis|response|rule|field"><xsl:value-of select="$indent"/></xsl:if></xsl:element><xsl:text>
</xsl:text> - -</xsl:template> - -<!-- ======== - <field> - ======== --> - -<xsl:template match="field" mode="do-field"> -<xsl:param name="indent"/> -<xsl:param name="label"/> -<xsl:variable name="field" select="translate(@name, ' ', '-')"/> - -<xsl:value-of select="$indent"/><xsl:element name="field"> -<xsl:attribute name="name"><xsl:value-of select="$field"/></xsl:attribute> -<xsl:if test="@type"> -<xsl:attribute name="domain"><xsl:value-of select="translate(@type, ' ', '-')"/></xsl:attribute> -</xsl:if> -<xsl:if test="@domain"> -<xsl:attribute name="domain"><xsl:value-of select="translate(@domain, ' ', '-')"/></xsl:attribute> -</xsl:if> -<xsl:if test="doc|rule|assert"><xsl:text>
</xsl:text></xsl:if> - -<!-- doc elements --> -<xsl:apply-templates select="doc" mode="do-doc"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -<xsl:with-param name="label" select="concat($label, '.', $field)"/> -</xsl:apply-templates> - -<!-- rule elements --> -<xsl:apply-templates select="rule" mode="do-rule"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -<xsl:with-param name="label" select="concat($label, '.', $field)"/> -</xsl:apply-templates> - -<!-- assert elements --> -<xsl:apply-templates select="assert" mode="do-assert"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -</xsl:apply-templates> - -<xsl:if test="doc|rule|assert"><xsl:value-of select="$indent"/></xsl:if></xsl:element><xsl:text>
</xsl:text> - -</xsl:template> - -<!-- ======== - <assert> - ======== --> -<xsl:template match="assert" mode="do-assert"> -<xsl:param name="indent"/> - -<xsl:value-of select="$indent"/><xsl:element name="assert"> -<xsl:attribute name="check"><xsl:value-of select="@check"/></xsl:attribute> -<xsl:if test="@value"><xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute></xsl:if> -<xsl:if test="@rule"><xsl:attribute name="rule"><xsl:value-of select="@rule"/></xsl:attribute></xsl:if> - -<xsl:apply-templates select="doc" mode="do-doc"> -<xsl:with-param name="indent" select="concat($indent, ' ')"/> -</xsl:apply-templates> - -</xsl:element><xsl:text>
</xsl:text> - -</xsl:template> - -<!-- ======== - <rule> - ======== --> -<xsl:template match="rule" mode="do-rule"> -<xsl:param name="indent"/> -<xsl:param name="label"/> - -<xsl:value-of select="$indent"/><xsl:element name="rule"> -<xsl:attribute name="name">rule_<xsl:value-of select="$label"/>_<xsl:number format="01"/></xsl:attribute> - -<!-- If there is content, place in child <doc> element --> - -<xsl:if test="string-length(.) > 0"> -<xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/><xsl:text> </xsl:text><xsl:element name="doc"><xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/><xsl:text> </xsl:text><xsl:value-of select="normalize-space(.)"/><xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/><xsl:text> </xsl:text></xsl:element><xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/> -</xsl:if> - -</xsl:element><xsl:text>
</xsl:text> - -</xsl:template> - -<!-- ========= - <chassis> - ========= --> -<xsl:template match="chassis" mode="do-chassis"> -<xsl:param name="indent"/> - -<xsl:value-of select="$indent"/><xsl:element name="chassis"> -<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute> -<xsl:attribute name="implement"><xsl:value-of select="@implement"/></xsl:attribute> -</xsl:element><xsl:text>
</xsl:text> - -</xsl:template> - -<!-- ========== - <response> - ========== --> -<xsl:template match="response" mode="do-response"> -<xsl:param name="indent"/> - -<xsl:value-of select="$indent"/><xsl:element name="response"> -<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute> -</xsl:element><xsl:text>
</xsl:text> - -</xsl:template> - -<!-- ===== - <doc> - ===== --> -<xsl:template match="doc" mode="do-doc"> -<xsl:param name="indent"/> -<xsl:param name="label"/> - -<!-- Handle cases of <doc name="rule>...</doc>: turn them into <rule><doc>...</doc></rule> --> -<xsl:if test="@name = 'rule'"> -<xsl:value-of select="$indent"/><xsl:element name="rule"> -<xsl:if test="@test"><xsl:attribute name="name"><xsl:value-of select="@test"/></xsl:attribute></xsl:if> -<xsl:if test="not(@test)"><xsl:attribute name="name">doc_rule_<xsl:value-of select="$label"/>_<xsl:number format="01"/></xsl:attribute></xsl:if> -<xsl:text>
</xsl:text> -<xsl:value-of select="concat($indent, ' ')"/><xsl:element name="doc"><xsl:text>
</xsl:text> -<xsl:value-of select="concat($indent, ' ')"/><xsl:text> </xsl:text><xsl:value-of select="normalize-space(.)"/><xsl:text>
</xsl:text> -<xsl:value-of select="concat($indent, ' ')"/></xsl:element><xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/></xsl:element><xsl:text>
</xsl:text> -</xsl:if> - -<!-- Normal <doc>...</doc> elements --> -<xsl:if test="not(@name = 'rule')"> -<xsl:value-of select="$indent"/><xsl:element name="doc"> -<xsl:if test="@name = 'grammar'"> -<xsl:attribute name="type">grammar</xsl:attribute> -<xsl:value-of select="$indent"/><xsl:text> </xsl:text><xsl:value-of select="."/> -</xsl:if> -<xsl:if test="not(@name = 'grammar')"> -<xsl:text>
</xsl:text> -<xsl:value-of select="$indent"/><xsl:text> </xsl:text><xsl:value-of select="normalize-space(.)"/><xsl:text>
</xsl:text> -</xsl:if> -<xsl:value-of select="$indent"/></xsl:element><xsl:text>
</xsl:text> -</xsl:if> - -</xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/cpp.xsl b/cpp/common/framing/generated/stylesheets/cpp.xsl deleted file mode 100644 index f9e5ba4141..0000000000 --- a/cpp/common/framing/generated/stylesheets/cpp.xsl +++ /dev/null @@ -1,315 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - -<!-- this class contains the templates for generating C++ source code for a given framing model --> - -<xsl:import href="utils.xsl"/> -<xsl:output method="text" indent="yes" name="textFormat"/> - -<xsl:template match="/"> - <xsl:apply-templates mode="generate-multi" select="frames"/> - <xsl:apply-templates mode="method-list-header" select="frames"/> - <xsl:apply-templates mode="method-list-source" select="frames"/> - <xsl:apply-templates mode="method-interface" select="frames"/> -</xsl:template> - -<!-- processes all frames outputting the classes in a single stream --> -<xsl:template match="frames" mode="generate-single"> - <xsl:result-document href="amqp_methods.h" format="textFormat"> -#include "amqp_framing.h" - <xsl:for-each select="frame"> - <xsl:call-template name="generate-class"> - <xsl:with-param name="f" select="."/> - </xsl:call-template> - </xsl:for-each> - </xsl:result-document> -</xsl:template> - -<!-- generates seperate file for each class/frame --> -<xsl:template match="frame" mode="generate-multi"> - <xsl:variable name="uri" select="concat(@name, '.h')"/> - <xsl:result-document href="{$uri}" format="textFormat"> -#include "amqp_types.h" -#include "AMQP_ServerOperations.h" -#include "AMQMethodBody.h" -#include "Buffer.h" -#include "FieldTable.h" - -#ifndef _<xsl:value-of select="@name"/>_ -#define _<xsl:value-of select="@name"/>_ - -namespace qpid { -namespace framing { - - <xsl:call-template name="generate-class"> - <xsl:with-param name="f" select="."/> - </xsl:call-template> -} -} - -#endif - -</xsl:result-document> -</xsl:template> - - -<!-- main class generation template --> -<xsl:template name="generate-class"> - <xsl:param name="f"/> -/** - * This class is autogenerated, do not modify. [From <xsl:value-of select="$f/parent::frames/@protocol"/>] - */ -class <xsl:value-of select="$f/@name"/> : virtual public AMQMethodBody -{ - <xsl:for-each select="$f/field"> - <xsl:value-of select="@cpp-type"/> - <xsl:text> </xsl:text> - <xsl:value-of select="@name"/>; - </xsl:for-each> - -public: - typedef std::tr1::shared_ptr<<xsl:value-of select="$f/@name"/>> shared_ptr; - - virtual ~<xsl:value-of select="$f/@name"/>() {} - - <xsl:for-each select="$f/field"> - inline <xsl:value-of select="concat(@cpp-arg-type, ' get', amqp:upper-first(@name), '() { return ', @name)"/>; } - </xsl:for-each> - - - inline void print(std::ostream& out) const{ - out << "<xsl:value-of select="$f/@declaration_name"/>" - <xsl:for-each select="$f/field"> - <xsl:text> << ", </xsl:text> - <xsl:value-of select="@name"/>="<< - <xsl:value-of select="@name"/> - </xsl:for-each> - ; - } - - inline u_int16_t amqpClassId() const { - return <xsl:value-of select="$f/@class-id"/>; - } - - inline u_int16_t amqpMethodId() const { - return <xsl:value-of select="$f/@method-id"/>; - } - - inline u_int32_t bodySize() const { - <xsl:choose> - <xsl:when test="$f/field"> - return - <xsl:for-each select="$f/field"> - <xsl:if test="position() != 1">+ - </xsl:if> - <xsl:value-of select="amqp:field-length(.)"/> - </xsl:for-each> - ; - </xsl:when> - <xsl:otherwise>return 0;</xsl:otherwise> - </xsl:choose> - } - - <xsl:if test="@server='true'"> - inline void invoke(AMQP_ServerOperations& target, u_int16_t channel) { - <xsl:if test="field"> - <xsl:value-of select="concat('target.get', amqp:upper-first(parent::class/@name), 'Handler()->', @invocation_name, '(channel, ')"/> - <xsl:value-of select="$f/field/@name" separator=", "/>); - </xsl:if> - <xsl:if test="not(field)"> - <xsl:value-of select="concat('target.get', amqp:upper-first(parent::class/@name), 'Handler()->', @invocation_name, '(channel)')"/>; - </xsl:if> - } - </xsl:if> - - inline void encodeContent(Buffer& <xsl:if test="$f/field">buffer</xsl:if>) const - { - <xsl:if test="$f/field[@type='bit']"> - u_int8_t flags = 0; - <xsl:for-each select="$f/field[@type='bit']"> - <xsl:value-of select="concat('flags |= ', @name,' << (', @boolean-index, ' - 1)')"/>; - </xsl:for-each> - </xsl:if> - <xsl:for-each select="$f/field"> - <xsl:if test="@type != 'bit'"> - <xsl:value-of select="amqp:encoder(.)"/>; - </xsl:if> - <xsl:if test="@type = 'bit' and @boolean-index = 1"> - <xsl:text>buffer.putOctet(flags)</xsl:text>; - </xsl:if> - </xsl:for-each> - } - - inline void decodeContent(Buffer& <xsl:if test="$f/field">buffer</xsl:if>) - { - <xsl:for-each select="$f/field"> - <xsl:choose> - <xsl:when test="@type = 'bit' and @boolean-index = 1"> - <xsl:text>u_int8_t flags = buffer.getOctet()</xsl:text>; - <xsl:value-of select="amqp:decoder(.)"/>; - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="amqp:decoder(.)"/>; - </xsl:otherwise> - </xsl:choose> - </xsl:for-each> - } - - <xsl:if test="$f/field"> - <!-- only generate overloaded constructor if there are fields in this method --> - inline <xsl:value-of select="$f/@name"/>(<xsl:value-of select="$f/field/concat(@cpp-arg-type, ' _', @name)" separator=", "/>) : <xsl:value-of select="$f/field/concat(@name, '(_', @name, ')')" separator=", "/> - { - } - </xsl:if> - - inline <xsl:value-of select="$f/@name"/>() - { - } -}; - -</xsl:template> - -<xsl:template match="frames" mode="method-list-header"> -<xsl:result-document href="amqp_methods.h" format="textFormat"> -/** - * This file is autogenerated, do not modify. - */ - -#ifndef AMQ_METHODS_H -#define AMQ_METHODS_H - - <xsl:for-each select="class/frame"> -#include "<xsl:value-of select="@name"/>.h" - </xsl:for-each> - -namespace qpid { -namespace framing { - - <xsl:for-each select="class/frame"> -const <xsl:value-of select="concat(@name, ' ', @declaration_name)"/>; - </xsl:for-each> - -AMQMethodBody* createAMQMethodBody(u_int16_t classId, u_int16_t methodId); - -} -} - -#endif -</xsl:result-document> -</xsl:template> - -<xsl:template match="frames" mode="method-list-source"> - <xsl:result-document href="amqp_methods.cpp" format="textFormat"> -#include "amqp_methods.h" -#include "QpidError.h" - -namespace qpid { -namespace framing { -/** - * This method is autogenerated, do not modify. - */ -AMQMethodBody* createAMQMethodBody(u_int16_t classId, u_int16_t methodId){ - switch(classId * 1000 + methodId) - { - <xsl:for-each select="class/frame"> - <xsl:text>case </xsl:text> - <xsl:value-of select="@class-id"/> - <xsl:text> * 1000 + </xsl:text> - <xsl:value-of select="@method-id"/> - <xsl:text>: return new </xsl:text> - <xsl:value-of select="@name"/>(); - </xsl:for-each> - } - THROW_QPID_ERROR(FRAMING_ERROR, "Unknown method"); -} - -} -} -</xsl:result-document> -</xsl:template> - -<xsl:template match="frames" mode="generate-interface"> - <xsl:result-document href="AMQPServer.h" format="textFormat"> -#include "amqp_types.h" -#include "FieldTable.h" - -#ifndef _AMQPServer_ -#define _AMQPServer_ - -namespace qpid { -namespace framing { - -class AMQPServer -{ - public: - - <xsl:for-each select="class"> - class <xsl:value-of select="concat(amqp:upper-first(@name), 'Handler')"/>{ - public: - <xsl:for-each select="frame[@server='true']"> - <xsl:if test="field"> - virtual void <xsl:value-of select="@invocation_name"/>(u_int16_t channel, <xsl:value-of select="field/concat(@cpp-arg-type, ' ', @name)" separator=", "/>) = 0; - </xsl:if> - <xsl:if test="not(field)"> - virtual void <xsl:value-of select="@invocation_name"/>(u_int16_t channel) = 0; - </xsl:if> - </xsl:for-each> - virtual ~<xsl:value-of select="concat(amqp:upper-first(@name), 'Handler')"/>(){} - }; - - virtual <xsl:value-of select="concat(amqp:upper-first(@name), 'Handler* get', amqp:upper-first(@name), 'Handler')"/>() = 0; - - </xsl:for-each> - virtual ~AMQPServer(){} -}; - -} -} - -#endif -</xsl:result-document> - - <xsl:result-document href="AMQPClient.h" format="textFormat"> -#include "amqp_types.h" -#include "FieldTable.h" - -#ifndef _AMQPClient_ -#define _AMQPClient_ - -namespace qpid { -namespace framing { - -class AMQPClient -{ - public: - - <xsl:for-each select="class"> - class <xsl:value-of select="concat(amqp:upper-first(@name), 'Handler')"/>{ - public: - <xsl:for-each select="frame[@client='true']"> - <xsl:if test="field"> - virtual void <xsl:value-of select="@invocation_name"/>(u_int16_t channel, <xsl:value-of select="field/concat(@cpp-arg-type, ' ', @name)" separator=", "/>) = 0; - </xsl:if> - <xsl:if test="not(field)"> - virtual void <xsl:value-of select="@invocation_name"/>(u_int16_t channel) = 0; - </xsl:if> - </xsl:for-each> - virtual ~<xsl:value-of select="concat(amqp:upper-first(@name), 'Handler')"/>(){} - }; - - virtual <xsl:value-of select="concat(amqp:upper-first(@name), 'Handler* get', amqp:upper-first(@name), 'Handler')"/>() = 0; - - </xsl:for-each> - - virtual ~AMQPClient(){} -}; - -} -} - -#endif -</xsl:result-document> - -</xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/framing.xsl b/cpp/common/framing/generated/stylesheets/framing.xsl deleted file mode 100644 index c63e719a77..0000000000 --- a/cpp/common/framing/generated/stylesheets/framing.xsl +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - -<xsl:import href="prepare1.xsl"/> -<xsl:import href="prepare2.xsl"/> -<xsl:import href="prepare3.xsl"/> -<xsl:import href="cpp.xsl"/> - -<xsl:output indent="yes"/> -<xsl:output method="text" indent="yes" name="textFormat"/> - -<xsl:template match="/"> - <xsl:variable name="prepare1"> - <xsl:apply-templates mode="prepare1" select="."/> - </xsl:variable> - - <xsl:variable name="prepare2"> - <xsl:apply-templates mode="prepare2" select="$prepare1"/> - </xsl:variable> - - <xsl:variable name="model"> - <xsl:apply-templates mode="prepare3" select="$prepare2"/> - </xsl:variable> - - <xsl:apply-templates mode="generate-multi" select="$model"/> - <xsl:apply-templates mode="method-list-header" select="$model"/> - <xsl:apply-templates mode="method-list-source" select="$model"/> - - <!-- these interfaces are now generated by the new scripts from kim --> - <!-- e.g. those of the form amqp-server/client-*.xsl --> - <!-- xsl:apply-templates mode="generate-interface" select="$model"/ --> - - <!-- dump out the intermediary files for debugging --> - <!-- - <xsl:result-document href="prepare1.out"> - <xsl:copy-of select="$prepare1"/> - </xsl:result-document> - - <xsl:result-document href="prepare2.out"> - <xsl:copy-of select="$prepare2"/> - </xsl:result-document> - - <xsl:result-document href="model.out"> - <xsl:copy-of select="$model"/> - </xsl:result-document> - --> -</xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/prepare1.xsl b/cpp/common/framing/generated/stylesheets/prepare1.xsl deleted file mode 100644 index 2aeda89677..0000000000 --- a/cpp/common/framing/generated/stylesheets/prepare1.xsl +++ /dev/null @@ -1,104 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - -<xsl:import href="utils.xsl"/> - -<xsl:output indent="yes"/> -<xsl:param name="asl_base"/> - -<!-- pre-process, phase 1 --> - -<xsl:template match="/"> - <xsl:apply-templates select="protocol" mode="prepare1"/> -</xsl:template> - -<xsl:template match="amqp" mode="prepare1"> - <frames> - <xsl:attribute name="protocol"> - <xsl:value-of select="@comment"/> - <xsl:text> (</xsl:text> - <xsl:text>major=</xsl:text><xsl:value-of select="@major"/> - <xsl:text>, minor=</xsl:text><xsl:value-of select="@minor"/> - <xsl:text>)</xsl:text> - </xsl:attribute> - <xsl:apply-templates mode="prepare1" select="inherit"/> - <xsl:apply-templates mode="prepare1" select="include"/> - <xsl:apply-templates mode="prepare1" select="domain"/> - <xsl:apply-templates mode="prepare1" select="class"/> - </frames> -</xsl:template> - -<xsl:template match="include" mode="prepare1"> - <xsl:if test="@filename != 'asl_constants.asl'"> - <!-- skip asl_constants.asl, we don't need it and it is not well formed so causes error warnings --> - <xsl:apply-templates select="document(@filename)" mode="prepare1"/> - </xsl:if> -</xsl:template> - -<xsl:template match="inherit" mode="prepare1"> - <xsl:variable name="ibase" select="concat('file:///', $asl_base, '/', @name, '.asl')"/> - <xsl:choose> - <xsl:when test="document($ibase)"> - <xsl:apply-templates select="document($ibase)" mode="prepare1"/> - </xsl:when> - <xsl:otherwise> - <xsl:message> - Could not inherit from <xsl:value-of select="$ibase"/>; file not found. - </xsl:message> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template match="class[@index]" mode="prepare1"> -<xsl:if test="not(@name = 'test')"> - <class> - <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute> - <xsl:apply-templates select="method" mode="prepare1"/> - </class> -</xsl:if> -</xsl:template> - -<xsl:template match="method" mode="prepare1"> - <xsl:if test="parent::class[@index]"><!-- there is a template class that has no index, which we want to skip --> - <frame> - <xsl:attribute name="name"><xsl:value-of select="amqp:class-name(parent::class/@name, @name)"/></xsl:attribute> - <xsl:attribute name="class-id"><xsl:value-of select="parent::class/@index"/></xsl:attribute> - <xsl:if test="@index"> - <xsl:attribute name="method-id"><xsl:value-of select="@index"/></xsl:attribute> - </xsl:if> - <xsl:if test="not(@index)"> - <xsl:attribute name="method-id"><xsl:number count="method"/></xsl:attribute> - </xsl:if> - <xsl:attribute name="invocation_name"> - <xsl:value-of select="amqp:keyword-check(amqp:field-name(@name))"/> - </xsl:attribute> - <xsl:attribute name="declaration_name"> - <xsl:value-of select="amqp:method-name(parent::class/@name, @name)"/> - </xsl:attribute> - <xsl:if test="chassis[@name='client']"> - <xsl:attribute name="client">true</xsl:attribute> - </xsl:if> - <xsl:if test="chassis[@name='server']"> - <xsl:attribute name="server">true</xsl:attribute> - </xsl:if> - <xsl:apply-templates select="field" mode="prepare1"/> - </frame> - </xsl:if> -</xsl:template> - -<xsl:template match="domain" mode="prepare1"> - <domain> - <name><xsl:value-of select="@name"/></name> - <type><xsl:value-of select="@type"/></type> - </domain> -</xsl:template> - -<xsl:template match="field" mode="prepare1"> - <field> - <xsl:copy-of select="@name"/> - <xsl:copy-of select="@type"/> - <xsl:copy-of select="@domain"/> - </field> -</xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/prepare2.xsl b/cpp/common/framing/generated/stylesheets/prepare2.xsl deleted file mode 100644 index 331319de57..0000000000 --- a/cpp/common/framing/generated/stylesheets/prepare2.xsl +++ /dev/null @@ -1,54 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - -<xsl:import href="utils.xsl"/> - -<xsl:output indent="yes"/> - -<!-- pre-process, phase 2 --> - -<xsl:key name="domain-lookup" match="domain" use="name"/> - -<xsl:template match="/"> - <xsl:apply-templates mode="prepare2" select="frames"/> -</xsl:template> - -<xsl:template match="field[@domain]" mode="prepare2"> - <field> - <xsl:variable name="t1" select="key('domain-lookup', @domain)/type"/> - <xsl:attribute name="name"><xsl:value-of select="amqp:field-name(@name)"/></xsl:attribute> - <xsl:attribute name="type"><xsl:value-of select="$t1"/></xsl:attribute> - </field> -</xsl:template> - -<xsl:template match="field[@type]" mode="prepare2"> - <field> - <xsl:attribute name="name"><xsl:value-of select="amqp:field-name(@name)"/></xsl:attribute> - <xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute> - </field> -</xsl:template> - -<xsl:template match="frames" mode="prepare2"> - <frames> - <xsl:copy-of select="@protocol"/> - <xsl:apply-templates mode="prepare2"/> - </frames> -</xsl:template> - -<xsl:template match="class" mode="prepare2"> - <class> - <xsl:copy-of select="@*"/> - <xsl:apply-templates mode="prepare2"/> - </class> -</xsl:template> - -<xsl:template match="frame" mode="prepare2"> - <xsl:element name="{name()}"> - <xsl:copy-of select="@*"/> - <xsl:apply-templates mode="prepare2" select="field"/> - </xsl:element> -</xsl:template> - -<xsl:template match="domain" mode="prepare2"></xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/prepare3.xsl b/cpp/common/framing/generated/stylesheets/prepare3.xsl deleted file mode 100644 index 27a4764e4f..0000000000 --- a/cpp/common/framing/generated/stylesheets/prepare3.xsl +++ /dev/null @@ -1,54 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - -<xsl:import href="utils.xsl"/> - -<xsl:output indent="yes"/> - -<!-- final preparation of the model --> - -<xsl:template match="/"> - <xsl:apply-templates mode="prepare3"/> -</xsl:template> - -<xsl:template match="frames" mode="prepare3"> - <frames> - <xsl:copy-of select="@protocol"/> - <xsl:apply-templates mode="prepare3"/> - </frames> -</xsl:template> - -<xsl:template match="class" mode="prepare3"> - <class> - <xsl:copy-of select="@*"/> - <xsl:apply-templates mode="prepare3"/> - </class> -</xsl:template> - -<xsl:template match="frame" mode="prepare3"> - <xsl:element name="frame"> - <xsl:copy-of select="@*"/> - <xsl:if test="field[@type='bit']"> - <xsl:attribute name="has-bit-field">true</xsl:attribute> - <xsl:attribute name="bit-field-count"><xsl:value-of select="count(field[@type='bit'])"/></xsl:attribute> - </xsl:if> - <xsl:apply-templates mode="prepare3"/> - </xsl:element> -</xsl:template> - - -<xsl:template match="field" mode="prepare3"> - <field> - <xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute> - <!-- ensure the field name is processed to be a valid java name --> - <xsl:attribute name="name"><xsl:value-of select="amqp:field-name(@name)"/></xsl:attribute> - <!-- add some attributes to make code generation easier --> - <xsl:attribute name="cpp-type"><xsl:value-of select="amqp:cpp-type(@type)"/></xsl:attribute> - <xsl:attribute name="cpp-arg-type"><xsl:value-of select="amqp:cpp-arg-type(@type)"/></xsl:attribute> - <xsl:if test="@type='bit'"> - <xsl:attribute name="boolean-index"><xsl:number count="field[@type='bit']"/></xsl:attribute> - </xsl:if> - </field> -</xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/registry.xsl b/cpp/common/framing/generated/stylesheets/registry.xsl deleted file mode 100644 index a818a0a871..0000000000 --- a/cpp/common/framing/generated/stylesheets/registry.xsl +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - -<xsl:import href="java.xsl"/> - -<xsl:output method="text" indent="yes" name="textFormat"/> - -<xsl:template match="/"> - <xsl:apply-templates mode="generate-registry" select="registries"/> -</xsl:template> - -</xsl:stylesheet> diff --git a/cpp/common/framing/generated/stylesheets/utils.xsl b/cpp/common/framing/generated/stylesheets/utils.xsl deleted file mode 100644 index 70743112a9..0000000000 --- a/cpp/common/framing/generated/stylesheets/utils.xsl +++ /dev/null @@ -1,194 +0,0 @@ -<?xml version='1.0'?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amqp="http://amqp.org"> - -<!-- This file contains functions that are used in the generation of the java classes for framing --> - -<!-- retrieve the java type of a given amq type --> -<xsl:function name="amqp:cpp-type"> - <xsl:param name="t"/> - <xsl:choose> - <xsl:when test="$t='octet'">u_int8_t</xsl:when> - <xsl:when test="$t='short'">u_int16_t</xsl:when> - <xsl:when test="$t='shortstr'">string</xsl:when> - <xsl:when test="$t='longstr'">string</xsl:when> - <xsl:when test="$t='bit'">bool</xsl:when> - <xsl:when test="$t='long'">u_int32_t</xsl:when> - <xsl:when test="$t='longlong'">u_int64_t</xsl:when> - <xsl:when test="$t='table'">FieldTable</xsl:when> - <xsl:otherwise>Object /*WARNING: undefined type*/</xsl:otherwise> - </xsl:choose> -</xsl:function> -<xsl:function name="amqp:cpp-arg-type"> - <xsl:param name="t"/> - <xsl:choose> - <xsl:when test="$t='octet'">u_int8_t</xsl:when> - <xsl:when test="$t='short'">u_int16_t</xsl:when> - <xsl:when test="$t='shortstr'">const string&</xsl:when> - <xsl:when test="$t='longstr'">const string&</xsl:when> - <xsl:when test="$t='bit'">bool</xsl:when> - <xsl:when test="$t='long'">u_int32_t</xsl:when> - <xsl:when test="$t='longlong'">u_int64_t</xsl:when> - <xsl:when test="$t='table'">FieldTable&</xsl:when> - <xsl:otherwise>Object /*WARNING: undefined type*/</xsl:otherwise> - </xsl:choose> -</xsl:function> - -<!-- retrieve the code to get the field size of a given amq type --> -<xsl:function name="amqp:field-length"> - <xsl:param name="f"/> - <xsl:choose> - <xsl:when test="$f/@type='bit' and $f/@boolean-index=1"> - <xsl:value-of select="concat('1 /*', $f/@name, '*/')"/> - </xsl:when> - <xsl:when test="$f/@type='bit' and $f/@boolean-index > 1"> - <xsl:value-of select="concat('0 /*', $f/@name, '*/')"/> - </xsl:when> - <xsl:when test="$f/@type='char'"> - <xsl:value-of select="concat('1 /*', $f/@name, '*/')"/> - </xsl:when> - <xsl:when test="$f/@type='octet'"> - <xsl:value-of select="concat('1 /*', $f/@name, '*/')"/> - </xsl:when> - <xsl:when test="$f/@type='short'"> - <xsl:value-of select="concat('2 /*', $f/@name, '*/')"/> - </xsl:when> - <xsl:when test="$f/@type='long'"> - <xsl:value-of select="concat('4 /*', $f/@name, '*/')"/> - </xsl:when> - <xsl:when test="$f/@type='longlong'"> - <xsl:value-of select="concat('8 /*', $f/@name, '*/')"/> - </xsl:when> - <xsl:when test="$f/@type='shortstr'"> - <xsl:value-of select="concat('1 + ', $f/@name, '.length()')"/> - </xsl:when> - <xsl:when test="$f/@type='longstr'"> - <xsl:value-of select="concat('4 + ', $f/@name, '.length()')"/> - </xsl:when> - <xsl:when test="$f/@type='table'"> - <xsl:value-of select="concat($f/@name, '.size()')"/> - </xsl:when> - <xsl:otherwise><xsl:text>/* WARNING: COULD NOT DETERMINE FIELD SIZE */</xsl:text></xsl:otherwise> - </xsl:choose> -</xsl:function> - -<!-- retrieve the code to encode a field of a given amq type --> -<!-- Note: - This method will not provide an encoder for a bit field. - Bit fields should be encoded together separately. --> - -<xsl:function name="amqp:encoder"> - <xsl:param name="f"/> - <xsl:choose> - <xsl:when test="$f/@type='octet'"> - <xsl:value-of select="concat('buffer.putOctet(', $f/@name, ')')"/> - </xsl:when> - <xsl:when test="$f/@type='short'"> - <xsl:value-of select="concat('buffer.putShort(', $f/@name, ')')"/> - </xsl:when> - <xsl:when test="$f/@type='long'"> - <xsl:value-of select="concat('buffer.putLong(', $f/@name, ')')"/> - </xsl:when> - <xsl:when test="$f/@type='longlong'"> - <xsl:value-of select="concat('buffer.putLongLong(', $f/@name, ')')"/> - </xsl:when> - <xsl:when test="$f/@type='shortstr'"> - <xsl:value-of select="concat('buffer.putShortString(', $f/@name, ')')"/> - </xsl:when> - <xsl:when test="$f/@type='longstr'"> - <xsl:value-of select="concat('buffer.putLongString(', $f/@name, ')')"/> - </xsl:when> - <xsl:when test="$f/@type='table'"> - <xsl:value-of select="concat('buffer.putFieldTable(', $f/@name, ')')"/> - </xsl:when> - <xsl:otherwise><xsl:text>/* WARNING: COULD NOT DETERMINE ENCODER */</xsl:text></xsl:otherwise> - </xsl:choose> -</xsl:function> - -<!-- retrieve the code to decode a field of a given amq type --> -<xsl:function name="amqp:decoder"> - <xsl:param name="f"/> - <xsl:choose> - <xsl:when test="$f/@type='bit'"> - <xsl:value-of select="concat($f/@name, ' = (1 << (', $f/@boolean-index, ' - 1)) & flags;')"/> - </xsl:when> - <xsl:when test="$f/@type='octet'"> - <xsl:value-of select="concat($f/@name, ' = buffer.getOctet()')"/> - </xsl:when> - <xsl:when test="$f/@type='short'"> - <xsl:value-of select="concat($f/@name, ' = buffer.getShort()')"/> - </xsl:when> - <xsl:when test="$f/@type='long'"> - <xsl:value-of select="concat($f/@name, ' = buffer.getLong()')"/> - </xsl:when> - <xsl:when test="$f/@type='longlong'"> - <xsl:value-of select="concat($f/@name, ' = buffer.getLongLong()')"/> - </xsl:when> - <xsl:when test="$f/@type='shortstr'"> - <xsl:value-of select="concat('buffer.getShortString(', $f/@name), ')'"/> - </xsl:when> - <xsl:when test="$f/@type='longstr'"> - <xsl:value-of select="concat('buffer.getLongString(', $f/@name), ')'"/> - </xsl:when> - <xsl:when test="$f/@type='table'"> - <xsl:value-of select="concat('buffer.getFieldTable(', $f/@name, ')')"/> - </xsl:when> - <xsl:otherwise><xsl:text>/* WARNING: COULD NOT DETERMINE DECODER */</xsl:text></xsl:otherwise> - </xsl:choose> -</xsl:function> - -<!-- create the class name for a frame, based on class and method (passed in) --> -<xsl:function name="amqp:class-name"> - <xsl:param name="class"/> - <xsl:param name="method"/> - <xsl:value-of select="concat(amqp:upper-first($class),amqp:upper-first(amqp:field-name($method)), 'Body')"/> -</xsl:function> - -<!-- create the class name for a frame, based on class and method (passed in) --> -<xsl:function name="amqp:method-name"> - <xsl:param name="class"/> - <xsl:param name="method"/> - <xsl:value-of select="concat(translate($class, '- ', '__'), '_', translate($method, '- ', '__'))"/> -</xsl:function> - -<!-- get a valid field name, processing spaces and '-'s where appropriate --> -<xsl:function name="amqp:field-name"> - <xsl:param name="name"/> - <xsl:choose> - <xsl:when test="contains($name, ' ')"> - <xsl:value-of select="concat(substring-before($name, ' '), amqp:upper-first(substring-after($name, ' ')))"/> - </xsl:when> - <xsl:when test="contains($name, '-')"> - <xsl:value-of select="concat(substring-before($name, '-'), amqp:upper-first(substring-after($name, '-')))"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$name"/> - </xsl:otherwise> - </xsl:choose> -</xsl:function> - -<!-- convert the first character of the input to upper-case --> -<xsl:function name="amqp:upper-first"> - <xsl:param name="in"/> - <xsl:value-of select="concat(upper-case(substring($in, 1, 1)), substring($in, 2))"/> -</xsl:function> - - -<xsl:function name="amqp:keyword-check"> - <xsl:param name="in"/> - <xsl:choose> - <xsl:when test="contains($in, 'delete')"> - <xsl:value-of select="concat($in, '_')"/> - </xsl:when> - <xsl:when test="contains($in, 'string')"> - <xsl:value-of select="concat($in, '_')"/> - </xsl:when> - <xsl:when test="contains($in, 'return')"> - <xsl:value-of select="concat($in, '_')"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$in"/> - </xsl:otherwise> - </xsl:choose> -</xsl:function> - -</xsl:stylesheet> diff --git a/cpp/common/framing/inc/AMQBody.h b/cpp/common/framing/inc/AMQBody.h deleted file mode 100644 index a1770820a9..0000000000 --- a/cpp/common/framing/inc/AMQBody.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "memory.h" -#include "amqp_types.h" -#include "Buffer.h" - -#ifndef _AMQBody_ -#define _AMQBody_ - -namespace qpid { - namespace framing { - - class AMQBody - { - public: - typedef std::tr1::shared_ptr<AMQBody> shared_ptr; - - virtual ~AMQBody(); - virtual u_int32_t size() const = 0; - virtual u_int8_t type() const = 0; - virtual void encode(Buffer& buffer) const = 0; - virtual void decode(Buffer& buffer, u_int32_t size) = 0; - virtual void print(std::ostream& out) const; - }; - - std::ostream& operator<<(std::ostream& out, const AMQBody& body) ; - - enum body_types {METHOD_BODY = 1, HEADER_BODY = 2, CONTENT_BODY = 3, HEARTBEAT_BODY = 8}; - } -} - - -#endif diff --git a/cpp/common/framing/inc/AMQContentBody.h b/cpp/common/framing/inc/AMQContentBody.h deleted file mode 100644 index daf7d6cd44..0000000000 --- a/cpp/common/framing/inc/AMQContentBody.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "amqp_types.h" -#include "AMQBody.h" -#include "Buffer.h" - -#ifndef _AMQContentBody_ -#define _AMQContentBody_ - -namespace qpid { -namespace framing { - -class AMQContentBody : virtual public AMQBody -{ - string data; - -public: - typedef std::tr1::shared_ptr<AMQContentBody> shared_ptr; - - AMQContentBody(); - AMQContentBody(const string& data); - inline virtual ~AMQContentBody(){} - inline u_int8_t type() const { return CONTENT_BODY; }; - inline string& getData(){ return data; } - u_int32_t size() const; - void encode(Buffer& buffer) const; - void decode(Buffer& buffer, u_int32_t size); - void print(std::ostream& out) const; -}; - -} -} - - -#endif diff --git a/cpp/common/framing/inc/AMQDataBlock.h b/cpp/common/framing/inc/AMQDataBlock.h deleted file mode 100644 index 6c47c78864..0000000000 --- a/cpp/common/framing/inc/AMQDataBlock.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "Buffer.h" - -#ifndef _AMQDataBlock_ -#define _AMQDataBlock_ - -namespace qpid { -namespace framing { - -class AMQDataBlock -{ -public: - virtual ~AMQDataBlock() {} - virtual void encode(Buffer& buffer) = 0; - virtual bool decode(Buffer& buffer) = 0; - virtual u_int32_t size() const = 0; -}; - -} -} - - -#endif diff --git a/cpp/common/framing/inc/AMQFrame.h b/cpp/common/framing/inc/AMQFrame.h deleted file mode 100644 index 5656d20377..0000000000 --- a/cpp/common/framing/inc/AMQFrame.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "amqp_methods.h" -#include "amqp_types.h" -#include "AMQBody.h" -#include "AMQDataBlock.h" -#include "AMQMethodBody.h" -#include "AMQHeaderBody.h" -#include "AMQContentBody.h" -#include "AMQHeartbeatBody.h" -#include "Buffer.h" - -#ifndef _AMQFrame_ -#define _AMQFrame_ - -namespace qpid { - namespace framing { - - class AMQFrame : virtual public AMQDataBlock - { - u_int16_t channel; - u_int8_t type;//used if the body is decoded separately from the 'head' - AMQBody::shared_ptr body; - - public: - AMQFrame(); - AMQFrame(u_int16_t channel, AMQBody* body); - AMQFrame(u_int16_t channel, AMQBody::shared_ptr& body); - virtual ~AMQFrame(); - virtual void encode(Buffer& buffer); - virtual bool decode(Buffer& buffer); - virtual u_int32_t size() const; - u_int16_t getChannel(); - AMQBody::shared_ptr& getBody(); - - u_int32_t decodeHead(Buffer& buffer); - void decodeBody(Buffer& buffer, uint32_t size); - - friend std::ostream& operator<<(std::ostream& out, const AMQFrame& body); - }; - - } -} - - -#endif diff --git a/cpp/common/framing/inc/AMQHeaderBody.h b/cpp/common/framing/inc/AMQHeaderBody.h deleted file mode 100644 index 4f9cdb571a..0000000000 --- a/cpp/common/framing/inc/AMQHeaderBody.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "amqp_types.h" -#include "AMQBody.h" -#include "Buffer.h" -#include "HeaderProperties.h" - -#ifndef _AMQHeaderBody_ -#define _AMQHeaderBody_ - -namespace qpid { -namespace framing { - -class AMQHeaderBody : virtual public AMQBody -{ - HeaderProperties* properties; - u_int16_t weight; - u_int64_t contentSize; - - void createProperties(int classId); -public: - typedef std::tr1::shared_ptr<AMQHeaderBody> shared_ptr; - - AMQHeaderBody(int classId); - AMQHeaderBody(); - inline u_int8_t type() const { return HEADER_BODY; } - HeaderProperties* getProperties(){ return properties; } - const HeaderProperties* getProperties() const { return properties; } - inline u_int64_t getContentSize() const { return contentSize; } - inline void setContentSize(u_int64_t _size) { contentSize = _size; } - virtual ~AMQHeaderBody(); - virtual u_int32_t size() const; - virtual void encode(Buffer& buffer) const; - virtual void decode(Buffer& buffer, u_int32_t size); - virtual void print(std::ostream& out) const; -}; - -} -} - - -#endif diff --git a/cpp/common/framing/inc/AMQHeartbeatBody.h b/cpp/common/framing/inc/AMQHeartbeatBody.h deleted file mode 100644 index da612a2a44..0000000000 --- a/cpp/common/framing/inc/AMQHeartbeatBody.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "amqp_types.h" -#include "AMQBody.h" -#include "Buffer.h" - -#ifndef _AMQHeartbeatBody_ -#define _AMQHeartbeatBody_ - -namespace qpid { -namespace framing { - -class AMQHeartbeatBody : virtual public AMQBody -{ -public: - typedef std::tr1::shared_ptr<AMQHeartbeatBody> shared_ptr; - - virtual ~AMQHeartbeatBody(); - inline u_int32_t size() const { return 0; } - inline u_int8_t type() const { return HEARTBEAT_BODY; } - inline void encode(Buffer& ) const {} - inline void decode(Buffer& , u_int32_t /*size*/) {} - virtual void print(std::ostream& out) const; -}; - -} -} - -#endif diff --git a/cpp/common/framing/inc/AMQMethodBody.h b/cpp/common/framing/inc/AMQMethodBody.h deleted file mode 100644 index 59d5dd5212..0000000000 --- a/cpp/common/framing/inc/AMQMethodBody.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include <iostream> -#include "amqp_types.h" -#include "AMQBody.h" -#include "Buffer.h" -#include "AMQP_ServerOperations.h" - -#ifndef _AMQMethodBody_ -#define _AMQMethodBody_ - -namespace qpid { -namespace framing { - -class AMQMethodBody : virtual public AMQBody -{ -public: - typedef std::tr1::shared_ptr<AMQMethodBody> shared_ptr; - - inline u_int8_t type() const { return METHOD_BODY; } - inline u_int32_t size() const { return 4 + bodySize(); } - inline virtual ~AMQMethodBody(){} - virtual void print(std::ostream& out) const = 0; - virtual u_int16_t amqpMethodId() const = 0; - virtual u_int16_t amqpClassId() const = 0; - virtual void invoke(AMQP_ServerOperations& target, u_int16_t channel); - virtual void encodeContent(Buffer& buffer) const = 0; - virtual void decodeContent(Buffer& buffer) = 0; - virtual u_int32_t bodySize() const = 0; - void encode(Buffer& buffer) const; - void decode(Buffer& buffer, u_int32_t size); - bool match(AMQMethodBody* other) const; -}; - -std::ostream& operator<<(std::ostream& out, const AMQMethodBody& body); - -} -} - - -#endif diff --git a/cpp/common/framing/inc/BasicHeaderProperties.h b/cpp/common/framing/inc/BasicHeaderProperties.h deleted file mode 100644 index c32612221b..0000000000 --- a/cpp/common/framing/inc/BasicHeaderProperties.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "amqp_types.h" -#include "amqp_methods.h" -#include "Buffer.h" -#include "HeaderProperties.h" - -#ifndef _BasicHeaderProperties_ -#define _BasicHeaderProperties_ - -namespace qpid { -namespace framing { - - //TODO: This could be easily generated from the spec - class BasicHeaderProperties : public HeaderProperties - { - string contentType; - string contentEncoding; - FieldTable headers; - u_int8_t deliveryMode; - u_int8_t priority; - string correlationId; - string replyTo; - string expiration; - string messageId; - u_int64_t timestamp; - string type; - string userId; - string appId; - string clusterId; - - u_int16_t getFlags() const; - - public: - BasicHeaderProperties(); - virtual ~BasicHeaderProperties(); - virtual u_int32_t size() const; - virtual void encode(Buffer& buffer) const; - virtual void decode(Buffer& buffer, u_int32_t size); - - inline virtual u_int8_t classId(){ return BASIC; } - - inline string& getContentType(){ return contentType; } - inline string& getContentEncoding(){ return contentEncoding; } - inline FieldTable& getHeaders(){ return headers; } - inline u_int8_t getDeliveryMode(){ return deliveryMode; } - inline u_int8_t getPriority(){ return priority; } - inline string& getCorrelationId(){return correlationId; } - inline string& getReplyTo(){ return replyTo; } - inline string& getExpiration(){ return expiration; } - inline string& getMessageId(){return messageId; } - inline u_int64_t getTimestamp(){ return timestamp; } - inline string& getType(){ return type; } - inline string& getUserId(){ return userId; } - inline string& getAppId(){ return appId; } - inline string& getClusterId(){ return clusterId; } - - void inline setContentType(string& _type){ contentType = _type; } - void inline setContentEncoding(string& encoding){ contentEncoding = encoding; } - void inline setHeaders(FieldTable& _headers){ headers = _headers; } - void inline setDeliveryMode(u_int8_t mode){ deliveryMode = mode; } - void inline setPriority(u_int8_t _priority){ priority = _priority; } - void inline setCorrelationId(string& _correlationId){ correlationId = _correlationId; } - void inline setReplyTo(string& _replyTo){ replyTo = _replyTo;} - void inline setExpiration(string& _expiration){ expiration = _expiration; } - void inline setMessageId(string& _messageId){ messageId = _messageId; } - void inline setTimestamp(u_int64_t _timestamp){ timestamp = _timestamp; } - void inline setType(string& _type){ type = _type; } - void inline setUserId(string& _userId){ userId = _userId; } - void inline setAppId(string& _appId){appId = _appId; } - void inline setClusterId(string& _clusterId){ clusterId = _clusterId; } - }; - -} -} - - -#endif diff --git a/cpp/common/framing/inc/BodyHandler.h b/cpp/common/framing/inc/BodyHandler.h deleted file mode 100644 index a4aee2709e..0000000000 --- a/cpp/common/framing/inc/BodyHandler.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include <string> - -#ifndef _BodyHandler_ -#define _BodyHandler_ - -#include "AMQMethodBody.h" -#include "AMQHeaderBody.h" -#include "AMQContentBody.h" -#include "AMQHeartbeatBody.h" - -namespace qpid { -namespace framing { - - class BodyHandler{ - public: - virtual ~BodyHandler(); - virtual void handleMethod(AMQMethodBody::shared_ptr body) = 0; - virtual void handleHeader(AMQHeaderBody::shared_ptr body) = 0; - virtual void handleContent(AMQContentBody::shared_ptr body) = 0; - virtual void handleHeartbeat(AMQHeartbeatBody::shared_ptr body) = 0; - - void handleBody(AMQBody::shared_ptr& body); - }; - - class UnknownBodyType{ - public: - const u_int16_t type; - inline UnknownBodyType(u_int16_t _type) : type(_type){} - }; -} -} - - -#endif diff --git a/cpp/common/framing/inc/Buffer.h b/cpp/common/framing/inc/Buffer.h deleted file mode 100644 index 4d3d503b00..0000000000 --- a/cpp/common/framing/inc/Buffer.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "amqp_types.h" - -#ifndef _Buffer_ -#define _Buffer_ - -namespace qpid { -namespace framing { - -class FieldTable; - -class Buffer -{ - const u_int32_t size; - char* data; - u_int32_t position; - u_int32_t limit; - u_int32_t r_position; - u_int32_t r_limit; - -public: - - Buffer(u_int32_t size); - ~Buffer(); - - void flip(); - void clear(); - void compact(); - void record(); - void restore(); - u_int32_t available(); - char* start(); - void move(u_int32_t bytes); - - void putOctet(u_int8_t i); - void putShort(u_int16_t i); - void putLong(u_int32_t i); - void putLongLong(u_int64_t i); - - u_int8_t getOctet(); - u_int16_t getShort(); - u_int32_t getLong(); - u_int64_t getLongLong(); - - void putShortString(const string& s); - void putLongString(const string& s); - void getShortString(string& s); - void getLongString(string& s); - - void putFieldTable(const FieldTable& t); - void getFieldTable(FieldTable& t); - - void putRawData(const string& s); - void getRawData(string& s, u_int32_t size); - -}; - -} -} - - -#endif diff --git a/cpp/common/framing/inc/FieldTable.h b/cpp/common/framing/inc/FieldTable.h deleted file mode 100644 index 7da914968e..0000000000 --- a/cpp/common/framing/inc/FieldTable.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include <iostream> -#include <vector> -#include <tr1/memory> -#include <tr1/unordered_map> -#include "amqp_types.h" - -#ifndef _FieldTable_ -#define _FieldTable_ - -namespace qpid { -namespace framing { - -class Value; -class Buffer; - -class FieldTable -{ - public: - typedef std::tr1::shared_ptr<Value> ValuePtr; - typedef std::tr1::unordered_map<std::string, ValuePtr> ValueMap; - - ~FieldTable(); - u_int32_t size() const; - int count() const; - void setString(const std::string& name, const std::string& value); - void setInt(const std::string& name, int value); - void setTimestamp(const std::string& name, u_int64_t value); - void setTable(const std::string& name, const FieldTable& value); - //void setDecimal(string& name, xxx& value); - std::string getString(const std::string& name) const; - int getInt(const std::string& name) const; - u_int64_t getTimestamp(const std::string& name) const; - void getTable(const std::string& name, FieldTable& value) const; - //void getDecimal(string& name, xxx& value); - void erase(const std::string& name); - - void encode(Buffer& buffer) const; - void decode(Buffer& buffer); - - bool operator==(const FieldTable& other) const; - - // TODO aconway 2006-09-26: Yeuch! Rework FieldTable to have - // a map-like interface. - const ValueMap& getMap() const { return values; } - ValueMap& getMap() { return values; } - - - private: - friend std::ostream& operator<<(std::ostream& out, const FieldTable& body); - ValueMap values; - template<class T> T getValue(const std::string& name) const; -}; - -class FieldNotFoundException{}; -class UnknownFieldName : public FieldNotFoundException{}; -class IncorrectFieldType : public FieldNotFoundException{}; -} -} - - -#endif diff --git a/cpp/common/framing/inc/HeaderProperties.h b/cpp/common/framing/inc/HeaderProperties.h deleted file mode 100644 index f84345c203..0000000000 --- a/cpp/common/framing/inc/HeaderProperties.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "amqp_types.h" -#include "Buffer.h" - -#ifndef _HeaderProperties_ -#define _HeaderProperties_ - -namespace qpid { -namespace framing { - - enum header_classes{BASIC = 60}; - - class HeaderProperties - { - - public: - inline virtual ~HeaderProperties(){} - virtual u_int8_t classId() = 0; - virtual u_int32_t size() const = 0; - virtual void encode(Buffer& buffer) const = 0; - virtual void decode(Buffer& buffer, u_int32_t size) = 0; - }; -} -} - - -#endif diff --git a/cpp/common/framing/inc/InitiationHandler.h b/cpp/common/framing/inc/InitiationHandler.h deleted file mode 100644 index 7b1fb36e2d..0000000000 --- a/cpp/common/framing/inc/InitiationHandler.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include <string> - -#ifndef _InitiationHandler_ -#define _InitiationHandler_ - -#include "ProtocolInitiation.h" - -namespace qpid { -namespace framing { - - class InitiationHandler{ - public: - virtual ~InitiationHandler(); - virtual void initiated(ProtocolInitiation* header) = 0; - }; - -} -} - - -#endif diff --git a/cpp/common/framing/inc/InputHandler.h b/cpp/common/framing/inc/InputHandler.h deleted file mode 100644 index 927bd97ab4..0000000000 --- a/cpp/common/framing/inc/InputHandler.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include <string> - -#ifndef _InputHandler_ -#define _InputHandler_ - -#include "AMQFrame.h" - -namespace qpid { -namespace framing { - - class InputHandler{ - public: - virtual ~InputHandler(); - virtual void received(AMQFrame* frame) = 0; - }; - -} -} - - -#endif diff --git a/cpp/common/framing/inc/OutputHandler.h b/cpp/common/framing/inc/OutputHandler.h deleted file mode 100644 index afc8d7f257..0000000000 --- a/cpp/common/framing/inc/OutputHandler.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include <string> - -#ifndef _OutputHandler_ -#define _OutputHandler_ - -#include "AMQFrame.h" - -namespace qpid { -namespace framing { - - class OutputHandler{ - public: - virtual ~OutputHandler(); - virtual void send(AMQFrame* frame) = 0; - }; - -} -} - - -#endif diff --git a/cpp/common/framing/inc/ProtocolInitiation.h b/cpp/common/framing/inc/ProtocolInitiation.h deleted file mode 100644 index ab9734e6b3..0000000000 --- a/cpp/common/framing/inc/ProtocolInitiation.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "amqp_types.h" -#include "Buffer.h" -#include "AMQDataBlock.h" - -#ifndef _ProtocolInitiation_ -#define _ProtocolInitiation_ - -namespace qpid { -namespace framing { - -class ProtocolInitiation : virtual public AMQDataBlock -{ - u_int8_t pmajor; - u_int8_t pminor; - -public: - ProtocolInitiation(); - ProtocolInitiation(u_int8_t major, u_int8_t minor); - virtual ~ProtocolInitiation(); - virtual void encode(Buffer& buffer); - virtual bool decode(Buffer& buffer); - inline virtual u_int32_t size() const { return 8; } - inline u_int8_t getMajor(){ return pmajor; } - inline u_int8_t getMinor(){ return pminor; } -}; - -} -} - - -#endif diff --git a/cpp/common/framing/inc/Value.h b/cpp/common/framing/inc/Value.h deleted file mode 100644 index fe939e8758..0000000000 --- a/cpp/common/framing/inc/Value.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include <iostream> -#include <vector> -#include "amqp_types.h" -#include "FieldTable.h" - -#ifndef _Value_ -#define _Value_ - -namespace qpid { -namespace framing { - -class Buffer; - -/** - * Represents a decimal value. - * No arithmetic functionality for now, we only care about encoding/decoding. - */ -struct Decimal { - u_int32_t value; - u_int8_t decimals; - - Decimal(u_int32_t value_=0, u_int8_t decimals_=0) : value(value_), decimals(decimals_) {} - bool operator==(const Decimal& d) const { - return decimals == d.decimals && value == d.value; - } - bool operator!=(const Decimal& d) const { return !(*this == d); } -}; - -std::ostream& operator<<(std::ostream& out, const Decimal& d); - -/** - * Polymorpic base class for values. - */ -class Value { - public: - virtual ~Value(); - virtual u_int32_t size() const = 0; - virtual char getType() const = 0; - virtual void encode(Buffer& buffer) = 0; - virtual void decode(Buffer& buffer) = 0; - virtual bool operator==(const Value&) const = 0; - bool operator!=(const Value& v) const { return !(*this == v); } - virtual void print(std::ostream& out) const = 0; - - /** Create a new value by decoding from the buffer */ - static std::auto_ptr<Value> decode_value(Buffer& buffer); -}; - -std::ostream& operator<<(std::ostream& out, const Value& d); - - -/** - * Template for common operations on Value sub-classes. - */ -template <class T> -class ValueOps : public Value -{ - protected: - T value; - public: - ValueOps() {} - ValueOps(const T& v) : value(v) {} - const T& getValue() const { return value; } - T& getValue() { return value; } - - virtual bool operator==(const Value& v) const { - const ValueOps<T>* vo = dynamic_cast<const ValueOps<T>*>(&v); - if (vo == 0) return false; - else return value == vo->value; - } - - void print(std::ostream& out) const { out << value; } -}; - - -class StringValue : public ValueOps<std::string> { - public: - StringValue(const std::string& v) : ValueOps<std::string>(v) {} - StringValue() {} - virtual u_int32_t size() const { return 4 + value.length(); } - virtual char getType() const { return 'S'; } - virtual void encode(Buffer& buffer); - virtual void decode(Buffer& buffer); -}; - -class IntegerValue : public ValueOps<int> { - public: - IntegerValue(int v) : ValueOps<int>(v) {} - IntegerValue(){} - virtual u_int32_t size() const { return 4; } - virtual char getType() const { return 'I'; } - virtual void encode(Buffer& buffer); - virtual void decode(Buffer& buffer); -}; - -class TimeValue : public ValueOps<u_int64_t> { - public: - TimeValue(u_int64_t v) : ValueOps<u_int64_t>(v){} - TimeValue(){} - virtual u_int32_t size() const { return 8; } - virtual char getType() const { return 'T'; } - virtual void encode(Buffer& buffer); - virtual void decode(Buffer& buffer); -}; - -class DecimalValue : public ValueOps<Decimal> { - public: - DecimalValue(const Decimal& d) : ValueOps<Decimal>(d) {} - DecimalValue(u_int32_t value_=0, u_int8_t decimals_=0) : - ValueOps<Decimal>(Decimal(value_, decimals_)){} - virtual u_int32_t size() const { return 5; } - virtual char getType() const { return 'D'; } - virtual void encode(Buffer& buffer); - virtual void decode(Buffer& buffer); -}; - - -class FieldTableValue : public ValueOps<FieldTable> { - public: - FieldTableValue(const FieldTable& v) : ValueOps<FieldTable>(v){} - FieldTableValue(){} - virtual u_int32_t size() const { return 4 + value.size(); } - virtual char getType() const { return 'F'; } - virtual void encode(Buffer& buffer); - virtual void decode(Buffer& buffer); -}; - -class EmptyValue : public Value { - public: - ~EmptyValue(); - virtual u_int32_t size() const { return 0; } - virtual char getType() const { return 0; } - virtual void encode(Buffer& ) {} - virtual void decode(Buffer& ) {} - virtual bool operator==(const Value& v) const { - return dynamic_cast<const EmptyValue*>(&v); - } - virtual void print(std::ostream& out) const; -}; - -}} // qpid::framing - -#endif diff --git a/cpp/common/framing/inc/amqp_framing.h b/cpp/common/framing/inc/amqp_framing.h deleted file mode 100644 index adb0045ee5..0000000000 --- a/cpp/common/framing/inc/amqp_framing.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "amqp_types.h" -#include "AMQFrame.h" -#include "AMQBody.h" -#include "BodyHandler.h" -#include "AMQMethodBody.h" -#include "AMQHeaderBody.h" -#include "AMQContentBody.h" -#include "AMQHeartbeatBody.h" -#include "amqp_methods.h" -#include "InputHandler.h" -#include "OutputHandler.h" -#include "InitiationHandler.h" -#include "ProtocolInitiation.h" -#include "BasicHeaderProperties.h" diff --git a/cpp/common/framing/inc/amqp_types.h b/cpp/common/framing/inc/amqp_types.h deleted file mode 100644 index 6f8ef0862a..0000000000 --- a/cpp/common/framing/inc/amqp_types.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include <string> -#ifdef _WINDOWS -#include "windows.h" -typedef unsigned char u_int8_t; -typedef unsigned short u_int16_t; -typedef unsigned int u_int32_t; -typedef unsigned __int64 u_int64_t; -#endif -#ifndef _WINDOWS -#include "sys/types.h" -#endif - -#ifndef AMQP_TYPES_H -#define AMQP_TYPES_H - - -typedef std::string string; - -#endif diff --git a/cpp/common/framing/src/AMQBody.cpp b/cpp/common/framing/src/AMQBody.cpp deleted file mode 100644 index 08f0b1d7ca..0000000000 --- a/cpp/common/framing/src/AMQBody.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include "AMQBody.h" -#include <iostream> - -std::ostream& qpid::framing::operator<<(std::ostream& out, const qpid::framing::AMQBody& body) -{ - body.print(out); - return out; -} - - -qpid::framing::AMQBody::~AMQBody() {} - -void qpid::framing::AMQBody::print(std::ostream& out) const { - out << "unknown body"; -} diff --git a/cpp/common/framing/src/AMQContentBody.cpp b/cpp/common/framing/src/AMQContentBody.cpp deleted file mode 100644 index 1be8867d53..0000000000 --- a/cpp/common/framing/src/AMQContentBody.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "AMQContentBody.h" -#include <iostream> - -qpid::framing::AMQContentBody::AMQContentBody(){ -} - -qpid::framing::AMQContentBody::AMQContentBody(const string& _data) : data(_data){ -} - -u_int32_t qpid::framing::AMQContentBody::size() const{ - return data.size(); -} -void qpid::framing::AMQContentBody::encode(Buffer& buffer) const{ - buffer.putRawData(data); -} -void qpid::framing::AMQContentBody::decode(Buffer& buffer, u_int32_t _size){ - buffer.getRawData(data, _size); -} - -void qpid::framing::AMQContentBody::print(std::ostream& out) const -{ - out << "content (" << size() << " bytes)"; -} diff --git a/cpp/common/framing/src/AMQFrame.cpp b/cpp/common/framing/src/AMQFrame.cpp deleted file mode 100644 index 487ab1a443..0000000000 --- a/cpp/common/framing/src/AMQFrame.cpp +++ /dev/null @@ -1,115 +0,0 @@ - -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "AMQFrame.h" -#include "QpidError.h" - -using namespace qpid::framing; - -AMQFrame::AMQFrame(){} - -AMQFrame::AMQFrame(u_int16_t _channel, AMQBody* _body) : channel(_channel), body(_body){} - -AMQFrame::AMQFrame(u_int16_t _channel, AMQBody::shared_ptr& _body) : channel(_channel), body(_body){} - -AMQFrame::~AMQFrame(){ -} - -u_int16_t AMQFrame::getChannel(){ - return channel; -} - -AMQBody::shared_ptr& AMQFrame::getBody(){ - return body; -} - -void AMQFrame::encode(Buffer& buffer) -{ - buffer.putOctet(body->type()); - buffer.putShort(channel); - buffer.putLong(body->size()); - body->encode(buffer); - buffer.putOctet(0xCE); -} - -AMQBody::shared_ptr createMethodBody(Buffer& buffer){ - u_int16_t classId = buffer.getShort(); - u_int16_t methodId = buffer.getShort(); - AMQBody::shared_ptr body(createAMQMethodBody(classId, methodId)); - return body; -} - -u_int32_t AMQFrame::size() const{ - if(!body.get()) THROW_QPID_ERROR(INTERNAL_ERROR, "Attempt to get size of frame with no body set!"); - return 1/*type*/ + 2/*channel*/ + 4/*body size*/ + body->size() + 1/*0xCE*/; -} - -bool AMQFrame::decode(Buffer& buffer) -{ - if(buffer.available() < 7) return false; - buffer.record(); - u_int32_t bufSize = decodeHead(buffer); - - if(buffer.available() < bufSize + 1){ - buffer.restore(); - return false; - } - decodeBody(buffer, bufSize); - u_int8_t end = buffer.getOctet(); - if(end != 0xCE) THROW_QPID_ERROR(FRAMING_ERROR, "Frame end not found"); - return true; -} - -u_int32_t AMQFrame::decodeHead(Buffer& buffer){ - type = buffer.getOctet(); - channel = buffer.getShort(); - return buffer.getLong(); -} - -void AMQFrame::decodeBody(Buffer& buffer, uint32_t bufSize) -{ - switch(type) - { - case METHOD_BODY: - body = createMethodBody(buffer); - break; - case HEADER_BODY: - body = AMQBody::shared_ptr(new AMQHeaderBody()); - break; - case CONTENT_BODY: - body = AMQBody::shared_ptr(new AMQContentBody()); - break; - case HEARTBEAT_BODY: - body = AMQBody::shared_ptr(new AMQHeartbeatBody()); - break; - default: - string msg("Unknown body type: "); - msg += type; - THROW_QPID_ERROR(FRAMING_ERROR, msg); - } - body->decode(buffer, bufSize); -} - -std::ostream& qpid::framing::operator<<(std::ostream& out, const AMQFrame& t){ - out << "Frame[channel=" << t.channel << "; "; - if (t.body.get() == 0) out << "empty"; - else out << *t.body; - out << "]"; - return out; -} - diff --git a/cpp/common/framing/src/AMQHeaderBody.cpp b/cpp/common/framing/src/AMQHeaderBody.cpp deleted file mode 100644 index dce5f1fd54..0000000000 --- a/cpp/common/framing/src/AMQHeaderBody.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "AMQHeaderBody.h" -#include "QpidError.h" -#include "BasicHeaderProperties.h" - -qpid::framing::AMQHeaderBody::AMQHeaderBody(int classId) : weight(0), contentSize(0){ - createProperties(classId); -} - -qpid::framing::AMQHeaderBody::AMQHeaderBody() : properties(0), weight(0), contentSize(0){ -} - -qpid::framing::AMQHeaderBody::~AMQHeaderBody(){ - delete properties; -} - -u_int32_t qpid::framing::AMQHeaderBody::size() const{ - return 12 + properties->size(); -} - -void qpid::framing::AMQHeaderBody::encode(Buffer& buffer) const { - buffer.putShort(properties->classId()); - buffer.putShort(weight); - buffer.putLongLong(contentSize); - properties->encode(buffer); -} - -void qpid::framing::AMQHeaderBody::decode(Buffer& buffer, u_int32_t bufSize){ - u_int16_t classId = buffer.getShort(); - weight = buffer.getShort(); - contentSize = buffer.getLongLong(); - createProperties(classId); - properties->decode(buffer, bufSize - 12); -} - -void qpid::framing::AMQHeaderBody::createProperties(int classId){ - switch(classId){ - case BASIC: - properties = new qpid::framing::BasicHeaderProperties(); - break; - default: - THROW_QPID_ERROR(FRAMING_ERROR, "Unknown header class"); - } -} - -void qpid::framing::AMQHeaderBody::print(std::ostream& out) const -{ - out << "header, content_size=" << getContentSize() - << " (" << size() << " bytes)" << ", headers=" ; - // TODO aconway 2006-09-26: Hack to see headers. - // Should write proper op << for BasicHeaderProperties. - // - const BasicHeaderProperties* props = - dynamic_cast<const BasicHeaderProperties*>(getProperties()); - // TODO aconway 2006-09-26: Lose the static cast, fix BasicHeaderProperties - if (props) out << const_cast<BasicHeaderProperties*>(props)->getHeaders(); -} diff --git a/cpp/common/framing/src/AMQHeartbeatBody.cpp b/cpp/common/framing/src/AMQHeartbeatBody.cpp deleted file mode 100644 index 15cbfeda48..0000000000 --- a/cpp/common/framing/src/AMQHeartbeatBody.cpp +++ /dev/null @@ -1,26 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include "AMQHeartbeatBody.h" -#include <iostream> - -qpid::framing::AMQHeartbeatBody::~AMQHeartbeatBody() {} - -void qpid::framing::AMQHeartbeatBody::print(std::ostream& out) const { - out << "heartbeat"; -} diff --git a/cpp/common/framing/src/AMQMethodBody.cpp b/cpp/common/framing/src/AMQMethodBody.cpp deleted file mode 100644 index 7455050377..0000000000 --- a/cpp/common/framing/src/AMQMethodBody.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "AMQMethodBody.h" -#include "QpidError.h" - -void qpid::framing::AMQMethodBody::encode(Buffer& buffer) const{ - buffer.putShort(amqpClassId()); - buffer.putShort(amqpMethodId()); - encodeContent(buffer); -} - -void qpid::framing::AMQMethodBody::decode(Buffer& buffer, u_int32_t /*size*/){ - decodeContent(buffer); -} - -bool qpid::framing::AMQMethodBody::match(AMQMethodBody* other) const{ - return other != 0 && other->amqpClassId() == amqpClassId() && other->amqpMethodId() == amqpMethodId(); -} - -void qpid::framing::AMQMethodBody::invoke(AMQP_ServerOperations& /*target*/, u_int16_t /*channel*/){ - THROW_QPID_ERROR(PROTOCOL_ERROR, "Method not supported by AMQP Server."); -} - - -std::ostream& qpid::framing::operator<<(std::ostream& out, const AMQMethodBody& m){ - m.print(out); - return out; -} diff --git a/cpp/common/framing/src/BasicHeaderProperties.cpp b/cpp/common/framing/src/BasicHeaderProperties.cpp deleted file mode 100644 index c9153665d5..0000000000 --- a/cpp/common/framing/src/BasicHeaderProperties.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "BasicHeaderProperties.h" - -//TODO: This could be easily generated from the spec - -qpid::framing::BasicHeaderProperties::BasicHeaderProperties() : deliveryMode(0), priority(0), timestamp(0){} -qpid::framing::BasicHeaderProperties::~BasicHeaderProperties(){} - -u_int32_t qpid::framing::BasicHeaderProperties::size() const{ - u_int32_t bytes = 2;//flags - if(contentType.length() > 0) bytes += contentType.length() + 1; - if(contentEncoding.length() > 0) bytes += contentEncoding.length() + 1; - if(headers.count() > 0) bytes += headers.size(); - if(deliveryMode != 0) bytes += 1; - if(priority != 0) bytes += 1; - if(correlationId.length() > 0) bytes += correlationId.length() + 1; - if(replyTo.length() > 0) bytes += replyTo.length() + 1; - if(expiration.length() > 0) bytes += expiration.length() + 1; - if(messageId.length() > 0) bytes += messageId.length() + 1; - if(timestamp != 0) bytes += 8; - if(type.length() > 0) bytes += type.length() + 1; - if(userId.length() > 0) bytes += userId.length() + 1; - if(appId.length() > 0) bytes += appId.length() + 1; - if(clusterId.length() > 0) bytes += clusterId.length() + 1; - - return bytes; -} - -void qpid::framing::BasicHeaderProperties::encode(qpid::framing::Buffer& buffer) const{ - u_int16_t flags = getFlags(); - buffer.putShort(flags); - - if(contentType.length() > 0) buffer.putShortString(contentType); - if(contentEncoding.length() > 0) buffer.putShortString(contentEncoding); - if(headers.count() > 0) buffer.putFieldTable(headers); - if(deliveryMode != 0) buffer.putOctet(deliveryMode); - if(priority != 0) buffer.putOctet(priority); - if(correlationId.length() > 0) buffer.putShortString(correlationId); - if(replyTo.length() > 0) buffer.putShortString(replyTo); - if(expiration.length() > 0) buffer.putShortString(expiration); - if(messageId.length() > 0) buffer.putShortString(messageId); - if(timestamp != 0) buffer.putLongLong(timestamp);; - if(type.length() > 0) buffer.putShortString(type); - if(userId.length() > 0) buffer.putShortString(userId); - if(appId.length() > 0) buffer.putShortString(appId); - if(clusterId.length() > 0) buffer.putShortString(clusterId); -} - -void qpid::framing::BasicHeaderProperties::decode(qpid::framing::Buffer& buffer, u_int32_t /*size*/){ - u_int16_t flags = buffer.getShort(); - if(flags & (1 << 15)) buffer.getShortString(contentType); - if(flags & (1 << 14)) buffer.getShortString(contentEncoding); - if(flags & (1 << 13)) buffer.getFieldTable(headers); - if(flags & (1 << 12)) deliveryMode = buffer.getOctet(); - if(flags & (1 << 11)) priority = buffer.getOctet(); - if(flags & (1 << 10)) buffer.getShortString(correlationId); - if(flags & (1 << 9)) buffer.getShortString(replyTo); - if(flags & (1 << 8)) buffer.getShortString(expiration); - if(flags & (1 << 7)) buffer.getShortString(messageId); - if(flags & (1 << 6)) timestamp = buffer.getLongLong(); - if(flags & (1 << 5)) buffer.getShortString(type); - if(flags & (1 << 4)) buffer.getShortString(userId); - if(flags & (1 << 3)) buffer.getShortString(appId); - if(flags & (1 << 2)) buffer.getShortString(clusterId); -} - -u_int16_t qpid::framing::BasicHeaderProperties::getFlags() const{ - u_int16_t flags(0); - if(contentType.length() > 0) flags |= (1 << 15); - if(contentEncoding.length() > 0) flags |= (1 << 14); - if(headers.count() > 0) flags |= (1 << 13); - if(deliveryMode != 0) flags |= (1 << 12); - if(priority != 0) flags |= (1 << 11); - if(correlationId.length() > 0) flags |= (1 << 10); - if(replyTo.length() > 0) flags |= (1 << 9); - if(expiration.length() > 0) flags |= (1 << 8); - if(messageId.length() > 0) flags |= (1 << 7); - if(timestamp != 0) flags |= (1 << 6); - if(type.length() > 0) flags |= (1 << 5); - if(userId.length() > 0) flags |= (1 << 4); - if(appId.length() > 0) flags |= (1 << 3); - if(clusterId.length() > 0) flags |= (1 << 2); - return flags; -} diff --git a/cpp/common/framing/src/BodyHandler.cpp b/cpp/common/framing/src/BodyHandler.cpp deleted file mode 100644 index b428c62637..0000000000 --- a/cpp/common/framing/src/BodyHandler.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "memory.h" -#include "BodyHandler.h" - -using namespace qpid::framing; -using namespace std::tr1; - -BodyHandler::~BodyHandler() {} - -void BodyHandler::handleBody(AMQBody::shared_ptr& body){ - - switch(body->type()) - { - - case METHOD_BODY: - handleMethod(dynamic_pointer_cast<AMQMethodBody, AMQBody>(body)); - break; - - case HEADER_BODY: - handleHeader(dynamic_pointer_cast<AMQHeaderBody, AMQBody>(body)); - break; - - case CONTENT_BODY: - handleContent(dynamic_pointer_cast<AMQContentBody, AMQBody>(body)); - break; - - case HEARTBEAT_BODY: - handleHeartbeat(dynamic_pointer_cast<AMQHeartbeatBody, AMQBody>(body)); - break; - - default: - throw UnknownBodyType(body->type()); - } - -} diff --git a/cpp/common/framing/src/Buffer.cpp b/cpp/common/framing/src/Buffer.cpp deleted file mode 100644 index 87aa1df7e9..0000000000 --- a/cpp/common/framing/src/Buffer.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "Buffer.h" -#include "FieldTable.h" - -qpid::framing::Buffer::Buffer(u_int32_t _size) : size(_size), position(0), limit(_size){ - data = new char[size]; -} - -qpid::framing::Buffer::~Buffer(){ - delete[] data; -} - -void qpid::framing::Buffer::flip(){ - limit = position; - position = 0; -} - -void qpid::framing::Buffer::clear(){ - limit = size; - position = 0; -} - -void qpid::framing::Buffer::compact(){ - u_int32_t p = limit - position; - //copy p chars from position to 0 - memmove(data, data + position, p); - limit = size; - position = p; -} - -void qpid::framing::Buffer::record(){ - r_position = position; - r_limit = limit; -} - -void qpid::framing::Buffer::restore(){ - position = r_position; - limit = r_limit; -} - -u_int32_t qpid::framing::Buffer::available(){ - return limit - position; -} - -char* qpid::framing::Buffer::start(){ - return data + position; -} - -void qpid::framing::Buffer::move(u_int32_t bytes){ - position += bytes; -} - -void qpid::framing::Buffer::putOctet(u_int8_t i){ - data[position++] = i; -} - -void qpid::framing::Buffer::putShort(u_int16_t i){ - u_int16_t b = i; - data[position++] = (u_int8_t) (0xFF & (b >> 8)); - data[position++] = (u_int8_t) (0xFF & b); -} - -void qpid::framing::Buffer::putLong(u_int32_t i){ - u_int32_t b = i; - data[position++] = (u_int8_t) (0xFF & (b >> 24)); - data[position++] = (u_int8_t) (0xFF & (b >> 16)); - data[position++] = (u_int8_t) (0xFF & (b >> 8)); - data[position++] = (u_int8_t) (0xFF & b); -} - -void qpid::framing::Buffer::putLongLong(u_int64_t i){ - u_int32_t hi = i >> 32; - u_int32_t lo = i; - putLong(hi); - putLong(lo); -} - -u_int8_t qpid::framing::Buffer::getOctet(){ - return (u_int8_t) data[position++]; -} - -u_int16_t qpid::framing::Buffer::getShort(){ - u_int16_t hi = (unsigned char) data[position++]; - hi = hi << 8; - hi |= (unsigned char) data[position++]; - return hi; -} - -u_int32_t qpid::framing::Buffer::getLong(){ - u_int32_t a = (unsigned char) data[position++]; - u_int32_t b = (unsigned char) data[position++]; - u_int32_t c = (unsigned char) data[position++]; - u_int32_t d = (unsigned char) data[position++]; - a = a << 24; - a |= b << 16; - a |= c << 8; - a |= d; - return a; -} - -u_int64_t qpid::framing::Buffer::getLongLong(){ - u_int64_t hi = getLong(); - u_int64_t lo = getLong(); - hi = hi << 32; - return hi | lo; -} - - -void qpid::framing::Buffer::putShortString(const string& s){ - u_int8_t len = s.length(); - putOctet(len); - s.copy(data + position, len); - position += len; -} - -void qpid::framing::Buffer::putLongString(const string& s){ - u_int32_t len = s.length(); - putLong(len); - s.copy(data + position, len); - position += len; -} - -void qpid::framing::Buffer::getShortString(string& s){ - u_int8_t len = getOctet(); - s.assign(data + position, len); - position += len; -} - -void qpid::framing::Buffer::getLongString(string& s){ - u_int32_t len = getLong(); - s.assign(data + position, len); - position += len; -} - -void qpid::framing::Buffer::putFieldTable(const FieldTable& t){ - t.encode(*this); -} - -void qpid::framing::Buffer::getFieldTable(FieldTable& t){ - t.decode(*this); -} - -void qpid::framing::Buffer::putRawData(const string& s){ - u_int32_t len = s.length(); - s.copy(data + position, len); - position += len; -} - -void qpid::framing::Buffer::getRawData(string& s, u_int32_t len){ - s.assign(data + position, len); - position += len; -} diff --git a/cpp/common/framing/src/FieldTable.cpp b/cpp/common/framing/src/FieldTable.cpp deleted file mode 100644 index 088c8fb500..0000000000 --- a/cpp/common/framing/src/FieldTable.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "FieldTable.h" -#include "QpidError.h" -#include "Buffer.h" -#include "Value.h" -#include <assert.h> - -namespace qpid { -namespace framing { - -FieldTable::~FieldTable() {} - -u_int32_t FieldTable::size() const { - u_int32_t len(4); - for(ValueMap::const_iterator i = values.begin(); i != values.end(); ++i) { - // 2 = shortstr_len_byyte + type_char_byte - len += 2 + (i->first).size() + (i->second)->size(); - } - return len; -} - -int FieldTable::count() const { - return values.size(); -} - -namespace -{ -std::ostream& operator<<(std::ostream& out, const FieldTable::ValueMap::value_type& i) { - return out << i.first << ":" << *i.second; -} -} - -std::ostream& operator<<(std::ostream& out, const FieldTable& t) { - out << "field_table{"; - FieldTable::ValueMap::const_iterator i = t.getMap().begin(); - if (i != t.getMap().end()) out << *i++; - while (i != t.getMap().end()) - { - out << "," << *i++; - } - return out << "}"; -} - -void FieldTable::setString(const std::string& name, const std::string& value){ - values[name] = ValuePtr(new StringValue(value)); -} - -void FieldTable::setInt(const std::string& name, int value){ - values[name] = ValuePtr(new IntegerValue(value)); -} - -void FieldTable::setTimestamp(const std::string& name, u_int64_t value){ - values[name] = ValuePtr(new TimeValue(value)); -} - -void FieldTable::setTable(const std::string& name, const FieldTable& value){ - values[name] = ValuePtr(new FieldTableValue(value)); -} - -namespace { -template <class T> T default_value() { return T(); } -template <> int default_value<int>() { return 0; } -template <> u_int64_t default_value<u_int64_t>() { return 0; } -} - -template <class T> -T FieldTable::getValue(const std::string& name) const -{ - ValueMap::const_iterator i = values.find(name); - if (i == values.end()) return default_value<T>(); - const ValueOps<T> *vt = dynamic_cast<const ValueOps<T>*>(i->second.get()); - return vt->getValue(); -} - -std::string FieldTable::getString(const std::string& name) const { - return getValue<std::string>(name); -} - -int FieldTable::getInt(const std::string& name) const { - return getValue<int>(name); -} - -u_int64_t FieldTable::getTimestamp(const std::string& name) const { - return getValue<u_int64_t>(name); -} - -void FieldTable::getTable(const std::string& name, FieldTable& value) const { - value = getValue<FieldTable>(name); -} - -void FieldTable::encode(Buffer& buffer) const{ - buffer.putLong(size() - 4); - for (ValueMap::const_iterator i = values.begin(); i!=values.end(); ++i) { - buffer.putShortString(i->first); - buffer.putOctet(i->second->getType()); - i->second->encode(buffer); - } -} - -void FieldTable::decode(Buffer& buffer){ - u_int32_t len = buffer.getLong(); - u_int32_t available = buffer.available(); - if (available < len) - THROW_QPID_ERROR(FRAMING_ERROR, "Not enough data for field table."); - u_int32_t leftover = available - len; - while(buffer.available() > leftover){ - std::string name; - buffer.getShortString(name); - std::auto_ptr<Value> value(Value::decode_value(buffer)); - values[name] = ValuePtr(value.release()); - } -} - - -bool FieldTable::operator==(const FieldTable& x) const { - if (values.size() != x.values.size()) return false; - for (ValueMap::const_iterator i = values.begin(); i != values.end(); ++i) { - ValueMap::const_iterator j = x.values.find(i->first); - if (j == x.values.end()) return false; - if (*(i->second) != *(j->second)) return false; - } - return true; -} - -void FieldTable::erase(const std::string& name) -{ - values.erase(values.find(name)); -} - -} -} diff --git a/cpp/common/framing/src/InitiationHandler.cpp b/cpp/common/framing/src/InitiationHandler.cpp deleted file mode 100644 index 9c18facf44..0000000000 --- a/cpp/common/framing/src/InitiationHandler.cpp +++ /dev/null @@ -1,21 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include "InitiationHandler.h" - -qpid::framing::InitiationHandler::~InitiationHandler() {} diff --git a/cpp/common/framing/src/InputHandler.cpp b/cpp/common/framing/src/InputHandler.cpp deleted file mode 100644 index 7116caa24a..0000000000 --- a/cpp/common/framing/src/InputHandler.cpp +++ /dev/null @@ -1,21 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include "InputHandler.h" - -qpid::framing::InputHandler::~InputHandler() {} diff --git a/cpp/common/framing/src/OutputHandler.cpp b/cpp/common/framing/src/OutputHandler.cpp deleted file mode 100644 index 8d99b4ef92..0000000000 --- a/cpp/common/framing/src/OutputHandler.cpp +++ /dev/null @@ -1,21 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include "OutputHandler.h" - -qpid::framing::OutputHandler::~OutputHandler() {} diff --git a/cpp/common/framing/src/ProtocolInitiation.cpp b/cpp/common/framing/src/ProtocolInitiation.cpp deleted file mode 100644 index 6806d73b55..0000000000 --- a/cpp/common/framing/src/ProtocolInitiation.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "ProtocolInitiation.h" - -qpid::framing::ProtocolInitiation::ProtocolInitiation(){} - -qpid::framing::ProtocolInitiation::ProtocolInitiation(u_int8_t _major, u_int8_t _minor) : pmajor(_major), pminor(_minor){} - -qpid::framing::ProtocolInitiation::~ProtocolInitiation(){} - -void qpid::framing::ProtocolInitiation::encode(Buffer& buffer){ - buffer.putOctet('A'); - buffer.putOctet('M'); - buffer.putOctet('Q'); - buffer.putOctet('P'); - buffer.putOctet(1);//class - buffer.putOctet(1);//instance - buffer.putOctet(pmajor); - buffer.putOctet(pminor); -} - -bool qpid::framing::ProtocolInitiation::decode(Buffer& buffer){ - if(buffer.available() >= 8){ - buffer.getOctet();//A - buffer.getOctet();//M - buffer.getOctet();//Q - buffer.getOctet();//P - buffer.getOctet();//class - buffer.getOctet();//instance - pmajor = buffer.getOctet(); - pminor = buffer.getOctet(); - return true; - }else{ - return false; - } -} - -//TODO: this should prbably be generated from the spec at some point to keep the version numbers up to date diff --git a/cpp/common/framing/src/Value.cpp b/cpp/common/framing/src/Value.cpp deleted file mode 100644 index 1c210fdb12..0000000000 --- a/cpp/common/framing/src/Value.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "Value.h" -#include "Buffer.h" -#include "FieldTable.h" -#include "QpidError.h" - -namespace qpid { -namespace framing { - -Value::~Value() {} - -void StringValue::encode(Buffer& buffer){ - buffer.putLongString(value); -} -void StringValue::decode(Buffer& buffer){ - buffer.getLongString(value); -} - -void IntegerValue::encode(Buffer& buffer){ - buffer.putLong((u_int32_t) value); -} -void IntegerValue::decode(Buffer& buffer){ - value = buffer.getLong(); -} - -void TimeValue::encode(Buffer& buffer){ - buffer.putLongLong(value); -} -void TimeValue::decode(Buffer& buffer){ - value = buffer.getLongLong(); -} - -void DecimalValue::encode(Buffer& buffer){ - buffer.putOctet(value.decimals); - buffer.putLong(value.value); -} -void DecimalValue::decode(Buffer& buffer){ - value = Decimal(buffer.getLong(), buffer.getOctet()); -} - -void FieldTableValue::encode(Buffer& buffer){ - buffer.putFieldTable(value); -} -void FieldTableValue::decode(Buffer& buffer){ - buffer.getFieldTable(value); -} - -std::auto_ptr<Value> Value::decode_value(Buffer& buffer) -{ - std::auto_ptr<Value> value; - u_int8_t type = buffer.getOctet(); - switch(type){ - case 'S': - value.reset(new StringValue()); - break; - case 'I': - value.reset(new IntegerValue()); - break; - case 'D': - value.reset(new DecimalValue()); - break; - case 'T': - value.reset(new TimeValue()); - break; - case 'F': - value.reset(new FieldTableValue()); - break; - default: - THROW_QPID_ERROR(FRAMING_ERROR, "Unknown field table value type"); - } - value->decode(buffer); - return value; -} - -EmptyValue::~EmptyValue() {} - -void EmptyValue::print(std::ostream& out) const -{ - out << "<empty field value>"; -} - -std::ostream& operator<<(std::ostream& out, const Value& v) { - v.print(out); - return out; -} - -std::ostream& operator<<(std::ostream& out, const Decimal& d) -{ - return out << "Decimal(" << d.value << "," << d.decimals << ")"; -} - -}} - - - diff --git a/cpp/common/framing/test/BodyHandlerTest.cpp b/cpp/common/framing/test/BodyHandlerTest.cpp deleted file mode 100644 index 1cad6afe02..0000000000 --- a/cpp/common/framing/test/BodyHandlerTest.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include <iostream> -#include "amqp_framing.h" -#include "qpid_test_plugin.h" -using namespace qpid::framing; - -class BodyHandlerTest : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(BodyHandlerTest); - CPPUNIT_TEST(testMethod); - CPPUNIT_TEST(testHeader); - CPPUNIT_TEST(testContent); - CPPUNIT_TEST(testHeartbeat); - CPPUNIT_TEST_SUITE_END(); -private: - - class TestBodyHandler : public BodyHandler{ - AMQMethodBody* const method; - AMQHeaderBody* const header; - AMQContentBody* const content; - AMQHeartbeatBody* const heartbeat; - - public: - - TestBodyHandler(AMQMethodBody* _method) : method(_method), header(0), content(0), heartbeat(0){} - TestBodyHandler(AMQHeaderBody* _header) : method(0), header(_header), content(0), heartbeat(0){} - TestBodyHandler(AMQContentBody* _content) : method(0), header(0), content(_content), heartbeat(0){} - TestBodyHandler(AMQHeartbeatBody* _heartbeat) : method(0), header(0), content(0), heartbeat(_heartbeat){} - - virtual void handleMethod(AMQMethodBody::shared_ptr body){ - CPPUNIT_ASSERT(method); - CPPUNIT_ASSERT_EQUAL(method, body.get()); - } - virtual void handleHeader(AMQHeaderBody::shared_ptr body){ - CPPUNIT_ASSERT(header); - CPPUNIT_ASSERT_EQUAL(header, body.get()); - } - virtual void handleContent(AMQContentBody::shared_ptr body){ - CPPUNIT_ASSERT(content); - CPPUNIT_ASSERT_EQUAL(content, body.get()); - } - virtual void handleHeartbeat(AMQHeartbeatBody::shared_ptr body){ - CPPUNIT_ASSERT(heartbeat); - CPPUNIT_ASSERT_EQUAL(heartbeat, body.get()); - } - }; - -public: - - void testMethod() - { - AMQMethodBody* method = new QueueDeclareBody(); - AMQFrame frame(0, method); - TestBodyHandler handler(method); - handler.handleBody(frame.getBody()); - } - - void testHeader() - { - AMQHeaderBody* header = new AMQHeaderBody(); - AMQFrame frame(0, header); - TestBodyHandler handler(header); - handler.handleBody(frame.getBody()); - } - - void testContent() - { - AMQContentBody* content = new AMQContentBody(); - AMQFrame frame(0, content); - TestBodyHandler handler(content); - handler.handleBody(frame.getBody()); - } - - void testHeartbeat() - { - AMQHeartbeatBody* heartbeat = new AMQHeartbeatBody(); - AMQFrame frame(0, heartbeat); - TestBodyHandler handler(heartbeat); - handler.handleBody(frame.getBody()); - } -}; - - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(BodyHandlerTest); - diff --git a/cpp/common/framing/test/Makefile b/cpp/common/framing/test/Makefile deleted file mode 100644 index 487b8d537b..0000000000 --- a/cpp/common/framing/test/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# -# Copyright (c) 2006 The Apache Software Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -QPID_HOME = ../../../.. -LDLIBS=-lapr-1 -lcppunit $(COMMON_LIB) -INCLUDES=$(TEST_INCLUDES) -I ../generated -include ${QPID_HOME}/cpp/test_plugins.mk - diff --git a/cpp/common/framing/test/field_table_test.cpp b/cpp/common/framing/test/field_table_test.cpp deleted file mode 100644 index 535f7f4a08..0000000000 --- a/cpp/common/framing/test/field_table_test.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include <iostream> -#include "amqp_framing.h" -#include <qpid_test_plugin.h> - -using namespace qpid::framing; - -class FieldTableTest : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(FieldTableTest); - CPPUNIT_TEST(testMe); - CPPUNIT_TEST_SUITE_END(); - - public: - - void testMe() - { - FieldTable ft; - ft.setString("A", "BCDE"); - CPPUNIT_ASSERT_EQUAL(std::string("BCDE"), ft.getString("A")); - - Buffer buffer(100); - buffer.putFieldTable(ft); - buffer.flip(); - FieldTable ft2; - buffer.getFieldTable(ft2); - CPPUNIT_ASSERT_EQUAL(std::string("BCDE"), ft2.getString("A")); - - } -}; - - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(FieldTableTest); - diff --git a/cpp/common/framing/test/framing_test.cpp b/cpp/common/framing/test/framing_test.cpp deleted file mode 100644 index 8c69f8718a..0000000000 --- a/cpp/common/framing/test/framing_test.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "amqp_framing.h" -#include "ConnectionRedirectBody.h" -#include <iostream> -#include <sstream> -#include <qpid_test_plugin.h> -#include <typeinfo> - -using namespace qpid::framing; - -// TODO aconway 2006-09-12: Why do we need explicit qpid::framing:: below? - -template <class T> -std::string tostring(const T& x) -{ - std::ostringstream out; - out << x; - return out.str(); -} - -class FramingTest : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(FramingTest); - CPPUNIT_TEST(testBasicQosBody); - CPPUNIT_TEST(testConnectionSecureBody); - CPPUNIT_TEST(testConnectionRedirectBody); - CPPUNIT_TEST(testAccessRequestBody); - CPPUNIT_TEST(testBasicConsumeBody); - CPPUNIT_TEST(ConnectionRedirectBody); - CPPUNIT_TEST(BasicConsumeOkBody); - CPPUNIT_TEST_SUITE_END(); - - private: - Buffer buffer; - - public: - - FramingTest() : buffer(100) {} - - void testBasicQosBody() - { - BasicQosBody in(0xCAFEBABE, 0xABBA, true); - in.encodeContent(buffer); - buffer.flip(); - BasicQosBody out; - out.decodeContent(buffer); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } - - void testConnectionSecureBody() - { - std::string s = "security credential"; - ConnectionSecureBody in(s); - in.encodeContent(buffer); - buffer.flip(); - ConnectionSecureBody out; - out.decodeContent(buffer); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } - - void testConnectionRedirectBody() - { - std::string a = "hostA"; - std::string b = "hostB"; - qpid::framing::ConnectionRedirectBody in(a, b); - in.encodeContent(buffer); - buffer.flip(); - qpid::framing::ConnectionRedirectBody out; - out.decodeContent(buffer); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } - - void testAccessRequestBody() - { - std::string s = "text"; - AccessRequestBody in(s, true, false, true, false, true); - in.encodeContent(buffer); - buffer.flip(); - AccessRequestBody out; - out.decodeContent(buffer); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } - - void testBasicConsumeBody() - { - std::string q = "queue"; - std::string t = "tag"; - BasicConsumeBody in(0, q, t, false, true, false, false); - in.encodeContent(buffer); - buffer.flip(); - BasicConsumeBody out; - out.decodeContent(buffer); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } - - - void ConnectionRedirectBody() - { - std::string a = "hostA"; - std::string b = "hostB"; - AMQFrame in(999, new qpid::framing::ConnectionRedirectBody(a, b)); - in.encode(buffer); - buffer.flip(); - AMQFrame out; - out.decode(buffer); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } - - void BasicConsumeOkBody() - { - std::string s = "hostA"; - AMQFrame in(999, new qpid::framing::BasicConsumeOkBody(s)); - in.encode(buffer); - buffer.flip(); - AMQFrame out; - for(int i = 0; i < 5; i++){ - out.decode(buffer); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } - } -}; - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(FramingTest); - - - diff --git a/cpp/common/framing/test/header_test.cpp b/cpp/common/framing/test/header_test.cpp deleted file mode 100644 index f98dd5d108..0000000000 --- a/cpp/common/framing/test/header_test.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include <iostream> -#include "amqp_framing.h" -#include <qpid_test_plugin.h> - -using namespace qpid::framing; - -class HeaderTest : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(HeaderTest); - CPPUNIT_TEST(testGenericProperties); - CPPUNIT_TEST(testAllSpecificProperties); - CPPUNIT_TEST(testSomeSpecificProperties); - CPPUNIT_TEST_SUITE_END(); - -public: - - // TODO aconway 2006-09-12: Need more detailed tests, - // need tests to assert something! - // - void testGenericProperties() - { - AMQHeaderBody body(BASIC); - dynamic_cast<BasicHeaderProperties*>(body.getProperties())->getHeaders().setString("A", "BCDE"); - Buffer buffer(100); - - body.encode(buffer); - buffer.flip(); - AMQHeaderBody body2; - body2.decode(buffer, body.size()); - BasicHeaderProperties* props = - dynamic_cast<BasicHeaderProperties*>(body2.getProperties()); - CPPUNIT_ASSERT_EQUAL(std::string("BCDE"), - props->getHeaders().getString("A")); - } - - void testAllSpecificProperties(){ - string contentType("text/html"); - string contentEncoding("UTF8"); - u_int8_t deliveryMode(2); - u_int8_t priority(3); - string correlationId("abc"); - string replyTo("no-address"); - string expiration("why is this a string?"); - string messageId("xyz"); - u_int64_t timestamp(0xabcd); - string type("eh?"); - string userId("guest"); - string appId("just testing"); - string clusterId("no clustering required"); - - AMQHeaderBody body(BASIC); - BasicHeaderProperties* properties = - dynamic_cast<BasicHeaderProperties*>(body.getProperties()); - properties->setContentType(contentType); - properties->getHeaders().setString("A", "BCDE"); - properties->setDeliveryMode(deliveryMode); - properties->setPriority(priority); - properties->setCorrelationId(correlationId); - properties->setReplyTo(replyTo); - properties->setExpiration(expiration); - properties->setMessageId(messageId); - properties->setTimestamp(timestamp); - properties->setType(type); - properties->setUserId(userId); - properties->setAppId(appId); - properties->setClusterId(clusterId); - - Buffer buffer(10000); - body.encode(buffer); - buffer.flip(); - AMQHeaderBody temp; - temp.decode(buffer, body.size()); - properties = dynamic_cast<BasicHeaderProperties*>(temp.getProperties()); - - CPPUNIT_ASSERT_EQUAL(contentType, properties->getContentType()); - CPPUNIT_ASSERT_EQUAL(std::string("BCDE"), properties->getHeaders().getString("A")); - CPPUNIT_ASSERT_EQUAL(deliveryMode, properties->getDeliveryMode()); - CPPUNIT_ASSERT_EQUAL(priority, properties->getPriority()); - CPPUNIT_ASSERT_EQUAL(correlationId, properties->getCorrelationId()); - CPPUNIT_ASSERT_EQUAL(replyTo, properties->getReplyTo()); - CPPUNIT_ASSERT_EQUAL(expiration, properties->getExpiration()); - CPPUNIT_ASSERT_EQUAL(messageId, properties->getMessageId()); - CPPUNIT_ASSERT_EQUAL(timestamp, properties->getTimestamp()); - CPPUNIT_ASSERT_EQUAL(type, properties->getType()); - CPPUNIT_ASSERT_EQUAL(userId, properties->getUserId()); - CPPUNIT_ASSERT_EQUAL(appId, properties->getAppId()); - CPPUNIT_ASSERT_EQUAL(clusterId, properties->getClusterId()); - } - - void testSomeSpecificProperties(){ - string contentType("application/octet-stream"); - u_int8_t deliveryMode(5); - u_int8_t priority(6); - string expiration("Z"); - u_int64_t timestamp(0xabe4a34a); - - AMQHeaderBody body(BASIC); - BasicHeaderProperties* properties = - dynamic_cast<BasicHeaderProperties*>(body.getProperties()); - properties->setContentType(contentType); - properties->setDeliveryMode(deliveryMode); - properties->setPriority(priority); - properties->setExpiration(expiration); - properties->setTimestamp(timestamp); - - Buffer buffer(100); - body.encode(buffer); - buffer.flip(); - AMQHeaderBody temp; - temp.decode(buffer, body.size()); - properties = dynamic_cast<BasicHeaderProperties*>(temp.getProperties()); - - CPPUNIT_ASSERT_EQUAL(contentType, properties->getContentType()); - CPPUNIT_ASSERT_EQUAL((int) deliveryMode, (int) properties->getDeliveryMode()); - CPPUNIT_ASSERT_EQUAL((int) priority, (int) properties->getPriority()); - CPPUNIT_ASSERT_EQUAL(expiration, properties->getExpiration()); - CPPUNIT_ASSERT_EQUAL(timestamp, properties->getTimestamp()); - } -}; - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(HeaderTest); - |
