Exemplo n.º 1
0
    def loop(self):
        connected = Platform.rdpSessionIsConnected()
        while True:
            channelConnected = Platform.rdpSessionIsConnected()

            if connected and not channelConnected:
                # Client has disconnected
                self.vchannel.Close()
            elif channelConnected and not connected:
                # Client has reconnected
                self.vchannel.Open()
                self.vchannel.Write(OvdAppChannel.getInitPacket())
                for instance in self.im.instances:
                    self.vchannel.Write(OvdAppChannel.build_packet_ORDER_STARTED(instance[3], instance[1]))

            connected = channelConnected
            if not connected:
                time.sleep(0.5)
                continue

                # Read a complete packet
                # so we assume a maximum packet size is 2048
            packet = self.vchannel.Read(2048)
            if packet is None:
                print "error at read"
                time.sleep(0.5)
                continue

            (order, data) = OvdAppChannel.parse_packet(packet)
            if order is None:
                print "OvdAppChannel error: %s" % (data)

            if order == OvdAppChannel.ORDER_START:
                (token, app_id) = data

                print "recv startapp order %d %d" % (token, app_id)
                self.jobs.put((order, token, app_id))

            elif order == OvdAppChannel.ORDER_START_WITH_ARGS:
                (token, app_id, dir_type, share, path) = data

                if dir_type == OvdAppChannel.DIR_TYPE_SHARED_FOLDER:
                    dir_type2 = self.im.DIR_TYPE_SHARED_FOLDER
                elif dir_type == OvdAppChannel.DIR_TYPE_RDP_DRIVE:
                    dir_type2 = self.im.DIR_TYPE_RDP_DRIVE
                elif dir_type == OvdAppChannel.DIR_TYPE_KNOWN_DRIVES:
                    dir_type2 = self.im.DIR_TYPE_KNOWN_DRIVES
                elif dir_type == OvdAppChannel.DIR_TYPE_HTTP_URL:
                    dir_type2 = self.im.DIR_TYPE_HTTP_URL
                else:
                    print "Message ORDER_START_WITH_ARGS: unknown dir type %X" % (dir_type)
                    return

                print "recv startapp order %d %d %d %s %s" % (token, app_id, dir_type2, share, path)
                self.jobs.put((order, token, app_id, dir_type2, share, path))

            elif order == OvdAppChannel.ORDER_STOP:
                (token) = data

                print "recv stop order %d" % (token)
                self.jobs.put((order, token))

            elif order == OvdAppChannel.ORDER_EXIT:
                # logoff
                print "recv exit order"
                return
Exemplo n.º 2
0
    def loop(self):
        connected = Platform.rdpSessionIsConnected()
        while True:
            channelConnected = Platform.rdpSessionIsConnected()

            if connected and not channelConnected:
                # Client has disconnected
                self.vchannel.Close()
            elif channelConnected and not connected:
                # Client has reconnected
                self.vchannel.Open()
                self.vchannel.Write(OvdAppChannel.getInitPacket())
                for instance in self.im.instances:
                    self.vchannel.Write(
                        OvdAppChannel.build_packet_ORDER_STARTED(
                            instance[3], instance[1]))

            connected = channelConnected
            if not connected:
                time.sleep(0.5)
                continue

            # Read a complete packet
            # so we assume a maximum packet size is 2048
            packet = self.vchannel.Read(2048)
            if packet is None:
                print "error at read"
                time.sleep(0.5)
                continue

            (order, data) = OvdAppChannel.parse_packet(packet)
            if order is None:
                print "OvdAppChannel error: %s" % (data)

            if order == OvdAppChannel.ORDER_START:
                (token, app_id) = data

                print "recv startapp order %d %d" % (token, app_id)
                self.jobs.put((order, token, app_id))

            elif order == OvdAppChannel.ORDER_START_WITH_ARGS:
                (token, app_id, dir_type, share, path) = data

                if dir_type == OvdAppChannel.DIR_TYPE_SHARED_FOLDER:
                    dir_type2 = self.im.DIR_TYPE_SHARED_FOLDER
                elif dir_type == OvdAppChannel.DIR_TYPE_RDP_DRIVE:
                    dir_type2 = self.im.DIR_TYPE_RDP_DRIVE
                elif dir_type == OvdAppChannel.DIR_TYPE_KNOWN_DRIVES:
                    dir_type2 = self.im.DIR_TYPE_KNOWN_DRIVES
                elif dir_type == OvdAppChannel.DIR_TYPE_HTTP_URL:
                    dir_type2 = self.im.DIR_TYPE_HTTP_URL
                else:
                    print "Message ORDER_START_WITH_ARGS: unknown dir type %X" % (
                        dir_type)
                    return

                print "recv startapp order %d %d %d %s %s" % (
                    token, app_id, dir_type2, share, path)
                self.jobs.put((order, token, app_id, dir_type2, share, path))

            elif order == OvdAppChannel.ORDER_STOP:
                (token) = data

                print "recv stop order %d" % (token)
                self.jobs.put((order, token))

            elif order == OvdAppChannel.ORDER_EXIT:
                # logoff
                print "recv exit order"
                return
Exemplo n.º 3
0
                    break
                else:
                    raise e

            if job is not None:
                print "RemoteApps got job", job

                order = job[0]
                if order == OvdAppChannel.ORDER_START:
                    (token, app) = job[1:3]

                    if not self.im.start_app_empty(token, app):
                        self.vchannel.Write(OvdAppChannel.build_packet_ORDER_CANT_START(token))
                        continue

                    self.vchannel.Write(OvdAppChannel.build_packet_ORDER_STARTED(app, token))

                elif order == OvdAppChannel.ORDER_START_WITH_ARGS:
                    (token, app, dir_type, share, local_path) = job[1:6]

                    if not self.im.start_app_with_arg(token, app, dir_type, local_path, share):
                        self.vchannel.Write(OvdAppChannel.build_packet_ORDER_CANT_START(token))
                        continue

                    self.vchannel.Write(OvdAppChannel.build_packet_ORDER_STARTED(app, token))

                elif order == OvdAppChannel.ORDER_STOP:
                    token = job[1]

                    if not self.im.stop_app(token):
                        continue
Exemplo n.º 4
0
                    raise e

            if job is not None:
                print "RemoteApps got job", job

                order = job[0]
                if order == OvdAppChannel.ORDER_START:
                    (token, app) = job[1:3]

                    if not self.im.start_app_empty(token, app):
                        self.vchannel.Write(
                            OvdAppChannel.build_packet_ORDER_CANT_START(token))
                        continue

                    self.vchannel.Write(
                        OvdAppChannel.build_packet_ORDER_STARTED(app, token))

                elif order == OvdAppChannel.ORDER_START_WITH_ARGS:
                    (token, app, dir_type, share, local_path) = job[1:6]

                    if not self.im.start_app_with_arg(token, app, dir_type,
                                                      local_path, share):
                        self.vchannel.Write(
                            OvdAppChannel.build_packet_ORDER_CANT_START(token))
                        continue

                    self.vchannel.Write(
                        OvdAppChannel.build_packet_ORDER_STARTED(app, token))

                elif order == OvdAppChannel.ORDER_STOP:
                    token = job[1]