em-udns 0.1.7 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/ext/em-udns.c CHANGED
@@ -16,9 +16,6 @@ static VALUE cRR_SRV;
16
16
  static VALUE cRR_NAPTR;
17
17
 
18
18
  static VALUE eUdnsError;
19
- static VALUE eUdnsTempFail;
20
- static VALUE eUdnsNoMem;
21
- static VALUE eUdnsBadQuery;
22
19
 
23
20
  static ID id_timer;
24
21
  static ID id_queries;
@@ -38,6 +35,9 @@ static VALUE symbol_dns_error_protocol;
38
35
  static VALUE symbol_dns_error_nxdomain;
39
36
  static VALUE symbol_dns_error_nodata;
40
37
  static VALUE symbol_dns_error_unknown;
38
+ static VALUE symbol_dns_error_badquery;
39
+ static VALUE symbol_dns_error_nomem;
40
+ static VALUE symbol_dns_error_unknown;
41
41
  static VALUE symbol_failed;
42
42
  static VALUE symbol_succeeded;
43
43
 
@@ -361,20 +361,20 @@ static void dns_result_NAPTR_cb(struct dns_ctx *dns_context, struct dns_rr_naptr
361
361
  }
362
362
 
363
363
 
364
- void raise_dns_error(struct dns_ctx *dns_context)
364
+ VALUE get_dns_error(struct dns_ctx *dns_context)
365
365
  {
366
366
  switch(dns_status(dns_context)) {
367
367
  case DNS_E_TEMPFAIL:
368
- rb_raise(eUdnsTempFail, "internal error occured");
368
+ return symbol_dns_error_tempfail;
369
369
  break;
370
370
  case DNS_E_NOMEM:
371
- rb_raise(eUdnsNoMem, "no memory available to allocate query structure");
371
+ return symbol_dns_error_nomem;
372
372
  break;
373
373
  case DNS_E_BADQUERY:
374
- rb_raise(eUdnsBadQuery, "name of dn is invalid");
374
+ return symbol_dns_error_badquery;
375
375
  break;
376
376
  default:
377
- rb_raise(eUdnsError, "udns `dns_status' returns unexpected error %i", dns_status(dns_context));
377
+ return symbol_dns_error_unknown;
378
378
  break;
379
379
  }
380
380
  }
@@ -385,7 +385,9 @@ VALUE Resolver_submit_A(VALUE self, VALUE rb_domain)
385
385
  struct dns_ctx *dns_context;
386
386
  char *domain;
387
387
  VALUE query;
388
+ VALUE error;
388
389
  struct resolver_query *data;
390
+
389
391
 
390
392
  Data_Get_Struct(self, struct dns_ctx, dns_context);
391
393
  domain = StringValueCStr(rb_domain);
@@ -396,11 +398,14 @@ VALUE Resolver_submit_A(VALUE self, VALUE rb_domain)
396
398
  data->query = query;
397
399
 
398
400
  if (!dns_submit_a4(dns_context, domain, 0, dns_result_A_cb, (void *)data)) {
401
+ error = get_dns_error(dns_context);
399
402
  xfree(data);
400
- raise_dns_error(dns_context);
403
+ rb_funcall(query, method_set_deferred_status, 2, symbol_failed, error);
401
404
  }
402
-
403
- rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
405
+ else {
406
+ rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
407
+ }
408
+
404
409
  return query;
405
410
  }
406
411
 
@@ -410,6 +415,7 @@ VALUE Resolver_submit_AAAA(VALUE self, VALUE rb_domain)
410
415
  struct dns_ctx *dns_context;
411
416
  char *domain;
412
417
  VALUE query;
418
+ VALUE error;
413
419
  struct resolver_query *data;
414
420
 
415
421
  Data_Get_Struct(self, struct dns_ctx, dns_context);
@@ -421,11 +427,14 @@ VALUE Resolver_submit_AAAA(VALUE self, VALUE rb_domain)
421
427
  data->query = query;
422
428
 
423
429
  if (!dns_submit_a6(dns_context, domain, 0, dns_result_AAAA_cb, (void *)data)) {
430
+ error = get_dns_error(dns_context);
424
431
  xfree(data);
425
- raise_dns_error(dns_context);
432
+ rb_funcall(query, method_set_deferred_status, 2, symbol_failed, error);
426
433
  }
427
-
428
- rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
434
+ else {
435
+ rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
436
+ }
437
+
429
438
  return query;
430
439
  }
431
440
 
@@ -435,6 +444,7 @@ VALUE Resolver_submit_PTR(VALUE self, VALUE rb_ip)
435
444
  struct dns_ctx *dns_context;
436
445
  char *ip;
437
446
  VALUE query;
447
+ VALUE error;
438
448
  struct resolver_query *data;
439
449
  struct in_addr addr;
440
450
  struct in6_addr addr6;
@@ -451,8 +461,12 @@ VALUE Resolver_submit_PTR(VALUE self, VALUE rb_ip)
451
461
  /* It's valid IPv4. */
452
462
  case 1:
453
463
  if (!dns_submit_a4ptr(dns_context, &addr, dns_result_PTR_cb, (void *)data)) {
464
+ error = get_dns_error(dns_context);
454
465
  xfree(data);
455
- raise_dns_error(dns_context);
466
+ rb_funcall(query, method_set_deferred_status, 2, symbol_failed, error);
467
+ }
468
+ else {
469
+ rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
456
470
  }
457
471
  break;
458
472
  /* Invalid IPv4, let's try with IPv6. */
@@ -461,20 +475,23 @@ VALUE Resolver_submit_PTR(VALUE self, VALUE rb_ip)
461
475
  /* It's valid IPv6. */
462
476
  case 1:
463
477
  if (!dns_submit_a6ptr(dns_context, &addr6, dns_result_PTR_cb, (void *)data)) {
478
+ error = get_dns_error(dns_context);
464
479
  xfree(data);
465
- raise_dns_error(dns_context);
480
+ rb_funcall(query, method_set_deferred_status, 2, symbol_failed, error);
481
+ }
482
+ else {
483
+ rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
466
484
  }
467
485
  break;
468
- /* Also an invalid IPv6 so raise an exception. */
486
+ /* Also an invalid IPv6 so the IP is invalid. */
469
487
  case 0:
470
488
  xfree(data);
471
- rb_raise(rb_eArgError, "invalid IP '%s' (neither IPv4 or IPv6)", ip);
489
+ rb_funcall(query, method_set_deferred_status, 2, symbol_failed, symbol_dns_error_badquery);
472
490
  break;
473
491
  }
474
492
  break;
475
493
  }
476
494
 
477
- rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
478
495
  return query;
479
496
  }
480
497
 
@@ -484,6 +501,7 @@ VALUE Resolver_submit_MX(VALUE self, VALUE rb_domain)
484
501
  struct dns_ctx *dns_context;
485
502
  char *domain;
486
503
  VALUE query;
504
+ VALUE error;
487
505
  struct resolver_query *data;
488
506
 
489
507
  Data_Get_Struct(self, struct dns_ctx, dns_context);
@@ -495,11 +513,14 @@ VALUE Resolver_submit_MX(VALUE self, VALUE rb_domain)
495
513
  data->query = query;
496
514
 
497
515
  if (!dns_submit_mx(dns_context, domain, 0, dns_result_MX_cb, (void *)data)) {
516
+ error = get_dns_error(dns_context);
498
517
  xfree(data);
499
- raise_dns_error(dns_context);
518
+ rb_funcall(query, method_set_deferred_status, 2, symbol_failed, error);
500
519
  }
501
-
502
- rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
520
+ else {
521
+ rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
522
+ }
523
+
503
524
  return query;
504
525
  }
505
526
 
@@ -509,6 +530,7 @@ VALUE Resolver_submit_TXT(VALUE self, VALUE rb_domain)
509
530
  struct dns_ctx *dns_context;
510
531
  char *domain;
511
532
  VALUE query;
533
+ VALUE error;
512
534
  struct resolver_query *data;
513
535
 
514
536
  Data_Get_Struct(self, struct dns_ctx, dns_context);
@@ -520,11 +542,14 @@ VALUE Resolver_submit_TXT(VALUE self, VALUE rb_domain)
520
542
  data->query = query;
521
543
 
522
544
  if (!dns_submit_txt(dns_context, domain, DNS_C_IN, 0, dns_result_TXT_cb, (void *)data)) {
545
+ error = get_dns_error(dns_context);
523
546
  xfree(data);
524
- raise_dns_error(dns_context);
547
+ rb_funcall(query, method_set_deferred_status, 2, symbol_failed, error);
525
548
  }
526
-
527
- rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
549
+ else {
550
+ rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
551
+ }
552
+
528
553
  return query;
529
554
  }
530
555
 
@@ -536,6 +561,7 @@ VALUE Resolver_submit_SRV(int argc, VALUE *argv, VALUE self)
536
561
  char *service = NULL;
537
562
  char *protocol = NULL;
538
563
  VALUE query;
564
+ VALUE error;
539
565
  struct resolver_query *data;
540
566
 
541
567
  if (argc == 1 && TYPE(argv[0]) == T_STRING);
@@ -558,11 +584,14 @@ VALUE Resolver_submit_SRV(int argc, VALUE *argv, VALUE self)
558
584
  data->query = query;
559
585
 
560
586
  if (!dns_submit_srv(dns_context, domain, service, protocol, 0, dns_result_SRV_cb, (void *)data)) {
587
+ error = get_dns_error(dns_context);
561
588
  xfree(data);
562
- raise_dns_error(dns_context);
589
+ rb_funcall(query, method_set_deferred_status, 2, symbol_failed, error);
590
+ }
591
+ else {
592
+ rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
563
593
  }
564
594
 
565
- rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
566
595
  return query;
567
596
  }
568
597
 
@@ -572,6 +601,7 @@ VALUE Resolver_submit_NAPTR(VALUE self, VALUE rb_domain)
572
601
  struct dns_ctx *dns_context;
