Microsoft.Protocols.TestTools.StackSdk.RemoteDesktop.Rdpbcgr.Server_MCS_Connect_Response_Pdu_with_GCC_Conference_Create_Response.Clone C# (CSharp) Method

Clone() public method

Create an instance of the class that is identical to the current PDU.
public Clone ( ) : StackPacket
return StackPacket
        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;
        }