123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- /*
- * iso_connection_parameters.h
- *
- * Copyright 2013-2018 Michael Zillgith
- *
- * This file is part of libIEC61850.
- *
- * libIEC61850 is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * libIEC61850 is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with libIEC61850. If not, see <http://www.gnu.org/licenses/>.
- *
- * See COPYING file for the complete license text.
- */
- #ifndef ISO_CONNECTION_PARAMETERS_H_
- #define ISO_CONNECTION_PARAMETERS_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "tls_config.h"
- /**
- * \addtogroup mms_client_api_group
- */
- /**@{*/
- /**
- * \brief authentication mechanism used by AcseAuthenticator
- */
- typedef enum
- {
- /** Neither ACSE nor TLS authentication used */
- ACSE_AUTH_NONE = 0,
- /** Use ACSE password for client authentication */
- ACSE_AUTH_PASSWORD = 1,
- /** Use ACSE certificate for client authentication */
- ACSE_AUTH_CERTIFICATE = 2,
- /** Use TLS certificate for client authentication */
- ACSE_AUTH_TLS = 3
- } AcseAuthenticationMechanism;
- typedef struct sAcseAuthenticationParameter* AcseAuthenticationParameter;
- struct sAcseAuthenticationParameter
- {
- AcseAuthenticationMechanism mechanism;
- union
- {
- struct
- {
- uint8_t* octetString;
- int passwordLength;
- } password; /* for mechanism = ACSE_AUTH_PASSWORD */
- struct
- {
- uint8_t* buf;
- int length;
- } certificate; /* for mechanism = ACSE_AUTH_CERTIFICATE or ACSE_AUTH_TLS */
- } value;
- };
- LIB61850_API AcseAuthenticationParameter
- AcseAuthenticationParameter_create(void);
- LIB61850_API void
- AcseAuthenticationParameter_destroy(AcseAuthenticationParameter self);
- LIB61850_API void
- AcseAuthenticationParameter_setAuthMechanism(AcseAuthenticationParameter self, AcseAuthenticationMechanism mechanism);
- LIB61850_API void
- AcseAuthenticationParameter_setPassword(AcseAuthenticationParameter self, char* password);
- /**
- * \brief Callback function to authenticate a client
- *
- * \param parameter user provided parameter - set when user registers the authenticator
- * \param authParameter the authentication parameters provided by the client
- * \param securityToken pointer where to store an application specific security token - can be ignored if not used.
- * \param appReference ISO application reference (ap-title + ae-qualifier)
- *
- * \return true if client connection is accepted, false otherwise
- */
- typedef bool
- (*AcseAuthenticator)(void* parameter, AcseAuthenticationParameter authParameter, void** securityToken, IsoApplicationReference* appReference);
- /**
- * \brief COTP T selector
- *
- * To not use T SEL set size to 0.
- */
- typedef struct {
- uint8_t size; /** 0 .. 4 - 0 means T-selector is not present */
- uint8_t value[4]; /** T-selector value */
- } TSelector;
- /**
- * \brief OSI session selector
- *
- * To not use S SEL set size to 0
- */
- typedef struct {
- uint8_t size; /** 0 .. 16 - 0 means S-selector is not present */
- uint8_t value[16]; /** S-selector value */
- } SSelector;
- /**
- * \brief OSI presentation (P) selector
- *
- * To not use P SEL set size to 0
- */
- typedef struct {
- uint8_t size; /** 0 .. 16 - 0 means P-selector is not present */
- uint8_t value[16]; /** P-selector value */
- } PSelector;
- struct sIsoConnectionParameters
- {
- AcseAuthenticationParameter acseAuthParameter;
- #if (CONFIG_MMS_SUPPORT_TLS == 1)
- TLSConfiguration tlsConfiguration;
- #endif
- const char* hostname;
- int tcpPort;
- uint8_t remoteApTitle[10];
- int remoteApTitleLen;
- int remoteAEQualifier;
- PSelector remotePSelector;
- SSelector remoteSSelector;
- TSelector remoteTSelector;
- uint8_t localApTitle[10];
- int localApTitleLen;
- int localAEQualifier;
- PSelector localPSelector;
- SSelector localSSelector;
- TSelector localTSelector;
- };
- typedef struct sIsoConnectionParameters* IsoConnectionParameters;
- /**
- * \brief create a new IsoConnectionParameters instance (FOR LIBRARY INTERNAL USE)
- *
- * NOTE: This function used internally by the MMS client library. When using the MMS or IEC 61850 API
- * there should be no reason for the user to call this function.
- *
- * \return new IsoConnectionParameters instance
- */
- LIB61850_API IsoConnectionParameters
- IsoConnectionParameters_create(void);
- /**
- * \brief Destroy an IsoConnectionParameters instance (FOR LIBRARY INTERNAL USE)
- *
- * NOTE: This function used internally by the MMS client library. When using the MMS or IEC 61850 API
- * there should be no reason for the user to call this function.
- *
- * \param self the IsoConnectionParameters instance
- */
- LIB61850_API void
- IsoConnectionParameters_destroy(IsoConnectionParameters self);
- LIB61850_API void
- IsoConnectionParameters_setTlsConfiguration(IsoConnectionParameters self, TLSConfiguration tlsConfig);
- /**
- * \brief set the authentication parameter
- *
- * This will set the authentication parameter and activates authentication.
- *
- * \param self the IsoConnectionParameters instance
- * \param acseAuthParameter
- */
- LIB61850_API void
- IsoConnectionParameters_setAcseAuthenticationParameter(IsoConnectionParameters self,
- AcseAuthenticationParameter acseAuthParameter);
- /**
- * \brief Set TCP parameters (FOR LIBRARY INTERNAL USE)
- *
- * NOTE: This function used internally by the MMS client library. When using the MMS or IEC 61850 API
- * there should be no reason for the user to call this function
- *
- * \param self the IsoConnectionParameters instance
- * \param hostname the hostname of IP address if the server
- * \param tcpPort the TCP port number of the server
- */
- LIB61850_API void
- IsoConnectionParameters_setTcpParameters(IsoConnectionParameters self, const char* hostname, int tcpPort);
- /**
- * \brief set the remote AP-Title and AE-Qualifier
- *
- * Calling this function is optional and not recommended. If not called the default
- * parameters are used.
- * If apTitle is NULL the parameter the AP-Title and AE-Qualifier will not be transmitted.
- * This seems to be required by some server devices.
- *
- * \param self the IsoConnectionParameters instance
- * \param apTitle the AP-Title OID as string.
- * \param aeQualifier the AP-qualifier
- */
- LIB61850_API void
- IsoConnectionParameters_setRemoteApTitle(IsoConnectionParameters self, const char* apTitle, int aeQualifier);
- /**
- * \brief set remote addresses for the lower layers
- *
- * This function can be used to set the addresses for the lower layer protocols (presentation, session, and transport
- * layer). Calling this function is optional and not recommended. If not called the default
- * parameters are used.
- *
- * \param self the IsoConnectionParameters instance
- * \param pSelector the P-Selector (presentation layer address)
- * \param sSelector the S-Selector (session layer address)
- * \param tSelector the T-Selector (ISO transport layer address)
- */
- LIB61850_API void
- IsoConnectionParameters_setRemoteAddresses(IsoConnectionParameters self, PSelector pSelector, SSelector sSelector, TSelector tSelector);
- /**
- * \brief set the local AP-Title and AE-Qualifier
- *
- * Calling this function is optional and not recommended. If not called the default
- * parameters are used.
- * If apTitle is NULL the parameter the AP-Title and AE-Qualifier will not be transmitted.
- * This seems to be required by some server devices.
- *
- * \param self the IsoConnectionParameters instance
- * \param apTitle the AP-Title OID as string.
- * \param aeQualifier the AP-qualifier
- */
- LIB61850_API void
- IsoConnectionParameters_setLocalApTitle(IsoConnectionParameters self, const char* apTitle, int aeQualifier);
- /**
- * \brief set local addresses for the lower layers
- *
- * This function can be used to set the addresses for the lower layer protocols (presentation, session, and transport
- * layer). Calling this function is optional and not recommended. If not called the default
- * parameters are used.
- *
- * \param self the IsoConnectionParameters instance
- * \param pSelector the P-Selector (presentation layer address)
- * \param sSelector the S-Selector (session layer address)
- * \param tSelector the T-Selector (ISO transport layer address)
- */
- LIB61850_API void
- IsoConnectionParameters_setLocalAddresses(IsoConnectionParameters self, PSelector pSelector, SSelector sSelector, TSelector tSelector);
- /**@}*/
- #ifdef __cplusplus
- }
- #endif
- #endif /* ISO_CONNECTION_PARAMETERS_H_ */
|