From e005b9cd6c821f1a41229460370c96f9ff7e310a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 9 Apr 2020 12:25:35 +0200 Subject: Use a dedicated method to get the signaling mode Signed-off-by: Joas Schilling --- lib/Config.php | 21 +++++++++++++++++++-- lib/Controller/SignalingController.php | 14 ++++++-------- lib/Signaling/BackendNotifier.php | 8 ++++++-- lib/Signaling/Listener.php | 2 +- 4 files changed, 32 insertions(+), 13 deletions(-) (limited to 'lib') diff --git a/lib/Config.php b/lib/Config.php index 3e63719a8..cc15539f0 100644 --- a/lib/Config.php +++ b/lib/Config.php @@ -32,6 +32,7 @@ class Config { public const SIGNALING_INTERNAL = 'internal'; public const SIGNALING_EXTERNAL = 'external'; + public const SIGNALING_CLUSTER_CONVERSATION = 'conversation_cluster'; /** @var IConfig */ protected $config; @@ -235,10 +236,26 @@ class Config { } public function getSignalingMode(): string { - if (empty($this->getSignalingServers())) { + $validModes = [ + self::SIGNALING_INTERNAL, + self::SIGNALING_EXTERNAL, + self::SIGNALING_CLUSTER_CONVERSATION, + ]; + + $mode = $this->config->getAppValue('spreed', 'signaling_mode', null); + if ($mode === self::SIGNALING_INTERNAL) { return self::SIGNALING_INTERNAL; } - return self::SIGNALING_EXTERNAL; + + $numSignalingServers = count($this->getSignalingServers()); + if ($numSignalingServers === 0) { + return self::SIGNALING_INTERNAL; + } + if ($numSignalingServers === 1) { + return self::SIGNALING_EXTERNAL; + } + + return \in_array($mode, $validModes, true) ? $mode : self::SIGNALING_EXTERNAL; } /** diff --git a/lib/Controller/SignalingController.php b/lib/Controller/SignalingController.php index 09e9e536b..6b447c184 100644 --- a/lib/Controller/SignalingController.php +++ b/lib/Controller/SignalingController.php @@ -138,15 +138,15 @@ class SignalingController extends OCSController { } $signaling = ''; - $servers = $this->talkConfig->getSignalingServers(); - if (!empty($servers)) { + $signalingMode = $this->talkConfig->getSignalingMode(); + if ($signalingMode !== Config::SIGNALING_INTERNAL) { + $servers = $this->talkConfig->getSignalingServers(); try { $serverId = random_int(0, count($servers) - 1); } catch (\Exception $e) { $serverId = 0; } - $signalingClusterMode = $this->serverConfig->getAppValue('spreed', 'hpb_cluster_mode', ''); - if ($signalingClusterMode === 'conversation') { + if ($signalingMode === Config::SIGNALING_CLUSTER_CONVERSATION) { try { $serverId = $this->getSignalingServerForConversation($this->userId, $serverId, $token); } catch (RoomNotFoundException $e) { @@ -242,8 +242,7 @@ class SignalingController extends OCSController { * @return DataResponse */ public function signaling(string $token, string $messages): DataResponse { - $signaling = $this->talkConfig->getSignalingServers(); - if (!empty($signaling)) { + if ($this->talkConfig->getSignalingMode() !== Config::SIGNALING_INTERNAL) { return new DataResponse('Internal signaling disabled.', Http::STATUS_BAD_REQUEST); } @@ -288,8 +287,7 @@ class SignalingController extends OCSController { * @return DataResponse */ public function pullMessages(string $token): DataResponse { - $signaling = $this->talkConfig->getSignalingServers(); - if (!empty($signaling)) { + if ($this->talkConfig->getSignalingMode() !== Config::SIGNALING_INTERNAL) { return new DataResponse('Internal signaling disabled.', Http::STATUS_BAD_REQUEST); } diff --git a/lib/Signaling/BackendNotifier.php b/lib/Signaling/BackendNotifier.php index 8e79ac4ed..6be38c826 100644 --- a/lib/Signaling/BackendNotifier.php +++ b/lib/Signaling/BackendNotifier.php @@ -84,11 +84,15 @@ class BackendNotifier { * @throws \Exception */ private function backendRequest(string $url, array $data): void { - $servers = $this->config->getSignalingServers(); - if (empty($servers)) { + if ($this->config->getSignalingMode() === Config::SIGNALING_INTERNAL) { return; } + if ($this->config->getSignalingMode() === Config::SIGNALING_CLUSTER_CONVERSATION) { + // FIXME need to send it to the right signaling server + } + $servers = $this->config->getSignalingServers(); + // We can use any server of the available backends. $signaling = $servers[random_int(0, count($servers) - 1)]; $signaling['server'] = rtrim($signaling['server'], '/'); diff --git a/lib/Signaling/Listener.php b/lib/Signaling/Listener.php index 1f7c07f30..6b1c8d0c3 100644 --- a/lib/Signaling/Listener.php +++ b/lib/Signaling/Listener.php @@ -49,7 +49,7 @@ class Listener { protected static function isUsingInternalSignaling(): bool { /** @var Config $config */ $config = \OC::$server->query(Config::class); - return empty($config->getSignalingServers()); + return $config->getSignalingMode() === Config::SIGNALING_INTERNAL; } protected static function registerInternalSignaling(IEventDispatcher $dispatcher): void { -- cgit v1.2.3