diff options
Diffstat (limited to 'cpp/src/qpid/sys')
| -rw-r--r-- | cpp/src/qpid/sys/AsynchIOAcceptor.cpp | 19 | ||||
| -rw-r--r-- | cpp/src/qpid/sys/ConnectionOutputHandler.h | 3 |
2 files changed, 15 insertions, 7 deletions
diff --git a/cpp/src/qpid/sys/AsynchIOAcceptor.cpp b/cpp/src/qpid/sys/AsynchIOAcceptor.cpp index 0586eb9d36..c24205f53e 100644 --- a/cpp/src/qpid/sys/AsynchIOAcceptor.cpp +++ b/cpp/src/qpid/sys/AsynchIOAcceptor.cpp @@ -94,7 +94,7 @@ class AsynchIOHandler : public qpid::sys::ConnectionOutputHandler { std::queue<framing::AMQFrame> frameQueue; Mutex frameQueueLock; bool frameQueueClosed; - bool initiated; + bool isInitiated; bool readError; std::string identifier; bool isClient; @@ -105,7 +105,7 @@ class AsynchIOHandler : public qpid::sys::ConnectionOutputHandler { AsynchIOHandler() : inputHandler(0), frameQueueClosed(false), - initiated(false), + isInitiated(false), readError(false), isClient(false) {} @@ -128,6 +128,8 @@ class AsynchIOHandler : public qpid::sys::ConnectionOutputHandler { void send(framing::AMQFrame&); void close(); void activateOutput(); + void initiated(const framing::ProtocolInitiation&); + // Input side void readbuff(AsynchIO& aio, AsynchIO::BufferBase* buff); @@ -259,13 +261,18 @@ void AsynchIOHandler::activateOutput() { aio->notifyPendingWrite(); } +void AsynchIOHandler::initiated(const framing::ProtocolInitiation& pi) +{ + write(pi); +} + // Input side void AsynchIOHandler::readbuff(AsynchIO& , AsynchIO::BufferBase* buff) { if (readError) { return; } framing::Buffer in(buff->bytes+buff->dataStart, buff->dataCount); - if(initiated){ + if(isInitiated){ framing::AMQFrame frame; try{ while(frame.decode(in)) { @@ -282,7 +289,7 @@ void AsynchIOHandler::readbuff(AsynchIO& , AsynchIO::BufferBase* buff) { if(protocolInit.decode(in)){ QPID_LOG(debug, "INIT [" << identifier << "]"); inputHandler->initiated(protocolInit); - initiated = true; + isInitiated = true; } } // TODO: unreading needs to go away, and when we can cope @@ -324,10 +331,10 @@ void AsynchIOHandler::nobuffs(AsynchIO&) { } void AsynchIOHandler::idle(AsynchIO&){ - if (isClient && !initiated) { + if (isClient && !isInitiated) { //get & write protocol header from upper layers write(inputHandler->getInitiation()); - initiated = true; + isInitiated = true; return; } ScopedLock<Mutex> l(frameQueueLock); diff --git a/cpp/src/qpid/sys/ConnectionOutputHandler.h b/cpp/src/qpid/sys/ConnectionOutputHandler.h index 5a60ae4998..13407d9b9d 100644 --- a/cpp/src/qpid/sys/ConnectionOutputHandler.h +++ b/cpp/src/qpid/sys/ConnectionOutputHandler.h @@ -22,6 +22,7 @@ #define _ConnectionOutputHandler_ #include "qpid/framing/OutputHandler.h" +#include "qpid/framing/InitiationHandler.h" #include "OutputControl.h" namespace qpid { @@ -30,7 +31,7 @@ namespace sys { /** * Provides the output handler associated with a connection. */ -class ConnectionOutputHandler : public virtual qpid::framing::OutputHandler, public OutputControl +class ConnectionOutputHandler : public virtual qpid::framing::OutputHandler, public OutputControl, public framing::InitiationHandler { public: virtual void close() = 0; |
