From 61bfc0725f958ba798aea1ef24286bb81a109186 Mon Sep 17 00:00:00 2001 From: Kuba Suder Date: Thu, 8 May 2025 02:19:07 +0200 Subject: [PATCH] added :binary_data_format option --- lib/websocket/driver.rb | 23 +++++++++++++++-------- lib/websocket/driver/hybi.rb | 4 +++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/websocket/driver.rb b/lib/websocket/driver.rb index 719b38c..158cfd7 100644 --- a/lib/websocket/driver.rb +++ b/lib/websocket/driver.rb @@ -71,15 +71,16 @@ module WebSocket def initialize(socket, options = {}) super() - Driver.validate_options(options, [:max_length, :masking, :require_masking, :protocols]) + Driver.validate_options(options, [:max_length, :masking, :require_masking, :protocols, :binary_data_format]) - @socket = socket - @reader = StreamReader.new - @options = options - @max_length = options[:max_length] || MAX_LENGTH - @headers = Headers.new - @queue = [] - @ready_state = 0 + @socket = socket + @reader = StreamReader.new + @options = options + @max_length = options[:max_length] || MAX_LENGTH + @headers = Headers.new + @queue = [] + @ready_state = 0 + @binary_data_format = options[:binary_data_format] || :array end def state @@ -224,6 +225,12 @@ module WebSocket raise ConfigurationError, "Unrecognized option: #{ key.inspect }" end end + + if options[:binary_data_format] + unless [:array, :string].include?(options[:binary_data_format]) + raise ConfigurationError, "Invalid :binary_data_format: #{options[:binary_data_format].inspect}" + end + end end def self.websocket?(env) diff --git a/lib/websocket/driver/hybi.rb b/lib/websocket/driver/hybi.rb index 18951fb..7560554 100644 --- a/lib/websocket/driver/hybi.rb +++ b/lib/websocket/driver/hybi.rb @@ -403,7 +403,9 @@ module WebSocket payload = Driver.encode(payload, Encoding::UTF_8) payload = nil unless payload.valid_encoding? when OPCODES[:binary] - payload = payload.bytes.to_a + if @binary_data_format == :array + payload = payload.bytes.to_a + end end if payload