blob: 570b219016445158f8cda0970f385ac0bd73cae6 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>SaslClientListener (Qpid ProtonJ2 Parent 1.0.0-M19 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: SaslClientListener">
<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/SaslClientListener.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 SaslClientListener" class="title">Interface SaslClientListener</h1>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="client/SaslAuthenticator.html" title="class in org.apache.qpid.protonj2.engine.sasl.client">SaslAuthenticator</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public interface </span><span class="element-name type-name-label">SaslClientListener</span></div>
<div class="block">Listener for SASL frame arrival to facilitate relevant handling for the SASL
negotiation of the client 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="#handleSaslChallenge(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.buffer.ProtonBuffer)" class="member-name-link">handleSaslChallenge</a><wbr>(<a href="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientContext</a>&nbsp;context,
<a href="../../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;challenge)</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 challenge frame has arrived and its effect applied, indicating the
challenge sent by the 'server' peer.</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="#handleSaslMechanisms(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.types.Symbol%5B%5D)" class="member-name-link">handleSaslMechanisms</a><wbr>(<a href="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientContext</a>&nbsp;context,
<a href="../../types/Symbol.html" title="class in org.apache.qpid.protonj2.types">Symbol</a>[]&nbsp;mechanisms)</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 mechanisms frame has arrived and its effect applied, indicating
the offered mechanisms sent by the 'server' peer.</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="#handleSaslOutcome(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.engine.sasl.SaslOutcome,org.apache.qpid.protonj2.buffer.ProtonBuffer)" class="member-name-link">handleSaslOutcome</a><wbr>(<a href="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientContext</a>&nbsp;context,
<a href="SaslOutcome.html" title="enum in org.apache.qpid.protonj2.engine.sasl">SaslOutcome</a>&nbsp;outcome,
<a href="../../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;additional)</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 outcome frame has arrived and its effect applied, indicating the outcome and
any success additional data sent by the 'server' peer.</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.SaslClientContext)" class="member-name-link">initialize</a><wbr>(<a href="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientContext</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 client 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.SaslClientContext)">
<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="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientContext</a>&nbsp;context)</span></div>
<div class="block">Called to give the application code a clear point to initialize all the client side expectations.
<p>
The application should use this event to configure the client mechanisms and other client
authentication properties.
<p>
In the event that the client implementation cannot proceed with SASL authentication it should call the
<a href="SaslClientContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslClientContext.saslFailure(javax.security.sasl.SaslException)</code></a>
to 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="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl"><code>SaslClientContext</code></a> used to authenticate the connection.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="handleSaslMechanisms(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.types.Symbol[])">
<h3>handleSaslMechanisms</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">handleSaslMechanisms</span><wbr><span class="parameters">(<a href="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientContext</a>&nbsp;context,
<a href="../../types/Symbol.html" title="class in org.apache.qpid.protonj2.types">Symbol</a>[]&nbsp;mechanisms)</span></div>
<div class="block">Called when a SASL mechanisms frame has arrived and its effect applied, indicating
the offered mechanisms sent by the 'server' peer. The client should respond to the
mechanisms event by selecting one from the offered list and calling the
<a href="SaslClientContext.html#sendChosenMechanism(org.apache.qpid.protonj2.types.Symbol,java.lang.String,org.apache.qpid.protonj2.buffer.ProtonBuffer)"><code>SaslClientContext.sendChosenMechanism(Symbol, String, ProtonBuffer)</code></a> method immediately
or later using the same thread that triggered this event.
<p>
In the event that the client implementation cannot proceed with SASL authentication it should call the
<a href="SaslClientContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslClientContext.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="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl"><code>SaslClientContext</code></a> that is to handle the mechanism selection</dd>
<dd><code>mechanisms</code> - the mechanisms that the remote supports.</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="SaslClientContext.html#sendChosenMechanism(org.apache.qpid.protonj2.types.Symbol,java.lang.String,org.apache.qpid.protonj2.buffer.ProtonBuffer)"><code>SaslClientContext.sendChosenMechanism(Symbol, String, ProtonBuffer)</code></a></li>
<li><a href="SaslClientContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslClientContext.saslFailure(javax.security.sasl.SaslException)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="handleSaslChallenge(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.buffer.ProtonBuffer)">
<h3>handleSaslChallenge</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">handleSaslChallenge</span><wbr><span class="parameters">(<a href="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientContext</a>&nbsp;context,
<a href="../../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;challenge)</span></div>
<div class="block">Called when a SASL challenge frame has arrived and its effect applied, indicating the
challenge sent by the 'server' peer. The client should respond to the mechanisms event
by selecting one from the offered list and calling the
<a href="SaslClientContext.html#sendResponse(org.apache.qpid.protonj2.buffer.ProtonBuffer)"><code>SaslClientContext.sendResponse(ProtonBuffer)</code></a> method immediately or later using the same
thread that triggered this event.
<p>
In the event that the client implementation cannot proceed with SASL authentication it should call the
<a href="SaslClientContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslClientContext.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="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl"><code>SaslClientContext</code></a> that is to handle the SASL challenge.</dd>
<dd><code>challenge</code> - the challenge bytes sent from the SASL server.</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="SaslClientContext.html#sendResponse(org.apache.qpid.protonj2.buffer.ProtonBuffer)"><code>SaslClientContext.sendResponse(ProtonBuffer)</code></a></li>
<li><a href="SaslClientContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslClientContext.saslFailure(javax.security.sasl.SaslException)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="handleSaslOutcome(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.engine.sasl.SaslOutcome,org.apache.qpid.protonj2.buffer.ProtonBuffer)">
<h3>handleSaslOutcome</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">handleSaslOutcome</span><wbr><span class="parameters">(<a href="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientContext</a>&nbsp;context,
<a href="SaslOutcome.html" title="enum in org.apache.qpid.protonj2.engine.sasl">SaslOutcome</a>&nbsp;outcome,
<a href="../../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;additional)</span></div>
<div class="block">Called when a SASL outcome frame has arrived and its effect applied, indicating the outcome and
any success additional data sent by the 'server' peer. The client can consider the SASL negotiations
complete following this event. The client should respond appropriately to the outcome whose state can
indicate that negotiations have failed and the server has not authenticated the client.
<p>
In the event that the client implementation cannot proceed with SASL authentication it should call the
<a href="SaslClientContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslClientContext.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="SaslClientContext.html" title="interface in org.apache.qpid.protonj2.engine.sasl"><code>SaslClientContext</code></a> that is to handle the resulting SASL outcome.</dd>
<dd><code>outcome</code> - the outcome that was supplied by the SASL "server".</dd>
<dd><code>additional</code> - the additional data sent from the server, or null if none.</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="SaslClientContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslClientContext.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; 2024 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>