kawana 0.0.0

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.
Files changed (6) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +1 -0
  4. data/lib/kawana.rb +5 -0
  5. data/lib/kawana/client.rb +77 -0
  6. metadata +47 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 923deb5b2f85e6c63a85c1607ca37052cd1f5d3b
4
+ data.tar.gz: 7f7ff4399a7418606a7bf091abd38e1a0dd9ed6e
5
+ SHA512:
6
+ metadata.gz: 47871dcab8092dbcbd0b30175c0784b0d7c118f1df69d8a1784a154d1e3dc4f29983265e09b6bcef92e2a14bce182435f7bc64d65ae0633354c85adbed694ab8
7
+ data.tar.gz: b3a24f44c3dd24a6c04425b36d9ed39ab6fa1091c25fd48f5f25b0731dab921f2c1272c791d1da51225236515df2bfb2f91a2428b8bce072627fac99d9d0818a
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Chris Kite
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -0,0 +1 @@
1
+ # ruby-kawana
@@ -0,0 +1,5 @@
1
+ require 'kawana/client'
2
+
3
+ module Kawana
4
+ VERSION="0.0.0"
5
+ end
@@ -0,0 +1,77 @@
1
+ require 'socket'
2
+ require 'ipaddr'
3
+
4
+ module Kawana
5
+ class Client
6
+
7
+ #
8
+ # +addr+ is a string remote address, e.g. <tt>'localhost'</tt> or <tt>'127.0.0.1'</tt>
9
+ #
10
+ def initialize(addr, port = 9291)
11
+ @addr = addr
12
+ @port = port
13
+ end
14
+
15
+ #
16
+ # Whitelist +ip+ in the Kawana server.
17
+ # +ip+ must be of type *IPAddr*, e.g. <tt>IPAddr.new('127.0.0.1')</tt>
18
+ # Raises an exception if an error occurs, otherwise returns nil if successful.
19
+ #
20
+ def whitelist(ip)
21
+ black_white_cmd(ip, 1)
22
+ end
23
+
24
+ #
25
+ # Un-whitelist +ip+ in the Kawana server.
26
+ # +ip+ must be of type *IPAddr*, e.g. <tt>IPAddr.new('127.0.0.1')</tt>
27
+ # Raises an exception if an error occurs, otherwise returns nil if successful.
28
+ #
29
+ def unwhitelist(ip)
30
+ black_white_cmd(ip, 2)
31
+ end
32
+
33
+ #
34
+ # Blacklist +ip+ in the Kawana server.
35
+ # +ip+ must be of type *IPAddr*, e.g. <tt>IPAddr.new('127.0.0.1')</tt>
36
+ # Raises an exception if an error occurs, otherwise returns nil if successful.
37
+ #
38
+ def blacklist(ip)
39
+ black_white_cmd(ip, 3)
40
+ end
41
+
42
+ #
43
+ # Un-blacklist +ip+ in the Kawana server.
44
+ # +ip+ must be of type *IPAddr*, e.g. <tt>IPAddr.new('127.0.0.1')</tt>
45
+ # Raises an exception if an error occurs, otherwise returns nil if successful.
46
+ #
47
+ def unblacklist(ip)
48
+ black_white_cmd(ip, 4)
49
+ end
50
+
51
+ private
52
+
53
+ def black_white_cmd(ip, modifier)
54
+ if !ip.is_a?(IPAddr)
55
+ raise ArgumentError.new("ip must be of type IPAddr")
56
+ end
57
+
58
+ bytes = [
59
+ 0x03, # BlackWhite command byte
60
+ ip.to_i,
61
+ modifier # BlackWhite modifier byte
62
+ ].pack("CVC")
63
+
64
+ send_and_recv bytes
65
+ nil
66
+ end
67
+
68
+ def send_and_recv(bytes)
69
+ s = TCPSocket.new @addr, @port
70
+ s.send bytes, 0
71
+ resp = s.recv 15 # kawana response is 15 bytes
72
+ puts resp.unpack("V3SC").inspect
73
+ s.close
74
+ end
75
+
76
+ end
77
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kawana
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Kite
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-23 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files:
18
+ - README.md
19
+ files:
20
+ - LICENSE
21
+ - README.md
22
+ - lib/kawana.rb
23
+ - lib/kawana/client.rb
24
+ homepage: http://www.github.com/chriskite/ruby-kawana
25
+ licenses: []
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.4.5
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Kawana client
47
+ test_files: []