diff --git a/dotnet/IEC61850forCSharp/IEC61850ServerAPI.cs b/dotnet/IEC61850forCSharp/IEC61850ServerAPI.cs
index 79bcd0a5..4cdfbf11 100644
--- a/dotnet/IEC61850forCSharp/IEC61850ServerAPI.cs
+++ b/dotnet/IEC61850forCSharp/IEC61850ServerAPI.cs
@@ -2015,14 +2015,16 @@ namespace IEC61850
private struct WriteAccessHandlerInfo {
public WriteAccessHandler handler;
+ public InternalWriteAccessHandler internalHandler;
public object parameter;
public DataAttribute dataAttribute;
- public WriteAccessHandlerInfo (WriteAccessHandler h, object p, DataAttribute da)
+ public WriteAccessHandlerInfo (WriteAccessHandler h, object p, DataAttribute da, InternalWriteAccessHandler internalHandler)
{
handler = h;
parameter = p;
dataAttribute = da;
+ this.internalHandler = internalHandler;
}
}
@@ -2309,20 +2311,22 @@ namespace IEC61850
/// a user provided parameter that is passed to the WriteAccessHandler when called.
public void HandleWriteAccess (DataAttribute dataAttr, WriteAccessHandler handler, object parameter)
{
- writeAccessHandlers.Add (dataAttr.self, new WriteAccessHandlerInfo(handler, parameter, dataAttr));
+ InternalWriteAccessHandler internalHandler = new InternalWriteAccessHandler(WriteAccessHandlerImpl);
+
+ writeAccessHandlers.Add (dataAttr.self, new WriteAccessHandlerInfo(handler, parameter, dataAttr, internalHandler));
- IedServer_handleWriteAccess (self, dataAttr.self, WriteAccessHandlerImpl, IntPtr.Zero);
+ IedServer_handleWriteAccess (self, dataAttr.self, internalHandler, IntPtr.Zero);
}
- private void AddHandlerInfoForDataAttributeRecursive(DataAttribute da, WriteAccessHandler handler, object parameter)
+ private void AddHandlerInfoForDataAttributeRecursive(DataAttribute da, WriteAccessHandler handler, object parameter, InternalWriteAccessHandler internalHandler)
{
- writeAccessHandlers.Add(da.self, new WriteAccessHandlerInfo(handler, parameter, da));
+ writeAccessHandlers.Add(da.self, new WriteAccessHandlerInfo(handler, parameter, da, internalHandler));
foreach (ModelNode child in da.GetChildren())
{
if (child is DataAttribute)
{
- AddHandlerInfoForDataAttributeRecursive(child as DataAttribute, handler, parameter);
+ AddHandlerInfoForDataAttributeRecursive(child as DataAttribute, handler, parameter, internalHandler);
}
}
}
@@ -2345,11 +2349,18 @@ namespace IEC61850
/// a user provided parameter that is passed to the WriteAccessHandler when called.
public void HandleWriteAccessForComplexAttribute(DataAttribute dataAttr, WriteAccessHandler handler, object parameter)
{
- AddHandlerInfoForDataAttributeRecursive(dataAttr, handler, parameter);
+ InternalWriteAccessHandler internalHandler = new InternalWriteAccessHandler(WriteAccessHandlerImpl);
- IedServer_handleWriteAccessForComplexAttribute(self, dataAttr.self, WriteAccessHandlerImpl, IntPtr.Zero);
+ AddHandlerInfoForDataAttributeRecursive(dataAttr, handler, parameter, internalHandler);
+
+ IedServer_handleWriteAccessForComplexAttribute(self, dataAttr.self, internalHandler, IntPtr.Zero);
}
+ ///
+ /// Set the defualt write access policy for a specific FC. The default policy is applied when no handler is installed for a data attribute
+ ///
+ /// The functional constraint (FC)
+ /// The new default access policy
public void SetWriteAccessPolicy(FunctionalConstraint fc, AccessPolicy policy)
{
IedServer_setWriteAccessPolicy (self, fc, policy);