private CipherSuitePlugin[] FindCipherSuitePlugins(string path)
{
List<CipherSuitePlugin> pluginList = new List<CipherSuitePlugin>();
foreach (string fileName in Directory.GetFiles(path)) {
FileInfo fileInfo = new FileInfo(fileName);
if (!fileInfo.Extension.ToLower().Equals(".dll")) {
continue;
}
Assembly pluginAssembly = Assembly.LoadFrom(fileName);
foreach (Type pluginType in pluginAssembly.GetTypes()) {
if (!pluginType.IsPublic || pluginType.IsAbstract) continue;
/* Check that the correct interface exists with this type */
Type cipherSuitePluginType = typeof(CipherSuitePlugin);
if (!pluginType.IsSubclassOf(cipherSuitePluginType)) {
continue;
}
CipherSuitePlugin plugin = (CipherSuitePlugin) Activator.CreateInstance(pluginType);
Console.WriteLine("Adding plugin: " + plugin.ToString());
pluginList.Add(plugin);
}
}
return pluginList.ToArray();
}