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

##
## SSL Profile section - Zero or more SSL profiles may be defined here and
## then referenced later in listeners (for incoming connections) or
## connectors (for outgoing connectors).
##

router {
    mode: interior
    routerId: QDR.A
}

sslProfile {
    name: test-ssl
    certDb: ${QPID_DISPATCH_HOME_INSTALLED}/tests/config-2/ca-certificate.pem
    certFile: ${QPID_DISPATCH_HOME_INSTALLED}/tests/config-2/server-certificate.pem
    keyFile: ${QPID_DISPATCH_HOME_INSTALLED}/tests/config-2/server-private-key.pem
    password: server-password
}

##
## Listeners and Connectors
##
listener {
    host: 0.0.0.0
    port: 20100
    saslMechanisms: ANONYMOUS
}

listener {
    role: inter-router
    host: 0.0.0.0
    port: 20102
    saslMechanisms: EXTERNAL
    sslProfile: test-ssl
    requirePeerAuth: yes
}

fixedAddress {
    prefix: /closest/
    fanout: single
    bias: closest
}

fixedAddress {
    prefix: /spread/
    fanout: single
    bias: spread
}

fixedAddress {
    prefix: /multicast/
    fanout: multiple
}

fixedAddress {
    prefix: /
    fanout: multiple
}
