CodeSnippets/Networking/Proxy/GetProxySettings/get_proxy_settings.c (84 lines of code) (raw):
/* Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License. */
// Code Snippet : Get Proxy Settings
// This code snippet demonstrates how to retrieve the proxy settings on an Azure Sphere device.
// To retrieve the proxy settings, the application manifest
// (https://learn.microsoft.com/azure-sphere/app-development/app-manifest)
// must enable the either ReadNetworkProxyConfig or NetworkConfig capability. To enable this
// capability, copy the lines in the Capabilities section of GetProxySettings/app_manifest.json
// into your application manifest file.
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
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;
}