udpbucket 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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: []