deluge-rpc 0.1.3 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8fdcfe0656ef321dd54ac8d8f5a8f788bcd17cd6
4
- data.tar.gz: 1157ad39d1fbfe536fb1d35ed4c72c8dc16cad6f
2
+ SHA256:
3
+ metadata.gz: fae94aca88e0cdf01efdc40596aea1d07b24d48d475f7302723bf82abdeb7a64
4
+ data.tar.gz: ffa497496c6caa1027eab7dde89a6676df48a34634344c109863cf974509f4b3
5
5
  SHA512:
6
- metadata.gz: c2d795c706720dff717af01890ec926fb258444353456fe725dde872ba83c9a22e7d724760719daab364975f2dbd8136dfa6f605e338c798894e7b9e5b4aeb30
7
- data.tar.gz: 4225adb085e5dceab4e3e7268335cfaddad2b53c9b62ada57df808cf69f1ca0644f000cc4ebc3636f512b24e7e597686b49456dd7e1d011692c2d0eb2f25d15c
6
+ metadata.gz: f670476d2ab81393c6b0db0393293c1ca2e4db7c3170bf19c7d17d623e3596447b5e622b4ad5287e9dde8e4c38a3f027f7a909f608f35267788b65c05e9b442e
7
+ data.tar.gz: 4fde233a805d65cccde068bf7838a2407682902ecb88bb42e9d1454dd67f0153e94703a75d984fd62aa7337dc34b5bf8e1628e65d293e87133140e3a99a4cd76
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.1.4
1
+ 3.0.3
data/README.md CHANGED
@@ -1,14 +1,19 @@
1
1
  # Deluge::RPC
2
2
 
