http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/configuration-reference.adoc
----------------------------------------------------------------------
diff --git a/doc/new-book/configuration-reference.adoc 
b/doc/new-book/configuration-reference.adoc
deleted file mode 100644
index 9ea6a12..0000000
--- a/doc/new-book/configuration-reference.adoc
+++ /dev/null
@@ -1,225 +0,0 @@
-////
-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
-////
-
-[id='router-configuration-reference']
-
-// This config reference could stand to be cleaned up. Also, some of the 
introductory content is no longer necessary since it's covered in the 
introductory chapter about configuration. We should just link to it instead of 
repeating it here.
-
-= Configuration Reference
-
-The {RouterName} component behavior is totally configurable using a 
configuration file which can be passed as parameter (with the `--conf` option) 
on the command line when running it. After installation, a default 
configuration file is placed at the following path :
-
-[options="nowrap"]
-----
-[install-prefix]/etc/qpid-dispatch/qdrouterd.conf
-----
-
-This file is used when the router is started without specify configuration 
file path on the command line and when it is started as a service. In case of 
starting router on the command line the configuration file can be placed 
anywhere on the file system.
-
-== Configuration File
-
-The configuration file is made up of sections with following syntax :
-
-[options="nowrap"]
-----
-sectionName {
-    attributeName: attributeValue
-    attributeName: attributeValue
-    ...
-}
-----
-
-A section could be referenced by another section using its `name` attribute. 
An example is the _sslProfile_ section which describes attributes for setting 
SSL/TLS configuration and can be applied to one or more _listener_ and 
_connector_ sections.
-
-[options="nowrap"]
-----
-sslProfile {
-    name: ssl-profile-one
-    caCertFile: ca-certificate-1.pem
-    certFile: server-certificate-1.pem
-    privateKeyFile: server-private-key.pem
-}
-
-listener {
-    sslProfile: ssl-profile-one
-    host: 0.0.0.0
-    port: amqp
-    saslMechanisms: ANONYMOUS
-}
-----
-
-In the above example, the _sslProfile_ section named _ssl-profile-one_ is used 
to define the _sslProfile_ attribute for the _listener_ section.
-
-=== Configuration Sections
-
-[id='router-configuration-file-sslprofile']
-==== sslProfile
-
-Attributes for setting SSL/TLS configuration for connections.
-
-* *_caCertFile_* (path) : The absolute path to the database that contains the 
public certificates of trusted certificate authorities (CA).
-* *_certFile_* (path) : The absolute path to the file containing the 
PEM-formatted public certificate to be used on the local end of any connections 
using this profile.
-* *_privateKeyFile_* (path) : The absolute path to the file containing the 
PEM-formatted private key for the above certificate.
-* *_passwordFile_* (path) : If the above private key is password protected, 
this is the absolute path to a file containing the password that unlocks the 
certificate key.
-* *_password_* (string) : An alternative to storing the password in a file 
referenced by passwordFile is to supply the password right here in the 
configuration file. This option can be used by supplying the password in the 
‘password’ option. Don’t use both password and passwordFile in the same 
profile.
-* *_uidFormat_* (string) : A list of x509 client certificate fields that will 
be used to build a string that will uniquely identify the client certificate 
owner. For example, a value of ‘cou’ indicates that the uid will consist of 
c - common name concatenated with o - organization-company name concatenated 
with u - organization unit; or a value of ‘oF’ indicates that the uid will 
consist of o (organization name) concatenated with F (the sha256 fingerprint of 
the entire certificate) . Allowed values can be any combination of comma 
separated ‘c’( ISO3166 two character country code), ‘s’(state or 
province), ‘l’(Locality; generally - city), ‘o’(Organization - Company 
Name), ‘u’(Organization Unit - typically certificate type or brand), 
‘n’(CommonName - typically a username for client certificates) and 
‘1’(sha1 certificate fingerprint, as displayed in the fingerprints section 
when looking at a certificate with say a web browser is the hash of the entire
  certificate) and 2 (sha256 certificate fingerprint) and 5 (sha512 certificate 
fingerprint).
-* *_uidNameMappingFile_* (string) : The absolute path to the file containing 
the unique id to display name mapping.
-* *_name_* (string) : The name of the profile used for referencing it from 
_listener_ and _connector_ sections.
-
-*Used by* : _listener_, _connector_.
-
-[id='router-configuration-file-router']
-==== router
-
-Describe main information about the router related to identity, internal 
processes and inter routers communication.
-
-
-* *_id_* (string) : Router’s unique identity. It is required and the router 
will fail to start without it.
-* *_mode_* (One of [`standalone`, `interior`], default=`standalone`) : In 
standalone mode, the router operates as a single component. It does not 
participate in the routing protocol and therefore will not cooperate with other 
routers. In interior mode, the router operates in cooperation with other 
interior routers in an interconnected network.
-* *_helloIntervalSeconds_* (integer, default=`1`) : Interval in seconds 
between HELLO messages sent to neighbor routers in order to announce its 
presence (as a keep alive).
-* *_helloMaxAgeSeconds_* (integer, default=`3`) : Time in seconds after which 
a neighbor router is declared lost if no HELLO is received.
-* *_raIntervalSeconds_* (integer, default=`30`) : Interval in seconds between 
Router-Advertisements sent to all routers in a stable network.
-* *_raIntervalFluxSeconds_* (integer, default=`4`) : Interval in seconds 
between Router-Advertisements sent to all routers during topology fluctuations.
-* *_remoteLsMaxAgeSeconds_* (integer, default=`60`) : Time in seconds after 
which link state is declared stale if no RA is received.
-* *_workerThreads_* (integer, default=`4`) : The number of threads that will 
be created to process message traffic and other application work (timers, 
non-amqp file descriptors, and so on).
-* *_debugDump_* (path) : The absolute path for a file to dump debugging 
information that can’t be logged normally.
-* *_saslConfigDir_* (path) : The absolute path to the SASL configuration file.
-* *_saslConfigName_* (string, default=`qdrouterd`) : Name of the SASL 
configuration. This string + ‘.conf’ is the name of the configuration file.
-
-[id='router-configuration-file-listener']
-==== listener
-
-Listens for incoming connections to the router.
-
-* *_host_* (string, default=`127.0.0.1`) : IP address: ipv4 or ipv6 literal or 
a hostname.
-* *_port_* (string, default=`amqp`) : Port number or symbolic service name.
-* *_protocolFamily_* (One of [`IPv4`, `IPv6`]) : IPv4: Internet Protocol 
version 4; IPv6: Internet Protocol version 6. If not specified, the protocol 
family will be automatically determined from the address.
-* *_role_* (One of [`normal`, `inter-router`, `route-container`], 
default=`normal`) : The role of an established connection. In the normal role, 
the connection is assumed to be used for AMQP clients that are doing normal 
message delivery over the connection. In the inter-router role, the connection 
is assumed to be to another router in the network. Inter-router discovery and 
routing protocols can only be used over inter-router connections. The 
route-container role can be used for router-container connections, for example, 
a router-broker connection.
-* *_cost_* (integer, default=`1`) : For the `inter-route` role only. This 
value assigns a cost metric to the inter-router connection. The default (and 
minimum) value is one. Higher values represent higher costs. The cost is used 
to influence the routing algorithm as it attempts to use the path with the 
lowest total cost from ingress to egress.
-* *_saslMechanisms_* (string) : Space separated list of accepted SASL 
authentication mechanisms.
-* *_authenticatePeer_* (boolean) : yes: Require the peer’s identity to be 
authenticated; no: Do not require any authentication.
-* *_requireEncryption_* (boolean) : yes: Require the connection to the peer to 
be encrypted; no: Permit non-encrypted communication with the peer. It is 
related to SASL mechanisms which support encryption.
-* *_requireSsl_* (boolean) : yes: Require the use of SSL/TLS on the 
connection; no: Allow clients to connect without SSL/TLS.
-* *_trustedCertsFile_* (path) : This optional setting can be used to reduce 
the set of available CAs for client authentication. If used, this setting must 
provide an absolute path to a PEM file that contains the trusted certificates.
-* *_maxFrameSize_* (integer, default=`16384`) : Defaults to 16384. If 
specified, it is the maximum frame size in octets that will be used in the 
connection-open negotiation with a connected peer. The frame size is the 
largest contiguous set of uninterrupted data that can be sent for a message 
delivery over the connection. Interleaving of messages on different links is 
done at frame granularity.
-* *_idleTimeoutSeconds_* : (integer, default=`16`) : The idle timeout, in 
seconds, for connections through this listener. If no frames are received on 
the connection for this time interval, the connection shall be closed.
-* *_initialHandshakeTimeoutSeconds_* (integer, default=`0`): The number of 
seconds after a connection transport is established that the router waits for 
the connecting client to complete the initial handshake and send the `AMQP 
OPEN` frame. If this timeout is exceeded, the connection is dropped. The 
default value is `0`, which means that no timeout is applied.
-* *_stripAnnotations_* (One of [`in`, `out`, `both`, `no`], default=`both`) : 
in: Strip the dispatch router specific annotations only on ingress; out: Strip 
the dispatch router specific annotations only on egress; both: Strip the 
dispatch router specific annotations on both ingress and egress; no - do not 
strip dispatch router specific annotations.
-* *_linkCapacity_* (integer) : The capacity of links within this connection, 
in terms of message deliveries. The capacity is the number of messages that can 
be in-flight concurrently for each link.
-* *_sslProfile_* (string) : The name of the _sslProfile_ entity to use in 
order to have SSL/TLS configuration.
-* *_http_* (boolean): If set to `yes`, the listener will accept HTTP 
connections using AMQP over WebSockets.
-
-[id='router-configuration-file-connector']
-==== connector
-
-Establishes an outgoing connection from the router.
-
-* *_name_* (string) : Name using to reference the connector in the 
configuration file for example for a link routing to queue on a broker.
-* *_host_* (string, default=`127.0.0.1`) : IP address: ipv4 or ipv6 literal or 
a hostname.
-* *_port_* (string, default=`amqp`) : Port number or symbolic service name.
-* *_protocolFamily_* (One of [`IPv4`, `IPv6`]) : IPv4: Internet Protocol 
version 4; IPv6: Internet Protocol version 6. If not specified, the protocol 
family will be automatically determined from the address.
-* *_role_* (One of [`normal`, `inter-router`, `route-container`], 
default=`normal`) : The role of an established connection. In the normal role, 
the connection is assumed to be used for AMQP clients that are doing normal 
message delivery over the connection. In the inter-router role, the connection 
is assumed to be to another router in the network. Inter-router discovery and 
routing protocols can only be used over inter-router connections. 
route-container role can be used for router-container connections, for example, 
a router-broker connection.
-* *_cost_* (integer, default=`1`) : For the ‘inter-router’ role only. This 
value assigns a cost metric to the inter-router connection. The default (and 
minimum) value is one. Higher values represent higher costs. The cost is used 
to influence the routing algorithm as it attempts to use the path with the 
lowest total cost from ingress to egress.
-* *_saslMechanisms_* (string) : Space separated list of accepted SASL 
authentication mechanisms.
-* *_allowRedirect_* (boolean, default=True) : Allow the peer to redirect this 
connection to another address.
-* *_maxFrameSize_* (integer, default=`65536`) : Maximum frame size in octets 
that will be used in the connection-open negotiation with a connected peer. The 
frame size is the largest contiguous set of uninterrupted data that can be sent 
for a message delivery over the connection. Interleaving of messages on 
different links is done at frame granularity.
-* *_idleTimeoutSeconds_* (integer, default=`16`) : The idle timeout, in 
seconds, for connections through this connector. If no frames are received on 
the connection for this time interval, the connection shall be closed.
-* *_stripAnnotations_* (One of [`in`, `out`, `both`, `no`], default=`both`) : 
in: Strip the dispatch router specific annotations only on ingress; out: Strip 
the dispatch router specific annotations only on egress; both: Strip the 
dispatch router specific annotations on both ingress and egress; no - do not 
strip dispatch router specific annotations.
-* *_linkCapacity_* (integer) : The capacity of links within this connection, 
in terms of message deliveries. The capacity is the number of messages that can 
be in-flight concurrently for each link.
-* *_verifyHostname_* (boolean, default=True) : yes: Ensures that when 
initiating a connection (as a client) the hostname in the URL to which this 
connector connects to matches the hostname in the digital certificate that the 
peer sends back as part of the SSL/TLS connection; no: Does not perform 
hostname verification
-* *_saslUsername_* (string) : The username that the connector is using to 
connect to a peer.
-* *_saslPassword_* (string) : The password that the connector is using to 
connect to a peer.
-* *_sslProfile_* (string) : The name of the _sslProfile_ entity to use in 
order to have SSL/TLS configuration.
-
-[id='router-configuration-file-log']
-==== log
-
-Configure logging for a particular module which is part of the router. You can 
use the UPDATE operation to change log settings while the router is running.
-
-* *_module_* (One of [`ROUTER`, `ROUTER_CORE`, `ROUTER_HELLO`, `ROUTER_LS`, 
`ROUTER_MA`, `MESSAGE`, `SERVER`, `AGENT`, `CONTAINER`, `ERROR`, `POLICY`, 
`DEFAULT`], required) : Module to configure. The special module `DEFAULT` 
specifies defaults for all modules.
-* *_enable_* (string, default=`default`, required) Levels are: `trace`, 
`debug`, `info`, `notice`, `warning`, `error`, `critical`. The enable string is 
a comma-separated list of levels. A level may have a trailing `+` to enable 
that level and above. For example `trace,debug,warning+` means enable trace, 
debug, warning, error and critical. The value ‘none’ means disable logging 
for the module. The value `default` means use the value from the `DEFAULT` 
module.
-* *_includeTimestamp_* (boolean) : Include timestamp in log messages.
-* *_includeSource_* (boolean) : Include source file and line number in log 
messages.
-* *_outputFile_* (string) : Where to send log messages. Can be `stderr`, 
`syslog` or a file name.
-
-[id='router-configuration-file-address']
-==== address
-
-Entity type for address configuration. This is used to configure the treatment 
of message-routed deliveries within a particular address-space. The 
configuration controls distribution and address phasing.
-
-* *_prefix_* (string, required) : The address prefix for the configured 
settings.
-* *_distribution_* (One of [`multicast`, `closest`, `balanced`], 
default=`balanced`) : Treatment of traffic associated with the address.
-* *_waypoint_* (boolean) : Designates this address space as being used for 
waypoints. This will cause the proper address-phasing to be used.
-* *_ingressPhase_* (integer) : Advanced - Override the ingress phase for this 
address.
-* *_egressPhase_* (integer) : Advanced - Override the egress phase for this 
address.
-
-[id='router-configuration-file-linkroute']
-==== linkRoute
-
-Entity type for link-route configuration. This is used to identify remote 
containers that shall be destinations for routed link-attaches. The 
link-routing configuration applies to an addressing space defined by a prefix.
-
-* *_prefix_* (string, required) : The address prefix for the configured 
settings.
-* *_containerId_* (string) : it specifies that the link route will be 
activated if a remote container will provide a container-id matching with this 
value.
-* *_connection_* (string) : The name from a connector or listener.
-* *_distribution_* (One of [`linkBalanced`], default=`linkBalanced`) : 
Treatment of traffic associated with the address.
-* *_direction_* (One of [`in`, `out`], required) : The permitted direction of 
links. It is defined from a router point of view so ‘in’ means client 
senders (router ingress) and ‘out’ means client receivers (router egress).
-
-[id='router-configuration-file-autolink']
-==== autoLink
-
-Entity type for configuring auto-links. Auto-links are links whose lifecycle 
is managed by the router. These are typically used to attach to waypoints on 
remote containers (brokers, and so on.).
-
-* *_addr_* (string, required) : The address of the provisioned object.
-* *_direction_* (One of [`in`, `out`], required) : The direction of the link 
to be created. In means into the router, out means out of the router.
-* *_phase_* (integer) : The address phase for this link. Defaults to `0` for 
`out` links and `1` for `in` links.
-* *_containerId_* (string) : ContainerID for the target container.
-* *_connection_* (string) : The name from a connector or listener.
-
-==== console
-
-Start a websocket/tcp proxy and http file server to serve the web console.
-
-* *_listener_* (string) : The name of the listener to send the proxied tcp 
traffic to.
-* *_wsport_* (integer, default=`5673`) : The port on which to listen for 
websocket traffic.
-* *_proxy_* (string) : The full path to the proxy program to run.
-* *_home_* (string) : The full path to the html/css/js files for the console.
-* *_args_* (string) : Optional args to pass to the proxy program for logging, 
authentication, and so on.
-
-==== policy
-
-Defines global connection limit
-
-* *_maximumConnections_* (integer) : Global maximum number of concurrent 
client connections allowed. Zero implies no limit. This limit is always 
enforced even if no other policy settings have been defined.
-* *_enableAccessRules_* (boolean) : Enable user rule set processing and 
connection denial.
-* *_policyFolder_* (path) : The absolute path to a folder that holds 
policyRuleset definition .json files. For a small system the rulesets may all 
be defined in this file. At a larger scale it is better to have the policy 
files in their own folder and to have none of the rulesets defined here. All 
rulesets in all .json files in this folder are processed.
-* *_defaultApplication_* (string) : Application policyRuleset to use for 
connections with no open.hostname or a hostname that does not match any 
existing policy. For users that don’t wish to use open.hostname or any 
multi-tennancy feature, this default policy can be the only policy in effect 
for the network.
-* *_defaultApplicationEnabled_* (boolean) : Enable defaultApplication policy 
fallback logic.
-
-==== policyRuleset
-
-Per application definition of the locations from which users may connect and 
the groups to which users belong.
-
-* *_maxConnections_* (integer) : Maximum number of concurrent client 
connections allowed. Zero implies no limit.
-* *_maxConnPerUser_* (integer) : Maximum number of concurrent client 
connections allowed for any single user. Zero implies no limit.
-* *_maxConnPerHost_* (integer) : Maximum number of concurrent client 
connections allowed for any remote host. Zero implies no limit.
-* *_userGroups_* (map) : A map where each key is a user group name and the 
corresponding value is a CSV string naming the users in that group. Users who 
are assigned to one or more groups are deemed ‘restricted’. Restricted 
users are subject to connection ingress policy and are assigned policy settings 
based on the assigned user groups. Unrestricted users may be allowed or denied. 
If unrestricted users are allowed to connect then they are assigned to user 
group default.
-* *_ingressHostGroups_* (map) : A map where each key is an ingress host group 
name and the corresponding value is a CSV string naming the IP addresses or 
address ranges in that group. IP addresses may be FQDN strings or numeric IPv4 
or IPv6 host addresses. A host range is two host addresses of the same address 
family separated with a hyphen. The wildcard host address ‘*’ represents 
any host address.
-* *_ingressPolicies_* (map) : A map where each key is a user group name and 
the corresponding value is a CSV string naming the ingress host group names 
that restrict the ingress host for the user group. Users who are members of the 
user group are allowed to connect only from a host in one of the named ingress 
host groups.
-* *_connectionAllowDefault_* (boolean) : Unrestricted users, those who are not 
members of a defined user group, are allowed to connect to this application. 
Unrestricted users are assigned to the ‘default’ user group and receive 
‘default’ settings.
-* *_settings_* (map) : A map where each key is a user group name and the value 
is a map of the corresponding settings for that group.

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/configuration-security.adoc
----------------------------------------------------------------------
diff --git a/doc/new-book/configuration-security.adoc 
b/doc/new-book/configuration-security.adoc
deleted file mode 100644
index 993cecf..0000000
--- a/doc/new-book/configuration-security.adoc
+++ /dev/null
@@ -1,773 +0,0 @@
-////
-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
-////
-
-[id='security-config']
-= Security
-
-Securing your router network involves configuring authentication and 
authorization. You can authenticate and encrypt the router's connections using 
SSL/TLS or SASL. Additionally, you can authorize access to messaging resources 
by setting user connection restrictions and defining AMQP resource access 
control.
-
-== Authenticating Remote Peers
-
-You can configure {RouterName} to communicate with clients, routers, and 
brokers in a secure way by authenticating and encrypting the router's 
connections. {RouterName} supports the following security protocols:
-
-* _SSL/TLS_ for certificate-based encryption and mutual authentication
-* _SASL_ for authentication and payload encryption
-
-[id='setting-up-ssl-for-encryption-and-authentication']
-=== Setting Up SSL/TLS for Encryption and Authentication
-
-Before you can secure incoming and outgoing connections using SSL/TLS 
encryption and authentication, you must first set up the SSL/TLS profile in the 
router's configuration file.
-
-.Prerequisites
-
-You must have the following files in PEM format:
-
-* An X.509 CA certificate (used for signing the router certificate for the 
SSL/TLS server authentication feature).
-* A private key (with or without password protection) for the router.
-* An X.509 router certificate signed by the X.509 CA certificate.
-
-.Procedure
-
-* In the router's configuration file, add an `sslProfile` section:
-+
---
-[options="nowrap",subs="+quotes"]
-----
-sslProfile {
-    name: _NAME_
-    ciphers: _CIPHERS_
-    caCertFile: _PATH_.pem
-    certFile: _PATH_.pem
-    privateKeyFile: _PATH_.pem
-    password: _PASSWORD/PATH_TO_PASSWORD_FILE_
-    ...
-}
-----
-
-`name`:: A name for the SSL/TLS profile. You can use this name to refer to the 
profile from the incoming and outgoing connections.
-+
-For example:
-+
-[options="nowrap"]
-----
-name: router-ssl-profile
-----
-
-`ciphers`:: The SSL cipher suites that can be used by this SSL/TLS profile. If 
certain ciphers are unsuitable for your environment, you can use this attribute 
to restrict them from being used.
-+
-To enable a cipher list, enter one or more cipher strings separated by colons 
(`:`). For example:
-+
-[options="nowrap"]
-----
-ciphers: ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
-----
-+
-To see the full list of available ciphers, use the `openssl ciphers` command. 
For more information about each cipher, see the 
link:https://www.openssl.org/docs/manmaster/man1/ciphers.html[ciphers man 
page^].
-
-`caCertFile`:: The absolute path to the file that contains the public 
certificates of trusted certificate authorities (CA).
-+
-For example:
-+
-[options="nowrap"]
-----
-caCertFile: /qdrouterd/ssl_certs/ca-cert.pem
-----
-
-`certFile`:: The absolute path to the file containing the PEM-formatted public 
certificate to be used on the local end of any connections using this profile.
-+
-For example:
-+
-[options="nowrap"]
-----
-certFile: /qdrouterd/ssl_certs/router-cert-pwd.pem
-----
-
-`privateKeyFile`:: The absolute path to the file containing the PEM-formatted 
private key for the above certificate.
-+
-For example:
-+
-[options="nowrap"]
-----
-privateKeyFile: /qdrouterd/ssl_certs/router-key-pwd.pem
-----
-
-`passwordFile` or `password`:: If the private key is password-protected, you 
must provide the password by either specifying the absolute path to a file 
containing the password that unlocks the certificate key, or entering the 
password directly in the configuration file.
-+
-For example:
-+
-[options="nowrap"]
-----
-password: routerKeyPassword
-----
-
-For information about additional `sslProfile` attributes, see 
link:{qdrouterdConfManPageUrl}#_sslprofile[sslProfile] in the `qdrouterd.conf` 
man page.
---
-
-[id='setting-up-sasl-for-authentication-and-payload-encryption']
-=== Setting Up SASL for Authentication and Payload Encryption
-
-If you plan to use SASL to authenticate connections, you must first add the 
SASL attributes to the `router` entity in the router's configuration file. 
These attributes define a set of SASL parameters that can be used by the 
router's incoming and outgoing connections.
-
-.Prerequisites
-
-Before you can set up SASL, you must have the following:
-
-* xref:generating-sasl-database[The SASL database is generated.]
-* xref:configuring-sasl-database[The SASL configuration file is configured.]
-* The Cyrus SASL plugin is installed for each SASL mechanism you plan to use.
-+
-Cyrus SASL uses plugins to support specific SASL mechanisms. Before you can 
use a particular SASL mechanism, the relevant plugin must be installed. For 
example, you need the `cyrus-sasl-plain` plugin to use SASL PLAIN 
authentication.
-+
---
-// Note about searching for an installing SASL plugins.
-include::{FragmentDir}/fragment-router-sasl-para.adoc[]
---
-
-.Procedure
-
-* In the router's configuration file, add the following attributes to the 
`router` section:
-+
---
-[options="nowrap",subs="+quotes"]
-----
-router {
-    ...
-    saslConfigDir: _PATH_
-    saslConfigName: _FILE_NAME_
-}
-----
-
-`saslConfigDir`:: The absolute path to the SASL configuration file.
-+
-For example:
-+
-[options="nowrap"]
-----
-saslConfigDir: /qdrouterd/security
-----
-
-`saslConfigName`:: The name of the SASL configuration file. This name should 
_not_ include the `.conf` file extension.
-+
-For example:
-+
-[options="nowrap"]
-----
-saslConfigName: qdrouterd_sasl
-----
---
-
-[id='securing-incoming-connections']
-=== Securing Incoming Connections
-
-You can secure incoming connections by configuring each connection's 
`listener` entity for encryption, authentication, or both.
-
-.Prerequisites
-
-Before securing incoming connections, the security protocols you plan to use 
should be set up.
-
-.Choices
-
-* xref:adding-ssl-encryption-to-incoming-connection[Add SSL/TLS encryption]
-* xref:adding-sasl-authentication-to-incoming-connection[Add SASL 
authentication]
-* xref:adding-ssl-client-authentication-to-incoming-connection[Add SSL/TLS 
client authentication]
-* xref:adding-sasl-payload-encryption-to-incoming-connection[Add SASL payload 
encryption]
-
-[id='adding-ssl-encryption-to-incoming-connection']
-==== Adding SSL/TLS Encryption to an Incoming Connection
-
-You can configure an incoming connection to accept encrypted connections only. 
By adding SSL/TLS encryption, to connect to this router, a remote peer must 
first start an SSL/TLS handshake with the router and be able to validate the 
server certificate received by the router during the handshake.
-
-.Procedure
-
-* In the router's configuration file, add the following attributes to the 
connection's `listener` entity:
-+
---
-[options="nowrap",subs="+quotes"]
-----
-listener {
-    ...
-    sslProfile: _SSL_PROFILE_NAME_
-    requireSsl: yes
-}
-----
-
-`sslProfile`:: The name of the SSL/TLS profile you set up.
-
-`requireSsl`:: Enter `yes` to require all clients connecting to the router on 
this connection to use encryption.
---
-
-[id='adding-sasl-authentication-to-incoming-connection']
-==== Adding SASL Authentication to an Incoming Connection
-
-You can configure an incoming connection to authenticate the client using 
SASL. You can use SASL authentication with or without SSL/TLS encryption.
-
-.Procedure
-
-* In the router's configuration file, add the following attributes to the 
connection's `listener` section:
-+
---
-[options="nowrap",subs="+quotes"]
-----
-listener {
-    ...
-    authenticatePeer: yes
-    saslMechanisms: _MECHANISMS_
-}
-----
-
-`authenticatePeer`:: Set this attribute to `yes` to require the router to 
authenticate the identity of a remote peer before it can use this incoming 
connection.
-
-`saslMechanisms`:: The SASL authentication mechanism (or mechanisms) to use 
for peer authentication. You can choose any of the Cyrus SASL authentication 
mechanisms _except_ for `ANONYMOUS`. To specify multiple authentication 
mechanisms, separate each mechanism with a space.
-+
-For a full list of supported Cyrus SASL authentication mechanisms, see 
link:https://www.cyrusimap.org/sasl/sasl/authentication_mechanisms.html[Authentication
 Mechanisms^].
