websocket-driver 0.7.6-java → 0.8.0-java

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: 9234ae31d300336b8d2faee422f5fe665b1874066b18429c32f3e473ad178903
4
- data.tar.gz: d66d556cd9fdcdf3d2392deb9e6c0f41c672c9b10436e9024e0db17a5a083e77
3
+ metadata.gz: d80d130ef14404b970ec6a87d025d02b10c7be7caa4359cd6c69cd272835366b
4
+ data.tar.gz: 2baea5897642cf2fb7849467c3bbfcfc56719e67878c7141b1942a107ebb4389
5
5
  SHA512:
6
- metadata.gz: 9f6b174444c6ee089a9abb11d30480b098d7071914804f76349ceb31e941c8652843878afd794b7e419e20a83c3ab7c8f4af01e44c84865c852cec449287fc91
7
- data.tar.gz: c1665d4a0c60ad42a20324918abeed7de14301b4ca6a72ba022211a128865a77e25831fc67714f023fac864812dc18f4fc298656d6e54e8ea8e59ba624531757
6
+ metadata.gz: ae63f5fb7bd77c6cace3e104188cfdecd5c14ee695dfae034e0e9b671de4acde5199112d73ab04e019b9fdf94f322f06f99990a0b25c6c2772b254e93b093bb1
7
+ data.tar.gz: 6f2223f6719ae08a3672656fe97a2263dfb0bfc8e206c1fe58f59627562fce257b49a51b71ee330effe03b9b627b84157839d47a312c8725a3d5d6ca1a250961
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ### 0.8.0 / 2025-05-25
2
+
3
+ - Emit binary message as a string with `Encoding::BINARY` instead of an array
4
+ - Add the option `:binary_data_format` to force the previous behaviour
5
+
6
+ ### 0.7.7 / 2025-01-04
7
+
8
+ - Add `base64` gem to the dependencies to support Ruby 3.4
9
+
1
10
  ### 0.7.6 / 2023-07-25
2
11
 
3
12
  - Fix handling of default ports in `Host` headers on Ruby 3.1+
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2010-2023 James Coglan
1
+ Copyright 2010-2025 James Coglan
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4
4
  this file except in compliance with the License. You may obtain a copy of the
data/README.md CHANGED
@@ -275,6 +275,10 @@ keys:
275
275
  - `:protocols` - an array of strings representing acceptable subprotocols for
276
276
  use over the socket. The driver will negotiate one of these to use via the
277
277
  `Sec-WebSocket-Protocol` header if supported by the other peer.
278
+ - `:binary_data_format` - in older versions of this library, binary messages
279
+ were represented as arrays of bytes, whereas they're now represented as
280
+ strings with `Encoding::BINARY` for performance reasons. Set this option to
281
+ `:array` to restore the old behaviour.
278
282
 
279
283
  All drivers respond to the following API methods, but some of them are no-ops
280
284
  depending on whether the client supports the behaviour.
@@ -290,8 +294,8 @@ Adds a callback block to execute when the socket becomes open.
290
294
  #### `driver.on :message, -> (event) {}`
291
295
 
292
296
  Adds a callback block to execute when a message is received. `event` will have a
293
- `data` attribute containing either a string in the case of a text message or an
294
- array of integers in the case of a binary message.
297
+ `data` attribute whose value is a string with the encoding `Encoding::UTF_8` for
298
+ text message, and `Encoding::BINARY` for binary message.
295
299
 
296
300
  #### `driver.on :error, -> (event) {}`
297
301
 
@@ -346,11 +350,12 @@ Sends a text message over the socket. If the socket handshake is not yet
346
350
  complete, the message will be queued until it is. Returns `true` if the message
347
351
  was sent or queued, and `false` if the socket can no longer send messages.
348
352
 
349
- #### `driver.binary(array)`
353
+ #### `driver.binary(buffer)`
350
354
 
