mirror of
https://github.com/openlibrecommunity/olcrtc.git
synced 2026-06-04 19:39:45 +00:00
feat(provider): abstract provider interface and add jazz support
This commit is contained in:
@@ -16,6 +16,9 @@ import (
|
||||
"github.com/openlibrecommunity/olcrtc/internal/client"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/logger"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/names"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/provider"
|
||||
_ "github.com/openlibrecommunity/olcrtc/internal/provider/jazz"
|
||||
_ "github.com/openlibrecommunity/olcrtc/internal/provider/telemost"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/server"
|
||||
)
|
||||
|
||||
@@ -34,9 +37,10 @@ type config struct {
|
||||
}
|
||||
|
||||
var (
|
||||
errUnsupportedProvider = errors.New("only telemost provider supported")
|
||||
errRoomIDRequired = errors.New("room ID required")
|
||||
errModeRequired = errors.New("specify -mode srv or -mode cnc")
|
||||
errProviderRequired = errors.New("provider required (use -provider telemost or -provider jazz)")
|
||||
errUnsupportedProvider = errors.New("unsupported provider")
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -86,8 +90,8 @@ func parseFlags() config {
|
||||
cfg := config{}
|
||||
|
||||
flag.StringVar(&cfg.mode, "mode", "", "Mode: srv or cnc")
|
||||
flag.StringVar(&cfg.roomID, "id", "", "Telemost room ID")
|
||||
flag.StringVar(&cfg.provider, "provider", "telemost", "Provider (telemost only)")
|
||||
flag.StringVar(&cfg.roomID, "id", "", "Room ID")
|
||||
flag.StringVar(&cfg.provider, "provider", "", "Provider: telemost or jazz (required)")
|
||||
flag.IntVar(&cfg.socksPort, "socks-port", 1080, "SOCKS5 port (client only)")
|
||||
flag.StringVar(&cfg.socksHost, "socks-host", "127.0.0.1", "SOCKS5 listen host (client only)")
|
||||
flag.StringVar(&cfg.keyHex, "key", "", "Shared encryption key (hex)")
|
||||
@@ -112,9 +116,20 @@ func configureLogging(debug bool) {
|
||||
}
|
||||
|
||||
func validateConfig(cfg config) error {
|
||||
available := provider.Available()
|
||||
validProvider := false
|
||||
for _, p := range available {
|
||||
if cfg.provider == p {
|
||||
validProvider = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
switch {
|
||||
case cfg.provider != "telemost":
|
||||
return errUnsupportedProvider
|
||||
case cfg.provider == "":
|
||||
return errProviderRequired
|
||||
case !validProvider:
|
||||
return fmt.Errorf("%w: %s (available: %v)", errUnsupportedProvider, cfg.provider, available)
|
||||
case cfg.roomID == "":
|
||||
return errRoomIDRequired
|
||||
case cfg.mode != "srv" && cfg.mode != "cnc":
|
||||
@@ -148,12 +163,13 @@ func loadNames(dataDir string) error {
|
||||
}
|
||||
|
||||
func runMode(ctx context.Context, cfg config, errCh chan<- error) {
|
||||
roomURL := "https://telemost.yandex.ru/j/" + cfg.roomID
|
||||
roomURL := buildRoomURL(cfg.provider, cfg.roomID)
|
||||
|
||||
switch cfg.mode {
|
||||
case "srv":
|
||||
errCh <- server.Run(
|
||||
ctx,
|
||||
cfg.provider,
|
||||
roomURL,
|
||||
cfg.keyHex,
|
||||
cfg.dnsServer,
|
||||
@@ -163,6 +179,7 @@ func runMode(ctx context.Context, cfg config, errCh chan<- error) {
|
||||
case "cnc":
|
||||
errCh <- client.Run(
|
||||
ctx,
|
||||
cfg.provider,
|
||||
roomURL,
|
||||
cfg.keyHex,
|
||||
cfg.socksPort,
|
||||
@@ -173,6 +190,17 @@ func runMode(ctx context.Context, cfg config, errCh chan<- error) {
|
||||
}
|
||||
}
|
||||
|
||||
func buildRoomURL(providerName, roomID string) string {
|
||||
switch providerName {
|
||||
case "telemost":
|
||||
return "https://telemost.yandex.ru/j/" + roomID
|
||||
case "jazz":
|
||||
return roomID
|
||||
default:
|
||||
return roomID
|
||||
}
|
||||
}
|
||||
|
||||
func waitForShutdown(errCh <-chan error) error {
|
||||
done := make(chan error, 1)
|
||||
go func() {
|
||||
|
||||
Reference in New Issue
Block a user