
#    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.
Private-Package: org.apache.aries.rsa.discovery.local
Export-Package: \
	org.osgi.xmlns.rsa.v1_0
Provide-Capability: osgi.extender;osgi.extender="osgi.remoteserviceadmin";\
	version:Version="1.1.0";\
	uses:="org.osgi.service.remoteserviceadmin",\
	osgi.remoteserviceadmin.discovery;\
	protocols:List<String>="local"; version:Version=1.1.0
-privatepackage: org.apache.aries.rsa.discovery.endpoint