ostinelli / misultin

Misultin (pronounced mee-sool-téen) is an Erlang library for building fast lightweight HTTP(S) servers, which also supports websockets.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Misultin doesn't close websocket connection on unmasked frame

majek opened this issue · comments

I'm using a python websocket client: WebSocket-for-Python. Actually, I'm using quite an old version:

    ./venv/bin/pip install git+git://github.com/majek/WebSocket-for-Python.git

With this client, the program hangs instead of quitting (utils.py)

from utils import WebSocket8Client
ws = WebSocket8Client("http://localhost:8000/")
ws.close() # program hangs here

Upon further investigation I was able to isolate the issue. The problem is that misultin is not closing a connection when receiving an unmasked frame (see: http://tools.ietf.org/html/rfc6455):

"The server MUST close the connection upon receiving a frame that is not masked"

Apparently misultin is not closing a connection when receiving frame \x88\x00 (unmasked fin frame). On the other hand, a proper close frame with masking, like \x88\x80\xaa\xaa\xaa\xaa seems to be understood by misultin (and the connection is clsoed).

Steps to reproduce: https://gist.github.com/1781022

  1. ./misultin_ws_close_bug.erl
  2. run node client-raw.js with sending [\x88, \x00] and see it hanging forever.
  3. run node client-raw.js with sending [\x88, \x80, \xaa, \xaa, \xaa, \xaa] and see it closing the connection quickly

thank you for this.

misultin has been discontinued, my reasons here.

r.