udpbucket 0.0.8 → 0.0.9

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8dded6b7b74f8c9ed42f37b5b0e01ef7f11e81b5
4
+ data.tar.gz: 66baffdeca1e8fa233c0c8dbd090f705e61d4bff
5
+ SHA512:
6
+ metadata.gz: f11b2881d7fb037b3aa3891e69a35ec9cf10c700492e21e89923c2bc87ff2b0e61fcef455797f190e4009c736071dcd748992af11d1b6f85424197255312be02
7
+ data.tar.gz: b45ca23f11f6757fdc6d171abd8326cc47917df2618f7898dc1718a24a8206b4f3a8683056f5eb06fc538b9973f7cb83130d3e7424e89dbea7dd65bb2c4df049
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ udpbucket (0.0.9)
5
+ asetus (>= 0.0.7)
6
+ json
7
+ logger (>= 1.2.8)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ asetus (0.0.7)
13
+ slop
14
+ json (1.8.1)
15
+ logger (1.2.8)
16
+ slop (3.5.0)
17
+
18
+ PLATFORMS
19
+ ruby
20
+
21
+ DEPENDENCIES
22
+ udpbucket!
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ ## UDPBucket
2
+
3
+ A simple UDP server library using working queue.
4
+
5
+ ## requirements
6
+
7
+ + ruby 1.9.3+
8
+ + json
9
+ + asetus 0.0.7+
10
+ + logger 1.2.8+
11
+
12
+ ## install
13
+
14
+ > gem install udpbucket
15
+ >
16
+
17
+ ## packets
18
+
19
+ UDPBucket returns to a block each packet it receives to the listening UDP port formatted in a standard hash.
20
+
21
+ ## hash format
22
+
23
+ { :client_sock => <socket_object>,
24
+ :client_ip => 'x.x.x.x',
25
+ :client_port => xxxxx,
26
+ :payload => '\x00\xFF\xFF' }
27
+
28
+ ## example:
29
+
30
+ require 'udpbucket'
31
+
32
+ begin
33
+ cfg = { :localhost => '0.0.0.0', :localport => 1024, :debug => 0 }
34
+ udpbucket = UDPBucket::Core.new cfg
35
+ udpbucket.listen do |req|
36
+ if req[:payload] == '\x00\xFF\xFF'
37
+ req[:client_sock].send '<..some payload..>', 0, req[:client_ip], req[:client_port]
38
+ udpbucket.debug "reply sent to client: #{req[:client_ip]}:#{req[:client_port]}" if cfg[:debug] == 1
39
+ end
40
+ end
41
+ end
42
+
43
+ ## configuration:
44
+
45
+ The configuration is loaded at the start via Asetus. If the configuration is not passed to the 'Core' class, Asetus will load the default set (localhost:0.0.0.0,localport:16265,debug:1)
data/Rakefile ADDED
@@ -0,0 +1,36 @@
1
+ begin
2
+ require 'bundler'
3
+ Bundler.setup
4
+ rescue => e
5
+ warn "ERROR: #{e}"
6
+ exit 1
7
+ end
8
+
9
+ gemspec = eval(File.read(Dir['*.gemspec'].first))
10
+ file = [gemspec.name, gemspec.version].join('-') + '.gem'
11
+
12
+ task :validate do
13
+ gemspec.validate
14
+ end
15
+
16
+ task :build do
17
+ system "gem build #{gemspec.name}.gemspec"
18
+ FileUtils.mkdir_p 'gems'
19
+ FileUtils.mv file, 'gems'
20
+ end
21
+
22
+ task :install => [ :validate, :build ] do
23
+ system "sudo -E sh -c \'umask 022; gem install gems/#{file} --no-ri --no-rdoc\'"
24
+ end
25
+
26
+ task :clean do
27
+ FileUtils.rm_rf 'gems'
28
+ end
29
+
30
+ task :push do
31
+ system "gem push gems/#{file}"
32
+ end
33
+
34
+ task :remove do
35
+ system "sudo -E sh -c \'umask 022; gem uninstall #{gemspec.name}\'"
36
+ end
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'udpbucket'
4
+
5
+ resolver = '8.8.8.8'
6
+
7
+ begin
8
+ cfg = { :localhost => '::', :localport => 53, :debug => 1 }
9
+ udpbucket = UDPBucket::Core.new cfg
10
+ udpbucket.listen do |pkt_hash|
11
+ out_sock = UDPSocket.new
12
+ r = Random.new
13
+ sport = r.rand(1024..65535)
14
+ out_sock.bind '0.0.0.0', sport
15
+ udpbucket.debug "forwarding request to resolver : #{resolver}:53" if cfg[:debug] == 1
16
+ out_sock.send pkt_hash[:payload], 0, resolver, 53
17
+ reply, _ = out_sock.recvfrom(1500)
18
+ re_hash = { :resolver_ip => resolver, :reply => reply }
19
+ udpbucket.debug "reply received : #{re_hash}" if cfg[:debug] == 1
20
+ pkt_hash[:client_sock].send reply, 0, pkt_hash[:client_ip], pkt_hash[:client_port]
21
+ out_sock.close
22
+ udpbucket.debug "translation completed" if cfg[:debug] == 1
23
+ end
24
+ end
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'udpbucket'
4
+
5
+ begin
6
+ cfg = { :localhost => '::', :localport => 53, :debug => 1 }
7
+ udpbucket = UDPBucket::Core.new cfg
8
+ udpbucket.listen do |pkt_hash|
9
+ puts pkt_hash[:payload]
10
+ end
11
+ end
@@ -1,23 +1,26 @@
1
1
  module UDPBucket
