Initial LisgloSIPS V2 implementation

This commit is contained in:
hectorzhao
2026-06-22 10:56:38 +08:00
commit 5fa1bd35e9
303 changed files with 35644 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
#!/usr/bin/env python3
import os
import socket
import time
SCRIPT_PATH = os.getenv("HOTPATH_LUA", "/etc/opensips/lisglosips_hotpath.lua")
REDIS_HOST = os.getenv("REDIS_PROXY_HOST", "127.0.0.1")
REDIS_PORT = int(os.getenv("REDIS_PROXY_PORT", "6380"))
def enc(parts: list[str]) -> bytes:
output = f"*{len(parts)}\r\n".encode("utf-8")
for part in parts:
data = part.encode("utf-8")
output += f"${len(data)}\r\n".encode("utf-8") + data + b"\r\n"
return output
with open(SCRIPT_PATH, "r", encoding="utf-8") as handle:
script = handle.read()
last_error: Exception | None = None
for _ in range(20):
try:
with socket.create_connection((REDIS_HOST, REDIS_PORT), timeout=2) as sock:
sock.sendall(enc(["SCRIPT", "LOAD", script]))
response = sock.recv(4096)
if not response.startswith(b"$"):
raise SystemExit(f"unexpected Redis response while loading Lua: {response[:80]!r}")
raise SystemExit(0)
except OSError as exc:
last_error = exc
time.sleep(0.25)
raise SystemExit(f"could not connect to Redis proxy: {last_error}")