1*448486c6SDamjan Jovanovic /************************************************************** 2*448486c6SDamjan Jovanovic * 3*448486c6SDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one 4*448486c6SDamjan Jovanovic * or more contributor license agreements. See the NOTICE file 5*448486c6SDamjan Jovanovic * distributed with this work for additional information 6*448486c6SDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file 7*448486c6SDamjan Jovanovic * to you under the Apache License, Version 2.0 (the 8*448486c6SDamjan Jovanovic * "License"); you may not use this file except in compliance 9*448486c6SDamjan Jovanovic * with the License. You may obtain a copy of the License at 10*448486c6SDamjan Jovanovic * 11*448486c6SDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0 12*448486c6SDamjan Jovanovic * 13*448486c6SDamjan Jovanovic * Unless required by applicable law or agreed to in writing, 14*448486c6SDamjan Jovanovic * software distributed under the License is distributed on an 15*448486c6SDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*448486c6SDamjan Jovanovic * KIND, either express or implied. See the License for the 17*448486c6SDamjan Jovanovic * specific language governing permissions and limitations 18*448486c6SDamjan Jovanovic * under the License. 19*448486c6SDamjan Jovanovic * 20*448486c6SDamjan Jovanovic *************************************************************/ 21*448486c6SDamjan Jovanovic 22*448486c6SDamjan Jovanovic 23*448486c6SDamjan Jovanovic 24*448486c6SDamjan Jovanovic // MARKER(update_precomp.py): autogen include statement, do not remove 25*448486c6SDamjan Jovanovic #include "precompiled_extensions.hxx" 26*448486c6SDamjan Jovanovic 27*448486c6SDamjan Jovanovic #include "log_module.hxx" 28*448486c6SDamjan Jovanovic #include "methodguard.hxx" 29*448486c6SDamjan Jovanovic #include "loghandler.hxx" 30*448486c6SDamjan Jovanovic 31*448486c6SDamjan Jovanovic /** === begin UNO includes === **/ 32*448486c6SDamjan Jovanovic #include <com/sun/star/logging/XConsoleHandler.hpp> 33*448486c6SDamjan Jovanovic #include <com/sun/star/lang/XServiceInfo.hpp> 34*448486c6SDamjan Jovanovic #include <com/sun/star/logging/LogLevel.hpp> 35*448486c6SDamjan Jovanovic #include <com/sun/star/lang/XInitialization.hpp> 36*448486c6SDamjan Jovanovic #include <com/sun/star/ucb/AlreadyInitializedException.hpp> 37*448486c6SDamjan Jovanovic #include <com/sun/star/lang/IllegalArgumentException.hpp> 38*448486c6SDamjan Jovanovic #include <com/sun/star/beans/NamedValue.hpp> 39*448486c6SDamjan Jovanovic /** === end UNO includes === **/ 40*448486c6SDamjan Jovanovic 41*448486c6SDamjan Jovanovic #include <tools/diagnose_ex.h> 42*448486c6SDamjan Jovanovic 43*448486c6SDamjan Jovanovic #include <comphelper/componentcontext.hxx> 44*448486c6SDamjan Jovanovic 45*448486c6SDamjan Jovanovic #include <cppuhelper/compbase3.hxx> 46*448486c6SDamjan Jovanovic #include <cppuhelper/basemutex.hxx> 47*448486c6SDamjan Jovanovic 48*448486c6SDamjan Jovanovic #include <rtl/strbuf.hxx> 49*448486c6SDamjan Jovanovic #include <osl/process.h> 50*448486c6SDamjan Jovanovic #include <osl/socket.hxx> 51*448486c6SDamjan Jovanovic #include <osl/time.h> 52*448486c6SDamjan Jovanovic 53*448486c6SDamjan Jovanovic #include <stdio.h> 54*448486c6SDamjan Jovanovic 55*448486c6SDamjan Jovanovic //........................................................................ 56*448486c6SDamjan Jovanovic namespace logging 57*448486c6SDamjan Jovanovic { 58*448486c6SDamjan Jovanovic //........................................................................ 59*448486c6SDamjan Jovanovic 60*448486c6SDamjan Jovanovic /** === begin UNO using === **/ 61*448486c6SDamjan Jovanovic using ::com::sun::star::logging::XLogHandler; 62*448486c6SDamjan Jovanovic using ::com::sun::star::lang::XServiceInfo; 63*448486c6SDamjan Jovanovic using ::com::sun::star::uno::Reference; 64*448486c6SDamjan Jovanovic using ::com::sun::star::uno::XComponentContext; 65*448486c6SDamjan Jovanovic using ::com::sun::star::uno::RuntimeException; 66*448486c6SDamjan Jovanovic using ::com::sun::star::logging::XLogFormatter; 67*448486c6SDamjan Jovanovic using ::com::sun::star::uno::Sequence; 68*448486c6SDamjan Jovanovic using ::com::sun::star::logging::LogRecord; 69*448486c6SDamjan Jovanovic using ::com::sun::star::uno::UNO_QUERY_THROW; 70*448486c6SDamjan Jovanovic using ::com::sun::star::uno::Exception; 71*448486c6SDamjan Jovanovic using ::com::sun::star::uno::Any; 72*448486c6SDamjan Jovanovic using ::com::sun::star::uno::XInterface; 73*448486c6SDamjan Jovanovic using ::com::sun::star::lang::XInitialization; 74*448486c6SDamjan Jovanovic using ::com::sun::star::ucb::AlreadyInitializedException; 75*448486c6SDamjan Jovanovic using ::com::sun::star::lang::IllegalArgumentException; 76*448486c6SDamjan Jovanovic using ::com::sun::star::beans::NamedValue; 77*448486c6SDamjan Jovanovic /** === end UNO using === **/ 78*448486c6SDamjan Jovanovic namespace LogLevel = ::com::sun::star::logging::LogLevel; 79*448486c6SDamjan Jovanovic 80*448486c6SDamjan Jovanovic //==================================================================== 81*448486c6SDamjan Jovanovic //= SyslogHandler - declaration 82*448486c6SDamjan Jovanovic //==================================================================== 83*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- 84*448486c6SDamjan Jovanovic typedef ::cppu::WeakComponentImplHelper3 < XLogHandler 85*448486c6SDamjan Jovanovic , XServiceInfo 86*448486c6SDamjan Jovanovic , XInitialization 87*448486c6SDamjan Jovanovic > SyslogHandler_Base; 88*448486c6SDamjan Jovanovic class SyslogHandler :public ::cppu::BaseMutex 89*448486c6SDamjan Jovanovic ,public SyslogHandler_Base 90*448486c6SDamjan Jovanovic { 91*448486c6SDamjan Jovanovic private: 92*448486c6SDamjan Jovanovic ::comphelper::ComponentContext m_aContext; 93*448486c6SDamjan Jovanovic LogHandlerHelper m_aHandlerHelper; 94*448486c6SDamjan Jovanovic ::osl::SocketAddr m_aSocketAddress; 95*448486c6SDamjan Jovanovic ::osl::DatagramSocket m_aSocket; 96*448486c6SDamjan Jovanovic 97*448486c6SDamjan Jovanovic protected: 98*448486c6SDamjan Jovanovic SyslogHandler( const Reference< XComponentContext >& _rxContext ); 99*448486c6SDamjan Jovanovic virtual ~SyslogHandler(); 100*448486c6SDamjan Jovanovic 101*448486c6SDamjan Jovanovic // XLogHandler 102*448486c6SDamjan Jovanovic virtual ::rtl::OUString SAL_CALL getEncoding() throw (RuntimeException); 103*448486c6SDamjan Jovanovic virtual void SAL_CALL setEncoding( const ::rtl::OUString& _encoding ) throw (RuntimeException); 104*448486c6SDamjan Jovanovic virtual Reference< XLogFormatter > SAL_CALL getFormatter() throw (RuntimeException); 105*448486c6SDamjan Jovanovic virtual void SAL_CALL setFormatter( const Reference< XLogFormatter >& _formatter ) throw (RuntimeException); 106*448486c6SDamjan Jovanovic virtual ::sal_Int32 SAL_CALL getLevel() throw (RuntimeException); 107*448486c6SDamjan Jovanovic virtual void SAL_CALL setLevel( ::sal_Int32 _level ) throw (RuntimeException); 108*448486c6SDamjan Jovanovic virtual void SAL_CALL flush( ) throw (RuntimeException); 109*448486c6SDamjan Jovanovic virtual ::sal_Bool SAL_CALL publish( const LogRecord& Record ) throw (RuntimeException); 110*448486c6SDamjan Jovanovic 111*448486c6SDamjan Jovanovic // XInitialization 112*448486c6SDamjan Jovanovic virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); 113*448486c6SDamjan Jovanovic 114*448486c6SDamjan Jovanovic // XServiceInfo 115*448486c6SDamjan Jovanovic virtual ::rtl::OUString SAL_CALL getImplementationName() throw(RuntimeException); 116*448486c6SDamjan Jovanovic virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException); 117*448486c6SDamjan Jovanovic virtual Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw(RuntimeException); 118*448486c6SDamjan Jovanovic 119*448486c6SDamjan Jovanovic // OComponentHelper 120*448486c6SDamjan Jovanovic virtual void SAL_CALL disposing(); 121*448486c6SDamjan Jovanovic 122*448486c6SDamjan Jovanovic public: 123*448486c6SDamjan Jovanovic // XServiceInfo - static version 124*448486c6SDamjan Jovanovic static ::rtl::OUString SAL_CALL getImplementationName_static(); 125*448486c6SDamjan Jovanovic static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static(); 126*448486c6SDamjan Jovanovic static Reference< XInterface > Create( const Reference< XComponentContext >& _rxContext ); 127*448486c6SDamjan Jovanovic 128*448486c6SDamjan Jovanovic public: 129*448486c6SDamjan Jovanovic typedef ComponentMethodGuard< SyslogHandler > MethodGuard; 130*448486c6SDamjan Jovanovic void enterMethod( MethodGuard::Access ); 131*448486c6SDamjan Jovanovic void leaveMethod( MethodGuard::Access ); 132*448486c6SDamjan Jovanovic }; 133*448486c6SDamjan Jovanovic 134*448486c6SDamjan Jovanovic //==================================================================== 135*448486c6SDamjan Jovanovic //= SyslogHandler - implementation 136*448486c6SDamjan Jovanovic //==================================================================== 137*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- SyslogHandler(const Reference<XComponentContext> & _rxContext)138*448486c6SDamjan Jovanovic SyslogHandler::SyslogHandler( const Reference< XComponentContext >& _rxContext ) 139*448486c6SDamjan Jovanovic :SyslogHandler_Base( m_aMutex ) 140*448486c6SDamjan Jovanovic ,m_aContext( _rxContext ) 141*448486c6SDamjan Jovanovic ,m_aHandlerHelper( _rxContext, m_aMutex, rBHelper ) 142*448486c6SDamjan Jovanovic ,m_aSocketAddress() 143*448486c6SDamjan Jovanovic ,m_aSocket() 144*448486c6SDamjan Jovanovic { 145*448486c6SDamjan Jovanovic } 146*448486c6SDamjan Jovanovic 147*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- ~SyslogHandler()148*448486c6SDamjan Jovanovic SyslogHandler::~SyslogHandler() 149*448486c6SDamjan Jovanovic { 150*448486c6SDamjan Jovanovic if ( !rBHelper.bDisposed ) 151*448486c6SDamjan Jovanovic { 152*448486c6SDamjan Jovanovic acquire(); 153*448486c6SDamjan Jovanovic dispose(); 154*448486c6SDamjan Jovanovic } 155*448486c6SDamjan Jovanovic } 156*448486c6SDamjan Jovanovic 157*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- disposing()158*448486c6SDamjan Jovanovic void SAL_CALL SyslogHandler::disposing() 159*448486c6SDamjan Jovanovic { 160*448486c6SDamjan Jovanovic m_aHandlerHelper.setFormatter( NULL ); 161*448486c6SDamjan Jovanovic } 162*448486c6SDamjan Jovanovic 163*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- enterMethod(MethodGuard::Access)164*448486c6SDamjan Jovanovic void SyslogHandler::enterMethod( MethodGuard::Access ) 165*448486c6SDamjan Jovanovic { 166*448486c6SDamjan Jovanovic m_aHandlerHelper.enterMethod(); 167*448486c6SDamjan Jovanovic } 168*448486c6SDamjan Jovanovic 169*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- leaveMethod(MethodGuard::Access)170*448486c6SDamjan Jovanovic void SyslogHandler::leaveMethod( MethodGuard::Access ) 171*448486c6SDamjan Jovanovic { 172*448486c6SDamjan Jovanovic m_aMutex.release(); 173*448486c6SDamjan Jovanovic } 174*448486c6SDamjan Jovanovic 175*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- getEncoding()176*448486c6SDamjan Jovanovic ::rtl::OUString SAL_CALL SyslogHandler::getEncoding() throw (RuntimeException) 177*448486c6SDamjan Jovanovic { 178*448486c6SDamjan Jovanovic MethodGuard aGuard( *this ); 179*448486c6SDamjan Jovanovic ::rtl::OUString sEncoding; 180*448486c6SDamjan Jovanovic OSL_VERIFY( m_aHandlerHelper.getEncoding( sEncoding ) ); 181*448486c6SDamjan Jovanovic return sEncoding; 182*448486c6SDamjan Jovanovic } 183*448486c6SDamjan Jovanovic 184*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- setEncoding(const::rtl::OUString & _rEncoding)185*448486c6SDamjan Jovanovic void SAL_CALL SyslogHandler::setEncoding( const ::rtl::OUString& _rEncoding ) throw (RuntimeException) 186*448486c6SDamjan Jovanovic { 187*448486c6SDamjan Jovanovic MethodGuard aGuard( *this ); 188*448486c6SDamjan Jovanovic OSL_VERIFY( m_aHandlerHelper.setEncoding( _rEncoding ) ); 189*448486c6SDamjan Jovanovic } 190*448486c6SDamjan Jovanovic 191*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- getFormatter()192*448486c6SDamjan Jovanovic Reference< XLogFormatter > SAL_CALL SyslogHandler::getFormatter() throw (RuntimeException) 193*448486c6SDamjan Jovanovic { 194*448486c6SDamjan Jovanovic MethodGuard aGuard( *this ); 195*448486c6SDamjan Jovanovic return m_aHandlerHelper.getFormatter(); 196*448486c6SDamjan Jovanovic } 197*448486c6SDamjan Jovanovic 198*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- setFormatter(const Reference<XLogFormatter> & _rxFormatter)199*448486c6SDamjan Jovanovic void SAL_CALL SyslogHandler::setFormatter( const Reference< XLogFormatter >& _rxFormatter ) throw (RuntimeException) 200*448486c6SDamjan Jovanovic { 201*448486c6SDamjan Jovanovic MethodGuard aGuard( *this ); 202*448486c6SDamjan Jovanovic m_aHandlerHelper.setFormatter( _rxFormatter ); 203*448486c6SDamjan Jovanovic } 204*448486c6SDamjan Jovanovic 205*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- getLevel()206*448486c6SDamjan Jovanovic ::sal_Int32 SAL_CALL SyslogHandler::getLevel() throw (RuntimeException) 207*448486c6SDamjan Jovanovic { 208*448486c6SDamjan Jovanovic MethodGuard aGuard( *this ); 209*448486c6SDamjan Jovanovic return m_aHandlerHelper.getLevel(); 210*448486c6SDamjan Jovanovic } 211*448486c6SDamjan Jovanovic 212*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- setLevel(::sal_Int32 _nLevel)213*448486c6SDamjan Jovanovic void SAL_CALL SyslogHandler::setLevel( ::sal_Int32 _nLevel ) throw (RuntimeException) 214*448486c6SDamjan Jovanovic { 215*448486c6SDamjan Jovanovic MethodGuard aGuard( *this ); 216*448486c6SDamjan Jovanovic m_aHandlerHelper.setLevel( _nLevel ); 217*448486c6SDamjan Jovanovic } 218*448486c6SDamjan Jovanovic 219*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- flush()220*448486c6SDamjan Jovanovic void SAL_CALL SyslogHandler::flush( ) throw (RuntimeException) 221*448486c6SDamjan Jovanovic { 222*448486c6SDamjan Jovanovic MethodGuard aGuard( *this ); 223*448486c6SDamjan Jovanovic fflush( stdout ); 224*448486c6SDamjan Jovanovic fflush( stderr ); 225*448486c6SDamjan Jovanovic } 226*448486c6SDamjan Jovanovic 227*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- publish(const LogRecord & _rRecord)228*448486c6SDamjan Jovanovic ::sal_Bool SAL_CALL SyslogHandler::publish( const LogRecord& _rRecord ) throw (RuntimeException) 229*448486c6SDamjan Jovanovic { 230*448486c6SDamjan Jovanovic MethodGuard aGuard( *this ); 231*448486c6SDamjan Jovanovic 232*448486c6SDamjan Jovanovic ::rtl::OString sEntry; 233*448486c6SDamjan Jovanovic if ( !m_aHandlerHelper.formatForPublishing( _rRecord, sEntry ) ) 234*448486c6SDamjan Jovanovic return sal_False; 235*448486c6SDamjan Jovanovic 236*448486c6SDamjan Jovanovic ::rtl::OStringBuffer buffer; 237*448486c6SDamjan Jovanovic // PRI 238*448486c6SDamjan Jovanovic const sal_Int32 facility = 1; // USER 239*448486c6SDamjan Jovanovic sal_Int32 severity; 240*448486c6SDamjan Jovanovic switch ( _rRecord.Level ) 241*448486c6SDamjan Jovanovic { 242*448486c6SDamjan Jovanovic case LogLevel::SEVERE: 243*448486c6SDamjan Jovanovic severity = 3; // error 244*448486c6SDamjan Jovanovic break; 245*448486c6SDamjan Jovanovic case LogLevel::WARNING: 246*448486c6SDamjan Jovanovic severity = 4; // warning 247*448486c6SDamjan Jovanovic break; 248*448486c6SDamjan Jovanovic case LogLevel::INFO: 249*448486c6SDamjan Jovanovic case LogLevel::CONFIG: 250*448486c6SDamjan Jovanovic severity = 5; // notice 251*448486c6SDamjan Jovanovic break; 252*448486c6SDamjan Jovanovic default: 253*448486c6SDamjan Jovanovic severity = 7; // debug 254*448486c6SDamjan Jovanovic } 255*448486c6SDamjan Jovanovic buffer.append( '<' ); 256*448486c6SDamjan Jovanovic buffer.append( ( facility * 8 ) + severity ); 257*448486c6SDamjan Jovanovic buffer.append( '>' ); 258*448486c6SDamjan Jovanovic 259*448486c6SDamjan Jovanovic // VERSION 260*448486c6SDamjan Jovanovic buffer.append( '1' ); 261*448486c6SDamjan Jovanovic buffer.append( ' ' ); 262*448486c6SDamjan Jovanovic 263*448486c6SDamjan Jovanovic // TIMESTAMP 264*448486c6SDamjan Jovanovic char timestampBuffer[256]; 265*448486c6SDamjan Jovanovic snprintf( timestampBuffer, sizeof( timestampBuffer ), 266*448486c6SDamjan Jovanovic "%04i-%02i-%02iT%02i:%02i:%02i.%02iZ", 267*448486c6SDamjan Jovanovic (int)_rRecord.LogTime.Year, (int)_rRecord.LogTime.Month, (int)_rRecord.LogTime.Day, 268*448486c6SDamjan Jovanovic (int)_rRecord.LogTime.Hours, (int)_rRecord.LogTime.Minutes, (int)_rRecord.LogTime.Seconds, 269*448486c6SDamjan Jovanovic (int)_rRecord.LogTime.HundredthSeconds ); 270*448486c6SDamjan Jovanovic buffer.append( timestampBuffer ); 271*448486c6SDamjan Jovanovic buffer.append( ' ' ); 272*448486c6SDamjan Jovanovic 273*448486c6SDamjan Jovanovic // HOSTNAME 274*448486c6SDamjan Jovanovic ::rtl::OUString hostname = ::osl::SocketAddr::getLocalHostname( 0 ); 275*448486c6SDamjan Jovanovic if ( !hostname.isEmpty() ) 276*448486c6SDamjan Jovanovic buffer.append( ::rtl::OUStringToOString( hostname, RTL_TEXTENCODING_UTF8 ) ); 277*448486c6SDamjan Jovanovic else 278*448486c6SDamjan Jovanovic buffer.append( '-' ); 279*448486c6SDamjan Jovanovic buffer.append( ' ' ); 280*448486c6SDamjan Jovanovic 281*448486c6SDamjan Jovanovic // APP-NAME 282*448486c6SDamjan Jovanovic buffer.append( "soffice" ); 283*448486c6SDamjan Jovanovic buffer.append( ' ' ); 284*448486c6SDamjan Jovanovic 285*448486c6SDamjan Jovanovic // PROC-ID 286*448486c6SDamjan Jovanovic oslProcessInfo pInfo; 287*448486c6SDamjan Jovanovic pInfo.Size = sizeof(oslProcessInfo); 288*448486c6SDamjan Jovanovic oslProcessError prerr = osl_getProcessInfo( NULL, osl_Process_IDENTIFIER, &pInfo ); 289*448486c6SDamjan Jovanovic if ( prerr == osl_Process_E_None ) 290*448486c6SDamjan Jovanovic buffer.append( (sal_Int64) pInfo.Ident ); 291*448486c6SDamjan Jovanovic else 292*448486c6SDamjan Jovanovic buffer.append( '-' ); 293*448486c6SDamjan Jovanovic buffer.append( ' ' ); 294*448486c6SDamjan Jovanovic 295*448486c6SDamjan Jovanovic // MESSAGE-ID 296*448486c6SDamjan Jovanovic buffer.append( '-' ); 297*448486c6SDamjan Jovanovic buffer.append( ' ' ); 298*448486c6SDamjan Jovanovic 299*448486c6SDamjan Jovanovic // STRUCTURED DATA 300*448486c6SDamjan Jovanovic buffer.append( '-' ); 301*448486c6SDamjan Jovanovic buffer.append( ' ' ); 302*448486c6SDamjan Jovanovic 303*448486c6SDamjan Jovanovic // MESSAGE 304*448486c6SDamjan Jovanovic buffer.append( sEntry ); 305*448486c6SDamjan Jovanovic 306*448486c6SDamjan Jovanovic sal_Int32 sockRes = m_aSocket.sendTo( m_aSocketAddress, buffer.getStr(), buffer.getLength() ); 307*448486c6SDamjan Jovanovic 308*448486c6SDamjan Jovanovic return sockRes == osl_Socket_MsgNormal; 309*448486c6SDamjan Jovanovic } 310*448486c6SDamjan Jovanovic 311*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- initialize(const Sequence<Any> & _rArguments)312*448486c6SDamjan Jovanovic void SAL_CALL SyslogHandler::initialize( const Sequence< Any >& _rArguments ) throw (Exception, RuntimeException) 313*448486c6SDamjan Jovanovic { 314*448486c6SDamjan Jovanovic ::osl::MutexGuard aGuard( m_aMutex ); 315*448486c6SDamjan Jovanovic 316*448486c6SDamjan Jovanovic if ( m_aHandlerHelper.getIsInitialized() ) 317*448486c6SDamjan Jovanovic throw AlreadyInitializedException(); 318*448486c6SDamjan Jovanovic 319*448486c6SDamjan Jovanovic if ( _rArguments.getLength() != 1 ) 320*448486c6SDamjan Jovanovic throw IllegalArgumentException( ::rtl::OUString(), *this, 1 ); 321*448486c6SDamjan Jovanovic 322*448486c6SDamjan Jovanovic Sequence< NamedValue > aSettings; 323*448486c6SDamjan Jovanovic if ( !( _rArguments[0] >>= aSettings ) ) 324*448486c6SDamjan Jovanovic throw IllegalArgumentException( ::rtl::OUString(), *this, 1 ); 325*448486c6SDamjan Jovanovic 326*448486c6SDamjan Jovanovic // createWithSettings( [in] sequence< ::com::sun::star::beans::NamedValue > Settings ) 327*448486c6SDamjan Jovanovic ::comphelper::NamedValueCollection aTypedSettings( aSettings ); 328*448486c6SDamjan Jovanovic m_aHandlerHelper.initFromSettings( aTypedSettings ); 329*448486c6SDamjan Jovanovic 330*448486c6SDamjan Jovanovic ::rtl::OUString host; 331*448486c6SDamjan Jovanovic if ( !aTypedSettings.get_ensureType( "Host", host ) ) 332*448486c6SDamjan Jovanovic throw IllegalArgumentException( ::rtl::OUString(), *this, 1 ); 333*448486c6SDamjan Jovanovic sal_Int32 port; 334*448486c6SDamjan Jovanovic if ( !aTypedSettings.get_ensureType( "Port", port ) ) 335*448486c6SDamjan Jovanovic throw IllegalArgumentException( ::rtl::OUString(), *this, 1 ); 336*448486c6SDamjan Jovanovic ::osl::SocketAddr address( host, port ); 337*448486c6SDamjan Jovanovic if ( address.is() ) 338*448486c6SDamjan Jovanovic m_aSocketAddress = address; 339*448486c6SDamjan Jovanovic else 340*448486c6SDamjan Jovanovic throw IllegalArgumentException( ::rtl::OUString(), *this, 1 ); 341*448486c6SDamjan Jovanovic 342*448486c6SDamjan Jovanovic m_aHandlerHelper.setIsInitialized(); 343*448486c6SDamjan Jovanovic } 344*448486c6SDamjan Jovanovic 345*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- getImplementationName()346*448486c6SDamjan Jovanovic ::rtl::OUString SAL_CALL SyslogHandler::getImplementationName() throw(RuntimeException) 347*448486c6SDamjan Jovanovic { 348*448486c6SDamjan Jovanovic return getImplementationName_static(); 349*448486c6SDamjan Jovanovic } 350*448486c6SDamjan Jovanovic 351*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- supportsService(const::rtl::OUString & _rServiceName)352*448486c6SDamjan Jovanovic ::sal_Bool SAL_CALL SyslogHandler::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException) 353*448486c6SDamjan Jovanovic { 354*448486c6SDamjan Jovanovic const Sequence< ::rtl::OUString > aServiceNames( getSupportedServiceNames() ); 355*448486c6SDamjan Jovanovic for ( const ::rtl::OUString* pServiceNames = aServiceNames.getConstArray(); 356*448486c6SDamjan Jovanovic pServiceNames != aServiceNames.getConstArray() + aServiceNames.getLength(); 357*448486c6SDamjan Jovanovic ++pServiceNames 358*448486c6SDamjan Jovanovic ) 359*448486c6SDamjan Jovanovic if ( _rServiceName == *pServiceNames ) 360*448486c6SDamjan Jovanovic return sal_True; 361*448486c6SDamjan Jovanovic return sal_False; 362*448486c6SDamjan Jovanovic } 363*448486c6SDamjan Jovanovic 364*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- getSupportedServiceNames()365*448486c6SDamjan Jovanovic Sequence< ::rtl::OUString > SAL_CALL SyslogHandler::getSupportedServiceNames() throw(RuntimeException) 366*448486c6SDamjan Jovanovic { 367*448486c6SDamjan Jovanovic return getSupportedServiceNames_static(); 368*448486c6SDamjan Jovanovic } 369*448486c6SDamjan Jovanovic 370*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- getImplementationName_static()371*448486c6SDamjan Jovanovic ::rtl::OUString SAL_CALL SyslogHandler::getImplementationName_static() 372*448486c6SDamjan Jovanovic { 373*448486c6SDamjan Jovanovic return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.extensions.SyslogHandler" ) ); 374*448486c6SDamjan Jovanovic } 375*448486c6SDamjan Jovanovic 376*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- getSupportedServiceNames_static()377*448486c6SDamjan Jovanovic Sequence< ::rtl::OUString > SAL_CALL SyslogHandler::getSupportedServiceNames_static() 378*448486c6SDamjan Jovanovic { 379*448486c6SDamjan Jovanovic Sequence< ::rtl::OUString > aServiceNames(1); 380*448486c6SDamjan Jovanovic aServiceNames[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.logging.SyslogHandler" ) ); 381*448486c6SDamjan Jovanovic return aServiceNames; 382*448486c6SDamjan Jovanovic } 383*448486c6SDamjan Jovanovic 384*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- Create(const Reference<XComponentContext> & _rxContext)385*448486c6SDamjan Jovanovic Reference< XInterface > SyslogHandler::Create( const Reference< XComponentContext >& _rxContext ) 386*448486c6SDamjan Jovanovic { 387*448486c6SDamjan Jovanovic return *( new SyslogHandler( _rxContext ) ); 388*448486c6SDamjan Jovanovic } 389*448486c6SDamjan Jovanovic 390*448486c6SDamjan Jovanovic //-------------------------------------------------------------------- createRegistryInfo_SyslogHandler()391*448486c6SDamjan Jovanovic void createRegistryInfo_SyslogHandler() 392*448486c6SDamjan Jovanovic { 393*448486c6SDamjan Jovanovic static OAutoRegistration< SyslogHandler > aAutoRegistration; 394*448486c6SDamjan Jovanovic } 395*448486c6SDamjan Jovanovic 396*448486c6SDamjan Jovanovic //........................................................................ 397*448486c6SDamjan Jovanovic } // namespace logging 398*448486c6SDamjan Jovanovic //........................................................................ 399