3
- Ruby RPC client library for Deluge torrent client.
4
- Provides dynamic API bindings depending on RPC server.
3
+ Ruby RPC client library for [Deluge 2.0+ torrent client](https://deluge-torrent.org/).
4
+ Provides dynamic API bindings depending on RPC server.
5
5
  Multi-threading friendly, thanks to ``concurrent-ruby`` gem.
6
6
 
7
- Official RPC protocol documentation:
8
- http://deluge.readthedocs.org/en/develop/core/rpc.html
7
+ *Deluge 1.x is not supported anymore*.
9
8
 
10
- Deluge RPC API reference:
11
- http://deluge.readthedocs.org/en/develop/core/rpc.html#remote-api
9
+ ## Reference
10
+
11
+ * [Official RPC protocol documentation](https://deluge.readthedocs.io/en/latest/reference/rpc.html)
12
+ * [Deluge RPC API reference](https://deluge.readthedocs.io/en/latest/reference/api.html)
13
+ * [Official repository](https://github.com/deluge-torrent/deluge)
14
+ * Other client implementations:
15
+ [Go](https://github.com/gdm85/go-libdeluge),
16
+ [Python](https://github.com/JohnDoee/deluge-client)
12
17
 
13
18
  ## Usage
14
19
 
@@ -72,10 +77,10 @@ client.register_event(:torrent_removed) do |torrent_id|
72
77
  end
73
78
  ```
74
79
 
75
- Unfortunately there is no way to listen ALL events, due to Deluge architecture.
80
+ Unfortunately there is no way to listen ALL events, due to Deluge architecture.
76
81
  You have to register each event you need.
77
82
 
78
- **Keep in mind event blocks would be executed in connection thread, NOT main thread!**
83
+ **Keep in mind event blocks would be executed in connection thread, NOT main thread!**
79
84
  Avoid time-consuming code!
80
85
 
81
86
  ### Known events
@@ -100,10 +105,11 @@ Avoid time-consuming code!
100
105
  ``PluginEnabledEvent`` | name | Plugin is enabled in the Core.
101
106
  ``PluginDisabledEvent`` | name | Plugin is disabled in the Core.
102
107
 
103
- This list was extracted from Deluge 1.3.11 sources. Events for your version could be different.
108
+ This list was extracted from Deluge 1.3.11 sources. Events for your version could be different.
104
109
  There is no official documentation.
105
110
 
106
- Current events could be found here: http://git.deluge-torrent.org/deluge/tree/deluge/event.py
111
+ Current events could be found here:
112
+ https://github.com/deluge-torrent/deluge/blob/master/deluge/event.py
107
113
 
108
114
  ## Installation
109
115
 
@@ -115,8 +121,12 @@ gem 'deluge-rpc'
115
121
 
116
122
  And then execute:
117
123
 
118
- $ bundle
124
+ ```shell
125
+ $ bundle
126
+ ```
119
127
 
120
128
  Or install it yourself as:
121
129
 
122
- $ gem install deluge-rpc
130
+ ```shell
131
+ $ gem install deluge-rpc
132
+ ```
data/deluge-rpc.gemspec CHANGED
@@ -12,14 +12,17 @@ Gem::Specification.new do |spec|
12
12
  spec.description = %q{Communicate with Deluge torrent client via RPC protocol}
13
13
  spec.homepage = "https://github.com/t3hk0d3/deluge-rpc"
14
14
  spec.license = "MIT"
15
+ spec.required_ruby_version = '>= 2.6' # rubocop:disable Gemspec/RequiredRubyVersion
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0")
17
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
20
  spec.require_paths = ["lib"]
20
21
 
21
- spec.add_dependency 'concurrent-ruby', '~> 0.7'
22
- spec.add_dependency 'rencoder', '~> 0.1'
23
- spec.add_development_dependency 'bundler', '~> 1.7'
24
- spec.add_development_dependency 'rspec', '~> 3.1'
22
+ spec.add_dependency 'concurrent-ruby', '~> 1.1.8'
23
+ spec.add_dependency 'rencoder', '~> 0.2'
24
+
25
+ spec.add_development_dependency 'rspec', '~> 3.10.0'
26
+ spec.add_development_dependency 'rubocop', '~> 0.90'
27
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.43'
25
28
  end
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rencoder'
4
+
2
5
  require 'socket'
3
6
  require 'openssl'
4
7
  require 'thread'
@@ -14,6 +17,8 @@ module Deluge
14
17
  class InvokeTimeoutError < StandardError; end
15
18
  class ConnectionClosedError < StandardError; end
16
19
 
20
+ PROTOCOL_VERSION = 0x01
21
+
17
22
  DAEMON_LOGIN = 'daemon.login'
18
23
  DAEMON_METHOD_LIST = 'daemon.get_method_list'
19
24
  DAEMON_REGISTER_EVENT = 'daemon.set_event_interest'
@@ -62,7 +67,7 @@ module Deluge
62
67
  end
63
68
 
64
69
  def authenticate(login, password)
65
- self.call(DAEMON_LOGIN, login, password)
70
+ self.call(DAEMON_LOGIN, [login, password, {'client_version' => Deluge::Rpc::VERSION.to_s}])
66
71
  end
67
72
 
68
73
  def method_list
@@ -88,7 +93,10 @@ module Deluge
88
93
  raise "Not connected!" unless @connection
89
94
 
90
95
  kwargs = {}
91
- kwargs = args.pop if args.size == 1 && args.last.is_a?(Hash)
96
+ if args.size == 1 && args[0].last.is_a?(Hash)
97
+ kwargs = args[0].pop
98
+ args = args[0]
99
+ end
92
100
 
93
101
  future = Concurrent::IVar.new
94
102
 
@@ -102,7 +110,7 @@ module Deluge
102
110
  result = future.value!(@call_timeout)
103
111
 
104
112
  if result.nil? && future.pending?
105
- raise InvokeTimeoutError.new("Failed to retreive response for '#{method}' in #{@call_timeout} seconds. Probably method not exists.")
113
+ raise InvokeTimeoutError.new("Failed to retrieve response for '#{method}' in #{@call_timeout} seconds. Probably method not exists.")
106
114
  end
107
115
 
108
116
  result
@@ -167,6 +175,7 @@ module Deluge
167
175
 
168
176
  def write_packet(packet)
169
177
  raw = Zlib::Deflate.deflate Rencoder.dump(packet)
178
+ raw = [PROTOCOL_VERSION, raw.bytesize].pack("CN") + raw
170
179
 
171
180
  @write_mutex.synchronize do
172
181
  if IO.select([], [@connection], nil, nil)
@@ -177,11 +186,16 @@ module Deluge
177
186
 
178
187
  def read_packets(socket)
179
188
  raw = ""
180
- begin
181
- buffer = socket.readpartial(1024)
182
- raw += buffer
183
- end until(buffer.size < 1024)
184
189
 
190
+ # Read message header
191
+ protocol_version, buffer_size = socket.readpartial(5).unpack('CN')
192
+
193
+ raise('Received response with unknown protocol_version=' + protocol_version) if protocol_version != PROTOCOL_VERSION
194
+
195
+ # a big response requires some extra reads because deluged may be
196
+ # slow to generate and send all the data through the socket
197
+ raw += socket.readpartial(buffer_size - raw.bytesize) while raw.bytesize < buffer_size
198
+
185
199
  raw = Zlib::Inflate.inflate(raw)
186
200
 
187
201
  parse_packets(raw)
@@ -210,12 +224,7 @@ module Deluge
210
224
  end
211
225
 
212
226
  def ssl_context
213
- # SSLv3 is not allowed (http://dev.deluge-torrent.org/ticket/2555)
214
- context = OpenSSL::SSL::SSLContext.new('SSLv23')
215
- # TODO: Consider allowing server certificate validation
216
- context.set_params(verify_mode: OpenSSL::SSL::VERIFY_NONE)
217
-
218
- context
227
+ OpenSSL::SSL::SSLContext.new
219
228
  end
220
229
 
221
230
  def parse_packets(raw)
@@ -1,5 +1,5 @@
1
1
  module Deluge
2
2
  module Rpc
3
- VERSION = "0.1.3"
3
+ VERSION = "0.2.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deluge-rpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Yamolov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-17 00:00:00.000000000 Z
11
+ date: 2023-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -16,56 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.7'
19
+ version: 1.1.8
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.7'
26
+ version: 1.1.8
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rencoder
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.1'
33
+ version: '0.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.1'
40
+ version: '0.2'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.7'
47
+ version: 3.10.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.7'
54
+ version: 3.10.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: rspec
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.90'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.90'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-rspec
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '3.1'
75
+ version: '1.43'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '3.1'
82
+ version: '1.43'
69
83
  description: Communicate with Deluge torrent client via RPC protocol
70
84
  email:
71
85
  - clouster@yandex.ru
@@ -93,7 +107,7 @@ homepage: https://github.com/t3hk0d3/deluge-rpc
93
107
  licenses:
94
108
  - MIT
95
109
  metadata: {}
96
- post_install_message:
110
+ post_install_message:
97
111
  rdoc_options: []
98
112
  require_paths:
99
113
  - lib
@@ -101,20 +115,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
115
  requirements:
102
116
  - - ">="
103
117
  - !ruby/object:Gem::Version
104
- version: '0'
118
+ version: '2.6'
105
119
  required_rubygems_version: !ruby/object:Gem::Requirement
106
120
  requirements:
107
121
  - - ">="
108
122
  - !ruby/object:Gem::Version
109
123
  version: '0'
110
124
  requirements: []
111
- rubyforge_project:
112
- rubygems_version: 2.2.2
113
- signing_key:
125
+ rubygems_version: 3.2.32
126
+ signing_key:
114
127
  specification_version: 4
115
128
  summary: Deluge RPC protocol wrapper
116
129
  test_files:
117
130
  - spec/deluge/api/client_spec.rb
118
131
  - spec/deluge/api/namespace_spec.rb
119
132
  - spec/spec_helper.rb
120
- has_rdoc: