summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/client/ConnectionHandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/client/ConnectionHandler.h')
-rw-r--r--cpp/src/qpid/client/ConnectionHandler.h51
1 files changed, 40 insertions, 11 deletions
diff --git a/cpp/src/qpid/client/ConnectionHandler.h b/cpp/src/qpid/client/ConnectionHandler.h
index bb50495c06..b298b02701 100644
--- a/cpp/src/qpid/client/ConnectionHandler.h
+++ b/cpp/src/qpid/client/ConnectionHandler.h
@@ -21,12 +21,16 @@
#ifndef _ConnectionHandler_
#define _ConnectionHandler_
+#include "ChainableFrameHandler.h"
#include "Connector.h"
#include "StateManager.h"
-#include "ChainableFrameHandler.h"
-#include "qpid/framing/InputHandler.h"
-#include "qpid/framing/FieldTable.h"
#include "qpid/framing/AMQMethodBody.h"
+#include "qpid/framing/AMQP_ClientOperations.h"
+#include "qpid/framing/AMQP_ServerProxy.h"
+#include "qpid/framing/Array.h"
+#include "qpid/framing/FieldTable.h"
+#include "qpid/framing/FrameHandler.h"
+#include "qpid/framing/InputHandler.h"
namespace qpid {
namespace client {
@@ -39,7 +43,7 @@ struct ConnectionProperties
framing::FieldTable properties;
std::string mechanism;
std::string locale;
- std::string capabilities;
+ framing::Array capabilities;
uint16_t heartbeat;
uint16_t maxChannels;
uint64_t maxFrameSize;
@@ -48,17 +52,42 @@ struct ConnectionProperties
};
class ConnectionHandler : private StateManager,
- public ConnectionProperties,
- public ChainableFrameHandler,
- public framing::InputHandler
+ public ConnectionProperties,
+ public ChainableFrameHandler,
+ public framing::InputHandler,
+ private framing::AMQP_ClientOperations::Connection010Handler
{
+ typedef framing::AMQP_ClientOperations::Connection010Handler ConnectionOperations;
enum STATES {NOT_STARTED, NEGOTIATING, OPENING, OPEN, CLOSING, CLOSED, FAILED};
std::set<int> ESTABLISHED;
- void handle(framing::AMQMethodBody* method);
- void send(const framing::AMQBody& body);
- void error(uint16_t code, const std::string& message, uint16_t classId = 0, uint16_t methodId = 0);
- void error(uint16_t code, const std::string& message, framing::AMQBody* body);
+ class Adapter : public framing::FrameHandler
+ {
+ ConnectionHandler& handler;
+ public:
+ Adapter(ConnectionHandler& h) : handler(h) {}
+ void handle(framing::AMQFrame& f) { handler.out(f); }
+ };
+
+ Adapter outHandler;
+ framing::AMQP_ServerProxy::Connection010 proxy;
+
+ void checkState(STATES s, const std::string& msg);
+
+ //methods corresponding to connection controls:
+ void start(const framing::FieldTable& serverProperties,
+ const framing::Array& mechanisms,
+ const framing::Array& locales);
+ void secure(const std::string& challenge);
+ void tune(uint16_t channelMax,
+ uint16_t frameMax,
+ uint16_t heartbeatMin,
+ uint16_t heartbeatMax);
+ void openOk(const framing::Array& knownHosts);
+ void redirect(const std::string& host,
+ const framing::Array& knownHosts);
+ void close(uint16_t replyCode, const std::string& replyText);
+ void closeOk();
public:
using InputHandler::handle;