xpra icon
Bug tracker and wiki

Ticket #2104: websockify-new-import.patch

File websockify-new-import.patch, 3.6 KB (added by Antoine Martin, 2 months ago)

work in progress, needs guess_type()

  • xpra/server/websocket.py

     
    2020
    2121WEBSOCKIFY_NUMPY = envbool("XPRA_WEBSOCKIFY_NUMPY", False)
    2222log("WEBSOCKIFY_NUMPY=%s", WEBSOCKIFY_NUMPY)
     23def import_websockify_request_handler():
     24    import websockify
     25    assert websockify
     26    try:
     27        #websockify 0.8.0 and earlier:
     28        from websockify.websocket import WebSocketRequestHandler    #@UnusedImport
     29    except ImportError:
     30        from websockify.websocketserver import WebSocketRequestHandler    #@UnusedImport
     31    return WebSocketRequestHandler
    2332if WEBSOCKIFY_NUMPY:
    24     from websockify.websocket import WebSocketRequestHandler    #@UnusedImport
     33    WebSocketRequestHandler = import_websockify_request_handler()
    2534else:
     35    import warnings
    2636    from xpra.codecs.xor.cyxor import hybi_unmask
    2737    with nomodule_context("numpy"):
    28         from websockify.websocket import WebSocketRequestHandler    #@Reimport
    29         def unmask(buf, hlen, plen):
    30             pstart = hlen + 4
    31             pend = pstart + plen
    32             mask = buf[hlen:hlen+4]
    33             data = buf[pstart:pend]
    34             return hybi_unmask(mask, data)
    35         WebSocketRequestHandler.unmask = staticmethod(unmask)
     38        with warnings.catch_warnings(record=True) as w:
     39            warnings.simplefilter("always")
     40            WebSocketRequestHandler = import_websockify_request_handler()
     41            def unmask(buf, hlen, plen):
     42                pstart = hlen + 4
     43                pend = pstart + plen
     44                mask = buf[hlen:hlen+4]
     45                data = buf[pstart:pend]
     46                return hybi_unmask(mask, data)
     47            WebSocketRequestHandler.unmask = staticmethod(unmask)
     48            #print warnings except for numpy:
     49            for x in w:
     50                message = getattr(x, "message", None)
     51                if message:
     52                    if str(message).find("numpy")>0:
     53                        log("numpy warning suppressed: %s", message)
     54                    else:
     55                        log.warn("Warning: %s", message)
     56                else:
     57                    log.warn("Warning: %s", x)
    3658
     59
    3760WEBSOCKET_TCP_NODELAY = envbool("WEBSOCKET_TCP_NODELAY", True)
    3861WEBSOCKET_TCP_KEEPALIVE = envbool("WEBSOCKET_TCP_KEEPALIVE", True)
    3962WEBSOCKET_DEBUG = envbool("XPRA_WEBSOCKET_DEBUG", False)
     
    177200        and web server is enabled, SimpleHTTPRequestHandler.do_GET will be called.
    178201        """
    179202        if not self.handle_websocket():
    180             if self.only_upgrade:
     203            if getattr(self, "only_upgrade", False):
    181204                self.send_error(405, "Method Not Allowed")
    182205            else:
    183206                content = self.send_head()
     
    215238            else:
    216239                #self.send_error(403, "Directory listing forbidden")
    217240                return self.list_directory(path).read()
    218         ctype = self.guess_type(path)
    219241        _, ext = os.path.splitext(path)
    220242        f = None
    221243        try:
     
    225247            f = open(path, 'rb')
    226248            fs = os.fstat(f.fileno())
    227249            content_length = fs[6]
    228             headers = {
    229                 "Content-type"      : ctype,
    230                 }
     250            headers = {}
     251            ctype = None #self.guess_type(path)
     252            if ctype:
     253                headers["Content-type"] = ctype
    231254            accept = self.headers.get('accept-encoding', '').split(",")
    232255            accept = [x.split(";")[0].strip() for x in accept]
    233256            content = None