---
-
-[id='adding-ssl-client-authentication-to-incoming-connection']
-==== Adding SSL/TLS Client Authentication to an Incoming Connection
-
-You can configure an incoming connection to authenticate the client using 
SSL/TLS.
-
-The base SSL/TLS configuration provides content encryption and server 
authentication, which means that remote peers can verify the router's identity, 
but the router cannot verify a peer's identity.
-
-However, you can require an incoming connection to use SSL/TLS client 
authentication, which means that remote peers must provide an additional 
certificate to the router during the SSL/TLS handshake. By using this 
certificate, the router can verify the client's identity without using a 
username and password.
-
-You can use SSL/TLS client authentication with or without SASL authentication.
-
-.Procedure
-
-* In the router's configuration, file, add the following attribute to the 
connection's `listener` entity:
-+
---
-[options="nowrap"]
-----
-listener {
-    ...
-    authenticatePeer: yes
-}
-----
-
-`authenticatePeer`:: Set this attribute to `yes` to require the router to 
authenticate the identity of a remote peer before it can use this incoming 
connection.
---
-
-[id='adding-sasl-payload-encryption-to-incoming-connection']
-==== Adding SASL Payload Encryption to an Incoming Connection
-
-If you do not use SSL/TLS, you can still encrypt the incoming connection by 
using SASL payload encryption.
-
-.Procedure
-
-* In the router's configuration file, add the following attributes to the 
connection's `listener` section:
-+
---
-[options="nowrap",subs="+quotes"]
-----
-listener {
-    ...
-    requireEncryption: yes
-    saslMechanisms: _MECHANISMS_
-}
-----
-
-`requireEncryption`:: Set this attribute to `yes` to require the router to use 
SASL payload encryption for the connection.
-
-`saslMechanisms`:: The SASL mechanism to use. You can choose any of the Cyrus 
SASL authentication mechanisms. To specify multiple authentication mechanisms, 
separate each mechanism with a space.
-+
-For a full list of supported Cyrus SASL authentication mechanisms, see 
link:https://www.cyrusimap.org/sasl/sasl/authentication_mechanisms.html[Authentication
 Mechanisms^].
