Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mz-automation/lib60870
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v2.1.0
Choose a base ref
...
head repository: mz-automation/lib60870
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref
Loading
Showing with 22,048 additions and 4,011 deletions.
  1. +192 −0 .clang-format
  2. +51 −0 .github/workflows/main.yml
  3. +117 −0 CHANGELOG
  4. +29 −6 README.md
  5. +37 −8 lib60870-C/CMakeLists.txt
  6. +1 −1 lib60870-C/Doxyfile
  7. +17 −4 lib60870-C/Makefile
  8. +38 −45 lib60870-C/config/lib60870_config.h
  9. +0 −8 lib60870-C/dependencies/README
  10. +44 −0 lib60870-C/dependencies/README.md
  11. +5 −2 lib60870-C/examples/CMakeLists.txt
  12. +4 −7 lib60870-C/examples/cs101_master_balanced/master_example.c
  13. +86 −44 lib60870-C/examples/cs101_master_unbalanced/master_example.c
  14. +93 −67 lib60870-C/examples/cs101_slave/slave_example.c
  15. +20 −0 lib60870-C/examples/cs101_slave_files/CMakeLists.txt
  16. +20 −0 lib60870-C/examples/cs101_slave_files/Makefile
  17. +467 −0 lib60870-C/examples/cs101_slave_files/cs101_slave_files.c
  18. +31 −1 lib60870-C/examples/cs104_client/simple_client.c
  19. +20 −0 lib60870-C/examples/cs104_client_async/CMakeLists.txt
  20. +20 −0 lib60870-C/examples/cs104_client_async/Makefile
  21. +203 −0 lib60870-C/examples/cs104_client_async/cs104_client_async.c
  22. +16 −13 lib60870-C/examples/cs104_redundancy_server/cs104_redundancy_server.c
  23. +63 −24 lib60870-C/examples/cs104_server/simple_server.c
  24. +20 −0 lib60870-C/examples/cs104_server_files/CMakeLists.txt
  25. +404 −0 lib60870-C/examples/cs104_server_files/cs104_server_files.c
  26. +28 −14 lib60870-C/examples/cs104_server_no_threads/cs104_server_no_threads.c
  27. +29 −22 lib60870-C/examples/multi_client_server/multi_client_server.c
  28. +5 −0 lib60870-C/examples/tls_client/CMakeLists.txt
  29. +27 −0 lib60870-C/examples/tls_client/client_CA1_1.key
  30. +20 −0 lib60870-C/examples/tls_client/client_CA1_1.pem
  31. +22 −0 lib60870-C/examples/tls_client/root_CA1.pem
  32. +20 −0 lib60870-C/examples/tls_client/server_CA1_1.pem
  33. +99 −38 lib60870-C/examples/tls_client/tls_client.c
  34. +5 −0 lib60870-C/examples/tls_server/CMakeLists.txt
  35. BIN lib60870-C/examples/tls_server/client1.cer
  36. +20 −0 lib60870-C/examples/tls_server/client_CA1_1.pem
  37. BIN lib60870-C/examples/tls_server/root.cer
  38. +22 −0 lib60870-C/examples/tls_server/root_CA1.pem
  39. BIN lib60870-C/examples/tls_server/server.cer
  40. +27 −0 lib60870-C/examples/tls_server/server_CA1_1.key
  41. +20 −0 lib60870-C/examples/tls_server/server_CA1_1.pem
  42. +99 −58 lib60870-C/examples/tls_server/tls_server.c
  43. +4 −4 lib60870-C/make/target_system.mk
  44. +39 −17 lib60870-C/src/CMakeLists.txt
  45. +2 −2 lib60870-C/src/common/inc/linked_list.h
  46. +2 −2 lib60870-C/src/common/linked_list.c
  47. +143 −0 lib60870-C/src/file-service/cs101_file_service.h
  48. +930 −0 lib60870-C/src/file-service/file_server.c
  49. +231 −0 lib60870-C/src/hal/CMakeLists.txt
  50. +51 −0 lib60870-C/src/hal/inc/hal_base.h
  51. +14 −29 lib60870-C/src/hal/inc/hal_serial.h
  52. +139 −44 lib60870-C/src/hal/inc/hal_socket.h
  53. +14 −24 lib60870-C/src/hal/inc/hal_thread.h
  54. +51 −20 lib60870-C/src/hal/inc/hal_time.h
  55. +11 −21 lib60870-C/src/hal/inc/lib_memory.h
  56. +4 −18 lib60870-C/src/hal/inc/platform_endian.h
  57. +262 −0 lib60870-C/src/hal/inc/tls_ciphers.h
  58. +241 −19 lib60870-C/src/hal/inc/tls_config.h
  59. +7 −7 lib60870-C/src/hal/inc/tls_socket.h
  60. +5 −18 lib60870-C/src/hal/memory/lib_memory.c
  61. +8 −21 lib60870-C/src/hal/serial/linux/serial_port_linux.c
  62. +12 −22 lib60870-C/src/hal/serial/win32/serial_port_win32.c
  63. +662 −141 lib60870-C/src/hal/socket/bsd/socket_bsd.c
  64. +718 −140 lib60870-C/src/hal/socket/linux/socket_linux.c
  65. +713 −212 lib60870-C/src/hal/socket/win32/socket_win32.c
  66. +32 −42 lib60870-C/src/hal/thread/bsd/thread_bsd.c
  67. +29 −42 lib60870-C/src/hal/thread/linux/thread_linux.c
  68. +149 −0 lib60870-C/src/hal/thread/macos/thread_macos.c
  69. +7 −18 lib60870-C/src/hal/thread/win32/thread_win32.c
  70. +61 −32 lib60870-C/src/hal/time/unix/time.c
  71. +59 −30 lib60870-C/src/hal/time/win32/time.c
  72. +11 −29 lib60870-C/src/hal/tls/mbedtls/mbedtls_config.h
  73. +853 −88 lib60870-C/src/hal/tls/mbedtls/tls_mbedtls.c
  74. +73 −0 lib60870-C/src/hal/tls/mbedtls3/mbedtls_config.h
  75. +1,366 −0 lib60870-C/src/hal/tls/mbedtls3/tls_mbedtls.c
  76. +67 −62 lib60870-C/src/iec60870/apl/cpXXtime2a.c
  77. +118 −20 lib60870-C/src/iec60870/cs101/cs101_asdu.c
  78. +912 −273 lib60870-C/src/iec60870/cs101/cs101_information_objects.c
  79. +28 −19 lib60870-C/src/iec60870/cs101/cs101_master.c
  80. +28 −6 lib60870-C/src/iec60870/cs101/cs101_master_connection.c
  81. +21 −3 lib60870-C/src/iec60870/cs101/cs101_queue.c
  82. +214 −89 lib60870-C/src/iec60870/cs101/cs101_slave.c
  83. +530 −199 lib60870-C/src/iec60870/cs104/cs104_connection.c
  84. +4 −5 lib60870-C/src/iec60870/cs104/cs104_frame.c
  85. +2,341 −1,160 lib60870-C/src/iec60870/cs104/cs104_slave.c
  86. +4 −0 lib60870-C/src/iec60870/lib60870_common.c
  87. +2 −2 lib60870-C/src/iec60870/link_layer/buffer_frame.c
  88. +817 −478 lib60870-C/src/iec60870/link_layer/link_layer.c
  89. +3 −7 lib60870-C/src/iec60870/link_layer/serial_transceiver_ft_1_2.c
  90. +108 −47 lib60870-C/src/inc/api/cs101_information_objects.h
  91. +17 −2 lib60870-C/src/inc/api/cs101_master.h
  92. +30 −3 lib60870-C/src/inc/api/cs101_slave.h
  93. +46 −6 lib60870-C/src/inc/api/cs104_connection.h
  94. +37 −4 lib60870-C/src/inc/api/cs104_slave.h
  95. +219 −103 lib60870-C/src/inc/api/iec60870_common.h
  96. +1 −1 lib60870-C/src/inc/api/iec60870_master.h
  97. +81 −9 lib60870-C/src/inc/api/iec60870_slave.h
  98. +2 −1 lib60870-C/src/inc/api/link_layer_parameters.h
  99. +5 −5 lib60870-C/src/inc/internal/apl_types_internal.h
  100. +10 −2 lib60870-C/src/inc/internal/buffer_frame.h
  101. +16 −3 lib60870-C/src/inc/internal/cs101_asdu_internal.h
  102. +4 −0 lib60870-C/src/inc/internal/cs101_queue.h
  103. +2 −2 lib60870-C/src/inc/internal/cs104_frame.h
  104. +2 −2 lib60870-C/src/inc/internal/frame.h
  105. +55 −8 lib60870-C/src/inc/internal/information_objects_internal.h
  106. +2 −0 lib60870-C/src/inc/internal/lib60870_internal.h
  107. +7 −0 lib60870-C/src/inc/internal/link_layer.h
  108. +4 −1 lib60870-C/src/inc/internal/link_layer_private.h
  109. +8 −0 lib60870-C/src/inc/internal/serial_transceiver_ft_1_2.h
  110. +13 −0 lib60870-C/src/lib60870.pc.in
  111. +27 −0 lib60870-C/tests/CMakeLists.txt
  112. +6,434 −66 lib60870-C/tests/all_tests.c
  113. +35 −0 lib60870-C/tests/certs/README.md
  114. +27 −0 lib60870-C/tests/certs/client_CA1_1.key
  115. +20 −0 lib60870-C/tests/certs/client_CA1_1.pem
  116. +27 −0 lib60870-C/tests/certs/client_CA1_2.key
  117. +20 −0 lib60870-C/tests/certs/client_CA1_2.pem
  118. +27 −0 lib60870-C/tests/certs/client_CA1_3.key
  119. +20 −0 lib60870-C/tests/certs/client_CA1_3.pem
  120. +27 −0 lib60870-C/tests/certs/client_CA1_4.key
  121. +20 −0 lib60870-C/tests/certs/client_CA1_4.pem
  122. +1 −0 lib60870-C/tests/certs/crl_number
  123. +1 −0 lib60870-C/tests/certs/crl_number.old
  124. +23 −0 lib60870-C/tests/certs/crl_openssl.conf
  125. +2 −0 lib60870-C/tests/certs/index.txt
  126. +1 −0 lib60870-C/tests/certs/index.txt.attr
  127. +1 −0 lib60870-C/tests/certs/index.txt.attr.old
  128. +1 −0 lib60870-C/tests/certs/index.txt.old
  129. +27 −0 lib60870-C/tests/certs/root_CA1.key
  130. +22 −0 lib60870-C/tests/certs/root_CA1.pem
  131. +1 −0 lib60870-C/tests/certs/root_CA1.srl
  132. +27 −0 lib60870-C/tests/certs/server_CA1_1.key
  133. +20 −0 lib60870-C/tests/certs/server_CA1_1.pem
  134. +42 −0 lib60870-C/tests/certs/server_CA1_1_chain.pem
  135. +14 −0 lib60870-C/tests/certs/test.crl
  136. 0 lib60870-C/{examples/tls_client → tests}/client1-key.pem
  137. BIN lib60870-C/{examples/tls_client → tests}/client1.cer
  138. BIN lib60870-C/{examples/tls_server → tests}/client2.cer
  139. BIN lib60870-C/{examples/tls_client → tests}/root.cer
  140. 0 lib60870-C/{examples/tls_server → tests}/server-key.pem
  141. BIN lib60870-C/{examples/tls_client → tests}/server.cer
  142. +7 −0 sonar-project.properties
  143. +72 −19 user_guide.adoc