2
2
  class Core
3
+ require 'asetus'
3
4
 
4
- def initialize cfg
5
- @cfg = cfg
6
- @debug = @cfg[:debug]
7
- @localhost = @cfg[:localhost] || '0.0.0.0'
8
- @localport = @cfg[:localport] || 16265
5
+ def initialize usercfg={}
6
+ cfgs = Asetus.new :name=>'udpbucket', :load=>false
7
+ cfgs.default.debug = usercfg[:debug] || 0
8
+ cfgs.default.localhost = usercfg[:localhost] || '0.0.0.0'
9
+ cfgs.default.localport = usercfg[:localport] || 16265
10
+ cfgs.load
11
+ @cfg = cfgs.cfg
12
+ load
13
+ end
14
+
15
+ def load
9
16
  @rx_queue = Queue.new
10
- if IPAddr.new(@localhost).ipv6?
17
+ if IPAddr.new(@cfg.localhost).ipv6?
11
18
  @sock = UDPSocket.new Socket::AF_INET6
12
19
  else
13
20
  @sock = UDPSocket.new
14
21
  end
15
- @sock.bind @localhost, @localport
16
- debug "udpbucket server up: #{@localhost}:#{@localport}" if @debug == 1
17
- end
18
-
19
- def debug msg
20
- puts [ "D, [#{Time.now} ", [ "#", "#{Process.pid}" ].join, "] DEBUG -- ", msg ].join
22
+ @sock.bind @cfg.localhost, @cfg.localport
23
+ Log.debug "udpbucket server up: #{@cfg.localhost}:#{@cfg.localport}" if @cfg.debug == 1
21
24
  end
22
25
 
23
26
  def listen
@@ -28,7 +31,7 @@ module UDPBucket
28
31
  buffer, sockaddr = @sock.recvfrom_nonblock(1500)
29
32
  pkt = { :client_sock => @sock, :client_ip => sockaddr[3], :client_port => sockaddr[1], :payload => buffer }
30
33
  @rx_queue << pkt
31
- debug "packet queued (queue size:#{@rx_queue.size}): #{pkt}" if @debug == 1
34
+ Log.debug "packet queued (queue size:#{@rx_queue.size}): #{pkt}" if @cfg.debug == 1
32
35
  end
