Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
61a82bc
Add double type
mihajlovicjj Jun 11, 2025
748de6a
Update to T_FLOAT
mihajlovicjj Jun 12, 2025
9f5821f
Add byte type
mihajlovicjj Jun 12, 2025
8c89e81
Remove read & write bytes
mihajlovicjj Jun 12, 2025
0f0f759
Convert number to int before converting to byte
mihajlovicjj Jun 12, 2025
5a2ff57
Add int list read/write
mihajlovicjj Jun 12, 2025
66cf006
Add int32 list read/write
mihajlovicjj Jun 12, 2025
df06a6d
Add int32 list to docs
mihajlovicjj Jun 12, 2025
306ea88
Add multiwrite byte and array[int32] values
mihajlovicjj Jun 12, 2025
fdd52a5
Fix method call
mihajlovicjj Jun 12, 2025
bff0e57
Fix method call
mihajlovicjj Jun 12, 2025
d5800be
Update rb_writeUaValues for multi write byte and multi write int32 list
mihajlovicjj Jun 12, 2025
8c04c85
Move up int32 list condition
mihajlovicjj Jun 12, 2025
059b24b
Add client auth
mihajlovicjj Sep 10, 2025
92b43bd
Bugfixing
mihajlovicjj Sep 10, 2025
ebe7272
Include security policy
mihajlovicjj Sep 10, 2025
bfe1cab
Update open62541
mihajlovicjj Sep 10, 2025
e0738eb
Update open62541 library
mihajlovicjj Sep 10, 2025
3ace46d
Minimal open62541
mihajlovicjj Sep 10, 2025
7862db9
Comment out potential unneccesary free
mihajlovicjj Sep 10, 2025
0e80ab7
remove potential problem
mihajlovicjj Sep 10, 2025
1e13993
Open62541 version 1.0.0
mihajlovicjj Sep 11, 2025
4a05eec
Comment out security policy
mihajlovicjj Sep 11, 2025
d7a4b87
Configure mbedtls
mihajlovicjj Sep 11, 2025
1f5c58c
Compile mbedtls
mihajlovicjj Sep 11, 2025
1a1c3c5
Compile mbedtls using position independent code
mihajlovicjj Sep 15, 2025
9acd612
Use client certificates for auth
mihajlovicjj Sep 18, 2025
cf57b5f
Transform certificates from PEM to DER format
mihajlovicjj Sep 18, 2025
2dab1dc
Update application uri
mihajlovicjj Sep 18, 2025
9b22b73
Update readme
mihajlovicjj Sep 18, 2025
d861dd8
Allow empty username/pass/certificate
mihajlovicjj Sep 18, 2025
d9e2110
Clean up cached data for each connect
mihajlovicjj Sep 22, 2025
146cdad
Restore previous security policy on client reconnect
mihajlovicjj Sep 22, 2025
e890ca7
Only clean cache if client was disconnected
mihajlovicjj Sep 22, 2025
3e22343
Skip connect if client already connected
mihajlovicjj Sep 22, 2025
26177ab
Add temporary logs for connect/disconnect
mihajlovicjj Sep 22, 2025
e8cf985
Fix PEM to DER conversion
mihajlovicjj Sep 25, 2025
44b6c55
Delete subscription method
mihajlovicjj Sep 27, 2025
b36adaf
Read/write int64 & date
mihajlovicjj Oct 8, 2025
673374a
Multi read/write int64
mihajlovicjj Oct 8, 2025
c48b225
Read/write int64 list
mihajlovicjj Oct 8, 2025
7499798
Fix write type double
mihajlovicjj Oct 13, 2025
0b5b049
Add read by numeric node ID
mihajlovicjj Jan 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ end
### Available methods - connection:

* ```client.connect(String url)``` - raises OPCUAClient::Error if unsuccessful
* ``` client.connect(String url, String username, String password, String client_cert, String private_key)``` - authorized connection with username and password, with encryption enabled
* ```client.disconnect => Fixnum``` - returns status

