This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

websocket library help
#1
Hi,

Referring to post Websocket post we are able to connect to websocket.  Now when I try to connect to a secure websocket using copas and the url includes a query string then the query string is dropped. for example.  How can we solve this?

Code:
if not skt then
 --add receive thread
 copas.addthread(function()
     local reconnect = function()
       local url= "wss://192.168.0.54:8002/api/v2/channels/remote.control?name=MTUyNjQ1MTQ="
       skt,err = ws.client('copas',0)
       local noerr,a = skt:connect(url)

       if(noerr==true) then        
         init()
       else
         alert('[tcp-client] error connecting %s',a)
         return
       end      
     end
     if not skt or skt==nil or skt.state=='CLOSED' then
       reconnect()        
     end
     if(skt) then
       while true do
         local resp,err = copas.receive(skt)
         -- if theres no connection start a new connection
         if(skt.state=='CLOSED')then
           if not resp then
             alert("[tcp-client] Receive error: %s", err)
             copas.removeserver(skt)
             skt = nil
             break
           end
         else
           local fd,prtd = pcall(parse,resp)
           if(fd==false)then
             alert("Error with parsemsg %s ",prtd)
           end
         end
       end      
     end
   end)  
end
Reply
#2
Replace upgrade_request function:
Code:
local upgrade_request = function(req, key)
  local format = string.format
  local uri = req.path or ''
  local query = req.query
  if type(query) == 'string' and #query > 0 then
    uri = uri .. '?' .. query
  end

  local lines = {
    format('GET %s HTTP/1.1', uri),
    format('Host: %s', req.host),
    'Upgrade: websocket',
    'Connection: Upgrade',
    format('Sec-WebSocket-Key: %s',key),
    'Sec-WebSocket-Version: 13',
  }
  if req.port and req.port ~= 80 then
    lines[2] = format('Host: %s:%d', req.host, req.port)
  end
  if req.userinfo then
    local auth = format('Authorization: Basic %s', base64enc(req.userinfo))
    tinsert(lines, auth)
  end
  tinsert(lines,'\r\n')
  return tconcat(lines,'\r\n')
end
Reply


Forum Jump: