/**************************************************************
 * 
 * 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
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



#ifndef __com_sun_star_ucb_XRemoteContentProviderConnectionControl_idl__
#define __com_sun_star_ucb_XRemoteContentProviderConnectionControl_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

module com { module sun { module star { module ucb {
	 published interface XRemoteContentProviderAcceptor;
}; }; }; };

module com { module sun { module star { module ucb {

//============================================================================
/** A simple mechanism to find out if the connection between a remote content
	provider distributor and acceptor gets lost.

    <p>This interface should be supported by the <var>DoneListener</var>
	parameter of
	<member>XRemoteContentProviderAcceptor::addRemoteContentProvider</member>.

	@version 1.0
	@author Stephan Bergmann
 */
published interface XRemoteContentProviderConnectionControl:
	com::sun::star::uno::XInterface
{
	//------------------------------------------------------------------------
	/** Enable connection control, using as a token some object implemented on
		the remote content provider acceptor's side.

        <p>The implementation of this interface must hold a reference to the
		supplied token.  If the connection gets lost, the reference count of
		the token will drop, which the remote content provider acceptor can
		observe.

		@param Acceptor
		The remote content provider acceptor on the other side of the
		connection.

		@param Token
		Some object implemented on the remote content provider acceptor's side
		of the connection.
	 */
	void
	enableConnectionControl([in] XRemoteContentProviderAcceptor Acceptor,
							[in] com::sun::star::uno::XInterface Token);
};

}; }; }; };

#endif
