00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef qpid_framing_AMQP_ServerProxy__
00029 #define qpid_framing_AMQP_ServerProxy__
00030
00031 #include <AMQP_ServerOperations.h>
00032 #include <FieldTable.h>
00033 #include <OutputHandler.h>
00034
00035 namespace qpid {
00036 namespace framing {
00037
00038 class AMQP_ServerProxy : public AMQP_ServerOperations
00039 {
00040 private:
00041 ProtocolVersion version;
00042 OutputHandler* out;
00043 AMQP_ServerOperations::AccessHandler* AccessHandlerPtr;
00044 AMQP_ServerOperations::BasicHandler* BasicHandlerPtr;
00045 AMQP_ServerOperations::ChannelHandler* ChannelHandlerPtr;
00046 AMQP_ServerOperations::ConnectionHandler* ConnectionHandlerPtr;
00047 AMQP_ServerOperations::DtxHandler* DtxHandlerPtr;
00048 AMQP_ServerOperations::ExchangeHandler* ExchangeHandlerPtr;
00049 AMQP_ServerOperations::FileHandler* FileHandlerPtr;
00050 AMQP_ServerOperations::QueueHandler* QueueHandlerPtr;
00051 AMQP_ServerOperations::StreamHandler* StreamHandlerPtr;
00052 AMQP_ServerOperations::TestHandler* TestHandlerPtr;
00053 AMQP_ServerOperations::TunnelHandler* TunnelHandlerPtr;
00054 AMQP_ServerOperations::TxHandler* TxHandlerPtr;
00055
00056 public:
00057 AMQP_ServerProxy(OutputHandler* out, u_int8_t major, u_int8_t minor);
00058 ProtocolVersion& getProtocolVersion() {return version;}
00059 virtual ~AMQP_ServerProxy() {}
00060
00061
00062
00063 virtual inline AMQP_ServerOperations::AccessHandler* getAccessHandler() { return &access;}
00064 virtual inline AMQP_ServerOperations::BasicHandler* getBasicHandler() { return &basic;}
00065 virtual inline AMQP_ServerOperations::ChannelHandler* getChannelHandler() { return &channel;}
00066 virtual inline AMQP_ServerOperations::ConnectionHandler* getConnectionHandler() { return &connection;}
00067 virtual inline AMQP_ServerOperations::DtxHandler* getDtxHandler() { return &dtx;}
00068 virtual inline AMQP_ServerOperations::ExchangeHandler* getExchangeHandler() { return &exchange;}
00069 virtual inline AMQP_ServerOperations::FileHandler* getFileHandler() { return &file;}
00070 virtual inline AMQP_ServerOperations::QueueHandler* getQueueHandler() { return &queue;}
00071 virtual inline AMQP_ServerOperations::StreamHandler* getStreamHandler() { return &stream;}
00072 virtual inline AMQP_ServerOperations::TestHandler* getTestHandler() { return &test;}
00073 virtual inline AMQP_ServerOperations::TunnelHandler* getTunnelHandler() { return &tunnel;}
00074 virtual inline AMQP_ServerOperations::TxHandler* getTxHandler() { return &tx;}
00075
00076
00077
00078
00079 class Access : virtual public AMQP_ServerOperations::AccessHandler
00080 {
00081 private:
00082 OutputHandler* out;
00083 AMQP_ServerProxy* parent;
00084
00085 public:
00086
00087
00088 Access(OutputHandler* out, AMQP_ServerProxy* _parent) :
00089 out(out) {parent = _parent;}
00090 virtual ~Access() {}
00091
00092
00093
00094 virtual void request( u_int16_t channel,
00095 const string& realm,
00096 bool exclusive,
00097 bool passive,
00098 bool active,
00099 bool write,
00100 bool read );
00101 };
00102
00103
00104 class Basic : virtual public AMQP_ServerOperations::BasicHandler
00105 {
00106 private:
00107 OutputHandler* out;
00108 AMQP_ServerProxy* parent;
00109
00110 public:
00111
00112
00113 Basic(OutputHandler* out, AMQP_ServerProxy* _parent) :
00114 out(out) {parent = _parent;}
00115 virtual ~Basic() {}
00116
00117
00118
00119 virtual void ack( u_int16_t channel,
00120 u_int64_t deliveryTag,
00121 bool multiple );
00122
00123 virtual void cancel( u_int16_t channel,
00124 const string& consumerTag,
00125 bool nowait );
00126
00127 virtual void consume( u_int16_t channel,
00128 u_int16_t ticket,
00129 const string& queue,
00130 const string& consumerTag,
00131 bool noLocal,
00132 bool noAck,
00133 bool exclusive,
00134 bool nowait,
00135 const FieldTable& arguments );
00136
00137 virtual void get( u_int16_t channel,
00138 u_int16_t ticket,
00139 const string& queue,
00140 bool noAck );
00141
00142 virtual void publish( u_int16_t channel,
00143 u_int16_t ticket,
00144 const string& exchange,
00145 const string& routingKey,
00146 bool mandatory,
00147 bool immediate );
00148
00149 virtual void qos( u_int16_t channel,
00150 u_int32_t prefetchSize,
00151 u_int16_t prefetchCount,
00152 bool global );
00153
00154 virtual void recover( u_int16_t channel,
00155 bool requeue );
00156
00157 virtual void reject( u_int16_t channel,
00158 u_int64_t deliveryTag,
00159 bool requeue );
00160 };
00161
00162
00163 class Channel : virtual public AMQP_ServerOperations::ChannelHandler
00164 {
00165 private:
00166 OutputHandler* out;
00167 AMQP_ServerProxy* parent;
00168
00169 public:
00170
00171
00172 Channel(OutputHandler* out, AMQP_ServerProxy* _parent) :
00173 out(out) {parent = _parent;}
00174 virtual ~Channel() {}
00175
00176
00177
00178 virtual void close( u_int16_t channel,
00179 u_int16_t replyCode,
00180 const string& replyText,
00181 u_int16_t classId,
00182 u_int16_t methodId );
00183
00184 virtual void closeOk( u_int16_t channel );
00185
00186 virtual void flow( u_int16_t channel,
00187 bool active );
00188
00189 virtual void flowOk( u_int16_t channel,
00190 bool active );
00191
00192 virtual void open( u_int16_t channel,
00193 const string& outOfBand );
00194 };
00195
00196
00197 class Connection : virtual public AMQP_ServerOperations::ConnectionHandler
00198 {
00199 private:
00200 OutputHandler* out;
00201 AMQP_ServerProxy* parent;
00202
00203 public:
00204
00205
00206 Connection(OutputHandler* out, AMQP_ServerProxy* _parent) :
00207 out(out) {parent = _parent;}
00208 virtual ~Connection() {}
00209
00210
00211
00212 virtual void close( u_int16_t channel,
00213 u_int16_t replyCode,
00214 const string& replyText,
00215 u_int16_t classId,
00216 u_int16_t methodId );
00217
00218 virtual void closeOk( u_int16_t channel );
00219
00220 virtual void open( u_int16_t channel,
00221 const string& virtualHost,
00222 const string& capabilities,
00223 bool insist );
00224
00225 virtual void secureOk( u_int16_t channel,
00226 const string& response );
00227
00228 virtual void startOk( u_int16_t channel,
00229 const FieldTable& clientProperties,
00230 const string& mechanism,
00231 const string& response,
00232 const string& locale );
00233
00234 virtual void tuneOk( u_int16_t channel,
00235 u_int16_t channelMax,
00236 u_int32_t frameMax,
00237 u_int16_t heartbeat );
00238 };
00239
00240
00241 class Dtx : virtual public AMQP_ServerOperations::DtxHandler
00242 {
00243 private:
00244 OutputHandler* out;
00245 AMQP_ServerProxy* parent;
00246
00247 public:
00248
00249
00250 Dtx(OutputHandler* out, AMQP_ServerProxy* _parent) :
00251 out(out) {parent = _parent;}
00252 virtual ~Dtx() {}
00253
00254
00255
00256 virtual void select( u_int16_t channel );
00257
00258 virtual void start( u_int16_t channel,
00259 const string& dtxIdentifier );
00260 };
00261
00262
00263 class Exchange : virtual public AMQP_ServerOperations::ExchangeHandler
00264 {
00265 private:
00266 OutputHandler* out;
00267 AMQP_ServerProxy* parent;
00268
00269 public:
00270
00271
00272 Exchange(OutputHandler* out, AMQP_ServerProxy* _parent) :
00273 out(out) {parent = _parent;}
00274 virtual ~Exchange() {}
00275
00276
00277
00278 virtual void declare( u_int16_t channel,
00279 u_int16_t ticket,
00280 const string& exchange,
00281 const string& type,
00282 bool passive,
00283 bool durable,
00284 bool autoDelete,
00285 bool internal,
00286 bool nowait,
00287 const FieldTable& arguments );
00288
00289 virtual void delete_( u_int16_t channel,
00290 u_int16_t ticket,
00291 const string& exchange,
00292 bool ifUnused,
00293 bool nowait );
00294 };
00295
00296
00297 class File : virtual public AMQP_ServerOperations::FileHandler
00298 {
00299 private:
00300 OutputHandler* out;
00301 AMQP_ServerProxy* parent;
00302
00303 public:
00304
00305
00306 File(OutputHandler* out, AMQP_ServerProxy* _parent) :
00307 out(out) {parent = _parent;}
00308 virtual ~File() {}
00309
00310
00311
00312 virtual void ack( u_int16_t channel,
00313 u_int64_t deliveryTag,
00314 bool multiple );
00315
00316 virtual void cancel( u_int16_t channel,
00317 const string& consumerTag,
00318 bool nowait );
00319
00320 virtual void consume( u_int16_t channel,
00321 u_int16_t ticket,
00322 const string& queue,
00323 const string& consumerTag,
00324 bool noLocal,
00325 bool noAck,
00326 bool exclusive,
00327 bool nowait );
00328
00329 virtual void open( u_int16_t channel,
00330 const string& identifier,
00331 u_int64_t contentSize );
00332
00333 virtual void openOk( u_int16_t channel,
00334 u_int64_t stagedSize );
00335
00336 virtual void publish( u_int16_t channel,
00337 u_int16_t ticket,
00338 const string& exchange,
00339 const string& routingKey,
00340 bool mandatory,
00341 bool immediate,
00342 const string& identifier );
00343
00344 virtual void qos( u_int16_t channel,
00345 u_int32_t prefetchSize,
00346 u_int16_t prefetchCount,
00347 bool global );
00348
00349 virtual void reject( u_int16_t channel,
00350 u_int64_t deliveryTag,
00351 bool requeue );
00352
00353 virtual void stage( u_int16_t channel );
00354 };
00355
00356
00357 class Queue : virtual public AMQP_ServerOperations::QueueHandler
00358 {
00359 private:
00360 OutputHandler* out;
00361 AMQP_ServerProxy* parent;
00362
00363 public:
00364
00365
00366 Queue(OutputHandler* out, AMQP_ServerProxy* _parent) :
00367 out(out) {parent = _parent;}
00368 virtual ~Queue() {}
00369
00370
00371
00372 virtual void bind( u_int16_t channel,
00373 u_int16_t ticket,
00374 const string& queue,
00375 const string& exchange,
00376 const string& routingKey,
00377 bool nowait,
00378 const FieldTable& arguments );
00379
00380 virtual void declare( u_int16_t channel,
00381 u_int16_t ticket,
00382 const string& queue,
00383 bool passive,
00384 bool durable,
00385 bool exclusive,
00386 bool autoDelete,
00387 bool nowait,
00388 const FieldTable& arguments );
00389
00390 virtual void delete_( u_int16_t channel,
00391 u_int16_t ticket,
00392 const string& queue,
00393 bool ifUnused,
00394 bool ifEmpty,
00395 bool nowait );
00396
00397 virtual void purge( u_int16_t channel,
00398 u_int16_t ticket,
00399 const string& queue,
00400 bool nowait );
00401 };
00402
00403
00404 class Stream : virtual public AMQP_ServerOperations::StreamHandler
00405 {
00406 private:
00407 OutputHandler* out;
00408 AMQP_ServerProxy* parent;
00409
00410 public:
00411
00412
00413 Stream(OutputHandler* out, AMQP_ServerProxy* _parent) :
00414 out(out) {parent = _parent;}
00415 virtual ~Stream() {}
00416
00417
00418
00419 virtual void cancel( u_int16_t channel,
00420 const string& consumerTag,
00421 bool nowait );
00422
00423 virtual void consume( u_int16_t channel,
00424 u_int16_t ticket,
00425 const string& queue,
00426 const string& consumerTag,
00427 bool noLocal,
00428 bool exclusive,
00429 bool nowait );
00430
00431 virtual void publish( u_int16_t channel,
00432 u_int16_t ticket,
00433 const string& exchange,
00434 const string& routingKey,
00435 bool mandatory,
00436 bool immediate );
00437
00438 virtual void qos( u_int16_t channel,
00439 u_int32_t prefetchSize,
00440 u_int16_t prefetchCount,
00441 u_int32_t consumeRate,
00442 bool global );
00443 };
00444
00445
00446 class Test : virtual public AMQP_ServerOperations::TestHandler
00447 {
00448 private:
00449 OutputHandler* out;
00450 AMQP_ServerProxy* parent;
00451
00452 public:
00453
00454
00455 Test(OutputHandler* out, AMQP_ServerProxy* _parent) :
00456 out(out) {parent = _parent;}
00457 virtual ~Test() {}
00458
00459
00460
00461 virtual void content( u_int16_t channel );
00462
00463 virtual void contentOk( u_int16_t channel,
00464 u_int32_t contentChecksum );
00465
00466 virtual void integer( u_int16_t channel,
00467 u_int8_t integer1,
00468 u_int16_t integer2,
00469 u_int32_t integer3,
00470 u_int64_t integer4,
00471 u_int8_t operation );
00472
00473 virtual void integerOk( u_int16_t channel,
00474 u_int64_t result );
00475
00476 virtual void string_( u_int16_t channel,
00477 const string& string1,
00478 const string& string2,
00479 u_int8_t operation );
00480
00481 virtual void stringOk( u_int16_t channel,
00482 const string& result );
00483
00484 virtual void table( u_int16_t channel,
00485 const FieldTable& table,
00486 u_int8_t integerOp,
00487 u_int8_t stringOp );
00488
00489 virtual void tableOk( u_int16_t channel,
00490 u_int64_t integerResult,
00491 const string& stringResult );
00492 };
00493
00494
00495 class Tunnel : virtual public AMQP_ServerOperations::TunnelHandler
00496 {
00497 private:
00498 OutputHandler* out;
00499 AMQP_ServerProxy* parent;
00500
00501 public:
00502
00503
00504 Tunnel(OutputHandler* out, AMQP_ServerProxy* _parent) :
00505 out(out) {parent = _parent;}
00506 virtual ~Tunnel() {}
00507
00508
00509
00510 virtual void request( u_int16_t channel,
00511 const FieldTable& metaData );
00512 };
00513
00514
00515 class Tx : virtual public AMQP_ServerOperations::TxHandler
00516 {
00517 private:
00518 OutputHandler* out;
00519 AMQP_ServerProxy* parent;
00520
00521 public:
00522
00523
00524 Tx(OutputHandler* out, AMQP_ServerProxy* _parent) :
00525 out(out) {parent = _parent;}
00526 virtual ~Tx() {}
00527
00528
00529
00530 virtual void commit( u_int16_t channel );
00531
00532 virtual void rollback( u_int16_t channel );
00533
00534 virtual void select( u_int16_t channel );
00535 };
00536
00537 private:
00538
00539
00540 Access access;
00541 Basic basic;
00542 Channel channel;
00543 Connection connection;
00544 Dtx dtx;
00545 Exchange exchange;
00546 File file;
00547 Queue queue;
00548 Stream stream;
00549 Test test;
00550 Tunnel tunnel;
00551 Tx tx;
00552
00553 public:
00554
00555
00556 Access& getAccess();
00557 Basic& getBasic();
00558 Channel& getChannel();
00559 Connection& getConnection();
00560 Dtx& getDtx();
00561 Exchange& getExchange();
00562 File& getFile();
00563 Queue& getQueue();
00564 Stream& getStream();
00565 Test& getTest();
00566 Tunnel& getTunnel();
00567 Tx& getTx();
00568
00569 };
00570
00571 }
00572 }
00573
00574 #endif