blob: c816b7ee3165ab1217c3b8659c1e57d4ae133b6e [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>SaslServerListener (Qpid ProtonJ2 Parent 1.0.0-M18 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="declaration: package: org.apache.qpid.protonj2.engine.sasl, interface: SaslServerListener">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/SaslServerListener.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.qpid.protonj2.engine.sasl</a></div>
<h1 title="Interface SaslServerListener" class="title">Interface SaslServerListener</h1>
</div>
<section class="class-description" id="class-description">
<hr>
<div class="type-signature"><span class="modifiers">public interface </span><span class="element-name type-name-label">SaslServerListener</span></div>
<div class="block">Listener for SASL frame arrival to facilitate relevant handling for the SASL
negotiation of the server side of the SASL exchange.
See the AMQP specification
<a href="http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-security-v1.0-os.html#doc-idp51040">
SASL negotiation process</a> overview for related detail.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab3" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab3', 3)" class="table-tab">Abstract Methods</button><button id="method-summary-table-tab5" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab5', 3)" class="table-tab">Default Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#handleSaslHeader(org.apache.qpid.protonj2.engine.sasl.SaslServerContext,org.apache.qpid.protonj2.types.transport.AMQPHeader)" class="member-name-link">handleSaslHeader</a><wbr>(<a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslServerContext</a>&nbsp;context,
<a href="../../types/transport/AMQPHeader.html" title="class in org.apache.qpid.protonj2.types.transport">AMQPHeader</a>&nbsp;header)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Called when the SASL header has been received and the server is now ready to send the configured SASL
mechanisms.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#handleSaslInit(org.apache.qpid.protonj2.engine.sasl.SaslServerContext,org.apache.qpid.protonj2.types.Symbol,org.apache.qpid.protonj2.buffer.ProtonBuffer)" class="member-name-link">handleSaslInit</a><wbr>(<a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslServerContext</a>&nbsp;context,
<a href="../../types/Symbol.html" title="class in org.apache.qpid.protonj2.types">Symbol</a>&nbsp;mechanism,
<a href="../../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;initResponse)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Called when a SASL init frame has arrived from the client indicating the chosen SASL mechanism
and the initial response data if any.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#handleSaslResponse(org.apache.qpid.protonj2.engine.sasl.SaslServerContext,org.apache.qpid.protonj2.buffer.ProtonBuffer)" class="member-name-link">handleSaslResponse</a><wbr>(<a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslServerContext</a>&nbsp;context,
<a href="../../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;response)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Called when a SASL response frame has arrived from the client.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#initialize(org.apache.qpid.protonj2.engine.sasl.SaslServerContext)" class="member-name-link">initialize</a><wbr>(<a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslServerContext</a>&nbsp;context)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Called to give the application code a clear point to initialize all the Server side expectations.</div>
</div>
</div>
</div>
</div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="initialize(org.apache.qpid.protonj2.engine.sasl.SaslServerContext)">
<h3>initialize</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">initialize</span><wbr><span class="parameters">(<a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslServerContext</a>&nbsp;context)</span></div>
<div class="block">Called to give the application code a clear point to initialize all the Server side expectations.
<p>
The application should use this event to configure the server mechanisms and other server
authentication properties.
<p>
In the event that the server implementation cannot proceed with SASL authentication it should call the
<a href="SaslServerContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslServerContext.saslFailure(javax.security.sasl.SaslException)</code></a> signal
the <a href="../Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> that it should transition to a failed state.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>context</code> - the <a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl"><code>SaslServerContext</code></a> used to authenticate the connection.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="handleSaslHeader(org.apache.qpid.protonj2.engine.sasl.SaslServerContext,org.apache.qpid.protonj2.types.transport.AMQPHeader)">
<h3>handleSaslHeader</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">handleSaslHeader</span><wbr><span class="parameters">(<a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslServerContext</a>&nbsp;context,
<a href="../../types/transport/AMQPHeader.html" title="class in org.apache.qpid.protonj2.types.transport">AMQPHeader</a>&nbsp;header)</span></div>
<div class="block">Called when the SASL header has been received and the server is now ready to send the configured SASL
mechanisms. The handler should respond be calling the <a href="SaslServerContext.html#sendMechanisms(org.apache.qpid.protonj2.types.Symbol%5B%5D)"><code>SaslServerContext.sendMechanisms(Symbol[])</code></a>
method immediately or later using the same thread that invoked this event handler.
<p>
In the event that the server implementation cannot proceed with SASL authentication it should call the
<a href="SaslServerContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslServerContext.saslFailure(javax.security.sasl.SaslException)</code></a> to fail
the SASL negotiation and signal the <a href="../Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> that it should transition to a failed state.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>context</code> - the <a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl"><code>SaslServerContext</code></a> object that received the SASL header.</dd>
<dd><code>header</code> - the AMQP Header that was read.</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="SaslServerContext.html#sendMechanisms(org.apache.qpid.protonj2.types.Symbol%5B%5D)"><code>SaslServerContext.sendMechanisms(Symbol[])</code></a></li>
<li><a href="SaslServerContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslServerContext.saslFailure(javax.security.sasl.SaslException)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="handleSaslInit(org.apache.qpid.protonj2.engine.sasl.SaslServerContext,org.apache.qpid.protonj2.types.Symbol,org.apache.qpid.protonj2.buffer.ProtonBuffer)">
<h3>handleSaslInit</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">handleSaslInit</span><wbr><span class="parameters">(<a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslServerContext</a>&nbsp;context,
<a href="../../types/Symbol.html" title="class in org.apache.qpid.protonj2.types">Symbol</a>&nbsp;mechanism,
<a href="../../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;initResponse)</span></div>
<div class="block">Called when a SASL init frame has arrived from the client indicating the chosen SASL mechanism
and the initial response data if any. Based on the chosen mechanism the server handler should provide
additional challenges or complete the SASL negotiation by sending an outcome to the client. The handler
can either respond immediately or it should response using the same thread that invoked this handler.
<p>
In the event that the server implementation cannot proceed with SASL authentication it should call the
<a href="SaslServerContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslServerContext.saslFailure(javax.security.sasl.SaslException)</code></a> to fail
the SASL negotiation and signal the <a href="../Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> that it should transition to a failed state.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>context</code> - the <a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl"><code>SaslServerContext</code></a> object that is to process the SASL initial frame.</dd>
<dd><code>mechanism</code> - the SASL mechanism that the client side has chosen for negotiations.</dd>
<dd><code>initResponse</code> - the initial response sent by the remote.</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="SaslServerContext.html#sendChallenge(org.apache.qpid.protonj2.buffer.ProtonBuffer)"><code>SaslServerContext.sendChallenge(ProtonBuffer)</code></a></li>
<li><a href="SaslServerContext.html#sendOutcome(org.apache.qpid.protonj2.engine.sasl.SaslOutcome,org.apache.qpid.protonj2.buffer.ProtonBuffer)"><code>SaslServerContext.sendOutcome(SaslOutcome, ProtonBuffer)</code></a></li>
<li><a href="SaslServerContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslServerContext.saslFailure(javax.security.sasl.SaslException)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="handleSaslResponse(org.apache.qpid.protonj2.engine.sasl.SaslServerContext,org.apache.qpid.protonj2.buffer.ProtonBuffer)">
<h3>handleSaslResponse</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">handleSaslResponse</span><wbr><span class="parameters">(<a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslServerContext</a>&nbsp;context,
<a href="../../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;response)</span></div>
<div class="block">Called when a SASL response frame has arrived from the client. The server should process the response
and either offer additional challenges or complete the SASL negotiations based on the mechanics of the
chosen SASL mechanism. The server handler should either respond immediately or should respond from the
same thread that the response handler was invoked from.
<p>
In the event that the server implementation cannot proceed with SASL authentication it should call the
<a href="SaslServerContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslServerContext.saslFailure(javax.security.sasl.SaslException)</code></a> to fail the SASL negotiation
and signal the <a href="../Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> that it should transition to a failed state.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>context</code> - the <a href="SaslServerContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl"><code>SaslServerContext</code></a> object that is to process the incoming response.</dd>
<dd><code>response</code> - the response sent by the remote SASL "client".</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="SaslServerContext.html#sendChallenge(org.apache.qpid.protonj2.buffer.ProtonBuffer)"><code>SaslServerContext.sendChallenge(ProtonBuffer)</code></a></li>
<li><a href="SaslServerContext.html#sendOutcome(org.apache.qpid.protonj2.engine.sasl.SaslOutcome,org.apache.qpid.protonj2.buffer.ProtonBuffer)"><code>SaslServerContext.sendOutcome(SaslOutcome, ProtonBuffer)</code></a></li>
<li><a href="SaslServerContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslServerContext.saslFailure(javax.security.sasl.SaslException)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2023 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>