예제 #1
0
    def connect(self):
        """
        Connects to the server.
        """

        try:
            WebSocketBaseClient.connect(self)
        except OSError:
            raise
        except Exception as e:
            log.error("could to connect {}: {}".format(self.url, e))
            raise OSError("Websocket exception {}: {}".format(type(e), e))

        # once connected, get the GNS3 server version (over classic HTTP)
        url = "http://{host}:{port}/version".format(host=self.host, port=self.port)
        content = urllib.request.urlopen(url).read()
        try:
            json_data = json.loads(content.decode("utf-8"))
            self._version = json_data.get("version")
        except ValueError as e:
            log.error("could not get the server version: {}".format(e))

        #FIXME: temporary version check
        if (self._version != __version__):
            self.close_connection()
            raise OSError("GUI version {} differs with the server version {}".format(__version__, self._version))
    def test_connect_and_close(self, sock):
        
        s = MagicMock()
        sock.socket.return_value = s
        sock.getaddrinfo.return_value = [(socket.AF_INET, socket.SOCK_STREAM, 0, "",
                                          ("127.0.0.1", 80, 0, 0))]

        c = WebSocketBaseClient(url="ws://127.0.0.1/?token=value")
        
        s.recv.return_value = b"\r\n".join([
            b"HTTP/1.1 101 Switching Protocols",
            b"Connection: Upgrade",
            b"Sec-Websocket-Version: 13",
            b"Content-Type: text/plain;charset=utf-8",
            b"Sec-Websocket-Accept: " + b64encode(sha1(c.key + WS_KEY).digest()),
            b"Upgrade: websocket",
            b"Date: Sun, 26 Jul 2015 12:32:55 GMT",
            b"Server: ws4py/test",
            b"\r\n"
        ])

        c.connect()
        s.connect.assert_called_once_with(("127.0.0.1", 80))

        s.reset_mock()
        c.close(code=1006, reason="boom")
        args = s.sendall.call_args_list[0]
        f = Frame()
        f.parser.send(args[0][0])
        f.parser.close()
        self.assertIn(b'boom', f.unmask(f.body))
예제 #3
0
    def test_connect_and_close(self, sock):

        s = MagicMock()
        sock.socket.return_value = s
        sock.getaddrinfo.return_value = [(socket.AF_INET, socket.SOCK_STREAM,
                                          0, "", ("127.0.0.1", 80, 0, 0))]

        c = WebSocketBaseClient(url="ws://127.0.0.1/?token=value")

        s.recv.return_value = b"\r\n".join([
            b"HTTP/1.1 101 Switching Protocols", b"Connection: Upgrade",
            b"Sec-Websocket-Version: 13",
            b"Content-Type: text/plain;charset=utf-8",
            b"Sec-Websocket-Accept: " +
            b64encode(sha1(c.key + WS_KEY).digest()), b"Upgrade: websocket",
            b"Date: Sun, 26 Jul 2015 12:32:55 GMT", b"Server: ws4py/test",
            b"\r\n"
        ])

        c.connect()
        s.connect.assert_called_once_with(("127.0.0.1", 80))

        s.reset_mock()
        c.close(code=1006, reason="boom")
        args = s.sendall.call_args_list[0]
        f = Frame()
        f.parser.send(args[0][0])
        f.parser.close()
        self.assertIn(b'boom', f.unmask(f.body))
예제 #4
0
    def connect(self):
        """
        Connects to the server.
        """

        try:
            WebSocketBaseClient.connect(self)
        except OSError:
            raise
        except Exception as e:
            log.error("could to connect {}: {}".format(self.url, e))
            raise OSError("Websocket exception {}: {}".format(type(e), e))

        # once connected, get the GNS3 server version (over classic HTTP)
        url = "http://{host}:{port}/version".format(host=self.host,
                                                    port=self.port)
        content = urllib.request.urlopen(url).read()
        try:
            json_data = json.loads(content.decode("utf-8"))
            self._version = json_data.get("version")
        except ValueError as e:
            log.error("could not get the server version: {}".format(e))

        #FIXME: temporary version check
        if (self._version != __version__):
            self.close_connection()
            raise OSError(
                "GUI version {} differs with the server version {}".format(
                    __version__, self._version))
예제 #5
0
    def connect(self):
        """
        Connects to the server.
        """

        try:
            WebSocketBaseClient.connect(self)
        except HandshakeError as e:
            log.error("could to connect {}: {}".format(self.url, e))
            raise OSError(str(e))
