00001 #ifndef QPID_AMQP_0_10_CONNECTION_H
00002 #define QPID_AMQP_0_10_CONNECTION_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "qpid/sys/ConnectionCodec.h"
00025 #include "qpid/sys/ConnectionInputHandler.h"
00026 #include "qpid/sys/ConnectionOutputHandler.h"
00027 #include "qpid/sys/Mutex.h"
00028 #include <boost/intrusive_ptr.hpp>
00029 #include <memory>
00030 #include <deque>
00031
00032 namespace qpid {
00033
00034 namespace sys {
00035 class ConnectionInputHandlerFactory;
00036 }
00037
00038 namespace amqp_0_10 {
00039
00040 class Connection : public sys::ConnectionCodec,
00041 public sys::ConnectionOutputHandler
00042 {
00043 typedef std::deque<framing::AMQFrame> FrameQueue;
00044
00045 FrameQueue frameQueue;
00046 bool frameQueueClosed;
00047 mutable sys::Mutex frameQueueLock;
00048 sys::OutputControl& output;
00049 std::auto_ptr<sys::ConnectionInputHandler> connection;
00050 std::string identifier;
00051 bool initialized;
00052 bool isClient;
00053 size_t buffered;
00054
00055 public:
00056 Connection(sys::OutputControl&, const std::string& id, bool isClient);
00057 void setInputHandler(std::auto_ptr<sys::ConnectionInputHandler> c);
00058 size_t decode(const char* buffer, size_t size);
00059 size_t encode(const char* buffer, size_t size);
00060 bool isClosed() const;
00061 bool canEncode();
00062 void activateOutput();
00063 void closed();
00064 void close();
00065 void send(framing::AMQFrame&);
00066 framing::ProtocolVersion getVersion() const;
00067 size_t getBuffered() const;
00068 };
00069
00070 }}
00071
00072 #endif