noggin 0.0.3 → 0.0.4
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/ext/noggin/noggin.c +90 -39
- data/ext/noggin/noggin.cr +81 -30
- data/lib/noggin/version.rb +1 -1
- metadata +3 -3
data/ext/noggin/noggin.c
CHANGED
@@ -48,10 +48,23 @@ static void __gcpool_Keep_del(VALUE val);
|
|
48
48
|
|
49
49
|
/* Inline C code */
|
50
50
|
|
51
|
+
inline VALUE as_string(const char *string);
|
52
|
+
int hash_to_cups_options_it(VALUE key, VALUE val, VALUE data);
|
53
|
+
static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count);
|
54
|
+
static VALUE rb_ipp_value(ipp_attribute_t* attr);
|
55
|
+
VALUE job_state(ipp_jstate_t state);
|
56
|
+
static VALUE renew_subscription(int subscription_id, int duration);
|
57
|
+
static void debug_ipp(ipp_t *ipp);
|
58
|
+
static VALUE create_subscription(int duration, char *uri, char *printer);
|
59
|
+
static void cancel_subscription(int subscription_id);
|
60
|
+
static VALUE list_subscriptions(bool my_subscriptions);
|
51
61
|
|
52
|
-
inline VALUE as_string(const char *string) { return string ? rb_str_new2(string) : Qnil; }
|
53
62
|
|
54
|
-
|
63
|
+
|
64
|
+
inline VALUE as_string(const char *string)
|
65
|
+
{
|
66
|
+
return string ? rb_str_new2(string) : Qnil;
|
67
|
+
}
|
55
68
|
|
56
69
|
static VALUE sym_aborted = Qnil;
|
57
70
|
static VALUE sym_cancelled = Qnil;
|
@@ -63,7 +76,7 @@ static VALUE sym_stopped = Qnil;
|
|
63
76
|
|
64
77
|
#define SUBSCRIPTION_DURATION 3600
|
65
78
|
#define STATIC_STR(name) static VALUE str_##name = Qnil;
|
66
|
-
#define STATIC_STR_INIT(name) KEEP_ADD(str_##name = rb_str_new2(#name));
|
79
|
+
#define STATIC_STR_INIT(name) KEEP_ADD(str_##name = rb_str_new2(#name));
|
67
80
|
STATIC_STR(completed_time);
|
68
81
|
STATIC_STR(creation_time);
|
69
82
|
STATIC_STR(dest);
|
@@ -86,14 +99,16 @@ struct svp_it {
|
|
86
99
|
cups_option_t *options;
|
87
100
|
};
|
88
101
|
|
89
|
-
int hash_to_cups_options_it(VALUE key, VALUE val, VALUE data)
|
102
|
+
int hash_to_cups_options_it(VALUE key, VALUE val, VALUE data)
|
103
|
+
{
|
90
104
|
struct svp_it *svp = (struct svp_it *)data;
|
91
105
|
svp->num_options = cupsAddOption(StringValuePtr(key), StringValuePtr(val), svp->num_options, &(svp->options));
|
92
106
|
return ST_CONTINUE;
|
93
107
|
}
|
94
108
|
|
95
|
-
static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count)
|
96
|
-
|
109
|
+
static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count)
|
110
|
+
{
|
111
|
+
const char *lang = NULL;
|
97
112
|
char block[4096] = "";
|
98
113
|
|
99
114
|
/*char block[4096] = "";
|
@@ -102,7 +117,10 @@ static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count) {
|
|
102
117
|
|
103
118
|
switch (ippGetValueTag(attr)) {
|
104
119
|
case IPP_TAG_INTEGER:
|
120
|
+
case IPP_TAG_JOB:
|
105
121
|
return INT2NUM(ippGetInteger(attr, count));
|
122
|
+
case IPP_TAG_ZERO:
|
123
|
+
return INT2FIX(0);
|
106
124
|
case IPP_TAG_RESERVED_STRING:
|
107
125
|
case IPP_TAG_STRING:
|
108
126
|
case IPP_TAG_SUBSCRIPTION:
|
@@ -120,6 +138,32 @@ static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count) {
|
|
120
138
|
return as_string(ippGetString(attr, count, &lang));
|
121
139
|
case IPP_TAG_BOOLEAN:
|
122
140
|
return ippGetBoolean(attr, count) ? Qtrue : Qfalse;
|
141
|
+
case IPP_TAG_CUPS_INVALID:
|
142
|
+
return Qnil;
|
143
|
+
/* Are these just groups tags? */
|
144
|
+
case IPP_TAG_OPERATION:
|
145
|
+
case IPP_TAG_END:
|
146
|
+
case IPP_TAG_PRINTER:
|
147
|
+
case IPP_TAG_UNSUPPORTED_GROUP:
|
148
|
+
case IPP_TAG_EVENT_NOTIFICATION:
|
149
|
+
case IPP_TAG_RESOURCE:
|
150
|
+
case IPP_TAG_DOCUMENT:
|
151
|
+
case IPP_TAG_UNSUPPORTED_VALUE:
|
152
|
+
case IPP_TAG_DEFAULT:
|
153
|
+
case IPP_TAG_UNKNOWN:
|
154
|
+
case IPP_TAG_NOVALUE:
|
155
|
+
case IPP_TAG_NOTSETTABLE:
|
156
|
+
case IPP_TAG_DELETEATTR:
|
157
|
+
case IPP_TAG_ADMINDEFINE:
|
158
|
+
case IPP_TAG_ENUM:
|
159
|
+
case IPP_TAG_DATE:
|
160
|
+
case IPP_TAG_RESOLUTION:
|
161
|
+
case IPP_TAG_RANGE:
|
162
|
+
case IPP_TAG_BEGIN_COLLECTION:
|
163
|
+
case IPP_TAG_END_COLLECTION:
|
164
|
+
case IPP_TAG_EXTENSION:
|
165
|
+
case IPP_TAG_MASK:
|
166
|
+
case IPP_TAG_COPY:
|
123
167
|
default:
|
124
168
|
ippAttributeString(attr, block, 4096);
|
125
169
|
printf("[UNSUPPORTED] %s: (%i) %s\n", ippGetName(attr), ippGetValueTag(attr), block);
|
@@ -128,7 +172,8 @@ static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count) {
|
|
128
172
|
}
|
129
173
|
}
|
130
174
|
|
131
|
-
static VALUE rb_ipp_value(ipp_attribute_t* attr)
|
175
|
+
static VALUE rb_ipp_value(ipp_attribute_t* attr)
|
176
|
+
{
|
132
177
|
int num = ippGetCount(attr), i = 0;
|
133
178
|
VALUE val = Qnil;
|
134
179
|
|
@@ -147,8 +192,10 @@ static VALUE rb_ipp_value(ipp_attribute_t* attr) {
|
|
147
192
|
}
|
148
193
|
|
149
194
|
|
150
|
-
VALUE job_state(ipp_jstate_t state)
|
151
|
-
|
195
|
+
VALUE job_state(ipp_jstate_t state)
|
196
|
+
{
|
197
|
+
switch(state)
|
198
|
+
{
|
152
199
|
case IPP_JOB_ABORTED:
|
153
200
|
return sym_aborted;
|
154
201
|
case IPP_JOB_CANCELED:
|
@@ -163,15 +210,15 @@ VALUE job_state(ipp_jstate_t state) {
|
|
163
210
|
return sym_processing;
|
164
211
|
case IPP_JOB_STOPPED:
|
165
212
|
return sym_stopped;
|
166
|
-
|
167
|
-
|
213
|
+
default:
|
214
|
+
return INT2FIX(state);
|
215
|
+
}
|
168
216
|
}
|
169
217
|
|
170
|
-
static VALUE renew_subscription(int subscription_id, int duration)
|
171
|
-
|
218
|
+
static VALUE renew_subscription(int subscription_id, int duration)
|
219
|
+
{
|
172
220
|
http_t *http;
|
173
221
|
ipp_t *request;
|
174
|
-
ipp_t *response;
|
175
222
|
|
176
223
|
if ((http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption ())) == NULL) {
|
177
224
|
return Qnil;
|
@@ -193,7 +240,8 @@ static VALUE renew_subscription(int subscription_id, int duration) {
|
|
193
240
|
return INT2NUM(subscription_id);
|
194
241
|
}
|
195
242
|
|
196
|
-
static void debug_ipp(ipp_t *ipp)
|
243
|
+
static void debug_ipp(ipp_t *ipp)
|
244
|
+
{
|
197
245
|
char block[4096] = "";
|
198
246
|
ipp_attribute_t *attr = NULL;
|
199
247
|
|
@@ -204,7 +252,8 @@ static void debug_ipp(ipp_t *ipp) {
|
|
204
252
|
|
205
253
|
}
|
206
254
|
|
207
|
-
static VALUE create_subscription(int duration, char *uri, char *printer)
|
255
|
+
static VALUE create_subscription(int duration, char *uri, char *printer)
|
256
|
+
{
|
208
257
|
ipp_attribute_t *attr = NULL;
|
209
258
|
http_t *http;
|
210
259
|
ipp_t *request;
|
@@ -260,8 +309,7 @@ static VALUE create_subscription(int duration, char *uri, char *printer) {
|
|
260
309
|
return subscription_id;
|
261
310
|
}
|
262
311
|
|
263
|
-
static void
|
264
|
-
cancel_subscription(int subscription_id)
|
312
|
+
static void cancel_subscription(int subscription_id)
|
265
313
|
{
|
266
314
|
http_t *http;
|
267
315
|
ipp_t *request;
|
@@ -282,12 +330,12 @@ cancel_subscription(int subscription_id)
|
|
282
330
|
}
|
283
331
|
}
|
284
332
|
|
285
|
-
static VALUE list_subscriptions(bool my_subscriptions)
|
333
|
+
static VALUE list_subscriptions(bool my_subscriptions)
|
334
|
+
{
|
286
335
|
ipp_attribute_t *attr = NULL;
|
287
336
|
http_t *http;
|
288
337
|
ipp_t *request;
|
289
338
|
ipp_t *response;
|
290
|
-
VALUE subscription_id = 0;
|
291
339
|
VALUE ary = rb_ary_new();
|
292
340
|
static const char * const req_attr[] = {
|
293
341
|
"all"
|
@@ -308,8 +356,12 @@ static VALUE list_subscriptions(bool my_subscriptions) {
|
|
308
356
|
my_subscriptions);
|
309
357
|
response = cupsDoRequest (http, request, "/");
|
310
358
|
|
311
|
-
if (response
|
312
|
-
|
359
|
+
if (response == NULL) {
|
360
|
+
goto out;
|
361
|
+
}
|
362
|
+
|
363
|
+
if (ippGetStatusCode(response) <= IPP_OK_CONFLICT) {
|
364
|
+
const char *name;
|
313
365
|
VALUE hash = rb_hash_new();
|
314
366
|
|
315
367
|
attr = ippFirstAttribute(response);
|
@@ -326,18 +378,17 @@ static VALUE list_subscriptions(bool my_subscriptions) {
|
|
326
378
|
rb_ary_push(ary, hash);
|
327
379
|
} else {
|
328
380
|
rb_hash_aset(hash, as_string(name), rb_ipp_value(attr));
|
329
|
-
/*puts(ippGetName(attr));
|
381
|
+
/*{ char block[4096] = ""; puts(ippGetName(attr));
|
330
382
|
if (ippAttributeString(attr, block, 4096) > 0) {
|
331
383
|
puts(block);
|
332
|
-
}*/
|
384
|
+
}}*/
|
333
385
|
}
|
334
386
|
}
|
335
387
|
}
|
336
388
|
|
337
|
-
|
338
|
-
ippDelete(response);
|
339
|
-
}
|
389
|
+
ippDelete(response);
|
340
390
|
|
391
|
+
out:
|
341
392
|
httpClose (http);
|
342
393
|
|
343
394
|
return ary;
|
@@ -350,7 +401,7 @@ Noggin_CLASS_destinations(VALUE self OPTIONAL_ATTR )
|
|
350
401
|
{
|
351
402
|
VALUE __p_retval OPTIONAL_ATTR = Qnil;
|
352
403
|
|
353
|
-
#line
|
404
|
+
#line 408 "/home/geoff/Projects/noggin/ext/noggin/noggin.cr"
|
354
405
|
|
355
406
|
do {
|
356
407
|
VALUE list =
|
@@ -359,7 +410,6 @@ Noggin_CLASS_destinations(VALUE self OPTIONAL_ATTR )
|
|
359
410
|
int num_dests = cupsGetDests(&dests);
|
360
411
|
cups_dest_t * dest ;
|
361
412
|
int i ;
|
362
|
-
const char * value ;
|
363
413
|
int j ;
|
364
414
|
list = rb_ary_new2(num_dests);
|
365
415
|
for (i = num_dests, dest = dests;
|
@@ -372,7 +422,7 @@ Noggin_CLASS_destinations(VALUE self OPTIONAL_ATTR )
|
|
372
422
|
rb_hash_aset(hash, str_options, options);
|
373
423
|
for (j = 0;
|
374
424
|
j < dest->num_options;
|
375
|
-
j++) { rb_hash_aset(options, as_string(dest->options[j].name), as_string(dest->options[j].value));
|
425
|
+
j++) { rb_hash_aset(options, as_string((dest->options[j].name)), as_string((dest->options[j].value)));
|
376
426
|
} rb_ary_push(list, hash);
|
377
427
|
} cupsFreeDests(num_dests, dests);
|
378
428
|
do { __p_retval = list; goto out; } while(0);
|
@@ -394,7 +444,7 @@ Noggin_CLASS_jobs(VALUE self OPTIONAL_ATTR , VALUE printer OPTIONAL_ATTR, VALUE
|
|
394
444
|
__orig_mine = mine = RTEST(__v_mine);
|
395
445
|
__orig_whichjobs = whichjobs = NUM2INT(__v_whichjobs);
|
396
446
|
|
397
|
-
#line
|
447
|
+
#line 437 "/home/geoff/Projects/noggin/ext/noggin/noggin.cr"
|
398
448
|
|
399
449
|
do {
|
400
450
|
VALUE list =
|
@@ -457,7 +507,7 @@ Noggin_CLASS_printFile(int __p_argc, VALUE *__p_argv, VALUE self)
|
|
457
507
|
rb_raise(rb_eArgError, "options argument must be one of Hash, Nil");
|
458
508
|
|
459
509
|
|
460
|
-
#line
|
510
|
+
#line 468 "/home/geoff/Projects/noggin/ext/noggin/noggin.cr"
|
461
511
|
|
462
512
|
do {
|
463
513
|
struct svp_it info =
|
@@ -482,7 +532,7 @@ Job_CLASS_cancel(VALUE self OPTIONAL_ATTR , VALUE __v_printer OPTIONAL_ATTR, VAL
|
|
482
532
|
__orig_printer = printer = ( NIL_P(__v_printer) ? NULL : StringValuePtr(__v_printer) );
|
483
533
|
__orig_job_id = job_id = NUM2INT(__v_job_id);
|
484
534
|
|
485
|
-
#line
|
535
|
+
#line 399 "/home/geoff/Projects/noggin/ext/noggin/noggin.cr"
|
486
536
|
if (cupsCancelJob(printer, job_id) == 0) { rb_raise(rb_eRuntimeError, "CUPS Error: %d - %s", cupsLastError(), cupsLastErrorString());
|
487
537
|
}
|
488
538
|
return Qnil;
|
@@ -511,15 +561,15 @@ Subscription_CLASS_create(int __p_argc, VALUE *__p_argv, VALUE self)
|
|
511
561
|
if (__p_argc > 1)
|
512
562
|
__orig_notify_uri = notify_uri = ( NIL_P(__v_notify_uri) ? NULL : StringValuePtr(__v_notify_uri) );
|
513
563
|
else
|
514
|
-
notify_uri = "dbus://";
|
564
|
+
notify_uri = (char*)"dbus://";
|
515
565
|
|
516
566
|
if (__p_argc > 2)
|
517
567
|
__orig_printer = printer = ( NIL_P(__v_printer) ? NULL : StringValuePtr(__v_printer) );
|
518
568
|
else
|
519
|
-
printer = "/";
|
569
|
+
printer = (char*)"/";
|
520
570
|
|
521
571
|
|
522
|
-
#line
|
572
|
+
#line 486 "/home/geoff/Projects/noggin/ext/noggin/noggin.cr"
|
523
573
|
do { __p_retval = create_subscription(duration, notify_uri, printer); goto out; } while(0);
|
524
574
|
out:
|
525
575
|
return __p_retval;
|
@@ -546,7 +596,7 @@ Subscription_CLASS_renew(int __p_argc, VALUE *__p_argv, VALUE self)
|
|
546
596
|
duration = 0;
|
547
597
|
|
548
598
|
|
549
|
-
#line
|
599
|
+
#line 489 "/home/geoff/Projects/noggin/ext/noggin/noggin.cr"
|
550
600
|
do { __p_retval = renew_subscription(id, duration); goto out; } while(0);
|
551
601
|
out:
|
552
602
|
return __p_retval;
|
@@ -558,7 +608,7 @@ Subscription_CLASS_cancel(VALUE self OPTIONAL_ATTR , VALUE __v_id OPTIONAL_ATTR)
|
|
558
608
|
int id; int __orig_id;
|
559
609
|
__orig_id = id = NUM2INT(__v_id);
|
560
610
|
|
561
|
-
#line
|
611
|
+
#line 492 "/home/geoff/Projects/noggin/ext/noggin/noggin.cr"
|
562
612
|
cancel_subscription(id);
|
563
613
|
|
564
614
|
return Qnil;
|
@@ -581,7 +631,7 @@ Subscription_CLASS_list(int __p_argc, VALUE *__p_argv, VALUE self)
|
|
581
631
|
my_subscriptions = 1;
|
582
632
|
|
583
633
|
|
584
|
-
#line
|
634
|
+
#line 495 "/home/geoff/Projects/noggin/ext/noggin/noggin.cr"
|
585
635
|
do { __p_retval = list_subscriptions(my_subscriptions); goto out; } while(0);
|
586
636
|
out:
|
587
637
|
return __p_retval;
|
@@ -636,6 +686,7 @@ Init_noggin(void)
|
|
636
686
|
rb_define_singleton_method(mSubscription, "list", Subscription_CLASS_list, -1);
|
637
687
|
rb_gc_register_address(&_gcpool_Keep);
|
638
688
|
|
689
|
+
KEEP_DEL(Qnil);
|
639
690
|
KEEP_ADD(sym_cancelled = ID2SYM(rb_intern("cancelled")));
|
640
691
|
KEEP_ADD(sym_completed = ID2SYM(rb_intern("completed")));
|
641
692
|
KEEP_ADD(sym_held = ID2SYM(rb_intern("held")));
|
data/ext/noggin/noggin.cr
CHANGED
@@ -7,10 +7,23 @@
|
|
7
7
|
%lib cups
|
8
8
|
|
9
9
|
%{
|
10
|
+
inline VALUE as_string(const char *string);
|
11
|
+
int hash_to_cups_options_it(VALUE key, VALUE val, VALUE data);
|
12
|
+
static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count);
|
13
|
+
static VALUE rb_ipp_value(ipp_attribute_t* attr);
|
14
|
+
VALUE job_state(ipp_jstate_t state);
|
15
|
+
static VALUE renew_subscription(int subscription_id, int duration);
|
16
|
+
static void debug_ipp(ipp_t *ipp);
|
17
|
+
static VALUE create_subscription(int duration, char *uri, char *printer);
|
18
|
+
static void cancel_subscription(int subscription_id);
|
19
|
+
static VALUE list_subscriptions(bool my_subscriptions);
|
10
20
|
|
11
|
-
inline VALUE as_string(const char *string) { return string ? rb_str_new2(string) : Qnil; }
|
12
21
|
|
13
|
-
|
22
|
+
|
23
|
+
inline VALUE as_string(const char *string)
|
24
|
+
{
|
25
|
+
return string ? rb_str_new2(string) : Qnil;
|
26
|
+
}
|
14
27
|
|
15
28
|
static VALUE sym_aborted = Qnil;
|
16
29
|
static VALUE sym_cancelled = Qnil;
|
@@ -22,7 +35,7 @@ static VALUE sym_stopped = Qnil;
|
|
22
35
|
|
23
36
|
#define SUBSCRIPTION_DURATION 3600
|
24
37
|
#define STATIC_STR(name) static VALUE str_##name = Qnil;
|
25
|
-
#define STATIC_STR_INIT(name) KEEP_ADD(str_##name = rb_str_new2(#name));
|
38
|
+
#define STATIC_STR_INIT(name) KEEP_ADD(str_##name = rb_str_new2(#name));
|
26
39
|
STATIC_STR(completed_time);
|
27
40
|
STATIC_STR(creation_time);
|
28
41
|
STATIC_STR(dest);
|
@@ -45,14 +58,16 @@ struct svp_it {
|
|
45
58
|
cups_option_t *options;
|
46
59
|
};
|
47
60
|
|
48
|
-
int hash_to_cups_options_it(VALUE key, VALUE val, VALUE data)
|
61
|
+
int hash_to_cups_options_it(VALUE key, VALUE val, VALUE data)
|
62
|
+
{
|
49
63
|
struct svp_it *svp = (struct svp_it *)data;
|
50
64
|
svp->num_options = cupsAddOption(StringValuePtr(key), StringValuePtr(val), svp->num_options, &(svp->options));
|
51
65
|
return ST_CONTINUE;
|
52
66
|
}
|
53
67
|
|
54
|
-
static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count)
|
55
|
-
|
68
|
+
static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count)
|
69
|
+
{
|
70
|
+
const char *lang = NULL;
|
56
71
|
char block[4096] = "";
|
57
72
|
|
58
73
|
/*char block[4096] = "";
|
@@ -61,7 +76,10 @@ static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count) {
|
|
61
76
|
|
62
77
|
switch (ippGetValueTag(attr)) {
|
63
78
|
case IPP_TAG_INTEGER:
|
79
|
+
case IPP_TAG_JOB:
|
64
80
|
return INT2NUM(ippGetInteger(attr, count));
|
81
|
+
case IPP_TAG_ZERO:
|
82
|
+
return INT2FIX(0);
|
65
83
|
case IPP_TAG_RESERVED_STRING:
|
66
84
|
case IPP_TAG_STRING:
|
67
85
|
case IPP_TAG_SUBSCRIPTION:
|
@@ -79,6 +97,32 @@ static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count) {
|
|
79
97
|
return as_string(ippGetString(attr, count, &lang));
|
80
98
|
case IPP_TAG_BOOLEAN:
|
81
99
|
return ippGetBoolean(attr, count) ? Qtrue : Qfalse;
|
100
|
+
case IPP_TAG_CUPS_INVALID:
|
101
|
+
return Qnil;
|
102
|
+
/* Are these just groups tags? */
|
103
|
+
case IPP_TAG_OPERATION:
|
104
|
+
case IPP_TAG_END:
|
105
|
+
case IPP_TAG_PRINTER:
|
106
|
+
case IPP_TAG_UNSUPPORTED_GROUP:
|
107
|
+
case IPP_TAG_EVENT_NOTIFICATION:
|
108
|
+
case IPP_TAG_RESOURCE:
|
109
|
+
case IPP_TAG_DOCUMENT:
|
110
|
+
case IPP_TAG_UNSUPPORTED_VALUE:
|
111
|
+
case IPP_TAG_DEFAULT:
|
112
|
+
case IPP_TAG_UNKNOWN:
|
113
|
+
case IPP_TAG_NOVALUE:
|
114
|
+
case IPP_TAG_NOTSETTABLE:
|
115
|
+
case IPP_TAG_DELETEATTR:
|
116
|
+
case IPP_TAG_ADMINDEFINE:
|
117
|
+
case IPP_TAG_ENUM:
|
118
|
+
case IPP_TAG_DATE:
|
119
|
+
case IPP_TAG_RESOLUTION:
|
120
|
+
case IPP_TAG_RANGE:
|
121
|
+
case IPP_TAG_BEGIN_COLLECTION:
|
122
|
+
case IPP_TAG_END_COLLECTION:
|
123
|
+
case IPP_TAG_EXTENSION:
|
124
|
+
case IPP_TAG_MASK:
|
125
|
+
case IPP_TAG_COPY:
|
82
126
|
default:
|
83
127
|
ippAttributeString(attr, block, 4096);
|
84
128
|
printf("[UNSUPPORTED] %s: (%i) %s\n", ippGetName(attr), ippGetValueTag(attr), block);
|
@@ -87,7 +131,8 @@ static VALUE rb_ipp_value_entry(ipp_attribute_t* attr, int count) {
|
|
87
131
|
}
|
88
132
|
}
|
89
133
|
|
90
|
-
static VALUE rb_ipp_value(ipp_attribute_t* attr)
|
134
|
+
static VALUE rb_ipp_value(ipp_attribute_t* attr)
|
135
|
+
{
|
91
136
|
int num = ippGetCount(attr), i = 0;
|
92
137
|
VALUE val = Qnil;
|
93
138
|
|
@@ -106,8 +151,10 @@ static VALUE rb_ipp_value(ipp_attribute_t* attr) {
|
|
106
151
|
}
|
107
152
|
|
108
153
|
|
109
|
-
VALUE job_state(ipp_jstate_t state)
|
110
|
-
|
154
|
+
VALUE job_state(ipp_jstate_t state)
|
155
|
+
{
|
156
|
+
switch(state)
|
157
|
+
{
|
111
158
|
case IPP_JOB_ABORTED:
|
112
159
|
return sym_aborted;
|
113
160
|
case IPP_JOB_CANCELED:
|
@@ -122,15 +169,15 @@ VALUE job_state(ipp_jstate_t state) {
|
|
122
169
|
return sym_processing;
|
123
170
|
case IPP_JOB_STOPPED:
|
124
171
|
return sym_stopped;
|
125
|
-
|
126
|
-
|
172
|
+
default:
|
173
|
+
return INT2FIX(state);
|
174
|
+
}
|
127
175
|
}
|
128
176
|
|
129
|
-
static VALUE renew_subscription(int subscription_id, int duration)
|
130
|
-
|
177
|
+
static VALUE renew_subscription(int subscription_id, int duration)
|
178
|
+
{
|
131
179
|
http_t *http;
|
132
180
|
ipp_t *request;
|
133
|
-
ipp_t *response;
|
134
181
|
|
135
182
|
if ((http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption ())) == NULL) {
|
136
183
|
return Qnil;
|
@@ -152,7 +199,8 @@ static VALUE renew_subscription(int subscription_id, int duration) {
|
|
152
199
|
return INT2NUM(subscription_id);
|
153
200
|
}
|
154
201
|
|
155
|
-
static void debug_ipp(ipp_t *ipp)
|
202
|
+
static void debug_ipp(ipp_t *ipp)
|
203
|
+
{
|
156
204
|
char block[4096] = "";
|
157
205
|
ipp_attribute_t *attr = NULL;
|
158
206
|
|
@@ -163,7 +211,8 @@ static void debug_ipp(ipp_t *ipp) {
|
|
163
211
|
|
164
212
|
}
|
165
213
|
|
166
|
-
static VALUE create_subscription(int duration, char *uri, char *printer)
|
214
|
+
static VALUE create_subscription(int duration, char *uri, char *printer)
|
215
|
+
{
|
167
216
|
ipp_attribute_t *attr = NULL;
|
168
217
|
http_t *http;
|
169
218
|
ipp_t *request;
|
@@ -219,8 +268,7 @@ static VALUE create_subscription(int duration, char *uri, char *printer) {
|
|
219
268
|
return subscription_id;
|
220
269
|
}
|
221
270
|
|
222
|
-
static void
|
223
|
-
cancel_subscription(int subscription_id)
|
271
|
+
static void cancel_subscription(int subscription_id)
|
224
272
|
{
|
225
273
|
http_t *http;
|
226
274
|
ipp_t *request;
|
@@ -241,12 +289,12 @@ cancel_subscription(int subscription_id)
|
|
241
289
|
}
|
242
290
|
}
|
243
291
|
|
244
|
-
static VALUE list_subscriptions(bool my_subscriptions)
|
292
|
+
static VALUE list_subscriptions(bool my_subscriptions)
|
293
|
+
{
|
245
294
|
ipp_attribute_t *attr = NULL;
|
246
295
|
http_t *http;
|
247
296
|
ipp_t *request;
|
248
297
|
ipp_t *response;
|
249
|
-
VALUE subscription_id = 0;
|
250
298
|
VALUE ary = rb_ary_new();
|
251
299
|
static const char * const req_attr[] = {
|
252
300
|
"all"
|
@@ -267,8 +315,12 @@ static VALUE list_subscriptions(bool my_subscriptions) {
|
|
267
315
|
my_subscriptions);
|
268
316
|
response = cupsDoRequest (http, request, "/");
|
269
317
|
|
270
|
-
if (response
|
271
|
-
|
318
|
+
if (response == NULL) {
|
319
|
+
goto out;
|
320
|
+
}
|
321
|
+
|
322
|
+
if (ippGetStatusCode(response) <= IPP_OK_CONFLICT) {
|
323
|
+
const char *name;
|
272
324
|
VALUE hash = rb_hash_new();
|
273
325
|
|
274
326
|
attr = ippFirstAttribute(response);
|
@@ -285,18 +337,17 @@ static VALUE list_subscriptions(bool my_subscriptions) {
|
|
285
337
|
rb_ary_push(ary, hash);
|
286
338
|
} else {
|
287
339
|
rb_hash_aset(hash, as_string(name), rb_ipp_value(attr));
|
288
|
-
/*puts(ippGetName(attr));
|
340
|
+
/*{ char block[4096] = ""; puts(ippGetName(attr));
|
289
341
|
if (ippAttributeString(attr, block, 4096) > 0) {
|
290
342
|
puts(block);
|
291
|
-
}*/
|
343
|
+
}}*/
|
292
344
|
}
|
293
345
|
}
|
294
346
|
}
|
295
347
|
|
296
|
-
|
297
|
-
ippDelete(response);
|
298
|
-
}
|
348
|
+
ippDelete(response);
|
299
349
|
|
350
|
+
out:
|
300
351
|
httpClose (http);
|
301
352
|
|
302
353
|
return ary;
|
@@ -305,6 +356,7 @@ static VALUE list_subscriptions(bool my_subscriptions) {
|
|
305
356
|
%}
|
306
357
|
|
307
358
|
%post_init{
|
359
|
+
KEEP_DEL(Qnil);
|
308
360
|
KEEP_ADD(sym_cancelled = ID2SYM(rb_intern("cancelled")));
|
309
361
|
KEEP_ADD(sym_completed = ID2SYM(rb_intern("completed")));
|
310
362
|
KEEP_ADD(sym_held = ID2SYM(rb_intern("held")));
|
@@ -359,7 +411,6 @@ module Noggin
|
|
359
411
|
int num_dests = cupsGetDests(&dests);
|
360
412
|
cups_dest_t *dest;
|
361
413
|
int i;
|
362
|
-
const char *value;
|
363
414
|
int j;
|
364
415
|
|
365
416
|
list = rb_ary_new2(num_dests);
|
@@ -372,7 +423,7 @@ module Noggin
|
|
372
423
|
rb_hash_aset(hash, str_options, options);
|
373
424
|
|
374
425
|
for (j = 0; j < dest->num_options; j++) {
|
375
|
-
rb_hash_aset(options, as_string(dest->options[j].name), as_string(dest->options[j].value));
|
426
|
+
rb_hash_aset(options, as_string((dest->options[j].name)), as_string((dest->options[j].value)));
|
376
427
|
}
|
377
428
|
|
378
429
|
rb_ary_push(list, hash);
|
@@ -432,7 +483,7 @@ module Noggin
|
|
432
483
|
end
|
433
484
|
|
434
485
|
module Subscription
|
435
|
-
def self.create(int duration=0, char *notify_uri="dbus://", char *printer="/")
|
486
|
+
def self.create(int duration=0, char *notify_uri=(char*)"dbus://", char *printer=(char*)"/")
|
436
487
|
return create_subscription(duration, notify_uri, printer);
|
437
488
|
end
|
438
489
|
def self.renew(int id, int duration=0)
|
data/lib/noggin/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: noggin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubber-generate
|
@@ -75,7 +75,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
75
75
|
version: '0'
|
76
76
|
segments:
|
77
77
|
- 0
|
78
|
-
hash:
|
78
|
+
hash: 434593855864309664
|
79
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
80
|
none: false
|
81
81
|
requirements:
|