summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/framing/ChannelAdapter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/framing/ChannelAdapter.cpp')
-rw-r--r--cpp/src/qpid/framing/ChannelAdapter.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/cpp/src/qpid/framing/ChannelAdapter.cpp b/cpp/src/qpid/framing/ChannelAdapter.cpp
index 86b60d896b..027679228a 100644
--- a/cpp/src/qpid/framing/ChannelAdapter.cpp
+++ b/cpp/src/qpid/framing/ChannelAdapter.cpp
@@ -31,28 +31,24 @@ using boost::format;
namespace qpid {
namespace framing {
-/** Framehandler that feeds into the channel. */
-struct ChannelAdapter::ChannelAdapterHandler : public FrameHandler {
- ChannelAdapterHandler(ChannelAdapter& channel_) : channel(channel_) {}
- void handle(AMQFrame& frame) { channel.handleBody(frame.getBody()); }
- ChannelAdapter& channel;
-};
+ChannelAdapter::Handler::Handler(ChannelAdapter& c) : parent(c) {}
+void ChannelAdapter::Handler::handle(AMQFrame& f) { parent.handleBody(f.getBody()); }
-void ChannelAdapter::init(ChannelId i, OutputHandler& out, ProtocolVersion v)
+ChannelAdapter::ChannelAdapter() : handler(*this), id(0) {}
+
+void ChannelAdapter::init(ChannelId i, OutputHandler& out, ProtocolVersion v)
{
assertChannelNotOpen();
id = i;
version = v;
-
- handlers.in = make_shared_ptr(new ChannelAdapterHandler(*this));
- handlers.out= make_shared_ptr(new OutputHandlerFrameHandler(out));
+ handlers.reset(&handler, &out);
}
void ChannelAdapter::send(const AMQBody& body)
{
assertChannelOpen();
AMQFrame frame(getId(), body);
- handlers.out->handle(frame);
+ handlers.out(frame);
}
void ChannelAdapter::assertMethodOk(AMQMethodBody& method) const {
@@ -73,4 +69,6 @@ void ChannelAdapter::assertChannelNotOpen() const {
504, format("Channel %d is already open.") % getId());
}
+void ChannelAdapter::handle(AMQFrame& f) { handleBody(f.getBody()); }
+
}} // namespace qpid::framing