blob: da6758b926f40b3a7db1d44be51feb42e24b7748 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>SaslAuthenticator (Qpid ProtonJ2 Parent 1.0.0-M9 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="SaslAuthenticator (Qpid ProtonJ2 Parent 1.0.0-M9 API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/SaslAuthenticator.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<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="subNavList">
<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>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.qpid.protonj2.engine.sasl.client</a></div>
<h2 title="Class SaslAuthenticator" class="title">Class SaslAuthenticator</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.qpid.protonj2.engine.sasl.client.SaslAuthenticator</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<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>
<pre>public class <span class="typeNameLabel">SaslAuthenticator</span>
extends <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a>
implements <a href="../SaslClientListener.html" title="interface in org.apache.qpid.protonj2.engine.sasl">SaslClientListener</a></pre>
<div class="block">Handles SASL traffic from the proton engine and drives the authentication process</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.apache.qpid.protonj2.engine.sasl.client.SaslCredentialsProvider)">SaslAuthenticator</a></span>&#8203;(<a href="SaslCredentialsProvider.html" title="interface in org.apache.qpid.protonj2.engine.sasl.client">SaslCredentialsProvider</a>&nbsp;credentials)</code></th>
<td class="colLast">
<div class="block">Creates a new SASL Authenticator initialized with the given credentials provider instance.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.apache.qpid.protonj2.engine.sasl.client.SaslMechanismSelector,org.apache.qpid.protonj2.engine.sasl.client.SaslCredentialsProvider)">SaslAuthenticator</a></span>&#8203;(<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></th>
<td class="colLast">
<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>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSaslChallenge(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.buffer.ProtonBuffer)">handleSaslChallenge</a></span>&#8203;(<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></th>
<td class="colLast">
<div class="block">Called when a SASL challenge frame has arrived and its effect applied, indicating the
challenge sent by the 'server' peer.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSaslMechanisms(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.types.Symbol%5B%5D)">handleSaslMechanisms</a></span>&#8203;(<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></th>
<td class="colLast">
<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>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSaslOutcome(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.engine.sasl.SaslOutcome,org.apache.qpid.protonj2.buffer.ProtonBuffer)">handleSaslOutcome</a></span>&#8203;(<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></th>
<td class="colLast">
<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>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="SaslAuthenticator.html" title="class in org.apache.qpid.protonj2.engine.sasl.client">SaslAuthenticator</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#saslComplete(org.apache.qpid.protonj2.engine.EventHandler)">saslComplete</a></span>&#8203;(<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></th>
<td class="colLast">
<div class="block">Sets a completion handler that will be notified once the SASL exchange has completed.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>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?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang" class="externalLink">clone</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang" class="externalLink">equals</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang" class="externalLink">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang" class="externalLink">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang" class="externalLink">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang" class="externalLink">notify</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang" class="externalLink">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang" class="externalLink">toString</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#wait(long,int)" title="class or interface in java.lang" class="externalLink">wait</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.apache.qpid.protonj2.engine.sasl.SaslClientListener">
<!-- -->
</a>
<h3>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></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;(org.apache.qpid.protonj2.engine.sasl.client.SaslCredentialsProvider)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>SaslAuthenticator</h4>
<pre>public&nbsp;SaslAuthenticator&#8203;(<a href="SaslCredentialsProvider.html" title="interface in org.apache.qpid.protonj2.engine.sasl.client">SaslCredentialsProvider</a>&nbsp;credentials)</pre>
<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>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>credentials</code> - The credentials that will be used when the SASL negotiation is in progress.</dd>
</dl>
</li>
</ul>
<a id="&lt;init&gt;(org.apache.qpid.protonj2.engine.sasl.client.SaslMechanismSelector,org.apache.qpid.protonj2.engine.sasl.client.SaslCredentialsProvider)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>SaslAuthenticator</h4>
<pre>public&nbsp;SaslAuthenticator&#8203;(<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)</pre>
<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>
<dt><span class="paramLabel">Parameters:</span></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>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="saslComplete(org.apache.qpid.protonj2.engine.EventHandler)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>saslComplete</h4>
<pre class="methodSignature">public&nbsp;<a href="SaslAuthenticator.html" title="class in org.apache.qpid.protonj2.engine.sasl.client">SaslAuthenticator</a>&nbsp;saslComplete&#8203;(<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)</pre>
<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>
<dt><span class="paramLabel">Parameters:</span></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><span class="returnLabel">Returns:</span></dt>
<dd>this <a href="SaslAuthenticator.html" title="class in org.apache.qpid.protonj2.engine.sasl.client"><code>SaslAuthenticator</code></a> instance.</dd>
</dl>
</li>
</ul>
<a id="handleSaslMechanisms(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.types.Symbol[])">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSaslMechanisms</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;handleSaslMechanisms&#8203;(<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)</pre>
<div class="block"><span class="descfrmTypeLabel">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>
<dt><span class="overrideSpecifyLabel">Specified by:</span></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><span class="paramLabel">Parameters:</span></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><span class="seeLabel">See Also:</span></dt>
<dd><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>,
<a href="../SaslClientContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslClientContext.saslFailure(javax.security.sasl.SaslException)</code></a></dd>
</dl>
</li>
</ul>
<a id="handleSaslChallenge(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.buffer.ProtonBuffer)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSaslChallenge</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;handleSaslChallenge&#8203;(<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)</pre>
<div class="block"><span class="descfrmTypeLabel">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>
<dt><span class="overrideSpecifyLabel">Specified by:</span></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><span class="paramLabel">Parameters:</span></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><span class="seeLabel">See Also:</span></dt>
<dd><a href="../SaslClientContext.html#sendResponse(org.apache.qpid.protonj2.buffer.ProtonBuffer)"><code>SaslClientContext.sendResponse(ProtonBuffer)</code></a>,
<a href="../SaslClientContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslClientContext.saslFailure(javax.security.sasl.SaslException)</code></a></dd>
</dl>
</li>
</ul>
<a id="handleSaslOutcome(org.apache.qpid.protonj2.engine.sasl.SaslClientContext,org.apache.qpid.protonj2.engine.sasl.SaslOutcome,org.apache.qpid.protonj2.buffer.ProtonBuffer)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>handleSaslOutcome</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;handleSaslOutcome&#8203;(<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)</pre>
<div class="block"><span class="descfrmTypeLabel">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>
<dt><span class="overrideSpecifyLabel">Specified by:</span></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><span class="paramLabel">Parameters:</span></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><span class="seeLabel">See Also:</span></dt>
<dd><a href="../SaslClientContext.html#saslFailure(javax.security.sasl.SaslException)"><code>SaslClientContext.saslFailure(javax.security.sasl.SaslException)</code></a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/SaslAuthenticator.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<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="subNavList">
<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>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</body>
</html>