public override StackPacket Clone()
{
Server_MCS_Connect_Response_Pdu_with_GCC_Conference_Create_Response cloneMCSRspPdu =
new Server_MCS_Connect_Response_Pdu_with_GCC_Conference_Create_Response(serverSessionContext);
cloneMCSRspPdu.tpktHeader = tpktHeader;
cloneMCSRspPdu.x224Data = x224Data;
if (mcsCrsp != null)
{
cloneMCSRspPdu.mcsCrsp = new MCSConnectResponse();
cloneMCSRspPdu.mcsCrsp.gccPdu = null;
cloneMCSRspPdu.mcsCrsp.result = mcsCrsp.result;
//cloneMCSRspPdu.mcsCrsp.calledConnectId = mcsCrsp.calledConnectId;
//cloneMCSRspPdu.mcsCrsp.domainParameters = mcsCrsp.domainParameters;
if (mcsCrsp.gccPdu != null)
{
cloneMCSRspPdu.mcsCrsp.gccPdu = new ConnectGCCRsp();
cloneMCSRspPdu.mcsCrsp.gccPdu.serverCoreData = null;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverNetworkData = null;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData = null;
cloneMCSRspPdu.mcsCrsp.gccPdu.nodeID = mcsCrsp.gccPdu.nodeID;
cloneMCSRspPdu.mcsCrsp.gccPdu.tag = mcsCrsp.gccPdu.tag;
cloneMCSRspPdu.mcsCrsp.gccPdu.ccrResult = mcsCrsp.gccPdu.ccrResult;
cloneMCSRspPdu.mcsCrsp.gccPdu.H221Key = mcsCrsp.gccPdu.H221Key;
if (mcsCrsp.gccPdu.serverCoreData != null)
{
cloneMCSRspPdu.mcsCrsp.gccPdu.serverCoreData = new TS_UD_SC_CORE();
cloneMCSRspPdu.mcsCrsp.gccPdu.serverCoreData.header =
mcsCrsp.gccPdu.serverCoreData.header;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverCoreData.version =
mcsCrsp.gccPdu.serverCoreData.version;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverCoreData.clientRequestedProtocols =
mcsCrsp.gccPdu.serverCoreData.clientRequestedProtocols;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverCoreData.earlyCapabilityFlags =
mcsCrsp.gccPdu.serverCoreData.earlyCapabilityFlags;
}
if (mcsCrsp.gccPdu.serverNetworkData != null)
{
cloneMCSRspPdu.mcsCrsp.gccPdu.serverNetworkData = new TS_UD_SC_NET();
cloneMCSRspPdu.mcsCrsp.gccPdu.serverNetworkData.header =
mcsCrsp.gccPdu.serverNetworkData.header;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverNetworkData.MCSChannelId =
mcsCrsp.gccPdu.serverNetworkData.MCSChannelId;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverNetworkData.channelCount =
mcsCrsp.gccPdu.serverNetworkData.channelCount;
if (mcsCrsp.gccPdu.serverNetworkData.channelIdArray != null)
{
cloneMCSRspPdu.mcsCrsp.gccPdu.serverNetworkData.channelIdArray =
new ushort[mcsCrsp.gccPdu.serverNetworkData.channelIdArray.Length];
mcsCrsp.gccPdu.serverNetworkData.channelIdArray.CopyTo(
cloneMCSRspPdu.mcsCrsp.gccPdu.serverNetworkData.channelIdArray,
0);
}
if (mcsCrsp.gccPdu.serverNetworkData.Pad != null)
{
cloneMCSRspPdu.mcsCrsp.gccPdu.serverNetworkData.Pad =
RdpbcgrUtility.CloneByteArray(mcsCrsp.gccPdu.serverNetworkData.Pad);
}
}
if (mcsCrsp.gccPdu.serverSecurityData != null)
{
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData = new TS_UD_SC_SEC1();
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData.header =
mcsCrsp.gccPdu.serverSecurityData.header;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData.encryptionLevel =
mcsCrsp.gccPdu.serverSecurityData.encryptionLevel;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData.encryptionMethod =
mcsCrsp.gccPdu.serverSecurityData.encryptionMethod;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData.serverRandomLen =
mcsCrsp.gccPdu.serverSecurityData.serverRandomLen;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData.serverCertLen =
mcsCrsp.gccPdu.serverSecurityData.serverCertLen;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData.serverRandom =
RdpbcgrUtility.CloneByteArray(mcsCrsp.gccPdu.serverSecurityData.serverRandom);
//////not implemented yet!
if (mcsCrsp.gccPdu.serverSecurityData.serverCertificate != null)
{
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData.serverCertificate = new SERVER_CERTIFICATE();
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData.serverCertificate.dwVersion =
mcsCrsp.gccPdu.serverSecurityData.serverCertificate.dwVersion;
if (mcsCrsp.gccPdu.serverSecurityData.serverCertificate.dwVersion ==
SERVER_CERTIFICATE_dwVersion_Values.CERT_CHAIN_VERSION_1)
{
PROPRIETARYSERVERCERTIFICATE cert = (PROPRIETARYSERVERCERTIFICATE)
mcsCrsp.gccPdu.serverSecurityData.serverCertificate.certData;
cert.SignatureBlob = RdpbcgrUtility.CloneByteArray(cert.SignatureBlob);
cert.PublicKeyBlob.modulus = RdpbcgrUtility.CloneByteArray(cert.PublicKeyBlob.modulus);
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData.serverCertificate.certData = cert;
}
else
{
X509_CERTIFICATE_CHAIN x509cert = (X509_CERTIFICATE_CHAIN)mcsCrsp.gccPdu.serverSecurityData.serverCertificate.certData;
for(int i = 0; i < x509cert.CertBlobArray.Length; i++)
{
x509cert.CertBlobArray[i].abCert = RdpbcgrUtility.CloneByteArray(x509cert.CertBlobArray[i].abCert);
}
x509cert.Padding = RdpbcgrUtility.CloneByteArray(x509cert.Padding);
cloneMCSRspPdu.mcsCrsp.gccPdu.serverSecurityData.serverCertificate.certData = x509cert;
}
}
}
if (mcsCrsp.gccPdu.serverMessageChannelData != null)
{
cloneMCSRspPdu.mcsCrsp.gccPdu.serverMessageChannelData = new TS_UD_SC_MCS_MSGCHANNEL();
cloneMCSRspPdu.mcsCrsp.gccPdu.serverMessageChannelData.header = mcsCrsp.gccPdu.serverMessageChannelData.header;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverMessageChannelData.MCSChannelID = mcsCrsp.gccPdu.serverMessageChannelData.MCSChannelID;
}
if (mcsCrsp.gccPdu.serverMultitransportChannelData != null)
{
cloneMCSRspPdu.mcsCrsp.gccPdu.serverMultitransportChannelData = new TS_UD_SC_MULTITRANSPORT();
cloneMCSRspPdu.mcsCrsp.gccPdu.serverMultitransportChannelData.header = mcsCrsp.gccPdu.serverMultitransportChannelData.header;
cloneMCSRspPdu.mcsCrsp.gccPdu.serverMultitransportChannelData.flags = mcsCrsp.gccPdu.serverMultitransportChannelData.flags;
}
}
}
return cloneMCSRspPdu;
}