PublicIp: add option to set public IP server URL

This commit is contained in:
李通洲 2022-09-29 14:22:40 +08:00
parent e289db184c
commit c72c6c4a27
No known key found for this signature in database
GPG Key ID: 3570F9F0F4410388
7 changed files with 35 additions and 1 deletions

View File

@ -217,6 +217,7 @@ __fastfetch_completion()
"--set" "--set"
"--set-keyless" "--set-keyless"
"--player-name" "--player-name"
"--public-ip-url"
"--public-ip-timeout" "--public-ip-timeout"
"--os-key" "--os-key"
"--os-format" "--os-format"

View File

@ -243,6 +243,7 @@ static void defaultConfig(FFinstance* instance)
ffStrbufInit(&instance->config.localIpNamePrefix); ffStrbufInit(&instance->config.localIpNamePrefix);
instance->config.publicIpTimeout = 0; instance->config.publicIpTimeout = 0;
ffStrbufInit(&instance->config.publicIpUrl);
ffStrbufInitA(&instance->config.osFile, 0); ffStrbufInitA(&instance->config.osFile, 0);

View File

@ -151,6 +151,12 @@
# Default is "-" # Default is "-"
#--separator-string - #--separator-string -
# Public IP URL option:
# Sets the URL of public IP detection server to be used.
# Only HTTP protocol is supported, and the value should not contain "http://" prefix.
# Default is "ipinfo.io/ip".
#--public-ip-url "ipinfo.io/ip"
# Public IP timeout option: # Public IP timeout option:
# Sets the time to wait for the public ip server to respond. # Sets the time to wait for the public ip server to respond.
# Must be a positive integer. # Must be a positive integer.

View File

@ -103,6 +103,7 @@ Module specific options:
--localip-show-loop <?value>: Show loop back addresses (127.0.0.1) in local ip module. Default is false --localip-show-loop <?value>: Show loop back addresses (127.0.0.1) in local ip module. Default is false
--localip-name-prefix <str>: Show ips with given name prefix only. Default is empty --localip-name-prefix <str>: Show ips with given name prefix only. Default is empty
--public-ip-timeout: Time in milliseconds to wait for the public ip server to respond. Default is disabled (0) --public-ip-timeout: Time in milliseconds to wait for the public ip server to respond. Default is disabled (0)
--public-ip-url: The URL of public IP detection server to be used.
--player-name: The name of the player to use --player-name: The name of the player to use
--gl <value>: Sets the opengl context creation library to use. Must be auto, egl, glx or osmesa. Default is auto --gl <value>: Sets the opengl context creation library to use. Must be auto, egl, glx or osmesa. Default is auto

View File

@ -1291,6 +1291,8 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con
optionParseString(key, value, &instance->config.osFile); optionParseString(key, value, &instance->config.osFile);
else if(strcasecmp(key, "--player-name") == 0) else if(strcasecmp(key, "--player-name") == 0)
optionParseString(key, value, &instance->config.playerName); optionParseString(key, value, &instance->config.playerName);
else if(strcasecmp(key, "--public-ip-url") == 0)
optionParseString(key, value, &instance->config.publicIpUrl);
else if(strcasecmp(key, "--public-ip-timeout") == 0) else if(strcasecmp(key, "--public-ip-timeout") == 0)
instance->config.publicIpTimeout = optionParseUInt32(key, value); instance->config.publicIpTimeout = optionParseUInt32(key, value);
else if(strcasecmp(key, "--gl") == 0) else if(strcasecmp(key, "--gl") == 0)

View File

@ -174,6 +174,7 @@ typedef struct FFconfig
bool localIpShowIpV6; bool localIpShowIpV6;
FFstrbuf localIpNamePrefix; FFstrbuf localIpNamePrefix;
FFstrbuf publicIpUrl;
uint32_t publicIpTimeout; uint32_t publicIpTimeout;
FFstrbuf osFile; FFstrbuf osFile;

View File

@ -9,7 +9,29 @@ static int sockfd;
void ffPreparePublicIp(FFinstance* instance) void ffPreparePublicIp(FFinstance* instance)
{ {
sockfd = ffNetworkingSendHttpRequest("ipinfo.io", "/ip", instance->config.publicIpTimeout); if(instance->config.publicIpUrl.length == 0)
sockfd = ffNetworkingSendHttpRequest("ipinfo.io", "/ip", instance->config.publicIpTimeout);
else
{
FFstrbuf host;
ffStrbufInitCopy(&host, &instance->config.publicIpUrl);
ffStrbufSubstrAfterFirstS(&host, "://");
uint32_t pathStartIndex = ffStrbufFirstIndexC(&host, '/');
FFstrbuf path;
ffStrbufInit(&path);
if(pathStartIndex != host.length)
{
ffStrbufAppendNS(&path, pathStartIndex, host.chars + (host.length - pathStartIndex));
host.length = pathStartIndex;
host.chars[pathStartIndex] = '\0';
}
sockfd = ffNetworkingSendHttpRequest(host.chars, path.length == 0 ? "/" : path.chars, instance->config.publicIpTimeout);
ffStrbufDestroy(&path);
ffStrbufDestroy(&host);
}
} }
void ffPrintPublicIp(FFinstance* instance) void ffPrintPublicIp(FFinstance* instance)