From 9e262d90176ef968901bc415943894f3c2ba045a Mon Sep 17 00:00:00 2001 From: bluebrother Date: Fri, 2 Apr 2010 19:22:32 +0000 Subject: [PATCH] Implement system proxy values retrieval on OS X. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25439 a1c6a512-1295-4272-9138-f99709370657 --- rbutil/rbutilqt/base/system.cpp | 39 +++++++++++++++++++++++++++++++++++++++ rbutil/rbutilqt/configure.cpp | 4 +--- rbutil/rbutilqt/rbutilqt.pro | 2 +- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/rbutil/rbutilqt/base/system.cpp b/rbutil/rbutilqt/base/system.cpp index 65acef5ee..779715749 100644 --- a/rbutil/rbutilqt/base/system.cpp +++ b/rbutil/rbutilqt/base/system.cpp @@ -60,6 +60,9 @@ #include #include #include + +#include +#include #endif #include "utils.h" @@ -390,6 +393,42 @@ QUrl System::systemProxy(void) return QUrl("http://" + QString::fromWCharArray(proxyval)); else return QUrl(""); +#elif defined(Q_OS_MACX) + + CFDictionaryRef dictref; + CFStringRef stringref; + CFNumberRef numberref; + int enable; + int port; + unsigned int bufsize = 0; + char *buf; + QUrl proxy; + + dictref = SCDynamicStoreCopyProxies(NULL); + stringref = (CFStringRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPProxy); + numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPEnable); + CFNumberGetValue(numberref, kCFNumberIntType, &enable); + if(enable == 1) { + // get number of characters. CFStringGetLength uses UTF-16 code pairs + bufsize = CFStringGetLength(stringref) * 2 + 1; + buf = (char*)malloc(sizeof(char) * bufsize); + if(buf == NULL) { + qDebug() << "[System] can't allocate memory for proxy string!"; + CFRelease(dictref); + return QUrl(""); + } + CFStringGetCString(stringref, buf, bufsize, kCFStringEncodingUTF16); + numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPPort); + CFNumberGetValue(numberref, kCFNumberIntType, &port); + proxy.setScheme("http"); + proxy.setHost(QString::fromUtf16((unsigned short*)buf)); + proxy.setPort(port); + + free(buf); + } + CFRelease(dictref); + + return proxy; #else return QUrl(""); #endif diff --git a/rbutil/rbutilqt/configure.cpp b/rbutil/rbutilqt/configure.cpp index 0704f0a99..341171739 100644 --- a/rbutil/rbutilqt/configure.cpp +++ b/rbutil/rbutilqt/configure.cpp @@ -54,9 +54,7 @@ Config::Config(QWidget *parent,int index) : QDialog(parent) QRegExp validate("[0-9]*"); proxyValidator->setRegExp(validate); ui.proxyPort->setValidator(proxyValidator); -#if !defined(Q_OS_LINUX) && !defined(Q_OS_WIN32) - ui.radioSystemProxy->setEnabled(false); // not on OS X for now -#endif + // build language list and sort alphabetically QStringList langs = findLanguageFiles(); for(int i = 0; i < langs.size(); ++i) diff --git a/rbutil/rbutilqt/rbutilqt.pro b/rbutil/rbutilqt/rbutilqt.pro index 34b43e660..d3fb9c4b8 100644 --- a/rbutil/rbutilqt/rbutilqt.pro +++ b/rbutil/rbutilqt/rbutilqt.pro @@ -139,7 +139,7 @@ macx { QMAKE_LFLAGS_PPC=-mmacosx-version-min=10.4 -arch ppc QMAKE_LFLAGS_X86=-mmacosx-version-min=10.4 -arch i386 CONFIG+=x86 ppc - LIBS += -L/usr/local/lib -framework IOKit -framework CoreFoundation -framework Carbon -lz + LIBS += -L/usr/local/lib -framework IOKit -framework CoreFoundation -framework Carbon -framework SystemConfiguration -lz INCLUDEPATH += /usr/local/include # rule for creating a dmg file -- 2.11.4.GIT