blob: 40cde63ae19ffd5e840098df70b3aa29b2322db2 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>SaslAuthenticator (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.client, class: SaslAuthenticator">
<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/SaslAuthenticator.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><a href="#constructor-summary">Constr</a>&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><a href="#constructor-detail">Constr</a>&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.client</a></div>
<h1 title="Class SaslAuthenticator" class="title">Class SaslAuthenticator</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance">org.apache.qpid.protonj2.engine.sasl.client.SaslAuthenticator</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../SaslClientListener.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientListener</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">SaslAuthenticator</span>
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>
implements <a href="../SaslClientListener.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientListener</a></span></div>
<div class="block">Handles SASL traffic from the proton engine and drives the authentication process</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(org.apache.qpid.protonj2.engine.sasl.client.SaslCredentialsProvider)" class="member-name-link">SaslAuthenticator</a><wbr>(<a href="SaslCredentialsProvider.html" title="interface in org.apache.qpid.protonj2.engine.sasl.client">SaslCredentialsProvider</a>&nbsp;credentials)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates a new SASL Authenticator initialized with the given credentials provider instance.</div>
</div>
<div class="col-constructor-name odd-row-color"><code><a href="#%3Cinit%3E(org.apache.qpid.protonj2.engine.sasl.client.SaslMechanismSelector,org.apache.qpid.protonj2.engine.sasl.client.SaslCredentialsProvider)" class="member-name-link">SaslAuthenticator</a><wbr>(<a href="SaslMechanismSelector.html" title="class in org.apache.qpid.protonj2.engine.sasl.client">SaslMechanismSelector</a>&nbsp;selector,
<a href="SaslCredentialsProvider.html" title="interface in org.apache.qpid.protonj2.engine.sasl.client">SaslCredentialsProvider</a>&nbsp;credentials)</code></div>
<div class="col-last odd-row-color">
<div class="block">Creates a new client SASL Authenticator with the given <a href="Mechanism.html" title="interface in org.apache.qpid.protonj2.engine.sasl.client"><code>Mechanism</code></a> and client credentials
provider instances.</div>
</div>
</div>
</section>
</li>
<!-- ========== 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-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete 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-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><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-tab4">
<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-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><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-tab4">
<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-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><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-tab4">
<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-tab4"><code><a href="SaslAuthenticator.html" title="class in org.apache.qpid.protonj2.engine.sasl.client">SaslAuthenticator</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#saslComplete(org.apache.qpid.protonj2.engine.EventHandler)" class="member-name-link">saslComplete</a><wbr>(<a href="../../EventHandler.html" title="interface in org.apache.qpid.protonj2.engine">EventHandler</a>&lt;<a href="../SaslOutcome.html" title="enum in org.apache.qpid.protonj2.engine.sasl">SaslOutcome</a>&gt;&nbsp;saslCompleteEventHandler)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Sets a completion handler that will be notified once the SASL exchange has completed.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.qpid.protonj2.engine.sasl.SaslClientListener">Methods inherited from interface&nbsp;org.apache.qpid.protonj2.engine.sasl.<a href="../SaslClientListener.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientListener</a></h3>
<code><a href="../SaslClientListener.html#initialize(org.apache.qpid.protonj2.engine.sasl.SaslClientContext)">initialize</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(org.apache.qpid.protonj2.engine.sasl.client.SaslCredentialsProvider)">
<h3>SaslAuthenticator</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">SaslAuthenticator</span><wbr><span class="parameters">(<a href="SaslCredentialsProvider.html" title="interface in org.apache.qpid.protonj2.engine.sasl.client">SaslCredentialsProvider</a>&nbsp;credentials)</span></div>
<div class="block">Creates a new SASL Authenticator initialized with the given credentials provider instance. Because no
<a href="Mechanism.html" title="interface in org.apache.qpid.protonj2.engine.sasl.client"><code>Mechanism</code></a> selector is given the full set of supported SASL mechanisms will be chosen from when
attempting to match one to the server offered SASL mechanisms.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>credentials</code> - The credentials that will be used when the SASL negotiation is in progress.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(org.apache.qpid.protonj2.engine.sasl.client.SaslMechanismSelector,org.apache.qpid.protonj2.engine.sasl.client.SaslCredentialsProvider)">
<h3>SaslAuthenticator</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">SaslAuthenticator</span><wbr><span class="parameters">(<a href="SaslMechanismSelector.html" title="class in org.apache.qpid.protonj2.engine.sasl.client">SaslMechanismSelector</a>&nbsp;selector,
<a href="SaslCredentialsProvider.html" title="interface in org.apache.qpid.protonj2.engine.sasl.client">SaslCredentialsProvider</a>&nbsp;credentials)</span></div>
<div class="block">Creates a new client SASL Authenticator with the given <a href="Mechanism.html" title="interface in org.apache.qpid.protonj2.engine.sasl.client"><code>Mechanism</code></a> and client credentials
provider instances. The configured <a href="Mechanism.html" title="interface in org.apache.qpid.protonj2.engine.sasl.client"><code>Mechanism</code></a> selector is used when attempting to match
a SASL <a href="Mechanism.html" title="interface in org.apache.qpid.protonj2.engine.sasl.client"><code>Mechanism</code></a> with the server offered set of supported SASL mechanisms.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>selector</code> - The <a href="SaslMechanismSelector.html" title="class in org.apache.qpid.protonj2.engine.sasl.client"><code>SaslMechanismSelector</code></a> that will be called upon to choose a server supported mechanism.</dd>
<dd><code>credentials</code> - The credentials that will be used when the SASL negotiation is in progress.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="saslComplete(org.apache.qpid.protonj2.engine.EventHandler)">
<h3>saslComplete</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="SaslAuthenticator.html" title="class in org.apache.qpid.protonj2.engine.sasl.client">SaslAuthenticator</a></span>&nbsp;<span class="element-name">saslComplete</span><wbr><span class="parameters">(<a href="../../EventHandler.html" title="interface in org.apache.qpid.protonj2.engine">EventHandler</a>&lt;<a href="../SaslOutcome.html" title="enum in org.apache.qpid.protonj2.engine.sasl">SaslOutcome</a>&gt;&nbsp;saslCompleteEventHandler)</span></div>
<div class="block">Sets a completion handler that will be notified once the SASL exchange has completed. The notification
includes the <a href="../SaslOutcome.html" title="enum in org.apache.qpid.protonj2.engine.sasl"><code>SaslOutcome</code></a> value which indicates if authentication succeeded or failed.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>saslCompleteEventHandler</code> - The <a href="../../EventHandler.html" title="interface in org.apache.qpid.protonj2.engine"><code>EventHandler</code></a> that will receive notification when SASL authentication has completed.</dd>
<dt>Returns:</dt>
<dd>this <a href="SaslAuthenticator.html" title="class in org.apache.qpid.protonj2.engine.sasl.client"><code>SaslAuthenticator</code></a> instance.</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="modifiers">public</span>&nbsp;<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"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="../SaslClientListener.html#handleSaslMechanisms(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.types.Symbol%5B%5D)">SaslClientListener</a></code></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>Specified by:</dt>
<dd><code><a href="../SaslClientListener.html#handleSaslMechanisms(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.types.Symbol%5B%5D)">handleSaslMechanisms</a></code>&nbsp;in interface&nbsp;<code><a href="../SaslClientListener.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientListener</a></code></dd>
<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="modifiers">public</span>&nbsp;<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"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="../SaslClientListener.html#handleSaslChallenge(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.buffer.ProtonBuffer)">SaslClientListener</a></code></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>Specified by:</dt>
<dd><code><a href="../SaslClientListener.html#handleSaslChallenge(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.buffer.ProtonBuffer)">handleSaslChallenge</a></code>&nbsp;in interface&nbsp;<code><a href="../SaslClientListener.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientListener</a></code></dd>
<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="modifiers">public</span>&nbsp;<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"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="../SaslClientListener.html#handleSaslOutcome(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.engine.sasl.SaslOutcome,org.apache.qpid.protonj2.buffer.ProtonBuffer)">SaslClientListener</a></code></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>Specified by:</dt>
<dd><code><a href="../SaslClientListener.html#handleSaslOutcome(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.engine.sasl.SaslOutcome,org.apache.qpid.protonj2.buffer.ProtonBuffer)">handleSaslOutcome</a></code>&nbsp;in interface&nbsp;<code><a href="../SaslClientListener.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientListener</a></code></dd>
<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; 2023 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>