---
-
-[id='securing-outgoing-connections']
-=== Securing Outgoing Connections
-
-You can secure outgoing connections by configuring each connection's 
`connector` entity for encryption, authentication, or both.
-
-.Prerequisites
-
-Before securing outgoing connections, the security protocols you plan to use 
should be set up.
-
-.Choices
-
-* xref:adding-ssl-authentication-to-outgoing-connection[Add SSL/TLS 
authentication]
-* xref:adding-sasl-authentication-to-outgoing-connection[Add SASL 
authentication]
-
-[id='adding-ssl-authentication-to-outgoing-connection']
-==== Adding SSL/TLS Client Authentication to an Outgoing Connection
-
-If an outgoing connection connects to an external client configured with 
mutual authentication, you should ensure that the outgoing connection is 
configured to provide the external client with a valid security certificate 
during the SSL/TLS handshake.
-
-You can use SSL/TLS client authentication with or without SASL authentication.
-
-.Procedure
-
-* In the router's configuration file, add the `sslProfile` attribute to the 
connection's `connector` entity:
-+
---
-[options="nowrap",subs="+quotes"]
-----
-connector {
-    ...
-    sslProfile: _SSL_PROFILE_NAME_
-}
-----
-
-`sslProfile`:: The name of the SSL/TLS profile you set up.
---
-
-[id='adding-sasl-authentication-to-outgoing-connection']
-==== Adding SASL Authentication to an Outgoing Connection
-
-You can configure an outgoing connection to provide authentication credentials 
to the external container. You can use SASL authentication with or without 
SSL/TLS encryption.
-
-.Procedure
-
-* In the router's configuration file, add the `saslMechanisms` attribute to 
the connection's `connector` entity:
-+
---
-[options="nowrap",subs="+quotes"]
-----
-connector {
-    ...
-    saslMechanisms: _MECHANISMS_
-    saslUsername: _USERNAME_
-    saslPassword: _PASSWORD_
-}
-----
-
-`saslMechanisms`:: One or more SASL mechanisms to use to authenticate the 
router to the external container. You can choose any of the Cyrus SASL 
authentication mechanisms. To specify multiple authentication mechanisms, 
separate each mechanism with a space.
-+
-For a full list of supported Cyrus SASL authentication mechanisms, see 
link:https://www.cyrusimap.org/sasl/sasl/authentication_mechanisms.html[Authentication
 Mechanisms^].