192 changes: 192 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
---
Language: Cpp
# BasedOnStyle: Microsoft
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignArrayOfStructures: None
AlignConsecutiveMacros: None
AlignConsecutiveAssignments: None
AlignConsecutiveBitFields: None
AlignConsecutiveDeclarations: None
AlignEscapedNewlines: Right
AlignOperands: Align
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortEnumsOnASingleLine: false
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortLambdasOnASingleLine: All
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: All
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: MultiLine
AttributeMacros:
- __capability
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterCaseLabel: false
AfterClass: true
AfterControlStatement: Always
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: false
AfterExternBlock: true
BeforeCatch: true
BeforeElse: true
BeforeLambdaBody: false
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeConceptDeclarations: true
BreakBeforeBraces: Custom
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 120
CommentPragmas: '^ IWYU pragma:'
QualifierAlignment: Leave
CompactNamespaces: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat: false
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: LogicalBlock
ExperimentalAutoDetectBinPacking: false
PackConstructorInitializers: BinPack
BasedOnStyle: ''
ConstructorInitializerAllOnOneLineOrOnePerLine: false
AllowAllConstructorInitializersOnNextLine: true
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IfMacros:
- KJ_IF_MAYBE
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
SortPriority: 0
CaseSensitive: false
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
SortPriority: 0
CaseSensitive: false
- Regex: '.*'
Priority: 1
SortPriority: 0
CaseSensitive: false
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentAccessModifiers: false
IndentCaseLabels: false
IndentCaseBlocks: false
IndentGotoLabels: true
IndentPPDirectives: None
IndentExternBlock: NoIndent
IndentRequires: false
IndentWidth: 4
IndentWrappedFunctionNames: false
InsertTrailingCommas: None
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
LambdaBodyIndentation: Signature
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakOpenParenthesis: 0
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 1000
PenaltyIndentedWhitespace: 0
PointerAlignment: Left
PPIndentWidth: -1
ReferenceAlignment: Pointer
ReflowComments: true
RemoveBracesLLVM: false
SeparateDefinitionBlocks: Leave
ShortNamespaceLines: 1
SortIncludes: CaseSensitive
SortJavaStaticImport: Before
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeParensOptions:
AfterControlStatements: true
AfterForeachMacros: true
AfterFunctionDefinitionName: false
AfterFunctionDeclarationName: false
AfterIfMacros: true
AfterOverloadedOperator: false
BeforeNonEmptyParentheses: false
SpaceAroundPointerQualifiers: Default
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: Never
SpacesInConditionalStatement: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInLineCommentPrefix:
Minimum: 1
Maximum: -1
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
BitFieldColonSpacing: Both
Standard: Latest
StatementAttributeLikeMacros:
- Q_EMIT
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 4
UseCRLF: false
UseTab: Never
WhitespaceSensitiveMacros:
- STRINGIZE
- PP_STRINGIZE
- BOOST_PP_STRINGIZE
- NS_SWIFT_NAME
- CF_SWIFT_NAME
...

51 changes: 51 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Build
on:
push:
branches:
- master
pull_request:
types: [opened, synchronize, reopened]
jobs:
build:
name: Build
runs-on: ubuntu-latest
env:
SONAR_SCANNER_VERSION: 4.7.0.2747
SONAR_SERVER_URL: "https://sonarcloud.io"
BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Download and set up sonar-scanner
env:
SONAR_SCANNER_DOWNLOAD_URL: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${{ env.SONAR_SCANNER_VERSION }}-linux.zip
run: |
mkdir -p $HOME/.sonar
curl -sSLo $HOME/.sonar/sonar-scanner.zip ${{ env.SONAR_SCANNER_DOWNLOAD_URL }}
unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/
echo "$HOME/.sonar/sonar-scanner-${{ env.SONAR_SCANNER_VERSION }}-linux/bin" >> $GITHUB_PATH
- name: Download and set up build-wrapper
env:
BUILD_WRAPPER_DOWNLOAD_URL: ${{ env.SONAR_SERVER_URL }}/static/cpp/build-wrapper-linux-x86.zip
run: |
curl -sSLo $HOME/.sonar/build-wrapper-linux-x86.zip ${{ env.BUILD_WRAPPER_DOWNLOAD_URL }}
unzip -o $HOME/.sonar/build-wrapper-linux-x86.zip -d $HOME/.sonar/
echo "$HOME/.sonar/build-wrapper-linux-x86" >> $GITHUB_PATH
- name: Run build-wrapper
run: |
cd lib60870-C
mkdir build
cmake -S . -B build
build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build build/
- name: Run sonar-scanner
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
sonar-scanner --define sonar.host.url="${{ env.SONAR_SERVER_URL }}" --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}"
117 changes: 117 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,119 @@
Changes to version 2.3.4
------------------------

