00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _MessageBuilder_
00022 #define _MessageBuilder_
00023
00024 #include "qpid/framing/FrameHandler.h"
00025 #include "qpid/framing/SequenceNumber.h"
00026 #include "qpid/RefCounted.h"
00027
00028 #include <boost/intrusive_ptr.hpp>
00029
00030 namespace qpid {
00031 namespace broker {
00032 class Message;
00033 class MessageStore;
00034
00035 class MessageBuilder : public framing::FrameHandler{
00036 public:
00037 MessageBuilder(MessageStore* const store, uint64_t stagingThreshold);
00038 void handle(framing::AMQFrame& frame);
00039 boost::intrusive_ptr<Message> getMessage() { return message; }
00040 void start(const framing::SequenceNumber& id);
00041 void end();
00042 private:
00043 enum State {DORMANT, METHOD, HEADER, CONTENT};
00044 State state;
00045 boost::intrusive_ptr<Message> message;
00046 MessageStore* const store;
00047 const uint64_t stagingThreshold;
00048 bool staging;
00049
00050 void checkType(uint8_t expected, uint8_t actual);
00051 };
00052 }
00053 }
00054
00055
00056 #endif
00057