static int GetProxySettings()

in CodeSnippets/Networking/Proxy/GetProxySettings/get_proxy_settings.c [20:118]


static int GetProxySettings(void)
{
    int result = -1;
    Networking_ProxyConfig *proxyConfig = Networking_Proxy_Create();
    if (proxyConfig == NULL) {
        Log_Debug("ERROR: Networking_Proxy_Create(): %d (%s)\n", errno, strerror(errno));
        goto cleanup;
    }

    if (Networking_Proxy_Get(proxyConfig) == -1) {
        if (errno == ENOENT) {
            Log_Debug("ERROR: There is currently no proxy configured.\n");
        } else {
            Log_Debug("ERROR: Networking_Proxy_Get(): %d (%s)\n", errno, strerror(errno));
        }
        goto cleanup;
    }

    // Proxy address.
    const char *proxyAddress = Networking_Proxy_GetProxyAddress(proxyConfig);
    if (proxyAddress == NULL) {
        Log_Debug("ERROR: Networking_Proxy_GetProxyAddress(): %d (%s)\n", errno, strerror(errno));
        goto cleanup;
    }
    Log_Debug("Proxy Address: %s\n", proxyAddress);

    // Proxy port.
    uint16_t proxyPort;
    if (Networking_Proxy_GetProxyPort(proxyConfig, &proxyPort) == -1) {
        Log_Debug("ERROR: Networking_Proxy_Get(): %d (%s)\n", errno, strerror(errno));
        goto cleanup;
    }
    Log_Debug("Proxy Port: %u\n", proxyPort);

    // Proxy type.
    Networking_ProxyType proxyType = Networking_Proxy_GetProxyType(proxyConfig);
    if (proxyType == Networking_ProxyType_Invalid) {
        Log_Debug("ERROR: Networking_Proxy_GetProxyType(): %d (%s)\n", errno, strerror(errno));
        goto cleanup;
    }
    Log_Debug("Proxy Type: %s\n", (proxyType == 0) ? "HTTP" : "Invalid");

    // Proxy auth type.
    Networking_ProxyAuthType proxyAuthType = Networking_Proxy_GetAuthType(proxyConfig);
    if (proxyAuthType == Networking_ProxyAuthType_Invalid) {
        Log_Debug("ERROR: Networking_Proxy_GetAuthType(): %d (%s)\n", errno, strerror(errno));
        goto cleanup;
    }
    char *authType = "Invalid";
    if (proxyAuthType == Networking_ProxyAuthType_Anonymous) {
        authType = "Anonymous";
    } else if (proxyAuthType == Networking_ProxyAuthType_Basic) {
        authType = "Basic";
    }
    Log_Debug("Proxy Auth Type: %s\n", authType);

    if (proxyAuthType == Networking_ProxyAuthType_Basic) {
        // Proxy username.
        const char *proxyUsername = Networking_Proxy_GetProxyUsername(proxyConfig);
        if (proxyUsername == NULL) {
            Log_Debug("ERROR: Networking_Proxy_GetProxyUsername() returned NULL\n");
            goto cleanup;
        }
        Log_Debug("Proxy Username: %s\n", proxyUsername);

        // Proxy password.
        const char *proxyPassword = Networking_Proxy_GetProxyPassword(proxyConfig);
        if (proxyPassword == NULL) {
            Log_Debug("ERROR: Networking_Proxy_GetProxyPassword() returned NULL\n");
            goto cleanup;
        }
        Log_Debug("Proxy Password: %s\n", proxyPassword);
    }

    // Comma-separated string of addresses for which proxy should not be used.
    const char *noProxyAddresses = Networking_Proxy_GetNoProxyAddresses(proxyConfig);
    if (noProxyAddresses == NULL) {
        Log_Debug("ERROR: Networking_Proxy_GetNoProxyAddresses() returned NULL\n");
        goto cleanup;
    }
    Log_Debug("No Proxy Addresses: %s\n", noProxyAddresses);

    // Proxy options.
    Networking_ProxyOptions proxyOptions = 0;
    if (Networking_Proxy_GetProxyOptions(proxyConfig, &proxyOptions) == -1) {
        Log_Debug("ERROR: Networking_Proxy_GetProxyOptions(): %d (%s)\n", errno, strerror(errno));
        goto cleanup;
    }
    Log_Debug("Proxy Options: %s\n",
              (proxyOptions & Networking_ProxyOptions_Enabled) ? "Enabled" : "Disabled");

    result = 0;

cleanup:
    if (proxyConfig) {
        Networking_Proxy_Destroy(proxyConfig);
    }
    return result;
}