public void CallPlugins() { var ec = new ExtensionControl(this.EcbPointer); // ReSharper disable RedundantNameQualifier -> this is indeed necessary! foreach (var plugin in NpsPlugin.plugins) // ReSharper restore RedundantNameQualifier { try { Logger.DebugFormat("Calling plugin {0} with pointer {1}", plugin.GetType().FullName, this.EcbPointer); var before = ec.ResponseType; plugin.RadiusExtensionProcess(ec); Logger.InfoFormat("Called plugin {0}, response was {1} and is now {2}.", plugin.GetType().FullName, before, ec.ResponseType); } catch (Exception ex) { Logger.Error("Plugin failed", ex); try { switch (ec.RequestType) { case RadiusCode.AccessRequest: ec.ResponseType = RadiusCode.AccessReject; break; case RadiusCode.AccountingRequest: ec.ResponseType = RadiusCode.Discard; break; } } catch (Exception inner) { Logger.Error("Setting response type after plugin failure failed", inner); this.HadError = true; } } } }