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 uint32_t frameMax,
00067 uint16_t heartbeat) = 0;
00068
00069 virtual void open(const string& virtualHost,
00070 const string& capabilities,
00071 bool insist) = 0;
00072
00073 virtual void close(uint16_t replyCode,
00074 const string& replyText,
00075 uint16_t classId,
00076 uint16_t methodId) = 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 open(uint32_t detachedLifetime) = 0;
00093
00094 virtual void flow(bool active) = 0;
00095
00096 virtual void flowOk(bool active) = 0;
00097
00098 virtual void close( ) = 0;
00099
00100 virtual void closed(uint16_t replyCode,
00101 const string& replyText) = 0;
00102
00103 virtual void resume(const Uuid& sessionId) = 0;
00104
00105 virtual void suspend( ) = 0;
00106
00107 virtual void ack(uint32_t cumulativeSeenMark,
00108 const SequenceNumberSet& seenFrameSet) = 0;
00109
00110 virtual void highWaterMark(uint32_t lastSentMark) = 0;
00111
00112 virtual void solicitAck( ) = 0;
00113 };
00114
00115
00116
00117 class AccessHandler {
00118
00119 public:
00120 class Invoker;
00121
00122 AccessHandler(){};
00123 virtual ~AccessHandler() {}
00124
00125
00126 virtual void request(const string& realm,
00127 bool exclusive,
00128 bool passive,
00129 bool active,
00130 bool write,
00131 bool read) = 0;
00132 };
00133
00134
00135
00136 class ExchangeHandler {
00137
00138 public:
00139 class Invoker;
00140
00141 ExchangeHandler(){};
00142 virtual ~ExchangeHandler() {}
00143
00144
00145 virtual void declare(uint16_t ticket,
00146 const string& exchange,
00147 const string& type,
00148 const string& alternateExchange,
00149 bool passive,
00150 bool durable,
00151 bool autoDelete,
00152 const FieldTable& arguments) = 0;
00153
00154 virtual void delete_(uint16_t ticket,
00155 const string& exchange,
00156 bool ifUnused) = 0;
00157
00158 virtual ExchangeQueryResult query(uint16_t ticket,
00159 const string& name) = 0;
00160 };
00161
00162
00163
00164 class QueueHandler {
00165
00166 public:
00167 class Invoker;
00168
00169 QueueHandler(){};
00170 virtual ~QueueHandler() {}
00171
00172
00173 virtual void declare(uint16_t ticket,
00174 const string& queue,
00175 const string& alternateExchange,
00176 bool passive,
00177 bool durable,
00178 bool exclusive,
00179 bool autoDelete,
00180 const FieldTable& arguments) = 0;
00181
00182 virtual void bind(uint16_t ticket,
00183 const string& queue,
00184 const string& exchange,
00185 const string& routingKey,
00186 const FieldTable& arguments) = 0;
00187
00188 virtual void unbind(uint16_t ticket,
00189 const string& queue,
00190 const string& exchange,
00191 const string& routingKey,
00192 const FieldTable& arguments) = 0;
00193
00194 virtual void purge(uint16_t ticket,
00195 const string& queue) = 0;
00196
00197 virtual void delete_(uint16_t ticket,
00198 const string& queue,
00199 bool ifUnused,
00200 bool ifEmpty) = 0;
00201
00202 virtual QueueQueryResult query(const string& queue) = 0;
00203 };
00204
00205
00206
00207 class BasicHandler {
00208
00209 public:
00210 class Invoker;
00211
00212 BasicHandler(){};
00213 virtual ~BasicHandler() {}
00214
00215
00216 virtual void qos(uint32_t prefetchSize,
00217 uint16_t prefetchCount,
00218 bool global) = 0;
00219
00220 virtual void consume(uint16_t ticket,
00221 const string& queue,
00222 const string& consumerTag,
00223 bool noLocal,
00224 bool noAck,
00225 bool exclusive,
00226 bool nowait,
00227 const FieldTable& arguments) = 0;
00228
00229 virtual void cancel(const string& consumerTag) = 0;
00230
00231 virtual void get(uint16_t ticket,
00232 const string& queue,
00233 bool noAck) = 0;
00234
00235 virtual void ack(uint64_t deliveryTag,
00236 bool multiple) = 0;
00237
00238 virtual void reject(uint64_t deliveryTag,
00239 bool requeue) = 0;
00240
00241 virtual void recover(bool requeue) = 0;
00242 };
00243
00244
00245
00246 class FileHandler {
00247
00248 public:
00249 class Invoker;
00250
00251 FileHandler(){};
00252 virtual ~FileHandler() {}
00253
00254
00255 virtual void qos(uint32_t prefetchSize,
00256 uint16_t prefetchCount,
00257 bool global) = 0;
00258
00259 virtual void consume(uint16_t ticket,
00260 const string& queue,
00261 const string& consumerTag,
00262 bool noLocal,
00263 bool noAck,
00264 bool exclusive,
00265 bool nowait,
00266 const FieldTable& filter) = 0;
00267
00268 virtual void cancel(const string& consumerTag) = 0;
00269
00270 virtual void open(const string& identifier,
00271 uint64_t contentSize) = 0;
00272
00273 virtual void openOk(uint64_t stagedSize) = 0;
00274
00275 virtual void publish(uint16_t ticket,
00276 const string& exchange,
00277 const string& routingKey,
00278 bool mandatory,
00279 bool immediate,
00280 const string& identifier) = 0;
00281
00282 virtual void ack(uint64_t deliveryTag,
00283 bool multiple) = 0;
00284
00285 virtual void reject(uint64_t deliveryTag,
00286 bool requeue) = 0;
00287 };
00288
00289
00290
00291 class StreamHandler {
00292
00293 public:
00294 class Invoker;
00295
00296 StreamHandler(){};
00297 virtual ~StreamHandler() {}
00298
00299
00300 virtual void qos(uint32_t prefetchSize,
00301 uint16_t prefetchCount,
00302 uint32_t consumeRate,
00303 bool global) = 0;
00304
00305 virtual void consume(uint16_t ticket,
00306 const string& queue,
00307 const string& consumerTag,
00308 bool noLocal,
00309 bool exclusive,
00310 bool nowait,
00311 const FieldTable& filter) = 0;
00312
00313 virtual void cancel(const string& consumerTag) = 0;
00314 };
00315
00316
00317
00318 class TxHandler {
00319
00320 public:
00321 class Invoker;
00322
00323 TxHandler(){};
00324 virtual ~TxHandler() {}
00325
00326
00327 virtual void select( ) = 0;
00328
00329 virtual void commit( ) = 0;
00330
00331 virtual void rollback( ) = 0;
00332 };
00333
00334
00335
00336 class DtxDemarcationHandler {
00337
00338 public:
00339 class Invoker;
00340
00341 DtxDemarcationHandler(){};
00342 virtual ~DtxDemarcationHandler() {}
00343
00344
00345 virtual void select( ) = 0;
00346
00347 virtual DtxDemarcationStartResult start(uint16_t ticket,
00348 const string& xid,
00349 bool join,
00350 bool resume) = 0;
00351
00352 virtual DtxDemarcationEndResult end(uint16_t ticket,
00353 const string& xid,
00354 bool fail,
00355 bool suspend) = 0;
00356 };
00357
00358
00359
00360 class DtxCoordinationHandler {
00361
00362 public:
00363 class Invoker;
00364
00365 DtxCoordinationHandler(){};
00366 virtual ~DtxCoordinationHandler() {}
00367
00368
00369 virtual DtxCoordinationCommitResult commit(uint16_t ticket,
00370 const string& xid,
00371 bool onePhase) = 0;
00372
00373 virtual void forget(uint16_t ticket,
00374 const string& xid) = 0;
00375
00376 virtual DtxCoordinationGetTimeoutResult getTimeout(const string& xid) = 0;
00377
00378 virtual DtxCoordinationPrepareResult prepare(uint16_t ticket,
00379 const string& xid) = 0;
00380
00381 virtual DtxCoordinationRecoverResult recover(uint16_t ticket,
00382 bool startscan,
00383 bool endscan) = 0;
00384
00385 virtual DtxCoordinationRollbackResult rollback(uint16_t ticket,
00386 const string& xid) = 0;
00387
00388 virtual void setTimeout(uint16_t ticket,
00389 const string& xid,
00390 uint32_t timeout) = 0;
00391 };
00392
00393
00394
00395 class TunnelHandler {
00396
00397 public:
00398 class Invoker;
00399
00400 TunnelHandler(){};
00401 virtual ~TunnelHandler() {}
00402
00403 };
00404
00405
00406
00407 class MessageHandler {
00408
00409 public:
00410 class Invoker;
00411
00412 MessageHandler(){};
00413 virtual ~MessageHandler() {}
00414
00415
00416 virtual void reject(const SequenceNumberSet& transfers,
00417 uint16_t code,
00418 const string& text) = 0;
00419
00420 virtual void acquire(const SequenceNumberSet& transfers,
00421 uint8_t mode) = 0;
00422
00423 virtual void release(const SequenceNumberSet& transfers) = 0;
00424
00425 virtual void subscribe(uint16_t ticket,
00426 const string& queue,
00427 const string& destination,
00428 bool noLocal,
00429 uint8_t confirmMode,
00430 uint8_t acquireMode,
00431 bool exclusive,
00432 const FieldTable& filter) = 0;
00433
00434 virtual void cancel(const string& destination) = 0;
00435
00436 virtual void get(uint16_t ticket,
00437 const string& queue,
00438 const string& destination,
00439 bool noAck) = 0;
00440
00441 virtual void recover(bool requeue) = 0;
00442
00443 virtual void open(const string& reference) = 0;
00444
00445 virtual void close(const string& reference) = 0;
00446
00447 virtual void append(const string& reference,
00448 const string& bytes) = 0;
00449
00450 virtual void checkpoint(const string& reference,
00451 const string& identifier) = 0;
00452
00453 virtual void resume(const string& reference,
00454 const string& identifier) = 0;
00455
00456 virtual void qos(uint32_t prefetchSize,
00457 uint16_t prefetchCount,
00458 bool global) = 0;
00459
00460 virtual void flowMode(const string& destination,
00461 uint8_t mode) = 0;
00462
00463 virtual void flow(const string& destination,
00464 uint8_t unit,
00465 uint32_t value) = 0;
00466
00467 virtual void flush(const string& destination) = 0;
00468
00469 virtual void stop(const string& destination) = 0;
00470
00471 virtual void empty( ) = 0;
00472
00473 virtual void offset(uint64_t value) = 0;
00474 };
00475
00476
00477
00478 class BindingHandler {
00479
00480 public:
00481 class Invoker;
00482
00483 BindingHandler(){};
00484 virtual ~BindingHandler() {}
00485
00486
00487 virtual BindingQueryResult query(uint16_t ticket,
00488 const string& exchange,
00489 const string& queue,
00490 const string& routingKey,
00491 const FieldTable& arguments) = 0;
00492 };
00493
00494
00495
00496 class ExecutionHandler {
00497
00498 public:
00499 class Invoker;
00500
00501 ExecutionHandler(){};
00502 virtual ~ExecutionHandler() {}
00503
00504
00505 virtual void flush( ) = 0;
00506
00507 virtual void complete(uint32_t cumulativeExecutionMark,
00508 const SequenceNumberSet& rangedExecutionSet) = 0;
00509
00510 virtual void noop( ) = 0;
00511
00512 virtual void result(uint32_t commandId,
00513 const string& data) = 0;
00514
00515 virtual void sync( ) = 0;
00516 };
00517
00518
00519
00520 class Connection010Handler {
00521
00522 public:
00523 class Invoker;
00524
00525 Connection010Handler(){};
00526 virtual ~Connection010Handler() {}
00527
00528
00529 virtual void startOk(const FieldTable& clientProperties,
00530 const string& mechanism,
00531 const string& response,
00532 const string& locale) = 0;
00533
00534 virtual void secureOk(const string& response) = 0;
00535
00536 virtual void tuneOk(uint16_t channelMax,
00537 uint16_t frameMax,
00538 uint16_t heartbeat) = 0;
00539
00540 virtual void open(const string& virtualHost,
00541 const Array& capabilities,
00542 bool insist) = 0;
00543
00544 virtual void heartbeat( ) = 0;
00545
00546 virtual void close(uint16_t replyCode,
00547 const string& replyText,
00548 uint16_t classId,
00549 uint16_t methodId) = 0;
00550
00551 virtual void closeOk( ) = 0;
00552 };
00553
00554
00555
00556 class Session010Handler {
00557
00558 public:
00559 class Invoker;
00560
00561 Session010Handler(){};
00562 virtual ~Session010Handler() {}
00563
00564
00565 virtual void attach(const string& name,
00566 bool force) = 0;
00567
00568 virtual void attached(const string& name) = 0;
00569
00570 virtual void detach(const string& name) = 0;
00571
00572 virtual void detached(const string& name,
00573 uint8_t detachCode) = 0;
00574
00575 virtual void requestTimeout(uint32_t timeout) = 0;
00576
00577 virtual void timeout(uint32_t timeout) = 0;
00578
00579 virtual void commandPoint(uint32_t commandId,
00580 uint64_t commandOffset) = 0;
00581
00582 virtual void expected(const SequenceSet& commands,
00583 const Array& fragments) = 0;
00584
00585 virtual void confirmed(const SequenceSet& commands,
00586 const Array& fragments) = 0;
00587
00588 virtual void completed(const SequenceSet& commands,
00589 bool timelyReply) = 0;
00590
00591 virtual void knownCompleted(const SequenceSet& commands) = 0;
00592
00593 virtual void flush(bool expected,
00594 bool confirmed,
00595 bool completed) = 0;
00596
00597 virtual void gap(const SequenceSet& commands) = 0;
00598 };
00599
00600
00601
00602 class Execution010Handler {
00603
00604 public:
00605 class Invoker;
00606
00607 Execution010Handler(){};
00608 virtual ~Execution010Handler() {}
00609
00610
00611 virtual void sync( ) = 0;
00612
00613 virtual void result(uint32_t commandId,
00614 const string& value) = 0;
00615
00616 virtual void exception(uint16_t errorCode,
00617 uint32_t commandId,
00618 uint8_t classCode,
00619 uint8_t commandCode,
00620 uint8_t fieldIndex,
00621 const string& description,
00622 const FieldTable& errorInfo) = 0;
00623 };
00624
00625
00626
00627 class Message010Handler {
00628
00629 public:
00630 class Invoker;
00631
00632 Message010Handler(){};
00633 virtual ~Message010Handler() {}
00634
00635
00636 virtual void transfer(const string& destination,
00637 uint8_t acceptMode,
00638 uint8_t acquireMode) = 0;
00639
00640 virtual void accept(const SequenceSet& commands) = 0;
00641
00642 virtual void reject(const SequenceSet& commands,
00643 uint16_t code,
00644 const string& text) = 0;
00645
00646 virtual void release(const SequenceSet& commands,
00647 bool setRedelivered) = 0;
00648
00649 virtual Message010AcquireResult acquire(const SequenceSet& transfers) = 0;
00650
00651 virtual void subscribe(const string& queue,
00652 const string& destination,
00653 uint8_t acceptMode,
00654 uint8_t acquireMode,
00655 bool exclusive,
00656 const string& resumeId,
00657 uint64_t resumeTtl,
00658 const FieldTable& arguments) = 0;
00659
00660 virtual void cancel(const string& destination) = 0;
00661
00662 virtual void setFlowMode(const string& destination,
00663 uint8_t flowMode) = 0;
00664
00665 virtual void flow(const string& destination,
00666 uint8_t unit,
00667 uint32_t value) = 0;
00668
00669 virtual void flush(const string& destination) = 0;
00670
00671 virtual void stop(const string& destination) = 0;
00672 };
00673
00674
00675
00676 class Tx010Handler {
00677
00678 public:
00679 class Invoker;
00680
00681 Tx010Handler(){};
00682 virtual ~Tx010Handler() {}
00683
00684
00685 virtual void select( ) = 0;
00686
00687 virtual void commit( ) = 0;
00688
00689 virtual void rollback( ) = 0;
00690 };
00691
00692
00693
00694 class Dtx010Handler {
00695
00696 public:
00697 class Invoker;
00698
00699 Dtx010Handler(){};
00700 virtual ~Dtx010Handler() {}
00701
00702
00703 virtual void select( ) = 0;
00704
00705 virtual Dtx010StartResult start(const Xid010& xid,
00706 bool join,
00707 bool resume) = 0;
00708
00709 virtual Dtx010EndResult end(const Xid010& xid,
00710 bool fail,
00711 bool suspend) = 0;
00712
00713 virtual Dtx010CommitResult commit(const Xid010& xid,
00714 bool onePhase) = 0;
00715
00716 virtual void forget(const Xid010& xid) = 0;
00717
00718 virtual Dtx010GetTimeoutResult getTimeout(const Xid010& xid) = 0;
00719
00720 virtual Dtx010PrepareResult prepare(const Xid010& xid) = 0;
00721
00722 virtual Dtx010RecoverResult recover( ) = 0;
00723
00724 virtual Dtx010RollbackResult rollback(const Xid010& xid) = 0;
00725
00726 virtual void setTimeout(const Xid010& xid,
00727 uint32_t timeout) = 0;
00728 };
00729
00730
00731
00732 class Exchange010Handler {
00733
00734 public:
00735 class Invoker;
00736
00737 Exchange010Handler(){};
00738 virtual ~Exchange010Handler() {}
00739
00740
00741 virtual void declare(const string& name,
00742 const string& type,
00743 const string& alternateExchange,
00744 bool passive,
00745 bool durable,
00746 bool autoDelete,
00747 const FieldTable& arguments) = 0;
00748
00749 virtual void delete_(const string& name,
00750 bool ifUnused) = 0;
00751
00752 virtual Exchange010QueryResult query(const string& name) = 0;
00753
00754 virtual void bind(const string& queue,
00755 const string& exchange,
00756 const string& bindingKey,
00757 const FieldTable& arguments) = 0;
00758
00759 virtual void unbind(const string& queue,
00760 const string& exchange,
00761 const string& bindingKey) = 0;
00762
00763 virtual Exchange010BoundResult bound(const string& queue,
00764 const string& exchange,
00765 const string& bindingKey,
00766 const FieldTable& arguments) = 0;
00767 };
00768
00769
00770
00771 class Queue010Handler {
00772
00773 public:
00774 class Invoker;
00775
00776 Queue010Handler(){};
00777 virtual ~Queue010Handler() {}
00778
00779
00780 virtual void declare(const string& name,
00781 const string& alternateExchange,
00782 bool passive,
00783 bool durable,
00784 bool exclusive,
00785 bool autoDelete,
00786 const FieldTable& arguments) = 0;
00787
00788 virtual void delete_(const string& name,
00789 bool ifUnused,
00790 bool ifEmpty) = 0;
00791
00792 virtual void purge(const string& name) = 0;
00793
00794 virtual Queue010QueryResult query(const string& name) = 0;
00795 };
00796
00797
00798
00799
00800
00801 virtual ConnectionHandler* getConnectionHandler() = 0;
00802 virtual SessionHandler* getSessionHandler() = 0;
00803 virtual AccessHandler* getAccessHandler() = 0;
00804 virtual ExchangeHandler* getExchangeHandler() = 0;
00805 virtual QueueHandler* getQueueHandler() = 0;
00806 virtual BasicHandler* getBasicHandler() = 0;
00807 virtual FileHandler* getFileHandler() = 0;
00808 virtual StreamHandler* getStreamHandler() = 0;
00809 virtual TxHandler* getTxHandler() = 0;
00810 virtual DtxDemarcationHandler* getDtxDemarcationHandler() = 0;
00811 virtual DtxCoordinationHandler* getDtxCoordinationHandler() = 0;
00812 virtual TunnelHandler* getTunnelHandler() = 0;
00813 virtual MessageHandler* getMessageHandler() = 0;
00814 virtual BindingHandler* getBindingHandler() = 0;
00815 virtual ExecutionHandler* getExecutionHandler() = 0;
00816 virtual Connection010Handler* getConnection010Handler() = 0;
00817 virtual Session010Handler* getSession010Handler() = 0;
00818 virtual Execution010Handler* getExecution010Handler() = 0;
00819 virtual Message010Handler* getMessage010Handler() = 0;
00820 virtual Tx010Handler* getTx010Handler() = 0;
00821 virtual Dtx010Handler* getDtx010Handler() = 0;
00822 virtual Exchange010Handler* getExchange010Handler() = 0;
00823 virtual Queue010Handler* getQueue010Handler() = 0;
00824 };
00825 }}
00826 #endif