예제 #1
0
 public override bool Decode(PduMarshaler marshaler)
 {
     try
     {
         this.SubHeaderLength = marshaler.ReadByte();
         this.SubHeaderType   = (RDP_TUNNEL_SUBHEADER_TYPE_Values)marshaler.ReadByte();
         if (this.SubHeaderLength > 2)
         {
             this.SubHeaderData = marshaler.ReadBytes(this.SubHeaderLength - 2);
         }
         return(true);
     }
     catch
     {
         return(false);
     }
 }
예제 #2
0
        /// <summary>
        /// Create Tunnel Data PDU
        /// </summary>
        /// <param name="Payload"></param>
        /// <param name="SubheaderList"></param>
        /// <returns></returns>
        public RDP_TUNNEL_DATA CreateTunnelDataPdu(byte[] Payload, List <byte[]> SubheaderList    = null,
                                                   RDP_TUNNEL_SUBHEADER_TYPE_Values subHeaderType = RDP_TUNNEL_SUBHEADER_TYPE_Values.TYPE_ID_AUTODETECT_REQUEST)
        {
            RDP_TUNNEL_DATA tunnelData = new RDP_TUNNEL_DATA();

            tunnelData.TunnelHeader              = new RDP_TUNNEL_HEADER();
            tunnelData.TunnelHeader.Action       = RDP_TUNNEL_ACTION_Values.RDPTUNNEL_ACTION_DATA;
            tunnelData.TunnelHeader.Flags        = 0;
            tunnelData.TunnelHeader.HeaderLength = 4;

            if (SubheaderList != null && SubheaderList.Count > 0)
            {
                tunnelData.TunnelHeader.SubHeaders = new RDP_TUNNEL_SUBHEADER[SubheaderList.Count];
                for (int i = 0; i < SubheaderList.Count; i++)
                {
                    tunnelData.TunnelHeader.SubHeaders[i] = new RDP_TUNNEL_SUBHEADER();
                    tunnelData.TunnelHeader.SubHeaders[i].SubHeaderLength = (byte)(2 + SubheaderList[i].Length);
                    tunnelData.TunnelHeader.SubHeaders[i].SubHeaderType   = subHeaderType;
                    tunnelData.TunnelHeader.SubHeaders[i].SubHeaderData   = new byte[SubheaderList[i].Length];
                    Array.Copy(SubheaderList[i], tunnelData.TunnelHeader.SubHeaders[i].SubHeaderData, SubheaderList[i].Length);
                    tunnelData.TunnelHeader.HeaderLength += tunnelData.TunnelHeader.SubHeaders[i].SubHeaderLength;
                }
            }
            else
            {
                tunnelData.TunnelHeader.SubHeaders = null;
            }

            if (Payload != null)
            {
                tunnelData.TunnelHeader.PayloadLength = (ushort)Payload.Length;
                tunnelData.HigherLayerData            = new byte[Payload.Length];
                Array.Copy(Payload, tunnelData.HigherLayerData, Payload.Length);
            }
            else
            {
                tunnelData.TunnelHeader.PayloadLength = 0;
                tunnelData.HigherLayerData            = null;
            }
            return(tunnelData);
        }
        /// <summary>
        /// Create Tunnel Data PDU
        /// </summary>
        /// <param name="Payload"></param>
        /// <param name="SubheaderList"></param>
        /// <returns></returns>
        public RDP_TUNNEL_DATA CreateTunnelDataPdu(byte[] Payload, List<byte[]> SubheaderList = null, 
            RDP_TUNNEL_SUBHEADER_TYPE_Values subHeaderType = RDP_TUNNEL_SUBHEADER_TYPE_Values.TYPE_ID_AUTODETECT_REQUEST)
        {
            RDP_TUNNEL_DATA tunnelData = new RDP_TUNNEL_DATA();
            tunnelData.TunnelHeader = new RDP_TUNNEL_HEADER();
            tunnelData.TunnelHeader.Action = RDP_TUNNEL_ACTION_Values.RDPTUNNEL_ACTION_DATA;
            tunnelData.TunnelHeader.Flags = 0;
            tunnelData.TunnelHeader.HeaderLength = 4;

            if (SubheaderList != null && SubheaderList.Count > 0)
            {
                tunnelData.TunnelHeader.SubHeaders = new RDP_TUNNEL_SUBHEADER[SubheaderList.Count];
                for (int i = 0; i < SubheaderList.Count; i++)
                {
                    tunnelData.TunnelHeader.SubHeaders[i] = new RDP_TUNNEL_SUBHEADER();
                    tunnelData.TunnelHeader.SubHeaders[i].SubHeaderLength = (byte)(2 + SubheaderList[i].Length);
                    tunnelData.TunnelHeader.SubHeaders[i].SubHeaderType = subHeaderType;
                    tunnelData.TunnelHeader.SubHeaders[i].SubHeaderData = new byte[SubheaderList[i].Length];
                    Array.Copy(SubheaderList[i], tunnelData.TunnelHeader.SubHeaders[i].SubHeaderData, SubheaderList[i].Length);
                    tunnelData.TunnelHeader.HeaderLength += tunnelData.TunnelHeader.SubHeaders[i].SubHeaderLength;
                }
            }
            else
            {
                tunnelData.TunnelHeader.SubHeaders = null;
            }

            if (Payload != null)
            {
                tunnelData.TunnelHeader.PayloadLength = (ushort)Payload.Length;
                tunnelData.HigherLayerData = new byte[Payload.Length];
                Array.Copy(Payload, tunnelData.HigherLayerData, Payload.Length);

            }
            else
            {
                tunnelData.TunnelHeader.PayloadLength = 0;
                tunnelData.HigherLayerData = null;
            }
            return tunnelData;
        }
예제 #4
0
 public override bool Decode(PduMarshaler marshaler)
 {
     try
     {
         this.SubHeaderLength = marshaler.ReadByte();
         this.SubHeaderType = (RDP_TUNNEL_SUBHEADER_TYPE_Values)marshaler.ReadByte();
         if (this.SubHeaderLength > 2)
         {
             this.SubHeaderData = marshaler.ReadBytes(this.SubHeaderLength - 2);
         }
         return true;
     }
     catch
     {
         return false;
     }
 }