Esempio n. 1
0
        public override EusbPdu ParsePdu(byte[] data)
        {
            EusbPdu pdu;

            switch (GetPduType(data))
            {
            case EusbType.RIM_EXCHANGE_CAPABILITY_REQUEST:
                pdu = new EusbRimExchangeCapRequestPdu();
                break;

            case EusbType.CHANNEL_CREATED:
                pdu = new EusbChannelCreatedPdu(true);
                break;

            case EusbType.REGISTER_REQUEST_CALLBACK:
                pdu = new EusbRegisterRequestCallbackPdu();
                break;

            case EusbType.QUERY_DEVICE_TEXT:
                pdu = new EusbQueryDeviceTextRequestPdu();
                break;

            case EusbType.IO_CONTROL:
                pdu = new EusbIoControlPdu();
                break;

            case EusbType.INTERNAL_IO_CONTROL:
                pdu = new EusbInternalIoControlPdu();
                break;

            case EusbType.TRANSFER_IN_REQUEST:
                pdu = new EusbTransferInRequestPdu();
                break;

            case EusbType.TRANSFER_OUT_REQUEST:
                pdu = new EusbTransferOutRequestPdu();
                break;

            case EusbType.CANCEL_REQUEST:
                pdu = new EusbCancelRequestPdu();
                break;

            case EusbType.RETRACT_DEVICE:
                pdu = new EusbRetractDevicePdu();
                break;

            default:
                return(base.ParsePdu(data));
            }

            if (!PduMarshaler.Unmarshal(data, pdu))
            {
                pdu = new EusbUnknownPdu();
                PduMarshaler.Unmarshal(data, pdu);
            }
            return(pdu);
        }
        /// <summary>
        /// Sends RETRACT_DEVICE request to the client to stop redirecting the USB device.
        /// </summary>
        /// <param name="device">The context of the device which is being operated.</param>
        /// <param name="reason">The reason to stop redirecting the USB device.</param>
        public void RetractDevice(EusbDeviceContext device, USB_RETRACT_REASON reason)
        {
            Site.Log.Add(LogEntryKind.Debug, "Sending RETRACT_DEVICE. Device: {0}", device);

            EusbRetractDevicePdu requestPdu = new EusbRetractDevicePdu(device.UsbDeviceInterfaceId);

            requestPdu.Reason = reason;
            SendPdu(requestPdu, device.VirtualChannel);

            bool channelClosed = IsChannelClosed(device.VirtualChannel);

            Site.Assert.IsTrue(channelClosed, "Expect the channel {0} to be closed.", device.VirtualChannel.ChannelId);
        }