WireAPI 0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/amq_connection.c +232 -0
- data/amq_connection.h +5 -0
- data/amq_content.c +533 -0
- data/amq_content.h +7 -0
- data/amq_field_list.c +318 -0
- data/amq_field_list.h +13 -0
- data/amq_session.c +954 -0
- data/amq_session.h +5 -0
- data/amq_types.c +273 -0
- data/amq_types.h +128 -0
- data/amq_wireapi.c +195 -0
- data/extconf.rb +30 -0
- metadata +64 -0
data/amq_session.c
ADDED
@@ -0,0 +1,954 @@
|
|
1
|
+
/**********************************************
|
2
|
+
* Document-class: AMQ_Session
|
3
|
+
*
|
4
|
+
*
|
5
|
+
**********************************************/
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
#include <ruby.h>
|
10
|
+
#include "amq_client_session.h"
|
11
|
+
#include "amq_types.h"
|
12
|
+
#include "amq_field_list.h"
|
13
|
+
|
14
|
+
VALUE amqp_int64;
|
15
|
+
VALUE amqp_session;
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
static VALUE amq_server_error_reply_code(VALUE self) {
|
20
|
+
return rb_iv_get(self,"reply_code");
|
21
|
+
}
|
22
|
+
|
23
|
+
|
24
|
+
/* when reply code is not 0 throw a server error */
|
25
|
+
int check_reply_code(VALUE self) {
|
26
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
27
|
+
int reply_code=session_obj->session->reply_code;
|
28
|
+
if (reply_code) {
|
29
|
+
VALUE reply_text=rb_str_new2(session_obj->session->reply_text);
|
30
|
+
VALUE _reply_code= INT2NUM(reply_code);
|
31
|
+
VALUE argv[1];
|
32
|
+
argv[0]=reply_text;
|
33
|
+
VALUE exception=rb_class_new_instance(1,argv, rb_amq_server_error);
|
34
|
+
rb_iv_set(exception, "reply_code", _reply_code);
|
35
|
+
rb_exc_raise(exception);
|
36
|
+
return -1;
|
37
|
+
}
|
38
|
+
return 0;
|
39
|
+
}
|
40
|
+
|
41
|
+
/*
|
42
|
+
* AMQ_Session#alive() -> boolean
|
43
|
+
*
|
44
|
+
* session is paused or active
|
45
|
+
*/
|
46
|
+
static VALUE ses_active(VALUE self)
|
47
|
+
{
|
48
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
49
|
+
if (amq_client_session_get_active(session_obj->session))
|
50
|
+
return Qtrue;
|
51
|
+
else
|
52
|
+
return Qfalse;
|
53
|
+
}
|
54
|
+
|
55
|
+
/*
|
56
|
+
* AMQ_Session#alive() -> boolean
|
57
|
+
*
|
58
|
+
* FALSE when connection has had an error
|
59
|
+
*/
|
60
|
+
static VALUE ses_alive(VALUE self)
|
61
|
+
{
|
62
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
63
|
+
if (amq_client_session_get_alive(session_obj->session))
|
64
|
+
return Qtrue;
|
65
|
+
else
|
66
|
+
return Qfalse;
|
67
|
+
|
68
|
+
}
|
69
|
+
|
70
|
+
|
71
|
+
/*
|
72
|
+
* AMQ_Session#error_text -> string
|
73
|
+
*/
|
74
|
+
static VALUE ses_error_text(VALUE self)
|
75
|
+
{
|
76
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
77
|
+
return rb_str_new2(session_obj->session->error_text);
|
78
|
+
}
|
79
|
+
|
80
|
+
/*
|
81
|
+
* AMQ_Session#destroy() -> nil
|
82
|
+
*
|
83
|
+
* After calling this method the session object will become unusable since the
|
84
|
+
* internal structures will be released
|
85
|
+
*/
|
86
|
+
static VALUE ses_client_session_destroy(VALUE self)
|
87
|
+
{
|
88
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,0);
|
89
|
+
if (session_obj && session_obj->session) {
|
90
|
+
amq_client_session_destroy (&(session_obj->session));
|
91
|
+
session_obj->session=0;
|
92
|
+
}
|
93
|
+
return Qnil;
|
94
|
+
}
|
95
|
+
|
96
|
+
/*
|
97
|
+
* AMQ_Session#exchange -> string
|
98
|
+
*/
|
99
|
+
static VALUE ses_exchange(VALUE self)
|
100
|
+
{
|
101
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
102
|
+
return rb_str_new2(amq_client_session_get_exchange(session_obj->session));
|
103
|
+
}
|
104
|
+
|
105
|
+
|
106
|
+
/*
|
107
|
+
* AMQ_Session#message_count -> number
|
108
|
+
*/
|
109
|
+
static VALUE ses_message_count(VALUE self)
|
110
|
+
{
|
111
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
112
|
+
return INT2FIX(amq_client_session_get_message_count(session_obj->session));
|
113
|
+
}
|
114
|
+
|
115
|
+
|
116
|
+
/*
|
117
|
+
* AMQ_Session#consumer_count -> number
|
118
|
+
*/
|
119
|
+
static VALUE ses_consumer_count(VALUE self)
|
120
|
+
{
|
121
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
122
|
+
return INT2FIX(amq_client_session_get_consumer_count(session_obj->session));
|
123
|
+
}
|
124
|
+
|
125
|
+
/*
|
126
|
+
* AMQ_Session#queue -> string
|
127
|
+
*/
|
128
|
+
static VALUE ses_queue(VALUE self)
|
129
|
+
{
|
130
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
131
|
+
return rb_str_new2(session_obj->session->queue);
|
132
|
+
}
|
133
|
+
|
134
|
+
/*
|
135
|
+
* AMQ_Session#reply_code -> number
|
136
|
+
*/
|
137
|
+
static VALUE ses_reply_code(VALUE self)
|
138
|
+
{
|
139
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
140
|
+
return INT2FIX(session_obj->session->reply_code);
|
141
|
+
}
|
142
|
+
|
143
|
+
/*
|
144
|
+
* AMQ_Session#reply_text -> string
|
145
|
+
*/
|
146
|
+
static VALUE ses_reply_text(VALUE self)
|
147
|
+
{
|
148
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
149
|
+
return rb_str_new2(session_obj->session->reply_text);
|
150
|
+
}
|
151
|
+
|
152
|
+
/*
|
153
|
+
* AMQ_Session#wait(timeout) -> number
|
154
|
+
*
|
155
|
+
* * timeout FixNum
|
156
|
+
*/
|
157
|
+
static VALUE ses_client_session_wait(int argc,VALUE *argv,VALUE self)
|
158
|
+
{
|
159
|
+
VALUE timeout;
|
160
|
+
rb_scan_args(argc,argv,"01",&timeout);
|
161
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
162
|
+
if (timeout==Qnil) {
|
163
|
+
timeout=INT2NUM(0);
|
164
|
+
}
|
165
|
+
if( FIXNUM_P(timeout))
|
166
|
+
{
|
167
|
+
int result = amq_client_session_wait (session_obj->session,NUM2INT(timeout));
|
168
|
+
if (result) {
|
169
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
170
|
+
}
|
171
|
+
}
|
172
|
+
else
|
173
|
+
{
|
174
|
+
rb_raise(rb_eTypeError,"Timeout was not an Fixnum");
|
175
|
+
}
|
176
|
+
return self;
|
177
|
+
}
|
178
|
+
|
179
|
+
/*
|
180
|
+
* AMQ_Session#exchange_declare(exchangeName,type,passive,durable,autodelete,internal) -> self
|
181
|
+
*
|
182
|
+
* * exchangeName : String
|
183
|
+
* * type : String from "fanout", "direct", "topic", and "header"
|
184
|
+
* * passive : boolean true will create
|
185
|
+
* * durable : boolean
|
186
|
+
* * autodelete: boolean
|
187
|
+
* * internal : boolean
|
188
|
+
*/
|
189
|
+
|
190
|
+
static VALUE ses_client_session_exchange_declare(int argc,VALUE *argv,VALUE self) {
|
191
|
+
VALUE exchange;
|
192
|
+
VALUE type;
|
193
|
+
VALUE passive;
|
194
|
+
VALUE durable;
|
195
|
+
VALUE autodelete;
|
196
|
+
VALUE internal;
|
197
|
+
VALUE argument_table_opt;
|
198
|
+
rb_scan_args(argc,argv,"61",&exchange,&type,&passive,&durable,&autodelete,&internal,&argument_table_opt);
|
199
|
+
|
200
|
+
Check_Type(exchange,T_STRING);
|
201
|
+
Check_Type(type,T_STRING);
|
202
|
+
char *_exchange = StringValuePtr(exchange);
|
203
|
+
char *_type = StringValuePtr(type);
|
204
|
+
int _passive=VALUE2bool(passive,"arg: passive not boolean");
|
205
|
+
int _durable=VALUE2bool(durable,"arg: durable not boolean");
|
206
|
+
int _autodelete=VALUE2bool(autodelete,"arg: autodelete not boolean");
|
207
|
+
int _internal=VALUE2bool(internal,"arg: internal not boolean");
|
208
|
+
icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
|
209
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
210
|
+
int result=amq_client_session_exchange_declare(session_obj->session,0,
|
211
|
+
_exchange,
|
212
|
+
_type,
|
213
|
+
_passive,
|
214
|
+
_durable,
|
215
|
+
_autodelete,
|
216
|
+
_internal,
|
217
|
+
_argument_table);
|
218
|
+
if ( _argument_table) {
|
219
|
+
icl_longstr_destroy(& _argument_table);
|
220
|
+
_argument_table=0;
|
221
|
+
}
|
222
|
+
if (result) {
|
223
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
224
|
+
}
|
225
|
+
check_reply_code(self);
|
226
|
+
return self;
|
227
|
+
}
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
static VALUE ses_client_session_exchange_declare_nowait(int argc,VALUE *argv,VALUE self) {
|
232
|
+
VALUE exchange;
|
233
|
+
VALUE type;
|
234
|
+
VALUE passive;
|
235
|
+
VALUE durable;
|
236
|
+
VALUE autodelete;
|
237
|
+
VALUE internal;
|
238
|
+
VALUE argument_table_opt;
|
239
|
+
rb_scan_args(argc,argv,"61",&exchange,&type,&passive,&durable,&autodelete,&internal,&argument_table_opt);
|
240
|
+
|
241
|
+
Check_Type(exchange,T_STRING);
|
242
|
+
|
243
|
+
char *_exchange = StringValuePtr(exchange);
|
244
|
+
char *_type = StringValuePtr(type);
|
245
|
+
int _passive=VALUE2bool(passive,"arg: passive not boolean");
|
246
|
+
int _durable=VALUE2bool(durable,"arg: durable not boolean");
|
247
|
+
int _autodelete=VALUE2bool(autodelete,"arg: autodelete not boolean");
|
248
|
+
int _internal=VALUE2bool(internal,"arg: internal not boolean");
|
249
|
+
icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
|
250
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
251
|
+
int result=amq_client_session_exchange_declare_nowait(session_obj->session,0,
|
252
|
+
_exchange,
|
253
|
+
_type,
|
254
|
+
_passive,
|
255
|
+
_durable,
|
256
|
+
_autodelete,
|
257
|
+
_internal,
|
258
|
+
_argument_table);
|
259
|
+
if ( _argument_table) {
|
260
|
+
icl_longstr_destroy(& _argument_table);
|
261
|
+
_argument_table=0;
|
262
|
+
}
|
263
|
+
if (result) {
|
264
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
265
|
+
}
|
266
|
+
check_reply_code(self);
|
267
|
+
return self;
|
268
|
+
}
|
269
|
+
|
270
|
+
|
271
|
+
/*
|
272
|
+
* AMQ_Session#exchange_delete(exchangeName) -> self
|
273
|
+
*
|
274
|
+
* * exchangeName : String
|
275
|
+
*/
|
276
|
+
static VALUE ses_client_session_exchange_delete(VALUE self,
|
277
|
+
VALUE exchange)
|
278
|
+
{
|
279
|
+
Check_Type(exchange,T_STRING);
|
280
|
+
char *_exchange = StringValuePtr(exchange);
|
281
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
282
|
+
int result=amq_client_session_exchange_delete(session_obj->session,0,_exchange,0);
|
283
|
+
if (result) {
|
284
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
285
|
+
}
|
286
|
+
check_reply_code(self);
|
287
|
+
return self;
|
288
|
+
}
|
289
|
+
|
290
|
+
/*
|
291
|
+
* AMQ_Session#exchange_delete_nowait(exchangeName) -> self
|
292
|
+
*
|
293
|
+
* * exchangeName : String
|
294
|
+
*/
|
295
|
+
static VALUE ses_client_session_exchange_delete_nowait(VALUE self,
|
296
|
+
VALUE exchange)
|
297
|
+
{
|
298
|
+
Check_Type(exchange,T_STRING);
|
299
|
+
char *_exchange = StringValuePtr(exchange);
|
300
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
301
|
+
int result=amq_client_session_exchange_delete_nowait(session_obj->session,0,_exchange,0);
|
302
|
+
if (result) {
|
303
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
304
|
+
}
|
305
|
+
check_reply_code(self);
|
306
|
+
return self;
|
307
|
+
}
|
308
|
+
|
309
|
+
|
310
|
+
|
311
|
+
|
312
|
+
/*
|
313
|
+
* AMQ_Session#exchange_declare(queueName,passive,durable,exclusive,autodelete) -> self
|
314
|
+
*
|
315
|
+
* * queueName : String
|
316
|
+
* * passive : boolean true will create
|
317
|
+
* * durable : boolean
|
318
|
+
* * exclusive : boolean
|
319
|
+
* * autodelete: boolean
|
320
|
+
*/
|
321
|
+
static VALUE ses_client_session_queue_declare(int argc,VALUE *argv,VALUE self)
|
322
|
+
{
|
323
|
+
VALUE queuename;
|
324
|
+
VALUE passive;
|
325
|
+
VALUE durable;
|
326
|
+
VALUE exclusive;
|
327
|
+
VALUE autodelete;
|
328
|
+
VALUE argument_table_opt;
|
329
|
+
|
330
|
+
rb_scan_args(argc,argv,"51",&queuename, &passive, &durable, &exclusive,&autodelete,&argument_table_opt);
|
331
|
+
|
332
|
+
char *_queuename = 0;
|
333
|
+
if (queuename!=Qnil)
|
334
|
+
_queuename=StringValuePtr(queuename);
|
335
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
336
|
+
|
337
|
+
int _passive=VALUE2bool(passive,"arg: passive not boolean");
|
338
|
+
int _durable=VALUE2bool(durable,"arg: durable not boolean");
|
339
|
+
int _exclusive=VALUE2bool(exclusive,"arg: exclusive not boolean");
|
340
|
+
int _autodelete=VALUE2bool(autodelete,"arg: autodelete not boolean");
|
341
|
+
icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
|
342
|
+
int result=amq_client_session_queue_declare(session_obj->session,0,
|
343
|
+
_queuename,
|
344
|
+
_passive,
|
345
|
+
_durable,
|
346
|
+
_exclusive,
|
347
|
+
_autodelete,
|
348
|
+
_argument_table);
|
349
|
+
if ( _argument_table) {
|
350
|
+
icl_longstr_destroy(& _argument_table);
|
351
|
+
_argument_table=0;
|
352
|
+
}
|
353
|
+
if (result) {
|
354
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
355
|
+
}
|
356
|
+
check_reply_code(self);
|
357
|
+
return self;
|
358
|
+
}
|
359
|
+
|
360
|
+
|
361
|
+
static VALUE ses_client_session_queue_declare_nowait(int argc,VALUE *argv,VALUE self)
|
362
|
+
{
|
363
|
+
VALUE queuename;
|
364
|
+
VALUE passive;
|
365
|
+
VALUE durable;
|
366
|
+
VALUE exclusive;
|
367
|
+
VALUE autodelete;
|
368
|
+
VALUE argument_table_opt;
|
369
|
+
|
370
|
+
rb_scan_args(argc,argv,"51",&queuename, &passive, &durable, &exclusive,&autodelete,&argument_table_opt);
|
371
|
+
|
372
|
+
char *_queuename = 0;
|
373
|
+
if (queuename!=Qnil)
|
374
|
+
_queuename=StringValuePtr(queuename);
|
375
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
376
|
+
|
377
|
+
int _passive=VALUE2bool(passive,"arg: passive not boolean");
|
378
|
+
int _durable=VALUE2bool(durable,"arg: durable not boolean");
|
379
|
+
int _exclusive=VALUE2bool(exclusive,"arg: exclusive not boolean");
|
380
|
+
int _autodelete=VALUE2bool(autodelete,"arg: autodelete not boolean");
|
381
|
+
icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
|
382
|
+
int result=amq_client_session_queue_declare_nowait(session_obj->session,0,
|
383
|
+
_queuename,_passive,
|
384
|
+
_durable,
|
385
|
+
_exclusive,
|
386
|
+
_autodelete,
|
387
|
+
_argument_table);
|
388
|
+
if ( _argument_table) {
|
389
|
+
icl_longstr_destroy(& _argument_table);
|
390
|
+
_argument_table=0;
|
391
|
+
}
|
392
|
+
if (result) {
|
393
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
394
|
+
}
|
395
|
+
check_reply_code(self);
|
396
|
+
return self;
|
397
|
+
}
|
398
|
+
|
399
|
+
|
400
|
+
/*
|
401
|
+
* AMQ_Session#queue_delete(queuename) -> self
|
402
|
+
* * queuename : string
|
403
|
+
*/
|
404
|
+
static VALUE ses_client_session_queue_delete(VALUE self,
|
405
|
+
VALUE queuename)
|
406
|
+
{
|
407
|
+
char *_queuename = 0;
|
408
|
+
if (queuename!=Qnil)
|
409
|
+
_queuename=StringValuePtr(queuename);
|
410
|
+
|
411
|
+
|
412
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
413
|
+
int result=amq_client_session_queue_delete(session_obj->session,0,_queuename,0,0);
|
414
|
+
if (result) {
|
415
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
416
|
+
}
|
417
|
+
check_reply_code(self);
|
418
|
+
return self;
|
419
|
+
}
|
420
|
+
|
421
|
+
/*
|
422
|
+
* AMQ_Session#queue_delete_nowait(queuename) -> self
|
423
|
+
* * queuename : string
|
424
|
+
*/
|
425
|
+
static VALUE ses_client_session_queue_delete_nowait(VALUE self,
|
426
|
+
VALUE queuename)
|
427
|
+
{
|
428
|
+
char *_queuename = 0;
|
429
|
+
if (queuename!=Qnil)
|
430
|
+
_queuename=StringValuePtr(queuename);
|
431
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
432
|
+
int result=amq_client_session_queue_delete_nowait(session_obj->session,0,_queuename,0,0);
|
433
|
+
if (result) {
|
434
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
435
|
+
}
|
436
|
+
check_reply_code(self);
|
437
|
+
return self;
|
438
|
+
}
|
439
|
+
|
440
|
+
|
441
|
+
|
442
|
+
|
443
|
+
|
444
|
+
static VALUE ses_client_session_queue_bind(int argc, VALUE *argv,VALUE self) {
|
445
|
+
VALUE queuename;
|
446
|
+
VALUE exchange;
|
447
|
+
VALUE routing_key;
|
448
|
+
VALUE argument_table_opt;
|
449
|
+
rb_scan_args(argc,argv,"31",&queuename,&exchange,&routing_key,&argument_table_opt);
|
450
|
+
|
451
|
+
Check_Type(exchange,T_STRING);
|
452
|
+
char *_queuename = 0;
|
453
|
+
if (queuename!=Qnil)
|
454
|
+
_queuename=StringValuePtr(queuename);
|
455
|
+
char *_exchange =StringValuePtr(exchange);
|
456
|
+
char *_routing_key = StringValuePtr(routing_key);
|
457
|
+
icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
|
458
|
+
|
459
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
460
|
+
int result=amq_client_session_queue_bind(session_obj->session,
|
461
|
+
0,
|
462
|
+
_queuename,
|
463
|
+
_exchange,
|
464
|
+
_routing_key,
|
465
|
+
_argument_table);
|
466
|
+
if ( _argument_table) {
|
467
|
+
icl_longstr_destroy(& _argument_table);
|
468
|
+
_argument_table=0;
|
469
|
+
}
|
470
|
+
|
471
|
+
if (result) {
|
472
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
473
|
+
}
|
474
|
+
check_reply_code(self);
|
475
|
+
return self;
|
476
|
+
}
|
477
|
+
|
478
|
+
|
479
|
+
|
480
|
+
|
481
|
+
static VALUE ses_client_session_queue_bind_nowait(int argc, VALUE *argv,VALUE self) {
|
482
|
+
VALUE queuename;
|
483
|
+
VALUE exchange;
|
484
|
+
VALUE routing_key;
|
485
|
+
VALUE argument_table_opt;
|
486
|
+
rb_scan_args(argc,argv,"31",&queuename,&exchange,&routing_key,&argument_table_opt);
|
487
|
+
Check_Type(exchange,T_STRING);
|
488
|
+
char *_queuename = 0;
|
489
|
+
if (queuename!=Qnil)
|
490
|
+
_queuename=StringValuePtr(queuename);
|
491
|
+
char *_exchange =StringValuePtr(exchange);
|
492
|
+
char *_routing_key = StringValuePtr(routing_key);
|
493
|
+
icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
|
494
|
+
|
495
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
496
|
+
int result=amq_client_session_queue_bind_nowait(session_obj->session,
|
497
|
+
0,
|
498
|
+
_queuename,
|
499
|
+
_exchange,
|
500
|
+
_routing_key,
|
501
|
+
_argument_table);
|
502
|
+
if ( _argument_table) {
|
503
|
+
icl_longstr_destroy(& _argument_table);
|
504
|
+
_argument_table=0;
|
505
|
+
}
|
506
|
+
|
507
|
+
if (result) {
|
508
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
509
|
+
}
|
510
|
+
check_reply_code(self);
|
511
|
+
return self;
|
512
|
+
}
|
513
|
+
|
514
|
+
|
515
|
+
|
516
|
+
static VALUE ses_client_session_queue_unbind(int argc,VALUE *argv,VALUE self) {
|
517
|
+
VALUE queuename;
|
518
|
+
VALUE exchange;
|
519
|
+
VALUE routing_key;
|
520
|
+
VALUE argument_table_opt;
|
521
|
+
rb_scan_args(argc,argv,"31",&queuename,&exchange, &routing_key,&argument_table_opt);
|
522
|
+
|
523
|
+
char *_queuename = StringValuePtr(queuename);
|
524
|
+
char *_exchange = StringValuePtr(exchange);
|
525
|
+
char *_routing_key = StringValuePtr(routing_key);
|
526
|
+
icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
|
527
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
528
|
+
int result=amq_client_session_queue_unbind(session_obj->session,0,
|
529
|
+
_queuename,
|
530
|
+
_exchange,
|
531
|
+
_routing_key,
|
532
|
+
_argument_table);
|
533
|
+
if ( _argument_table) {
|
534
|
+
icl_longstr_destroy(& _argument_table);
|
535
|
+
_argument_table=0;
|
536
|
+
}
|
537
|
+
if (result) {
|
538
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
539
|
+
}
|
540
|
+
check_reply_code(self);
|
541
|
+
return self;
|
542
|
+
}
|
543
|
+
|
544
|
+
|
545
|
+
|
546
|
+
static VALUE ses_client_session_queue_unbind_nowait(int argc,VALUE *argv,VALUE self) {
|
547
|
+
VALUE queuename;
|
548
|
+
VALUE exchange;
|
549
|
+
VALUE routing_key;
|
550
|
+
VALUE argument_table_opt;
|
551
|
+
rb_scan_args(argc,argv,"31",&queuename,&exchange, &routing_key,&argument_table_opt);
|
552
|
+
|
553
|
+
char *_queuename = StringValuePtr(queuename);
|
554
|
+
char *_exchange = StringValuePtr(exchange);
|
555
|
+
char *_routing_key = StringValuePtr(routing_key);
|
556
|
+
icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
|
557
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
558
|
+
int result=amq_client_session_queue_unbind_nowait(session_obj->session,0,
|
559
|
+
_queuename,
|
560
|
+
_exchange,
|
561
|
+
_routing_key,
|
562
|
+
_argument_table);
|
563
|
+
if ( _argument_table) {
|
564
|
+
icl_longstr_destroy(& _argument_table);
|
565
|
+
_argument_table=0;
|
566
|
+
}
|
567
|
+
if (result) {
|
568
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
569
|
+
}
|
570
|
+
check_reply_code(self);
|
571
|
+
return self;
|
572
|
+
}
|
573
|
+
|
574
|
+
|
575
|
+
/*
|
576
|
+
* AMQ_Session#client_session_queue_purge(queuename) -> self
|
577
|
+
* * queuename : string
|
578
|
+
*/
|
579
|
+
static VALUE ses_client_session_queue_purge(VALUE self,
|
580
|
+
VALUE queuename)
|
581
|
+
{
|
582
|
+
char *_queuename = 0;
|
583
|
+
if (queuename!=Qnil)
|
584
|
+
_queuename=StringValuePtr(queuename);
|
585
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
586
|
+
int result=amq_client_session_queue_purge(session_obj->session,0,_queuename);
|
587
|
+
if (result) {
|
588
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
589
|
+
}
|
590
|
+
check_reply_code(self);
|
591
|
+
return self;
|
592
|
+
}
|
593
|
+
|
594
|
+
|
595
|
+
/*
|
596
|
+
* AMQ_Session#client_session_queue_purge_nowait(queuename) -> self
|
597
|
+
* * queuename : string
|
598
|
+
*/
|
599
|
+
static VALUE ses_client_session_queue_purge_nowait(VALUE self,
|
600
|
+
VALUE queuename)
|
601
|
+
{
|
602
|
+
char *_queuename = 0;
|
603
|
+
if (queuename!=Qnil)
|
604
|
+
_queuename=StringValuePtr(queuename);
|
605
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
606
|
+
int result=amq_client_session_queue_purge(session_obj->session,0,_queuename);
|
607
|
+
if (result) {
|
608
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
609
|
+
}
|
610
|
+
check_reply_code(self);
|
611
|
+
return self;
|
612
|
+
}
|
613
|
+
|
614
|
+
|
615
|
+
|
616
|
+
static VALUE ses_client_session_basic_consume(int argc,VALUE *argv,VALUE self) {
|
617
|
+
VALUE queuename;
|
618
|
+
VALUE consumer_tag;
|
619
|
+
VALUE no_local;
|
620
|
+
VALUE no_ack;
|
621
|
+
VALUE exclusive;
|
622
|
+
VALUE argument_table_opt;
|
623
|
+
rb_scan_args(argc,argv,"51",&queuename,&consumer_tag,&no_local,&no_ack,&exclusive,&argument_table_opt);
|
624
|
+
|
625
|
+
char *_queuename = StringValuePtr(queuename);
|
626
|
+
char *_consumer_tag = 0;
|
627
|
+
if (TYPE(consumer_tag)==T_STRING)
|
628
|
+
_consumer_tag=StringValuePtr(consumer_tag);
|
629
|
+
int _no_local=VALUE2bool(no_local,"arg: no_local not boolean");
|
630
|
+
int _no_ack=VALUE2bool(no_ack,"arg: no_ack not boolean");
|
631
|
+
int _exclusive=VALUE2bool(no_local,"arg: exclusive not boolean");
|
632
|
+
icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
|
633
|
+
|
634
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
635
|
+
int result = amq_client_session_basic_consume(session_obj->session,0,
|
636
|
+
_queuename,
|
637
|
+
_consumer_tag,
|
638
|
+
_no_local,
|
639
|
+
_no_ack,
|
640
|
+
_exclusive,
|
641
|
+
_argument_table);
|
642
|
+
if ( _argument_table) {
|
643
|
+
icl_longstr_destroy(& _argument_table);
|
644
|
+
_argument_table=0;
|
645
|
+
}
|
646
|
+
if (result) {
|
647
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
648
|
+
}
|
649
|
+
check_reply_code(self);
|
650
|
+
return self;
|
651
|
+
}
|
652
|
+
|
653
|
+
|
654
|
+
|
655
|
+
static VALUE ses_client_session_basic_consume_nowait(int argc,VALUE *argv,VALUE self) {
|
656
|
+
VALUE queuename;
|
657
|
+
VALUE consumer_tag;
|
658
|
+
VALUE no_local;
|
659
|
+
VALUE no_ack;
|
660
|
+
VALUE exclusive;
|
661
|
+
VALUE argument_table_opt;
|
662
|
+
rb_scan_args(argc,argv,"51",&queuename,&consumer_tag,&no_local,&no_ack,&exclusive,&argument_table_opt);
|
663
|
+
|
664
|
+
char *_queuename = StringValuePtr(queuename);
|
665
|
+
char *_consumer_tag = 0;
|
666
|
+
if (TYPE(consumer_tag)==T_STRING)
|
667
|
+
_consumer_tag=StringValuePtr(consumer_tag);
|
668
|
+
int _no_local=VALUE2bool(no_local,"arg: no_local not boolean");
|
669
|
+
int _no_ack=VALUE2bool(no_ack,"arg: no_ack not boolean");
|
670
|
+
int _exclusive=VALUE2bool(no_local,"arg: exclusive not boolean");
|
671
|
+
icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
|
672
|
+
|
673
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
674
|
+
int result = amq_client_session_basic_consume_nowait(session_obj->session,0,
|
675
|
+
_queuename,
|
676
|
+
_consumer_tag,
|
677
|
+
_no_local,
|
678
|
+
_no_ack,
|
679
|
+
_exclusive,
|
680
|
+
_argument_table);
|
681
|
+
if ( _argument_table) {
|
682
|
+
icl_longstr_destroy(& _argument_table);
|
683
|
+
_argument_table=0;
|
684
|
+
}
|
685
|
+
if (result) {
|
686
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
687
|
+
}
|
688
|
+
check_reply_code(self);
|
689
|
+
return self;
|
690
|
+
}
|
691
|
+
|
692
|
+
|
693
|
+
|
694
|
+
|
695
|
+
|
696
|
+
/* AMQ_Session#basic_public(content,exchange,routing_key,mandatory)
|
697
|
+
*
|
698
|
+
* * content : AMQP_Content
|
699
|
+
* * exchange : String
|
700
|
+
* * routing_key : string
|
701
|
+
* * mandatory : boolean
|
702
|
+
* * immediate : boolean
|
703
|
+
*
|
704
|
+
*/
|
705
|
+
static VALUE ses_client_session_basic_publish(VALUE self,
|
706
|
+
VALUE content,
|
707
|
+
VALUE exchange,
|
708
|
+
VALUE routing_key,
|
709
|
+
VALUE mandatory,
|
710
|
+
VALUE immediate)
|
711
|
+
{
|
712
|
+
Check_Type(exchange,T_STRING);
|
713
|
+
Check_Type(routing_key,T_STRING);
|
714
|
+
char *_exchange = StringValuePtr(exchange);
|
715
|
+
char *_routing_key = StringValuePtr(routing_key);
|
716
|
+
int _mandatory=VALUE2bool(mandatory,"arg: mandatory not boolean");
|
717
|
+
int _immediate=VALUE2bool(immediate,"arg: immediate not a boolean");
|
718
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
719
|
+
amq_content_cls *const content_obj=get_amq_content_cls(content,1);
|
720
|
+
|
721
|
+
int result=amq_client_session_basic_publish(
|
722
|
+
session_obj->session,
|
723
|
+
content_obj->content, 0,
|
724
|
+
_exchange,_routing_key,
|
725
|
+
_mandatory, _immediate);
|
726
|
+
if (result) {
|
727
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
728
|
+
}
|
729
|
+
check_reply_code(self);
|
730
|
+
return self;
|
731
|
+
}
|
732
|
+
|
733
|
+
|
734
|
+
|
735
|
+
/* AMQ_Session#basic_get(queue_name,no_ack)-> self
|
736
|
+
*
|
737
|
+
* * queue_name : string
|
738
|
+
* * no_ack : boolean
|
739
|
+
*/
|
740
|
+
static VALUE ses_client_session_basic_get(VALUE self,VALUE queue_name,VALUE no_ack)
|
741
|
+
{
|
742
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
743
|
+
Check_Type(queue_name,T_STRING);
|
744
|
+
char *_queuename=StringValuePtr(queue_name);
|
745
|
+
int _no_ack=VALUE2bool(no_ack,"no ack arguments needs to be a boolean");
|
746
|
+
|
747
|
+
int res=amq_client_session_basic_get(session_obj->session,0,_queuename,_no_ack);
|
748
|
+
if (res) {
|
749
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
750
|
+
}
|
751
|
+
check_reply_code(self);
|
752
|
+
return self;
|
753
|
+
}
|
754
|
+
|
755
|
+
|
756
|
+
|
757
|
+
|
758
|
+
|
759
|
+
/* AMQ_Session#basic_arrived -> AMQP_Content or nil
|
760
|
+
*
|
761
|
+
*/
|
762
|
+
static VALUE ses_client_session_basic_arrived(VALUE self)
|
763
|
+
{
|
764
|
+
VALUE rb_content;
|
765
|
+
amq_content_basic_t *content = NULL;
|
766
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
767
|
+
content = amq_client_session_basic_arrived(session_obj->session);
|
768
|
+
check_reply_code(self);
|
769
|
+
if (content) {
|
770
|
+
rb_content = create_amq_content_cls(content);
|
771
|
+
return rb_content;
|
772
|
+
} else {
|
773
|
+
return Qnil;
|
774
|
+
}
|
775
|
+
}
|
776
|
+
|
777
|
+
|
778
|
+
|
779
|
+
/* AMQ_Session#basic_cancel(consumer_tag)
|
780
|
+
*
|
781
|
+
* consumer_tag : string
|
782
|
+
*
|
783
|
+
*/
|
784
|
+
static VALUE ses_client_session_basic_cancel(VALUE self,
|
785
|
+
VALUE consumer_tag)
|
786
|
+
{
|
787
|
+
int result;
|
788
|
+
char *_consumer_tag = StringValuePtr(consumer_tag);
|
789
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
790
|
+
result = amq_client_session_basic_cancel(session_obj->session,_consumer_tag);
|
791
|
+
if (result) {
|
792
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
793
|
+
}
|
794
|
+
check_reply_code(self);
|
795
|
+
return self;
|
796
|
+
}
|
797
|
+
|
798
|
+
|
799
|
+
/* AMQ_Session#basic_cancel_nowait(consumer_tag)
|
800
|
+
*
|
801
|
+
* * consumer_tag : string
|
802
|
+
*
|
803
|
+
*/
|
804
|
+
static VALUE ses_client_session_basic_cancel_nowait(VALUE self,
|
805
|
+
VALUE consumer_tag)
|
806
|
+
{
|
807
|
+
int result;
|
808
|
+
char *_consumer_tag = StringValuePtr(consumer_tag);
|
809
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
810
|
+
result = amq_client_session_basic_cancel_nowait(session_obj->session,_consumer_tag);
|
811
|
+
if (result) {
|
812
|
+
rb_raise(rb_amq_error,session_obj->session->error_text);
|
813
|
+
}
|
814
|
+
check_reply_code(self);
|
815
|
+
return self;
|
816
|
+
}
|
817
|
+
|
818
|
+
|
819
|
+
/*
|
820
|
+
* AMQ_Session#consumer_tag -> string
|
821
|
+
*/
|
822
|
+
static VALUE ses_consumer_tag(VALUE self)
|
823
|
+
{
|
824
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
825
|
+
return rb_str_new2(amq_client_session_get_consumer_tag(session_obj->session));
|
826
|
+
}
|
827
|
+
|
828
|
+
|
829
|
+
/*
|
830
|
+
* AMQ_Session#routing_key -> string
|
831
|
+
*/
|
832
|
+
static VALUE ses_routing_key(VALUE self)
|
833
|
+
{
|
834
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
835
|
+
return rb_str_new2(amq_client_session_get_routing_key(session_obj->session));
|
836
|
+
}
|
837
|
+
|
838
|
+
|
839
|
+
|
840
|
+
|
841
|
+
/*
|
842
|
+
* AMQ_Session#delivery_tag -> AMQP_int64
|
843
|
+
*
|
844
|
+
*/
|
845
|
+
|
846
|
+
static VALUE ses_delivery_tag(VALUE self)
|
847
|
+
{
|
848
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
849
|
+
int64_t tag=amq_client_session_get_delivery_tag(session_obj->session);
|
850
|
+
return create_amq_int64_cls(tag);
|
851
|
+
}
|
852
|
+
|
853
|
+
/*
|
854
|
+
* AMQ_Session#basic_ack (delivery_tag,multiple)
|
855
|
+
*
|
856
|
+
* * delivery_tag : AMQP_int64
|
857
|
+
* * multiple : boolean
|
858
|
+
*
|
859
|
+
*/
|
860
|
+
static VALUE ses_basic_ack(VALUE self,VALUE delivery,VALUE multiple)
|
861
|
+
{
|
862
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
863
|
+
int64_t tag=get_amq_int64_cls(delivery)->value;
|
864
|
+
int _multiple=VALUE2bool(multiple,"multiple is a boolean");
|
865
|
+
amq_client_session_basic_ack(session_obj->session,tag,_multiple);
|
866
|
+
check_reply_code(self);
|
867
|
+
return self;
|
868
|
+
}
|
869
|
+
|
870
|
+
|
871
|
+
|
872
|
+
/*
|
873
|
+
* AMQ_Session#basic_reject (delivery_tag,requeue)
|
874
|
+
*
|
875
|
+
* * delivery_tag : AMQP_int64
|
876
|
+
* * requeue : boolean
|
877
|
+
*
|
878
|
+
*/
|
879
|
+
static VALUE ses_basic_reject(VALUE self,VALUE delivery,VALUE requeue)
|
880
|
+
{
|
881
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
882
|
+
int64_t tag=get_amq_int64_cls(delivery)->value;
|
883
|
+
int _requeue=VALUE2bool(requeue,"requeue is a boolean");
|
884
|
+
amq_client_session_basic_reject(session_obj->session,tag,_requeue);
|
885
|
+
check_reply_code(self);
|
886
|
+
return self;
|
887
|
+
}
|
888
|
+
|
889
|
+
|
890
|
+
/*
|
891
|
+
* AMQ_Session#redelivered -> bool
|
892
|
+
*
|
893
|
+
*
|
894
|
+
*/
|
895
|
+
static VALUE ses_redelivered(VALUE self)
|
896
|
+
{
|
897
|
+
amq_session_cls *const session_obj=get_amq_session_cls(self,1);
|
898
|
+
if (amq_client_session_get_redelivered(session_obj->session))
|
899
|
+
return Qtrue;
|
900
|
+
else
|
901
|
+
return Qfalse;
|
902
|
+
}
|
903
|
+
|
904
|
+
|
905
|
+
void init_session() {
|
906
|
+
amqp_int64= rb_define_class_under(rb_wireapi,"AMQ_int64",rb_cObject);
|
907
|
+
|
908
|
+
rb_define_method(rb_amq_server_error,"reply_code" , amq_server_error_reply_code,0);
|
909
|
+
|
910
|
+
// Session
|
911
|
+
amqp_session = rb_define_class_under(rb_wireapi,"AMQ_Session",rb_cObject);
|
912
|
+
|
913
|
+
|
914
|
+
|
915
|
+
rb_define_method(amqp_session,"active" , ses_active,0);
|
916
|
+
rb_define_method(amqp_session,"alive" , ses_alive ,0);
|
917
|
+
rb_define_method(amqp_session,"basic_ack" , ses_basic_ack,2);
|
918
|
+
rb_define_method(amqp_session,"basic_arrived", ses_client_session_basic_arrived,0);
|
919
|
+
rb_define_method(amqp_session,"basic_cancel" , ses_client_session_basic_cancel,1);
|
920
|
+
rb_define_method(amqp_session,"basic_cancel_nowait" , ses_client_session_basic_cancel_nowait,1);
|
921
|
+
rb_define_method(amqp_session,"basic_consume", ses_client_session_basic_consume,-1);
|
922
|
+
rb_define_method(amqp_session,"basic_consume_nowait" , ses_client_session_basic_consume_nowait,-1);
|
923
|
+
rb_define_method(amqp_session,"basic_get" , ses_client_session_basic_get,2);
|
924
|
+
rb_define_method(amqp_session,"basic_publish", ses_client_session_basic_publish,5);
|
925
|
+
rb_define_method(amqp_session,"basic_reject" , ses_basic_reject,2);
|
926
|
+
rb_define_method(amqp_session,"consumer_count",ses_consumer_count,0);
|
927
|
+
rb_define_method(amqp_session,"consumer_tag" , ses_consumer_tag,0);
|
928
|
+
rb_define_method(amqp_session,"delivery_tag" , ses_delivery_tag,0);
|
929
|
+
rb_define_method(amqp_session,"destroy" , ses_client_session_destroy,0);
|
930
|
+
rb_define_method(amqp_session,"error_text" , ses_error_text,0);
|
931
|
+
rb_define_method(amqp_session,"exchange" , ses_exchange,0);
|
932
|
+
rb_define_method(amqp_session,"exchange_declare", ses_client_session_exchange_declare,-1);
|
933
|
+
rb_define_method(amqp_session,"exchange_declare_nowait", ses_client_session_exchange_declare_nowait,-1);
|
934
|
+
rb_define_method(amqp_session,"exchange_delete" , ses_client_session_exchange_delete,1);
|
935
|
+
rb_define_method(amqp_session,"exchange_delete_nowait" , ses_client_session_exchange_delete_nowait,1);
|
936
|
+
rb_define_method(amqp_session,"message_count", ses_message_count,0);
|
937
|
+
rb_define_method(amqp_session,"queue" , ses_queue,0);
|
938
|
+
rb_define_method(amqp_session,"queue_bind" , ses_client_session_queue_bind,-1);
|
939
|
+
rb_define_method(amqp_session,"queue_bind_nowait" , ses_client_session_queue_bind_nowait,-1);
|
940
|
+
rb_define_method(amqp_session,"queue_declare", ses_client_session_queue_declare,-1);
|
941
|
+
rb_define_method(amqp_session,"queue_declare_nowait" , ses_client_session_queue_declare_nowait,-1);
|
942
|
+
rb_define_method(amqp_session,"queue_delete" , ses_client_session_queue_delete,1);
|
943
|
+
rb_define_method(amqp_session,"queue_delete_nowait" , ses_client_session_queue_delete_nowait,1);
|
944
|
+
rb_define_method(amqp_session,"queue_purge" , ses_client_session_queue_purge,1);
|
945
|
+
rb_define_method(amqp_session,"queue_purge_nowait" , ses_client_session_queue_purge_nowait,1);
|
946
|
+
rb_define_method(amqp_session,"queue_unbind" , ses_client_session_queue_unbind,-1);
|
947
|
+
rb_define_method(amqp_session,"queue_unbind_nowait" , ses_client_session_queue_unbind_nowait,-1);
|
948
|
+
rb_define_method(amqp_session,"redelivered" , ses_redelivered,0);
|
949
|
+
rb_define_method(amqp_session,"reply_code" , ses_reply_code,0);
|
950
|
+
rb_define_method(amqp_session,"reply_text" , ses_reply_text,0);
|
951
|
+
rb_define_method(amqp_session,"routing_key" , ses_routing_key,0);
|
952
|
+
rb_define_method(amqp_session,"wait" , ses_client_session_wait,-1);
|
953
|
+
|
954
|
+
}
|