ruby-dbus 0.20.0 → 0.21.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d52907f5f6be32813466ae280cb99ff605d4195ca84396e97a90a7568fb579ec
4
- data.tar.gz: 01bf87805f19878641a424f5c9ba21fcff637dcb6d4bbcdc230dda3713df8c80
3
+ metadata.gz: 922468208faa7a9a13f3c40c0b7ffd22a5a9a6b00de2e30e05e6ae18c84662d5
4
+ data.tar.gz: 9386581c654bad7f970763c1c67f8984e95654d6f49673a1c3452c2cc59ced0f
5
5
  SHA512:
6
- metadata.gz: 8009bcca0c66ddb5d5e9ca76a2fbc06b0408437ac3f5135d1378362f58520cbcb20c6d625d242e7c19ca1f679b4ab7b4e584e5f9d6c376eea90f57372f7f27aa
7
- data.tar.gz: 0d8388654ae2ad5aeca7cf0eb6cec2fb3eb463ac43b85eb7a83bfbd32a011d65749b1a1195fcc4ae0f8c6a5591e49c0176a09c442c67a166ce2432bb30d704f7
6
+ metadata.gz: 67e6e4058de8f6e9e0eddc404f53b5219487d711c165dd607ec1138c18f089de560f6467bf6960a28dc0c29b6df2a4a5eee4156e2c2fab68c1dada5ce9383f91
7
+ data.tar.gz: 364d914924b85f11354fdf8ed3f44f446091422014a92c5c7f0ecc3175cc28236d6a6b0cfec233321657a35554eb24be8692ab83c41a65eb9a75a7eef5dd7a5b
data/NEWS.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## Ruby D-Bus 0.21.0 - 2023-04-08
6
+
7
+ Features:
8
+ * Respect env RUBY_DBUS_ENDIANNESS=B (or =l) for outgoing messages.
9
+
10
+ Bug fixes:
11
+ * Reduce socket buffer allocations ([#129][]).
12
+ * Message#marshall speedup: don't marshall the body twice.
13
+
14
+ [#129]: https://github.com/mvidner/ruby-dbus/pull/129
15
+
5
16
  ## Ruby D-Bus 0.20.0 - 2023-03-21
6
17
 
7
18
  Features:
@@ -82,7 +93,7 @@ API:
82
93
  when declaring properties ([#117][]).
83
94
 
84
95
  [#115]: https://github.com/mvidner/ruby-dbus/issues/115
85
- [#117]: https://github.com/mvidner/ruby-dbus/pulls/117
96
+ [#117]: https://github.com/mvidner/ruby-dbus/pull/117
86
97
 
87
98
  ## Ruby D-Bus 0.18.0.beta7 - 2022-05-29
88
99
 
@@ -450,7 +461,7 @@ Bug fixes:
450
461
  * Handle more ways which tell us that a bus connection has died.
451
462
 
452
463
  [#3]: https://github.com/mvidner/ruby-dbus/issue/3
453
- [bsc#617350]: https://bugzilla.novell.com/show_bug.cgi?id=617350
464
+ [bsc#617350]: https://bugzilla.suse.com/show_bug.cgi?id=617350
454
465
 
455
466
  ## Ruby D-Bus 0.3.0 - 2010-03-28
456
467
 
@@ -518,8 +529,8 @@ Bug fixes:
518
529
  * Fixed an endless sleep in DBus::Main.run ([bsc#537401][]).
519
530
  * Added details to PacketMarshaller exceptions ([bsc#538050][]).
520
531
 
521
- [bsc#537401]: https://bugzilla.novell.com/show_bug.cgi?id=537401
522
- [bsc#538050]: https://bugzilla.novell.com/show_bug.cgi?id=538050
532
+ [bsc#537401]: https://bugzilla.suse.com/show_bug.cgi?id=537401
533
+ [bsc#538050]: https://bugzilla.suse.com/show_bug.cgi?id=538050
523
534
 
524
535
  ## Ruby D-Bus "I'm not dead" 0.2.9 - 2009-08-26
525
536
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.20.0
1
+ 0.21.0
data/lib/dbus/message.rb CHANGED
@@ -10,6 +10,8 @@
10
10
  # License, version 2.1 as published by the Free Software Foundation.
11
11
  # See the file "COPYING" for the exact licensing terms.
12
12
 
13
+ require_relative "raw_message"
14
+
13
15
  # = D-Bus main module
14
16
  #
15
17
  # Module containing all the D-Bus modules and classes.
@@ -144,6 +146,10 @@ module DBus
144
146
  @params << [type, val]
145
147
  end
146
148
 
149
+ # "l" or "B"
150
+ ENDIANNESS_CHAR = ENV.fetch("RUBY_DBUS_ENDIANNESS", HOST_END)
151
+ ENDIANNESS = RawMessage.endianness(ENDIANNESS_CHAR)
152
+
147
153
  # FIXME: what are these? a message element constant enumeration?
148
154
  # See method below, in a message, you have and array of optional parameters
149
155
  # that come with an index, to determine their meaning. The values are in
@@ -165,14 +171,14 @@ module DBus
165
171
  raise InvalidDestinationName
166
172
  end
167
173
 
168
- params = PacketMarshaller.new
169
- @params.each do |param|
170
- params.append(param[0], param[1])
174
+ params_marshaller = PacketMarshaller.new(endianness: ENDIANNESS)
175
+ @params.each do |type, value|
176
+ params_marshaller.append(type, value)
171
177
  end
172
- @body_length = params.packet.bytesize
178
+ @body_length = params_marshaller.packet.bytesize
173
179
 
174
- marshaller = PacketMarshaller.new
175
- marshaller.append(Type::BYTE, HOST_END.ord)
180
+ marshaller = PacketMarshaller.new(endianness: ENDIANNESS)
181
+ marshaller.append(Type::BYTE, ENDIANNESS_CHAR.ord)
176
182
  marshaller.append(Type::BYTE, @message_type)
177
183
  marshaller.append(Type::BYTE, @flags)
178
184
  marshaller.append(Type::BYTE, @protocol)
@@ -191,10 +197,8 @@ module DBus
191
197
  marshaller.append("a(yv)", headers)
192
198
 
193
199
  marshaller.align(8)
194
- @params.each do |param|
195
- marshaller.append(param[0], param[1])
196
- end
197
- marshaller.packet
200
+
201
+ marshaller.packet + params_marshaller.packet
198
202
  end
199
203
 
200
204
  # Unmarshall a packet contained in the buffer _buf_ and set the
@@ -18,10 +18,15 @@ module DBus
18
18
  # The socket that is used to connect with the bus.
19
19
  attr_reader :socket
20
20
 
21
+ # The buffer size for messages.
22
+ MSG_BUF_SIZE = 4096
23
+
21
24
  def initialize(address)
22
25
  DBus.logger.debug "MessageQueue: #{address}"
23
26
  @address = address
24
27
  @buffer = ""
28
+ # Reduce allocations by using a single buffer for our socket
29
+ @read_buffer = String.new(capacity: MSG_BUF_SIZE)
25
30
  @is_tcp = false
26
31
  @mutex = Mutex.new
27
32
  connect
@@ -157,15 +162,12 @@ module DBus
157
162
  ret
158
163
  end
159
164
 
160
- # The buffer size for messages.
161
- MSG_BUF_SIZE = 4096
162
-
163
165
  # Fill (append) the buffer from data that might be available on the
164
166
  # socket.
165
167
  # @return [void]
166
168
  # @raise EOFError
167
169
  def buffer_from_socket_nonblock
168
- @buffer += @socket.read_nonblock(MSG_BUF_SIZE)
170
+ @buffer += @socket.read_nonblock(MSG_BUF_SIZE, @read_buffer)
169
171
  rescue EOFError
170
172
  raise # the caller expects it
171
173
  rescue Errno::EAGAIN
data/lib/dbus.rb CHANGED
@@ -10,6 +10,21 @@
10
10
  # License, version 2.1 as published by the Free Software Foundation.
11
11
  # See the file "COPYING" for the exact licensing terms.
12
12
 
13
+ module DBus
14
+ # Byte signifying big endianness.
15
+ BIG_END = "B"
16
+ # Byte signifying little endianness.
17
+ LIL_END = "l"
18
+
19
+ # Byte signifying the host's endianness.
20
+ HOST_END = if [0x01020304].pack("L").unpack1("V") == 0x01020304
21
+ LIL_END
22
+ else
23
+ BIG_END
24
+ end
25
+ end
26
+ # ^ That's because dbus/message needs HOST_END early
27
+
13
28
  require_relative "dbus/api_options"
14
29
  require_relative "dbus/auth"
15
30
  require_relative "dbus/bus"
@@ -41,18 +56,6 @@ module DBus
41
56
  # Default socket name for the system bus.
42
57
  SYSTEM_BUS_ADDRESS = "unix:path=/var/run/dbus/system_bus_socket"
43
58
 
44
- # Byte signifying big endianness.
45
- BIG_END = "B"
46
- # Byte signifying little endianness.
47
- LIL_END = "l"
48
-
49
- # Byte signifying the host's endianness.
50
- HOST_END = if [0x01020304].pack("L").unpack1("V") == 0x01020304
51
- LIL_END
52
- else
53
- BIG_END
54
- end
55
-
56
59
  # Comparing symbols is faster than strings
57
60
  # @return [:little,:big]
58
61
  HOST_ENDIANNESS = RawMessage.endianness(HOST_END)
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "spec_helper"
5
+ require "dbus"
6
+
7
+ # Pedantic full coverage test.
8
+ # The happy paths are covered via calling classes
9
+ describe DBus::RawMessage do
10
+ describe ".endianness" do
11
+ it "returns :little for 'l'" do
12
+ expect(described_class.endianness("l")).to eq :little
13
+ end
14
+
15
+ it "returns :big for 'B'" do
16
+ expect(described_class.endianness("B")).to eq :big
17
+ end
18
+
19
+ it "raises for other strings" do
20
+ expect { described_class.endianness("m") }
21
+ .to raise_error(DBus::InvalidPacketException, /Incorrect endianness/)
22
+ end
23
+ end
24
+
25
+ describe "#align" do
26
+ it "raises for values other than 1 2 4 8" do
27
+ subject = described_class.new("l")
28
+ expect { subject.align(3) }.to raise_error(ArgumentError)
29
+ expect { subject.align(16) }.to raise_error(ArgumentError)
30
+ end
31
+ end
32
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-dbus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruby DBus Team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-21 00:00:00.000000000 Z
11
+ date: 2023-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rexml
@@ -189,6 +189,7 @@ files:
189
189
  - spec/property_spec.rb
190
190
  - spec/proxy_object_interface_spec.rb
191
191
  - spec/proxy_object_spec.rb
192
+ - spec/raw_message_spec.rb
192
193
  - spec/server_robustness_spec.rb
193
194
  - spec/server_spec.rb
194
195
  - spec/service_newapi.rb
@@ -210,7 +211,7 @@ homepage: https://github.com/mvidner/ruby-dbus
210
211
  licenses:
211
212
  - LGPL-2.1
212
213
  metadata: {}
213
- post_install_message:
214
+ post_install_message:
214
215
  rdoc_options: []
215
216
  require_paths:
216
217
  - lib
@@ -226,7 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
227
  version: '0'
227
228
  requirements: []
228
229
  rubygems_version: 3.3.0.dev
229
- signing_key:
230
+ signing_key:
230
231
  specification_version: 4
231
232
  summary: Ruby module for interaction with D-Bus
232
233
  test_files: []