### Available methods - reads and writes:
Expand All @@ -59,28 +60,38 @@ All methods raise OPCUAClient::Error if unsuccessful.
* ```client.read_int32(Fixnum ns, String name) => Fixnum```
* ```client.read_uint32(Fixnum ns, String name) => Fixnum```
* ```client.read_float(Fixnum ns, String name) => Float```
* ```client.read_double(Fixnum ns, String name) => Double```
* ```client.read_boolean(Fixnum ns, String name) => true/false```
* ```client.read_string(Fixnum ns, String name) => String```
* ```client.read_byte(Fixnum ns, String name) => Byte```
* ```client.read_uint32_list(Fixnum ns, String name) => Array[Fixnum]```
* ```client.read_int32_list(Fixnum ns, String name) => Array[Fixnum]```
* ```client.multi_read(Fixnum ns, Array[String] names) => Array values```
* ```client.write_int16(Fixnum ns, String name, Fixnum value)```
* ```client.write_uint16(Fixnum ns, String name, Fixnum value)```
* ```client.write_int32(Fixnum ns, String name, Fixnum value)```
* ```client.write_uint32(Fixnum ns, String name, Fixnum value)```
* ```client.write_float(Fixnum ns, String name, Float value)```
* ```client.write_double(Fixnum ns, String name, Double value)```
* ```client.write_boolean(Fixnum ns, String name, bool value)```
* ```client.write_string(Fixnum ns, String name, String value)```
* ```client.write_uint32_list(Fixnum ns, String name, Array[Fixnum] value)```
* ```client.write_int32_list(Fixnum ns, String name, Array[Fixnum] value)```
* ```client.multi_write_int16(Fixnum ns, Array[String] names, Array[Fixnum] values)```
* ```client.multi_write_uint16(Fixnum ns, Array[String] names, Array[Fixnum] values)```
* ```client.multi_write_int32(Fixnum ns, Array[String] names, Array[Fixnum] values)```
* ```client.multi_write_uint32(Fixnum ns, Array[String] names, Array[Fixnum] values)```
* ```client.multi_write_float(Fixnum ns, Array[String] names, Array[Float] values)```
* ```client.multi_write_double(Fixnum ns, Array[String] names, Array[Double] values)```
* ```client.multi_write_boolean(Fixnum ns, Array[String] names, Array[bool] values)```
* ```client.multi_write_string(Fixnum ns, Array[String] names, Array[String] values)```
* ```client.multi_write_byte(Fixnum ns, Array[String] names, Array[Byte] values)```
* ```client.multi_write_int32_list(Fixnum ns, Array[String] names, Array[Array[Fixnum]] values)```


### Available methods - misc:

* ```client.state => Fixnum``` - client internal state
* ```client.human_state => String``` - human readable client internal state
* ```OPCUAClient::Client.human_status_code(Fixnum status) => String``` - returns human status for status

## Subscriptions and monitoring
Expand Down
13,637 changes: 13,637 additions & 0 deletions compile_output.log

Large diffs are not rendered by default.

19 changes: 18 additions & 1 deletion ext/opcua_client/extconf.rb
Original file line number Diff line number Diff line change
@@ -1,2 +1,19 @@
require 'mkmf'
create_makefile 'opcua_client/opcua_client'

# Get the absolute path to the mbedtls directory
mbedtls_dir = File.expand_path('mbedtls', __dir__)

# Build the Mbed TLS static libraries
Dir.chdir(mbedtls_dir) do
system('make clean') # Clean previous build artifacts
system('make') # Build the .a files
end

# Add the Mbed TLS include and library paths
mbedtls_include = File.expand_path('include', mbedtls_dir)
mbedtls_library = mbedtls_dir # Path to the .a files

$CFLAGS << " -I#{mbedtls_include}"
$LDFLAGS << " -L#{mbedtls_library} -lmbedtls -lmbedcrypto -lmbedx509"

create_makefile('opcua_client/opcua_client')
63 changes: 63 additions & 0 deletions ext/opcua_client/mbedtls/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
CC = gcc
AR = ar
CFLAGS = -Iinclude -Wall -Wextra -O2
CFLAGS += -fPIC
LIBDIR = library
OBJDIR = obj

