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); } }
/// <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; }
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; } }