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() {} diff --git a/script/srv.sh b/script/srv.sh index 984fd96..6637d51 100755 --- a/script/srv.sh +++ b/script/srv.sh @@ -302,7 +302,7 @@ podman pull $IMAGE_NAME echo "[*] Building OlcRTC..." podman run --rm \ - --add-host=host.containers.internal:host-gateway \ + --network host \ -v $WORK_DIR:/app:Z \ -v $GOMOD_CACHE:/go/pkg/mod:Z \ -v $GO_BUILD_CACHE:/root/.cache/go-build:Z \ @@ -318,7 +318,7 @@ fi if [ "$GEN_ROOM" = "1" ]; then echo "[*] Generating room via -mode gen..." ROOM_ID=$(podman run --rm \ - --add-host=host.containers.internal:host-gateway \ + --network host \ -v $WORK_DIR:/app:Z \ -w /app \ $IMAGE_NAME \ @@ -350,6 +350,7 @@ fi echo "[*] Starting OlcRTC server..." podman run -d \ + --network host \ --name $CONTAINER_NAME \ --add-host=host.containers.internal:host-gateway \ --restart unless-stopped \