<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
<!--***********************************************************
 * 
 * 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.
 * 
 ***********************************************************-->
<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
    <module-name>	connector.uno	</module-name>
    <component-description>
        <author> Joerg Budischewski </author>
        <name>	com.sun.star.comp.io.Connector </name>
        <description>
			This component allows
			to establish a connection to another process.
		</description>
        <loader-name>	com.sun.star.loader.SharedLibrary	</loader-name>
        <language>	c++	</language>
        <status value="final"/>
        <supported-service>	com.sun.star.connection.Connector	</supported-service>
        <service-dependency>	...	</service-dependency>
        <type>	 com.sun.star.connection.XConnector                			</type>
        <type>   com.sun.star.connection.XConnectionBroadcaster                         </type>
        <type>	 com.sun.star.io.UnexpectedEOFException            			</type>
        <type>	 com.sun.star.io.WrongFormatException              				</type>
        <type>	 com.sun.star.lang.XComponent                      			</type>
        <type>	 com.sun.star.lang.XMultiServiceFactory            	</type>
        <type>	 com.sun.star.lang.XSingleServiceFactory           			</type>
        <type>	 com.sun.star.lang.XServiceInfo                    				</type>
        <type>	 com.sun.star.lang.XTypeProvider                   				</type>
        <type>	 com.sun.star.lang.IllegalArgumentException        			</type>
        <type>	 com.sun.star.registry.XRegistryKey                			</type>
        <type>	 com.sun.star.registry.XImplementationRegistration 			</type>
        <type>	 com.sun.star.test.XSimpleTest                     			</type>
        <type>	 com.sun.star.lang.XSingleComponentFactory         	</type>
        <type>	 com.sun.star.uno.XComponentContext                	</type>
        <type>	 com.sun.star.uno.TypeClass                        			</type>
        <type>	 com.sun.star.uno.XWeak                            		</type>
        <type>	 com.sun.star.uno.XAggregation                      		</type>
    </component-description>
    <project-build-dependency>	cppuhelper	</project-build-dependency>
    <project-build-dependency>	cppu		</project-build-dependency>
    <project-build-dependency>	vos			</project-build-dependency>
    <project-build-dependency>	sal			</project-build-dependency>
    <runtime-module-dependency>	cppuhelper2	</runtime-module-dependency>
    <runtime-module-dependency>	cppu2		</runtime-module-dependency>
    <runtime-module-dependency>	vos2	        </runtime-module-dependency>
    <runtime-module-dependency>	sal2		</runtime-module-dependency>
</module-description>
