From dd64141247bc8dfbfdd04ffa30955634fcb8bdf2 Mon Sep 17 00:00:00 2001 From: Alexander Anisimov Date: Wed, 13 May 2026 15:15:46 +0300 Subject: [PATCH 1/2] add cgo ping library entrypoint --- cmd/olcrtc-cgo/main.go | 97 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 cmd/olcrtc-cgo/main.go diff --git a/cmd/olcrtc-cgo/main.go b/cmd/olcrtc-cgo/main.go new file mode 100644 index 0000000..eb6cb1a --- /dev/null +++ b/cmd/olcrtc-cgo/main.go @@ -0,0 +1,97 @@ +// Package main exports a small c-shared olcRTC connectivity API for desktop clients. +package main + +import "C" +import ( + "github.com/openlibrecommunity/olcrtc/mobile" +) + +const errorResult = C.longlong(-1) + +// Ping starts a short-lived olcRTC client, waits for its SOCKS listener, +// performs an HTTP ping through it, and returns latency in milliseconds. +// It returns -1 when arguments are invalid, startup fails, or the ping fails. +// +//export Ping +func Ping( + carrierName *C.char, + transportName *C.char, + roomID *C.char, + clientID *C.char, + keyHex *C.char, + socksPort C.longlong, + timeoutMillis C.longlong, + pingURL *C.char, + vp8FPS C.longlong, + vp8BatchSize C.longlong, +) C.longlong { + result, err := mobile.Ping( + goString(carrierName), + goString(transportName), + goString(roomID), + goString(clientID), + goString(keyHex), + goInt(socksPort), + goInt(timeoutMillis), + goString(pingURL), + goInt(vp8FPS), + goInt(vp8BatchSize), + ) + if err != nil { + return errorResult + } + return C.longlong(result) +} + +// Check starts a short-lived olcRTC client and returns elapsed milliseconds +// once the transport and local SOCKS listener are ready. It returns -1 on error. +// +//export Check +func Check( + carrierName *C.char, + transportName *C.char, + roomID *C.char, + clientID *C.char, + keyHex *C.char, + socksPort C.longlong, + timeoutMillis C.longlong, + vp8FPS C.longlong, + vp8BatchSize C.longlong, +) C.longlong { + result, err := mobile.Check( + goString(carrierName), + goString(transportName), + goString(roomID), + goString(clientID), + goString(keyHex), + goInt(socksPort), + goInt(timeoutMillis), + goInt(vp8FPS), + goInt(vp8BatchSize), + ) + if err != nil { + return errorResult + } + return C.longlong(result) +} + +func goString(value *C.char) string { + if value == nil { + return "" + } + return C.GoString(value) +} + +func goInt(value C.longlong) int { + const maxInt = int(^uint(0) >> 1) + const minInt = -maxInt - 1 + if value > C.longlong(maxInt) { + return maxInt + } + if value < C.longlong(minInt) { + return minInt + } + return int(value) +} + +func main() {} From 82e339ed64bbf63a8c1c08fb37c615fee9b9e4d8 Mon Sep 17 00:00:00 2001 From: win64exe Date: Wed, 13 May 2026 15:38:21 +0300 Subject: [PATCH 2/2] Update srv.sh --network host \ --- script/srv.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/script/srv.sh b/script/srv.sh index 18daa18..8935a02 100755 --- a/script/srv.sh +++ b/script/srv.sh @@ -289,6 +289,7 @@ podman pull $IMAGE_NAME echo "[*] Building OlcRTC..." podman run --rm \ + --network host \ -v $WORK_DIR:/app:Z \ -v $GOMOD_CACHE:/go/pkg/mod:Z \ -v $GO_BUILD_CACHE:/root/.cache/go-build:Z \ @@ -304,6 +305,7 @@ fi if [ "$GEN_ROOM" = "1" ]; then echo "[*] Generating room via -mode gen..." ROOM_ID=$(podman run --rm \ + --network host \ -v $WORK_DIR:/app:Z \ -w /app \ $IMAGE_NAME \ @@ -335,6 +337,7 @@ fi echo "[*] Starting OlcRTC server..." podman run -d \ + --network host \ --name $CONTAINER_NAME \ --restart unless-stopped \ -v $WORK_DIR:/app:Z \