--- configure.ac +++ configure.ac 2024-10-11 19:59:30 @@ -163,7 +163,7 @@ OBJCFLAGS="${OBJCFLAGS} -D_INTL_REDIRECT_MACROS -std=gnu99" LDFLAGS="${LDFLAGS} -Wl,-headerpad_max_install_names" VLC_ADD_LIBS([libvlc vlc],[-Wl,-undefined,dynamic_lookup,-framework,AppKit]) - VLC_ADD_LIBS([libvlccore],[-Wl,-framework,CoreFoundation,-framework,CoreServices]) + VLC_ADD_LIBS([libvlccore],[-Wl,-framework,CoreFoundation,-framework,CoreServices,-framework,SystemConfiguration]) AC_EGREP_CPP(yes, [#import --- src/darwin/netconf.c +++ src/darwin/netconf.c 2024-10-11 17:09:51 @@ -28,13 +28,12 @@ #include #include -#include - #import +#include #if TARGET_OS_IPHONE #include #else -#include +#include #endif /** @@ -45,6 +44,7 @@ char *vlc_getProxyUrl(const char *url) { VLC_UNUSED(url); +#if TARGET_OS_IPHONE char *proxy_url = NULL; CFDictionaryRef dicRef = CFNetworkCopySystemProxySettings(); if (NULL != dicRef) { @@ -73,4 +73,58 @@ } return proxy_url; +#else + CFDictionaryRef proxies = SCDynamicStoreCopyProxies(NULL); + char *proxy_url = NULL; + + if (proxies) { + CFNumberRef cfn_httpProxyOn = + (CFNumberRef)CFDictionaryGetValue(proxies, + kSCPropNetProxiesHTTPEnable); + if (cfn_httpProxyOn) { + int i_httpProxyOn; + CFNumberGetValue(cfn_httpProxyOn, kCFNumberIntType, &i_httpProxyOn); + CFRelease(cfn_httpProxyOn); + + if (i_httpProxyOn == 1) // http proxy is on + { + CFStringRef httpProxy = + (CFStringRef)CFDictionaryGetValue(proxies, + kSCPropNetProxiesHTTPProxy); + + if (httpProxy) { + CFNumberRef cfn_httpProxyPort = + (CFNumberRef)CFDictionaryGetValue(proxies, + kSCPropNetProxiesHTTPPort); + int i_httpProxyPort; + CFNumberGetValue(cfn_httpProxyPort, + kCFNumberIntType, + &i_httpProxyPort); + CFRelease(cfn_httpProxyPort); + + CFMutableStringRef outputURL = + CFStringCreateMutableCopy(kCFAllocatorDefault, + 0, + httpProxy); + if (i_httpProxyPort > 0) + CFStringAppendFormat(outputURL, + NULL, + CFSTR(":%i"), + i_httpProxyPort); + + char buffer[4096]; + if (CFStringGetCString(outputURL, buffer, sizeof(buffer), + kCFStringEncodingUTF8)) + proxy_url = strdup(buffer); + + CFRelease(outputURL); + } + CFRelease(httpProxy); + } + } + CFRelease(proxies); + } + + return proxy_url; +#endif }