/// <summary> /// Encode a PDU to a binary stream. Then send the stream. /// The pdu could be got by calling method Create***Request or Create***Token. /// </summary> /// <param name="pdu">A specified type of a PDU. This argument cannot be null. /// If it is null, ArgumentNullException will be thrown.</param> /// <exception cref="System.ArgumentNullException">Thrown when the input parameter is null.</exception> public void SendPdu(KerberosPdu pdu) { if (pdu == null) { throw new ArgumentNullException("pdu"); } this.UpdateContext(pdu); if (UseProxy) { Debug.Assert(ProxyClient != null, "Proxy Client should be set when using proxy."); //temporarily change the tranpsort type to TCP, since all proxy messages are TCP format. var oriTransportType = Context.TransportType; Context.TransportType = TransportType.TCP; KDCProxyMessage message = ProxyClient.MakeProxyMessage(pdu); //send proxy message ProxyClient.SendProxyRequest(message); //restore the original transport type Context.TransportType = oriTransportType; } else { this.Connect(); kdcTransport.SendPacket(pdu); } }