deluge-rpc 0.1.3 → 0.2.2

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 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: