diff options
Diffstat (limited to 'shell/source/backends/macbe')
-rw-r--r-- | shell/source/backends/macbe/exports.map | 10 | ||||
-rw-r--r-- | shell/source/backends/macbe/macbackend.cxx | 154 | ||||
-rw-r--r-- | shell/source/backends/macbe/macbackend.hxx | 116 | ||||
-rw-r--r-- | shell/source/backends/macbe/macbe.xml | 36 | ||||
-rw-r--r-- | shell/source/backends/macbe/macbecdef.cxx | 127 | ||||
-rw-r--r-- | shell/source/backends/macbe/macbelayer.cxx | 440 | ||||
-rw-r--r-- | shell/source/backends/macbe/macbelayer.hxx | 101 | ||||
-rw-r--r-- | shell/source/backends/macbe/makefile.mk | 79 |
8 files changed, 1063 insertions, 0 deletions
diff --git a/shell/source/backends/macbe/exports.map b/shell/source/backends/macbe/exports.map new file mode 100644 index 000000000000..ba501f9ae076 --- /dev/null +++ b/shell/source/backends/macbe/exports.map @@ -0,0 +1,10 @@ +UDK_3_0_0 { + global: + GetVersionInfo; + component_getImplementationEnvironment; + component_getFactory; + component_writeInfo; + + local: + *; +}; diff --git a/shell/source/backends/macbe/macbackend.cxx b/shell/source/backends/macbe/macbackend.cxx new file mode 100644 index 000000000000..499696cea54c --- /dev/null +++ b/shell/source/backends/macbe/macbackend.cxx @@ -0,0 +1,154 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_shell.hxx" + +#include "macbackend.hxx" +#include "macbelayer.hxx" +#include <com/sun/star/configuration/backend/ComponentChangeEvent.hpp> +#include <uno/current_context.hxx> + +#define MACBE_INET_COMPONENT "org.openoffice.Inet" +#define MACBE_PATHS_COMPONENT "org.openoffice.Office.Paths" + +MacOSXBackend::MacOSXBackend(const uno::Reference<uno::XComponentContext>& xContext) + throw (backend::BackendAccessException) : + ::cppu::WeakImplHelper2 < backend::XSingleLayerStratum, lang::XServiceInfo > (), + m_xContext(xContext) +{ +} + +//------------------------------------------------------------------------------ + +MacOSXBackend::~MacOSXBackend(void) +{ +} + +//------------------------------------------------------------------------------ + +MacOSXBackend* MacOSXBackend::createInstance(const uno::Reference<uno::XComponentContext>& xContext) +{ + return new MacOSXBackend(xContext); +} + +// --------------------------------------------------------------------------------------- + +uno::Reference<backend::XLayer> SAL_CALL MacOSXBackend::getLayer(const rtl::OUString& aComponent, const rtl::OUString& /*aTimestamp*/) + throw (backend::BackendAccessException, lang::IllegalArgumentException) +{ + if( aComponent.equalsAscii( MACBE_INET_COMPONENT ) ) + { + if( ! m_xSystemLayer.is() ) + m_xSystemLayer = new MacOSXLayer( m_xContext ); + + return m_xSystemLayer; + } + else if( aComponent.equalsAscii( MACBE_PATHS_COMPONENT ) ) + { + if( ! m_xPathLayer.is() ) + m_xPathLayer = new MacOSXPathLayer( m_xContext ); + return m_xPathLayer; + } + + return uno::Reference<backend::XLayer>(); +} + +//------------------------------------------------------------------------------ + +uno::Reference<backend::XUpdatableLayer> SAL_CALL + MacOSXBackend::getUpdatableLayer(const rtl::OUString& /*aComponent*/) + throw (backend::BackendAccessException,lang::NoSupportException, + lang::IllegalArgumentException) +{ + throw lang::NoSupportException( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "MacOSXBackend: No Update Operation allowed, Read Only access") ), + *this); + + return NULL; +} + +//------------------------------------------------------------------------------ + +rtl::OUString SAL_CALL MacOSXBackend::getBackendName(void) +{ + return rtl::OUString::createFromAscii("com.sun.star.comp.configuration.backend.MacOSXBackend"); +} + +//------------------------------------------------------------------------------ + +rtl::OUString SAL_CALL MacOSXBackend::getImplementationName(void) + throw (uno::RuntimeException) +{ + return getBackendName(); +} + +//------------------------------------------------------------------------------ + +uno::Sequence<rtl::OUString> SAL_CALL MacOSXBackend::getBackendServiceNames(void) +{ + uno::Sequence<rtl::OUString> aServiceNameList(2); + aServiceNameList[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.MacOSXBackend")); + aServiceNameList[1] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.PlatformBackend")); + + return aServiceNameList; +} + +//------------------------------------------------------------------------------ + +sal_Bool SAL_CALL MacOSXBackend::supportsService(const rtl::OUString& aServiceName) + throw (uno::RuntimeException) +{ + uno::Sequence< rtl::OUString > const svc = getBackendServiceNames(); + + for(sal_Int32 i = 0; i < svc.getLength(); ++i ) + if(svc[i] == aServiceName) + return true; + + return false; +} + +//------------------------------------------------------------------------------ + +uno::Sequence<rtl::OUString> SAL_CALL MacOSXBackend::getSupportedServiceNames(void) + throw (uno::RuntimeException) +{ + return getBackendServiceNames(); +} + +// --------------------------------------------------------------------------------------- + +uno::Sequence<rtl::OUString> SAL_CALL MacOSXBackend::getSupportedComponents(void) +{ + uno::Sequence<rtl::OUString> aSupportedComponentList(2); + aSupportedComponentList[0] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( MACBE_INET_COMPONENT ) ); + aSupportedComponentList[1] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( MACBE_PATHS_COMPONENT ) ); + + return aSupportedComponentList; +} + diff --git a/shell/source/backends/macbe/macbackend.hxx b/shell/source/backends/macbe/macbackend.hxx new file mode 100644 index 000000000000..5c477d1a73e5 --- /dev/null +++ b/shell/source/backends/macbe/macbackend.hxx @@ -0,0 +1,116 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _MACBACKEND_HXX_ +#define _MACBACKEND_HXX_ + +#include <com/sun/star/configuration/backend/XSingleLayerStratum.hpp> +#include <com/sun/star/uno/XComponentContext.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/configuration/backend/XBackendChangesNotifier.hpp> +#include <cppuhelper/implbase2.hxx> +#include <rtl/string.hxx> + +// FIXME: stdio.h only for debugging... +#include <stdio.h> + +namespace css = com::sun::star; +namespace uno = css::uno; +namespace lang = css::lang; +namespace backend = css::configuration::backend; + + +/** + Implements the SingleLayerStratum service. + */ +class MacOSXBackend : public ::cppu::WeakImplHelper2 <backend::XSingleLayerStratum, lang::XServiceInfo > +{ + +public: + + static MacOSXBackend* createInstance(const uno::Reference<uno::XComponentContext>& xContext); + + // XServiceInfo + virtual rtl::OUString SAL_CALL getImplementationName() + throw (uno::RuntimeException); + + virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& aServiceName) + throw (uno::RuntimeException); + + virtual uno::Sequence<rtl::OUString> SAL_CALL getSupportedServiceNames() + throw (uno::RuntimeException); + + /** + Provides the implementation name. + + @return implementation name + */ + static rtl::OUString SAL_CALL getBackendName(void); + + /** + Provides the supported services names + + @return service names + */ + static uno::Sequence<rtl::OUString> SAL_CALL getBackendServiceNames(void); + + /** + Provides the supported component nodes + + @return supported component nodes + */ + static uno::Sequence<rtl::OUString> SAL_CALL getSupportedComponents(void); + + // XSingleLayerStratum + virtual uno::Reference<backend::XLayer> SAL_CALL getLayer(const rtl::OUString& aLayerId, const rtl::OUString& aTimestamp) + throw (backend::BackendAccessException, lang::IllegalArgumentException); + + virtual uno::Reference<backend::XUpdatableLayer> SAL_CALL getUpdatableLayer(const rtl::OUString& aLayerId) + throw (backend::BackendAccessException, lang::NoSupportException, lang::IllegalArgumentException); + +protected: + + /** + Service constructor from a service factory. + + @param xContext component context + */ + MacOSXBackend(const uno::Reference<uno::XComponentContext>& xContext) + throw (backend::BackendAccessException); + + /** Destructor */ + ~MacOSXBackend(void); + +private: + + uno::Reference<uno::XComponentContext> m_xContext; + uno::Reference<backend::XLayer> m_xSystemLayer; + uno::Reference<backend::XLayer> m_xPathLayer; + +}; + +#endif // _MACBACKEND_HXX_ diff --git a/shell/source/backends/macbe/macbe.xml b/shell/source/backends/macbe/macbe.xml new file mode 100644 index 000000000000..85854250cfe3 --- /dev/null +++ b/shell/source/backends/macbe/macbe.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd"> +<module-description xmlns:xlink="http://www.w3.org/1999/xlink"> + <module-name>macbe</module-name> + <component-description> + <author> Pavel JanÃk </author> + <name>com.sun.star.comp.configuration.backend.MacOSXBackend</name> + <description> The </description> + <loader-name>com.sun.star.loader.SharedLibrary</loader-name> + <language>c++</language> + <status value="beta"/> + <supported-service>com.sun.star.comp.configuration.backend.MacOSXBackend</supported-service> + <supported-service>com.sun.star.comp.configuration.backend.PlatformBackend</supported-service> + <service-dependency>...</service-dependency> + <type>com.sun.star.configuration.backend.XBackendChangesListener</type> + <type>com.sun.star.configuration.backend.XBackendChangesNotifier</type> + <type>com.sun.star.configuration.backend.XLayerHandler</type> + <type>com.sun.star.configuration.backend.XSingleLayerStratum</type> + <type>com.sun.star.lang.XMultiComponentFactory</type> + <type>com.sun.star.lang.XServiceInfo</type> + <type>com.sun.star.lang.XSingleComponentFactory</type> + <type>com.sun.star.lang.XTypeProvider</type> + <type>com.sun.star.uno.TypeClass</type> + <type>com.sun.star.uno.XAggregation</type> + <type>com.sun.star.uno.XComponentContext</type> + <type>com.sun.star.uno.XCurrentContext</type> + <type>com.sun.star.uno.XWeak</type> + <type>com.sun.star.registry.XRegistryKey</type> + </component-description> + <project-build-dependency>cppuhelper</project-build-dependency> + <project-build-dependency>cppu</project-build-dependency> + <project-build-dependency>sal</project-build-dependency> + <runtime-module-dependency>cppuhelper3$(COM)</runtime-module-dependency> + <runtime-module-dependency>cppu3</runtime-module-dependency> + <runtime-module-dependency>sal3</runtime-module-dependency> +</module-description> diff --git a/shell/source/backends/macbe/macbecdef.cxx b/shell/source/backends/macbe/macbecdef.cxx new file mode 100644 index 000000000000..82fae97dbdbe --- /dev/null +++ b/shell/source/backends/macbe/macbecdef.cxx @@ -0,0 +1,127 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_shell.hxx" + +#include "macbackend.hxx" +#include <com/sun/star/registry/XRegistryKey.hpp> + +#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_HXX_ +#include <cppuhelper/implementationentry.hxx> +#endif +#include <com/sun/star/uno/XComponentContext.hpp> + +namespace css = com::sun::star; +namespace uno = css::uno; +namespace lang = css::lang; +namespace backend = css::configuration::backend; + +//------------------------------------------------------------------------------ + +static uno::Reference<uno::XInterface> SAL_CALL createMacOSXBackend( + const uno::Reference<uno::XComponentContext>& xContext) +{ + return * MacOSXBackend::createInstance(xContext); +} + +//------------------------------------------------------------------------------ + +static const cppu::ImplementationEntry kImplementations_entries[] = +{ + { + createMacOSXBackend, + MacOSXBackend::getBackendName, + MacOSXBackend::getBackendServiceNames, + cppu::createSingleComponentFactory, + NULL, + 0 + }, + { NULL } +}; + +//------------------------------------------------------------------------------ + +extern "C" void SAL_CALL component_getImplementationEnvironment( + const sal_Char **aEnvTypeName, uno_Environment ** /*aEnvironment*/) { + + *aEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; +} + +//------------------------------------------------------------------------------ + +extern "C" sal_Bool SAL_CALL component_writeInfo(void * /*pServiceManager*/, void *pRegistryKey) { + + using namespace ::com::sun::star::registry; + if (pRegistryKey) + { + try + { + uno::Reference< XRegistryKey > xImplKey = static_cast< XRegistryKey* >( pRegistryKey )->createKey( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + MacOSXBackend::getBackendName() + ); + + // Register associated service names + uno::Reference< XRegistryKey > xServicesKey = xImplKey->createKey( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/UNO/SERVICES") ) + ); + + uno::Sequence<rtl::OUString> sServiceNames = MacOSXBackend::getBackendServiceNames(); + for (sal_Int32 i = 0; i < sServiceNames.getLength(); ++ i) + xServicesKey->createKey(sServiceNames[i]); + + // Register supported components + uno::Reference<XRegistryKey> xComponentKey = xImplKey->createKey( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/DATA/SupportedComponents") ) + ); + + xComponentKey->setAsciiListValue( MacOSXBackend::getSupportedComponents() ); + + return sal_True; + } + catch( InvalidRegistryException& ) + { + OSL_ENSURE(sal_False, "InvalidRegistryException caught"); + } + } + return sal_False; +} + +//------------------------------------------------------------------------------ + +extern "C" void *component_getFactory( const sal_Char *aImplementationName, void *aServiceManager, void *aRegistryKey) +{ + + return cppu::component_getFactoryHelper( + aImplementationName, + aServiceManager, + aRegistryKey, + kImplementations_entries); +} + +//------------------------------------------------------------------------------ + diff --git a/shell/source/backends/macbe/macbelayer.cxx b/shell/source/backends/macbe/macbelayer.cxx new file mode 100644 index 000000000000..113f7f964f54 --- /dev/null +++ b/shell/source/backends/macbe/macbelayer.cxx @@ -0,0 +1,440 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_shell.hxx" + +// For MAXHOSTNAMELEN constant +#include <sys/param.h> + +#include <premac.h> +#include <SystemConfiguration/SystemConfiguration.h> +#include <Foundation/NSPathUtilities.h> +#include <postmac.h> + +#include "macbelayer.hxx" + +#include "rtl/ustrbuf.hxx" +#include "osl/file.h" + +#define SPACE ' ' +#define SEMI_COLON ';' + +typedef struct +{ + rtl::OUString Server; + sal_Int32 Port; +} ProxyEntry; + +typedef enum { + sHTTP, + sHTTPS, + sFTP +} ServiceType; + +//------------------------------------------------------------------------ +// helper functions +//------------------------------------------------------------------------ + +namespace // private +{ + +/* + * Returns current proxy settings for selected service type (HTTP or + * FTP) as a C string (in the buffer specified by host and hostSize) + * and a port number. + */ + +bool GetProxySetting(ServiceType sType, char *host, size_t hostSize, UInt16 *port) +{ + bool result; + CFDictionaryRef proxyDict; + CFNumberRef enableNum; + int enable; + CFStringRef hostStr; + CFNumberRef portNum; + int portInt; + + proxyDict = SCDynamicStoreCopyProxies(NULL); + + if (!proxyDict) + return false; + + CFStringRef proxiesEnable; + CFStringRef proxiesProxy; + CFStringRef proxiesPort; + + switch ( sType ) + { + case sHTTP : proxiesEnable = kSCPropNetProxiesHTTPEnable; + proxiesProxy = kSCPropNetProxiesHTTPProxy; + proxiesPort = kSCPropNetProxiesHTTPPort; + break; + case sHTTPS: proxiesEnable = kSCPropNetProxiesHTTPSEnable; + proxiesProxy = kSCPropNetProxiesHTTPSProxy; + proxiesPort = kSCPropNetProxiesHTTPSPort; + break; + default: proxiesEnable = kSCPropNetProxiesFTPEnable; + proxiesProxy = kSCPropNetProxiesFTPProxy; + proxiesPort = kSCPropNetProxiesFTPPort; + break; + } + // Proxy enabled? + enableNum = (CFNumberRef) CFDictionaryGetValue( proxyDict, + proxiesEnable ); + + result = (enableNum != NULL) && (CFGetTypeID(enableNum) == CFNumberGetTypeID()); + + if (result) + result = CFNumberGetValue(enableNum, kCFNumberIntType, &enable) && (enable != 0); + + // Proxy enabled -> get hostname + if (result) + { + hostStr = (CFStringRef) CFDictionaryGetValue( proxyDict, + proxiesProxy ); + + result = (hostStr != NULL) && (CFGetTypeID(hostStr) == CFStringGetTypeID()); + } + + if (result) + result = CFStringGetCString(hostStr, host, (CFIndex) hostSize, kCFStringEncodingASCII); + + // Get proxy port + if (result) + { + portNum = (CFNumberRef) CFDictionaryGetValue( proxyDict, + proxiesPort ); + + result = (portNum != NULL) && (CFGetTypeID(portNum) == CFNumberGetTypeID()); + } + else + { + CFRelease(proxyDict); + return false; + } + + if (result) + result = CFNumberGetValue(portNum, kCFNumberIntType, &portInt); + + if (result) + *port = (UInt16) portInt; + + if (proxyDict) + CFRelease(proxyDict); + + if (!result) + { + *host = 0; + *port = 0; + } + + return result; +} + +} // end private namespace + +//------------------------------------------------------------------------------ + +MacOSXLayer::MacOSXLayer( const uno::Reference<uno::XComponentContext>& xContext) +{ + //Create instance of LayerContentDescriber Service + rtl::OUString const k_sLayerDescriberService( + RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.configuration.backend.LayerDescriber")); + + typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber; + uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager(); + if( xServiceManager.is() ) + { + m_xLayerContentDescriber = LayerDescriber::query( + xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext)); + } + else + { + OSL_TRACE("Could not retrieve ServiceManager"); + } + +} + +//------------------------------------------------------------------------------ + +rtl::OUString CFStringToOUString(const CFStringRef sOrig) { + CFRetain(sOrig); + + CFIndex nStringLen = CFStringGetLength(sOrig)+1; + + // Allocate a c string buffer + char sBuffer[nStringLen]; + + CFStringGetCString(sOrig, sBuffer, nStringLen, kCFStringEncodingASCII); + + CFRelease(sOrig); + + return rtl::OUString::createFromAscii((sal_Char*)sBuffer); +} + +void SAL_CALL MacOSXLayer::readData( + const uno::Reference<backend::XLayerHandler>& xHandler) + throw ( backend::MalformedDataException, + lang::NullPointerException, + lang::WrappedTargetException, + uno::RuntimeException) +{ + + if (m_xLayerContentDescriber.is()) + { + rtl::OUString aProxyBypassList; + + CFArrayRef rExceptionsList; + CFDictionaryRef rProxyDict = SCDynamicStoreCopyProxies(NULL); + + if (!rProxyDict) + rExceptionsList = false; + else + rExceptionsList = (CFArrayRef) CFDictionaryGetValue(rProxyDict, kSCPropNetProxiesExceptionsList); + + if (rExceptionsList) + { + for (CFIndex idx = 0; idx < CFArrayGetCount(rExceptionsList); idx++) + { + CFStringRef rException = (CFStringRef) CFArrayGetValueAtIndex(rExceptionsList, idx); + + if (idx>0) + aProxyBypassList += rtl::OUString::createFromAscii( ";" ); + + aProxyBypassList += CFStringToOUString(rException); + } + } + + if (rProxyDict) + CFRelease(rProxyDict); + + // override default for ProxyType, which is "0" meaning "No proxies". + // CAUTION: if you add properties, please increase the sequence size here ! + uno::Sequence<backend::PropertyInfo> aPropInfoList(8); + sal_Int32 nProperties = 1; + + aPropInfoList[0].Name = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetProxyType") ); + aPropInfoList[0].Type = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "int" ) ); + aPropInfoList[0].Protected = sal_False; + aPropInfoList[0].Value = uno::makeAny( nProperties ); + + // fill proxy bypass list + if( aProxyBypassList.getLength() > 0 ) + { + aPropInfoList[nProperties].Name = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetNoProxy") ); + aPropInfoList[nProperties].Type = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "string" ) ); + aPropInfoList[nProperties].Protected = sal_False; + aPropInfoList[nProperties++].Value = uno::makeAny( aProxyBypassList.replace( SPACE, SEMI_COLON ) ); + } + + ProxyEntry aHttpProxy; + ProxyEntry aHttpsProxy; + ProxyEntry aFtpProxy; + + char host[MAXHOSTNAMELEN]; + UInt16 port; + bool retVal; + + retVal = GetProxySetting(sHTTP, host, 100, &port); + + if (retVal) + { + aHttpProxy.Server = rtl::OUString::createFromAscii( host ); + aHttpProxy.Port = port; + } + + retVal = GetProxySetting(sHTTPS, host, 100, &port); + + if (retVal) + { + aHttpsProxy.Server = rtl::OUString::createFromAscii( host ); + aHttpsProxy.Port = port; + } + + retVal = GetProxySetting(sFTP, host, 100, &port); + + if (retVal) + { + aFtpProxy.Server = rtl::OUString::createFromAscii( host ); + aFtpProxy.Port = port; + } + + // http proxy name + if( aHttpProxy.Server.getLength() > 0 ) + { + aPropInfoList[nProperties].Name = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPProxyName") ); + aPropInfoList[nProperties].Type = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "string" ) ); + aPropInfoList[nProperties].Protected = sal_False; + aPropInfoList[nProperties++].Value = uno::makeAny( aHttpProxy.Server ); + } + + // http proxy port + if( aHttpProxy.Port > 0 ) + { + aPropInfoList[nProperties].Name = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPProxyPort") ); + aPropInfoList[nProperties].Type = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "int" ) ); + aPropInfoList[nProperties].Protected = sal_False; + aPropInfoList[nProperties++].Value = uno::makeAny( aHttpProxy.Port ); + } + + // https proxy name + if( aHttpsProxy.Server.getLength() > 0 ) + { + aPropInfoList[nProperties].Name = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPSProxyName") ); + aPropInfoList[nProperties].Type = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "string" ) ); + aPropInfoList[nProperties].Protected = sal_False; + aPropInfoList[nProperties++].Value = uno::makeAny( aHttpsProxy.Server ); + } + + // https proxy port + if( aHttpsProxy.Port > 0 ) + { + aPropInfoList[nProperties].Name = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPSProxyPort") ); + aPropInfoList[nProperties].Type = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "int" ) ); + aPropInfoList[nProperties].Protected = sal_False; + aPropInfoList[nProperties++].Value = uno::makeAny( aHttpsProxy.Port ); + } + + // ftp proxy name + if( aFtpProxy.Server.getLength() > 0 ) + { + aPropInfoList[nProperties].Name = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetFTPProxyName") ); + aPropInfoList[nProperties].Type = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "string" ) ); + aPropInfoList[nProperties].Protected = sal_False; + aPropInfoList[nProperties++].Value = uno::makeAny( aFtpProxy.Server ); + } + + // ftp proxy port + if( aFtpProxy.Port > 0 ) + { + aPropInfoList[nProperties].Name = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetFTPProxyPort") ); + aPropInfoList[nProperties].Type = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "int" ) ); + aPropInfoList[nProperties].Protected = sal_False; + aPropInfoList[nProperties++].Value = uno::makeAny( aFtpProxy.Port ); + } + + // resize the property info list appropriately + aPropInfoList.realloc(nProperties); + + m_xLayerContentDescriber->describeLayer(xHandler, aPropInfoList); + } + else + { + OSL_TRACE("Could not create com.sun.star.configuration.backend.LayerContentDescriber Service"); + } +} + +//------------------------------------------------------------------------------ + +rtl::OUString SAL_CALL MacOSXLayer::getTimestamp(void) + throw (uno::RuntimeException) +{ + // FIXME: Always new timestamp!? + rtl::OUString aTimestamp = rtl::OUString::valueOf( time(NULL) ); + + return aTimestamp; +} + +//------------------------------------------------------------------------------ + +rtl::OUString GetOUString( NSString* pStr ) +{ + if( ! pStr ) + return rtl::OUString(); + int nLen = [pStr length]; + if( nLen == 0 ) + return rtl::OUString(); + + rtl::OUStringBuffer aBuf( nLen+1 ); + aBuf.setLength( nLen ); + [pStr getCharacters: const_cast<sal_Unicode*>(aBuf.getStr())]; + return aBuf.makeStringAndClear(); +} + +void SAL_CALL MacOSXPathLayer::readData( + const uno::Reference<backend::XLayerHandler>& i_xHandler) + throw ( backend::MalformedDataException, + lang::NullPointerException, + lang::WrappedTargetException, + uno::RuntimeException) +{ + if (m_xLayerContentDescriber.is()) + { + rtl::OUString aDocDir; + NSArray* pPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, true ); + if( pPaths && [pPaths count] > 0 ) + { + aDocDir = GetOUString( [pPaths objectAtIndex: 0] ); + + rtl::OUString aDocURL; + if( aDocDir.getLength() > 0 && + osl_getFileURLFromSystemPath( aDocDir.pData, &aDocURL.pData ) == osl_File_E_None ) + { + uno::Sequence<backend::PropertyInfo> aPropInfoList(1); + + aPropInfoList[0].Name = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Paths/Variables/Work" ) ); + aPropInfoList[0].Type = rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "string" ) ); + aPropInfoList[0].Protected = sal_False; + aPropInfoList[0].Value <<= aDocURL; + + m_xLayerContentDescriber->describeLayer(i_xHandler, aPropInfoList); + } + else + { + OSL_TRACE( "user documents list contains empty file path or conversion failed" ); + } + } + else + { + OSL_TRACE( "Got nil or empty list of user document directories" ); + } + } + else + { + OSL_TRACE("Could not create com.sun.star.configuration.backend.LayerContentDescriber Service"); + } +} + diff --git a/shell/source/backends/macbe/macbelayer.hxx b/shell/source/backends/macbe/macbelayer.hxx new file mode 100644 index 000000000000..06e80632da50 --- /dev/null +++ b/shell/source/backends/macbe/macbelayer.hxx @@ -0,0 +1,101 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _MACBELAYER_HXX_ +#define _MACBELAYER_HXX_ + +#include <com/sun/star/uno/XComponentContext.hpp> +#include <com/sun/star/configuration/backend/XLayer.hpp> +#include <com/sun/star/configuration/backend/PropertyInfo.hpp> +#include <com/sun/star/configuration/backend/BackendAccessException.hpp> + +#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_ +#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp> +#endif +#include <com/sun/star/util/XTimeStamped.hpp> +#include <com/sun/star/uno/Sequence.hxx> +#include <cppuhelper/implbase2.hxx> + +namespace css = com::sun::star; +namespace uno = css::uno; +namespace lang = css::lang; +namespace backend = css::configuration::backend; +namespace util = css::util; + +/** + Implementation of the XLayer interfaces for fixed values + */ + +class MacOSXLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped> +{ +public: + + /** + Constructor given the requested component name + + @param aTimestamp timestamp indicating last modifictaion + */ + MacOSXLayer(const uno::Reference<uno::XComponentContext>& xContext); + + /** Destructor */ + virtual ~MacOSXLayer(void) {} + + // XLayer + virtual void SAL_CALL readData(const uno::Reference<backend::XLayerHandler>& xHandler) + throw ( backend::MalformedDataException, + lang::NullPointerException, + lang::WrappedTargetException, + uno::RuntimeException); + + // XTimeStamped + virtual rtl::OUString SAL_CALL getTimestamp(void) + throw (uno::RuntimeException); + +protected: + + rtl::OUString m_aComponent; + + uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber; + +}; + +class MacOSXPathLayer : public MacOSXLayer +{ + public: + MacOSXPathLayer(const uno::Reference<uno::XComponentContext>& i_xContext) : + MacOSXLayer( i_xContext ) {} + virtual ~MacOSXPathLayer() {} + + // XLayer + virtual void SAL_CALL readData(const uno::Reference<backend::XLayerHandler>& i_xHandler) + throw ( backend::MalformedDataException, + lang::NullPointerException, + lang::WrappedTargetException, + uno::RuntimeException); +}; + +#endif // _MACBELAYER_HXX_ diff --git a/shell/source/backends/macbe/makefile.mk b/shell/source/backends/macbe/makefile.mk new file mode 100644 index 000000000000..1d5d68a1f615 --- /dev/null +++ b/shell/source/backends/macbe/makefile.mk @@ -0,0 +1,79 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=..$/..$/.. + +PRJNAME=shell +TARGET=macbe + +LIBTARGET=NO +ENABLE_EXCEPTIONS=TRUE + +COMP1TYPELIST=$(TARGET) + +# --- Settings --- + +.INCLUDE : settings.mk + +DLLPRE = + +# --- Files --- + +.IF "$(OS)" != "MACOSX" + +dummy: + @echo "Nothing to build for OS $(OS)." + +.ELSE + +CFLAGSCXX+=$(OBJCXXFLAGS) + +SLOFILES= \ + $(SLO)$/macbecdef.obj \ + $(SLO)$/macbackend.obj \ + $(SLO)$/macbelayer.obj + +SHL1TARGET=$(TARGET)1.uno +SHL1OBJS=$(SLOFILES) +SHL1DEF=$(MISC)$/$(SHL1TARGET).def + +SHL1IMPLIB=i$(SHL1TARGET) +SHL1STDLIBS= \ + $(CPPUHELPERLIB) \ + $(CPPULIB) \ + $(SALLIB) \ + -framework Cocoa -framework SystemConfiguration + +SHL1VERSIONMAP=exports.map +SHL1DEF=$(MISC)$/$(SHL1TARGET).def +DEF1NAME=$(SHL1TARGET) + +# --- Targets --- + +.INCLUDE : target.mk + +.ENDIF # "$(OS)" != "MACOSX" |