- .NET: in IedConnection: added internal reference to IsoConnectionParameters object to avoid deletion of internal AcseAuthenticationParameters by garbage collector

pull/8/head
Michael Zillgith 9 years ago
parent 003f1ef730
commit 6273a18c48

@ -432,19 +432,26 @@ namespace IEC61850
IedConnection_destroy (connection); IedConnection_destroy (connection);
} }
} }
private IsoConnectionParameters isoConnectionParameters = null;
/// <summary> /// <summary>
/// Gets the connection parameters /// Gets the connection parameters
/// </summary> /// </summary>
/// <returns>The connection parameters</returns> /// <returns>The connection parameters</returns>
public IsoConnectionParameters GetConnectionParameters () public IsoConnectionParameters GetConnectionParameters ()
{ {
IntPtr mmsConnection = IedConnection_getMmsConnection(connection); if (isoConnectionParameters == null)
{
IntPtr parameters = MmsConnection_getIsoConnectionParameters(mmsConnection); IntPtr mmsConnection = IedConnection_getMmsConnection(connection);
return new IsoConnectionParameters(parameters); IntPtr parameters = MmsConnection_getIsoConnectionParameters(mmsConnection);
isoConnectionParameters = new IsoConnectionParameters(parameters);
}
return isoConnectionParameters;
} }
private void FreeHGlobaleDeleteFunction (IntPtr pointer) private void FreeHGlobaleDeleteFunction (IntPtr pointer)

@ -102,8 +102,6 @@ namespace IEC61850
{ {
if (authParameter != IntPtr.Zero) if (authParameter != IntPtr.Zero)
AcseAuthenticationParameter_destroy(authParameter); AcseAuthenticationParameter_destroy(authParameter);
//IsoConnectionParameters_destroy(self);
} }
/// <summary> /// <summary>

@ -21,7 +21,6 @@ namespace authenticate
Console.WriteLine("Connect to " + hostname); Console.WriteLine("Connect to " + hostname);
try try
{ {
IsoConnectionParameters parameters = con.GetConnectionParameters(); IsoConnectionParameters parameters = con.GetConnectionParameters();

@ -14,8 +14,9 @@
#include "hal_thread.h" #include "hal_thread.h"
int main(int argc, char** argv) { int
main(int argc, char** argv)
{
char* hostname; char* hostname;
int tcpPort = 102; int tcpPort = 102;
@ -46,25 +47,22 @@ int main(int argc, char** argv) {
/* use this to skip AP-Title completely - this may be required by some "obscure" servers */ /* use this to skip AP-Title completely - this may be required by some "obscure" servers */
// IsoConnectionParameters_setRemoteApTitle(parameters, NULL, 0); // IsoConnectionParameters_setRemoteApTitle(parameters, NULL, 0);
// IsoConnectionParameters_setLocalApTitle(parameters, NULL, 0); // IsoConnectionParameters_setLocalApTitle(parameters, NULL, 0);
TSelector localTSelector = { 3, { 0x00, 0x01, 0x02 } };
TSelector remoteTSelector = { 2, { 0x00, 0x01 } };
TSelector localTSelector = { 3, { 0x00, 0x01, 0x02 } }; SSelector sSelector1 = { 2, { 0, 1 } };
TSelector remoteTSelector = { 2, { 0x00, 0x01 } }; SSelector sSelector2 = { 5, { 0, 1, 2, 3, 4 } };
SSelector sSelector1 = {2, { 0, 1 } };
SSelector sSelector2 = {5, { 0, 1, 2, 3, 4 } };
/* change parameters for presentation, session and transport layers */ /* change parameters for presentation, session and transport layers */
IsoConnectionParameters_setRemoteAddresses(parameters, 0x12345678, sSelector1, localTSelector); IsoConnectionParameters_setRemoteAddresses(parameters, 0x12345678, sSelector1, localTSelector);
IsoConnectionParameters_setLocalAddresses(parameters, 0x87654321, sSelector2 , remoteTSelector); IsoConnectionParameters_setLocalAddresses(parameters, 0x87654321, sSelector2, remoteTSelector);
char* password = "top secret"; char* password = "top secret";
/* use authentication */ /* use authentication */
AcseAuthenticationParameter auth = (AcseAuthenticationParameter) calloc(1, sizeof(struct sAcseAuthenticationParameter)); AcseAuthenticationParameter auth = AcseAuthenticationParameter_create();
auth->mechanism = ACSE_AUTH_PASSWORD; AcseAuthenticationParameter_setAuthMechanism(auth, ACSE_AUTH_PASSWORD);
auth->value.password.octetString = (uint8_t*) password; AcseAuthenticationParameter_setPassword(auth, password);
auth->value.password.passwordLength = strlen(password);
IsoConnectionParameters_setAcseAuthenticationParameter(parameters, auth); IsoConnectionParameters_setAcseAuthenticationParameter(parameters, auth);
@ -84,6 +82,8 @@ int main(int argc, char** argv) {
} }
IedConnection_destroy(con); IedConnection_destroy(con);
AcseAuthenticationParameter_destroy(auth);
} }

Loading…
Cancel
Save