#
#  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.
#


#
# This file contains localization strings for configuration labels and
# descriptions as used in the metatype.xml descriptor generated by the
# the Felix SCR plugin

org.apache.felix.http.jetty.internal.JettyConfig.name = Apache Felix Jetty Based Http Service
org.apache.felix.http.jetty.internal.JettyConfig.description = Configuration for \
 the embedded Jetty Servlet Container.

org.osgi.service.http.port.name = HTTP Port
org.osgi.service.http.port.description = Port to listen on for HTTP requests. \
 Defaults to 8080.
        
org.osgi.service.http.port.secure.name = HTTPS Port
org.osgi.service.http.port.secure.description = Port to listen on for HTTPS \
 requests. Defaults to 433.

org.apache.felix.http.timeout.name = Connection Timeout
org.apache.felix.http.timeout.description = Time limit for reaching an \
 timeout specified in milliseconds. This property applies to both HTTP \
 and HTTP connections. Defaults to 60 seconds. 

org.apache.felix.http.debug.name = Debug Logging
org.apache.felix.http.debug.description = Whether to write DEBUG level \
 messages or not. Defaults to false.
 
org.apache.felix.https.keystore.name = Keystore
org.apache.felix.https.keystore.description = Absolute Path to the Keystore to \
 use for HTTPS. Only used if HTTPS is enabled in which case this property is \
 required.
 
org.apache.felix.https.keystore.password.name = Keystore Password
org.apache.felix.https.keystore.password.description = Password to access the \
 Keystore. Only used if HTTPS is enabled.
 
org.apache.felix.https.keystore.key.password.name = Key Password
org.apache.felix.https.keystore.key.password.description = Password to unlock \
 the secret key from the Keystore. Only used if HTTPS is enabled.
 
org.apache.felix.http.enable.name = Enable HTTP
org.apache.felix.http.enable.description =  Whether or not HTTP is enabled. \
 Defaults to true thus HTTP enabled.

org.apache.felix.https.enable.name = Enable HTTPS
org.apache.felix.https.enable.description = Whether or not HTTPS is enabled. \
 Defaults to false thus HTTPS disabled.
 
org.apache.felix.https.truststore.name = Truststore
org.apache.felix.https.truststore.description = Absolute Path to the Truststore \
 to use for HTTPS. Only used if HTTPS is enabled.
 
 org.apache.felix.https.truststore.password.name = Truststore Password
 org.apache.felix.https.truststore.password.description = Password to access the \
 Truststore. Only used if HTTPS is enabled.

org.apache.felix.https.clientcertificate.name = Client Certificate
org.apache.felix.https.clientcertificate.description = Requirement for the \
 Client to provide a valid certifcate. Defaults to none.
 
clientcertificate.none = No Client Certificate
clientcertificate.wants = Client Certficate Wanted
clientcertificate.needs = Client Certificate Needed

org.apache.felix.http.nio.name = NIO for HTTP
org.apache.felix.http.nio.description = Wether or not to use NIO for HTTP. \
 Defaults to true. Only used if HTTP is enabled.

org.apache.felix.https.nio.name = NIO for HTTPS
org.apache.felix.https.nio.description = Wether or not to use NIO for HTTP. \
 Defaults to the value of the NIO for HTTP property. Only used if HTTPS is \
 enabled.

org.apache.felix.http.mbeans.name = Register MBeans
org.apache.felix.http.mbeans.description = Whether or not to use register \
 JMX MBeans from the servlet container (Jetty).
 
org.apache.felix.http.jetty.headerBufferSize.name = Header Buffer Size
org.apache.felix.http.jetty.headerBufferSize.description = Size of the \
 buffer for request and response headers. Default is 16KB.
 
org.apache.felix.http.jetty.requestBufferSize.name = Request Buffer Size
org.apache.felix.http.jetty.requestBufferSize.description = Size of the \
 buffer for requests not fitting the header buffer. Default is 8KB.
 
org.apache.felix.http.jetty.responseBufferSize.name = Response Buffer Size
org.apache.felix.http.jetty.responseBufferSize.description = Size of the \
 buffer for responses. Default is 24KB.