573
602
  char *domain;
574
603
  VALUE query;
604
+ VALUE error;
575
605
  struct resolver_query *data;
576
606
 
577
607
  Data_Get_Struct(self, struct dns_ctx, dns_context);
@@ -583,11 +613,14 @@ VALUE Resolver_submit_NAPTR(VALUE self, VALUE rb_domain)
583
613
  data->query = query;
584
614
 
585
615
  if (!dns_submit_naptr(dns_context, domain, 0, dns_result_NAPTR_cb, (void *)data)) {
616
+ error = get_dns_error(dns_context);
586
617
  xfree(data);
587
- raise_dns_error(dns_context);
618
+ rb_funcall(query, method_set_deferred_status, 2, symbol_failed, error);
588
619
  }
589
-
590
- rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
620
+ else {
621
+ rb_hash_aset(rb_ivar_get(self, id_queries), query, Qtrue);
622
+ }
623
+
591
624
  return query;
592
625
  }
593
626
 
@@ -616,9 +649,6 @@ void Init_em_udns_ext()
616
649
  mUdns = rb_define_module_under(mEm, "Udns");
617
650
 
618
651
  eUdnsError = rb_define_class_under(mUdns, "UdnsError", rb_eStandardError);
619
- eUdnsTempFail = rb_define_class_under(mUdns, "UdnsTempFail", eUdnsError);
620
- eUdnsNoMem = rb_define_class_under(mUdns, "UdnsNoMem", eUdnsError);
621
- eUdnsBadQuery = rb_define_class_under(mUdns, "UdnsBadQuery", eUdnsError);
622
652
 
623
653
  cResolver = rb_define_class_under(mUdns, "Resolver", rb_cObject);
624
654
  rb_define_alloc_func(cResolver, Resolver_alloc);
@@ -675,6 +705,9 @@ void Init_em_udns_ext()
675
705
  symbol_dns_error_nxdomain = ID2SYM(rb_intern("dns_error_nxdomain"));
676
706
  symbol_dns_error_nodata = ID2SYM(rb_intern("dns_error_nodata"));
677
707
  symbol_dns_error_unknown = ID2SYM(rb_intern("dns_error_unknown"));
708
+ symbol_dns_error_badquery = ID2SYM(rb_intern("dns_error_badquery"));
709
+ symbol_dns_error_nomem = ID2SYM(rb_intern("dns_error_nomem"));
710
+ symbol_dns_error_unknown = ID2SYM(rb_intern("dns_error_unknown"));
678
711
  symbol_failed = ID2SYM(rb_intern("failed"));
679
712
  symbol_succeeded = ID2SYM(rb_intern("succeeded"));
680
713
 
@@ -1,7 +1,6 @@
1
1
  module EventMachine::Udns
2
2
 
3
3
  class Resolver
4
-
5
4
  def initialize
6
5
  raise UdnsError, @alloc_error if @alloc_error
7
6
  @queries = {}
@@ -14,7 +13,6 @@ module EventMachine::Udns
14
13
  end
15
14
  end
16
15
  private :set_timer
17
-
18
16
  end
19
17
 
20
18
  end
@@ -1,5 +1,5 @@
1
1
  module EventMachine
2
2
  module Udns
3
- VERSION = "0.1.7"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
data/test/test-em-udns.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/ruby
2
2
 
3
+ $0 = "test-em-udns.rb"
4
+
3
5
  require "rubygems"
4
6
  require "em-udns"
5
7
 
@@ -56,7 +58,7 @@ EM.set_max_timers 100000
56
58
  EM.run do
57
59
 
58
60
  # Set the nameserver rather than using /etc/resolv.conf.
59
- EM::Udns.nameservers = "127.0.0.1"
61
+ #EM::Udns.nameservers = "127.0.0.1"
60
62
 
61
63
  resolver = EM::Udns::Resolver.new
62
64
  EM::Udns.run resolver
@@ -98,7 +100,7 @@ EM.run do
98
100
  result.each do |rr|
99
101
  puts "- #{rr.inspect}"
100
102
  end
101
- puts "(sent: #{sent} / recv: #{recv})"
103
+ puts "(active queries: #{resolver.active} / sent: #{sent} / recv: #{recv})"
102
104
  if recv == times
103
105
  print_info(times, time_start)
104
106
  exit
@@ -107,7 +109,7 @@ EM.run do
107
109
 
108
110
  query.errback do |error|
109
111
  recv += 1
110
- puts "#{Time.now} INFO: errback: error => #{error.inspect} (sent: #{sent} / recv: #{recv})"
112
+ puts "#{Time.now} INFO: errback: error => #{error.inspect} (active queries: #{resolver.active} / sent: #{sent} / recv: #{recv})"
111
113
  if recv == times
112
114
  print_info(times, time_start)
113
115
  exit
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 7
9
- version: 0.1.7
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - "I\xC3\xB1aki Baz Castillo"
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-04-22 00:00:00 +02:00
17
+ date: 2011-07-04 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency