summaryrefslogtreecommitdiff
path: root/xmlsecurity/source
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-12-01 08:36:41 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-12-01 09:42:07 +0000
commit7920ba294b7785accc9785c284b46ce28e5a0b05 (patch)
tree7e3839fd6388d75bd2664e1de0261499758f3bdf /xmlsecurity/source
parent6c436ba09cb35235ce6f4065cf74c9a6ff14a4bd (diff)
xmlsecurity: instantiate SAXEventKeeperImpl directly in XSecController
Going via UNO for a class in the same module is an overkill. Change-Id: I577660513022fde1576df19b412fcdb1ee2ad041 Reviewed-on: https://gerrit.libreoffice.org/31461 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'xmlsecurity/source')
-rw-r--r--xmlsecurity/source/framework/saxeventkeeperimpl.cxx5
-rw-r--r--xmlsecurity/source/framework/saxeventkeeperimpl.hxx321
-rw-r--r--xmlsecurity/source/framework/xsec_framework.cxx2
-rw-r--r--xmlsecurity/source/helper/xsecctl.cxx29
4 files changed, 11 insertions, 346 deletions
diff --git a/xmlsecurity/source/framework/saxeventkeeperimpl.cxx b/xmlsecurity/source/framework/saxeventkeeperimpl.cxx
index ebe6823c30f1..e14bc1fa7830 100644
--- a/xmlsecurity/source/framework/saxeventkeeperimpl.cxx
+++ b/xmlsecurity/source/framework/saxeventkeeperimpl.cxx
@@ -18,7 +18,10 @@
*/
-#include "saxeventkeeperimpl.hxx"
+#include "framework/saxeventkeeperimpl.hxx"
+#include "buffernode.hxx"
+#include "elementmark.hxx"
+#include "elementcollector.hxx"
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
#include <com/sun/star/xml/crypto/sax/ConstOfSecurityId.hpp>
diff --git a/xmlsecurity/source/framework/saxeventkeeperimpl.hxx b/xmlsecurity/source/framework/saxeventkeeperimpl.hxx
deleted file mode 100644
index 214575d2757e..000000000000
--- a/xmlsecurity/source/framework/saxeventkeeperimpl.hxx
+++ /dev/null
@@ -1,321 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_XMLSECURITY_SOURCE_FRAMEWORK_SAXEVENTKEEPERIMPL_HXX
-#define INCLUDED_XMLSECURITY_SOURCE_FRAMEWORK_SAXEVENTKEEPERIMPL_HXX
-
-#include <com/sun/star/xml/crypto/sax/XSecuritySAXEventKeeper.hpp>
-#include <com/sun/star/xml/crypto/sax/XReferenceResolvedBroadcaster.hpp>
-#include <com/sun/star/xml/crypto/sax/XSAXEventKeeperStatusChangeBroadcaster.hpp>
-#include <com/sun/star/xml/crypto/sax/XSAXEventKeeperStatusChangeListener.hpp>
-#include <com/sun/star/xml/csax/XCompressedDocumentHandler.hpp>
-#include <com/sun/star/xml/wrapper/XXMLDocumentWrapper.hpp>
-#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <cppuhelper/implbase.hxx>
-
-#include "buffernode.hxx"
-#include "elementmark.hxx"
-#include "elementcollector.hxx"
-
-#include <vector>
-
-class SAXEventKeeperImpl : public cppu::WeakImplHelper
-<
- css::xml::crypto::sax::XSecuritySAXEventKeeper,
- css::xml::crypto::sax::XReferenceResolvedBroadcaster,
- css::xml::crypto::sax::XSAXEventKeeperStatusChangeBroadcaster,
- css::xml::sax::XDocumentHandler,
- css::lang::XInitialization,
- css::lang::XServiceInfo
->
-/****** SAXEventKeeperImpl.hxx/CLASS SAXEventKeeperImpl ***********************
- *
- * NAME
- * SAXEventKeeperImpl -- SAX events buffer controller
- *
- * FUNCTION
- * Controls SAX events to be bufferred, and controls bufferred SAX events
- * to be released.
- ******************************************************************************/
-{
-private:
- /*
- * the XMLDocumentWrapper component which maintains all bufferred SAX
- * in DOM format.
- */
- css::uno::Reference< css::xml::wrapper::XXMLDocumentWrapper >
- m_xXMLDocument;
-
- /*
- * the document handler provided by the XMLDocumentWrapper component.
- */
- css::uno::Reference< css::xml::sax::XDocumentHandler > m_xDocumentHandler;
-
- /*
- * the compressed document handler provided by the XMLDocumentWrapper
- * component, the handler has more efficient method definition that the
- * normal document handler.
- */
- css::uno::Reference< css::xml::csax::XCompressedDocumentHandler >
- m_xCompressedDocumentHandler;
-
- /*
- * a listener which receives this SAXEventKeeper's status change
- * notification.
- * Based on the status changes, the listener can decide whether the
- * SAXEventKeeper should chain on/chain off the SAX chain, or whether
- * the SAXEventKeeper is useless any long.
- */
- css::uno::Reference< css::xml::crypto::sax::XSAXEventKeeperStatusChangeListener >
- m_xSAXEventKeeperStatusChangeListener;
-
- /*
- * the root node of the BufferNode tree.
- * the BufferNode tree is used to keep track of all bufferred elements,
- * it has the same structure with the document which maintains those
- * elements physically.
- */
- BufferNode* m_pRootBufferNode;
-
- /*
- * the current active BufferNode.
- * this is used to keep track the current location in the BufferNode tree,
- * the next generated BufferNode will become a child BufferNode of it.
- */
- BufferNode* m_pCurrentBufferNode;
-
- /*
- * the next Id for a coming ElementMark.
- * the variable is increased by 1 when an new ElementMark is generated,
- * in this way, we can promise the Id of any ElementMark is unique.
- */
- sal_Int32 m_nNextElementMarkId;
-
- /*
- * maintains a collection of all ElementMarks.
- */
- std::vector< const ElementMark* > m_vElementMarkBuffers;
-
- /*
- * maintains a list of new ElementCollectors that will be created
- * on the element represented by the next incoming startElement SAX
- * event.
- * The reason that such the m_vNewElementCollectors is necessary
- * is: when an ElementCollector is asked to create, it can't be
- * created completely at once, because the BufferNode it will be
- * working on has not been created until the next startElement
- * SAX event comes.
- */
- std::vector< const ElementCollector* > m_vNewElementCollectors;
-
- /*
- * maintains the new Blocker that will be created
- * on the element represented by the next incoming startElement SAX
- * event.
- */
- ElementMark* m_pNewBlocker;
-
- /*
- * the document handler to which all received SAX events will be
- * forwarded.
- */
- css::uno::Reference< css::xml::sax::XDocumentHandler > m_xNextHandler;
-
- /*
- * the current BufferNode which prevents the SAX events to be
- * forwarded to the m_xNextHandler.
- */
- BufferNode* m_pCurrentBlockingBufferNode;
-
- /*
- * maintains a list of ElementMark that has been asked to release.
- * Because during processing a request of releasing an ElementMark,
- * another releasing ElementMark request can be invoked. To avoid
- * reentering the same method, a such request only add that ElementMark
- * into this ElementMark list, then all ElementMarks will be processed in
- * order.
- */
- std::vector< sal_Int32 > m_vReleasedElementMarkBuffers;
-
- /*
- * a flag to indicate whether the ElementMark releasing process is running.
- * When a releasing request comes, the assigned ElementMark is added to
- * the m_vReleasedElementMarkBuffers first, then this flag is checked.
- * If the ElementMark releasing process is not running, then call that
- * method.
- */
- bool m_bIsReleasing;
-
- /*
- * a flag to indicate whether it is the "Forwarding" mode now.
- * A "Forwarding" mode means that all received SAX events are from the
- * XMLDocumentWrapper component, instead of up-stream component in the
- * SAX chain.
- * The difference between "Forwarding" mode and normal mode is that:
- * no SAX events need to be transferred to the XMLDocumentWrapper component
- * again even if a buffer request happens.
- */
- bool m_bIsForwarding;
-
- void setCurrentBufferNode(BufferNode* pBufferNode);
-
- BufferNode* addNewElementMarkBuffers();
-
- ElementMark* findElementMarkBuffer(sal_Int32 nId) const;
-
- void removeElementMarkBuffer(sal_Int32 nId);
-
- OUString printBufferNode(
- BufferNode* pBufferNode, sal_Int32 nIndent) const;
-
- static css::uno::Sequence< css::uno::Reference< css::xml::wrapper::XXMLElementWrapper > >
- collectChildWorkingElement(BufferNode* pBufferNode);
-
- void smashBufferNode(
- BufferNode* pBufferNode, bool bClearRoot) const;
-
- static BufferNode* findNextBlockingBufferNode(
- BufferNode* pStartBufferNode);
-
- static void diffuse(BufferNode* pBufferNode);
-
- void releaseElementMarkBuffer();
-
- void markElementMarkBuffer(sal_Int32 nId);
-
- sal_Int32 createElementCollector(
- css::xml::crypto::sax::ElementMarkPriority nPriority,
- bool bModifyElement,
- const css::uno::Reference< css::xml::crypto::sax::XReferenceResolvedListener>& xReferenceResolvedListener);
-
- sal_Int32 createBlocker();
-
-public:
- SAXEventKeeperImpl();
- virtual ~SAXEventKeeperImpl() override;
-
- /* XSAXEventKeeper */
- virtual sal_Int32 SAL_CALL addElementCollector( )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL removeElementCollector( sal_Int32 id )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual sal_Int32 SAL_CALL addBlocker( )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL removeBlocker( sal_Int32 id )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual sal_Bool SAL_CALL isBlocking( )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual css::uno::Reference< css::xml::wrapper::XXMLElementWrapper > SAL_CALL
- getElement( sal_Int32 id )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL setElement(
- sal_Int32 id,
- const css::uno::Reference< css::xml::wrapper::XXMLElementWrapper >& aElement )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual css::uno::Reference<
- css::xml::sax::XDocumentHandler > SAL_CALL
- setNextHandler( const css::uno::Reference<
- css::xml::sax::XDocumentHandler >& xNewHandler )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual OUString SAL_CALL printBufferNodeTree()
- throw (css::uno::RuntimeException, std::exception) override;
- virtual css::uno::Reference< css::xml::wrapper::XXMLElementWrapper > SAL_CALL
- getCurrentBlockingNode()
- throw (css::uno::RuntimeException, std::exception) override;
-
- /* XSecuritySAXEventKeeper */
- virtual sal_Int32 SAL_CALL addSecurityElementCollector(
- css::xml::crypto::sax::ElementMarkPriority priority,
- sal_Bool modifyElement )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL setSecurityId( sal_Int32 id, sal_Int32 securityId )
- throw (css::uno::RuntimeException, std::exception) override;
-
- /* XReferenceResolvedBroadcaster */
- virtual void SAL_CALL addReferenceResolvedListener(
- sal_Int32 referenceId,
- const css::uno::Reference< css::xml::crypto::sax::XReferenceResolvedListener >& listener )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL removeReferenceResolvedListener(
- sal_Int32 referenceId,
- const css::uno::Reference< css::xml::crypto::sax::XReferenceResolvedListener >& listener )
- throw (css::uno::RuntimeException, std::exception) override;
-
- /* XSAXEventKeeperStatusChangeBroadcaster */
- virtual void SAL_CALL addSAXEventKeeperStatusChangeListener(
- const css::uno::Reference< css::xml::crypto::sax::XSAXEventKeeperStatusChangeListener >& listener )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL removeSAXEventKeeperStatusChangeListener(
- const css::uno::Reference< css::xml::crypto::sax::XSAXEventKeeperStatusChangeListener >& listener )
- throw (css::uno::RuntimeException, std::exception) override;
-
- /* XDocumentHandler */
- virtual void SAL_CALL startDocument( )
- throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL endDocument( )
- throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL startElement(
- const OUString& aName,
- const css::uno::Reference< css::xml::sax::XAttributeList >&
- xAttribs )
- throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL endElement( const OUString& aName )
- throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL characters( const OUString& aChars )
- throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL ignorableWhitespace( const OUString& aWhitespaces )
- throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL processingInstruction(
- const OUString& aTarget, const OUString& aData )
- throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override;
- virtual void SAL_CALL setDocumentLocator(
- const css::uno::Reference< css::xml::sax::XLocator >& xLocator )
- throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override;
-
- /* XInitialization */
- virtual void SAL_CALL initialize(
- const css::uno::Sequence< css::uno::Any >& aArguments )
- throw (css::uno::Exception, css::uno::RuntimeException, std::exception) override;
-
- /* XServiceInfo */
- virtual OUString SAL_CALL getImplementationName( )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
- throw (css::uno::RuntimeException, std::exception) override;
- virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( )
- throw (css::uno::RuntimeException, std::exception) override;
-};
-
-OUString SAXEventKeeperImpl_getImplementationName()
- throw ( css::uno::RuntimeException );
-
-css::uno::Sequence< OUString > SAL_CALL SAXEventKeeperImpl_getSupportedServiceNames( )
- throw ( css::uno::RuntimeException );
-
-css::uno::Reference< css::uno::XInterface >
-SAL_CALL SAXEventKeeperImpl_createInstance( const css::uno::Reference< css::lang::XMultiServiceFactory > & rSMgr)
- throw ( css::uno::Exception );
-
-#endif
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmlsecurity/source/framework/xsec_framework.cxx b/xmlsecurity/source/framework/xsec_framework.cxx
index f05b95eb2b96..bfe132efce32 100644
--- a/xmlsecurity/source/framework/xsec_framework.cxx
+++ b/xmlsecurity/source/framework/xsec_framework.cxx
@@ -26,7 +26,7 @@
#include "encryptorimpl.hxx"
#include "signaturecreatorimpl.hxx"
#include "framework/signatureverifierimpl.hxx"
-#include "saxeventkeeperimpl.hxx"
+#include "framework/saxeventkeeperimpl.hxx"
#include "xmlencryptiontemplateimpl.hxx"
#include "xmlsignaturetemplateimpl.hxx"
diff --git a/xmlsecurity/source/helper/xsecctl.cxx b/xmlsecurity/source/helper/xsecctl.cxx
index bc9adbe2248d..641de5ebc53b 100644
--- a/xmlsecurity/source/helper/xsecctl.cxx
+++ b/xmlsecurity/source/helper/xsecctl.cxx
@@ -20,6 +20,7 @@
#include "xsecctl.hxx"
#include "documentsignaturehelper.hxx"
+#include "framework/saxeventkeeperimpl.hxx"
#include <algorithm>
#include <initializer_list>
@@ -47,13 +48,6 @@ namespace cssxc = com::sun::star::xml::crypto;
namespace cssxs = com::sun::star::xml::sax;
using namespace com::sun::star;
-/* bridge component names */
-#define XMLSIGNATURE_COMPONENT "com.sun.star.xml.crypto.XMLSignature"
-#define XMLDOCUMENTWRAPPER_COMPONENT "com.sun.star.xml.wrapper.XMLDocumentWrapper"
-
-/* xml security framework components */
-#define SAXEVENTKEEPER_COMPONENT "com.sun.star.xml.crypto.sax.SAXEventKeeper"
-
XSecController::XSecController( const cssu::Reference<cssu::XComponentContext>& rxCtx )
: mxCtx(rxCtx)
, m_nNextSecurityId(1)
@@ -117,15 +111,11 @@ void XSecController::createXSecComponent( )
*
* FUNCTION
* Creates xml security components, including:
- * 1. an xml signature bridge component ( Java based or C based)
- * 2. an XMLDocumentWrapper component ( Java based or C based)
+ * 1. an xml signature bridge component
+ * 2. an XMLDocumentWrapper component
* 3. a SAXEventKeeper component
******************************************************************************/
{
- OUString sSAXEventKeeper( SAXEVENTKEEPER_COMPONENT );
- OUString sXMLSignature( XMLSIGNATURE_COMPONENT );
- OUString sXMLDocument( XMLDOCUMENTWRAPPER_COMPONENT );
-
/*
* marks all security components are not available.
*/
@@ -137,7 +127,7 @@ void XSecController::createXSecComponent( )
cssu::Reference< cssl::XMultiComponentFactory > xMCF( mxCtx->getServiceManager() );
m_xXMLSignature.set(
- xMCF->createInstanceWithContext( sXMLSignature, mxCtx ),
+ xMCF->createInstanceWithContext("com.sun.star.xml.crypto.XMLSignature", mxCtx ),
cssu::UNO_QUERY );
bool bSuccess = m_xXMLSignature.is();
@@ -147,20 +137,13 @@ void XSecController::createXSecComponent( )
*/
{
m_xXMLDocumentWrapper.set(
- xMCF->createInstanceWithContext( sXMLDocument, mxCtx ),
+ xMCF->createInstanceWithContext("com.sun.star.xml.wrapper.XMLDocumentWrapper", mxCtx),
cssu::UNO_QUERY );
}
bSuccess &= m_xXMLDocumentWrapper.is();
if ( bSuccess )
- /*
- * XMLDocumentWrapper created successfully.
- */
- {
- m_xSAXEventKeeper.set(
- xMCF->createInstanceWithContext( sSAXEventKeeper, mxCtx ),
- cssu::UNO_QUERY );
- }
+ m_xSAXEventKeeper = new SAXEventKeeperImpl();
bSuccess &= m_xSAXEventKeeper.is();