-`saslUsername`:: If any of the SASL mechanisms uses username/password 
authentication, then provide the username to connect to the external container.
-`saslPassword`:: If any of the SASL mechanisms uses username/password 
authentication, then provide the password to connect to the external container.
---
-
-[id='integrating-with-kerberos']
-=== Integrating with Kerberos
-
-By using the `GSSAPI` SASL mechanism, you can configure {RouterName} to 
authenticate incoming connections using Kerberos.
-
-.Prerequisites
-
-* A Kerberos infrastructure must be deployed in your environment.
-
-* In the Kerberos environment, a service principal of 
`amqp/_HOSTNAME_@_REALM_` must be configured.
-+
-This is the service principal that {RouterName} uses.
-
-* The `cyrus-sasl-gssapi` package must be installed on each client and router 
host machine.
-
-* xref:setting-up-sasl-for-authentication-and-payload-encryption[SASL must be 
set up for {RouterName}].
-
-.Procedure
-
-. On the router's host machine, open the `/etc/sasl2/qdrouterd.conf` 
configuration file.
-+
---
-.An `/etc/sasl2/qdrouterd.conf` Configuration File
-====
-[options="nowrap"]
-----
-pwcheck_method: auxprop
-auxprop_plugin: sasldb
-sasldb_path: qdrouterd.sasldb
-keytab: /etc/krb5.keytab
-mech_list: ANONYMOUS DIGEST-MD5 EXTERNAL PLAIN GSSAPI
-----
-====
---
-
-. Verify the following:
-** The `mech_list` attribute contains the `GSSAPI` mechanism.
-** The `keytab` attribute points to the location of the keytab file.
-
-
-. Open the router's configuration file.
-
-. For each incoming connection that should use Kerberos for authentication, 
set the router's `listener` to use the `GSSAPI` mechanism.
-+
---
-.A `listener` in the Router Configuration File
-====
-[options="nowrap"]
-----
-listener {
-    ...
-    authenticatePeer: yes
-    saslMechanisms: GSSAPI
-}
-----
-====
-
-For more information about these attributes, see 
xref:adding-sasl-authentication-to-incoming-connection[].
---
-
-== Authorizing Access to Messaging Resources
-
-You can restrict the number of user connections, and control access to AMQP 
messaging resources by configuring _policies_.
-
-=== Types of Policies
-
-You can configure two different types of policies: _global policies_ and 
_vhost policies_.
-
-Global policies::
-Settings for the router. A global policy defines the maximum number of 
incoming user connections for the router (across all vhost policies), and 
defines how the router should use vhost policies.
-
-Vhost policies::
-Connection and AMQP resource limits for a messaging endpoint (called an AMQP 
virtual host, or _vhost_). A vhost policy defines what a client can access on a 
messaging endpoint over a particular connection.
-+
-[NOTE]
-====
-A vhost is typically the name of the host to which the client connection is 
directed. For example, if a client application opens a connection to the 
`amqp://mybroker.example.com:5672/queue01` URL, the vhost would be 
`mybroker.example.com`.
-====
-
-The resource limits defined in global and vhost policies are applied to user 
connections only. The limits do not affect inter-router connections or router 
connections that are outbound to waypoints.
-
-=== How {RouterName} Applies Policies
-
-{RouterName} uses both global and vhost policies to determine whether to 
permit a connection, and if it is permitted, to apply the appropriate resource 
limits.
-
-When a client creates a connection to the router, the router first determines 
whether to allow or deny the connection. This decision is based on the 
following criteria:
-
-* Whether the connection will exceed the router's global connection limit 
(defined in the global policy)
-* Whether the connection will exceed the vhost's connection limits (defined in 
the vhost policy that matches the host to which the connection is directed)
-
-If the connection is allowed, the router assigns the user (the authenticated 
user name from the connection) to a user group, and enforces the user group's 
resource limits for the lifetime of the connection.
-
-=== Configuring Global Policies
-
-You can set the incoming connection limit for the router and define how it 
should use vhost policies by configuring a global policy.
-
-.Procedure
-
-* In the router configuration file, add a `policy` section.
-+
---
-[options="nowrap",subs="+quotes"]
-----
-policy = {
-    maxConnections: 10000  // <1>
-    enableVhostPolicy: true  // <2>
-    policyDir: /etc/qpid-dispatch/policies/  // <3>
-    defaultVhost: $default  // <4>
-}
-----
-<1> The maximum number of concurrent client connections allowed for this 
router. This limit is always enforced, even if no other policy settings have 
been defined. The limit is applied to all incoming connections regardless of 
remote host, authenticated user, or targeted vhost. The default (and the 
maximum) value is `65535`.
-
-<2> Enables the router to enforce the connection denials and resource limits 
defined in the configured vhost policies. The default is `false`, which means 
that the router will not enforce any vhost policies.
-+
-[NOTE]
-====
-Setting `enableVhostPolicy` to `false` improves the router's performance.
-====
-
-<3> The absolute path to a directory that holds vhost policy definition files 
in JSON format (`*.json`). The router processes all of the vhost policies in 
each JSON file that is in this directory. For more information, see 
xref:configuring-vhost-policies-json[].
-
-<4> The name of the default vhost policy. This policy rule set is applied to a 
connection for which a vhost policy has not otherwise been configured. 
Processing for the default vhost is enabled by default and set to select vhost 
'$default'. To disable default vhost processing set defaultVhost to blank or do 
not define a vhost named '$default'.
---
-
-=== Configuring Vhost Policies
-
-You configure vhost policies to define the connection limits and AMQP resource 
limits for a messaging endpoint.
-
-A vhost policy consists of the following:
-
-* Connection limits
-+
-These limits control the number of users that can be connected to the vhost 
simultaneously.
-
-* User groups
-+
-A user group defines the messaging resources that the group members are 
permitted to access. Each user group defines the following:
-
-** A set of users that can connect to the vhost (the group members)
-** The remote hosts from which the group members may connect to the router 
network
-** The AMQP resources that the group members are permitted to access on the 
vhost
-
-You can use the following methods to configure vhost policies:
-
-* xref:configuring-vhost-policies-router[Configure vhost policies directly in 
the router configuration file]
-* xref:configuring-vhost-policies-json[Configure vhost policies as JSON files]
-
-[id='configuring-vhost-policies-router']
-==== Configuring Vhost Policies in the Router Configuration File
-
-You can configure vhost policies in the router configuration file by 
configuring `vhost` entities. However, if multiple routers in your router 
network should be configured with the same vhost configuration, you will need 
to add the `vhost` configuration to each router's configuration file.
-
-.Procedure
-
-. In the router configuration file, add a `vhost` section and define the 
connection limits for it.
-+
---
-The connection limits apply to all users that are connected to the vhost. 
These limits control the number of users that can be connected simultaneously 
to the vhost.
-
-[options="nowrap",subs="+quotes"]
-----
-vhost = {
-    hostname: example.com  // <1>
-    maxConnections: 10000  // <2>
-    maxConnectionsPerUser: 1000  // <3>
-    maxConnectionsPerHost: 1000  // <4>
-    allowUnknownUser: false  // <5>
-    ...
-}
-----
-
-<1> The host name of the vhost. This vhost policy will be applied to any 
client connection that is directed to the hostname that you specify.
-
-<2> The global maximum number of concurrent client connections allowed for 
this vhost. The default is `65535`.
-
-<3> The maximum number of concurrent client connections allowed for any user. 
The default is `65535`.
-
-<4> The maximum number of concurrent client connections allowed for any remote 
host (the host from which the client is connecting). The default is `65535`. 
-
-<5> Whether unknown users (users who are not members of a defined user group) 
are allowed to connect to the vhost. Unknown users are assigned to the 
`$default` user group and receive `$default` settings. The default is `false`, 
which means that unknown users are not allowed.
---
-
-. In the `vhost` section, beneath the connection settings that you added, add 
the necessary user groups.
-+
---
-A user group defines what messaging resources the members of the group are 
allowed to access.
-
-[options="nowrap",subs="+quotes"]
-----
-vhost {
-    ...
-    groups: {
-        admin: {  // <1>
-            users: admin1, admin2  // <2>
-            remoteHosts: 127.0.0.1, ::1  // <3>
-            sources: *  // <4>
-            targets: *  // <5>
-        },
-        ...
-    }
-}
-----
-
-<1> The name of the user group.
-
-<2> A list of authenticated users for this user group. Use commas to separate 
multiple users. A user may belong to only one vhost user group.
-
-<3> A list of remote hosts from which the users may connect. A host can be a 
hostname, IP address, or IP address range. Use commas to separate multiple 
hosts. To allow access from all remote hosts, specify a wildcard `*`. To deny 
access from all remote hosts, leave this attribute blank.
-
-<4> A list of AMQP source addresses from which users in this group may receive 
messages. To specify multiple AMQP addresses, separate the addresses with 
either a comma or a space. If you do not specify any addresses, users in this 
group are not allowed to receive messages from any addresses.
-+
-You can use the substitution token `${user}` to specify an AMQP address that 
contains a user's authenticated user name. This enables you to allow access to 
resources specific to each user in the user group without having to name each 
user individually. You can only specify the `${user}` token once in an AMQP 
address name. If there are multiple tokens in an address, only the leftmost 
token will be substituted.
-+
-You can use an asterisk (`*`) wildcard to match one or more characters in an 
AMQP address. However, this wildcard is only recognized if it is the last 
character in the address name.
-+
-.Allowing Access to All Addresses
-====
-[options="nowrap"]
-----
-sources: *
-----
-====
-+
-.Restricting Access to All Addresses
-====
-[options="nowrap"]
-----
-sources:
-----
-====
-+
-.Allowing Access to Specific Addresses
-====
-[options="nowrap"]
-----
-sources: myaddress01, myaddress02, myaddress03
-----
-====
-+
-.Allowing Access to User-Specific Addresses
-====
-This definition allows access to any address that meets any of the following 
rules:
-
-* Starts with the prefix `tmp_` and ends with the user name
-* Starts with the prefix `temp` followed by any additional characters
-* Starts with the user name, is followed by `-home-`, and ends with any 
additional characters
-
-[options="nowrap"]
-----
-sources: tmp_${user}, temp*, ${user}-home-*
-----
-====
-
-<5> A list of AMQP target addresses from which users in this group may send 
messages. You can specify multiple AMQP addresses and use user name 
substitution and wildcards the same way as with source addresses.
---
-
-. If necessary, add any advanced user group settings to the vhost user group.
-+
-The advanced user group settings enable you to define resource limits based on 
the AMQP connection open, session begin, and link attach phases of the 
connection. For more information, see 
link:{qdrouterdConfManPageUrl}#_vhostUserGroupSettings[Vhost User Group 
Settings^].
-
-[id='configuring-vhost-policies-json']
-==== Configuring Vhost Policies as JSON Files
-
-As an alternative to using the router configuration file, you can configure 
vhost policies in JSON files. If you have multiple routers that need to share 
the same vhost configuration, you can put the vhost configuration JSON files in 
a location accessible to each router, and then configure the routers to apply 
the vhost policies defined in these JSON files.
-
-.Procedure
-
-. Determine where to store the vhost policy JSON files.
-+
-The directory should be accessible by each router that needs to apply these 
vhost policies.
-
-. In the directory you determined, create a JSON file for each vhost policy.
-+
-The vhost policy is configured the same way as a `vhost` entity in the router 
configuration file, only using JSON syntax. For more information about vhost 
policy attributes, see xref:configuring-vhost-policies-router[].
-+
-.Sample Vhost Policy JSON File
-====
-[source,json,options="nowrap"]
-----
-{
-    "vhost": {    
-        "name": "example.com",        
-        "maxConnectionsPerUser": 100,        
-        "allowUnknownUser": true,        
-        "groups": {
-            "admin": {
-                "users": ["admin1", "admin2"],
-                "sources": "*",
-                "targets": "*"
-            },
-            "developers": {    
-                "users": ["dev1", "dev2", "dev3"],
-                "remoteHosts": "*",
-                "sources": ["myqueue1", "myqueue2"],
-                "targets": ["myqueue1", "myqueue2"]
-            }
-        }
-    }
-}
-----
-====
-
-. In the router configuration file, locate the `policy` entity and set the 
`policyDir` attribute to point to the directory where the vhost policy JSON 
files are stored.
-+
-.A `policy` Entity
-====
-[options="nowrap"]
-----
-policy = {
-    maxConnections: 1000
-    enableVhostPolicy: true
-    policyDir: /etc/vhost-policies/ // <1>
-    defaultVhost: $default
-}
-----
-<1> The absolute path to a directory that holds vhost policy definition files 
in JSON format (*.json). The router processes all of the vhost policies in each 
JSON file that is in this directory.
-====
-
-. Repeat the previous step for each additional router that should use the 
vhost policies located in the vhost policy directory.
-
-=== Example: Configuring a Vhost Policy
-
-In this example, a vhost policy defines resource limits for clients connecting 
to the `example.com` host.
-
-.A Vhost Policy in the Router Configuration File
-====
-[options="nowrap"]
-----
-vhost {
-    name: example.com  // <1>
-    maxConnectionsPerUser: 10  // <2>
-    allowUnknownUser: true  // <3>
-    groups: {
-        admin: {
-            users: admin-01, admin-02  // <4>
-            remoteHosts: 127.0.0.1, ::1  // <5>
-            sources: *  // <6>
-            targets: *  // <6>
-        },
-        $default: {
-            remoteHosts: *  // <7>
-            sources: news*, sports*, chat*  // <8>
-            targets: chat*  // <9>
-        }
-    }
-}
-----
-
-<1> The rules defined in this vhost policy will be applied to any user 
connecting to `example.com`.
-
-<2> Each user can open up to 10 connections to the vhost.
-
-<3> Any user can connect to this vhost. Users that are not part of the `admin` 
group are assigned to the `$default` group.
-
-<4> If the `admin-01` or `admin-02` user connects to the vhost, they are 
assigned to the `admin` user group.
-
-<5> Users in the `admin` user group must connect from localhost. If the admin 
user attempts to connect from any other host, the connection will be denied.
-
-<6> Users in the admin user group can send and receive from any address 
offered by the vhost.
-
-<7> Any non-admin user is permitted to connect from any host.
-
-<8> Non-admin users are permitted to receive messages from any addresses that 
start with the `news`, `sports`, or `chat` prefixes.
-
-<9> Non-admin users are permitted to send messages to any address that start 
with the `chat` prefix.
-====
-
-=== Example: Using a Vhost Policy to Limit Memory Consumption (Advanced)
-
-By using the advanced vhost policy attributes, you can control how much system 
buffer memory a user connection can potentially consume.
-
-In this example, a stock trading site provides services for stock traders. 
However, the site must also accept high-capacity, automated data feeds from 
stock exchanges. To prevent trading activity from consuming memory needed for 
the feeds, a larger amount of system buffer memory is allotted to the feeds 
than to the traders. 
-
-This examples uses the `maxSessions` and `maxSessionWindow` attributes to set 
the buffer memory consumption limits for each AMQP session. These settings are 
passed directly to the AMQP connection and session negotiations, and do not 
require any processing cycles on the router.
-
-This example does not show the vhost policy settings that are unrelated to 
buffer allocation.
-
-.A Vhost Policy to Limit Memory Consumption
-====
-[options="nowrap"]
-----
-vhost {
-    name: traders.com  // <1>
-    groups: {
-        traders: {
-            users: trader-1, trader-2, ...  // <2>
-            maxFrameSize: 10000  // <3>
-            maxSessionWindow: 5000000  // <3>
-            maxSessions: 1  // <4>
-            ...
-        },
-        feeds: {
-            users: nyse-feed, nasdaq-feed  // <5>
-            maxFrameSize: 60000  // <6>
-            maxSessionWindow: 1200000000  // <6>
-            maxSessions: 3  // <7>
-            ...
-        }
-    }
-}
-----
-
-<1> The rules defined in this vhost policy will be applied to any user 
connecting to `traders.com`.
-
-<2> The `traders` group includes `trader-01`, `trader-02`, and any other user 
defined in the list.
-
-<3> At most, 5,000,000 bytes of data can be in flight on each session.
-
-<4> Only one session per connection is allowed.
-
-<5> The `feeds` group includes two users.
-
-<6> At most, 1,200,000,000 bytes of data can be in flight on each session.
-
-<7> Up to three sessions per connection are allowed.
-====

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/cyrus-sasl.adoc
----------------------------------------------------------------------
diff --git a/doc/new-book/cyrus-sasl.adoc b/doc/new-book/cyrus-sasl.adoc
deleted file mode 100644
index 3618ffc..0000000
--- a/doc/new-book/cyrus-sasl.adoc
+++ /dev/null
@@ -1,90 +0,0 @@
-////
-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
-////
-
-[id='cyrus-sasl']
-= Using Cyrus SASL to Provide Authentication
-
-// Just doing some basic editing for now; for future releases, this content 
will need some more work. Also need to determine if it should be moved from an 
appendix to the section that deals with setting up SASL.
-
-{RouterName} uses the Cyrus SASL library for SASL authentication. Therefore, 
if you want to use SASL, you must set up the Cyrus SASL database and configure 
it.
-
-[id='generating-sasl-database']
-== Generating a SASL Database
-
-To generate a SASL database to store credentials, enter the following command:
-
-[options="nowrap",subs="+quotes"]
-----
-$ sudo saslpasswd2 -c -f _SASL_DATABASE_NAME_.sasldb -u _DOMAIN_NAME_ 
_USER_NAME_
-----
-
-This command creates or updates the specified SASL database, and adds the 
specified user name to it. The command also prompts you for the user name's 
password.
-
-// What is the goal here - to add user credentials to the database? If so, do 
you need to run this command for every user that you want to add? When it says 
that the command prompts for the password, does that mean you use the prompt to 
set the user's password?
-
-The full user name is the user name you entered plus the domain name 
(`__USER_NAME__`@`__DOMAIN_NAME__`). Providing a domain name is not required 
when you add a user to the database, but if you do not provide one, a default 
domain will be added automatically (the hostname of the machine on which the 
tool is running). For example, in the command above, the full user name would 
be `us...@domain.com`.
-
-== Viewing Users in a SASL Database
-
-To view the user names stored in the SASL database:
-
-[options="nowrap",subs="+quotes"]
-----
-$ sudo sasldblistusers2 -f qdrouterd.sasldb
-us...@domain.com: __PASSWORD__
-us...@domain.com: __PASSWORD__
-----
-
-[id='configuring-sasl-database']
-== Configuring a SASL Database
-
-To use the SASL database to provide authentication in {RouterName}:
-
-. Open the `/etc/sasl2/qdrouterd.conf` configuration file.
-
-. Set the following attributes:
-+
---
-[options="nowrap",subs="+quotes"]
-----
-pwcheck_method: auxprop
-auxprop_plugin: sasldb
-sasldb_path: __SASL_DATABASE_NAME__
-mech_list: __MECHANISM1 ...__
-----
-
-`sasldb_path`:: The name of the SASL database to use.
-+
-For example:
-+
-[options="nowrap"]
-----
-sasldb_path: qdrouterd.sasldb
-----
-
-`mech_list`:: The SASL mechanisms to enable for authentication. To add 
multiple mechanisms, separate each entry with a space.
-+
-For example:
-+
-[options="nowrap"]
-----
-mech_list: ANONYMOUS DIGEST-MD5 EXTERNAL PLAIN
-----
-// Where can users find a list of supported mechanisms?
---

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/getting-started.adoc
----------------------------------------------------------------------
diff --git a/doc/new-book/getting-started.adoc 
b/doc/new-book/getting-started.adoc
deleted file mode 100644
index 021dcba..0000000
--- a/doc/new-book/getting-started.adoc
+++ /dev/null
@@ -1,156 +0,0 @@
-////
-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
-////
-
-[id='getting-started']
-= Getting Started
-
-Before configuring {RouterName}, you should understand how to start the 
router, how it is configured by default, and how to use it in a simple 
peer-to-peer configuration. 
-
-[id='starting-the-router']
-== Starting the Router
-
-.Procedure
-
-// Step 1 for starting the router.
-include::{FragmentDir}/fragment-starting-router-step.adoc[]
-+
-[NOTE]
-====
-You can specify a different configuration file with which to start the router. 
For more information, see 
xref:methods-for-changing-router-configuration[_Changing a Router's 
Configuration_].
-====
-+
-The router starts, using the default configuration file stored at 
`/etc/qpid-dispatch/qdrouterd.conf`. 
-
-. View the log to verify the router status:
-+
-[options="nowrap"]
-----
-$ qdstat --log
-----
-+
-This example shows that the router was correctly installed, is running, and is 
ready to route traffic between clients:
-+
-[options="nowrap"]
-----
-$ qdstat --log
-Fri May 20 09:38:03 2017 SERVER (info) Container Name: Router.A // <1>
-Fri May 20 09:38:03 2017 ROUTER (info) Router started in Standalone mode // <2>
-Fri May 20 09:38:03 2017 ROUTER_CORE (info) Router Core thread running. 
0/Router.A
-Fri May 20 09:38:03 2017 ROUTER_CORE (info) In-process subscription 
M/$management
-Fri May 20 09:38:03 2017 AGENT (info) Activating management agent on 
$_management_internal // <3>
-Fri May 20 09:38:03 2017 ROUTER_CORE (info) In-process subscription 
L/$management
-Fri May 20 09:38:03 2017 ROUTER_CORE (info) In-process subscription 
L/$_management_internal
-Fri May 20 09:38:03 2017 DISPLAYNAME (info) Activating DisplayNameService on 
$displayname
-Fri May 20 09:38:03 2017 ROUTER_CORE (info) In-process subscription 
L/$displayname
-Fri May 20 09:38:03 2017 CONN_MGR (info) Configured Listener: 0.0.0.0:amqp 
proto=any role=normal // <4>
-Fri May 20 09:38:03 2017 POLICY (info) Policy configured maximumConnections: 
0, policyFolder: '', access rules enabled: 'false'
-Fri May 20 09:38:03 2017 POLICY (info) Policy fallback defaultApplication is 
disabled
-Fri May 20 09:38:03 2017 SERVER (info) Operational, 4 Threads Running // <5>
-----
-<1> The name of this router instance.
-<2> By default, the router starts in _standalone_ mode, which means that it 
cannot connect to other routers or be used in a router network.
-<3> The management agent. It provides the `$management` address, through which 
management tools such as `qdmanage` and `qdstat` can perform create, read, 
update, and delete (CRUD) operations on the router. As an AMQP endpoint, the 
management agent supports all operations defined by the 
link:https://www.oasis-open.org/committees/download.php/54441/AMQP%20Management%20v1.0%20WD09[AMQP
 management specification (Draft 9)].
