00001 #ifndef QPID_FRAMING_AMQP_SERVEROPERATIONS_H
00002 #define QPID_FRAMING_AMQP_SERVEROPERATIONS_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00028
00029
00030 #include <sstream>
00031 #include "qpid/framing/ProtocolVersion.h"
00032 #include "qpid/framing/amqp_structs.h"
00033
00034 namespace qpid {
00035 namespace framing {
00036
00037 class AMQMethodBody;
00038
00039 class AMQP_ServerOperations {
00040 public:
00041 class Invoker;
00042
00043 virtual ~AMQP_ServerOperations() {}
00044
00045 virtual ProtocolVersion getVersion() const = 0;
00046
00047
00048
00049 class ConnectionHandler {
00050
00051 public:
00052 class Invoker;
00053
00054 ConnectionHandler(){};
00055 virtual ~ConnectionHandler() {}
00056
00057
00058 virtual void startOk(const FieldTable& clientProperties,
00059 const string& mechanism,
00060 const string& response,
00061 const string& locale) = 0;
00062
00063 virtual void secureOk(const string& response) = 0;
00064
00065 virtual void tuneOk(uint16_t channelMax,
00066 uint16_t maxFrameSize,
00067 uint16_t heartbeat) = 0;
00068
00069 virtual void open(const string& virtualHost,
00070 const Array& capabilities,
00071 bool insist) = 0;
00072
00073 virtual void heartbeat( ) = 0;
00074
00075 virtual void close(uint16_t replyCode,
00076 const string& replyText) = 0;
00077
00078 virtual void closeOk( ) = 0;
00079 };
00080
00081
00082
00083 class SessionHandler {
00084
00085 public:
00086 class Invoker;
00087
00088 SessionHandler(){};
00089 virtual ~SessionHandler() {}
00090
00091
00092 virtual void attach(const string& name,
00093 bool force) = 0;
00094
00095 virtual void attached(const string& name) = 0;
00096
00097 virtual void detach(const string& name) = 0;
00098
00099 virtual void detached(const string& name,
00100 uint8_t code) = 0;
00101
00102 virtual void requestTimeout(uint32_t timeout) = 0;
00103
00104 virtual void timeout(uint32_t timeout) = 0;
00105
00106 virtual void commandPoint(const SequenceNumber& commandId,
00107 uint64_t commandOffset) = 0;
00108
00109 virtual void expected(const SequenceSet& commands,
00110 const Array& fragments) = 0;
00111
00112 virtual void confirmed(const SequenceSet& commands,
00113 const Array& fragments) = 0;
00114
00115 virtual void completed(const SequenceSet& commands,
00116 bool timelyReply) = 0;
00117
00118 virtual void knownCompleted(const SequenceSet& commands) = 0;
00119
00120 virtual void flush(bool expected,
00121 bool confirmed,
00122 bool completed) = 0;
00123
00124 virtual void gap(const SequenceSet& commands) = 0;
00125 };
00126
00127
00128
00129 class ExecutionHandler {
00130
00131 public:
00132 class Invoker;
00133
00134 ExecutionHandler(){};
00135 virtual ~ExecutionHandler() {}
00136
00137
00138 virtual void sync( ) = 0;
00139
00140 virtual void result(const SequenceNumber& commandId,
00141 const string& value) = 0;
00142
00143 virtual void exception(uint16_t errorCode,
00144 const SequenceNumber& commandId,
00145 uint8_t classCode,
00146 uint8_t commandCode,
00147 uint8_t fieldIndex,
00148 const string& description,
00149 const FieldTable& errorInfo) = 0;
00150 };
00151
00152
00153
00154 class MessageHandler {
00155
00156 public:
00157 class Invoker;
00158
00159 MessageHandler(){};
00160 virtual ~MessageHandler() {}
00161
00162
00163 virtual void accept(const SequenceSet& transfers) = 0;
00164
00165 virtual void reject(const SequenceSet& transfers,
00166 uint16_t code,
00167 const string& text) = 0;
00168
00169 virtual void release(const SequenceSet& transfers,
00170 bool setRedelivered) = 0;
00171
00172 virtual MessageAcquireResult acquire(const SequenceSet& transfers) = 0;
00173
00174 virtual MessageResumeResult resume(const string& destination,
00175 const string& resumeId) = 0;
00176
00177 virtual void subscribe(const string& queue,
00178 const string& destination,
00179 uint8_t acceptMode,
00180 uint8_t acquireMode,
00181 bool exclusive,
00182 const string& resumeId,
00183 uint64_t resumeTtl,
00184 const FieldTable& arguments) = 0;
00185
00186 virtual void cancel(const string& destination) = 0;
00187
00188 virtual void setFlowMode(const string& destination,
00189 uint8_t flowMode) = 0;
00190
00191 virtual void flow(const string& destination,
00192 uint8_t unit,
00193 uint32_t value) = 0;
00194
00195 virtual void flush(const string& destination) = 0;
00196
00197 virtual void stop(const string& destination) = 0;
00198 };
00199
00200
00201
00202 class TxHandler {
00203
00204 public:
00205 class Invoker;
00206
00207 TxHandler(){};
00208 virtual ~TxHandler() {}
00209
00210
00211 virtual void select( ) = 0;
00212
00213 virtual void commit( ) = 0;
00214
00215 virtual void rollback( ) = 0;
00216 };
00217
00218
00219
00220 class DtxHandler {
00221
00222 public:
00223 class Invoker;
00224
00225 DtxHandler(){};
00226 virtual ~DtxHandler() {}
00227
00228
00229 virtual void select( ) = 0;
00230
00231 virtual XaResult start(const Xid& xid,
00232 bool join,
00233 bool resume) = 0;
00234
00235 virtual XaResult end(const Xid& xid,
00236 bool fail,
00237 bool suspend) = 0;
00238
00239 virtual XaResult commit(const Xid& xid,
00240 bool onePhase) = 0;
00241
00242 virtual void forget(const Xid& xid) = 0;
00243
00244 virtual DtxGetTimeoutResult getTimeout(const Xid& xid) = 0;
00245
00246 virtual XaResult prepare(const Xid& xid) = 0;
00247
00248 virtual DtxRecoverResult recover( ) = 0;
00249
00250 virtual XaResult rollback(const Xid& xid) = 0;
00251
00252 virtual void setTimeout(const Xid& xid,
00253 uint32_t timeout) = 0;
00254 };
00255
00256
00257
00258 class ExchangeHandler {
00259
00260 public:
00261 class Invoker;
00262
00263 ExchangeHandler(){};
00264 virtual ~ExchangeHandler() {}
00265
00266
00267 virtual void declare(const string& exchange,
00268 const string& type,
00269 const string& alternateExchange,
00270 bool passive,
00271 bool durable,
00272 bool autoDelete,
00273 const FieldTable& arguments) = 0;
00274
00275 virtual void delete_(const string& exchange,
00276 bool ifUnused) = 0;
00277
00278 virtual ExchangeQueryResult query(const string& name) = 0;
00279
00280 virtual void bind(const string& queue,
00281 const string& exchange,
00282 const string& bindingKey,
00283 const FieldTable& arguments) = 0;
00284
00285 virtual void unbind(const string& queue,
00286 const string& exchange,
00287 const string& bindingKey) = 0;
00288
00289 virtual ExchangeBoundResult bound(const string& exchange,
00290 const string& queue,
00291 const string& bindingKey,
00292 const FieldTable& arguments) = 0;
00293 };
00294
00295
00296
00297 class QueueHandler {
00298
00299 public:
00300 class Invoker;
00301
00302 QueueHandler(){};
00303 virtual ~QueueHandler() {}
00304
00305
00306 virtual void declare(const string& queue,
00307 const string& alternateExchange,
00308 bool passive,
00309 bool durable,
00310 bool exclusive,
00311 bool autoDelete,
00312 const FieldTable& arguments) = 0;
00313
00314 virtual void delete_(const string& queue,
00315 bool ifUnused,
00316 bool ifEmpty) = 0;
00317
00318 virtual void purge(const string& queue) = 0;
00319
00320 virtual QueueQueryResult query(const string& queue) = 0;
00321 };
00322
00323
00324
00325 class FileHandler {
00326
00327 public:
00328 class Invoker;
00329
00330 FileHandler(){};
00331 virtual ~FileHandler() {}
00332
00333
00334 virtual void qos(uint32_t prefetchSize,
00335 uint16_t prefetchCount,
00336 bool global) = 0;
00337
00338 virtual void consume(const string& queue,
00339 const string& consumerTag,
00340 bool noLocal,
00341 bool noAck,
00342 bool exclusive,
00343 bool nowait,
00344 const FieldTable& arguments) = 0;
00345
00346 virtual void cancel(const string& consumerTag) = 0;
00347
00348 virtual void open(const string& identifier,
00349 uint64_t contentSize) = 0;
00350
00351 virtual void openOk(uint64_t stagedSize) = 0;
00352
00353 virtual void publish(const string& exchange,
00354 const string& routingKey,
00355 bool mandatory,
00356 bool immediate,
00357 const string& identifier) = 0;
00358
00359 virtual void ack(uint64_t deliveryTag,
00360 bool multiple) = 0;
00361
00362 virtual void reject(uint64_t deliveryTag,
00363 bool requeue) = 0;
00364 };
00365
00366
00367
00368 class StreamHandler {
00369
00370 public:
00371 class Invoker;
00372
00373 StreamHandler(){};
00374 virtual ~StreamHandler() {}
00375
00376
00377 virtual void qos(uint32_t prefetchSize,
00378 uint16_t prefetchCount,
00379 uint32_t consumeRate,
00380 bool global) = 0;
00381
00382 virtual void consume(const string& queue,
00383 const string& consumerTag,
00384 bool noLocal,
00385 bool exclusive,
00386 bool nowait,
00387 const FieldTable& arguments) = 0;
00388
00389 virtual void cancel(const string& consumerTag) = 0;
00390 };
00391
00392
00393
00394
00395
00396 virtual ConnectionHandler* getConnectionHandler() = 0;
00397 virtual SessionHandler* getSessionHandler() = 0;
00398 virtual ExecutionHandler* getExecutionHandler() = 0;
00399 virtual MessageHandler* getMessageHandler() = 0;
00400 virtual TxHandler* getTxHandler() = 0;
00401 virtual DtxHandler* getDtxHandler() = 0;
00402 virtual ExchangeHandler* getExchangeHandler() = 0;
00403 virtual QueueHandler* getQueueHandler() = 0;
00404 virtual FileHandler* getFileHandler() = 0;
00405 virtual StreamHandler* getStreamHandler() = 0;
00406 };
00407 }}
00408 #endif