Files
quicproquo/sdks/ruby/lib/quicprochat/ffi_bindings.rb
Christian Nennemann a710037dde chore: rename quicproquo → quicprochat in Rust workspace
Rename all crate directories, package names, binary names, proto
package/module paths, ALPN strings, env var prefixes, config filenames,
mDNS service names, and plugin ABI symbols from quicproquo/qpq to
quicprochat/qpc.
2026-03-21 19:14:06 +01:00

57 lines
1.9 KiB
Ruby

# frozen_string_literal: true
require "ffi"
module QuicProQuo
# Low-level FFI bindings to libquicproquo_ffi.
#
# The library is located via:
# 1. QPQ_LIB_PATH environment variable
# 2. Common cargo build output paths
# 3. System library path
module FFIBindings
extend FFI::Library
# Status codes (mirrors crates/quicproquo-ffi/src/lib.rs).
QPQ_OK = 0
QPQ_ERROR = 1
QPQ_AUTH_FAILED = 2
QPQ_TIMEOUT = 3
QPQ_NOT_CONNECTED = 4
# Locate and load the shared library.
LIB_SEARCH_PATHS = [
ENV.fetch("QPQ_LIB_PATH", nil),
File.expand_path("../../../../target/release/libquicproquo_ffi.so", __dir__),
File.expand_path("../../../../target/debug/libquicproquo_ffi.so", __dir__),
File.expand_path("../../../../target/release/libquicproquo_ffi.dylib", __dir__),
File.expand_path("../../../../target/debug/libquicproquo_ffi.dylib", __dir__),
"quicproquo_ffi",
].compact.freeze
lib_path = LIB_SEARCH_PATHS.find { |p| File.exist?(p) } || "quicproquo_ffi"
ffi_lib lib_path
# QpqHandle* qpq_connect(const char*, const char*, const char*)
attach_function :qpq_connect, %i[string string string], :pointer
# int qpq_login(QpqHandle*, const char*, const char*)
attach_function :qpq_login, %i[pointer string string], :int
# int qpq_send(QpqHandle*, const char*, :pointer, size_t)
attach_function :qpq_send, %i[pointer string pointer size_t], :int
# int qpq_receive(QpqHandle*, uint32, :pointer)
attach_function :qpq_receive, %i[pointer uint32 pointer], :int
# void qpq_disconnect(QpqHandle*)
attach_function :qpq_disconnect, [:pointer], :void
# const char* qpq_last_error(const QpqHandle*)
attach_function :qpq_last_error, [:pointer], :string
# void qpq_free_string(char*)
attach_function :qpq_free_string, [:pointer], :void
end
end