Example #1
0
 def __init__(self):
     super(ExternalVNCViewerHandler, self).__init__()
     self.vnc_starter_thread = None
     self.vnc_socket = GreenSocket(tcp_socket())
     set_reuse_addr(self.vnc_socket)
     self.vnc_socket.settimeout(self.connect_timeout)
     self.vnc_socket.bind(self.address)
     self.vnc_socket.listen(1)
     self.address = self.vnc_socket.getsockname()
Example #2
0
def connect_tcp(address, localaddr=None):
    """
    Create a TCP connection to address (host, port) and return the socket.
    Optionally, bind to localaddr (host, port) first.
    """
    from eventlib import greenio, util
    desc = greenio.GreenSocket(util.tcp_socket())
    if localaddr is not None:
        desc.bind(localaddr)
    desc.connect(address)
    return desc
Example #3
0
def connect_tcp(address, localaddr=None):
    """
    Create a TCP connection to address (host, port) and return the socket.
    Optionally, bind to localaddr (host, port) first.
    """
    from eventlib import greenio, util
    desc = greenio.GreenSocket(util.tcp_socket())
    if localaddr is not None:
        desc.bind(localaddr)
    desc.connect(address)
    return desc
Example #4
0
        def go():
            client = util.tcp_socket()

            desc = greenio.GreenSocket(client)
            desc.connect(('127.0.0.1', bound_port))
            try:
                api.trampoline(desc, read=True, write=True, timeout=0.1)
            except api.TimeoutError:
                assert False, "Timed out"

            server.close()
            client.close()
Example #5
0
    def test_001_trampoline_timeout(self):
        server = api.tcp_listener(('0.0.0.0', 0))
        bound_port = server.getsockname()[1]

        try:
            desc = greenio.GreenSocket(util.tcp_socket())
            desc.connect(('127.0.0.1', bound_port))
            api.trampoline(desc, read=True, write=False, timeout=0.1)
        except api.TimeoutError:
            pass # test passed
        else:
            assert False, "Didn't timeout"

        check_hub()
Example #6
0
def tcp_listener(address, backlog=50):
    """
    Listen on the given (ip, port) *address* with a TCP socket.
    Returns a socket object on which one should call ``accept()`` to
    accept a connection on the newly bound socket.

    Generally, the returned socket will be passed to ``tcp_server()``,
    which accepts connections forever and spawns greenlets for
    each incoming connection.
    """
    from eventlib import greenio, util
    socket = greenio.GreenSocket(util.tcp_socket())
    util.socket_bind_and_listen(socket, address, backlog=backlog)
    return socket
Example #7
0
 def _start_vnc_connection(self):
     try:
         self.vnc_socket = GreenSocket(tcp_socket())
         self.vnc_socket.settimeout(self.connect_timeout)
         self.vnc_socket.connect(self.address)
         self.vnc_socket.settimeout(None)
     except Exception as e:
         self.vnc_starter_thread = None # avoid issues caused by the notification handler killing this greenlet during post_notification
         NotificationCenter().post_notification('ScreenSharingHandlerDidFail', sender=self, data=NotificationData(context='connecting', reason=str(e)))
     else:
         self.msrp_reader_thread = spawn(self._msrp_reader)
         self.msrp_writer_thread = spawn(self._msrp_writer)
     finally:
         self.vnc_starter_thread = None
Example #8
0
def tcp_listener(address, backlog=50):
    """
    Listen on the given (ip, port) *address* with a TCP socket.
    Returns a socket object on which one should call ``accept()`` to
    accept a connection on the newly bound socket.

    Generally, the returned socket will be passed to ``tcp_server()``,
    which accepts connections forever and spawns greenlets for
    each incoming connection.
    """
    from eventlib import greenio, util
    socket = greenio.GreenSocket(util.tcp_socket())
    util.socket_bind_and_listen(socket, address, backlog=backlog)
    return socket
Example #9
0
def ssl_listener(address, certificate, private_key):
    """Listen on the given (ip, port) *address* with a TCP socket that
    can do SSL.

    *certificate* and *private_key* should be the filenames of the appropriate
    certificate and private key files to use with the SSL socket.

    Returns a socket object on which one should call ``accept()`` to
    accept a connection on the newly bound socket.

    Generally, the returned socket will be passed to ``tcp_server()``,
    which accepts connections forever and spawns greenlets for
    each incoming connection.
    """
    from eventlib import greenio, util
    from eventlib.green import ssl
    socket = greenio.GreenSocket(util.tcp_socket())
    socket = ssl.wrap_socket(socket, keyfile=private_key, certfile=certificate, server_side=True)
    util.socket_bind_and_listen(socket, address)
    socket.is_secure = True
    return socket
Example #10
0
 def _msrp_reader(self):
     while True:
         try:
             data = self.incoming_msrp_queue.wait()
             if data == 'BLINK_VNC_RECONNECT':
                 # Interrupt MSRP writer
                 self.msrp_writer_thread.kill(Interrupt)
                 self.vnc_socket.close()
                 self.vnc_socket = None
                 self.vnc_socket = GreenSocket(tcp_socket())
                 self.vnc_socket.settimeout(self.connect_timeout)
                 self.vnc_socket.connect(self.address)
                 self.vnc_socket.settimeout(None)
                 # Resume MSRP writer
                 self._reconnect_event.send()
                 continue
             self.vnc_socket.sendall(data)
         except Exception as e:
             self.msrp_reader_thread = None  # avoid issues caused by the notification handler killing this greenlet during post_notification
             NotificationCenter().post_notification(
                 'ScreenSharingHandlerDidFail',
                 sender=self,
                 data=NotificationData(context='sending', reason=str(e)))
             break