351
- Takes an array of byte-sized integers and sends them as a binary message. Will
352
- queue and return `true` or `false` the same way as the `text` method. It will
353
- also return `false` if the driver does not support binary messages.
355
+ Takes either a string with encoding `Encoding::BINARY`, or an array of
356
+ byte-sized integers, and sends it as a binary message. Will queue and return
357
+ `true` or `false` the same way as the `text` method. It will also return `false`
358
+ if the driver does not support binary messages.
354
359
 
355
360
  #### `driver.ping(string = '', &callback)`
356
361
 
@@ -163,11 +163,13 @@ module WebSocket
163
163
  message = Message.new
164
164
  frame = Frame.new
165
165
 
166
- message.rsv1 = message.rsv2 = message.rsv3 = false
167
- message.opcode = OPCODES[type || (String === buffer ? :text : :binary)]
166
+ is_binary = (Array === buffer or buffer.encoding == Encoding::BINARY)
167
+ payload = Driver.encode(buffer, is_binary ? nil : Encoding::UTF_8)
168
+ payload = [code, payload].pack('S>a*') if code
169
+ type ||= is_binary ? :binary : :text
168
170
 
169
- payload = Driver.encode(buffer)
170
- payload = [code, payload].pack('S>a*') if code
171
+ message.rsv1 = message.rsv2 = message.rsv3 = false
172
+ message.opcode = OPCODES[type]
171
173
  message.data = payload
172
174
 
173
175
  if MESSAGE_OPCODES.include?(message.opcode)
@@ -403,7 +405,11 @@ module WebSocket
403
405
  payload = Driver.encode(payload, Encoding::UTF_8)
404
406
  payload = nil unless payload.valid_encoding?
405
407
  when OPCODES[:binary]
406
- payload = payload.bytes.to_a
408
+ if @binary_data_format == :array
409
+ payload = payload.bytes.to_a
410
+ else
411
+ payload = Driver.encode(payload, Encoding::BINARY)
412
+ end
407
413
  end
408
414
 
409
415
  if payload
@@ -71,7 +71,7 @@ module WebSocket
71
71
 
72
72
  def initialize(socket, options = {})
73
73
  super()
74
- Driver.validate_options(options, [:max_length, :masking, :require_masking, :protocols])
74
+ Driver.validate_options(options, [:max_length, :masking, :require_masking, :protocols, :binary_data_format])
75
75
 
76
76
  @socket = socket
77
77
  @reader = StreamReader.new
@@ -80,6 +80,8 @@ module WebSocket
80
80
  @headers = Headers.new
81
81
  @queue = []
82
82
  @ready_state = 0
83
+
84
+ @binary_data_format = options[:binary_data_format] || :string
83
85
  end
84
86
 
85
87
  def state
@@ -197,17 +199,18 @@ module WebSocket
197
199
 
198
200
  def self.encode(data, encoding = nil)
199
201
  if Array === data
202
+ data = data.pack('C*')
200
203
  encoding ||= Encoding::BINARY
201
- return data.pack('C*').force_encoding(encoding)
202
204
  end
203
205
 
204
- encoding ||= Encoding::UTF_8
205
-
206
- return data if data.encoding == encoding
207
- return data.encode(encoding) unless data.encoding == Encoding::BINARY
206
+ return data if encoding.nil? or data.encoding == encoding
208
207
 
209
- data = data.dup if data.frozen?
210
- data.force_encoding(encoding)
208
+ if data.encoding == Encoding::BINARY
209
+ data = data.dup if data.frozen?
210
+ data.force_encoding(encoding)
211
+ else
212
+ data.encode(encoding)
213
+ end
211
214
  end
212
215
 
213
216
  def self.host_header(uri)
@@ -224,6 +227,12 @@ module WebSocket
224
227
  raise ConfigurationError, "Unrecognized option: #{ key.inspect }"
225
228
  end
226
229
  end
230
+
231
+ if options[:binary_data_format]
232
+ unless [:array, :string].include?(options[:binary_data_format])
233
+ raise ConfigurationError, "Invalid :binary_data_format: #{options[:binary_data_format].inspect}"
234
+ end
235
+ end
227
236
  end
228
237
 
229
238
  def self.websocket?(env)