예제 #6
0
 def _connect(self):
     """
     Connect to the server.
     """
     try:
         WebSocketBaseClient.connect(self)
     except OSError:
         raise
     except Exception as e:
         log.error("could to connect {}: {}".format(self.url, e))
         raise OSError("Websocket exception {}: {}".format(type(e), e))
    def _connect(self):
        """
        Connect to the server.
        """

        try:
            if self._local is True:
                self.connection.settimeout(5)
            WebSocketBaseClient.connect(self)
        except OSError:
            raise
        except Exception as e:
            log.error("could not to connect {}: {}".format(self.url, e))
            raise OSError("Websocket exception {}: {}".format(type(e), e))
예제 #8
0
from ws4py.client import WebSocketBaseClient
import json
import ssl

ws = WebSocketBaseClient(url='wss://localhost:8888/websocket',
                         ssl_options={
                             "cert_reqs": ssl.CERT_NONE,
                             "ssl_version": ssl.PROTOCOL_TLSv1_2
                         })
info = {'Type': 'Client', 'Request': 'EnvironmentInfo'}
print("trying to connect")
ws.connect()
ws.send(json.dumps(info))
예제 #9
0
파일: chropy.py 프로젝트: mtnmts/Chropy
 def _new_ws(self, ws_url):
     con = WebSocketBaseClient(ws_url)
     con.connect()
     return con
예제 #10
0
class WsClientSocket(ClientSocket):
    # TODO: this shares a lot with zmq...

    def send(self, msg):
        """Send the message to the socket"""
        self.sock.send(msg)

    def received_message(self, msg):
        assert self.msg is None, \
            "Already got non-zero msg {}".format(self.msg)
        self.msg = str(msg)

    def recv(self, timeout=None):
        """Co-operatively block until received"""
        start = time.time()
        self.msg = None
        if timeout is None:
            timeout = self.timeout
        while True:
            if timeout:
                t = start + timeout - time.time()
            else:
                t = None
            self.sock.sock.settimeout(t)
            if self.sock.once() is False:
                # Failed
                raise StopIteration
            elif self.msg is not None:
                # sys.stdout.write("Got message {}\n".format(self.msg))
                # sys.stdout.flush()
                return self.msg

    def serialize(self, typ, kwargs):
        """Serialize the arguments to a string that can be sent to the socket
        """
        _id = kwargs.pop("id")
        assert type(_id) == int, "Need an integer ID, got {}".format(_id)
        assert typ in SType, \
            "Expected type in {}, got {}".format(list(SType.__members__), typ)
        d = OrderedDict(type=typ.name)
        d.update(id=_id)
        if kwargs is not None:
            d.update(kwargs)
        s = presenter.serialize(d)
        return s

    def deserialize(self, msg):
        """Deserialize the string to
        (typ, kwargs)"""
        d = presenter.deserialize(msg)
        typ = d.pop("type")
        assert typ in SType.__members__, \
            "Expected type in {}, got {}".format(list(SType.__members__), typ)
        typ = SType.__members__[typ]
        assert "id" in d, "No id in {}".format(d)
        return typ, d

    def open(self, address):
        """Open the socket on the given address"""
        from cothread.cosocket import socket as cosocket
        import socket
        from ws4py.client import WebSocketBaseClient
        _socket = socket.socket
        socket.socket = cosocket
        self.sock = WebSocketBaseClient(address)
        self.sock.handshake_ok = lambda: None
        socket.socket = _socket
        self.sock.received_message = weak_method(self.received_message)
        self.sock.connect()

    def close(self):
        """Close the socket"""
        self.sock.close()

    def request(self, response, typ, kwargs):
        """Make a new request and send it out, storing a suitable id so that
        any returns can be mapped to the response function using do_response"""
        # lazily make request map
        if not hasattr(self, "request_id"):
            self.request_id = {}
            self.last_id = -1
        self.last_id += 1
        assert self.last_id not in self.request_id, \
            "Already have a request {} in {}".format(self.last_id,
                                                     self.request_id)
        self.request_id[self.last_id] = response

        self = weakref.proxy(self)

        def do_request(typ, kwargs=None, _id=self.last_id):
            if kwargs is None:
                kwargs = OrderedDict()
            kwargs.update(id=_id)
            self.send(self.serialize(typ, kwargs))

        do_request(typ, kwargs)
        return do_request

    def lookup_response(self, kwargs, remove_response=False):
        """Return the reponse function given the id stored in the args. If
        remove, then remove it from the list"""
        _id = kwargs.pop("id")
        if remove_response:
            return self.request_id.pop(_id)
        else:
            return self.request_id[_id]