mkschreder / orangerpcd

Websocket RPC server for OpenWRT
Other
27 stars 11 forks source link

orangerpcd behind libhttpd: 'Invalid frame header' websocket error #17

Open avalluri opened 6 years ago

avalluri commented 6 years ago

I tried using juci/orangerpcd server behind lighthttpd(v1.4.45). I patched upstream lighttpd with mod_websocket support.

When i try connecting from web browser(chrome), websocket connection was successful, and could able to send the initial rpc request to lighttpd -> ornagerpcd, but couldn't get the reply back from lighttpd, and my browser splitting error saying 'Invalid frame header'.

Here is my websocket.conf :

server.modules += ( "mod_websocket")
websocket.server = (
    # WebSocket Proxies
    # orangerpcd webserver
    "^\/websocket\/*" => (
        "host" => "127.0.0.1",
        "port" => 5303,
        "proto" => "websocket", "subproto" => "text"
    )
)
websocket.ping_interval = 5 # send PING per 5 secs
websocket.timeout = 30      # disconnect a client when not to recv PONG for 30 secs
websocket.debug = 4         # LOG_DEBUG

orangerpcd's logs:

connection established! localhost.localdomain 127.0.0.1 9 06fed35d
received fragment of 91 bytes
got message from 06fed35d: [{"jsonrpc":"2.0","id":2,"method":"list","params":["00000000000000000000000000000000","*"]}]
sending back: {"jsonrpc":"2.0","id":2,"result":{"\/juci\/ddns":{"providers":[]},"\/juci\/dhcp":{"ipv6leases":[],"ipv4leases":[]},"\/juci\/diagnostics":{"ping":[],"traceroute6":[],"traceroute":[],"ping6":[]},"\/juci\/dropbear":{"get_public_keys":[],"add_public_key":[],"remove_public_key":[]},"\/juci\/ethernet":{"adapters":[]},"\/juci\/ethernet.modems":{"list4g":[],"list":[]},"\/juci\/firewall.dmz":{"excluded_ports":[]},"\/juci\/macdb":{"lookup":[]},"\/juci\/minidlna":{"status":[],"autocomplete":[],"folder_tree":[]},"\/juci\/samba":{"autocomplete":[],"folder_tree":[]},"\/juci\/swconfig":{"status":[]},"\/juci\/system":{"defaultreset":[],"log":[],"info":[],"filesystems":[],"reboot":[]},"\/juci\/system.conf":{"backup":[],"clean":[],"restore":[],"features":[]},"\/juci\/system.logs":{"download":[]},"\/juci\/system.process":{"list":[]},"\/juci\/system.service":{"status":[],"stop":[],"list":[],"start":[],"reload":[],"enable":[],"disable":[]},"\/juci\/system.time":{"set":[],"timediff":[],"zonelist":[],"get":[]},"\/juci\/system.upgrade":{"online":[],"check":[],"test":[],"start":[],"clean":[]},"\/juci\/system.user":{"listusers":[],"setpassword":[]},"\/juci\/ui":{"menu":[]},"\/juci\/upnpd":{"ports":[]},"\/juci\/usb":{"list":[]}}}
sent 1222 out of 1222 bytes
received fragment of 8 bytes
websocket: client disconnected 0x7fa088000aa0 0x7fa088000ac0

Chrome Network websocket Headers:

**General**
     **Request URL**:ws://169.254.246.46/websocket/
     **Request Method**:GET
     **Status Code**:101 Switching Protocols
**Response Headers**
     **Connection**:Upgrade
     **Sec-WebSocket-Accept**:TV2OpeouPXZYvHB0jESRlrDg/wg=
     **Upgrade**:WebSocket
**Request Headers**
     **Accept-Encoding**:gzip, deflate, sdch
     **Accept-Language**:en-US,en;q=0.8,te;q=0.6
     **Cache-Control**:no-cache
     **Connection**:Upgrade
     **Host**:169.254.246.46
     **Origin**:http://169.254.246.46
     **Pragma**:no-cache
     **Sec-WebSocket-Extensions**:permessage-deflate; client_max_window_bits
     **Sec-WebSocket-Key**:LJjueqVQMiFTBT+bKiH9bA==
     **Sec-WebSocket-Version**:13
     **Upgrade**:websocket
     **User-Agent**:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36

Netwrok websocket Frames:

{"jsonrpc":"2.0","id":2,"method":"list","params":["00000000000000000000000000000000","*"]}
 (Opcode -1)

What is going wrong :(