summaryrefslogtreecommitdiff
path: root/io/source/acceptor/acceptor.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'io/source/acceptor/acceptor.cxx')
-rw-r--r--io/source/acceptor/acceptor.cxx293
1 files changed, 138 insertions, 155 deletions
diff --git a/io/source/acceptor/acceptor.cxx b/io/source/acceptor/acceptor.cxx
index 15df65592a33..fe761018de52 100644
--- a/io/source/acceptor/acceptor.cxx
+++ b/io/source/acceptor/acceptor.cxx
@@ -31,7 +31,6 @@
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
-#include <services.hxx>
#include "acceptor.hxx"
#include <memory>
@@ -44,9 +43,7 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::connection;
-namespace io_acceptor
-{
- namespace {
+namespace {
class OAcceptor : public WeakImplHelper< XAcceptor, XServiceInfo >
{
@@ -64,8 +61,8 @@ namespace io_acceptor
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
private:
- std::unique_ptr<PipeAcceptor> m_pPipe;
- std::unique_ptr<SocketAcceptor> m_pSocket;
+ std::unique_ptr<io_acceptor::PipeAcceptor> m_pPipe;
+ std::unique_ptr<io_acceptor::SocketAcceptor> m_pSocket;
Mutex m_mutex;
OUString m_sLastDescription;
bool m_bInAccept;
@@ -75,199 +72,185 @@ namespace io_acceptor
Reference<XAcceptor> _xAcceptor;
};
- }
+}
- OAcceptor::OAcceptor( const Reference< XComponentContext > & xCtx )
- : m_bInAccept( false )
- , _xSMgr( xCtx->getServiceManager() )
- , _xCtx( xCtx )
- {}
+OAcceptor::OAcceptor( const Reference< XComponentContext > & xCtx )
+ : m_bInAccept( false )
+ , _xSMgr( xCtx->getServiceManager() )
+ , _xCtx( xCtx )
+{}
- OAcceptor::~OAcceptor()
- {
- m_pPipe.reset();
- }
+OAcceptor::~OAcceptor()
+{
+ m_pPipe.reset();
+}
- namespace {
+namespace {
+struct BeingInAccept
+{
+ /// @throws AlreadyAcceptingException
+ BeingInAccept( bool *pFlag,const OUString & sConnectionDescription )
+ : m_pFlag( pFlag )
+ {
+ if( *m_pFlag )
+ throw AlreadyAcceptingException( "AlreadyAcceptingException :" + sConnectionDescription );
+ *m_pFlag = true;
+ }
+ ~BeingInAccept()
+ {
+ *m_pFlag = false;
+ }
+ bool *m_pFlag;
+};
+}
- struct BeingInAccept
- {
- /// @throws AlreadyAcceptingException
- BeingInAccept( bool *pFlag,const OUString & sConnectionDescription )
- : m_pFlag( pFlag )
- {
- if( *m_pFlag )
- throw AlreadyAcceptingException( "AlreadyAcceptingException :" + sConnectionDescription );
- *m_pFlag = true;
- }
- ~BeingInAccept()
- {
- *m_pFlag = false;
- }
- bool *m_pFlag;
- };
+Reference< XConnection > OAcceptor::accept( const OUString &sConnectionDescription )
+{
+ // if there is a thread already accepting in this object, throw an exception.
+ struct BeingInAccept guard( &m_bInAccept, sConnectionDescription );
+ Reference< XConnection > r;
+ if( !m_sLastDescription.isEmpty() &&
+ m_sLastDescription != sConnectionDescription )
+ {
+ // instantiate another acceptor for different ports
+ throw ConnectionSetupException( "acceptor::accept called multiple times with different connection strings\n" );
}
- Reference< XConnection > OAcceptor::accept( const OUString &sConnectionDescription )
+ if( m_sLastDescription.isEmpty() )
{
- // if there is a thread already accepting in this object, throw an exception.
- struct BeingInAccept guard( &m_bInAccept, sConnectionDescription );
-
- Reference< XConnection > r;
- if( !m_sLastDescription.isEmpty() &&
- m_sLastDescription != sConnectionDescription )
- {
- // instantiate another acceptor for different ports
- throw ConnectionSetupException( "acceptor::accept called multiple times with different connection strings\n" );
- }
-
- if( m_sLastDescription.isEmpty() )
+ // setup the acceptor
+ try
{
- // setup the acceptor
- try
+ cppu::UnoUrlDescriptor aDesc(sConnectionDescription);
+ if ( aDesc.getName() == "pipe" )
{
- cppu::UnoUrlDescriptor aDesc(sConnectionDescription);
- if ( aDesc.getName() == "pipe" )
- {
- OUString aName(
- aDesc.getParameter(
- "name"));
+ OUString aName(
+ aDesc.getParameter(
+ "name"));
- m_pPipe.reset(new PipeAcceptor(aName, sConnectionDescription));
+ m_pPipe.reset(new io_acceptor::PipeAcceptor(aName, sConnectionDescription));
- try
- {
- m_pPipe->init();
- }
- catch( ... )
- {
- {
- MutexGuard g( m_mutex );
- m_pPipe.reset();
- }
- throw;
- }
+ try
+ {
+ m_pPipe->init();
}
- else if ( aDesc.getName() == "socket" )
+ catch( ... )
{
- OUString aHost;
- if (aDesc.hasParameter(
- "host"))
- aHost = aDesc.getParameter(
- "host");
- else
- aHost = "localhost";
- sal_uInt16 nPort = static_cast< sal_uInt16 >(
- aDesc.getParameter(
- "port").
- toInt32());
- bool bTcpNoDelay
- = aDesc.getParameter(
- "tcpnodelay").toInt32() != 0;
-
- m_pSocket.reset(new SocketAcceptor(
- aHost, nPort, bTcpNoDelay, sConnectionDescription));
-
- try
{
- m_pSocket->init();
- }
- catch( ... )
- {
- {
- MutexGuard g( m_mutex );
- m_pSocket.reset();
- }
- throw;
+ MutexGuard g( m_mutex );
+ m_pPipe.reset();
}
+ throw;
}
+ }
+ else if ( aDesc.getName() == "socket" )
+ {
+ OUString aHost;
+ if (aDesc.hasParameter(
+ "host"))
+ aHost = aDesc.getParameter(
+ "host");
else
+ aHost = "localhost";
+ sal_uInt16 nPort = static_cast< sal_uInt16 >(
+ aDesc.getParameter(
+ "port").
+ toInt32());
+ bool bTcpNoDelay
+ = aDesc.getParameter(
+ "tcpnodelay").toInt32() != 0;
+
+ m_pSocket.reset(new io_acceptor::SocketAcceptor(
+ aHost, nPort, bTcpNoDelay, sConnectionDescription));
+
+ try
{
- OUString delegatee = "com.sun.star.connection.Acceptor." + aDesc.getName();
- _xAcceptor.set(_xSMgr->createInstanceWithContext(delegatee, _xCtx), UNO_QUERY);
-
- if(!_xAcceptor.is())
- throw ConnectionSetupException("Acceptor: unknown delegatee " + delegatee);
+ m_pSocket->init();
+ }
+ catch( ... )
+ {
+ {
+ MutexGuard g( m_mutex );
+ m_pSocket.reset();
+ }
+ throw;
}
}
- catch (const rtl::MalformedUriException & rEx)
+ else
{
- throw IllegalArgumentException(
- rEx.getMessage(),
- Reference< XInterface > (),
- 0 );
- }
- m_sLastDescription = sConnectionDescription;
- }
+ OUString delegatee = "com.sun.star.connection.Acceptor." + aDesc.getName();
+ _xAcceptor.set(_xSMgr->createInstanceWithContext(delegatee, _xCtx), UNO_QUERY);
- if( m_pPipe )
- {
- r = m_pPipe->accept();
- }
- else if( m_pSocket )
- {
- r = m_pSocket->accept();
+ if(!_xAcceptor.is())
+ throw ConnectionSetupException("Acceptor: unknown delegatee " + delegatee);
+ }
}
- else
+ catch (const rtl::MalformedUriException & rEx)
{
- r = _xAcceptor->accept(sConnectionDescription);
+ throw IllegalArgumentException(
+ rEx.getMessage(),
+ Reference< XInterface > (),
+ 0 );
}
-
- return r;
+ m_sLastDescription = sConnectionDescription;
}
- void SAL_CALL OAcceptor::stopAccepting( )
+ if( m_pPipe )
{
- MutexGuard guard( m_mutex );
-
- if( m_pPipe )
- {
- m_pPipe->stopAccepting();
- }
- else if ( m_pSocket )
- {
- m_pSocket->stopAccepting();
- }
- else if( _xAcceptor.is() )
- {
- _xAcceptor->stopAccepting();
- }
-
+ r = m_pPipe->accept();
}
-
- OUString acceptor_getImplementationName()
+ else if( m_pSocket )
{
- return IMPLEMENTATION_NAME;
+ r = m_pSocket->accept();
}
-
- Reference< XInterface > acceptor_CreateInstance( const Reference< XComponentContext > & xCtx)
+ else
{
- return Reference < XInterface >( static_cast<OWeakObject *>(new OAcceptor(xCtx)) );
+ r = _xAcceptor->accept(sConnectionDescription);
}
- Sequence< OUString > acceptor_getSupportedServiceNames()
- {
- Sequence< OUString > seqNames { SERVICE_NAME };
- return seqNames;
- }
+ return r;
+}
+
+void SAL_CALL OAcceptor::stopAccepting( )
+{
+ MutexGuard guard( m_mutex );
- OUString OAcceptor::getImplementationName()
+ if( m_pPipe )
{
- return acceptor_getImplementationName();
+ m_pPipe->stopAccepting();
}
-
- sal_Bool OAcceptor::supportsService(const OUString& ServiceName)
+ else if ( m_pSocket )
{
- return cppu::supportsService(this, ServiceName);
+ m_pSocket->stopAccepting();
}
-
- Sequence< OUString > OAcceptor::getSupportedServiceNames()
+ else if( _xAcceptor.is() )
{
- return acceptor_getSupportedServiceNames();
+ _xAcceptor->stopAccepting();
}
+}
+
+OUString OAcceptor::getImplementationName()
+{
+ return IMPLEMENTATION_NAME;
+}
+
+sal_Bool OAcceptor::supportsService(const OUString& ServiceName)
+{
+ return cppu::supportsService(this, ServiceName);
+}
+Sequence< OUString > OAcceptor::getSupportedServiceNames()
+{
+ return { SERVICE_NAME };
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
+io_OAcceptor_get_implementation(
+ css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const&)
+{
+ return cppu::acquire(new OAcceptor(context));
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */