INNER CODE UNIT · Ruby

send_packet

royshil/obs-backgroundremoval · scripts/ws_client.rb:33

  def send_packet(payload)
    mask_key = Random.bytes(4).unpack('C*')
    bytes = payload.to_json.b

    frame = case
    when bytes.length < 126; [0x81, bytes.length | 0x80]
    when bytes.length <= 0xFFFF; [0x81, 0xFE, [bytes.length].pack('n').unpack('C*')]
    else; [0x81, 0xFF, [bytes.length].pack('Q>').unpack('C*')]
    end
    frame += mask_key + bytes.unpack('C*').each_with_index.map { |b, i| b ^ mask_key[i % 4] }

    @socket.write(frame.flatten.pack('C*'))
  end

  def receive_packet
    h = @socket.read(2)
    return nil if h.nil?

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…