00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _ConnectionAdapter_
00022 #define _ConnectionAdapter_
00023
00024 #include <memory>
00025 #include "SaslAuthenticator.h"
00026 #include "qpid/framing/amqp_types.h"
00027 #include "qpid/framing/AMQFrame.h"
00028 #include "qpid/framing/AMQP_ClientOperations.h"
00029 #include "qpid/framing/AMQP_ClientProxy.h"
00030 #include "qpid/framing/AMQP_ServerOperations.h"
00031 #include "qpid/framing/AMQP_ServerProxy.h"
00032 #include "qpid/framing/FrameHandler.h"
00033 #include "qpid/framing/ProtocolInitiation.h"
00034 #include "qpid/framing/ProtocolVersion.h"
00035 #include "qpid/Exception.h"
00036
00037 namespace qpid {
00038 namespace broker {
00039
00040 class Connection;
00041
00042 class ConnectionHandler : public framing::FrameHandler
00043 {
00044 struct Handler : public framing::AMQP_ServerOperations::ConnectionHandler,
00045 public framing::AMQP_ClientOperations::ConnectionHandler
00046 {
00047 framing::AMQP_ClientProxy::Connection client;
00048 framing::AMQP_ServerProxy::Connection server;
00049 Connection& connection;
00050 bool serverMode;
00051 std::auto_ptr<SaslAuthenticator> authenticator;
00052
00053 Handler(Connection& connection, bool isClient);
00054 ~Handler();
00055 void startOk(const qpid::framing::FieldTable& clientProperties,
00056 const std::string& mechanism, const std::string& response,
00057 const std::string& locale);
00058 void secureOk(const std::string& response);
00059 void tuneOk(uint16_t channelMax, uint16_t frameMax, uint16_t heartbeat);
00060 void heartbeat() {}
00061 void open(const std::string& virtualHost,
00062 const framing::Array& capabilities, bool insist);
00063 void close(uint16_t replyCode, const std::string& replyText);
00064 void closeOk();
00065
00066
00067 void start(const qpid::framing::FieldTable& serverProperties,
00068 const framing::Array& mechanisms,
00069 const framing::Array& locales);
00070
00071 void secure(const std::string& challenge);
00072
00073 void tune(uint16_t channelMax,
00074 uint16_t frameMax,
00075 uint16_t heartbeatMin,
00076 uint16_t heartbeatMax);
00077
00078 void openOk(const framing::Array& knownHosts);
00079
00080 void redirect(const std::string& host, const framing::Array& knownHosts);
00081 };
00082 std::auto_ptr<Handler> handler;
00083 public:
00084 ConnectionHandler(Connection& connection, bool isClient);
00085 void close(framing::ReplyCode code, const std::string& text, framing::ClassId classId, framing::MethodId methodId);
00086 void handle(framing::AMQFrame& frame);
00087 };
00088
00089
00090 }}
00091
00092 #endif