Merge origin/master into refactor/universal-carrier

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
This commit is contained in:
zarazaex69
2026-05-13 15:50:29 +03:00
2 changed files with 100 additions and 2 deletions

97
cmd/olcrtc-cgo/main.go Normal file
View File

@@ -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() {}

View File

@@ -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 \