summaryrefslogtreecommitdiff
path: root/cpp/lib/common
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/lib/common')
-rw-r--r--cpp/lib/common/Makefile.am12
-rw-r--r--cpp/lib/common/framing/AMQFrame.cpp19
-rw-r--r--cpp/lib/common/framing/AMQFrame.h8
-rw-r--r--cpp/lib/common/framing/ChannelAdapter.cpp8
-rw-r--r--cpp/lib/common/framing/ChannelAdapter.h15
-rw-r--r--cpp/lib/common/framing/FramingContent.h6
-rw-r--r--cpp/lib/common/framing/MethodContext.cpp31
-rw-r--r--cpp/lib/common/framing/MethodContext.h8
-rw-r--r--cpp/lib/common/framing/ProtocolInitiation.cpp17
-rw-r--r--cpp/lib/common/framing/ProtocolInitiation.h4
-rw-r--r--cpp/lib/common/framing/ProtocolVersion.cpp35
-rw-r--r--cpp/lib/common/framing/ProtocolVersion.h26
-rw-r--r--cpp/lib/common/framing/ProtocolVersionException.h2
-rw-r--r--cpp/lib/common/framing/Proxy.cpp32
-rw-r--r--cpp/lib/common/framing/Proxy.h51
-rw-r--r--cpp/lib/common/framing/amqp_types.h9
-rw-r--r--cpp/lib/common/framing/amqp_types_full.h36
17 files changed, 239 insertions, 80 deletions
diff --git a/cpp/lib/common/Makefile.am b/cpp/lib/common/Makefile.am
index eefff79d6f..c44480bddf 100644
--- a/cpp/lib/common/Makefile.am
+++ b/cpp/lib/common/Makefile.am
@@ -63,6 +63,7 @@ libqpidcommon_la_SOURCES = \
$(framing)/AMQHeaderBody.cpp \
$(framing)/AMQHeartbeatBody.cpp \
$(framing)/AMQMethodBody.cpp \
+ $(framing)/MethodContext.cpp \
$(framing)/BasicHeaderProperties.cpp \
$(framing)/BodyHandler.cpp \
$(framing)/ChannelAdapter.cpp \
@@ -76,8 +77,8 @@ libqpidcommon_la_SOURCES = \
$(framing)/Requester.cpp \
$(framing)/Responder.cpp \
$(framing)/Value.cpp \
+ $(framing)/Proxy.cpp \
$(gen)/AMQP_ClientProxy.cpp \
- $(gen)/AMQP_HighestVersion.h \
$(gen)/AMQP_MethodVersionMap.cpp \
$(gen)/AMQP_ServerProxy.cpp \
Exception.cpp \
@@ -87,6 +88,7 @@ libqpidcommon_la_SOURCES = \
sys/Time.cpp
nobase_pkginclude_HEADERS = \
+ $(gen)/AMQP_HighestVersion.h \
$(platform_hdr) \
$(framing)/AMQBody.h \
$(framing)/AMQContentBody.h \
@@ -95,6 +97,7 @@ nobase_pkginclude_HEADERS = \
$(framing)/AMQHeaderBody.h \
$(framing)/AMQHeartbeatBody.h \
$(framing)/AMQMethodBody.h \
+ $(framing)/MethodContext.h \
$(framing)/BasicHeaderProperties.h \
$(framing)/BodyHandler.h \
$(framing)/ChannelAdapter.h \
@@ -111,6 +114,7 @@ nobase_pkginclude_HEADERS = \
$(framing)/Value.h \
$(framing)/amqp_framing.h \
$(framing)/amqp_types.h \
+ $(framing)/Proxy.h \
Exception.h \
ExceptionHolder.h \
QpidError.h \
@@ -121,9 +125,9 @@ nobase_pkginclude_HEADERS = \
sys/Monitor.h \
sys/Mutex.h \
sys/Runnable.h \
- sys/ConnectionOutputHandler.h \
- sys/ConnectionInputHandler.h \
- sys/ConnectionInputHandlerFactory.h \
+ sys/ConnectionOutputHandler.h \
+ sys/ConnectionInputHandler.h \
+ sys/ConnectionInputHandlerFactory.h \
sys/ShutdownHandler.h \
sys/Socket.h \
sys/Thread.h \
diff --git a/cpp/lib/common/framing/AMQFrame.cpp b/cpp/lib/common/framing/AMQFrame.cpp
index 9c5e295e22..4e061af2e1 100644
--- a/cpp/lib/common/framing/AMQFrame.cpp
+++ b/cpp/lib/common/framing/AMQFrame.cpp
@@ -26,19 +26,24 @@
#include "AMQRequestBody.h"
#include "AMQResponseBody.h"
-using namespace qpid::framing;
+
+namespace qpid {
+namespace framing {
+
AMQP_MethodVersionMap AMQFrame::versionMap;
-AMQFrame::AMQFrame(const qpid::framing::ProtocolVersion& _version):
+AMQFrame::AMQFrame(ProtocolVersion _version):
version(_version)
- {}
+ {
+ assert(version != ProtocolVersion(0,0));
+ }
-AMQFrame::AMQFrame(const qpid::framing::ProtocolVersion& _version, u_int16_t _channel, AMQBody* _body) :
+AMQFrame::AMQFrame(ProtocolVersion _version, u_int16_t _channel, AMQBody* _body) :
version(_version), channel(_channel), body(_body)
{}
-AMQFrame::AMQFrame(const qpid::framing::ProtocolVersion& _version, u_int16_t _channel, const AMQBody::shared_ptr& _body) :
+AMQFrame::AMQFrame(ProtocolVersion _version, u_int16_t _channel, const AMQBody::shared_ptr& _body) :
version(_version), channel(_channel), body(_body)
{}
@@ -119,7 +124,7 @@ void AMQFrame::decodeBody(Buffer& buffer, uint32_t size)
body->decode(buffer, size);
}
-std::ostream& qpid::framing::operator<<(std::ostream& out, const AMQFrame& t)
+std::ostream& operator<<(std::ostream& out, const AMQFrame& t)
{
out << "Frame[channel=" << t.channel << "; ";
if (t.body.get() == 0)
@@ -130,3 +135,5 @@ std::ostream& qpid::framing::operator<<(std::ostream& out, const AMQFrame& t)
return out;
}
+
+}} // namespace qpid::framing
diff --git a/cpp/lib/common/framing/AMQFrame.h b/cpp/lib/common/framing/AMQFrame.h
index 15b294a373..4e49b8871f 100644
--- a/cpp/lib/common/framing/AMQFrame.h
+++ b/cpp/lib/common/framing/AMQFrame.h
@@ -41,9 +41,9 @@ namespace framing {
class AMQFrame : public AMQDataBlock
{
public:
- AMQFrame(const qpid::framing::ProtocolVersion& _version = highestProtocolVersion);
- AMQFrame(const qpid::framing::ProtocolVersion& _version, u_int16_t channel, AMQBody* body);
- AMQFrame(const qpid::framing::ProtocolVersion& _version, u_int16_t channel, const AMQBody::shared_ptr& body);
+ AMQFrame(ProtocolVersion _version = highestProtocolVersion);
+ AMQFrame(ProtocolVersion _version, u_int16_t channel, AMQBody* body);
+ AMQFrame(ProtocolVersion _version, u_int16_t channel, const AMQBody::shared_ptr& body);
virtual ~AMQFrame();
virtual void encode(Buffer& buffer);
virtual bool decode(Buffer& buffer);
@@ -62,7 +62,7 @@ class AMQFrame : public AMQDataBlock
private:
static AMQP_MethodVersionMap versionMap;
- qpid::framing::ProtocolVersion version;
+ ProtocolVersion version;
u_int16_t channel;
u_int8_t type;
diff --git a/cpp/lib/common/framing/ChannelAdapter.cpp b/cpp/lib/common/framing/ChannelAdapter.cpp
index 53ab30faa0..40241660f2 100644
--- a/cpp/lib/common/framing/ChannelAdapter.cpp
+++ b/cpp/lib/common/framing/ChannelAdapter.cpp
@@ -19,6 +19,7 @@
#include "ChannelAdapter.h"
#include "AMQFrame.h"
+#include "Exception.h"
using boost::format;
@@ -26,7 +27,7 @@ namespace qpid {
namespace framing {
void ChannelAdapter::init(
- ChannelId i, OutputHandler& o, const ProtocolVersion& v)
+ ChannelId i, OutputHandler& o, ProtocolVersion v)
{
assertChannelNotOpen();
id = i;
@@ -34,13 +35,15 @@ void ChannelAdapter::init(
version = v;
}
-void ChannelAdapter::send(AMQBody::shared_ptr body) {
+RequestId ChannelAdapter::send(AMQBody::shared_ptr body) {
+ RequestId result = 0;
assertChannelOpen();
switch (body->type()) {
case REQUEST_BODY: {
AMQRequestBody::shared_ptr request =
boost::shared_polymorphic_downcast<AMQRequestBody>(body);
requester.sending(request->getData());
+ result = request->getData().requestId;
break;
}
case RESPONSE_BODY: {
@@ -51,6 +54,7 @@ void ChannelAdapter::send(AMQBody::shared_ptr body) {
}
}
out->send(new AMQFrame(getVersion(), getId(), body));
+ return result;
}
void ChannelAdapter::handleRequest(AMQRequestBody::shared_ptr request) {
diff --git a/cpp/lib/common/framing/ChannelAdapter.h b/cpp/lib/common/framing/ChannelAdapter.h
index c2eba2f4e9..9f654d9a5b 100644
--- a/cpp/lib/common/framing/ChannelAdapter.h
+++ b/cpp/lib/common/framing/ChannelAdapter.h
@@ -35,9 +35,8 @@ namespace framing {
class MethodContext;
/**
- * Base class for client and broker channel adapters.
+ * Base class for client and broker channels.
*
- * BodyHandler::handl*
* - receives frame bodies from the network.
* - Updates request/response data.
* - Dispatches requests with a MethodContext for responses.
@@ -55,21 +54,21 @@ class ChannelAdapter : public BodyHandler {
*@param output Processed frames are forwarded to this handler.
*/
ChannelAdapter(ChannelId id_=0, OutputHandler* out_=0,
- const ProtocolVersion& ver=ProtocolVersion())
+ ProtocolVersion ver=ProtocolVersion())
: id(id_), out(out_), version(ver) {}
/** Initialize the channel adapter. */
- void init(ChannelId, OutputHandler&, const ProtocolVersion&);
+ void init(ChannelId, OutputHandler&, ProtocolVersion);
ChannelId getId() const { return id; }
- const ProtocolVersion& getVersion() const { return version; }
+ ProtocolVersion getVersion() const { return version; }
/**
* Wrap body in a frame and send the frame.
* Takes ownership of body.
*/
- void send(AMQBody::shared_ptr body);
- void send(AMQBody* body) { send(AMQBody::shared_ptr(body)); }
+ RequestId send(AMQBody::shared_ptr body);
+ RequestId send(AMQBody* body) { return send(AMQBody::shared_ptr(body)); }
void handleMethod(boost::shared_ptr<qpid::framing::AMQMethodBody>);
void handleRequest(boost::shared_ptr<qpid::framing::AMQRequestBody>);
@@ -95,7 +94,7 @@ class ChannelAdapter : public BodyHandler {
ProtocolVersion version;
Requester requester;
Responder responder;
- RequestId requestInProgress; // TODO aconway 2007-01-24: use it.
+ RequestId requestInProgress;
};
}}
diff --git a/cpp/lib/common/framing/FramingContent.h b/cpp/lib/common/framing/FramingContent.h
index 0f4a4b8f64..cffd46ee24 100644
--- a/cpp/lib/common/framing/FramingContent.h
+++ b/cpp/lib/common/framing/FramingContent.h
@@ -27,9 +27,9 @@ class Content
void encode(Buffer& buffer) const;
void decode(Buffer& buffer);
size_t size() const;
- bool isInline() { return discriminator == INLINE; }
- bool isReference() { return discriminator == REFERENCE; }
- const string& getValue() { return value; }
+ bool isInline() const { return discriminator == INLINE; }
+ bool isReference() const { return discriminator == REFERENCE; }
+ const string& getValue() const { return value; }
friend std::ostream& operator<<(std::ostream&, const Content&);
};
diff --git a/cpp/lib/common/framing/MethodContext.cpp b/cpp/lib/common/framing/MethodContext.cpp
new file mode 100644
index 0000000000..73af73f8e5
--- /dev/null
+++ b/cpp/lib/common/framing/MethodContext.cpp
@@ -0,0 +1,31 @@
+/*
+ *
+ * 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 "MethodContext.h"
+#include "amqp_types.h"
+#include "AMQRequestBody.h"
+
+namespace qpid {
+namespace framing {
+
+RequestId MethodContext::getRequestId() const {
+ return boost::shared_polymorphic_downcast<AMQRequestBody>(methodBody)
+ ->getRequestId();
+}
+
+}} // namespace qpid::framing
diff --git a/cpp/lib/common/framing/MethodContext.h b/cpp/lib/common/framing/MethodContext.h
index afb499023d..3493924bf6 100644
--- a/cpp/lib/common/framing/MethodContext.h
+++ b/cpp/lib/common/framing/MethodContext.h
@@ -24,8 +24,6 @@
#include "OutputHandler.h"
#include "ProtocolVersion.h"
-#include <boost/shared_ptr.hpp>
-
namespace qpid {
namespace framing {
@@ -61,6 +59,12 @@ struct MethodContext
* It's also provides the request ID when constructing a response.
*/
BodyPtr methodBody;
+
+ /**
+ * Return methodBody's request ID.
+ * It is an error to call this if methodBody is not a request.
+ */
+ RequestId getRequestId() const;
};
// FIXME aconway 2007-02-01: Method context only required on Handler
diff --git a/cpp/lib/common/framing/ProtocolInitiation.cpp b/cpp/lib/common/framing/ProtocolInitiation.cpp
index 471f736a7d..c119b79d6d 100644
--- a/cpp/lib/common/framing/ProtocolInitiation.cpp
+++ b/cpp/lib/common/framing/ProtocolInitiation.cpp
@@ -20,15 +20,18 @@
*/
#include <ProtocolInitiation.h>
-qpid::framing::ProtocolInitiation::ProtocolInitiation(){}
+namespace qpid {
+namespace framing {
-qpid::framing::ProtocolInitiation::ProtocolInitiation(u_int8_t _major, u_int8_t _minor) : version(_major, _minor) {}
+ProtocolInitiation::ProtocolInitiation(){}
-qpid::framing::ProtocolInitiation::ProtocolInitiation(const qpid::framing::ProtocolVersion& p) : version(p) {}
+ProtocolInitiation::ProtocolInitiation(u_int8_t _major, u_int8_t _minor) : version(_major, _minor) {}
-qpid::framing::ProtocolInitiation::~ProtocolInitiation(){}
+ProtocolInitiation::ProtocolInitiation(ProtocolVersion p) : version(p) {}
-void qpid::framing::ProtocolInitiation::encode(Buffer& buffer){
+ProtocolInitiation::~ProtocolInitiation(){}
+
+void ProtocolInitiation::encode(Buffer& buffer){
buffer.putOctet('A');
buffer.putOctet('M');
buffer.putOctet('Q');
@@ -39,7 +42,7 @@ void qpid::framing::ProtocolInitiation::encode(Buffer& buffer){
buffer.putOctet(version.getMinor());
}
-bool qpid::framing::ProtocolInitiation::decode(Buffer& buffer){
+bool ProtocolInitiation::decode(Buffer& buffer){
if(buffer.available() >= 8){
buffer.getOctet();//A
buffer.getOctet();//M
@@ -56,3 +59,5 @@ bool qpid::framing::ProtocolInitiation::decode(Buffer& buffer){
}
//TODO: this should prbably be generated from the spec at some point to keep the version numbers up to date
+
+}} // namespace qpid::framing
diff --git a/cpp/lib/common/framing/ProtocolInitiation.h b/cpp/lib/common/framing/ProtocolInitiation.h
index 6b3dbac88d..fb5cb3abed 100644
--- a/cpp/lib/common/framing/ProtocolInitiation.h
+++ b/cpp/lib/common/framing/ProtocolInitiation.h
@@ -37,14 +37,14 @@ private:
public:
ProtocolInitiation();
ProtocolInitiation(u_int8_t major, u_int8_t minor);
- ProtocolInitiation(const ProtocolVersion& p);
+ ProtocolInitiation(ProtocolVersion p);
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() const { return version.getMajor(); }
inline u_int8_t getMinor() const { return version.getMinor(); }
- inline const ProtocolVersion& getVersion() const { return version; }
+ inline ProtocolVersion getVersion() const { return version; }
};
}
diff --git a/cpp/lib/common/framing/ProtocolVersion.cpp b/cpp/lib/common/framing/ProtocolVersion.cpp
index e65c8b79b8..fd4b1a645f 100644
--- a/cpp/lib/common/framing/ProtocolVersion.cpp
+++ b/cpp/lib/common/framing/ProtocolVersion.cpp
@@ -20,37 +20,9 @@
*/
#include <ProtocolVersion.h>
#include <sstream>
-#include "AMQP_HighestVersion.h"
using namespace qpid::framing;
-ProtocolVersion::ProtocolVersion() {
- *this = highestProtocolVersion;
-}
-
-ProtocolVersion::ProtocolVersion(u_int8_t _major, u_int8_t _minor) :
- major_(_major),
- minor_(_minor)
-{}
-
-ProtocolVersion::ProtocolVersion(const ProtocolVersion::ProtocolVersion& p):
- major_(p.major_),
- minor_(p.minor_)
-{}
-
-ProtocolVersion::~ProtocolVersion()
-{}
-
-bool ProtocolVersion::equals(u_int8_t _major, u_int8_t _minor) const
-{
- return major_ == _major && minor_ == _minor;
-}
-
-bool ProtocolVersion::equals(const ProtocolVersion::ProtocolVersion& p) const
-{
- return major_ == p.major_ && minor_ == p.minor_;
-}
-
const std::string ProtocolVersion::toString() const
{
std::stringstream ss;
@@ -58,10 +30,15 @@ const std::string ProtocolVersion::toString() const
return ss.str();
}
-ProtocolVersion::ProtocolVersion ProtocolVersion::operator=(const ProtocolVersion& p)
+ProtocolVersion& ProtocolVersion::operator=(ProtocolVersion p)
{
major_ = p.major_;
minor_ = p.minor_;
return *this;
}
+bool ProtocolVersion::operator==(ProtocolVersion p) const
+{
+ return major_ == p.major_ && minor_ == p.minor_;
+}
+
diff --git a/cpp/lib/common/framing/ProtocolVersion.h b/cpp/lib/common/framing/ProtocolVersion.h
index 6aba87c6f5..aa526aa293 100644
--- a/cpp/lib/common/framing/ProtocolVersion.h
+++ b/cpp/lib/common/framing/ProtocolVersion.h
@@ -35,19 +35,19 @@ private:
u_int8_t minor_;
public:
- ProtocolVersion();
- ProtocolVersion(u_int8_t _major, u_int8_t _minor);
- ProtocolVersion(const ProtocolVersion& p);
- virtual ~ProtocolVersion();
-
- inline u_int8_t getMajor() const { return major_; }
- inline void setMajor(u_int8_t major) { major_ = major; }
- inline u_int8_t getMinor() const { return minor_; }
- inline void setMinor(u_int8_t minor) { minor_ = minor; }
- virtual bool equals(u_int8_t _major, u_int8_t _minor) const;
- virtual bool equals(const ProtocolVersion& p) const;
- virtual const std::string toString() const;
- ProtocolVersion operator=(const ProtocolVersion& p);
+ ProtocolVersion(u_int8_t _major=0, u_int8_t _minor=0)
+ : major_(_major), minor_(_minor) {}
+
+ u_int8_t getMajor() const { return major_; }
+ void setMajor(u_int8_t major) { major_ = major; }
+ u_int8_t getMinor() const { return minor_; }
+ void setMinor(u_int8_t minor) { minor_ = minor; }
+ const std::string toString() const;
+
+ ProtocolVersion& operator=(ProtocolVersion p);
+
+ bool operator==(ProtocolVersion p) const;
+ bool operator!=(ProtocolVersion p) const { return ! (*this == p); }
};
} // namespace framing
diff --git a/cpp/lib/common/framing/ProtocolVersionException.h b/cpp/lib/common/framing/ProtocolVersionException.h
index aff0cd91d6..8e2de8b843 100644
--- a/cpp/lib/common/framing/ProtocolVersionException.h
+++ b/cpp/lib/common/framing/ProtocolVersionException.h
@@ -40,7 +40,7 @@ public:
template <class T>
ProtocolVersionException(
- const ProtocolVersion& ver, const T& msg) throw () : versionFound(ver)
+ ProtocolVersion ver, const T& msg) throw () : versionFound(ver)
{ init(boost::lexical_cast<std::string>(msg)); }
template <class T>
diff --git a/cpp/lib/common/framing/Proxy.cpp b/cpp/lib/common/framing/Proxy.cpp
new file mode 100644
index 0000000000..0b2a882a49
--- /dev/null
+++ b/cpp/lib/common/framing/Proxy.cpp
@@ -0,0 +1,32 @@
+/*
+ *
+ * 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 "Proxy.h"
+#include "ChannelAdapter.h"
+#include "ProtocolVersion.h"
+
+namespace qpid {
+namespace framing {
+
+Proxy::~Proxy() {}
+
+ProtocolVersion Proxy::getProtocolVersion() const {
+ return channel.getVersion();
+}
+
+}} // namespace qpid::framing
diff --git a/cpp/lib/common/framing/Proxy.h b/cpp/lib/common/framing/Proxy.h
new file mode 100644
index 0000000000..8ed46ed748
--- /dev/null
+++ b/cpp/lib/common/framing/Proxy.h
@@ -0,0 +1,51 @@
+#ifndef _framing_Proxy_h
+#define _framing_Proxy_h
+
+/*
+ *
+ * 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 "ProtocolVersion.h"
+
+namespace qpid {
+namespace framing {
+
+class ChannelAdapter;
+class FieldTable;
+class Content;
+
+/**
+ * Base class for proxies.
+ */
+class Proxy
+{
+
+ public:
+ Proxy(ChannelAdapter& ch) : channel(ch) {}
+ virtual ~Proxy();
+
+ ProtocolVersion getProtocolVersion() const;
+
+ protected:
+ ChannelAdapter& channel;
+};
+
+}} // namespace qpid::framing
+
+
+
+#endif /*!_framing_Proxy_h*/
diff --git a/cpp/lib/common/framing/amqp_types.h b/cpp/lib/common/framing/amqp_types.h
index 777d9e7bc5..2f56cb877e 100644
--- a/cpp/lib/common/framing/amqp_types.h
+++ b/cpp/lib/common/framing/amqp_types.h
@@ -20,6 +20,12 @@
* under the License.
*
*/
+
+/** \file
+ * Type definitions and forward declarations of all types used to
+ * in AMQP messages.
+ */
+
#include <string>
#ifdef _WINDOWS
#include "windows.h"
@@ -44,5 +50,8 @@ typedef u_int16_t ClassId;
typedef u_int16_t MethodId;
typedef u_int16_t ReplyCode;
+// Types represented by classes.
+class Content;
+class FieldTable;
}} // namespace qpid::framing
#endif
diff --git a/cpp/lib/common/framing/amqp_types_full.h b/cpp/lib/common/framing/amqp_types_full.h
new file mode 100644
index 0000000000..6a24a99d38
--- /dev/null
+++ b/cpp/lib/common/framing/amqp_types_full.h
@@ -0,0 +1,36 @@
+#ifndef _framing_amqp_types_decl_h
+#define _framing_amqp_types_decl_h
+
+/*
+ *
+ * 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.
+ *
+ */
+
+/** \file
+ * Type definitions and full declarations of all types used to
+ * in AMQP messages.
+ *
+ * Its better to include amqp_types.h in another header instead of this file
+ * unless the header actually needs the full declarations. Including
+ * full declarations when forward declarations would do increases compile
+ * times.
+ */
+
+#include "amqp_types.h"
+#include "FramingContent.h"
+#include "FieldTable.h"
+
+#endif /*!_framing_amqp_types_decl_h*/