33
36
  end
34
37
  end
@@ -36,7 +39,7 @@ module UDPBucket
36
39
  while true do
37
40
  begin
38
41
  yield @rx_queue.pop
39
- debug "yield to block (queue size:#{@rx_queue.size})" if @debug == 1
42
+ Log.debug "yield to block (queue size:#{@rx_queue.size})" if @cfg.debug == 1
40
43
  end
41
44
  end
42
45
  end
@@ -0,0 +1,5 @@
1
+ module UDPBucket
2
+ require 'logger'
3
+ target = STDOUT
4
+ Log = Logger.new target
5
+ end
data/lib/udpbucket.rb CHANGED
@@ -4,5 +4,6 @@ module UDPBucket
4
4
  require 'socket'
5
5
  require 'thread'
6
6
  require 'ipaddr'
7
+ require 'udpbucket/log'
7
8
  require 'udpbucket/core'
8
9
  end
data/udpbucket.gemspec ADDED
@@ -0,0 +1,18 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'udpbucket'
3
+ s.version = '0.0.9'
4
+ s.platform = Gem::Platform::RUBY
5
+ s.authors = [ 'Samer Abdel-Hafez' ]
6
+ s.email = %w( sam@arahant.net )
7
+ s.homepage = 'http://github.com/nopedial/udpbucket'
8
+ s.summary = 'udp bucket'
9
+ s.description = 'a lightweight udp server'
10
+ s.rubyforge_project = s.name
11
+ s.files = `git ls-files`.split("\n")
12
+ s.executables = %w( )
13
+ s.require_path = 'lib'
14
+
15
+ s.add_dependency 'json'
16
+ s.add_dependency 'asetus', '>= 0.0.7'
17
+ s.add_dependency 'logger', '>= 1.2.8'
18
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: udpbucket
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
5
- prerelease:
4
+ version: 0.0.9
6
5
  platform: ruby
7
6
  authors:
8
7
  - Samer Abdel-Hafez
@@ -14,19 +13,45 @@ dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: json
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: asetus
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.7
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.7
41
+ - !ruby/object:Gem::Dependency
42
+ name: logger
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.2.8
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.2.8
30
55
  description: a lightweight udp server
31
56
  email:
32
57
  - sam@arahant.net
@@ -34,36 +59,37 @@ executables: []
34
59
  extensions: []
35
60
  extra_rdoc_files: []
36
61
  files:
62
+ - Gemfile
63
+ - Gemfile.lock
64
+ - README.md
65
+ - Rakefile
66
+ - examples/dns_xlate.rb
67
+ - examples/rsabin.rb
37
68
  - lib/udpbucket.rb
38
69
  - lib/udpbucket/core.rb
70
+ - lib/udpbucket/log.rb
71
+ - udpbucket.gemspec
39
72
  homepage: http://github.com/nopedial/udpbucket
40
73
  licenses: []
74
+ metadata: {}
41
75
  post_install_message:
42
76
  rdoc_options: []
43
77
  require_paths:
44
78
  - lib
45
79
  required_ruby_version: !ruby/object:Gem::Requirement
46
- none: false
47
80
  requirements:
48
- - - ! '>='
81
+ - - '>='
49
82
  - !ruby/object:Gem::Version
50
83
  version: '0'
51
- segments:
52
- - 0
53
- hash: 427306861
54
84
  required_rubygems_version: !ruby/object:Gem::Requirement
55
- none: false
56
85
  requirements:
57
- - - ! '>='
86
+ - - '>='
58
87
  - !ruby/object:Gem::Version
59
88
  version: '0'
60
- segments:
61
- - 0
62
- hash: 427306861
63
89
  requirements: []
64
90
  rubyforge_project: udpbucket
65
- rubygems_version: 1.8.23
91
+ rubygems_version: 2.0.14
66
92
  signing_key:
67
- specification_version: 3
93
+ specification_version: 4
68
94
  summary: udp bucket
69
95
  test_files: []