@ -20,21 +20,12 @@
*
* See COPYING file for the complete license text .
* /
using System ;
using System.Collections.Generic ;
using System.Data ;
using System.Data.Common ;
using System.Diagnostics ;
using System.Runtime.InteropServices ;
using System.Security.Cryptography ;
using System.Xml.Linq ;
using IEC61850.Client ;
using IEC61850.Common ;
using IEC61850.Model ;
using IEC61850.TLS ;
using static System. Collections . Specialized . BitVector32 ;
using static System . Net . Mime . MediaTypeNames ;
using static IEC61850 . Client . IedConnection ;
using System ;
using System.Collections.Generic ;
using System.Runtime.InteropServices ;
// IEC 61850 API for the libiec61850 .NET wrapper library
namespace IEC61850
@ -2470,7 +2461,7 @@ namespace IEC61850
static extern IntPtr IedServer_getFunctionalConstrainedData ( IntPtr self , IntPtr dataObject , int fc ) ;
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
public static extern void IedServer_setListObjectsAccessHandler ( IntPtr self , IedServer_ListObjectsAccessHandler handler , IntPtr parameter ) ;
static extern void IedServer_setListObjectsAccessHandler ( IntPtr self , IedServer_ListObjectsAccessHandler handler , IntPtr parameter ) ;
/// <summary>
/// Set a handler to control read and write access to control blocks and logs
@ -2479,7 +2470,7 @@ namespace IEC61850
/// <param name="handler">handler the callback handler to be used</param>
/// <param name="parameter">a user provided parameter that is passed to the handler</param>
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
public static extern void IedServer_setControlBlockAccessHandler ( IntPtr self , IedServer_ControlBlockAccessHandler handler , IntPtr parameter ) ;
static extern void IedServer_setControlBlockAccessHandler ( IntPtr self , IedServer_ControlBlockAccessHandler handler , IntPtr parameter ) ;
/// <summary>
/// Install the global read access handler
@ -2489,7 +2480,7 @@ namespace IEC61850
/// <param name="handler">the callback function that is invoked if a client tries to read a data object</param>
/// <param name="parameter">a user provided parameter that is passed to the callback function</param>
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
public static extern void IedServer_setReadAccessHandler ( IntPtr self , ReadAccessHandler handler , IntPtr parameter ) ;
static extern void IedServer_setReadAccessHandler ( IntPtr self , IedServer_ ReadAccessHandler handler , IntPtr parameter ) ;
/// <summary>
/// Set a handler to control access to a dataset (create, delete, read, write, list directory)
@ -2498,10 +2489,10 @@ namespace IEC61850
/// <param name="handler">the callback handler to be used</param>
/// <param name="parameter">a user provided parameter that is passed to the handler</param>
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
public static extern void IedServer_setDataSetAccessHandler ( IntPtr self , IedServer_DataSetAccessHandler handler , IntPtr parameter ) ;
static extern void IedServer_setDataSetAccessHandler ( IntPtr self , IedServer_DataSetAccessHandler handler , IntPtr parameter ) ;
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
public static extern void IedServer_setDirectoryAccessHandler ( IntPtr self , IedServer_DirectoryAccessHandler handler , IntPtr parameter ) ;
static extern void IedServer_setDirectoryAccessHandler ( IntPtr self , IedServer_DirectoryAccessHandler handler , IntPtr parameter ) ;
/// <summary>
/// Set the callback handler for the SetActSG event
@ -2511,7 +2502,7 @@ namespace IEC61850
/// <param name="handler">the user provided callback handler</param>
/// <param name="parameter">a user provided parameter that is passed to the control handler</param>
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
public static extern void IedServer_setActiveSettingGroupChangedHandler ( IntPtr self , IntPtr sgcb , ActiveSettingGroupChangedHandler handler , IntPtr parameter ) ;
static extern void IedServer_setActiveSettingGroupChangedHandler ( IntPtr self , IntPtr sgcb , IedServer_ ActiveSettingGroupChangedHandler handler , IntPtr parameter ) ;
/// <summary>
/// Get the active setting group number
@ -2520,7 +2511,7 @@ namespace IEC61850
/// <param name="sgcb">the handle of the setting group control block of the setting group</param>
/// <returns>the number of the active setting group</returns>
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
public static extern uint IedServer_getActiveSettingGroup ( IntPtr self , IntPtr sgcb ) ;
static extern uint IedServer_getActiveSettingGroup ( IntPtr self , IntPtr sgcb ) ;
/// <summary>
/// Set the callback handler for the SetEditSG event
@ -2530,7 +2521,7 @@ namespace IEC61850
/// <param name="handler">the user provided callback handler</param>
/// <param name="parameter">a user provided parameter that is passed to the control handler</param>
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
public static extern void IedServer_setEditSettingGroupChangedHandler ( IntPtr self , IntPtr sgcb , EditSettingGroupChangedHandler handler , IntPtr parameter ) ;
static extern void IedServer_setEditSettingGroupChangedHandler ( IntPtr self , IntPtr sgcb , IedServer_ EditSettingGroupChangedHandler handler , IntPtr parameter ) ;
/// <summary>
/// Set the callback handler for the COnfEditSG event
@ -2540,7 +2531,7 @@ namespace IEC61850
/// <param name="handler">the user provided callback handler</param>
/// <param name="parameter">a user provided parameter that is passed to the control handler</param>
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
public static extern void IedServer_setEditSettingGroupConfirmationHandler ( IntPtr self , IntPtr sgcb , EditSettingGroupConfirmationHandler handler , IntPtr parameter ) ;
static extern void IedServer_setEditSettingGroupConfirmationHandler ( IntPtr self , IntPtr sgcb , IedServer_ EditSettingGroupConfirmationHandler handler , IntPtr parameter ) ;
///// <summary>
///// Set a handler for SVCB control block events (enable/disable)
@ -2550,7 +2541,7 @@ namespace IEC61850
///// <param name="handler">the event handler to be used</param>
///// <param name="parameter">user provided parameter that is passed to the handler</param>
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
public static extern void IedServer_setSVCBHandler ( IntPtr self , IntPtr svcb , SVCBEventHandler handler , IntPtr parameter ) ;
static extern void IedServer_setSVCBHandler ( IntPtr self , IntPtr svcb , IedServer_ SVCBEventHandler handler , IntPtr parameter ) ;
///// <summary>
///// callback handler for SVCB events
@ -2559,7 +2550,7 @@ namespace IEC61850
///// <param name="eventType">event type</param>
///// <param name="parameter">user defined parameter</param>
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
p ublic delegate void SVCBEventHandler( IntPtr svcb , int eventType , IntPtr parameter ) ;
p rivate delegate void IedServer_ SVCBEventHandler( IntPtr svcb , int eventType , IntPtr parameter ) ;
/// <summary>
/// callback handler to control client read access to data attributes
@ -2575,7 +2566,7 @@ namespace IEC61850
/// <param name="parameter">the user provided parameter</param>
/// <returns>DATA_ACCESS_ERROR_SUCCESS if access is accepted, DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED if access is denied</returns>
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
p ublic delegate MmsDataAccessError ReadAccessHandler( IntPtr ld , IntPtr ln , IntPtr dataObject , int fc , IntPtr connection , IntPtr parameter ) ;
p rivate delegate MmsDataAccessError IedServer_ ReadAccessHandler( IntPtr ld , IntPtr ln , IntPtr dataObject , int fc , IntPtr connection , IntPtr parameter ) ;
/// <summary>
/// Callback handler that is invoked when the active setting group is about to be changed by an external client.
@ -2587,7 +2578,7 @@ namespace IEC61850
/// <param name="connection">connection the client connection that requests the change</param>
/// <returns>true if the change is accepted, false otherwise</returns>
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
p ublic delegate bool ActiveSettingGroupChangedHandler( IntPtr parameter , IntPtr sgcb , uint newActSg , IntPtr connection ) ;
p rivate delegate bool IedServer_ ActiveSettingGroupChangedHandler( IntPtr parameter , IntPtr sgcb , uint newActSg , IntPtr connection ) ;
/// <summary>
/// Callback handler that is invoked when the edit setting group is about to be changed by an external client.
@ -2601,7 +2592,7 @@ namespace IEC61850
/// <param name="connection">the client connection that requests the change</param>
/// <returns>true if the change is accepted, false otherwise</returns>
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
p ublic delegate bool EditSettingGroupChangedHandler( IntPtr parameter , IntPtr sgcb , uint newEditSg , IntPtr connection ) ;
p rivate delegate bool IedServer_ EditSettingGroupChangedHandler( IntPtr parameter , IntPtr sgcb , uint newEditSg , IntPtr connection ) ;
/// <summary>
/// Callback handler that is invoked when the edit setting group has been confirmed by an external client.
@ -2610,7 +2601,7 @@ namespace IEC61850
/// <param name="sgcb">the setting group control block of the setting group that is about to be changed</param>
/// <param name="editSg">the edit setting group that has been confirmed</param>
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
p ublic delegate void EditSettingGroupConfirmationHandler( IntPtr parameter , IntPtr sgcb , uint editSg ) ;
p rivate delegate void IedServer_ EditSettingGroupConfirmationHandler( IntPtr parameter , IntPtr sgcb , uint editSg ) ;
/// <summary>
/// Callback that is called when the client is calling a dataset operation (create, delete, read, write, list directory)
@ -2622,7 +2613,7 @@ namespace IEC61850
/// <param name="datasetRef"></param>
/// <returns>true to allow operation, false to deny operation</returns>
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
p ublic delegate bool IedServer_DataSetAccessHandler ( IntPtr parameter , IntPtr connection , int operation , string datasetRef ) ;
p rivate delegate bool IedServer_DataSetAccessHandler ( IntPtr parameter , IntPtr connection , int operation , string datasetRef ) ;
/// <summary>
/// Callback that is called when a client is invoking a read or write service to a control block or log
@ -2638,10 +2629,10 @@ namespace IEC61850
/// <param name="accessType">access type (read=IEC61850_CB_ACCESS_TYPE_READ or write=IEC61850_CB_ACCESS_TYPE_WRITE)</param>
/// <returns>true to include the object in the service response, otherwise false</returns>
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
p ublic delegate bool IedServer_ControlBlockAccessHandler ( IntPtr parameter , IntPtr connection , int acsiClass , IntPtr ld , IntPtr ln , string objectName , string subObjectName , int accessType ) ;
p rivate delegate bool IedServer_ControlBlockAccessHandler ( IntPtr parameter , IntPtr connection , int acsiClass , IntPtr ld , IntPtr ln , string objectName , string subObjectName , int accessType ) ;
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
p ublic delegate bool IedServer_DirectoryAccessHandler ( IntPtr parameter , IntPtr connection , int category , IntPtr logicalDevice ) ;
p rivate delegate bool IedServer_DirectoryAccessHandler ( IntPtr parameter , IntPtr connection , int category , IntPtr logicalDevice ) ;
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate bool IedServer_ListObjectsAccessHandler ( IntPtr parameter , ClientConnection connection , ACSIClass acsiClass , LogicalDevice ld , LogicalNode ln , string objectName , string subObjectName , FunctionalConstraint fc ) ;
@ -2958,26 +2949,24 @@ namespace IEC61850
return false ;
}
//------------- Setting group
public delegate bool InternalActiveSettingGroupChangedHandler ( object parameter , SettingGroupControlBlock sgcb , uint newActSg , ClientConnection connection ) ;
public delegate bool ActiveSettingGroupChangedHandler ( object parameter , SettingGroupControlBlock sgcb , uint newActSg , ClientConnection connection ) ;
private Internal ActiveSettingGroupChangedHandler intern alA ctiveSettingGroupChangedHandler = null ;
private ActiveSettingGroupChangedHandler activeSettingGroupChangedHandler = null ;
private object activeSettingGroupChangedHandlerParameter = null ;
private ActiveSettingGroupChangedHandler activeSettingGroupChangedHandler = null ;
private IedServer_ ActiveSettingGroupChangedHandler intern alA ctiveSettingGroupChangedHandler = null ;
public void SetActiveSettingGroupChangedHandler ( Internal ActiveSettingGroupChangedHandler handler , SettingGroupControlBlock settingGroupControlBlock , object parameter )
public void SetActiveSettingGroupChangedHandler ( ActiveSettingGroupChangedHandler handler , SettingGroupControlBlock settingGroupControlBlock , object parameter )
{
intern alA ctiveSettingGroupChangedHandler = handler ;
activeSettingGroupChangedHandler = handler ;
activeSettingGroupChangedHandlerParameter = parameter ;
if ( activeSettingGroupChangedHandler = = null )
if ( intern alA ctiveSettingGroupChangedHandler = = null )
{
activeSettingGroupChangedHandler = new ActiveSettingGroupChangedHandler( InternalActiveSettingGroupChangedImplementation ) ;
intern alA ctiveSettingGroupChangedHandler = new IedServer_ ActiveSettingGroupChangedHandler( InternalActiveSettingGroupChangedImplementation ) ;
IedServer_setActiveSettingGroupChangedHandler ( self , settingGroupControlBlock . self , activeSettingGroupChangedHandler, IntPtr . Zero ) ;
IedServer_setActiveSettingGroupChangedHandler ( self , settingGroupControlBlock . self , intern alA ctiveSettingGroupChangedHandler, IntPtr . Zero ) ;
}
}
@ -2994,30 +2983,30 @@ namespace IEC61850
this . clientConnections . TryGetValue ( connection , out con ) ;
return intern alA ctiveSettingGroupChangedHandler( activeSettingGroupChangedHandlerParameter , new SettingGroupControlBlock ( sgcb ) , newActSg , con ) ;
return activeSettingGroupChangedHandler( activeSettingGroupChangedHandlerParameter , new SettingGroupControlBlock ( sgcb ) , newActSg , con ) ;
}
return false ;
}
public delegate bool Internal EditSettingGroupChangedHandler( object parameter , SettingGroupControlBlock sgcb , uint newEditSg , ClientConnection connection ) ;
public delegate bool EditSettingGroupChangedHandler( object parameter , SettingGroupControlBlock sgcb , uint newEditSg , ClientConnection connection ) ;
private Internal EditSettingGroupChangedHandler int ernalE ditSettingGroupChangedHandler = null ;
private EditSettingGroupChangedHandler editSettingGroupChangedHandler = null ;
private object editSettingGroupChangedHandlerParameter = null ;
private EditSettingGroupChangedHandler editSettingGroupChangedHandler = null ;
private IedServer_ EditSettingGroupChangedHandler int ernalE ditSettingGroupChangedHandler = null ;
public void SetEditSettingGroupChangedHandler ( Internal EditSettingGroupChangedHandler handler , SettingGroupControlBlock settingGroupControlBlock , object parameter )
public void SetEditSettingGroupChangedHandler ( EditSettingGroupChangedHandler handler , SettingGroupControlBlock settingGroupControlBlock , object parameter )
{
int ernalE ditSettingGroupChangedHandler = handler ;
editSettingGroupChangedHandler = handler ;
editSettingGroupChangedHandlerParameter = parameter ;
if ( editSettingGroupChangedHandler = = null )
if ( int ernalE ditSettingGroupChangedHandler = = null )
{
editSettingGroupChangedHandler = new EditSettingGroupChangedHandler( InternalEditSettingGroupChangedImplementation ) ;
int ernalE ditSettingGroupChangedHandler = new IedServer_ EditSettingGroupChangedHandler( InternalEditSettingGroupChangedImplementation ) ;
IedServer_setEditSettingGroupChangedHandler ( self , settingGroupControlBlock . self , editSettingGroupChangedHandler, IntPtr . Zero ) ;
IedServer_setEditSettingGroupChangedHandler ( self , settingGroupControlBlock . self , int ernalE ditSettingGroupChangedHandler, IntPtr . Zero ) ;
}
}
@ -3029,30 +3018,30 @@ namespace IEC61850
this . clientConnections . TryGetValue ( connection , out con ) ;
return int ernalE ditSettingGroupChangedHandler( editSettingGroupChangedHandlerParameter , new SettingGroupControlBlock ( sgcb ) , newEditSg , con ) ;
return editSettingGroupChangedHandler( editSettingGroupChangedHandlerParameter , new SettingGroupControlBlock ( sgcb ) , newEditSg , con ) ;
}
return false ;
}
public delegate void Internal EditSettingGroupConfirmationHandler( object parameter , SettingGroupControlBlock sgcb , uint editSg ) ;
public delegate void EditSettingGroupConfirmationHandler( object parameter , SettingGroupControlBlock sgcb , uint editSg ) ;
private Internal EditSettingGroupConfirmationHandler int ernalE ditSettingGroupConfirmationHandler = null ;
private EditSettingGroupConfirmationHandler editSettingGroupConfirmationHandler = null ;
private object editSettingGroupConfirmationHandlerParameter = null ;
private EditSettingGroupConfirmationHandler editSettingGroupConfirmationHandler = null ;
private IedServer_ EditSettingGroupConfirmationHandler int ernalE ditSettingGroupConfirmationHandler = null ;
public void SetEditSettingGroupConfirmationHandler ( Internal EditSettingGroupConfirmationHandler handler , SettingGroupControlBlock settingGroupControlBlock , object parameter )
public void SetEditSettingGroupConfirmationHandler ( EditSettingGroupConfirmationHandler handler , SettingGroupControlBlock settingGroupControlBlock , object parameter )
{
int ernalE ditSettingGroupConfirmationHandler = handler ;
editSettingGroupConfirmationHandler = handler ;
editSettingGroupConfirmationHandlerParameter = parameter ;
if ( editSettingGroupConfirmationHandler = = null )
if ( int ernalE ditSettingGroupConfirmationHandler = = null )
{
editSettingGroupConfirmationHandler = new EditSettingGroupConfirmationHandler( InternalEditSettingGroupConfirmationImplementation ) ;
int ernalE ditSettingGroupConfirmationHandler = new IedServer_ EditSettingGroupConfirmationHandler( InternalEditSettingGroupConfirmationImplementation ) ;
IedServer_setEditSettingGroupConfirmationHandler ( self , settingGroupControlBlock . self , editSettingGroupConfirmationHandler, IntPtr . Zero ) ;
IedServer_setEditSettingGroupConfirmationHandler ( self , settingGroupControlBlock . self , int ernalE ditSettingGroupConfirmationHandler, IntPtr . Zero ) ;
}
}
@ -3060,27 +3049,20 @@ namespace IEC61850
{
if ( sgcb ! = IntPtr . Zero )
{
int ernalE ditSettingGroupConfirmationHandler( editSettingGroupChangedHandlerParameter , new SettingGroupControlBlock ( sgcb ) , editSg ) ;
editSettingGroupConfirmationHandler( editSettingGroupChangedHandlerParameter , new SettingGroupControlBlock ( sgcb ) , editSg ) ;
}
}
public delegate void SVCBEventHandler ( SVControlBlock sampledValuesControlBlock , SMVEvent sMVEvent , object parameter ) ;
//------------
public delegate void InternalSVCBEventHandler ( SVControlBlock sampledValuesControlBlock , SMVEvent sMVEvent , object parameter ) ;
private InternalSVCBEventHandler internalSVCBEventHandler = null ;
private object sVCBEventHandlerParameter = null ;
private SVCBEventHandler sVCBEventHandler = null ;
private IedServer_SVCBEventHandler internalSVCBEventHandler = null ;
internal class SVCHandlerInfo
{
public SVControlBlock sampledValuesControlBlock = null ;
public GCHandle handle ;
public InternalSVCBEventHandler internalS VCBEventHandler = null ;
public SVCBEventHandler sVCBEventHandler = null ;
public object svcHandlerParameter = null ;
public SVCHandlerInfo ( SVControlBlock sampledValuesControlBlock )
@ -3112,17 +3094,17 @@ namespace IEC61850
return info ;
}
public void SetSVCBHandler ( Internal SVCBEventHandler handler , SVControlBlock sampledValuesControlBlock , object parameter )
public void SetSVCBHandler ( SVCBEventHandler handler , SVControlBlock sampledValuesControlBlock , object parameter )
{
SVCHandlerInfo info = GetSVCHandlerInfo ( sampledValuesControlBlock ) ;
info . internalS VCBEventHandler = handler ;
info . s VCBEventHandler = handler ;
info . svcHandlerParameter = parameter ;
if ( s VCBEventHandler = = null )
sVCBEventHandler = new SVCBEventHandler( InternalSVCBEventHandlerImplementation ) ;
if ( internalS VCBEventHandler = = null )
internalSVCBEventHandler = new IedServer_ SVCBEventHandler( InternalSVCBEventHandlerImplementation ) ;
IedServer_setSVCBHandler ( self , sampledValuesControlBlock . Self , s VCBEventHandler, GCHandle . ToIntPtr ( info . handle ) ) ;
IedServer_setSVCBHandler ( self , sampledValuesControlBlock . Self , internalS VCBEventHandler, GCHandle . ToIntPtr ( info . handle ) ) ;
}
@ -3132,34 +3114,34 @@ namespace IEC61850
SVCHandlerInfo info = ( SVCHandlerInfo ) handle . Target ;
if ( info ! = null & & info . internalS VCBEventHandler ! = null )
info . internalS VCBEventHandler( info . sampledValuesControlBlock , ( SMVEvent ) eventType , info . svcHandlerParameter ) ;
if ( info ! = null & & info . s VCBEventHandler ! = null )
info . s VCBEventHandler( info . sampledValuesControlBlock , ( SMVEvent ) eventType , info . svcHandlerParameter ) ;
}
public delegate MmsDataAccessError Internal ReadAccessHandler( LogicalDevice ld , LogicalNode ln , DataObject dataObject , FunctionalConstraint fc , ClientConnection connection , object parameter ) ;
public delegate MmsDataAccessError ReadAccessHandler( LogicalDevice ld , LogicalNode ln , DataObject dataObject , FunctionalConstraint fc , ClientConnection connection , object parameter ) ;
private Internal ReadAccessHandler inte rnalR eadAccessHandler = null ;
private ReadAccessHandler readAccessHandler = null ;
private object inte rnalR eadAccessHandlerParameter = null ;
private object readAccessHandlerParameter = null ;
private ReadAccessHandler readAccessHandler = null ;
private IedServer_ ReadAccessHandler inte rnalR eadAccessHandler = null ;
public void SetReadAccessHandler ( Internal ReadAccessHandler handler , object parameter )
public void SetReadAccessHandler ( ReadAccessHandler handler , object parameter )
{
inte rnalR eadAccessHandler = handler ;
inte rnalR eadAccessHandlerParameter = parameter ;
readAccessHandler = handler ;
readAccessHandlerParameter = parameter ;
if ( readAccessHandler = = null )
if ( inte rnalR eadAccessHandler = = null )
{
readAccessHandler = new ReadAccessHandler ( InternalReadHandlerImplementation ) ;
inte rnalR eadAccessHandler = new IedServer_ ReadAccessHandler ( InternalReadHandlerImplementation ) ;
IedServer_setReadAccessHandler ( self , readAccessHandler, IntPtr . Zero ) ;
IedServer_setReadAccessHandler ( self , inte rnalR eadAccessHandler, IntPtr . Zero ) ;
}
}
private MmsDataAccessError InternalReadHandlerImplementation ( IntPtr ld , IntPtr ln , IntPtr dataObject , int fc , IntPtr connection , IntPtr parameter )
{
if ( inte rnalR eadAccessHandler ! = null & & ld ! = IntPtr . Zero & & ln ! = IntPtr . Zero & & connection ! = IntPtr . Zero )
if ( readAccessHandler ! = null & & ld ! = IntPtr . Zero & & ln ! = IntPtr . Zero & & connection ! = IntPtr . Zero )
{
ClientConnection con = null ;
@ -3172,7 +3154,7 @@ namespace IEC61850
if ( dataObject ! = IntPtr . Zero )
doModelNode = iedModel . GetModelNodeFromNodeRef ( dataObject ) ;
return inte rnalR eadAccessHandler( ldModelNode as LogicalDevice , lnModelNode as LogicalNode , doModelNode as DataObject , ( FunctionalConstraint ) fc , con , inte rnalR eadAccessHandlerParameter) ;
return readAccessHandler( ldModelNode as LogicalDevice , lnModelNode as LogicalNode , doModelNode as DataObject , ( FunctionalConstraint ) fc , con , readAccessHandlerParameter) ;
}
return MmsDataAccessError . UNKNOWN ;
@ -3186,30 +3168,30 @@ namespace IEC61850
DIRECTORY_CAT_LOG_LIST
}
public delegate bool Internal DirectoryAccessHandler( object parameter , ClientConnection connection , IedServer_DirectoryCategory category , LogicalDevice ld ) ;
public delegate bool DirectoryAccessHandler( object parameter , ClientConnection connection , IedServer_DirectoryCategory category , LogicalDevice ld ) ;
private InternalDirectoryAccessHandler internalD irectoryAccessHandler = null ;
private DirectoryAccessHandler d irectoryAccessHandler = null ;
private object internalD irectoryAccessHandlerParameter = null ;
private object d irectoryAccessHandlerParameter = null ;
private IedServer_DirectoryAccessHandler d irectoryAccessHandler = null ;
private IedServer_DirectoryAccessHandler internalD irectoryAccessHandler = null ;
public void SetDirectoryAccessHandler ( Internal DirectoryAccessHandler handler , object parameter )
public void SetDirectoryAccessHandler ( DirectoryAccessHandler handler , object parameter )
{
internalD irectoryAccessHandler = handler ;
internalD irectoryAccessHandlerParameter = parameter ;
d irectoryAccessHandler = handler ;
d irectoryAccessHandlerParameter = parameter ;
if ( d irectoryAccessHandler = = null )
if ( internalD irectoryAccessHandler = = null )
{
d irectoryAccessHandler = new IedServer_DirectoryAccessHandler ( DirectoryAccessHandler) ;
internalD irectoryAccessHandler = new IedServer_DirectoryAccessHandler ( Internal DirectoryAccessHandler) ;
IedServer_setDirectoryAccessHandler ( self , d irectoryAccessHandler, IntPtr . Zero ) ;
IedServer_setDirectoryAccessHandler ( self , internalD irectoryAccessHandler, IntPtr . Zero ) ;
}
}
private bool DirectoryAccessHandler( IntPtr parameter , IntPtr connection , int category , IntPtr logicalDevice )
private bool Internal DirectoryAccessHandler( IntPtr parameter , IntPtr connection , int category , IntPtr logicalDevice )
{
if ( internalD irectoryAccessHandler ! = null & & connection ! = IntPtr . Zero )
if ( d irectoryAccessHandler ! = null & & connection ! = IntPtr . Zero )
{
ClientConnection con = null ;
@ -3220,7 +3202,7 @@ namespace IEC61850
if ( logicalDevice ! = IntPtr . Zero )
ldModelNode = iedModel . GetModelNodeFromNodeRef ( logicalDevice ) ;
return internalDirectoryAccessHandler( internalD irectoryAccessHandlerParameter, con , ( IedServer_DirectoryCategory ) category , ldModelNode as LogicalDevice ) ;
return directoryAccessHandler( d irectoryAccessHandlerParameter, con , ( IedServer_DirectoryCategory ) category , ldModelNode as LogicalDevice ) ;
}
return false ;