import sha1
import base64
-intrude import standard::stream
-intrude import standard::bytes
+intrude import core::stream
+intrude import core::bytes
# Websocket compatible listener
#
super TCPStream
init do
- _buffer = new NativeString(1024)
+ _buffer = new CString(1024)
_buffer_pos = 0
_buffer_capacity = 1024
_buffer_length = 0
resp_map["Connection:"] = "Upgrade"
var key = heads["Sec-WebSocket-Key"]
key += "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
- key = key.sha1.encode_base64
+ key = key.sha1.encode_base64.to_s
resp_map["Sec-WebSocket-Accept:"] = key
var resp = resp_map.join("\r\n", " ")
resp += "\r\n\r\n"
while not fin do
var fst_byte = client.read_byte
var snd_byte = client.read_byte
- if fst_byte == null or snd_byte == null then
+ if fst_byte < 0 or snd_byte < 0 then
last_error = new IOError("Error: bad frame")
client.close
return
# %x9 denotes a ping
# %xA denotes a pong
# %xB-F are reserved for further control frames
- var fin_flag = fst_byte & 0b1000_0000u8
+ var fin_flag = fst_byte & 0b1000_0000
if fin_flag != 0 then fin = true
- var opcode = fst_byte & 0b0000_1111u8
+ var opcode = fst_byte & 0b0000_1111
if opcode == 9 then
bf.add(138u8)
bf.add(0u8)
# |(mask - 1bit)|(payload length - 7 bits)
# As specified, if the payload length is 126 or 127
# The next 16 or 64 bits contain an extended payload length
- var mask_flag = snd_byte & 0b1000_0000u8
- var len = (snd_byte & 0b0111_1111u8).to_i
+ var mask_flag = snd_byte & 0b1000_0000
+ var len = snd_byte & 0b0111_1111
var payload_ext_len = 0
if len == 126 then
var tmp = client.read_bytes(2)
end
# Unmasks a message sent by a client
- private fun unmask_message(key: NativeString, message: NativeString, len: Int): NativeString
+ private fun unmask_message(key: CString, message: CString, len: Int): CString
do
- var return_message = new NativeString(len)
+ var return_message = new CString(len)
for i in [0 .. len[ do
return_message[i] = message[i] ^ key[i % 4]