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

# The default Hedwig server host to contact (this ideally should be a VIP 
# that fronts all of the Hedwig server hubs).
default_server_host=localhost:4080:9876
# This parameter is a boolean flag indicating if communication with the
# server should be done via SSL for encryption. The Hedwig server hubs also
# need to be SSL enabled for this to work.
ssl_enabled=false