- removed internal calls to CS101_ASDU_createFromBuffer to avoid dynamic memory allocation while handling received ASDUs
- added CS101_ASDU_createFromBuffer to API
- added ability to change config defines from make command (#169)
- Time(Linux): always use clock_gettime; cleanup cmake files to remove checks for clock_gettime (#162)
- Time(windows): fixed - Hal_getMonotonicTimeInMs() doesn't call GetTickCount64 correctly (#163)

Changes to version 2.3.3
------------------------

- TLS: support for TLS 1.3 (when using mbedtls 3.6)
- TLS: support to select TLS cipher suites
- CS104 slave: check IOA of received commands where IOA is fixed to 0 (LIB8705-101)
- CS 104 slave: only send S message after receiving STOPDT-ACT when there are unconfirmed outstanding I messages to be compliant with test case IEC 60870-5-604:2016-5.3.2.70 (LIB8705-97)
- fixed bug in test pattern for TestCommand (I651CL-25)
- fixed initialization problem in StepCommand_create (I651CL-22)
- disable support for C_TS_NA_1 for CS104 by default
- use monotonic time for timers when supported by platform (LIB8705-87)
- CS101 slave: updated behavior in unbalanced mode when FCB bit did not change (LIB8705-104)
- fixed - k parameter from user configuration is not used
- added handling of pending unconfirmed stopped state (LIB8705-83)
- CS104_Connection: call connection handler only outside of connection lock to avoid deadlocks in user code (LIB8705-62)
- CS104 connection: fixed potential race condition when connection is closed by peer (#147)
- CS104 slave: fixed - lock not released in error case (#138)
- fixed - CS 104 server: invalid read - when MasterConnection_deactivate is called after MasterConnection_deinit (LIB8705-54)
- fixed - CS 104 server: connection is closed by server when receiving S message in inactive state (LIB8705-55)
- fixed - CS104_Connection deadlock when sending commands/ASDUs (#134)(LIB8705-52)


Changes to version 2.3.2
------------------------

- TLS support now requires mbedtls 2.28
- updated HAL layer
- Added new IEC 62351-3 related TLS features (session resumption, alarms, ...)
- CS101 balanced link layer: Send request-status-of-link before calling reset-of-remote-link
- CS101 unbalanced master: Send request-status-of-link before calling reset-of-remote-link, added delay before repeating request-status-of-link
- added function CS101_ASDU_clone
- fixed - TLS: configured CRL are ignored (#117)
- integrated code to serve files
- other small bug fixes and improvements
- CS104 client: added connection event when connect failed


Changes to version 2.3.1
------------------------

- TLS support now requires mbedtls 2.16.12
- CS104 client/master: add support to specify local interface/IP address
- Macos HAL layer: replaced semaphores by mutex
- updated HAL layer
- fix - Possible buffer overflow when formatting IPv6 addresses (#96)
- fixed - write to queueEntry is not protected (#99)
- fixed bug in CS101_ASDU_setNumberOfElements (#91)
- CS104 slave: fixed problem in TEST-FR con timeout handling
- CS101 master: fixed problem not sending broadcast messages (#88)
- CS101 slave: fixed potential crash when application layer parameters don't match
- CS104 server: fixed - receiving I or S frame while in STOPDT should close connection


Changes to version 2.3.0
------------------------
- CS104 slave: send time sync response only to requesting client (#87)
- fixed a bug in StatusAndStatusChangeDetection type decoding
- fixed problem in TLS integration layer
- fixed wrong type in return value of TestCommandWithCP56Time2a_getCounter
- CS104 slave: close all open connections when server is stopped in non-treaded mode
- added QueryLog (F_SC_NB_1) information object type
- CS 101 slave: release plugin list in destroy function (#80)
- CS104 client: Added function CS104_Connection_sendTestCommandWithTimestamp to send C_TS_TA_1 test command
- CS104 slave: added support to handle test command C_TS_TA_1
- added missing value for IEC60870_QCC_FRZ_COUNTER_RESET (#78)
- CS104 slave: remove message from queue when confirmation received (see #77)
- CS104 master: confirm all received I messages before sending STOPDT ACT or closing the connection
- CS 104 slave: fixed bugs when TLS connection initilization fails (#75)
- fixed potential memory leak in CS104_Connection_connectAsync
- fixed wrong argument type of StepCommandWithCP56Time2a_destroy (#74)
- single point and double point information objects ignore invalid quality flags (#72)

Changes to version 2.2.1
------------------------
- CS104 slave: fixed problems in queue handling (#67)
- added missing return statement in CS101_ASDU_addPayload(#68)
- CS101_ASDU_addInformationObject now checks for correct object type
- windows socket driver: fixed - fail to detect peer close when read from socket
- fixed bug in BitString32 encoding (see #65)
- fixed - null pointer access when calling CS104_Slave_destroy without server running before (issue #64)
- added Bitstring32X_createEx functions to keep API backward compatible and allow setting of quality (issue #63)

Changes to version 2.2.0
------------------------
- CS 101/104 slave: improved stability when receiving corrupted messages
- CS 101/104 slave: added plugin interface
- CS101 master: fixed setting of own address in balanced mode (#51)
- CS101 slave: fixed bug in queue size initialization
- Socket HAL (linux/bsd): set default backlog to 2 (see #50)
- Socket HAL (linux/bsd): Socket_read detects closed socket
- fixed bugs in file handling messages
- fixed bug in OA decoding
- add support to create and handle private or not supported ASDU types
- CS104 master/slave: improved socket handling
- CS104 slave: improved memory handling and memory consumption
- removed CONFIG_CS104_SLAVE_POOL (and related) configuration option


Changes to version 2.1.1
------------------------
- CS 104 slave: added functions IMasterConnection_getPeerAddress and IMasterConnection_close
- CS 101/CS 104 slave: set P/N=1 (negative) when sending COT=44 or COT=45
- improved compatibility with VxWorks
- CS 104 slave: fixed bug in counter interrogation command handling - free stack allocated memory
- fixed some include file problems


Changes to version 2.1.0
------------------------
- CS104 slave: added support for multiple redundancy groups
@@ -10,6 +126,7 @@ Changes to version 2.1.0
- CS101 unbalanced master: fixed state machine problem with multiple slaves (some responses don't change state and master keeps locked on the slave)
- optionally compile library without HAL to simply using together with libiec61850


Changes to version 2.0.2
------------------------
- CS104 slave: added new CS104_ConnectionEventHandler to track connection events
Loading