# Source files for each library
SRCS_CRYPTO = $(LIBDIR)/aes.c $(LIBDIR)/aesni.c $(LIBDIR)/arc4.c $(LIBDIR)/aria.c $(LIBDIR)/asn1parse.c \
$(LIBDIR)/asn1write.c $(LIBDIR)/base64.c $(LIBDIR)/bignum.c $(LIBDIR)/blowfish.c $(LIBDIR)/camellia.c \
$(LIBDIR)/ccm.c $(LIBDIR)/chacha20.c $(LIBDIR)/chachapoly.c $(LIBDIR)/cipher.c $(LIBDIR)/cipher_wrap.c \
$(LIBDIR)/constant_time.c $(LIBDIR)/cmac.c $(LIBDIR)/ctr_drbg.c $(LIBDIR)/des.c $(LIBDIR)/dhm.c \
$(LIBDIR)/ecdh.c $(LIBDIR)/ecdsa.c $(LIBDIR)/ecjpake.c $(LIBDIR)/ecp.c $(LIBDIR)/ecp_curves.c \
$(LIBDIR)/entropy.c $(LIBDIR)/entropy_poll.c $(LIBDIR)/error.c $(LIBDIR)/gcm.c $(LIBDIR)/havege.c \
$(LIBDIR)/hkdf.c $(LIBDIR)/hmac_drbg.c $(LIBDIR)/md.c $(LIBDIR)/md2.c $(LIBDIR)/md4.c $(LIBDIR)/md5.c \
$(LIBDIR)/memory_buffer_alloc.c $(LIBDIR)/nist_kw.c $(LIBDIR)/oid.c $(LIBDIR)/padlock.c $(LIBDIR)/pem.c \
$(LIBDIR)/pk.c $(LIBDIR)/pk_wrap.c $(LIBDIR)/pkcs12.c $(LIBDIR)/pkcs5.c $(LIBDIR)/pkparse.c \
$(LIBDIR)/pkwrite.c $(LIBDIR)/platform.c $(LIBDIR)/platform_util.c $(LIBDIR)/poly1305.c \
$(LIBDIR)/psa_crypto.c $(LIBDIR)/psa_crypto_aead.c $(LIBDIR)/psa_crypto_cipher.c $(LIBDIR)/psa_crypto_client.c \
$(LIBDIR)/psa_crypto_driver_wrappers.c $(LIBDIR)/psa_crypto_ecp.c $(LIBDIR)/psa_crypto_hash.c \
$(LIBDIR)/psa_crypto_mac.c $(LIBDIR)/psa_crypto_rsa.c $(LIBDIR)/psa_crypto_se.c $(LIBDIR)/psa_crypto_slot_management.c \
$(LIBDIR)/psa_crypto_storage.c $(LIBDIR)/psa_its_file.c $(LIBDIR)/ripemd160.c $(LIBDIR)/rsa.c \
$(LIBDIR)/rsa_internal.c $(LIBDIR)/sha1.c $(LIBDIR)/sha256.c $(LIBDIR)/sha512.c $(LIBDIR)/threading.c \
$(LIBDIR)/timing.c $(LIBDIR)/version.c $(LIBDIR)/version_features.c $(LIBDIR)/xtea.c

SRCS_X509 = $(LIBDIR)/certs.c $(LIBDIR)/pkcs11.c $(LIBDIR)/x509.c $(LIBDIR)/x509_create.c $(LIBDIR)/x509_crl.c \
$(LIBDIR)/x509_crt.c $(LIBDIR)/x509_csr.c $(LIBDIR)/x509write_crt.c $(LIBDIR)/x509write_csr.c

SRCS_TLS = $(LIBDIR)/debug.c $(LIBDIR)/net_sockets.c $(LIBDIR)/ssl_cache.c $(LIBDIR)/ssl_ciphersuites.c \
$(LIBDIR)/ssl_cli.c $(LIBDIR)/ssl_cookie.c $(LIBDIR)/ssl_msg.c $(LIBDIR)/ssl_srv.c $(LIBDIR)/ssl_ticket.c \
$(LIBDIR)/ssl_tls.c $(LIBDIR)/ssl_tls13_keys.c

# Object files for each library
OBJS_CRYPTO = $(SRCS_CRYPTO:$(LIBDIR)/%.c=$(OBJDIR)/%.o)
OBJS_X509 = $(SRCS_X509:$(LIBDIR)/%.c=$(OBJDIR)/%.o)
OBJS_TLS = $(SRCS_TLS:$(LIBDIR)/%.c=$(OBJDIR)/%.o)

# Output libraries
LIBCRYPTO = libmbedcrypto.a
LIBX509 = libmbedx509.a
LIBTLS = libmbedtls.a

# Default target
all: $(LIBCRYPTO) $(LIBX509) $(LIBTLS)

# Build object files
$(OBJDIR)/%.o: $(LIBDIR)/%.c
@mkdir -p $(OBJDIR)
$(CC) $(CFLAGS) -c $< -o $@

# Build static libraries
$(LIBCRYPTO): $(OBJS_CRYPTO)
$(AR) rcs $@ $(OBJS_CRYPTO)

$(LIBX509): $(OBJS_X509)
$(AR) rcs $@ $(OBJS_X509)

$(LIBTLS): $(OBJS_TLS)
$(AR) rcs $@ $(OBJS_TLS)

# Clean up build artifacts
clean:
rm -rf $(OBJDIR) $(LIBCRYPTO) $(LIBX509) $(LIBTLS)
4 changes: 4 additions & 0 deletions ext/opcua_client/mbedtls/include/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Makefile
*.sln
*.vcxproj
mbedtls/check_config
22 changes: 22 additions & 0 deletions ext/opcua_client/mbedtls/include/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
option(INSTALL_MBEDTLS_HEADERS "Install Mbed TLS headers." ON)

if(INSTALL_MBEDTLS_HEADERS)

file(GLOB headers "mbedtls/*.h")
file(GLOB psa_headers "psa/*.h")

install(FILES ${headers}
DESTINATION include/mbedtls
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)

install(FILES ${psa_headers}
DESTINATION include/psa
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)

endif(INSTALL_MBEDTLS_HEADERS)

# Make config.h available in an out-of-source build. ssl-opt.sh requires it.
if (ENABLE_TESTING AND NOT ${CMAKE_CURRENT_BINARY_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
link_to_source(mbedtls)
link_to_source(psa)
endif()
Loading