+ return self::detect($server_url, $network, $only_nodeinfo);
+ }
+
+ /**
+ * Set failed server status
+ *
+ * @param string $url
+ */
+ private static function setFailure(string $url)
+ {
+ if (DBA::exists('gserver', ['nurl' => Strings::normaliseLink($url)])) {
+ DBA::update('gserver', ['failed' => true, 'last_failure' => DateTimeFormat::utcNow(), 'detection-method' => null],
+ ['nurl' => Strings::normaliseLink($url)]);
+ Logger::info('Set failed status for existing server', ['url' => $url]);
+ return;
+ }
+ DBA::insert('gserver', ['url' => $url, 'nurl' => Strings::normaliseLink($url),
+ 'network' => Protocol::PHANTOM, 'created' => DateTimeFormat::utcNow(),
+ 'failed' => true, 'last_failure' => DateTimeFormat::utcNow()]);
+ Logger::info('Set failed status for new server', ['url' => $url]);
+ }
+
+ /**
+ * Remove unwanted content from the given URL
+ *
+ * @param string $url
+ * @return string cleaned URL
+ */
+ public static function cleanURL(string $url)
+ {
+ $url = trim($url, '/');
+ $url = str_replace('/index.php', '', $url);
+
+ $urlparts = parse_url($url);
+ unset($urlparts['user']);
+ unset($urlparts['pass']);
+ unset($urlparts['query']);
+ unset($urlparts['fragment']);
+ return Network::unparseURL($urlparts);
+ }
+
+ /**
+ * Return the base URL
+ *
+ * @param string $url
+ * @return string base URL
+ */
+ private static function getBaseURL(string $url)
+ {
+ $urlparts = parse_url(self::cleanURL($url));
+ unset($urlparts['path']);
+ return Network::unparseURL($urlparts);