aboutsummaryrefslogtreecommitdiffstats
path: root/readme.md
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-03-31 16:10:51 +0200
committerThomas Vanbesien <tvanbesi@proton.me>2026-03-31 16:10:51 +0200
commit71bd06367ea830dd176019e0221dc516e7f07a36 (patch)
treecef7413f28af2d4f9aceadc31a78655b47200c06 /readme.md
parentb2c29c80b1e4395853941b67c2e674306eebf2fa (diff)
downloadBobinkCOpcUa-71bd06367ea830dd176019e0221dc516e7f07a36.tar.gz
BobinkCOpcUa-71bd06367ea830dd176019e0221dc516e7f07a36.zip
Update readme.md → README.md
Diffstat (limited to 'readme.md')
-rw-r--r--readme.md194
1 files changed, 0 insertions, 194 deletions
diff --git a/readme.md b/readme.md
deleted file mode 100644
index a2c5496..0000000
--- a/readme.md
+++ /dev/null
@@ -1,194 +0,0 @@
-# BobinkCOpcUa
-
-A small C project that demonstrates OPC UA server discovery using the
-[open62541](https://www.open62541.org/) library. Three programs work together:
-
-- **bobink_opcua_discovery_server** — Local Discovery Server that other servers register with
-- **bobink_opcua_server** — a server that periodically registers itself with the LDS
-- **bobink_opcua_client** — queries the LDS for servers, lists endpoints, reads the current time, or downloads a server's certificate
-
-## Prerequisites
-
-- CMake 3.17+
-- A C11 compiler (GCC or Clang)
-- OpenSSL development libraries (`libssl-dev` / `openssl-devel`)
-- `openssl` CLI (for generating certificates)
-
-## Getting started
-
-Clone the repository with its submodule:
-
-```sh
-git clone --recursive https://git.tvcloud.fr/BobinkCOpcUa
-cd BobinkCOpcUa
-```
-
-### Certificates
-
-Test certificates are pre-generated and committed under each test directory
-(e.g. `tests/secure_anonymous/certs/`). Each secure test has per-identity
-subdirectories (`ServerLDS/`, `ServerRegister/`, `ServerRegisterClient/`,
-`Client/`) containing `cert.der` and `key.der`, plus a shared `trust/`
-directory with all certificates.
-
-Programs can also run without certificates (SecurityPolicy#None only) by
-omitting the `certificate`, `privateKey`, and `trustStore` keys from their
-config files.
-
-To generate new certificates, use `tools/generate_certificate.sh <output_dir> <name> [uri]`.
-
-### Build
-
-```sh
-cmake -B build
-cmake --build build --parallel
-```
-
-open62541 is fetched from the submodule and built automatically — the first
-build takes a bit longer.
-
-## Running
-
-Start the programs in order, each in its own terminal, from the project root.
-Configuration files live in `tests/` (one directory per test scenario — see
-[Tests](#tests) below). The examples below use `tests/secure_user/`:
-
-```sh
-# 1. Local Discovery Server
-build/bobink_opcua_discovery_server tests/secure_user/server_lds.conf
-
-# 2. Register Server (connects to the LDS on port 14840)
-build/bobink_opcua_server tests/secure_user/server_register.conf \
- tests/secure_user/server_register_client.conf opc.tcp://localhost:14840 \
- [nodes.conf]
-
-# 3. Find registered servers via the LDS
-build/bobink_opcua_client tests/secure_user/client.conf find-servers opc.tcp://localhost:14840
-
-# 4. List endpoints on the registered server
-build/bobink_opcua_client tests/secure_user/client.conf get-endpoints opc.tcp://localhost:14841
-
-# 5. Read the current time from the registered server
-build/bobink_opcua_client tests/secure_user/client.conf read-time opc.tcp://localhost:14841
-
-# 6. Download the server's certificate to a local file
-build/bobink_opcua_client tests/secure_user/client.conf download-cert opc.tcp://localhost:14841 server.der
-```
-
-All three programs accept an optional log level as the last argument
-(`trace`, `debug`, `info`, `warning`, `error`, `fatal`). The default is `info`.
-
-## Tests
-
-Integration tests exercise four combinations of security and authentication:
-
-| Test | Security | Auth |
-|------|----------|------|
-| `unsecure_anonymous` | None / None | anonymous |
-| `secure_anonymous` | SignAndEncrypt / Aes256_Sha256_RsaPss | anonymous |
-| `secure_user` | SignAndEncrypt / Aes256_Sha256_RsaPss | user/password |
-| `secure_cert` | SignAndEncrypt / Aes256_Sha256_RsaPss | X509 certificate |
-| `download_cert` | SignAndEncrypt / Aes256_Sha256_RsaPss | anonymous (download-cert) |
-
-Run all tests:
-
-```sh
-ctest --test-dir build --output-on-failure
-```
-
-### Memory leak check
-
-Rebuild with AddressSanitizer, run the tests, then switch back:
-
-```sh
-# ASan build
-cmake -B build \
- -DCMAKE_C_FLAGS="-fsanitize=address -fno-omit-frame-pointer" \
- -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=address"
-cmake --build build --parallel
-
-ASAN_OPTIONS="detect_leaks=1" ctest --test-dir build --output-on-failure
-
-# Restore normal build
-cmake -B build -DCMAKE_C_FLAGS="" -DCMAKE_EXE_LINKER_FLAGS=""
-cmake --build build --parallel
-```
-
-## Configuration
-
-Programs are configured through plain text files (`key = value`, one per line).
-See the `tests/` directories for working examples.
-
-Three authentication modes are supported via the `authMode` key:
-
-- **anonymous** — no user identity
-- **user** — username and password (requires `username` and `password` keys)
-- **cert** — X509 certificate identity token (reuses the application certificate; requires encryption to be configured)
-
-## Nodes Configuration
-
-`bobink_opcua_server` accepts an optional nodes config file that populates
-the server's address space with variable nodes. Pass it as the fourth
-positional argument (before the optional log level):
-
-```sh
-build/bobink_opcua_server server.conf client.conf opc.tcp://localhost:14840 nodes.conf
-```
-
-The config file only declares the node structure (name, type, access level).
-Values are not specified in the config — the server assigns random values at
-startup and updates them every five seconds. This is intended for testing OPC UA
-monitoring and subscriptions.
-
-The file uses the same `key = value` format with dot-indexed keys:
-
-```
-node.0.name = Temperature
-node.0.description = Current temperature reading
-node.0.type = double
-node.0.accessLevel = read
-
-node.1.name = DeviceName
-node.1.type = string
-node.1.accessLevel = readwrite
-
-node.2.name = Measurements
-node.2.description = Recent measurements
-node.2.type = double[]
-node.2.accessLevel = read
-```
-
-Each node gets a string NodeId in namespace 1 (`ns=1;s=<name>`). The `name`
-field is also used as the display name and browse name. Array nodes are
-created with 5 elements.
-
-### Fields
-
-| Field | Required | Description |
-|-------|----------|-------------|
-| `name` | yes | Display name, browse name, and string NodeId |
-| `description` | no | Human-readable description |
-| `type` | yes | Data type (see table below); append `[]` for a 1D array |
-| `accessLevel` | yes | `read` or `readwrite` |
-
-### Supported Types
-
-| Type name | OPC UA type |
-|-----------|-------------|
-| `bool` | Boolean |
-| `int16` | Int16 |
-| `uint16` | UInt16 |
-| `int32` | Int32 |
-| `uint32` | UInt32 |
-| `int64` | Int64 |
-| `uint64` | UInt64 |
-| `float` | Float |
-| `double` | Double |
-| `string` | String |
-| `sbyte` | SByte |
-| `byte` | Byte |
-| `datetime` | DateTime |
-| `guid` | Guid |
-| `bytestring` | ByteString |
-
-Append `[]` to any type name for a 1D array (e.g. `double[]`, `string[]`).