2000-09-18 14:29:57 +00:00
/*************************************************************************
*
* $ RCSfile : javavm . cxx , v $
*
2002-01-20 19:11:04 +00:00
* $ Revision : 1.27 $
2000-09-18 14:29:57 +00:00
*
2002-01-20 19:11:04 +00:00
* last change : $ Author : cp $ $ Date : 2002 - 01 - 20 20 : 11 : 04 $
2000-09-18 14:29:57 +00:00
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc . , October , 2000
*
* GNU Lesser General Public License Version 2.1
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* Copyright 2000 by Sun Microsystems , Inc .
* 901 San Antonio Road , Palo Alto , CA 94303 , USA
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 , as published by the Free Software Foundation .
*
* This library 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 for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston ,
* MA 02111 - 1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 ( the " License " ) ; You may not use this file
* except in compliance with the License . You may obtain a copy of the
* License at http : //www.openoffice.org/license.html.
*
* Software provided under this License is provided on an " AS IS " basis ,
* WITHOUT WARRANTY OF ANY KIND , EITHER EXPRESSED OR IMPLIED , INCLUDING ,
* WITHOUT LIMITATION , WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS ,
* MERCHANTABLE , FIT FOR A PARTICULAR PURPOSE , OR NON - INFRINGING .
* See the License for the specific provisions governing your rights and
* obligations concerning the Software .
*
* The Initial Developer of the Original Code is : Sun Microsystems , Inc .
*
* Copyright : 2000 by Sun Microsystems , Inc .
*
* All Rights Reserved .
*
* Contributor ( s ) : _______________________________________
*
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-06-11 14:31:34 +00:00
# ifdef UNX
# include <signal.h>
# endif
2000-09-18 14:29:57 +00:00
# include <time.h>
2000-09-28 16:34:41 +00:00
# include <osl/diagnose.h>
# include <osl/file.hxx>
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
# include <rtl/process.h>
2000-09-18 14:29:57 +00:00
2001-03-16 15:01:05 +00:00
# ifndef _OSL_MODULE_HXX_
# include <osl/module.hxx>
# endif
2000-09-18 14:29:57 +00:00
2001-03-16 15:01:05 +00:00
# ifndef _OSL_CONDITN_HXX_
# include <osl/conditn.hxx>
# endif
2000-09-18 14:29:57 +00:00
2001-03-16 15:24:27 +00:00
# ifndef _THREAD_HXX_
# include <osl/thread.hxx>
# endif
2000-09-28 16:34:41 +00:00
# include <uno/environment.h>
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
# include <cppuhelper/factory.hxx>
2001-06-22 15:21:02 +00:00
# include <cppuhelper/implementationentry.hxx>
2001-10-31 15:03:47 +00:00
# include <cppuhelper/implbase4.hxx>
2000-09-28 16:34:41 +00:00
# include <com/sun/star/uno/Sequence.hxx>
2000-09-18 14:29:57 +00:00
# include <com/sun/star/lang/XServiceInfo.hpp>
# include <com/sun/star/lang/XMultiServiceFactory.hpp>
2001-10-31 15:03:47 +00:00
# include <com/sun/star/lang/XComponent.hpp>
2000-09-18 14:29:57 +00:00
# include <com/sun/star/java/XJavaVM.hpp>
# include <com/sun/star/java/XJavaThreadRegister_11.hpp>
# include <com/sun/star/registry/XRegistryKey.hpp>
# include <com/sun/star/registry/XSimpleRegistry.hpp>
# include <com/sun/star/registry/InvalidRegistryException.hpp>
2001-10-31 15:03:47 +00:00
# include <com/sun/star/beans/PropertyValue.hpp>
# include <com/sun/star/container/XContainerListener.hpp>
# include <com/sun/star/container/XContainer.hpp>
2000-09-28 16:34:41 +00:00
# include <bridges/java/jvmcontext.hxx>
2000-09-18 14:29:57 +00:00
# include "jvmargs.hxx"
2000-09-28 16:34:41 +00:00
// Properties of the javavm can be put
// as a komma separated list in this
// environment variable
# define PROPERTIES_ENV "OO_JAVA_PROPERTIES"
2000-09-18 14:29:57 +00:00
# ifdef UNIX
# define INI_FILE "javarc"
2001-03-09 03:35:21 +00:00
# ifdef MACOSX
# define DEF_JAVALIB "JavaVM.framework"
# else
2000-09-28 16:34:41 +00:00
# define DEF_JAVALIB "libjvm.so"
2001-03-09 03:35:21 +00:00
# endif
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
# define TIMEZONE "MEZ"
2000-09-18 14:29:57 +00:00
# else
2000-09-28 16:34:41 +00:00
# define INI_FILE "java.ini"
# define DEF_JAVALIB "javai.dll"
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
# define TIMEZONE "MET"
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
# endif
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
using namespace com : : sun : : star : : uno ;
using namespace com : : sun : : star : : lang ;
using namespace com : : sun : : star : : java ;
using namespace com : : sun : : star : : registry ;
2001-10-31 15:03:47 +00:00
using namespace com : : sun : : star : : beans ;
using namespace com : : sun : : star : : container ;
2000-09-28 16:34:41 +00:00
using namespace rtl ;
using namespace cppu ;
using namespace osl ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
namespace stoc_javavm {
2001-06-22 15:21:02 +00:00
2001-11-12 10:22:45 +00:00
static void getINetPropsFromConfig ( JVM * pjvm ,
const Reference < XMultiComponentFactory > & xSMgr ,
const Reference < XComponentContext > & xCtx ) throw ( Exception ) ;
2001-06-22 15:21:02 +00:00
static Sequence < OUString > javavm_getSupportedServiceNames ( )
{
static Sequence < OUString > * pNames = 0 ;
if ( ! pNames )
{
MutexGuard guard ( Mutex : : getGlobalMutex ( ) ) ;
if ( ! pNames )
{
static Sequence < OUString > seqNames ( 1 ) ;
seqNames . getArray ( ) [ 0 ] = OUString (
RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.java.JavaVirtualMachine " ) ) ;
pNames = & seqNames ;
}
}
return * pNames ;
}
static OUString javavm_getImplementationName ( )
{
static OUString * pImplName = 0 ;
if ( ! pImplName )
{
MutexGuard guard ( Mutex : : getGlobalMutex ( ) ) ;
if ( ! pImplName )
{
static OUString implName (
RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.comp.stoc.JavaVirtualMachine " ) ) ;
pImplName = & implName ;
}
}
return * pImplName ;
}
2000-09-28 16:34:41 +00:00
static jint JNICALL vm_vfprintf ( FILE * fp , const char * format , va_list args ) {
# ifdef DEBUG
char buff [ 1024 ] ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
vsprintf ( buff , format , args ) ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
OSL_TRACE ( " %s " , buff ) ;
return strlen ( buff ) ;
# else
return 0 ;
# endif
2000-09-18 14:29:57 +00:00
}
2000-09-28 16:34:41 +00:00
static void JNICALL vm_exit ( jint code ) {
OSL_TRACE ( " vm_exit: %d \n " , code ) ;
2000-09-18 14:29:57 +00:00
}
2000-09-28 16:34:41 +00:00
static void JNICALL vm_abort ( ) {
OSL_TRACE ( " vm_abort \n " ) ;
2001-01-31 15:43:39 +00:00
abort ( ) ;
2000-09-18 14:29:57 +00:00
}
2000-11-14 13:07:06 +00:00
typedef : : std : : hash_map < sal_uInt32 , sal_uInt32 > UINT32_UINT32_HashMap ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
class JavaVirtualMachine_Impl ;
2000-09-18 14:29:57 +00:00
2001-03-16 15:24:27 +00:00
class OCreatorThread : public Thread {
2000-09-28 16:34:41 +00:00
JavaVirtualMachine_Impl * _pJavaVirtualMachine_Impl ;
JavaVM * _pJVM ;
2000-09-18 14:29:57 +00:00
2001-03-16 15:01:05 +00:00
Condition _start_Condition ;
Condition _wait_Condition ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
JVM _jvm ;
RuntimeException _runtimeException ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
protected :
virtual void SAL_CALL run ( ) throw ( ) ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
public :
OCreatorThread ( JavaVirtualMachine_Impl * pJavaVirtualMachine_Impl ) throw ( ) ;
JavaVM * createJavaVM ( const JVM & jvm ) throw ( RuntimeException ) ;
void disposeJavaVM ( ) throw ( ) ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
} ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
class JavaVirtualMachine_Impl : public WeakImplHelper4 < XJavaVM , XJavaThreadRegister_11 ,
XServiceInfo , XContainerListener > {
2000-09-28 16:34:41 +00:00
Mutex _Mutex ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
OCreatorThread _creatorThread ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
uno_Environment * _pJava_environment ;
JavaVMContext * _pVMContext ;
2000-09-18 14:29:57 +00:00
2001-06-22 15:21:02 +00:00
Reference < XComponentContext > _xCtx ;
Reference < XMultiComponentFactory > _xSMgr ;
2000-09-18 14:29:57 +00:00
2001-11-19 11:00:15 +00:00
// For Inet settings
2001-10-31 15:03:47 +00:00
Reference < XInterface > _xConfigurationAccess ;
2001-11-19 11:00:15 +00:00
// for Java settings
Reference < XInterface > _xConfigurationAccess2 ;
2001-03-16 15:01:05 +00:00
Module _javaLib ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
void registerConfigChangesListener ( ) ;
2000-09-28 16:34:41 +00:00
public :
2000-12-19 09:20:57 +00:00
OUString _error ;
2000-09-18 14:29:57 +00:00
2001-06-22 15:21:02 +00:00
JavaVirtualMachine_Impl ( const Reference < XComponentContext > & xCtx ) throw ( ) ;
2000-09-28 16:34:41 +00:00
~ JavaVirtualMachine_Impl ( ) throw ( ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
2000-09-28 16:34:41 +00:00
// XJavaVM
virtual Any SAL_CALL getJavaVM ( const Sequence < sal_Int8 > & processID ) throw ( RuntimeException ) ;
virtual sal_Bool SAL_CALL isVMStarted ( void ) throw ( RuntimeException ) ;
virtual sal_Bool SAL_CALL isVMEnabled ( void ) throw ( RuntimeException ) ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
// XJavaThreadRegister_11
virtual sal_Bool SAL_CALL isThreadAttached ( void ) throw ( RuntimeException ) ;
virtual void SAL_CALL registerThread ( void ) throw ( RuntimeException ) ;
virtual void SAL_CALL revokeThread ( void ) throw ( RuntimeException ) ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
// XServiceInfo
virtual OUString SAL_CALL getImplementationName ( ) throw ( RuntimeException ) ;
virtual sal_Bool SAL_CALL supportsService ( const OUString & ServiceName ) throw ( RuntimeException ) ;
virtual Sequence < OUString > SAL_CALL getSupportedServiceNames ( void ) throw ( RuntimeException ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
// XContainerListener
virtual void SAL_CALL elementInserted ( const ContainerEvent & Event ) throw ( RuntimeException ) ;
virtual void SAL_CALL elementRemoved ( const ContainerEvent & Event ) throw ( RuntimeException ) ;
virtual void SAL_CALL elementReplaced ( const ContainerEvent & Event ) throw ( RuntimeException ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
// XEventListener
virtual void SAL_CALL disposing ( const EventObject & Source ) throw ( RuntimeException ) ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
JavaVM * createJavaVM ( const JVM & jvm ) throw ( RuntimeException ) ;
void disposeJavaVM ( ) throw ( ) ;
2001-11-12 10:22:45 +00:00
protected :
void setINetSettingsInVM ( sal_Bool set_reset ) ;
2000-09-28 16:34:41 +00:00
} ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
OCreatorThread : : OCreatorThread ( JavaVirtualMachine_Impl * pJavaVirtualMachine_Impl ) throw ( )
: _pJVM ( NULL )
2000-09-18 14:29:57 +00:00
{
2000-09-28 16:34:41 +00:00
_pJavaVirtualMachine_Impl = pJavaVirtualMachine_Impl ;
2000-09-18 14:29:57 +00:00
}
2000-09-28 16:34:41 +00:00
void OCreatorThread : : run ( ) throw ( ) {
_start_Condition . wait ( ) ;
_start_Condition . reset ( ) ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
try {
_pJVM = _pJavaVirtualMachine_Impl - > createJavaVM ( _jvm ) ;
2000-09-18 14:29:57 +00:00
}
2000-09-28 16:34:41 +00:00
catch ( RuntimeException & runtimeException ) {
_runtimeException = runtimeException ;
2000-09-18 14:29:57 +00:00
}
2000-09-28 16:34:41 +00:00
_wait_Condition . set ( ) ;
2000-09-18 14:29:57 +00:00
2000-12-19 09:20:57 +00:00
if ( _pJVM ) {
2000-09-28 16:34:41 +00:00
# if defined(WNT) || defined(OS2)
2000-12-19 09:20:57 +00:00
suspend ( ) ;
2000-09-18 14:29:57 +00:00
# else
2000-09-28 16:34:41 +00:00
_start_Condition . wait ( ) ;
_start_Condition . reset ( ) ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
_pJavaVirtualMachine_Impl - > disposeJavaVM ( ) ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
_wait_Condition . set ( ) ;
# endif
2000-12-19 09:20:57 +00:00
}
2000-09-28 16:34:41 +00:00
}
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
JavaVM * OCreatorThread : : createJavaVM ( const JVM & jvm ) throw ( RuntimeException ) {
_jvm = jvm ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
if ( ! _pJVM ) {
2000-12-19 09:20:57 +00:00
create ( ) ;
2000-09-28 16:34:41 +00:00
_start_Condition . set ( ) ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
_wait_Condition . wait ( ) ;
_wait_Condition . reset ( ) ;
2000-09-18 14:29:57 +00:00
2000-12-19 09:20:57 +00:00
if ( ! _pJVM )
throw _runtimeException ;
}
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
return _pJVM ;
}
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
void OCreatorThread : : disposeJavaVM ( ) throw ( ) {
_start_Condition . set ( ) ; // start disposing vm
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
# ifdef UNX
_wait_Condition . wait ( ) ; // wait until disposed
_wait_Condition . reset ( ) ;
2000-09-18 14:29:57 +00:00
# endif
}
2001-10-31 15:03:47 +00:00
2000-09-28 16:34:41 +00:00
// XServiceInfo
2001-10-31 15:03:47 +00:00
OUString SAL_CALL JavaVirtualMachine_Impl : : getImplementationName ( ) throw ( RuntimeException )
{
return javavm_getImplementationName ( ) ;
}
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
// XServiceInfo
2001-10-31 15:03:47 +00:00
sal_Bool SAL_CALL JavaVirtualMachine_Impl : : supportsService ( const OUString & ServiceName ) throw ( RuntimeException ) {
Sequence < OUString > aSNL = getSupportedServiceNames ( ) ;
const OUString * pArray = aSNL . getConstArray ( ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
for ( sal_Int32 i = 0 ; i < aSNL . getLength ( ) ; + + i )
if ( pArray [ i ] = = ServiceName )
return sal_True ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
return sal_False ;
}
// XServiceInfo
Sequence < OUString > SAL_CALL JavaVirtualMachine_Impl : : getSupportedServiceNames ( ) throw ( RuntimeException )
{
return javavm_getSupportedServiceNames ( ) ;
}
// XContainerListener
void SAL_CALL JavaVirtualMachine_Impl : : elementInserted ( const ContainerEvent & Event )
throw ( RuntimeException )
{
}
// XContainerListener
void SAL_CALL JavaVirtualMachine_Impl : : elementRemoved ( const ContainerEvent & Event )
throw ( RuntimeException )
{
}
// XContainerListener
// If a user changes the setting, for example for proxy settings, then this function
// will be called from the configuration manager. Even if the .xml file does not contain
// an entry yet and that entry has to be inserted, this function will be called.
// We call java.lang.System.setProperty for the new values
void SAL_CALL JavaVirtualMachine_Impl : : elementReplaced ( const ContainerEvent & Event )
throw ( RuntimeException )
{
MutexGuard aGuard ( _Mutex ) ;
OUString sAccessor ;
Event . Accessor > > = sAccessor ;
OUString sPropertyName ;
OUString sPropertyValue ;
OUString sPropertyName2 ;
2001-11-22 12:17:57 +00:00
sal_Bool bSecurityChanged = sal_False ;
2001-11-12 10:22:45 +00:00
sal_Bool bDone = sal_False ;
2001-10-31 15:03:47 +00:00
if ( sAccessor = = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ooInetFTPProxyName " ) ) )
{
sPropertyName = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ftp.proxyHost " ) ) ;
Event . Element > > = sPropertyValue ;
}
else if ( sAccessor = = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ooInetFTPProxyPort " ) ) )
{
sPropertyName = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ftp.proxyPort " ) ) ;
sPropertyValue = OUString : : valueOf ( * ( sal_Int32 * ) Event . Element . getValue ( ) ) ;
2000-09-18 14:29:57 +00:00
}
2001-10-31 15:03:47 +00:00
else if ( sAccessor = = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ooInetHTTPProxyName " ) ) )
{
sPropertyName = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " http.proxyHost " ) ) ;
Event . Element > > = sPropertyValue ;
}
else if ( sAccessor = = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ooInetHTTPProxyPort " ) ) )
{
sPropertyName = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " http.proxyPort " ) ) ;
sPropertyValue = OUString : : valueOf ( * ( sal_Int32 * ) Event . Element . getValue ( ) ) ;
}
else if ( sAccessor = = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ooInetNoProxy " ) ) )
{
sPropertyName = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ftp.nonProxyHosts " ) ) ;
sPropertyName2 = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " http.nonProxyHosts " ) ) ;
Event . Element > > = sPropertyValue ;
sPropertyValue = sPropertyValue . replace ( ( sal_Unicode ) ' ; ' , ( sal_Unicode ) ' | ' ) ;
}
2001-11-12 10:22:45 +00:00
/* else if (sAccessor == OUString(RTL_CONSTASCII_USTRINGPARAM("ooInetSOCKSProxyName")))
2001-10-31 15:03:47 +00:00
{
sPropertyName = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " socksProxyHost " ) ) ;
Event . Element > > = sPropertyValue ;
}
else if ( sAccessor = = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ooInetSOCKSProxyPort " ) ) )
{
sPropertyName = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " socksProxyPort " ) ) ;
sPropertyValue = OUString : : valueOf ( * ( sal_Int32 * ) Event . Element . getValue ( ) ) ;
}
2001-11-12 10:22:45 +00:00
*/ else if ( sAccessor = = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ooInetProxyType " ) ) )
{
//Proxy none, manually
sal_Int32 value ;
Event . Element > > = value ;
setINetSettingsInVM ( value ) ;
bDone = sal_True ;
}
2001-11-19 11:00:15 +00:00
else if ( sAccessor = = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " NetAccess " ) ) )
{
2001-11-22 12:17:57 +00:00
bSecurityChanged = sal_True ;
2001-11-19 11:00:15 +00:00
sPropertyName = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " appletviewer.security.mode " ) ) ;
sal_Int32 val ;
if ( Event . Element > > = val )
{
switch ( val )
{
case 0 : sPropertyValue = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " unrestricted " ) ) ;
break ;
case 1 : sPropertyValue = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " none " ) ) ;
break ;
case 2 : sPropertyValue = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " host " ) ) ;
break ;
}
}
else
return ;
}
else if ( sAccessor = = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Security " ) ) )
{
2001-11-22 12:17:57 +00:00
bSecurityChanged = sal_True ;
2001-11-19 11:00:15 +00:00
sPropertyName = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " stardiv.security.disableSecurity " ) ) ;
sal_Bool val ;
if ( Event . Element > > = val )
{
if ( val )
sPropertyValue = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " false " ) ) ;
else
sPropertyValue = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " true " ) ) ;
}
else
return ;
}
2001-10-31 15:03:47 +00:00
else
return ;
2000-09-18 14:29:57 +00:00
2001-11-12 10:22:45 +00:00
if ( ! bDone & & _pVMContext & & _pVMContext - > _pJavaVM )
2001-06-22 15:21:02 +00:00
{
2001-10-31 15:03:47 +00:00
JNIEnv * pJNIEnv = NULL ;
sal_Bool bThreadAttached = sal_False ;
jint ret = _pVMContext - > _pJavaVM - > AttachCurrentThread ( ( void * * ) & pJNIEnv , ( void * ) NULL ) ;
OSL_ENSURE ( ! ret , " JavaVM could not attach current thread to VM " ) ;
if ( ! _pVMContext - > isThreadAttached ( ) )
{
bThreadAttached = sal_True ;
}
// call java.lang.System.setProperty
// String setProperty( String key, String value)
jclass jcSystem = pJNIEnv - > FindClass ( " java/lang/System " ) ;
2001-11-12 10:22:45 +00:00
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:FindClass java/lang/System " ) ) , Reference < XInterface > ( ) ) ;
2001-10-31 15:03:47 +00:00
jmethodID jmSetProps = pJNIEnv - > GetStaticMethodID ( jcSystem , " setProperty " , " (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; " ) ;
2001-11-12 10:22:45 +00:00
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:GetStaticMethodID java.lang.System.setProperty " ) ) , Reference < XInterface > ( ) ) ;
2001-10-31 15:03:47 +00:00
jstring jsPropName = pJNIEnv - > NewString ( sPropertyName . getStr ( ) , sPropertyName . getLength ( ) ) ;
2001-11-12 10:22:45 +00:00
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
// remove the property if it does not have a value ( user left the dialog field empty)
// or if the port is set to 0
sPropertyValue = sPropertyValue . trim ( ) ;
if ( sPropertyValue . getLength ( ) = = 0 | |
( sPropertyName . equals ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ftp.proxyPort " ) ) ) | |
sPropertyName . equals ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " http.proxyPort " ) ) ) /*||
sPropertyName . equals ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " socksProxyPort " ) ) ) */ ) & &
sPropertyValue . equals ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " 0 " ) ) ) )
{
// call java.lang.System.getProperties
jmethodID jmGetProps = pJNIEnv - > GetStaticMethodID ( jcSystem , " getProperties " , " ()Ljava/util/Properties; " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:GetStaticMethodID java.lang.System.getProperties " ) ) , Reference < XInterface > ( ) ) ;
jobject joProperties = pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmGetProps ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:CallStaticObjectMethod java.lang.System.getProperties " ) ) , Reference < XInterface > ( ) ) ;
// call java.util.Properties.remove
jclass jcProperties = pJNIEnv - > FindClass ( " java/util/Properties " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:FindClass java/util/Properties " ) ) , Reference < XInterface > ( ) ) ;
jmethodID jmRemove = pJNIEnv - > GetMethodID ( jcProperties , " remove " , " (Ljava/lang/Object;)Ljava/lang/Object; " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:GetMethodID java.util.Properties.remove " ) ) , Reference < XInterface > ( ) ) ;
jobject joPrev = pJNIEnv - > CallObjectMethod ( joProperties , jmRemove , jsPropName ) ;
// special calse for ftp.nonProxyHosts and http.nonProxyHosts. The office only
// has a value for two java properties
if ( sPropertyName2 . getLength ( ) > 0 )
{
jstring jsPropName2 = pJNIEnv - > NewString ( sPropertyName2 . getStr ( ) , sPropertyName2 . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jobject joPrev = pJNIEnv - > CallObjectMethod ( joProperties , jmRemove , jsPropName2 ) ;
}
}
else
2001-10-31 15:03:47 +00:00
{
2001-11-12 10:22:45 +00:00
// Change the Value of the property
2001-10-31 15:03:47 +00:00
jstring jsPropValue = pJNIEnv - > NewString ( sPropertyValue . getStr ( ) , sPropertyValue . getLength ( ) ) ;
2001-11-12 10:22:45 +00:00
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsPrevValue = ( jstring ) pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmSetProps , jsPropName , jsPropValue ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:CallStaticObjectMethod java.lang.System.setProperty " ) ) , Reference < XInterface > ( ) ) ;
// special calse for ftp.nonProxyHosts and http.nonProxyHosts. The office only
// has a value for two java properties
if ( sPropertyName2 . getLength ( ) > 0 )
{
jstring jsPropName = pJNIEnv - > NewString ( sPropertyName2 . getStr ( ) , sPropertyName2 . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsPropValue = pJNIEnv - > NewString ( sPropertyValue . getStr ( ) , sPropertyValue . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jsPrevValue = ( jstring ) pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmSetProps , jsPropName , jsPropValue ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:CallStaticObjectMethod java.lang.System.setProperty " ) ) , Reference < XInterface > ( ) ) ;
}
2001-10-31 15:03:47 +00:00
}
2001-11-22 12:17:57 +00:00
// If the settings for Security and NetAccess changed then we have to notify the SandboxSecurity
// SecurityManager
// call System.getSecurityManager()
if ( bSecurityChanged )
{
jmethodID jmGetSecur = pJNIEnv - > GetStaticMethodID ( jcSystem , " getSecurityManager " , " ()Ljava/lang/SecurityManager; " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:GetStaticMethodID java.lang.System.getSecurityManager " ) ) , Reference < XInterface > ( ) ) ;
jobject joSecur = pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmGetSecur ) ;
if ( joSecur ! = 0 )
{
// Make sure the SecurityManager is our SandboxSecurity
// FindClass("com.sun.star.lib.sandbox.SandboxSecurityManager" only worked at the first time
// this code was executed. Maybe it is a security feature. However, all attempts to debug the
// SandboxSecurity class (maybe the VM invokes checkPackageAccess) failed.
// jclass jcSandboxSec= pJNIEnv->FindClass("com.sun.star.lib.sandbox.SandboxSecurity");
// if(pJNIEnv->ExceptionOccurred()) throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:FindClass com.sun.star.lib.sandbox.SandboxSecurity")), Reference<XInterface>());
// jboolean bIsSand= pJNIEnv->IsInstanceOf( joSecur, jcSandboxSec);
// The SecurityManagers class Name must be com.sun.star.lib.sandbox.SandboxSecurity
jclass jcSec = pJNIEnv - > GetObjectClass ( joSecur ) ;
jclass jcClass = pJNIEnv - > FindClass ( " java/lang/Class " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:FindClass java.lang.Class " ) ) , Reference < XInterface > ( ) ) ;
jmethodID jmName = pJNIEnv - > GetMethodID ( jcClass , " getName " , " ()Ljava/lang/String; " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:GetMethodID java.lang.Class.getName " ) ) , Reference < XInterface > ( ) ) ;
jstring jsClass = ( jstring ) pJNIEnv - > CallObjectMethod ( jcSec , jmName ) ;
const jchar * jcharName = pJNIEnv - > GetStringChars ( jsClass , NULL ) ;
OUString sName ( jcharName ) ;
jboolean bIsSandbox ;
if ( sName = = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.lib.sandbox.SandboxSecurity " ) ) )
bIsSandbox = JNI_TRUE ;
else
bIsSandbox = JNI_FALSE ;
pJNIEnv - > ReleaseStringChars ( jsClass , jcharName ) ;
if ( bIsSandbox = = JNI_TRUE )
{
// call SandboxSecurity.reset
jmethodID jmReset = pJNIEnv - > GetMethodID ( jcSec , " reset " , " ()V " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:GetMethodID com.sun.star.lib.sandbox.SandboxSecurity.reset " ) ) , Reference < XInterface > ( ) ) ;
pJNIEnv - > CallVoidMethod ( joSecur , jmReset ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:CallVoidMethod com.sun.star.lib.sandbox.SandboxSecurity.reset " ) ) , Reference < XInterface > ( ) ) ;
}
}
}
2001-10-31 15:03:47 +00:00
if ( bThreadAttached )
{
jint ret = _pVMContext - > _pJavaVM - > DetachCurrentThread ( ) ;
OSL_ENSURE ( ! ret , " JavaVM could not detach current thread to VM " ) ;
}
2000-09-18 14:29:57 +00:00
}
2001-10-31 15:03:47 +00:00
}
2000-09-18 14:29:57 +00:00
2001-11-12 10:22:45 +00:00
// param true: all Inet setting are set as Java Properties on a live VM.
// false: the Java net properties are set to empty value.
void JavaVirtualMachine_Impl : : setINetSettingsInVM ( sal_Bool set_reset )
{
MutexGuard aGuard ( _Mutex ) ;
try
{
if ( _pVMContext & & _pVMContext - > _pJavaVM )
{
JNIEnv * pJNIEnv = NULL ;
sal_Bool bThreadAttached = sal_False ;
jint ret = _pVMContext - > _pJavaVM - > AttachCurrentThread ( ( void * * ) & pJNIEnv , ( void * ) NULL ) ;
OSL_ENSURE ( ! ret , " JavaVM could not attach current thread to VM " ) ;
if ( ! _pVMContext - > isThreadAttached ( ) )
{
bThreadAttached = sal_True ;
}
// The Java Properties
OUString sFtpProxyHost ( RTL_CONSTASCII_USTRINGPARAM ( " ftp.proxyHost " ) ) ;
OUString sFtpProxyPort ( RTL_CONSTASCII_USTRINGPARAM ( " ftp.proxyPort " ) ) ;
OUString sFtpNonProxyHosts ( RTL_CONSTASCII_USTRINGPARAM ( " ftp.nonProxyHosts " ) ) ;
OUString sHttpProxyHost ( RTL_CONSTASCII_USTRINGPARAM ( " http.proxyHost " ) ) ;
OUString sHttpProxyPort ( RTL_CONSTASCII_USTRINGPARAM ( " http.proxyPort " ) ) ;
OUString sHttpNonProxyHosts ( RTL_CONSTASCII_USTRINGPARAM ( " http.nonProxyHosts " ) ) ;
// OUString sSocksProxyHost(RTL_CONSTASCII_USTRINGPARAM("socksProxyHost"));
// OUString sSocksProxyPort(RTL_CONSTASCII_USTRINGPARAM("socksProxyPort"));
// creat Java Properties as JNI strings
jstring jsFtpProxyHost = pJNIEnv - > NewString ( sFtpProxyHost . getStr ( ) , sFtpProxyHost . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsFtpProxyPort = pJNIEnv - > NewString ( sFtpProxyPort . getStr ( ) , sFtpProxyPort . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsFtpNonProxyHosts = pJNIEnv - > NewString ( sFtpNonProxyHosts . getStr ( ) , sFtpNonProxyHosts . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsHttpProxyHost = pJNIEnv - > NewString ( sHttpProxyHost . getStr ( ) , sHttpProxyHost . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsHttpProxyPort = pJNIEnv - > NewString ( sHttpProxyPort . getStr ( ) , sHttpProxyPort . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsHttpNonProxyHosts = pJNIEnv - > NewString ( sHttpNonProxyHosts . getStr ( ) , sHttpNonProxyHosts . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
// jstring jsSocksProxyHost= pJNIEnv->NewString( sSocksProxyHost.getStr(), sSocksProxyHost.getLength());
// if(pJNIEnv->ExceptionOccurred()) throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM("")), Reference<XInterface>());
// jstring jsSocksProxyPort= pJNIEnv->NewString( sSocksProxyPort.getStr(), sSocksProxyPort.getLength());
// if(pJNIEnv->ExceptionOccurred()) throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM("")), Reference<XInterface>());
// prepare java.lang.System.setProperty
jclass jcSystem = pJNIEnv - > FindClass ( " java/lang/System " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:FindClass java/lang/System " ) ) , Reference < XInterface > ( ) ) ;
jmethodID jmSetProps = pJNIEnv - > GetStaticMethodID ( jcSystem , " setProperty " , " (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:GetStaticMethodID java.lang.System.setProperty " ) ) , Reference < XInterface > ( ) ) ;
// call java.lang.System.getProperties
jmethodID jmGetProps = pJNIEnv - > GetStaticMethodID ( jcSystem , " getProperties " , " ()Ljava/util/Properties; " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:GetStaticMethodID java.lang.System.getProperties " ) ) , Reference < XInterface > ( ) ) ;
jobject joProperties = pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmGetProps ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:CallStaticObjectMethod java.lang.System.getProperties " ) ) , Reference < XInterface > ( ) ) ;
// prepare java.util.Properties.remove
jclass jcProperties = pJNIEnv - > FindClass ( " java/util/Properties " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:FindClass java/util/Properties " ) ) , Reference < XInterface > ( ) ) ;
if ( set_reset )
{
// Set all network properties with the VM
JVM jvm ;
getINetPropsFromConfig ( & jvm , _xSMgr , _xCtx ) ;
const : : std : : vector < OUString > & Props = jvm . getProperties ( ) ;
typedef : : std : : vector < OUString > : : const_iterator C_IT ;
for ( C_IT i = Props . begin ( ) ; i ! = Props . end ( ) ; i + + )
{
OUString prop = * i ;
sal_Int32 index = prop . indexOf ( ( sal_Unicode ) ' = ' ) ;
OUString propName = prop . copy ( 0 , index ) ;
OUString propValue = prop . copy ( index + 1 ) ;
if ( propName . equals ( sFtpProxyHost ) )
{
jstring jsVal = pJNIEnv - > NewString ( propValue . getStr ( ) , propValue . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsPrevValue = ( jstring ) pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmSetProps , jsFtpProxyHost , jsVal ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:CallStaticObjectMethod java.lang.System.setProperty " ) ) , Reference < XInterface > ( ) ) ;
}
else if ( propName . equals ( sFtpProxyPort ) )
{
jstring jsVal = pJNIEnv - > NewString ( propValue . getStr ( ) , propValue . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsPrevValue = ( jstring ) pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmSetProps , jsFtpProxyPort , jsVal ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:CallStaticObjectMethod java.lang.System.setProperty " ) ) , Reference < XInterface > ( ) ) ;
}
else if ( propName . equals ( sFtpNonProxyHosts ) )
{
jstring jsVal = pJNIEnv - > NewString ( propValue . getStr ( ) , propValue . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsPrevValue = ( jstring ) pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmSetProps , jsFtpNonProxyHosts , jsVal ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:CallStaticObjectMethod java.lang.System.setProperty " ) ) , Reference < XInterface > ( ) ) ;
}
else if ( propName . equals ( sHttpProxyHost ) )
{
jstring jsVal = pJNIEnv - > NewString ( propValue . getStr ( ) , propValue . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsPrevValue = ( jstring ) pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmSetProps , jsHttpProxyHost , jsVal ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:CallStaticObjectMethod java.lang.System.setProperty " ) ) , Reference < XInterface > ( ) ) ;
}
else if ( propName . equals ( sHttpProxyPort ) )
{
jstring jsVal = pJNIEnv - > NewString ( propValue . getStr ( ) , propValue . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsPrevValue = ( jstring ) pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmSetProps , jsHttpProxyPort , jsVal ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:CallStaticObjectMethod java.lang.System.setProperty " ) ) , Reference < XInterface > ( ) ) ;
}
else if ( propName . equals ( sHttpNonProxyHosts ) )
{
jstring jsVal = pJNIEnv - > NewString ( propValue . getStr ( ) , propValue . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:NewString " ) ) , Reference < XInterface > ( ) ) ;
jstring jsPrevValue = ( jstring ) pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmSetProps , jsHttpNonProxyHosts , jsVal ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:CallStaticObjectMethod java.lang.System.setProperty " ) ) , Reference < XInterface > ( ) ) ;
}
/* else if( propName.equals( sSocksProxyHost))
{
jstring jsVal = pJNIEnv - > NewString ( propValue . getStr ( ) , propValue . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " " ) ) , Reference < XInterface > ( ) ) ;
jstring jsPrevValue = ( jstring ) pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmSetProps , jsSocksProxyHost , jsVal ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " " ) ) , Reference < XInterface > ( ) ) ;
}
else if ( propName . equals ( sSocksProxyPort ) )
{
jstring jsVal = pJNIEnv - > NewString ( propValue . getStr ( ) , propValue . getLength ( ) ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " " ) ) , Reference < XInterface > ( ) ) ;
jstring jsPrevValue = ( jstring ) pJNIEnv - > CallStaticObjectMethod ( jcSystem , jmSetProps , jsSocksProxyPort , jsVal ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " " ) ) , Reference < XInterface > ( ) ) ;
}
*/ }
}
else
{
// call java.util.Properties.remove
jmethodID jmRemove = pJNIEnv - > GetMethodID ( jcProperties , " remove " , " (Ljava/lang/Object;)Ljava/lang/Object; " ) ;
if ( pJNIEnv - > ExceptionOccurred ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JNI:GetMethodID java.util.Property.remove " ) ) , Reference < XInterface > ( ) ) ;
jobject joPrev = pJNIEnv - > CallObjectMethod ( joProperties , jmRemove , jsFtpProxyHost ) ;
joPrev = pJNIEnv - > CallObjectMethod ( joProperties , jmRemove , jsFtpProxyPort ) ;
joPrev = pJNIEnv - > CallObjectMethod ( joProperties , jmRemove , jsFtpNonProxyHosts ) ;
joPrev = pJNIEnv - > CallObjectMethod ( joProperties , jmRemove , jsHttpProxyHost ) ;
joPrev = pJNIEnv - > CallObjectMethod ( joProperties , jmRemove , jsHttpProxyPort ) ;
joPrev = pJNIEnv - > CallObjectMethod ( joProperties , jmRemove , jsHttpNonProxyHosts ) ;
// joPrev= pJNIEnv->CallObjectMethod( joProperties, jmRemove, jsSocksProxyHost);
// joPrev= pJNIEnv->CallObjectMethod( joProperties, jmRemove, jsSocksProxyPort);
}
if ( bThreadAttached )
{
jint ret = _pVMContext - > _pJavaVM - > DetachCurrentThread ( ) ;
OSL_ENSURE ( ! ret , " JavaVM could not detach current thread to VM " ) ;
}
}
}
catch ( RuntimeException & e )
{
}
}
2001-10-31 15:03:47 +00:00
// XEventListenerListener
void SAL_CALL JavaVirtualMachine_Impl : : disposing ( const EventObject & Source )
throw ( RuntimeException )
{
// In case the configuration manager wants to shut down
if ( _xConfigurationAccess . is ( ) & & Source . Source = = _xConfigurationAccess )
2001-06-22 15:21:02 +00:00
{
2001-10-31 15:03:47 +00:00
Reference < XContainer > xContainer ( _xConfigurationAccess , UNO_QUERY ) ;
if ( xContainer . is ( ) )
xContainer - > removeContainerListener ( static_cast < XContainerListener * > ( this ) ) ;
_xConfigurationAccess = 0 ;
}
2001-11-19 11:00:15 +00:00
// In case the configuration manager wants to shut down
if ( _xConfigurationAccess2 . is ( ) & & Source . Source = = _xConfigurationAccess2 )
{
Reference < XContainer > xContainer ( _xConfigurationAccess2 , UNO_QUERY ) ;
if ( xContainer . is ( ) )
xContainer - > removeContainerListener ( static_cast < XContainerListener * > ( this ) ) ;
_xConfigurationAccess2 = 0 ;
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
// If the service manager calls us then we are about to be shut down, therefore
// unregister everywhere. Currently this service is only registered with the
// configuration manager
Reference < XInterface > xIntMgr ( _xSMgr , UNO_QUERY ) ;
if ( Source . Source = = xIntMgr )
{
Reference < XContainer > xContainer ( _xConfigurationAccess , UNO_QUERY ) ;
if ( xContainer . is ( ) )
xContainer - > removeContainerListener ( static_cast < XContainerListener * > ( this ) ) ;
2001-11-19 11:00:15 +00:00
Reference < XContainer > xContainer2 ( _xConfigurationAccess2 , UNO_QUERY ) ;
if ( xContainer2 . is ( ) )
xContainer2 - > removeContainerListener ( static_cast < XContainerListener * > ( this ) ) ;
2001-10-31 15:03:47 +00:00
}
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
static void getDefaultLocaleFromConfig ( JVM * pjvm ,
const Reference < XMultiComponentFactory > & xSMgr ,
const Reference < XComponentContext > & xCtx ) throw ( Exception )
{
Reference < XInterface > xConfRegistry = xSMgr - > createInstanceWithContext (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.configuration.ConfigurationRegistry " ) ) ,
xCtx ) ;
if ( ! xConfRegistry . is ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: couldn't get ConfigurationRegistry " ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
Reference < XSimpleRegistry > xConfRegistry_simple ( xConfRegistry , UNO_QUERY ) ;
if ( ! xConfRegistry_simple . is ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: couldn't get ConfigurationRegistry " ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
xConfRegistry_simple - > open ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " org.openoffice.Setup " ) ) , sal_True , sal_False ) ;
Reference < XRegistryKey > xRegistryRootKey = xConfRegistry_simple - > getRootKey ( ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
// read locale
Reference < XRegistryKey > locale = xRegistryRootKey - > openKey ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " L10N/ooLocale " ) ) ) ;
if ( locale . is ( ) & & locale - > getStringValue ( ) . getLength ( ) ) {
OUString language ;
OUString country ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
sal_Int32 index = locale - > getStringValue ( ) . indexOf ( ( sal_Unicode ) ' - ' ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
if ( index > = 0 ) {
language = locale - > getStringValue ( ) . copy ( 0 , index ) ;
country = locale - > getStringValue ( ) . copy ( index + 1 ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
if ( language . getLength ( ) ) {
OUString prop ( RTL_CONSTASCII_USTRINGPARAM ( " user.language= " ) ) ;
prop + = language ;
2000-11-14 13:07:06 +00:00
2001-10-31 15:03:47 +00:00
pjvm - > pushProp ( prop ) ;
2000-11-14 13:07:06 +00:00
}
2001-10-31 15:03:47 +00:00
if ( country . getLength ( ) ) {
OUString prop ( RTL_CONSTASCII_USTRINGPARAM ( " user.region= " ) ) ;
prop + = country ;
pjvm - > pushProp ( prop ) ;
}
}
2000-11-14 13:07:06 +00:00
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
xConfRegistry_simple - > close ( ) ;
}
static void setTimeZone ( JVM * pjvm ) throw ( ) {
/* A Bug in the Java function
* * struct Hjava_util_Properties * java_lang_System_initProperties (
* * struct Hjava_lang_System * this ,
* * struct Hjava_util_Properties * props ) ;
* * This function doesn ' t detect MEZ , MET or " W. Europe Standard Time "
*/
struct tm * tmData ;
time_t clock = time ( NULL ) ;
tzset ( ) ;
tmData = localtime ( & clock ) ;
2000-10-23 14:29:34 +00:00
# ifdef MACOSX
2001-10-31 15:03:47 +00:00
char * p = tmData - > tm_zone ;
2000-10-23 14:29:34 +00:00
# else
2001-10-31 15:03:47 +00:00
char * p = tzname [ 0 ] ;
2000-10-23 14:29:34 +00:00
# endif
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
if ( ! strcmp ( TIMEZONE , p ) )
pjvm - > pushProp ( OUString : : createFromAscii ( " user.timezone=ECT " ) ) ;
}
2000-09-18 14:29:57 +00:00
2001-11-12 10:22:45 +00:00
// Only gets the properties if the "Proxy Server" entry in the option dialog is
// set to manual (i.e. not to none)
2001-10-31 15:03:47 +00:00
static void getINetPropsFromConfig ( JVM * pjvm ,
const Reference < XMultiComponentFactory > & xSMgr ,
const Reference < XComponentContext > & xCtx ) throw ( Exception )
{
Reference < XInterface > xConfRegistry = xSMgr - > createInstanceWithContext (
2001-06-22 15:21:02 +00:00
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.configuration.ConfigurationRegistry " ) ) ,
xCtx ) ;
2001-10-31 15:03:47 +00:00
if ( ! xConfRegistry . is ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: couldn't get ConfigurationRegistry " ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
Reference < XSimpleRegistry > xConfRegistry_simple ( xConfRegistry , UNO_QUERY ) ;
if ( ! xConfRegistry_simple . is ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: couldn't get ConfigurationRegistry " ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
xConfRegistry_simple - > open ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " org.openoffice.Inet " ) ) , sal_True , sal_False ) ;
Reference < XRegistryKey > xRegistryRootKey = xConfRegistry_simple - > getRootKey ( ) ;
2000-09-18 14:29:57 +00:00
2001-11-12 10:22:45 +00:00
// if ooInetProxyType is not 0 then read the settings
Reference < XRegistryKey > proxyEnable = xRegistryRootKey - > openKey ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Settings/ooInetProxyType " ) ) ) ;
if ( proxyEnable . is ( ) & & 0 ! = proxyEnable - > getLongValue ( ) )
{
// read ftp proxy name
Reference < XRegistryKey > ftpProxy_name = xRegistryRootKey - > openKey ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Settings/ooInetFTPProxyName " ) ) ) ;
if ( ftpProxy_name . is ( ) & & ftpProxy_name - > getStringValue ( ) . getLength ( ) ) {
OUString ftpHost = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ftp.proxyHost= " ) ) ;
ftpHost + = ftpProxy_name - > getStringValue ( ) ;
// read ftp proxy port
Reference < XRegistryKey > ftpProxy_port = xRegistryRootKey - > openKey ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Settings/ooInetFTPProxyPort " ) ) ) ;
if ( ftpProxy_port . is ( ) & & ftpProxy_port - > getLongValue ( ) ) {
OUString ftpPort = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ftp.proxyPort= " ) ) ;
ftpPort + = OUString : : valueOf ( ftpProxy_port - > getLongValue ( ) ) ;
pjvm - > pushProp ( ftpHost ) ;
pjvm - > pushProp ( ftpPort ) ;
}
2000-09-28 16:34:41 +00:00
}
2000-09-18 14:29:57 +00:00
2001-11-12 10:22:45 +00:00
// read http proxy name
Reference < XRegistryKey > httpProxy_name = xRegistryRootKey - > openKey ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Settings/ooInetHTTPProxyName " ) ) ) ;
if ( httpProxy_name . is ( ) & & httpProxy_name - > getStringValue ( ) . getLength ( ) ) {
OUString httpHost = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " http.proxyHost= " ) ) ;
httpHost + = httpProxy_name - > getStringValue ( ) ;
2000-09-18 14:29:57 +00:00
2001-11-12 10:22:45 +00:00
// read http proxy port
Reference < XRegistryKey > httpProxy_port = xRegistryRootKey - > openKey ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Settings/ooInetHTTPProxyPort " ) ) ) ;
if ( httpProxy_port . is ( ) & & httpProxy_port - > getLongValue ( ) ) {
OUString httpPort = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " http.proxyPort= " ) ) ;
httpPort + = OUString : : valueOf ( httpProxy_port - > getLongValue ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-11-12 10:22:45 +00:00
pjvm - > pushProp ( httpHost ) ;
pjvm - > pushProp ( httpPort ) ;
}
2000-09-28 16:34:41 +00:00
}
2000-09-18 14:29:57 +00:00
2001-11-12 10:22:45 +00:00
// read nonProxyHosts
Reference < XRegistryKey > nonProxies_name = xRegistryRootKey - > openKey ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Settings/ooInetNoProxy " ) ) ) ;
if ( nonProxies_name . is ( ) & & nonProxies_name - > getStringValue ( ) . getLength ( ) ) {
OUString httpNonProxyHosts = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " http.nonProxyHosts= " ) ) ;
OUString ftpNonProxyHosts = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ftp.nonProxyHosts= " ) ) ;
OUString value = nonProxies_name - > getStringValue ( ) ;
// replace the separator ";" by "|"
value = value . replace ( ( sal_Unicode ) ' ; ' , ( sal_Unicode ) ' | ' ) ;
2001-10-31 15:03:47 +00:00
2001-11-12 10:22:45 +00:00
httpNonProxyHosts + = value ;
ftpNonProxyHosts + = value ;
2001-10-31 15:03:47 +00:00
2001-11-12 10:22:45 +00:00
pjvm - > pushProp ( httpNonProxyHosts ) ;
pjvm - > pushProp ( ftpNonProxyHosts ) ;
}
2000-09-18 14:29:57 +00:00
2001-11-12 10:22:45 +00:00
// read socks settings
/* Reference<XRegistryKey> socksProxy_name = xRegistryRootKey->openKey(OUString(RTL_CONSTASCII_USTRINGPARAM("Settings/ooInetSOCKSProxyName")));
if ( socksProxy_name . is ( ) & & httpProxy_name - > getStringValue ( ) . getLength ( ) ) {
OUString socksHost = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " socksProxyHost= " ) ) ;
socksHost + = socksProxy_name - > getStringValue ( ) ;
2001-10-31 15:03:47 +00:00
2001-11-12 10:22:45 +00:00
// read http proxy port
Reference < XRegistryKey > socksProxy_port = xRegistryRootKey - > openKey ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Settings/ooInetSOCKSProxyPort " ) ) ) ;
if ( socksProxy_port . is ( ) & & socksProxy_port - > getLongValue ( ) ) {
OUString socksPort = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " socksProxyPort= " ) ) ;
socksPort + = OUString : : valueOf ( socksProxy_port - > getLongValue ( ) ) ;
2001-10-31 15:03:47 +00:00
2001-11-12 10:22:45 +00:00
pjvm - > pushProp ( socksHost ) ;
pjvm - > pushProp ( socksPort ) ;
}
2001-10-31 15:03:47 +00:00
}
2001-11-12 10:22:45 +00:00
*/ }
2001-10-31 15:03:47 +00:00
xConfRegistry_simple - > close ( ) ;
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
static void getJavaPropsFromConfig ( JVM * pjvm ,
const Reference < XMultiComponentFactory > & xSMgr ,
const Reference < XComponentContext > & xCtx ) throw ( Exception )
{
Reference < XInterface > xConfRegistry = xSMgr - > createInstanceWithContext (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.configuration.ConfigurationRegistry " ) ) ,
xCtx ) ;
if ( ! xConfRegistry . is ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: couldn't get ConfigurationRegistry " ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
Reference < XSimpleRegistry > xConfRegistry_simple ( xConfRegistry , UNO_QUERY ) ;
if ( ! xConfRegistry_simple . is ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: couldn't get ConfigurationRegistry " ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
xConfRegistry_simple - > open ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " org.openoffice.Setup " ) ) , sal_True , sal_False ) ;
Reference < XRegistryKey > xRegistryRootKey = xConfRegistry_simple - > getRootKey ( ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
Reference < XRegistryKey > key_InstallPath = xRegistryRootKey - > openKey ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Office/ooSetupInstallPath " ) ) ) ;
if ( ! key_InstallPath . is ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: can not find key: Office/InstallPath in org.openoffice.UserProfile " ) ) ,
Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
OUString rcPath = key_InstallPath - > getStringValue ( ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
Reference < XInterface > xIniManager ( xSMgr - > createInstanceWithContext (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.config.INIManager " ) ) ,
xCtx ) ) ;
if ( ! xIniManager . is ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: couldn't get: com.sun.star.config.INIManager " ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
Reference < XSimpleRegistry > xIniManager_simple ( xIniManager , UNO_QUERY ) ;
if ( ! xIniManager_simple . is ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: couldn't get: com.sun.star.config.INIManager " ) ) , Reference < XInterface > ( ) ) ;
// normalize the path
OUString urlrcPath ;
if ( osl_File_E_None ! = File : : getFileURLFromSystemPath ( rcPath , urlrcPath ) )
{
urlrcPath = rcPath ;
}
urlrcPath + = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " /config/ " INI_FILE ) ) ;
2001-05-21 14:57:33 +00:00
2001-10-31 15:03:47 +00:00
xIniManager_simple - > open ( urlrcPath , sal_True , sal_False ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
Reference < XRegistryKey > xJavaSection = xIniManager_simple - > getRootKey ( ) - > openKey ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Java " ) ) ) ;
if ( ! xJavaSection . is ( ) | | ! xJavaSection - > isValid ( ) )
throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: can not find java section in " INI_FILE ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
Sequence < OUString > javaProperties = xJavaSection - > getKeyNames ( ) ;
OUString * pSectionEntry = javaProperties . getArray ( ) ;
sal_Int32 nCount = javaProperties . getLength ( ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
for ( sal_Int32 i = 0 ; i < nCount ; + + i )
{
//Reconstruct the whole lines of the java.ini
Reference < XRegistryKey > key = xJavaSection - > openKey ( pSectionEntry [ i ] ) ;
if ( key . is ( ) )
2001-10-17 14:52:51 +00:00
{
2001-10-31 15:03:47 +00:00
// there was a "=" in the line, hence key/value pair.
OUString entryValue = key - > getStringValue ( ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
if ( entryValue . getLength ( ) ) {
pSectionEntry [ i ] + = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " = " ) ) ;
pSectionEntry [ i ] + = entryValue ;
2000-09-28 16:34:41 +00:00
}
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
pjvm - > pushProp ( pSectionEntry [ i ] ) ;
2000-09-18 14:29:57 +00:00
}
2001-10-31 15:03:47 +00:00
xIniManager_simple - > close ( ) ;
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
static void getJavaPropsFromSafetySettings ( JVM * pjvm ,
const Reference < XMultiComponentFactory > & xSMgr ,
const Reference < XComponentContext > & xCtx ) throw ( Exception )
{
Reference < XInterface > xConfRegistry = xSMgr - > createInstanceWithContext (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.configuration.ConfigurationRegistry " ) ) ,
xCtx ) ;
if ( ! xConfRegistry . is ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: couldn't get ConfigurationRegistry " ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
Reference < XSimpleRegistry > xConfRegistry_simple ( xConfRegistry , UNO_QUERY ) ;
if ( ! xConfRegistry_simple . is ( ) ) throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " javavm.cxx: couldn't get ConfigurationRegistry " ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
xConfRegistry_simple - > open ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " org.openoffice.Office.Java " ) ) , sal_True , sal_False ) ;
Reference < XRegistryKey > xRegistryRootKey = xConfRegistry_simple - > getRootKey ( ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
if ( xRegistryRootKey . is ( ) )
{
Reference < XRegistryKey > key_Enable = xRegistryRootKey - > openKey ( OUString (
RTL_CONSTASCII_USTRINGPARAM ( " VirtualMachine/Enable " ) ) ) ;
if ( key_Enable . is ( ) )
{
sal_Bool bEnableVal = key_Enable - > getLongValue ( ) ;
pjvm - > setEnabled ( bEnableVal ) ;
}
Reference < XRegistryKey > key_UserClasspath = xRegistryRootKey - > openKey ( OUString (
RTL_CONSTASCII_USTRINGPARAM ( " VirtualMachine/UserClassPath " ) ) ) ;
if ( key_UserClasspath . is ( ) )
{
OUString sClassPath = key_UserClasspath - > getStringValue ( ) ;
pjvm - > setUserClasspath ( sClassPath ) ;
2001-11-19 11:00:15 +00:00
}
Reference < XRegistryKey > key_NetAccess = xRegistryRootKey - > openKey ( OUString (
RTL_CONSTASCII_USTRINGPARAM ( " VirtualMachine/NetAccess " ) ) ) ;
if ( key_NetAccess . is ( ) )
{
sal_Int32 val = key_NetAccess - > getLongValue ( ) ;
OUString sVal ;
switch ( val )
{
case 0 : sVal = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " unrestricted " ) ) ;
break ;
case 1 : sVal = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " none " ) ) ;
break ;
case 2 : sVal = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " host " ) ) ;
break ;
}
OUString sProperty ( RTL_CONSTASCII_USTRINGPARAM ( " appletviewer.security.mode= " ) ) ;
sProperty = sProperty + sVal ;
pjvm - > pushProp ( sProperty ) ;
}
Reference < XRegistryKey > key_CheckSecurity = xRegistryRootKey - > openKey ( OUString (
RTL_CONSTASCII_USTRINGPARAM ( " VirtualMachine/Security " ) ) ) ;
if ( key_CheckSecurity . is ( ) )
{
sal_Bool val = key_CheckSecurity - > getLongValue ( ) ;
OUString sProperty ( RTL_CONSTASCII_USTRINGPARAM ( " stardiv.security.disableSecurity= " ) ) ;
if ( val )
sProperty = sProperty + OUString ( RTL_CONSTASCII_USTRINGPARAM ( " false " ) ) ;
else
sProperty = sProperty + OUString ( RTL_CONSTASCII_USTRINGPARAM ( " true " ) ) ;
pjvm - > pushProp ( sProperty ) ;
2000-09-28 16:34:41 +00:00
}
}
2001-10-31 15:03:47 +00:00
xConfRegistry_simple - > close ( ) ;
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
static void getJavaPropsFromEnvironment ( JVM * pjvm ) throw ( ) {
// try some defaults for CLASSPATH and runtime lib
const char * pClassPath = getenv ( " CLASSPATH " ) ;
pjvm - > setSystemClasspath ( OUString : : createFromAscii ( pClassPath ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
pjvm - > setRuntimeLib ( OUString : : createFromAscii ( DEF_JAVALIB ) ) ;
pjvm - > setEnabled ( 1 ) ;
2000-11-14 13:07:06 +00:00
2001-10-31 15:03:47 +00:00
// See if properties have been set and parse them
const char * pOOjavaProperties = getenv ( PROPERTIES_ENV ) ;
if ( pOOjavaProperties ) {
OUString properties ( OUString : : createFromAscii ( pOOjavaProperties ) ) ;
sal_Int32 index ;
sal_Int32 lastIndex = 0 ;
do {
index = properties . indexOf ( ( sal_Unicode ) ' , ' , lastIndex ) ;
OUString token = ( index = = - 1 ) ? properties . copy ( lastIndex ) : properties . copy ( lastIndex , index - lastIndex ) ;
lastIndex = index + 1 ;
pjvm - > pushProp ( token ) ;
2000-09-28 16:34:41 +00:00
}
2001-10-31 15:03:47 +00:00
while ( index > - 1 ) ;
}
}
static void initVMConfiguration ( JVM * pjvm ,
const Reference < XMultiComponentFactory > & xSMgr ,
const Reference < XComponentContext > & xCtx ) throw ( ) {
JVM jvm ;
try {
getINetPropsFromConfig ( & jvm , xSMgr , xCtx ) ;
}
catch ( Exception & exception ) {
2000-09-28 16:34:41 +00:00
# ifdef DEBUG
2001-10-31 15:03:47 +00:00
OString message = OUStringToOString ( exception . Message , RTL_TEXTENCODING_ASCII_US ) ;
OSL_TRACE ( " javavm.cxx: can not get INetProps cause of >%s< " , message . getStr ( ) ) ;
2000-09-28 16:34:41 +00:00
# endif
2001-10-31 15:03:47 +00:00
}
2000-09-28 16:34:41 +00:00
2001-10-31 15:03:47 +00:00
try {
getDefaultLocaleFromConfig ( & jvm , xSMgr , xCtx ) ;
}
catch ( Exception & exception ) {
2000-11-14 13:07:06 +00:00
# ifdef DEBUG
2001-10-31 15:03:47 +00:00
OString message = OUStringToOString ( exception . Message , RTL_TEXTENCODING_ASCII_US ) ;
OSL_TRACE ( " javavm.cxx: can not get locale cause of >%s< " , message . getStr ( ) ) ;
2000-11-14 13:07:06 +00:00
# endif
2001-10-31 15:03:47 +00:00
}
2000-11-14 13:07:06 +00:00
2001-10-31 15:03:47 +00:00
try {
getJavaPropsFromConfig ( & jvm , xSMgr , xCtx ) ;
2000-11-14 13:07:06 +00:00
2001-10-31 15:03:47 +00:00
}
catch ( Exception & exception ) {
# ifdef DEBUG
OString message = OUStringToOString ( exception . Message , RTL_TEXTENCODING_ASCII_US ) ;
OSL_TRACE ( " javavm.cxx: couldn't use configuration cause of >%s< " , message . getStr ( ) ) ;
# endif
2000-11-14 13:07:06 +00:00
2001-10-31 15:03:47 +00:00
getJavaPropsFromEnvironment ( & jvm ) ;
}
2000-11-14 13:07:06 +00:00
2001-10-31 15:03:47 +00:00
try {
getJavaPropsFromSafetySettings ( & jvm , xSMgr , xCtx ) ;
}
catch ( Exception & exception ) {
2000-11-14 13:07:06 +00:00
# ifdef DEBUG
2001-10-31 15:03:47 +00:00
OString message = OUStringToOString ( exception . Message , RTL_TEXTENCODING_ASCII_US ) ;
OSL_TRACE ( " javavm.cxx: couldn't get safety settings because of >%s< " , message . getStr ( ) ) ;
2000-11-14 13:07:06 +00:00
# endif
2001-10-31 15:03:47 +00:00
}
* pjvm = jvm ;
setTimeZone ( pjvm ) ;
2000-09-18 14:29:57 +00:00
2001-05-09 08:35:40 +00:00
// pjvm->setPrint(vm_vfprintf);
// pjvm->setExit(vm_exit);
// pjvm->setAbort(vm_abort);
2001-10-31 15:03:47 +00:00
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
JavaVirtualMachine_Impl : : JavaVirtualMachine_Impl ( const Reference < XComponentContext > & xCtx ) throw ( )
: _pVMContext ( NULL )
, _creatorThread ( this )
, _pJava_environment ( NULL )
, _xSMgr ( xCtx - > getServiceManager ( ) )
, _xCtx ( xCtx )
{
}
JavaVirtualMachine_Impl : : ~ JavaVirtualMachine_Impl ( ) throw ( ) {
if ( _pVMContext )
_creatorThread . disposeJavaVM ( ) ;
if ( _xConfigurationAccess . is ( ) )
2000-09-18 14:29:57 +00:00
{
2001-10-31 15:03:47 +00:00
Reference < XContainer > xContainer ( _xConfigurationAccess , UNO_QUERY ) ;
if ( xContainer . is ( ) )
xContainer - > removeContainerListener ( static_cast < XContainerListener * > ( this ) ) ;
2000-09-18 14:29:57 +00:00
}
2001-11-19 11:00:15 +00:00
if ( _xConfigurationAccess2 . is ( ) )
{
Reference < XContainer > xContainer ( _xConfigurationAccess2 , UNO_QUERY ) ;
if ( xContainer . is ( ) )
xContainer - > removeContainerListener ( static_cast < XContainerListener * > ( this ) ) ;
}
2001-10-31 15:03:47 +00:00
if ( _xSMgr . is ( ) )
{
Reference < XComponent > xComp ( _xSMgr , UNO_QUERY ) ;
if ( xComp . is ( ) )
xComp - > removeEventListener ( static_cast < XEventListener * > ( this ) ) ;
2000-09-28 16:34:41 +00:00
}
2001-10-31 15:03:47 +00:00
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
JavaVM * JavaVirtualMachine_Impl : : createJavaVM ( const JVM & jvm ) throw ( RuntimeException ) {
if ( ! _javaLib . load ( jvm . getRuntimeLib ( ) ) ) {
OUString message ( RTL_CONSTASCII_USTRINGPARAM ( " JavaVirtualMachine_Impl::createJavaVM - cannot find java runtime: " ) ) ;
message + = jvm . getRuntimeLib ( ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
throw RuntimeException ( message , Reference < XInterface > ( ) ) ;
}
2000-09-18 14:29:57 +00:00
2002-01-20 19:11:04 +00:00
# ifdef UNX
OUString javaHome ( RTL_CONSTASCII_USTRINGPARAM ( " JAVA_HOME= " ) ) ;
javaHome + = jvm . getJavaHome ( ) ;
const OUString & vmType = jvm . getVMType ( ) ;
if ( ! vmType . equals ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " jre " ) ) ) )
{
javaHome + = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " /jre " ) ) ;
}
OString osJavaHome = OUStringToOString ( javaHome , osl_getThreadTextEncoding ( ) ) ;
putenv ( strdup ( osJavaHome . getStr ( ) ) ) ;
# endif
2001-10-31 15:03:47 +00:00
JNI_InitArgs_Type * initArgs = ( JNI_InitArgs_Type * ) _javaLib . getSymbol ( OUString : : createFromAscii ( " JNI_GetDefaultJavaVMInitArgs " ) ) ;
JNI_CreateVM_Type * pCreateJavaVM = ( JNI_CreateVM_Type * ) _javaLib . getSymbol ( OUString : : createFromAscii ( " JNI_CreateJavaVM " ) ) ;
if ( ! initArgs | | ! pCreateJavaVM ) {
OUString message ( RTL_CONSTASCII_USTRINGPARAM ( " JavaVirtualMachine_Impl::createJavaVM - cannot find symbols: JNI_GetDefaultJavaVMInitArgs or JNI_CreateJavaVM " ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
throw RuntimeException ( message , Reference < XInterface > ( ) ) ;
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
JNIEnv * pJNIEnv = NULL ;
JavaVM * pJavaVM ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
// Try VM 1.1
JDK1_1InitArgs vm_args ;
vm_args . version = 0x00010001 ;
jint ret = initArgs ( & vm_args ) ;
jvm . setArgs ( & vm_args ) ;
2001-04-25 10:31:24 +00:00
2001-10-31 15:03:47 +00:00
jint err ;
err = pCreateJavaVM ( & pJavaVM , & pJNIEnv , & vm_args ) ;
2001-04-25 10:31:24 +00:00
2001-10-31 15:03:47 +00:00
if ( err ! = 0 )
{
// Try VM 1.2
2001-06-11 14:31:34 +00:00
2001-10-31 15:03:47 +00:00
// The office sets a signal handler at startup. That causes a crash
// with java 1.3 under Solaris. To make it work, we set back the
// handler
2001-06-11 14:31:34 +00:00
# ifdef UNX
2001-10-31 15:03:47 +00:00
struct sigaction act ;
act . sa_handler = SIG_DFL ;
act . sa_flags = 0 ;
sigaction ( SIGSEGV , & act , NULL ) ;
sigaction ( SIGPIPE , & act , NULL ) ;
sigaction ( SIGBUS , & act , NULL ) ;
sigaction ( SIGILL , & act , NULL ) ;
sigaction ( SIGFPE , & act , NULL ) ;
2001-06-11 14:31:34 +00:00
# endif
2001-10-31 15:03:47 +00:00
sal_uInt16 cprops = jvm . getProperties ( ) . size ( ) ;
2001-06-11 14:31:34 +00:00
2001-10-31 15:03:47 +00:00
JavaVMInitArgs vm_args2 ;
JavaVMOption * options = new JavaVMOption [ cprops + 1 ] ;
OString sClassPath = OString ( " -Djava.class.path= " ) + vm_args . classpath ;
options [ 0 ] . optionString = ( char * ) sClassPath . getStr ( ) ;
options [ 0 ] . extraInfo = NULL ;
2001-09-25 05:39:19 +00:00
2001-10-31 15:03:47 +00:00
OString * arProps = new OString [ cprops ] ;
2001-04-25 10:31:24 +00:00
2001-10-31 15:03:47 +00:00
OString sPattern ( " -X " ) ;
for ( sal_uInt16 x = 0 ; x < cprops ; x + + )
{
OString sOption ( vm_args . properties [ x ] ) ;
2000-11-14 13:07:06 +00:00
2001-10-31 15:03:47 +00:00
if ( ! sOption . matchIgnoreAsciiCase ( sPattern , 0 ) )
arProps [ x ] = OString ( " -D " ) + vm_args . properties [ x ] ;
else
arProps [ x ] = vm_args . properties [ x ] ;
options [ x + 1 ] . optionString = ( char * ) arProps [ x ] . getStr ( ) ;
options [ x + 1 ] . extraInfo = NULL ;
2000-11-14 13:07:06 +00:00
}
2001-10-31 15:03:47 +00:00
vm_args2 . version = 0x00010002 ;
vm_args2 . options = options ;
vm_args2 . nOptions = cprops + 1 ;
vm_args2 . ignoreUnrecognized = JNI_TRUE ;
err = pCreateJavaVM ( & pJavaVM , & pJNIEnv , & vm_args2 ) ;
// Necessary to make debugging work. This thread will be suspended when this function
// returns.
if ( err = = 0 )
pJavaVM - > DetachCurrentThread ( ) ;
delete [ ] options ;
delete [ ] arProps ;
}
if ( err ) {
OUString message ( RTL_CONSTASCII_USTRINGPARAM ( " JavaVirtualMachine_Impl::createJavaVM - can not create vm, cause of err: " ) ) ;
message + = OUString : : valueOf ( ( sal_Int32 ) err ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
throw RuntimeException ( message , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
}
2001-10-31 15:03:47 +00:00
return pJavaVM ;
}
// XJavaVM
Any JavaVirtualMachine_Impl : : getJavaVM ( const Sequence < sal_Int8 > & processId ) throw ( RuntimeException ) {
MutexGuard guarg ( _Mutex ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
Sequence < sal_Int8 > localProcessID ( 16 ) ;
rtl_getGlobalProcessId ( ( sal_uInt8 * ) localProcessID . getArray ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
if ( localProcessID = = processId & & ! _pVMContext )
{
if ( _error . getLength ( ) ) // do we have an error?
throw RuntimeException ( _error , Reference < XInterface > ( ) ) ;
2000-12-19 09:20:57 +00:00
2001-10-31 15:03:47 +00:00
uno_Environment * * ppEnviroments = NULL ;
sal_Int32 size = 0 ;
OUString java ( OUString : : createFromAscii ( " java " ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
uno_getRegisteredEnvironments ( & ppEnviroments , & size , ( uno_memAlloc ) malloc , java . pData ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
if ( size ) { // do we found an existing java environment?
OSL_TRACE ( " javavm.cxx: found an existing environment " ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
_pJava_environment = ppEnviroments [ 0 ] ;
_pJava_environment - > acquire ( _pJava_environment ) ;
_pVMContext = ( JavaVMContext * ) _pJava_environment - > pContext ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
for ( sal_Int32 i = 0 ; i < size ; + + i )
ppEnviroments [ i ] - > release ( ppEnviroments [ i ] ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
free ( ppEnviroments ) ;
}
else
{
JVM jvm ;
JavaVM * pJavaVM ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
initVMConfiguration ( & jvm , _xSMgr , _xCtx ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
if ( jvm . isEnabled ( ) ) {
2000-09-28 16:34:41 +00:00
// create the java vm
2001-10-31 15:03:47 +00:00
try {
pJavaVM = _creatorThread . createJavaVM ( jvm ) ;
}
catch ( RuntimeException & runtimeException ) {
// save the error message
2000-12-19 09:20:57 +00:00
_error = runtimeException . Message ;
throw ;
2001-10-31 15:03:47 +00:00
}
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
// create a context
2001-10-31 15:03:47 +00:00
_pVMContext = new JavaVMContext ( pJavaVM ) ;
2000-09-18 14:29:57 +00:00
2000-09-28 16:34:41 +00:00
// register the java vm at the uno runtime
2001-10-31 15:03:47 +00:00
uno_getEnvironment ( & _pJava_environment , java . pData , _pVMContext ) ;
// listen for changes in the configuration, e.g. proxy settings.
registerConfigChangesListener ( ) ;
2000-09-28 16:34:41 +00:00
}
}
2001-10-31 15:03:47 +00:00
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
Any any ;
if ( _pVMContext )
{
if ( sizeof ( _pVMContext - > _pJavaVM ) = = sizeof ( sal_Int32 ) ) { // 32 bit system?
sal_Int32 nP = ( sal_Int32 ) _pVMContext - > _pJavaVM ;
any < < = nP ;
}
else if ( sizeof ( _pVMContext - > _pJavaVM ) = = sizeof ( sal_Int64 ) ) { // 64 bit system?
sal_Int64 nP = ( sal_Int64 ) _pVMContext - > _pJavaVM ;
any < < = nP ;
2000-09-28 16:34:41 +00:00
}
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
return any ;
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
// XJavaVM
sal_Bool JavaVirtualMachine_Impl : : isVMStarted ( void ) throw ( RuntimeException ) {
return _pVMContext ! = NULL ;
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
// XJavaVM
sal_Bool JavaVirtualMachine_Impl : : isVMEnabled ( void ) throw ( RuntimeException ) {
JVM jvm ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
initVMConfiguration ( & jvm , _xSMgr , _xCtx ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
return jvm . isEnabled ( ) ;
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
// XJavaThreadRegister_11
sal_Bool JavaVirtualMachine_Impl : : isThreadAttached ( void ) throw ( RuntimeException ) {
if ( ! _pVMContext )
throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JavaVirtualMachine_Impl::isThreadAttached - not vm context " ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
return _pVMContext - > isThreadAttached ( ) ;
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
// XJavaThreadRegister_11
void JavaVirtualMachine_Impl : : registerThread ( void ) throw ( RuntimeException ) {
if ( ! _pVMContext )
throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JavaVirtualMachine_Impl::registerThread - not vm context " ) ) , Reference < XInterface > ( ) ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
_pVMContext - > registerThread ( ) ;
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
// XJavaThreadRegister_11
void JavaVirtualMachine_Impl : : revokeThread ( void ) throw ( RuntimeException ) {
if ( ! _pVMContext )
throw RuntimeException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " JavaVirtualMachine_Impl::revokeThread - not vm context " ) ) , Reference < XInterface > ( ) ) ;
_pVMContext - > revokeThread ( ) ;
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
// JavaVirtualMachine_Impl_CreateInstance()
static Reference < XInterface > SAL_CALL JavaVirtualMachine_Impl_createInstance ( const Reference < XComponentContext > & xCtx )
throw ( RuntimeException )
{
Reference < XInterface > xRet ;
{
MutexGuard guard ( Mutex : : getGlobalMutex ( ) ) ;
// The javavm is never destroyed !
static Reference < XInterface > * pStaticRef = 0 ;
if ( pStaticRef )
2001-06-22 15:21:02 +00:00
{
2001-10-31 15:03:47 +00:00
xRet = * pStaticRef ;
}
else
2001-06-22 15:21:02 +00:00
{
xRet = * new JavaVirtualMachine_Impl ( xCtx ) ;
pStaticRef = new Reference < XInterface > ( xRet ) ;
}
2001-10-31 15:03:47 +00:00
}
2001-06-22 15:21:02 +00:00
return xRet ;
2001-10-31 15:03:47 +00:00
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
/*We listen to changes in the configuration. For example, the user changes the proxy
settings in the options dialog ( menu tools ) . Then we are notified of this change and
if the java vm is already running we change the properties ( System . lang . System . setProperties )
through JNI .
To receive notifications this class implements XContainerListener .
*/
void JavaVirtualMachine_Impl : : registerConfigChangesListener ( )
{
try
{
Reference < XMultiServiceFactory > xConfigProvider (
_xSMgr - > createInstanceWithContext ( OUString ( RTL_CONSTASCII_USTRINGPARAM (
" com.sun.star.configuration.ConfigurationProvider " ) ) , _xCtx ) , UNO_QUERY ) ;
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
if ( xConfigProvider . is ( ) )
{
2001-11-19 11:00:15 +00:00
// We register this instance as listener to changes in org.openoffice.Inet/Settings
2001-10-31 15:03:47 +00:00
// arguments for ConfigurationAccess
Sequence < Any > aArguments ( 2 ) ;
aArguments [ 0 ] < < = PropertyValue (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " nodepath " ) ) ,
0 ,
makeAny ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " org.openoffice.Inet/Settings " ) ) ) ,
PropertyState_DIRECT_VALUE ) ;
// depth: -1 means unlimited
aArguments [ 1 ] < < = PropertyValue (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " depth " ) ) ,
0 ,
makeAny ( ( sal_Int32 ) - 1 ) ,
PropertyState_DIRECT_VALUE ) ;
_xConfigurationAccess = xConfigProvider - > createInstanceWithArguments (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.configuration.ConfigurationAccess " ) ) ,
aArguments ) ;
Reference < XContainer > xContainer ( _xConfigurationAccess , UNO_QUERY ) ;
if ( xContainer . is ( ) )
xContainer - > addContainerListener ( static_cast < XContainerListener * > ( this ) ) ;
2001-11-19 11:00:15 +00:00
// now register as listener to changes in org.openoffice.Java/VirtualMachine
Sequence < Any > aArguments2 ( 2 ) ;
aArguments2 [ 0 ] < < = PropertyValue (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " nodepath " ) ) ,
0 ,
makeAny ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " org.openoffice.Office.Java/VirtualMachine " ) ) ) ,
PropertyState_DIRECT_VALUE ) ;
// depth: -1 means unlimited
aArguments2 [ 1 ] < < = PropertyValue (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " depth " ) ) ,
0 ,
makeAny ( ( sal_Int32 ) - 1 ) ,
PropertyState_DIRECT_VALUE ) ;
_xConfigurationAccess2 = xConfigProvider - > createInstanceWithArguments (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.configuration.ConfigurationAccess " ) ) ,
aArguments2 ) ;
Reference < XContainer > xContainer2 ( _xConfigurationAccess2 , UNO_QUERY ) ;
if ( xContainer2 . is ( ) )
xContainer2 - > addContainerListener ( static_cast < XContainerListener * > ( this ) ) ;
2001-10-31 15:03:47 +00:00
// The JavaVM service is registered as listener with the configuration service. That
// service therefore keeps a reference of JavaVM. We need to unregister JavaVM with the
// configuration service, otherwise the ref count of JavaVM won't drop to zero.
Reference < XComponent > xComp ( _xSMgr , UNO_QUERY ) ;
if ( xComp . is ( ) )
{
xComp - > addEventListener ( static_cast < XEventListener * > ( this ) ) ;
}
}
} catch ( Exception & e )
{
# ifdef DEBUG
OString message = OUStringToOString ( e . Message , RTL_TEXTENCODING_ASCII_US ) ;
OSL_TRACE ( " javavm.cxx: could not set up listener for Configuration because of >%s< " , message . getStr ( ) ) ;
# endif
}
}
2000-09-18 14:29:57 +00:00
2001-10-31 15:03:47 +00:00
void JavaVirtualMachine_Impl : : disposeJavaVM ( ) throw ( ) {
if ( _pVMContext ) {
2000-09-28 16:34:41 +00:00
// pJavaVM->DestroyJavaVM();
// _pJavaVM = NULL;
}
}
2001-10-31 15:03:47 +00:00
}
2000-09-18 14:29:57 +00:00
2001-06-22 15:21:02 +00:00
using namespace stoc_javavm ;
2000-09-18 14:29:57 +00:00
2001-06-22 15:21:02 +00:00
static struct ImplementationEntry g_entries [ ] =
{
{
JavaVirtualMachine_Impl_createInstance , javavm_getImplementationName ,
javavm_getSupportedServiceNames , createSingleComponentFactory ,
0 , 0
} ,
{ 0 , 0 , 0 , 0 , 0 , 0 }
} ;
extern " C "
{
// NOTE: component_canUnload is not exported, as the library cannot be unloaded.
//==================================================================================================
void SAL_CALL component_getImplementationEnvironment (
const sal_Char * * ppEnvTypeName , uno_Environment * * ppEnv )
{
* ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ;
}
//==================================================================================================
sal_Bool SAL_CALL component_writeInfo (
void * pServiceManager , void * pRegistryKey )
{
return component_writeInfoHelper ( pServiceManager , pRegistryKey , g_entries ) ;
}
//==================================================================================================
void * SAL_CALL component_getFactory (
const sal_Char * pImplName , void * pServiceManager , void * pRegistryKey )
{
return component_getFactoryHelper ( pImplName , pServiceManager , pRegistryKey , g_entries ) ;
}
2000-09-18 14:29:57 +00:00
}