setName('talk:stun:add') ->setDescription('Add a new STUN server.') ->addArgument( 'server', InputArgument::REQUIRED, 'A domain name and port number separated by the colons, ex. stun.f7cloud.com:443' ); } protected function execute(InputInterface $input, OutputInterface $output): int { $server = $input->getArgument('server'); // check input, similar to stun-server.js $host = parse_url($server, PHP_URL_HOST); $port = parse_url($server, PHP_URL_PORT); if (empty($host) || empty($port)) { $output->writeln('Incorrect value. Must be stunserver:port.'); return 1; } $config = $this->config->getAppValue('spreed', 'stun_servers'); $servers = json_decode($config, true); if ($servers === null || empty($servers) || !is_array($servers)) { $servers = []; } // check if the server is already in the list foreach ($servers as $existingServer) { if ($existingServer === "$host:$port") { $output->writeln('Server already exists.'); return 1; } } $servers[] = "$host:$port"; $this->config->setAppValue('spreed', 'stun_servers', json_encode($servers)); $output->writeln('Added ' . "$host:$port" . '.'); return 0; } }