metadata CHANGED
@@ -1,86 +1,98 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: websocket-driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.6
4
+ version: 0.8.0
5
5
  platform: java
6
6
  authors:
7
7
  - James Coglan
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-07-25 00:00:00.000000000 Z
10
+ date: 2025-05-25 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
13
+ name: base64
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 0.1.0
19
- name: websocket-extensions
18
+ version: '0'
19
+ type: :runtime
20
20
  prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: websocket-extensions
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.1.0
21
33
  type: :runtime
34
+ prerelease: false
22
35
  version_requirements: !ruby/object:Gem::Requirement
23
36
  requirements:
24
37
  - - ">="
25
38
  - !ruby/object:Gem::Version
26
39
  version: 0.1.0
27
40
  - !ruby/object:Gem::Dependency
41
+ name: eventmachine
28
42
  requirement: !ruby/object:Gem::Requirement
29
43
  requirements:
30
44
  - - ">="
31
45
  - !ruby/object:Gem::Version
32
46
  version: '0'
33
- name: eventmachine
34
- prerelease: false
35
47
  type: :development
48
+ prerelease: false
36
49
  version_requirements: !ruby/object:Gem::Requirement
37
50
  requirements:
38
51
  - - ">="
39
52
  - !ruby/object:Gem::Version
40
53
  version: '0'
41
54
  - !ruby/object:Gem::Dependency
55
+ name: permessage_deflate
42
56
  requirement: !ruby/object:Gem::Requirement
43
57
  requirements:
44
58
  - - ">="
45
59
  - !ruby/object:Gem::Version
46
60
  version: '0'
47
- name: permessage_deflate
48
- prerelease: false
49
61
  type: :development
62
+ prerelease: false
50
63
  version_requirements: !ruby/object:Gem::Requirement
51
64
  requirements:
52
65
  - - ">="
53
66
  - !ruby/object:Gem::Version
54
67
  version: '0'
55
68
  - !ruby/object:Gem::Dependency
69
+ name: rake-compiler
56
70
  requirement: !ruby/object:Gem::Requirement
57
71
  requirements:
58
72
  - - ">="
59
73
  - !ruby/object:Gem::Version
60
74
  version: '0'
61
- name: rake-compiler
62
- prerelease: false
63
75
  type: :development
76
+ prerelease: false
64
77
  version_requirements: !ruby/object:Gem::Requirement
65
78
  requirements:
66
79
  - - ">="
67
80
  - !ruby/object:Gem::Version
68
81
  version: '0'
69
82
  - !ruby/object:Gem::Dependency
83
+ name: rspec
70
84
  requirement: !ruby/object:Gem::Requirement
71
85
  requirements:
72
86
  - - ">="
73
87
  - !ruby/object:Gem::Version
74
88
  version: '0'
75
- name: rspec
76
- prerelease: false
77
89
  type: :development
90
+ prerelease: false
78
91
  version_requirements: !ruby/object:Gem::Requirement
79
92
  requirements:
80
93
  - - ">="
81
94
  - !ruby/object:Gem::Version
82
95
  version: '0'
83
- description:
84
96
  email: jcoglan@gmail.com
85
97
  executables: []
86
98
  extensions: []
@@ -115,8 +127,8 @@ files:
115
127
  homepage: https://github.com/faye/websocket-driver-ruby
116
128
  licenses:
117
129
  - Apache-2.0
118
- metadata: {}
119
- post_install_message:
130
+ metadata:
131
+ changelog_uri: https://github.com/faye/websocket-driver-ruby/blob/main/CHANGELOG.md
120
132
  rdoc_options:
121
133
  - "--main"
122
134
  - README.md
@@ -135,8 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
147
  - !ruby/object:Gem::Version
136
148
  version: '0'
137
149
  requirements: []
138
- rubygems_version: 3.3.25
139
- signing_key:
150
+ rubygems_version: 3.6.3
140
151
  specification_version: 4
141
152
  summary: WebSocket protocol handler with pluggable I/O
142
153
  test_files: []