//******************************************************************************************** // Function: InitializeDrt // // Description: Initializes and brings a DRT instance online // 1) Brings up an ipv6 transport layer // 2) Attaches a security provider (according to user's choice) // 3) Attaches a bootstrap provider (according to user's choice) // 4) Calls DrtOpen to bring the DRT instance online // //******************************************************************************************** private static bool InitializeDrt(DRT_CONTEXT Drt) { string pwszCompName = default; string pwszBootstrapHostname = null; // // Initialize DrtSettings // Drt.port = 0; Drt.settings.pwzDrtInstancePrefix = "Local_DRT"; Drt.settings.dwSize = (uint)Marshal.SizeOf <DRT_SETTINGS>(); Drt.settings.cbKey = 32; // KEYSIZE Drt.settings.ulMaxRoutingAddresses = 4; Drt.settings.bProtocolMajorVersion = 0x6; Drt.settings.bProtocolMinorVersion = 0x65; Drt.settings.eSecurityMode = DRT_SECURITY_MODE.DRT_SECURE_CONFIDENTIALPAYLOAD; Drt.settings.hTransport = default; Drt.settings.pSecurityProvider = default; Drt.settings.pBootstrapProvider = default; Drt.hDrt = default; // // *Transport* // var hr = DrtCreateIpv6UdpTransport(DRT_SCOPE.DRT_GLOBAL_SCOPE, 0, 300, ref Drt.port, out Drt.settings.hTransport); if (hr.Failed) { DisplayError(hr, "DrtCreateTransport"); goto Cleanup; } // // *Security Provider* // if (Drt.SecurityProviderType == 0) //Null Security Provider { hr = DrtCreateNullSecurityProvider(out Drt.settings.pSecurityProvider); } else if (Drt.SecurityProviderType == 1) //Derived Key Security Provider { hr = ReadCertFromFile("RootCertificate.cer", out var pRoot, out _); if (hr.Failed) { Console.Write("No RootCertificate.cer file found in the current directory, Creating a new root certificate.\n"); hr = MakeCert("RootCertificate.cer", "RootCert", default, default);
private static IntPtr AddCtx(DRT_CONTEXT ctx) { var id = System.Diagnostics.Process.GetCurrentProcess().Id; contexts.Add(id, ctx); return(new IntPtr(id)); }