Exemplo n.º 1
0
        // Sending Server Announce Request.
        private void SendServerPDUOverDVC(PacketId_Values packetType, uint?clientId = null)
        {
            RdpefsPDU pdu = null;

            switch (packetType)
            {
            case PacketId_Values.PAKID_CORE_SERVER_ANNOUNCE:
                pdu = CreateServerAnnounceReqest();
                break;

            case PacketId_Values.PAKID_CORE_SERVER_CAPABILITY:
                pdu = CreateServerCoreCapabilityRequest();
                break;

            case PacketId_Values.PAKID_CORE_CLIENTID_CONFIRM:
                pdu = CreateServerClientIdConfirm(clientId);
                break;

            case PacketId_Values.PAKID_CORE_USER_LOGGEDON:
                pdu = new DR_CORE_USER_LOGGEDON();
                break;
            }

            if (pdu != null && rdpefsServer != null)
            {
                rdpefsServer.SendRdpefsPdu(pdu);
            }
            else
            {
                throw new InvalidOperationException("The sending pdu type is null: " + packetType.ToString());
            }
        }
 private void OnDataReceived(byte[] data, uint channelId)
 {
     lock (receivedList)
     {
         RdpefsPDU pdu      = new RdpefsPDU();
         bool      fSucceed = false;
         bool      fResult  = PduMarshaler.Unmarshal(data, pdu);
         if (fResult)
         {
             if (pdu.Header.PacketId == PacketId_Values.PAKID_CORE_CLIENTID_CONFIRM)
             {
                 // Header(4) + VersionMajor(2) + VersionMinor(2) + ClientId(4) = 12
                 DR_CORE_CLIENT_ANNOUNCE_RSP response = new DR_CORE_CLIENT_ANNOUNCE_RSP();
                 if (PduMarshaler.Unmarshal(data, response))
                 {
                     receivedList.Add(response);
                 }
             }
             else if (pdu.Header.PacketId == PacketId_Values.PAKID_CORE_CLIENT_NAME)
             {
                 // Header(4) + UnicodeFlag(4) + CodePage(4) + ComputerNameLen(4) + ComputerNmae(ComputerNameLen)
                 DR_CORE_CLIENT_NAME_REQ request = new DR_CORE_CLIENT_NAME_REQ();
                 if (PduMarshaler.Unmarshal(data, request))
                 {
                     receivedList.Add(request);
                 }
             }
             else if (pdu.Header.PacketId == PacketId_Values.PAKID_CORE_CLIENT_CAPABILITY)
             {
                 // Header(4) + numCapabilities(2) + Padding(2) + CapabilityMessage(numCapabilities * CAPABILITE_SET)
                 DR_CORE_CAPABILITY_RSP response = new DR_CORE_CAPABILITY_RSP();
                 if (PduMarshaler.Unmarshal(data, response))
                 {
                     receivedList.Add(response);
                 }
             }
             else if (pdu.Header.PacketId == PacketId_Values.PAKID_CORE_DEVICELIST_ANNOUNCE)
             {
                 // Header(4) + DeviceCount(4) + DeviceList(DeviceCount * DEVICE_ANNONUNCE)
                 DR_CORE_DEVICELIST_ANNOUNCE_REQ request = new DR_CORE_DEVICELIST_ANNOUNCE_REQ();
                 if (PduMarshaler.Unmarshal(data, request))
                 {
                     receivedList.Add(request);
                 }
             }
         }
         if (!fSucceed || !fResult)
         {
             RdpefsUnknownPdu unknown = new RdpefsUnknownPdu();
             if (PduMarshaler.Unmarshal(data, unknown))
             {
                 receivedList.Add(unknown);
             }
         }
     }
 }
        /// <summary>
        /// Send EFS PDU.
        /// </summary>
        /// <param name="pdu">the PDU sent to Client</param>
        public void SendRdpefsPdu(RdpefsPDU pdu)
        {
            byte[] data = PduMarshaler.Marshal(pdu);
            if (rdpefsDVC == null)
            {
                throw new InvalidOperationException("DVC instance of RDPEFS is null, Dynamic virtual channel must be created before sending data.");
            }

            //Will send compressed packet with "true" as parameter: rdpefsDVC.Send(data, true);
            rdpefsDVC.Send(data);
        }