-<4> A listener is started on all available network interfaces and listens for 
connections on the standard AMQP port (5672, which is not encrypted).
-<5> Threads for handling message traffic and all other internal operations.
- 
-== Routing Messages in a Peer-to-Peer Configuration
-
-// XXX Calling this peer-to-peer poses some problems.  It's also
-// technically client-server in this instance, and most people think
-// those two things are exclusive.
-
-This example demonstrates how the router can connect clients by receiving and 
sending messages between them. It uses the router's default configuration file 
and does not require a broker.
-
-.Peer-to-peer Communication
-image::01-peer-to-peer.png[Peer-to-peer Communication, align="center"]
-
-As the diagram indicates, the configuration consists of an {RouterName} 
component with two clients connected to it: a sender and a receiver. The 
receiver wants to receive messages on a specific address, and the sender sends
-messages to that address. 
-
-A broker is not used in this example, so there is no _"store and forward"_ 
mechanism in the middle. Instead, the messages flow from sender to receiver 
only if the receiver is online, and the sender can confirm that the messages 
have arrived at their destination.
-
-This example uses a {ClientAmqpPythonName} client to start a receiver client, 
and then send five messages from the sender client.
-
-.Prerequisites
-
-{ClientAmqpPythonName} must be installed before you can complete the 
peer-to-peer routing example. For more information, see {ClientAmqpPythonUrl}.
-
-.Procedure
-
-. xref:starting-the-receiver-client[Start the receiver client].
-. xref:sending-messages[Send messages].
-
-[id='starting-the-receiver-client']
-=== Starting the Receiver Client
-
-In this example, the receiver client is started first. This means that the 
messages will be sent as soon as the sender client is started.
-
-[NOTE]
-====
-In practice, the order in which you start senders and receivers does not 
matter. In both cases, messages will be sent as soon as the receiver comes 
online.
-====
-
-.Procedure
-
-* To start the receiver by using the Python receiver client, navigate to the 
Python examples directory and run the `simple_recv.py` example:
-+
---
-[options="nowrap",subs="+quotes"]
-----
-$ cd __INSTALL_DIR__/examples/python/
-$ python simple_recv.py -a 127.0.0.1:5672/examples -m 5
-----
-
-This command starts the receiver and listens on the default address 
(`127.0.0.1:5672/examples`). The receiver is also set to receive a maximum of 
five messages.
---
-
-[id='sending-messages']
-=== Sending Messages
-
-After starting the receiver client, you can send messages from the sender. 
These messages will travel through the router to the receiver.
-
-.Procedure
-
-* In a new terminal window, navigate to the Python examples directory and run 
the `simple_send.py` example:
-+
---
-[options="nowrap",subs="+quotes"]
-----
-$ cd __INSTALL_DIR__/examples/python/
-$ python simple_send.py -a 127.0.0.1:5672/examples -m 5
-----
-
-This command sends five auto-generated messages to the default address 
(`127.0.0.1:5672/examples`) and then confirms that they were delivered and 
acknowledged by the receiver:
-
-[options="nowrap"]
-----
-all messages confirmed
-----
-
-The receiver client receives the messages and displays their content:
-
-[options="nowrap"]
-----
-{u'sequence': 1L}
-{u'sequence': 2L}
-{u'sequence': 3L}
-{u'sequence': 4L}
-{u'sequence': 5L}
-----
---

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/01-peer-to-peer.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/01-peer-to-peer.png 
b/doc/new-book/images/01-peer-to-peer.png
deleted file mode 100644
index 5c834aa..0000000
Binary files a/doc/new-book/images/01-peer-to-peer.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/balanced-routing.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/balanced-routing.png 
b/doc/new-book/images/balanced-routing.png
deleted file mode 100644
index fedcdbf..0000000
Binary files a/doc/new-book/images/balanced-routing.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/brokered-messaging.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/brokered-messaging.png 
b/doc/new-book/images/brokered-messaging.png
deleted file mode 100644
index ae129d4..0000000
Binary files a/doc/new-book/images/brokered-messaging.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/closest-routing.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/closest-routing.png 
b/doc/new-book/images/closest-routing.png
deleted file mode 100644
index ba3f0a5..0000000
Binary files a/doc/new-book/images/closest-routing.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/console1.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/console1.png b/doc/new-book/images/console1.png
deleted file mode 100644
index f131884..0000000
Binary files a/doc/new-book/images/console1.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/console_charts.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/console_charts.png 
b/doc/new-book/images/console_charts.png
deleted file mode 100644
index 169c2ca..0000000
Binary files a/doc/new-book/images/console_charts.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/console_entity.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/console_entity.png 
b/doc/new-book/images/console_entity.png
deleted file mode 100644
index 130c7e7..0000000
Binary files a/doc/new-book/images/console_entity.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/console_login.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/console_login.png 
b/doc/new-book/images/console_login.png
deleted file mode 100644
index 63e22c6..0000000
Binary files a/doc/new-book/images/console_login.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/console_overview.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/console_overview.png 
b/doc/new-book/images/console_overview.png
deleted file mode 100644
index af25f36..0000000
Binary files a/doc/new-book/images/console_overview.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/console_schema.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/console_schema.png 
b/doc/new-book/images/console_schema.png
deleted file mode 100644
index ba56c7b..0000000
Binary files a/doc/new-book/images/console_schema.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/console_topology.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/console_topology.png 
b/doc/new-book/images/console_topology.png
deleted file mode 100644
index ae4b22a..0000000
Binary files a/doc/new-book/images/console_topology.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/link-routing.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/link-routing.png 
b/doc/new-book/images/link-routing.png
deleted file mode 100644
index 0c1b9e4..0000000
Binary files a/doc/new-book/images/link-routing.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/message-routing.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/message-routing.png 
b/doc/new-book/images/message-routing.png
deleted file mode 100644
index 42f4638..0000000
Binary files a/doc/new-book/images/message-routing.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/multicast-routing.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/multicast-routing.png 
b/doc/new-book/images/multicast-routing.png
deleted file mode 100644
index d4548a6..0000000
Binary files a/doc/new-book/images/multicast-routing.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/path-redundancy-01.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/path-redundancy-01.png 
b/doc/new-book/images/path-redundancy-01.png
deleted file mode 100644
index ba8f10d..0000000
Binary files a/doc/new-book/images/path-redundancy-01.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/path-redundancy-02.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/path-redundancy-02.png 
b/doc/new-book/images/path-redundancy-02.png
deleted file mode 100644
index 6d4a1f5..0000000
Binary files a/doc/new-book/images/path-redundancy-02.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/path-redundancy-temp-decoupling-01.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/path-redundancy-temp-decoupling-01.png 
b/doc/new-book/images/path-redundancy-temp-decoupling-01.png
deleted file mode 100644
index c3c6631..0000000
Binary files a/doc/new-book/images/path-redundancy-temp-decoupling-01.png and 
/dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/path-redundancy-temp-decoupling-02.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/path-redundancy-temp-decoupling-02.png 
b/doc/new-book/images/path-redundancy-temp-decoupling-02.png
deleted file mode 100644
index ecab8b1..0000000
Binary files a/doc/new-book/images/path-redundancy-temp-decoupling-02.png and 
/dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/sharded-queue-01.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/sharded-queue-01.png 
b/doc/new-book/images/sharded-queue-01.png
deleted file mode 100644
index ab25be0..0000000
Binary files a/doc/new-book/images/sharded-queue-01.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/images/sharded-queue-02.png
----------------------------------------------------------------------
diff --git a/doc/new-book/images/sharded-queue-02.png 
b/doc/new-book/images/sharded-queue-02.png
deleted file mode 100644
index 7e73e6d..0000000
Binary files a/doc/new-book/images/sharded-queue-02.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f77f92cb/doc/new-book/introduction.adoc
----------------------------------------------------------------------
diff --git a/doc/new-book/introduction.adoc b/doc/new-book/introduction.adoc
deleted file mode 100644
index 37eb37c..0000000
--- a/doc/new-book/introduction.adoc
+++ /dev/null
@@ -1,124 +0,0 @@
-////
-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
-////
-
-[id='introduction']
-= Introduction
-
-[id='overview']
-== Overview
-
-The {RouterName} is an AMQP message router that provides
-advanced interconnect capabilities. It allows flexible routing of
-messages between any AMQP-enabled endpoints, whether they be clients,
-servers, brokers or any other entity that can send or receive standard
-AMQP messages.
-
-A messaging client can make a single AMQP connection into a messaging
-bus built of {RouterName} routers and, over that connection, exchange
-messages with one or more message brokers, and at the same time exchange
-messages directly with other endpoints without involving a broker at
-all.
-
-The router is an intermediary for messages but it is _not_ a broker. It
-does not _take responsibility for_ messages. It will, however, propagate
-settlement and disposition across a network such that delivery
-guarantees are met. In other words: the router network will deliver the
-message, possibly via several intermediate routers, _and_ it will route
-the acknowledgement of that message by the ultimate receiver back across
-the same path. This means that _responsibility_ for the message is
-transfered from the original sender to the ultimate receiver __as if
-they were directly connected__. However this is done via a flexible
-network that allows highly configurable routing of the message
-transparent to both sender and receiver.
-
-There are some patterns where this enables "brokerless messaging"
-approaches that are preferable to brokered approaches. In other cases a
-broker is essential (in particular where you need the separation of
-responsibility and/or the buffering provided by store-and-forward) but a
-dispatch network can still be useful to tie brokers and clients together
-into patterns that are difficult with a single broker.
-
-For a "brokerless" example, consider the common brokered implementation
-of the request-response pattern, a client puts a request on a queue and
-then waits for a reply on another queue. In this case the broker can be
-a hindrance - the client may want to know immediately if there is nobody
-to serve the request, but typically it can only wait for a timeout to
-discover this. With a {RouterName} network, the client can be informed
-immediately if its message cannot be delivered because nobody is
-listening. When the client receives acknowledgement of the request it
-knows not just that it is sitting on a queue, but that it has actually
-been received by the server.
-
-For an exampe of using {RouterName} to enhance the use of brokers, consider
-using an array of brokers to implement a scalable distributed work
-queue. A dispatch network can make this appear as a single queue, with
-senders publishing to a single address and receivers subscribing to a
-single address. The dispatch network can distribute work to any broker
-in the array and collect work from any broker for any receiver. Brokers
-can be shut down or added without affecting clients. This elegantly
-solves the common difficulty of "stuck messages" when implementing this
-pattern with brokers alone. If a receiver is connected to a broker that
-has no messages, but there are messages on another broker, you have to
-somehow transfer them or leave them "stuck". With a {RouterName} network,
-_all_ the receivers are connected to _all_ the brokers. If there is a
-message anywhere it can be delivered to any receiver.
-
-{RouterName} is meant to be deployed in topologies of multiple routers,
-preferably with redundant paths. It uses link-state routing protocols
-and algorithms (similar to OSPF or IS-IS from the networking world) to
-calculate the best path from every point to every other point and to
-recover quickly from failures. It does not need to use clustering for
-high availability; rather, it relies on redundant paths to provide
-continued connectivity in the face of system or network failure. Because
-it never takes responsibility for messages it is effectively stateless.
-Messages not delivered to their final destination will not be
-acknowledged to the sender and therefore the sender can re-send such
-messages if it is disconnected from the network.
-
-[id='benefits']
-== Benefits
-
-Simplifies connectivity
-
-* An endpoint can do all of its messaging through a single transport
-connection
-* Avoid opening holes in firewalls for incoming connections
-
-Provides messaging connectivity where there is no TCP/IP connectivity
-
-* A server or broker can be in a private IP network (behind a NAT
-firewall) and be accessible by messaging endpoints in other networks
-(learn more).
-
-Simplifies reliability
-
-* Reliability and availability are provided using redundant topology,
-not server clustering
-* Reliable end-to-end messaging without persistent stores
-* Use a message broker only when you need store-and-forward semantics
-
-[id='features']
-== Features
-
-* Can be deployed stand-alone or in a network of routers
-** Supports arbitrary network topology - no restrictions on redundancy
-+
-- Automatic route computation - adjusts quickly to changes in topology
-* Provides remote access to brokers or other AMQP servers
-* Security


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to