irckitten 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/.gitignore +0 -0
  2. data/README.md +2 -0
  3. data/bin/irckitten +8 -0
  4. data/lib/irckitten.rb +115 -0
  5. metadata +51 -0
File without changes
@@ -0,0 +1,2 @@
1
+ Ruby gem to do IRCCat based on SRV records. No longer do you have to
2
+ configure shit, that's what DNS is for.
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib = File.expand_path('../../lib', __FILE__)
4
+ $:.unshift(lib) unless $:.include?(lib)
5
+
6
+ require 'irckitten'
7
+
8
+ IrcKitten::msg ARGV.join ' '
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env - ruby
2
+ #
3
+
4
+ require 'socket'
5
+ require 'resolv'
6
+
7
+ ## These are only used in development.
8
+ # require 'rubygems'
9
+ # require 'profile'
10
+ # require 'awesome_print'
11
+ # require 'pry'
12
+
13
+ # This is to use system_timer if it's there on 1.8.7, or Timeout as a fall
14
+ # back. On 1.9.x just use timeout.
15
+ # http://davidvollbracht.com/blog/30-days-of-tech-day-1-systemtimer
16
+ # http://ph7spot.com/musings/system-timer
17
+ if RUBY_VERSION =~ /1\.8\./
18
+ begin
19
+ require 'rubygems'
20
+ require 'system_timer'
21
+ MyTimer = SystemTimer
22
+ rescue LoadError
23
+ require 'timeout'
24
+ MyTimer = Timeout
25
+ end
26
+ else
27
+ # 1.9 Timeout works.
28
+ require 'timeout'
29
+ MyTimer = Timeout
30
+ end
31
+
32
+
33
+ module IrcKitten
34
+
35
+ DNSRECORD = "_irccat._tcp."
36
+
37
+ def msg( message )
38
+
39
+ self.getsrvrecords.each do |addy|
40
+ return true \
41
+ if self.sendmessage( message , addy.target.to_s , addy.port )
42
+ end
43
+
44
+ false
45
+ end
46
+
47
+ private
48
+
49
+ def self.givemedomains
50
+ @myhostname ||= Socket.gethostname
51
+ currentdomain = @myhostname
52
+
53
+ domain = []
54
+ while currentdomain != nil
55
+ currentdomain = self.dropazone( currentdomain )
56
+ domain << currentdomain
57
+ end
58
+ domain
59
+ end
60
+
61
+ # I think this works in a funcitonal programming kinda way.
62
+ # When you run out it should return nil
63
+ def self.dropazone( rr )
64
+ bits = rr.split '.'
65
+ return nil if bits.empty?
66
+ bits[1,bits.size].join('.')
67
+ end
68
+
69
+ def self.sendmessage( message , host , port )
70
+ s = nil
71
+
72
+ begin
73
+ MyTimer.timeout( 10 ) do
74
+ s = TCPSocket.new host, port
75
+ s.puts message
76
+ end
77
+ rescue Timeout::Error
78
+ $stderr.puts "Timed out talking to #{host}:#{port}"
79
+ return false
80
+ ensure
81
+ s.close unless s.nil?
82
+ end
83
+
84
+ true
85
+ end
86
+
87
+ # Get the SRV records from DNS, uses the constant to add to each
88
+ # domain to get the record to try. Returns a vaguely sorted thing.
89
+ def self.getsrvrecords
90
+
91
+ srvs = nil
92
+ begin
93
+ Resolv::DNS.open do |dns|
94
+ self.givemedomains.each do |domain|
95
+ srvs = dns.getresources( DNSRECORD + domain , Resolv::DNS::Resource::IN::SRV)
96
+ break unless srvs.nil?
97
+ end
98
+ end
99
+
100
+ # Don't bother sorting them if we just have one!
101
+ return srvs if srvs.size == 1
102
+
103
+ srvs.sort! { |a,b| (a.priority != b.priority) ? (a.priority <=> b.priority) : (b.weight <=> a.weight) }
104
+
105
+ rescue NameError => e
106
+ $stderr.puts "Problem resolving DNS due to #{e}."
107
+ end
108
+
109
+ srvs
110
+ end
111
+
112
+ # Expose these module methods.
113
+ module_function :msg
114
+
115
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: irckitten
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ben Hughes
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-15 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: ! "Send message to IRC via IRCCat, but without having\n to manually
15
+ configure a server in your code. Just use DNS as RFC822\n intended."
16
+ email:
17
+ - ben@mumble.org.uk
18
+ executables:
19
+ - irckitten
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - .gitignore
24
+ - README.md
25
+ - bin/irckitten
26
+ - lib/irckitten.rb
27
+ homepage: https://github.com/barn/irckitten
28
+ licenses: []
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project:
47
+ rubygems_version: 1.8.23
48
+ signing_key:
49
+ specification_version: 3
50
+ summary: Module to talk simple IRCCat based on SRV DNS records
51
+ test_files: []