diff options
Diffstat (limited to 'cpp/src/qpid/client/ConnectionHandler.h')
-rw-r--r-- | cpp/src/qpid/client/ConnectionHandler.h | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/cpp/src/qpid/client/ConnectionHandler.h b/cpp/src/qpid/client/ConnectionHandler.h index f8bd5e5d49..ed1e385dcf 100644 --- a/cpp/src/qpid/client/ConnectionHandler.h +++ b/cpp/src/qpid/client/ConnectionHandler.h @@ -21,17 +21,23 @@ #ifndef _ConnectionHandler_ #define _ConnectionHandler_ -#include "ChainableFrameHandler.h" -#include "ConnectionSettings.h" -#include "StateManager.h" +#include "qpid/client/ChainableFrameHandler.h" +#include "qpid/client/ConnectionSettings.h" +#include "qpid/client/Sasl.h" +#include "qpid/client/StateManager.h" #include "qpid/framing/AMQMethodBody.h" #include "qpid/framing/AMQP_HighestVersion.h" #include "qpid/framing/AMQP_ClientOperations.h" #include "qpid/framing/AMQP_ServerProxy.h" #include "qpid/framing/Array.h" +#include "qpid/framing/enum.h" #include "qpid/framing/FieldTable.h" #include "qpid/framing/FrameHandler.h" #include "qpid/framing/InputHandler.h" +#include "qpid/sys/SecurityLayer.h" +#include "qpid/sys/Timer.h" +#include "qpid/Url.h" +#include <memory> namespace qpid { namespace client { @@ -44,7 +50,7 @@ class ConnectionHandler : private StateManager, { typedef framing::AMQP_ClientOperations::ConnectionHandler ConnectionOperations; enum STATES {NOT_STARTED, NEGOTIATING, OPENING, OPEN, CLOSING, CLOSED, FAILED}; - std::set<int> ESTABLISHED; + std::set<int> ESTABLISHED, FINISHED; class Adapter : public framing::FrameHandler { @@ -56,12 +62,16 @@ class ConnectionHandler : private StateManager, Adapter outHandler; framing::AMQP_ServerProxy::Connection proxy; - uint16_t errorCode; + framing::connection::CloseCode errorCode; std::string errorText; bool insist; framing::ProtocolVersion version; framing::Array capabilities; framing::FieldTable properties; + std::auto_ptr<Sasl> sasl; + std::auto_ptr<qpid::sys::SecurityLayer> securityLayer; + boost::intrusive_ptr<qpid::sys::TimerTask> rcvTimeoutTask; + std::string operUserId; void checkState(STATES s, const std::string& msg); @@ -79,11 +89,13 @@ class ConnectionHandler : private StateManager, const framing::Array& knownHosts); void close(uint16_t replyCode, const std::string& replyText); void closeOk(); + void heartbeat(); public: using InputHandler::handle; typedef boost::function<void()> CloseListener; - typedef boost::function<void(uint16_t, const std::string&)> ErrorListener; + typedef boost::function<void(uint16_t, const std::string&)> ErrorListener; + typedef boost::function<unsigned int()> GetConnSSF; ConnectionHandler(const ConnectionSettings&, framing::ProtocolVersion&); @@ -99,9 +111,19 @@ public: // Note that open and closed aren't related by open = !closed bool isOpen() const; bool isClosed() const; + bool isClosing() const; + + std::auto_ptr<qpid::sys::SecurityLayer> getSecurityLayer(); + void setRcvTimeoutTask(boost::intrusive_ptr<qpid::sys::TimerTask>); CloseListener onClose; ErrorListener onError; + + std::vector<Url> knownBrokersUrls; + + static framing::connection::CloseCode convert(uint16_t replyCode); + const std::string& getUserId() const { return operUserId; } + GetConnSSF getSSF; /** query the connection for its security strength factor */ }; }} |