コード例 #1
0
 def __init__(self, uid, gid, env_options, session_options, socket_dir,
              video_encoder_modules, pings, client_conn, disp_desc,
              client_state, cipher, encryption_key, server_conn, caps,
              message_queue):
     ProxyInstance.__init__(self, session_options, video_encoder_modules,
                            pings, disp_desc, cipher, encryption_key, caps)
     QueueScheduler.__init__(self)
     Process.__init__(self, name=str(client_conn), daemon=False)
     self.client_conn = client_conn
     self.server_conn = server_conn
     self.uid = uid
     self.gid = gid
     self.env_options = env_options
     self.socket_dir = socket_dir
     self.client_state = client_state
     log("ProxyProcess%s",
         (uid, gid, env_options, session_options, socket_dir,
          video_encoder_modules, client_conn, disp_desc,
          ellipsizer(client_state), cipher, encryption_key, server_conn,
          "%s: %s.." % (type(caps), ellipsizer(caps)), message_queue))
     self.message_queue = message_queue
     #for handling the local unix domain socket:
     self.control_socket_cleanup = None
     self.control_socket = None
     self.control_socket_thread = None
     self.control_socket_path = None
     self.potential_protocols = []
     self.max_connections = MAX_CONCURRENT_CONNECTIONS
コード例 #2
0
 def run(self):
     log("ProxyInstanceThread.run()")
     server_protocol_class = get_server_protocol_class(
         self.server_conn.socktype)
     self.server_protocol = server_protocol_class(
         self, self.server_conn, self.process_server_packet,
         self.get_server_packet)
     ProxyInstance.run(self)
コード例 #3
0
ファイル: proxy_instance_process.py プロジェクト: chewi/xpra
    def run(self):
        register_SIGUSR_signals(self.idle_add)
        client_protocol_class = get_client_protocol_class(self.client_conn.socktype)
        server_protocol_class = get_server_protocol_class(self.server_conn.socktype)
        self.client_protocol = client_protocol_class(self, self.client_conn,
                                                     self.process_client_packet, self.get_client_packet)
        self.client_protocol.restore_state(self.client_state)
        self.server_protocol = server_protocol_class(self, self.server_conn,
                                                     self.process_server_packet, self.get_server_packet)
        self.log_start()

        log("ProxyProcessProcess.run() pid=%s, uid=%s, gid=%s", os.getpid(), getuid(), getgid())
        set_proc_title("Xpra Proxy Instance for %s" % self.server_conn)
        if POSIX and (getuid()!=self.uid or getgid()!=self.gid):
            #do we need a valid XDG_RUNTIME_DIR for the socket-dir?
            username = get_username_for_uid(self.uid)
            socket_dir = osexpand(self.socket_dir, username, self.uid, self.gid)
            if not os.path.exists(socket_dir):
                log("the socket directory '%s' does not exist, checking for $XDG_RUNTIME_DIR path", socket_dir)
                for prefix in ("/run/user/", "/var/run/user/"):
                    if socket_dir.startswith(prefix):
                        from xpra.scripts.server import create_runtime_dir
                        xrd = os.path.join(prefix, str(self.uid))   #ie: /run/user/99
                        log("creating XDG_RUNTIME_DIR=%s for uid=%i, gid=%i", xrd, self.uid, self.gid)
                        create_runtime_dir(xrd, self.uid, self.gid)
                        break
            #change uid or gid:
            setuidgid(self.uid, self.gid)
        if self.env_options:
            #TODO: whitelist env update?
            os.environ.update(self.env_options)

        signal.signal(signal.SIGTERM, self.signal_quit)
        signal.signal(signal.SIGINT, self.signal_quit)
        log("registered signal handler %s", self.signal_quit)

        start_thread(self.server_message_queue, "server message queue")

        if not self.create_control_socket():
            return
        self.control_socket_thread = start_thread(self.control_socket_loop, "control", daemon=True)

        self.main_queue = Queue()

        ProxyInstance.run(self)

        try:
            QueueScheduler.run(self)
        except KeyboardInterrupt as e:
            self.stop(None, str(e))
        finally:
            log("ProxyProcess.run() ending %s", os.getpid())
コード例 #4
0
 def stop(self, skip_proto, *reasons):
     QueueScheduler.stop(self)
     self.message_queue.put_nowait(None)
     ProxyInstance.stop(self, skip_proto, *reasons)
     self.stop_control_socket()
コード例 #5
0
 def __init__(self, session_options, video_encoders, pings, client_proto,
              server_conn, disp_desc, cipher, encryption_key, caps):
     ProxyInstance.__init__(self, session_options, video_encoders, pings,
                            disp_desc, cipher, encryption_key, caps)
     self.client_protocol = client_proto
     self.server_conn = server_conn
コード例 #6
0
 def stop(self, skip_proto, *reasons):
     ProxyInstance.stop(self, skip_proto, *reasons)
     self.stop_control_socket()
     QueueScheduler.stop(self)