summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/em-websocket-0.5.3/lib/em-websocket/masking04.rb
diff options
context:
space:
mode:
authorBenjamin Sanders <ben@Benjamins-MacBook-Pro.local>2025-10-11 10:34:24 -0400
committerBenjamin Sanders <ben@Benjamins-MacBook-Pro.local>2025-10-11 10:34:24 -0400
commit5571dc766e2143e39762ff0b47c41d1c2e154f4c (patch)
treef4f124d314a7e76c04484515aa0fd1f2e271a601 /vendor/bundle/ruby/3.4.0/gems/em-websocket-0.5.3/lib/em-websocket/masking04.rb
parent359f3309c97fc894b63e0a295c76ab298504d635 (diff)
Vendor bundled gems for deployment
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/em-websocket-0.5.3/lib/em-websocket/masking04.rb')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/em-websocket-0.5.3/lib/em-websocket/masking04.rb37
1 files changed, 37 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/em-websocket-0.5.3/lib/em-websocket/masking04.rb b/vendor/bundle/ruby/3.4.0/gems/em-websocket-0.5.3/lib/em-websocket/masking04.rb
new file mode 100644
index 0000000..ad050e9
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/em-websocket-0.5.3/lib/em-websocket/masking04.rb
@@ -0,0 +1,37 @@
+module EventMachine
+ module WebSocket
+ class MaskedString < String
+ # Read a 4 bit XOR mask - further requested bytes will be unmasked
+ def read_mask
+ if respond_to?(:encoding) && encoding.name != "ASCII-8BIT"
+ raise "MaskedString only operates on BINARY strings"
+ end
+ raise "Too short" if bytesize < 4 # TODO - change
+ @masking_key = String.new(self[0..3])
+ end
+
+ # Removes the mask, behaves like a normal string again
+ def unset_mask
+ @masking_key = nil
+ end
+
+ def getbyte(index)
+ if defined?(@masking_key) && @masking_key
+ masked_char = super
+ masked_char ? masked_char ^ @masking_key.getbyte(index % 4) : nil
+ else
+ super
+ end
+ end
+
+ def getbytes(start_index, count)
+ data = ''
+ data.force_encoding('ASCII-8BIT') if data.respond_to?(:force_encoding)
+ count.times do |i|
+ data << getbyte(start_index + i)
+ end
+ data
+ end
+ end
+ end
+end