Tag: cws_src680_dba24d User: oj Date: 2007-12-04 09:24:12+0000 Modified: dba/dbaccess/source/core/api/FilteredContainer.cxx dba/dbaccess/source/core/api/RowSet.cxx dba/dbaccess/source/core/api/RowSet.hxx dba/dbaccess/source/core/api/tablecontainer.cxx dba/dbaccess/source/core/api/viewcontainer.cxx dba/dbaccess/source/core/dataaccess/connection.cxx dba/dbaccess/source/core/dataaccess/connection.hxx dba/dbaccess/source/core/inc/FilteredContainer.hxx dba/dbaccess/source/core/inc/viewcontainer.hxx dba/dbaccess/source/core/inc/tablecontainer.hxx
Log: #i81644# add new common var to block elementInserted events File Changes: Directory: /dba/dbaccess/source/core/api/ ========================================= File [changed]: FilteredContainer.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/api/FilteredContainer.cxx?r1=1.9&r2=1.9.170.1 Delta lines: +6 -4 ------------------- --- FilteredContainer.cxx 2006-09-17 06:31:19+0000 1.9 +++ FilteredContainer.cxx 2007-12-04 09:24:08+0000 1.9.170.1 @@ -4,9 +4,9 @@ * * $RCSfile: FilteredContainer.cxx,v $ * - * $Revision: 1.9 $ + * $Revision: 1.9.170.1 $ * - * last change: $Author: obo $ $Date: 2006/09/17 06:31:19 $ + * last change: $Author: oj $ $Date: 2007/12/04 09:24:08 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -106,10 +106,12 @@ const Reference< XConnection >& _xCon, sal_Bool _bCase, IRefreshListener* _pRefreshListener, - IWarningsContainer* _pWarningsContainer) + IWarningsContainer* _pWarningsContainer + ,oslInterlockedCount& _nInAppend) :OCollection(_rParent,_bCase,_rMutex,::std::vector< ::rtl::OUString>()) ,m_pWarningsContainer(_pWarningsContainer) ,m_pRefreshListener(_pRefreshListener) + ,m_nInAppend(_nInAppend) ,m_xConnection(_xCon) ,m_bConstructed(sal_False) { File [changed]: RowSet.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/api/RowSet.cxx?r1=1.153.70.3&r2=1.153.70.4 Delta lines: +5 -4 ------------------- --- RowSet.cxx 2007-12-01 13:39:02+0000 1.153.70.3 +++ RowSet.cxx 2007-12-04 09:24:08+0000 1.153.70.4 @@ -4,9 +4,9 @@ * * $RCSfile: RowSet.cxx,v $ * - * $Revision: 1.153.70.3 $ + * $Revision: 1.153.70.4 $ * - * last change: $Author: fs $ $Date: 2007/12/01 13:39:02 $ + * last change: $Author: oj $ $Date: 2007/12/04 09:24:08 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -269,6 +269,7 @@ ,m_nCommandType(CommandType::COMMAND) ,m_nTransactionIsolation(0) ,m_nPrivileges(0) + ,m_nInAppend(0) ,m_bUseEscapeProcessing(sal_True) ,m_bApplyFilter(sal_False) ,m_bCommandFacetsDirty( sal_True ) @@ -2232,7 +2233,7 @@ DBG_UNHANDLED_EXCEPTION(); } - m_pTables = new OTableContainer(*this,m_aMutex,m_xActiveConnection,bCase,NULL,NULL); + m_pTables = new OTableContainer(*this,m_aMutex,m_xActiveConnection,bCase,NULL,NULL,NULL,m_nInAppend); xTables = m_pTables; Sequence< ::rtl::OUString> aTableFilter(1); aTableFilter[0] = ::rtl::OUString::createFromAscii("%"); File [changed]: RowSet.hxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/api/RowSet.hxx?r1=1.48.70.2&r2=1.48.70.3 Delta lines: +4 -3 ------------------- --- RowSet.hxx 2007-12-01 13:39:05+0000 1.48.70.2 +++ RowSet.hxx 2007-12-04 09:24:09+0000 1.48.70.3 @@ -4,9 +4,9 @@ * * $RCSfile: RowSet.hxx,v $ * - * $Revision: 1.48.70.2 $ + * $Revision: 1.48.70.3 $ * - * last change: $Author: fs $ $Date: 2007/12/01 13:39:05 $ + * last change: $Author: oj $ $Date: 2007/12/04 09:24:09 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -166,6 +166,7 @@ sal_Int32 m_nTransactionIsolation; sal_Int32 m_nPrivileges; sal_Int32 m_nLastKnownRowCount; + oslInterlockedCount m_nInAppend; sal_Bool m_bLastKnownRowCountFinal; sal_Bool m_bUseEscapeProcessing ; sal_Bool m_bApplyFilter ; File [changed]: tablecontainer.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/api/tablecontainer.cxx?r1=1.66&r2=1.66.4.1 Delta lines: +8 -10 -------------------- --- tablecontainer.cxx 2007-11-21 15:35:07+0000 1.66 +++ tablecontainer.cxx 2007-12-04 09:24:09+0000 1.66.4.1 @@ -4,9 +4,9 @@ * * $RCSfile: tablecontainer.cxx,v $ * - * $Revision: 1.66 $ + * $Revision: 1.66.4.1 $ * - * last change: $Author: ihi $ $Date: 2007/11/21 15:35:07 $ + * last change: $Author: oj $ $Date: 2007/12/04 09:24:09 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -189,11 +189,11 @@ sal_Bool _bCase, const Reference< XNameContainer >& _xTableDefinitions, IRefreshListener* _pRefreshListener, - IWarningsContainer* _pWarningsContainer) - :OFilteredContainer(_rParent,_rMutex,_xCon,_bCase,_pRefreshListener,_pWarningsContainer) + IWarningsContainer* _pWarningsContainer + ,oslInterlockedCount& _nInAppend) + :OFilteredContainer(_rParent,_rMutex,_xCon,_bCase,_pRefreshListener,_pWarningsContainer,_nInAppend) ,m_xTableDefinitions(_xTableDefinitions) ,m_pTableMediator( NULL ) - ,m_bInAppend(sal_False) ,m_bInDrop(sal_False) { DBG_CTOR(OTableContainer, NULL); @@ -392,9 +392,9 @@ PContainerApprove pApprove( new ObjectNameApproval( xConnection, ObjectNameApproval::TypeTable ) ); pApprove->approveElement( aName, descriptor ); - m_bInAppend = sal_True; try { + EnsureReset aReset(m_nInAppend); Reference<XAppend> xAppend(m_xMasterContainer,UNO_QUERY); if(xAppend.is()) { @@ -417,10 +417,8 @@ } catch(Exception&) { - m_bInAppend = sal_False; throw; } - m_bInAppend = sal_False; Reference<XPropertySet> xTableDefinition; Reference<XNameAccess> xColumnDefinitions; @@ -539,7 +537,7 @@ ::osl::MutexGuard aGuard(m_rMutex); ::rtl::OUString sName; Event.Accessor >>= sName; - if ( !m_bInAppend && !hasByName(sName) ) + if ( !m_nInAppend && !hasByName(sName) ) { if(!m_xMasterContainer.is() || m_xMasterContainer->hasByName(sName)) { File [changed]: viewcontainer.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/api/viewcontainer.cxx?r1=1.25.170.2&r2=1.25.170.3 Delta lines: +13 -38 --------------------- --- viewcontainer.cxx 2007-12-01 13:39:45+0000 1.25.170.2 +++ viewcontainer.cxx 2007-12-04 09:24:09+0000 1.25.170.3 @@ -4,9 +4,9 @@ * * $RCSfile: viewcontainer.cxx,v $ * - * $Revision: 1.25.170.2 $ + * $Revision: 1.25.170.3 $ * - * last change: $Author: fs $ $Date: 2007/12/01 13:39:45 $ + * last change: $Author: oj $ $Date: 2007/12/04 09:24:09 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -125,13 +125,14 @@ //========================================================================== DBG_NAME(OViewContainer) //------------------------------------------------------------------------------ -OViewContainer::OViewContainer(::cppu::OWeakObject& _rParent, - ::osl::Mutex& _rMutex, - const Reference< XConnection >& _xCon, - sal_Bool _bCase, - IRefreshListener* _pRefreshListener, - IWarningsContainer* _pWarningsContainer) - :OFilteredContainer(_rParent,_rMutex,_xCon,_bCase,_pRefreshListener,_pWarningsContainer) +OViewContainer::OViewContainer(::cppu::OWeakObject& _rParent + ,::osl::Mutex& _rMutex + ,const Reference< XConnection >& _xCon + ,sal_Bool _bCase + ,IRefreshListener* _pRefreshListener + ,IWarningsContainer* _pWarningsContainer + ,oslInterlockedCount& _nInAppend) + :OFilteredContainer(_rParent,_rMutex,_xCon,_bCase,_pRefreshListener,_pWarningsContainer,_nInAppend) ,m_bInElementRemoved(false) { DBG_CTOR(OViewContainer, NULL); @@ -191,31 +192,6 @@ return xRet; } // ----------------------------------------------------------------------------- -namespace -{ - template <typename TYPE> - class EnsureReset - { - public: - EnsureReset( TYPE& _rValueLocation, const TYPE& _rResetValue ) - :m_rValueLocation( _rValueLocation ) - ,m_aResetValue( _rResetValue ) - { - } - - ~EnsureReset() - { - m_rValueLocation = m_aResetValue; - } - - private: - TYPE& m_rValueLocation; - TYPE m_aResetValue; - }; - - typedef EnsureReset< ::rtl::OUString > EnsureStringReset; -} -// ----------------------------------------------------------------------------- // XAppend ObjectType OViewContainer::appendObject( const ::rtl::OUString& _rForName, const Reference< XPropertySet >& descriptor ) { @@ -226,8 +202,7 @@ Reference< XPropertySet > xProp = descriptor; if(xAppend.is()) { - m_sAppendingCurrenly = aName; - EnsureStringReset aReset( m_sAppendingCurrenly, ::rtl::OUString() ); + EnsureReset aReset(m_nInAppend); xAppend->appendByDescriptor(descriptor); if(m_xMasterContainer->hasByName(aName)) @@ -306,7 +281,7 @@ ::osl::MutexGuard aGuard(m_rMutex); ::rtl::OUString sName; if ( ( Event.Accessor >>= sName ) - && ( m_sAppendingCurrenly != sName ) + && ( !m_nInAppend ) && ( !hasByName( sName ) ) ) { Directory: /dba/dbaccess/source/core/dataaccess/ ================================================ File [changed]: connection.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/dataaccess/connection.cxx?r1=1.53&r2=1.53.4.1 Delta lines: +6 -5 ------------------- --- connection.cxx 2007-11-21 15:37:29+0000 1.53 +++ connection.cxx 2007-12-04 09:24:09+0000 1.53.4.1 @@ -4,9 +4,9 @@ * * $RCSfile: connection.cxx,v $ * - * $Revision: 1.53 $ + * $Revision: 1.53.4.1 $ * - * last change: $Author: ihi $ $Date: 2007/11/21 15:37:29 $ + * last change: $Author: oj $ $Date: 2007/12/04 09:24:09 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -361,6 +361,7 @@ ,m_pTables(NULL) ,m_pViews(NULL) ,m_aWarnings( Reference< XWarningsSupplier >( _rxMaster, UNO_QUERY ) ) + ,m_nInAppend(0) ,m_bSupportsViews(sal_False) ,m_bSupportsUsers(sal_False) ,m_bSupportsGroups(sal_False) @@ -398,7 +399,7 @@ { } Reference< XNameContainer > xTableDefinitions(_rDB.getTables(),UNO_QUERY); - m_pTables = new OTableContainer( *this, m_aMutex, this, bCase, xTableDefinitions, this, &m_aWarnings ); + m_pTables = new OTableContainer( *this, m_aMutex, this, bCase, xTableDefinitions, this, &m_aWarnings,m_nInAppend ); // check if we supports types if ( xMeta.is() ) @@ -428,7 +429,7 @@ } if(m_bSupportsViews) { - m_pViews = new OViewContainer(*this, m_aMutex, this, bCase,this,&m_aWarnings); + m_pViews = new OViewContainer(*this, m_aMutex, this, bCase,this,&m_aWarnings,m_nInAppend); m_pViews->addContainerListener(m_pTables); m_pTables->addContainerListener(m_pViews); } File [changed]: connection.hxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/dataaccess/connection.hxx?r1=1.25&r2=1.25.160.1 Delta lines: +4 -3 ------------------- --- connection.hxx 2006-10-05 12:58:51+0000 1.25 +++ connection.hxx 2007-12-04 09:24:09+0000 1.25.160.1 @@ -4,9 +4,9 @@ * * $RCSfile: connection.hxx,v $ * - * $Revision: 1.25 $ + * $Revision: 1.25.160.1 $ * - * last change: $Author: kz $ $Date: 2006/10/05 12:58:51 $ + * last change: $Author: oj $ $Date: 2007/12/04 09:24:09 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -160,6 +160,7 @@ OTableContainer* m_pTables; OViewContainer* m_pViews; WarningsContainer m_aWarnings; + oslInterlockedCount m_nInAppend; sal_Bool m_bSupportsViews; // true when the getTableTypes return "VIEW" as type sal_Bool m_bSupportsUsers; sal_Bool m_bSupportsGroups; Directory: /dba/dbaccess/source/core/inc/ ========================================= File [changed]: FilteredContainer.hxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/inc/FilteredContainer.hxx?r1=1.6&r2=1.6.348.1 Delta lines: +25 -5 -------------------- --- FilteredContainer.hxx 2005-09-08 13:33:13+0000 1.6 +++ FilteredContainer.hxx 2007-12-04 09:24:09+0000 1.6.348.1 @@ -4,9 +4,9 @@ * * $RCSfile: FilteredContainer.hxx,v $ * - * $Revision: 1.6 $ + * $Revision: 1.6.348.1 $ * - * last change: $Author: rt $ $Date: 2005/09/08 13:33:13 $ + * last change: $Author: oj $ $Date: 2007/12/04 09:24:09 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -56,6 +56,7 @@ protected: IWarningsContainer* m_pWarningsContainer; IRefreshListener* m_pRefreshListener; + oslInterlockedCount& m_nInAppend; // holds the original container which where set in construct but they can be null ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > m_xMasterContainer; @@ -83,6 +84,24 @@ After using this method the object may be reconstructed by calling one of the <code>constrcuct</code> methods. */ virtual void SAL_CALL disposing(); + + class EnsureReset + { + public: + EnsureReset( oslInterlockedCount& _rValueLocation) + :m_rValue( _rValueLocation ) + { + osl_incrementInterlockedCount(&m_rValue); + } + + ~EnsureReset() + { + osl_decrementInterlockedCount(&m_rValue); + } + + private: + oslInterlockedCount& m_rValue; + }; public: /** ctor of the container. The parent has to support the <type scope="com::sun::star::sdbc">XConnection</type> interface.<BR> @@ -97,8 +116,9 @@ ::osl::Mutex& _rMutex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _xCon, sal_Bool _bCase, - IRefreshListener* _pRefreshListener = NULL, - IWarningsContainer* _pWarningsContainer = NULL + IRefreshListener* _pRefreshListener, + IWarningsContainer* _pWarningsContainer, + oslInterlockedCount& _nInAppend ); inline void dispose() { disposing(); } File [changed]: viewcontainer.hxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/inc/viewcontainer.hxx?r1=1.15.212.2&r2=1.15.212.3 Delta lines: +17 -19 --------------------- --- viewcontainer.hxx 2007-12-01 13:40:09+0000 1.15.212.2 +++ viewcontainer.hxx 2007-12-04 09:24:09+0000 1.15.212.3 @@ -4,9 +4,9 @@ * * $RCSfile: viewcontainer.hxx,v $ * - * $Revision: 1.15.212.2 $ + * $Revision: 1.15.212.3 $ * - * last change: $Author: fs $ $Date: 2007/12/01 13:40:09 $ + * last change: $Author: oj $ $Date: 2007/12/04 09:24:09 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -92,16 +92,6 @@ class OViewContainer : public OFilteredContainer, public OViewContainer_Base { - bool m_bInElementRemoved; - protected: - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > getTableTypeFilter(const ::com::sun::star::uno::Sequence< ::rtl::OUString >& _rTableTypeFilter) const; - // ::connectivity::sdbcx::OCollection - virtual ::connectivity::sdbcx::ObjectType createObject(const ::rtl::OUString& _rName); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > createDescriptor(); - virtual connectivity::sdbcx::ObjectType appendObject( const ::rtl::OUString& _rForName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& descriptor ); - virtual void dropObject(sal_Int32 _nPos,const ::rtl::OUString _sElementName); - - public: /** ctor of the container. The parent has to support the <type scope="com::sun::star::sdbc">XConnection</type> interface.<BR> @@ -116,11 +106,14 @@ ::osl::Mutex& _rMutex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _xCon, sal_Bool _bCase, - IRefreshListener* _pRefreshListener = NULL, - IWarningsContainer* _pWarningsContainer = NULL + IRefreshListener* _pRefreshListener, + IWarningsContainer* _pWarningsContainer, + oslInterlockedCount& _nInAppend ); + virtual ~OViewContainer(); + private: inline virtual void SAL_CALL acquire() throw(){ OFilteredContainer::acquire();} inline virtual void SAL_CALL release() throw(){ OFilteredContainer::release();} // ::com::sun::star::lang::XServiceInfo @@ -133,11 +126,16 @@ virtual void SAL_CALL elementRemoved( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL elementReplaced( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException); - protected: + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > getTableTypeFilter(const ::com::sun::star::uno::Sequence< ::rtl::OUString >& _rTableTypeFilter) const; + // ::connectivity::sdbcx::OCollection + virtual ::connectivity::sdbcx::ObjectType createObject(const ::rtl::OUString& _rName); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > createDescriptor(); + virtual connectivity::sdbcx::ObjectType appendObject( const ::rtl::OUString& _rForName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& descriptor ); + virtual void dropObject(sal_Int32 _nPos,const ::rtl::OUString _sElementName); + using OFilteredContainer::disposing; - private: - ::rtl::OUString m_sAppendingCurrenly; + bool m_bInElementRemoved; }; } #endif // _DBA_CORE_VIEWCONTAINER_HXX_ File [changed]: tablecontainer.hxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/inc/tablecontainer.hxx?r1=1.27&r2=1.27.158.1 Delta lines: +18 -20 --------------------- --- tablecontainer.hxx 2006-10-18 13:29:10+0000 1.27 +++ tablecontainer.hxx 2007-12-04 09:24:09+0000 1.27.158.1 @@ -4,9 +4,9 @@ * * $RCSfile: tablecontainer.hxx,v $ * - * $Revision: 1.27 $ + * $Revision: 1.27.158.1 $ * - * last change: $Author: ihi $ $Date: 2006/10/18 13:29:10 $ + * last change: $Author: oj $ $Date: 2007/12/04 09:24:09 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -99,10 +99,8 @@ class OTableContainer : public OFilteredContainer, public OTableContainer_Base { - protected: ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > m_xTableDefinitions; ::rtl::Reference< OContainerMediator > m_pTableMediator; - sal_Bool m_bInAppend; // true when we are in append mode sal_Bool m_bInDrop; // set when we are in the drop method @@ -128,6 +126,18 @@ */ void getAllTableTypeFilter( ::com::sun::star::uno::Sequence< ::rtl::OUString >& /* [out] */ _rFilter ) const; + inline virtual void SAL_CALL acquire() throw(){ OFilteredContainer::acquire();} + inline virtual void SAL_CALL release() throw(){ OFilteredContainer::release();} + // ::com::sun::star::lang::XServiceInfo + DECLARE_SERVICE_INFO(); + + // XEventListener + virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); + // XContainerListener + virtual void SAL_CALL elementInserted( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL elementRemoved( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL elementReplaced( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException); + public: /** ctor of the container. The parent has to support the <type scope="com::sun::star::sdbc">XConnection</type> interface.<BR> @@ -143,24 +153,12 @@ const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _xCon, sal_Bool _bCase, const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _xTableDefinitions, - IRefreshListener* _pRefreshListener = NULL, - IWarningsContainer* _pWarningsContainer = NULL + IRefreshListener* _pRefreshListener, + IWarningsContainer* _pWarningsContainer, + oslInterlockedCount& _nInAppend ); virtual ~OTableContainer(); - - inline virtual void SAL_CALL acquire() throw(){ OFilteredContainer::acquire();} - inline virtual void SAL_CALL release() throw(){ OFilteredContainer::release();} - // ::com::sun::star::lang::XServiceInfo - DECLARE_SERVICE_INFO(); - - // XEventListener - virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); - // XContainerListener - virtual void SAL_CALL elementInserted( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL elementRemoved( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL elementReplaced( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException); - }; } #endif // _DBA_CORE_TABLECONTAINER_HXX_ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
