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 #include "AclModule.h"
00037
00038 namespace qpid {
00039 namespace broker {
00040
00041 class Connection;
00042
00043 class ConnectionHandler : public framing::FrameHandler
00044 {
00045 struct Handler : public framing::AMQP_ServerOperations::ConnectionHandler,
00046 public framing::AMQP_ClientOperations::ConnectionHandler
00047 {
00048 framing::AMQP_ClientProxy::Connection client;
00049 framing::AMQP_ServerProxy::Connection server;
00050 Connection& connection;
00051 bool serverMode;
00052 std::auto_ptr<SaslAuthenticator> authenticator;
00053 AclModule* acl;
00054
00055 Handler(Connection& connection, bool isClient);
00056 ~Handler();
00057 void startOk(const qpid::framing::FieldTable& clientProperties,
00058 const std::string& mechanism, const std::string& response,
00059 const std::string& locale);
00060 void secureOk(const std::string& response);
00061 void tuneOk(uint16_t channelMax, uint16_t frameMax, uint16_t heartbeat);
00062 void heartbeat() {}
00063 void open(const std::string& virtualHost,
00064 const framing::Array& capabilities, bool insist);
00065 void close(uint16_t replyCode, const std::string& replyText);
00066 void closeOk();
00067
00068
00069 void start(const qpid::framing::FieldTable& serverProperties,
00070 const framing::Array& mechanisms,
00071 const framing::Array& locales);
00072
00073 void secure(const std::string& challenge);
00074
00075 void tune(uint16_t channelMax,
00076 uint16_t frameMax,
00077 uint16_t heartbeatMin,
00078 uint16_t heartbeatMax);
00079
00080 void openOk(const framing::Array& knownHosts);
00081
00082 void redirect(const std::string& host, const framing::Array& knownHosts);
00083 };
00084 std::auto_ptr<Handler> handler;
00085 public:
00086 ConnectionHandler(Connection& connection, bool isClient);
00087 void close(framing::ReplyCode code, const std::string& text, framing::ClassId classId, framing::MethodId methodId);
00088 void handle(framing::AMQFrame& frame);
00089 };
00090
00091
00092 }}
00093
00094 #endif