<?xml version="1.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.

-->

<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="Java-Broker-Concepts-Ports">
    <title>Ports</title>
    <para> The Broker supports configuration of <emphasis>Ports</emphasis> to specify the particular
        AMQP messaging and HTTP management connectivity it offers for use. </para>
    <para> Each Port is configured with the particular <emphasis>Protocols</emphasis> and
            <emphasis>Transports</emphasis> it supports, as well as the <emphasis>Authentication
            Provider</emphasis> to be used to authenticate connections. Where SSL is in use, the
            <emphasis>Port</emphasis> configuration also defines which <emphasis>Keystore</emphasis>
        to use and (where supported) which <emphasis>TrustStore(s)</emphasis> and whether Client
        Certificates should be requested/required. </para>
    <para> Different <emphasis>Ports</emphasis> can support different protocols, and many
            <emphasis>Ports</emphasis> can be configured on the Broker.</para>
    <para> The following AMQP protocols are currently supported by the Broker: <itemizedlist>
            <listitem><para><emphasis>AMQP 0-8</emphasis></para></listitem>
            <listitem><para><emphasis>AMQP 0-9</emphasis></para></listitem>
            <listitem><para><emphasis>AMQP 0-9-1</emphasis></para></listitem>
            <listitem><para><emphasis>AMQP 0-10</emphasis></para></listitem>
            <listitem><para><emphasis>AMQP 1.0</emphasis></para></listitem>
        </itemizedlist>
    </para>

    <para> Additionally, HTTP ports can be configured for use by the associated management
        plugin. </para>
    <para>This diagram explains how Ports, <link linkend="Java-Broker-Concepts-Authentication-Providers">Authentication Providers</link>
        and an Access Control Provider work together to allow an application to form a connection to
        a Virtualhost.<figure>
            <title>Control flow during Authentication</title>
            <mediaobject>
                <imageobject>
                    <imagedata fileref="images/Broker-PortAuthFlow.png" format="PNG" scalefit="1"/>
                </imageobject>
                <textobject>
                    <phrase>Control flow during Authentication</phrase>
                </textobject>
            </mediaobject>
        </figure></para>
</section>
