private static void SendTSRequest(RdpPacket negoTokens, byte[] auth_info, byte[] pub_key_auth) { RdpPacket packet = new RdpPacket(); ASN1.WriteTag(packet, ASN1.SequenceTag(0), "TSRequest"); ASN1.WriteTag(packet, ASN1.ContextTag(0), "CTX_Version"); ASN1.WriteInteger(packet, 2); ASN1.CloseTag(packet, "CTX_Version"); if (negoTokens != null) { ASN1.WriteTag(packet, ASN1.ContextTag(1), "CTX_NegTokens"); ASN1.WriteTag(packet, ASN1.SequenceTag(0), "NegTokens"); ASN1.WriteTag(packet, ASN1.SequenceTag(0), "NegTokens2"); ASN1.WriteTag(packet, ASN1.ContextTag(0), "CTX_OctetString"); ASN1.WriteTag(packet, ASN1.OctetStringTag(), "OctetString"); packet.copyToByteArray(negoTokens); ASN1.CloseTag(packet, "OctetString"); ASN1.CloseTag(packet, "CTX_OctetString"); ASN1.CloseTag(packet, "NegTokens2"); ASN1.CloseTag(packet, "NegTokens"); ASN1.CloseTag(packet, "CTX_NegTokens"); } if (auth_info != null) { ASN1.WriteTag(packet, ASN1.ContextTag(2), "CTX_AuthInfo"); ASN1.WriteTag(packet, ASN1.OctetStringTag(), "OctetString"); packet.Write(auth_info, 0, auth_info.Length); ASN1.CloseTag(packet, "OctetString"); ASN1.CloseTag(packet, "CTX_AuthInfo"); } if (pub_key_auth != null) { ASN1.WriteTag(packet, ASN1.ContextTag(3), "CTX_PubKeyAuth"); ASN1.WriteTag(packet, ASN1.OctetStringTag(), "OctetString"); packet.Write(pub_key_auth, 0, pub_key_auth.Length); ASN1.CloseTag(packet, "OctetString"); ASN1.CloseTag(packet, "CTX_PubKeyAuth"); } ASN1.CloseTag(packet, "TSRequest"); Send(packet); }