mirror of
https://github.com/vanitasvitae/Smack.git
synced 2024-11-22 12:02:05 +01:00
Remove non-SASL authentication code (SMACK-446)
This commit is contained in:
parent
3a4e6c6d39
commit
790343867a
8 changed files with 18 additions and 284 deletions
|
@ -37,14 +37,12 @@ public class BOSHConfiguration extends ConnectionConfiguration {
|
||||||
|
|
||||||
public BOSHConfiguration(String xmppDomain) {
|
public BOSHConfiguration(String xmppDomain) {
|
||||||
super(xmppDomain, 7070);
|
super(xmppDomain, 7070);
|
||||||
setSASLAuthenticationEnabled(true);
|
|
||||||
ssl = false;
|
ssl = false;
|
||||||
file = "/http-bind/";
|
file = "/http-bind/";
|
||||||
}
|
}
|
||||||
|
|
||||||
public BOSHConfiguration(String xmppDomain, int port) {
|
public BOSHConfiguration(String xmppDomain, int port) {
|
||||||
super(xmppDomain, port);
|
super(xmppDomain, port);
|
||||||
setSASLAuthenticationEnabled(true);
|
|
||||||
ssl = false;
|
ssl = false;
|
||||||
file = "/http-bind/";
|
file = "/http-bind/";
|
||||||
}
|
}
|
||||||
|
@ -65,7 +63,6 @@ public class BOSHConfiguration extends ConnectionConfiguration {
|
||||||
*/
|
*/
|
||||||
public BOSHConfiguration(boolean https, String host, int port, String filePath, String xmppDomain) {
|
public BOSHConfiguration(boolean https, String host, int port, String filePath, String xmppDomain) {
|
||||||
super(host, port, xmppDomain);
|
super(host, port, xmppDomain);
|
||||||
setSASLAuthenticationEnabled(true);
|
|
||||||
ssl = https;
|
ssl = https;
|
||||||
file = (filePath != null ? filePath : "/");
|
file = (filePath != null ? filePath : "/");
|
||||||
}
|
}
|
||||||
|
@ -87,7 +84,6 @@ public class BOSHConfiguration extends ConnectionConfiguration {
|
||||||
*/
|
*/
|
||||||
public BOSHConfiguration(boolean https, String host, int port, String filePath, ProxyInfo proxy, String xmppDomain) {
|
public BOSHConfiguration(boolean https, String host, int port, String filePath, ProxyInfo proxy, String xmppDomain) {
|
||||||
super(host, port, xmppDomain, proxy);
|
super(host, port, xmppDomain, proxy);
|
||||||
setSASLAuthenticationEnabled(true);
|
|
||||||
ssl = https;
|
ssl = https;
|
||||||
file = (filePath != null ? filePath : "/");
|
file = (filePath != null ? filePath : "/");
|
||||||
}
|
}
|
||||||
|
|
|
@ -308,8 +308,7 @@ public class BOSHConnection extends Connection {
|
||||||
username = username.toLowerCase().trim();
|
username = username.toLowerCase().trim();
|
||||||
|
|
||||||
String response;
|
String response;
|
||||||
if (config.isSASLAuthenticationEnabled()
|
if (saslAuthentication.hasNonAnonymousAuthentication()) {
|
||||||
&& saslAuthentication.hasNonAnonymousAuthentication()) {
|
|
||||||
// Authenticate using SASL
|
// Authenticate using SASL
|
||||||
if (password != null) {
|
if (password != null) {
|
||||||
response = saslAuthentication.authenticate(username, password, resource);
|
response = saslAuthentication.authenticate(username, password, resource);
|
||||||
|
@ -317,8 +316,7 @@ public class BOSHConnection extends Connection {
|
||||||
response = saslAuthentication.authenticate(username, resource, config.getCallbackHandler());
|
response = saslAuthentication.authenticate(username, resource, config.getCallbackHandler());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Authenticate using Non-SASL
|
throw new XMPPException("No non-anonymous SASL authentication mechanism available");
|
||||||
response = new NonSASLAuthentication(this).authenticate(username, password, resource);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the user.
|
// Set the user.
|
||||||
|
@ -370,13 +368,12 @@ public class BOSHConnection extends Connection {
|
||||||
}
|
}
|
||||||
|
|
||||||
String response;
|
String response;
|
||||||
if (config.isSASLAuthenticationEnabled() &&
|
if (saslAuthentication.hasAnonymousAuthentication()) {
|
||||||
saslAuthentication.hasAnonymousAuthentication()) {
|
|
||||||
response = saslAuthentication.authenticateAnonymously();
|
response = saslAuthentication.authenticateAnonymously();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Authenticate using Non-SASL
|
// Authenticate using Non-SASL
|
||||||
response = new NonSASLAuthentication(this).authenticateAnonymously();
|
throw new XMPPException("No anonymous SASL authentication mechanism available");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the user value.
|
// Set the user value.
|
||||||
|
|
|
@ -58,7 +58,6 @@ public class ConnectionConfiguration implements Cloneable {
|
||||||
|
|
||||||
private boolean compressionEnabled = false;
|
private boolean compressionEnabled = false;
|
||||||
|
|
||||||
private boolean saslAuthenticationEnabled = true;
|
|
||||||
/**
|
/**
|
||||||
* Used to get information from the user
|
* Used to get information from the user
|
||||||
*/
|
*/
|
||||||
|
@ -367,30 +366,6 @@ public class ConnectionConfiguration implements Cloneable {
|
||||||
this.compressionEnabled = compressionEnabled;
|
this.compressionEnabled = compressionEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if the client is going to use SASL authentication when logging into the
|
|
||||||
* server. If SASL authenticatin fails then the client will try to use non-sasl authentication.
|
|
||||||
* By default SASL is enabled.
|
|
||||||
*
|
|
||||||
* @return true if the client is going to use SASL authentication when logging into the
|
|
||||||
* server.
|
|
||||||
*/
|
|
||||||
public boolean isSASLAuthenticationEnabled() {
|
|
||||||
return saslAuthenticationEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether the client will use SASL authentication when logging into the
|
|
||||||
* server. If SASL authenticatin fails then the client will try to use non-sasl authentication.
|
|
||||||
* By default, SASL is enabled.
|
|
||||||
*
|
|
||||||
* @param saslAuthenticationEnabled if the client is going to use SASL authentication when
|
|
||||||
* logging into the server.
|
|
||||||
*/
|
|
||||||
public void setSASLAuthenticationEnabled(boolean saslAuthenticationEnabled) {
|
|
||||||
this.saslAuthenticationEnabled = saslAuthenticationEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the new connection about to be establish is going to be debugged. By
|
* Returns true if the new connection about to be establish is going to be debugged. By
|
||||||
* default the value of {@link Connection#DEBUG_ENABLED} is used.
|
* default the value of {@link Connection#DEBUG_ENABLED} is used.
|
||||||
|
|
|
@ -1,102 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright 2003-2007 Jive Software.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jivesoftware.smack;
|
|
||||||
|
|
||||||
import org.jivesoftware.smack.packet.Authentication;
|
|
||||||
import org.jivesoftware.smack.packet.IQ;
|
|
||||||
import org.jivesoftware.smack.packet.Packet;
|
|
||||||
|
|
||||||
import javax.security.auth.callback.CallbackHandler;
|
|
||||||
import javax.security.auth.callback.PasswordCallback;
|
|
||||||
import javax.security.auth.callback.Callback;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation of JEP-0078: Non-SASL Authentication. Follow the following
|
|
||||||
* <a href=http://www.jabber.org/jeps/jep-0078.html>link</a> to obtain more
|
|
||||||
* information about the JEP.
|
|
||||||
*
|
|
||||||
* @author Gaston Dombiak
|
|
||||||
*/
|
|
||||||
class NonSASLAuthentication implements UserAuthentication {
|
|
||||||
|
|
||||||
private Connection connection;
|
|
||||||
|
|
||||||
public NonSASLAuthentication(Connection connection) {
|
|
||||||
super();
|
|
||||||
this.connection = connection;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String authenticate(String username, String resource, CallbackHandler cbh) throws XMPPException {
|
|
||||||
//Use the callback handler to determine the password, and continue on.
|
|
||||||
PasswordCallback pcb = new PasswordCallback("Password: ",false);
|
|
||||||
try {
|
|
||||||
cbh.handle(new Callback[]{pcb});
|
|
||||||
return authenticate(username, String.valueOf(pcb.getPassword()),resource);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new XMPPException("Unable to determine password.",e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public String authenticate(String username, String password, String resource) throws
|
|
||||||
XMPPException {
|
|
||||||
// If we send an authentication packet in "get" mode with just the username,
|
|
||||||
// the server will return the list of authentication protocols it supports.
|
|
||||||
Authentication discoveryAuth = new Authentication();
|
|
||||||
discoveryAuth.setType(IQ.Type.GET);
|
|
||||||
discoveryAuth.setUsername(username);
|
|
||||||
|
|
||||||
// Otherwise, no error so continue processing.
|
|
||||||
Authentication authTypes = (Authentication) connection.createPacketCollectorAndSend(
|
|
||||||
discoveryAuth).nextResultOrThrow();
|
|
||||||
|
|
||||||
// Now, create the authentication packet we'll send to the server.
|
|
||||||
Authentication auth = new Authentication();
|
|
||||||
auth.setUsername(username);
|
|
||||||
|
|
||||||
// Figure out if we should use digest or plain text authentication.
|
|
||||||
if (authTypes.getDigest() != null) {
|
|
||||||
auth.setDigest(connection.getConnectionID(), password);
|
|
||||||
}
|
|
||||||
else if (authTypes.getPassword() != null) {
|
|
||||||
auth.setPassword(password);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new XMPPException("Server does not support compatible authentication mechanism.");
|
|
||||||
}
|
|
||||||
|
|
||||||
auth.setResource(resource);
|
|
||||||
|
|
||||||
Packet response = connection.createPacketCollectorAndSend(auth).nextResultOrThrow();
|
|
||||||
|
|
||||||
return response.getTo();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String authenticateAnonymously() throws XMPPException {
|
|
||||||
// Create the authentication packet we'll send to the server.
|
|
||||||
Authentication auth = new Authentication();
|
|
||||||
|
|
||||||
Packet response = connection.createPacketCollectorAndSend(auth).nextResultOrThrow();
|
|
||||||
|
|
||||||
if (response.getTo() != null) {
|
|
||||||
return response.getTo();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return connection.getServiceName() + "/" + ((Authentication) response).getResource();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright 2003-2007 Jive Software.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jivesoftware.smack;
|
|
||||||
|
|
||||||
import javax.net.ssl.X509TrustManager;
|
|
||||||
import java.security.cert.CertificateException;
|
|
||||||
import java.security.cert.X509Certificate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dummy trust manager that trust all certificates presented by the server. This class
|
|
||||||
* is used during old SSL connections.
|
|
||||||
*
|
|
||||||
* @author Gaston Dombiak
|
|
||||||
*/
|
|
||||||
class OpenTrustManager implements X509TrustManager {
|
|
||||||
|
|
||||||
public OpenTrustManager() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public X509Certificate[] getAcceptedIssuers() {
|
|
||||||
return new X509Certificate[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
public void checkClientTrusted(X509Certificate[] arg0, String arg1)
|
|
||||||
throws CertificateException {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void checkServerTrusted(X509Certificate[] arg0, String arg1)
|
|
||||||
throws CertificateException {
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -56,7 +56,7 @@ import java.util.*;
|
||||||
* @author Gaston Dombiak
|
* @author Gaston Dombiak
|
||||||
* @author Jay Kline
|
* @author Jay Kline
|
||||||
*/
|
*/
|
||||||
public class SASLAuthentication implements UserAuthentication {
|
public class SASLAuthentication {
|
||||||
|
|
||||||
private static Map<String, Class<? extends SASLMechanism>> implementedMechanisms = new HashMap<String, Class<? extends SASLMechanism>>();
|
private static Map<String, Class<? extends SASLMechanism>> implementedMechanisms = new HashMap<String, Class<? extends SASLMechanism>>();
|
||||||
private static List<String> mechanismsPreferences = new ArrayList<String>();
|
private static List<String> mechanismsPreferences = new ArrayList<String>();
|
||||||
|
@ -348,24 +348,21 @@ public class SASLAuthentication implements UserAuthentication {
|
||||||
return bindResourceAndEstablishSession(resource);
|
return bindResourceAndEstablishSession(resource);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// SASL authentication failed so try a Non-SASL authentication
|
// SASL authentication failed
|
||||||
return new NonSASLAuthentication(connection)
|
throw new XMPPException("SASL authentication failed");
|
||||||
.authenticate(username, password, resource);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (XMPPException e) {
|
catch (XMPPException e) {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
e.printStackTrace();
|
// SASL authentication failed
|
||||||
// SASL authentication failed so try a Non-SASL authentication
|
throw new XMPPException("SASL authentication failed", e);
|
||||||
return new NonSASLAuthentication(connection)
|
|
||||||
.authenticate(username, password, resource);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// No SASL method was found so try a Non-SASL authentication
|
// No SASL method was found, throw an exception
|
||||||
return new NonSASLAuthentication(connection).authenticate(username, password, resource);
|
throw new XMPPException("SASL authentication not supported by server");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -413,10 +410,10 @@ public class SASLAuthentication implements UserAuthentication {
|
||||||
return bindResourceAndEstablishSession(null);
|
return bindResourceAndEstablishSession(null);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return new NonSASLAuthentication(connection).authenticateAnonymously();
|
throw new XMPPException("SASL authentication failed");
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return new NonSASLAuthentication(connection).authenticateAnonymously();
|
throw new XMPPException("IOException while anonymous SASL authentication", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,76 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright 2003-2007 Jive Software.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jivesoftware.smack;
|
|
||||||
|
|
||||||
import javax.security.auth.callback.CallbackHandler;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* There are two ways to authenticate a user with a server. Using SASL or Non-SASL
|
|
||||||
* authentication. This interface makes {@link SASLAuthentication} and
|
|
||||||
* {@link NonSASLAuthentication} polyphormic.
|
|
||||||
*
|
|
||||||
* @author Gaston Dombiak
|
|
||||||
* @author Jay Kline
|
|
||||||
*/
|
|
||||||
interface UserAuthentication {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Authenticates the user with the server. This method will return the full JID provided by
|
|
||||||
* the server. The server may assign a full JID with a username and resource different than
|
|
||||||
* requested by this method.
|
|
||||||
*
|
|
||||||
* Note that using callbacks is the prefered method of authenticating users since it allows
|
|
||||||
* more flexability in the mechanisms used.
|
|
||||||
*
|
|
||||||
* @param username the requested username (authorization ID) for authenticating to the server
|
|
||||||
* @param resource the requested resource.
|
|
||||||
* @param cbh the CallbackHandler used to obtain authentication ID, password, or other
|
|
||||||
* information
|
|
||||||
* @return the full JID provided by the server while binding a resource for the connection.
|
|
||||||
* @throws XMPPException if an error occurs while authenticating.
|
|
||||||
*/
|
|
||||||
String authenticate(String username, String resource, CallbackHandler cbh) throws
|
|
||||||
XMPPException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Authenticates the user with the server. This method will return the full JID provided by
|
|
||||||
* the server. The server may assign a full JID with a username and resource different than
|
|
||||||
* the requested by this method.
|
|
||||||
*
|
|
||||||
* It is recommended that @{link #authenticate(String, String, CallbackHandler)} be used instead
|
|
||||||
* since it provides greater flexability in authenticaiton and authorization.
|
|
||||||
*
|
|
||||||
* @param username the username that is authenticating with the server.
|
|
||||||
* @param password the password to send to the server.
|
|
||||||
* @param resource the desired resource.
|
|
||||||
* @return the full JID provided by the server while binding a resource for the connection.
|
|
||||||
* @throws XMPPException if an error occures while authenticating.
|
|
||||||
*/
|
|
||||||
String authenticate(String username, String password, String resource) throws
|
|
||||||
XMPPException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Performs an anonymous authentication with the server. The server will created a new full JID
|
|
||||||
* for this connection. An exception will be thrown if the server does not support anonymous
|
|
||||||
* authentication.
|
|
||||||
*
|
|
||||||
* @return the full JID provided by the server while binding a resource for the connection.
|
|
||||||
* @throws XMPPException if an error occures while authenticating.
|
|
||||||
*/
|
|
||||||
String authenticateAnonymously() throws XMPPException;
|
|
||||||
}
|
|
|
@ -130,7 +130,6 @@ public class XMPPConnection extends Connection {
|
||||||
// Create the configuration for this new connection
|
// Create the configuration for this new connection
|
||||||
super(new ConnectionConfiguration(serviceName));
|
super(new ConnectionConfiguration(serviceName));
|
||||||
config.setCompressionEnabled(false);
|
config.setCompressionEnabled(false);
|
||||||
config.setSASLAuthenticationEnabled(true);
|
|
||||||
config.setDebuggerEnabled(DEBUG_ENABLED);
|
config.setDebuggerEnabled(DEBUG_ENABLED);
|
||||||
config.setCallbackHandler(callbackHandler);
|
config.setCallbackHandler(callbackHandler);
|
||||||
}
|
}
|
||||||
|
@ -147,7 +146,6 @@ public class XMPPConnection extends Connection {
|
||||||
// Create the configuration for this new connection
|
// Create the configuration for this new connection
|
||||||
super(new ConnectionConfiguration(serviceName));
|
super(new ConnectionConfiguration(serviceName));
|
||||||
config.setCompressionEnabled(false);
|
config.setCompressionEnabled(false);
|
||||||
config.setSASLAuthenticationEnabled(true);
|
|
||||||
config.setDebuggerEnabled(DEBUG_ENABLED);
|
config.setDebuggerEnabled(DEBUG_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,8 +230,7 @@ public class XMPPConnection extends Connection {
|
||||||
username = username.toLowerCase().trim();
|
username = username.toLowerCase().trim();
|
||||||
|
|
||||||
String response;
|
String response;
|
||||||
if (config.isSASLAuthenticationEnabled() &&
|
if (saslAuthentication.hasNonAnonymousAuthentication()) {
|
||||||
saslAuthentication.hasNonAnonymousAuthentication()) {
|
|
||||||
// Authenticate using SASL
|
// Authenticate using SASL
|
||||||
if (password != null) {
|
if (password != null) {
|
||||||
response = saslAuthentication.authenticate(username, password, resource);
|
response = saslAuthentication.authenticate(username, password, resource);
|
||||||
|
@ -242,10 +239,8 @@ public class XMPPConnection extends Connection {
|
||||||
response = saslAuthentication
|
response = saslAuthentication
|
||||||
.authenticate(username, resource, config.getCallbackHandler());
|
.authenticate(username, resource, config.getCallbackHandler());
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
throw new XMPPException("No non-anonymous SASL authentication mechanism available");
|
||||||
// Authenticate using Non-SASL
|
|
||||||
response = new NonSASLAuthentication(this).authenticate(username, password, resource);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the user.
|
// Set the user.
|
||||||
|
@ -305,13 +300,11 @@ public class XMPPConnection extends Connection {
|
||||||
}
|
}
|
||||||
|
|
||||||
String response;
|
String response;
|
||||||
if (config.isSASLAuthenticationEnabled() &&
|
if (saslAuthentication.hasAnonymousAuthentication()) {
|
||||||
saslAuthentication.hasAnonymousAuthentication()) {
|
|
||||||
response = saslAuthentication.authenticateAnonymously();
|
response = saslAuthentication.authenticateAnonymously();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Authenticate using Non-SASL
|
throw new XMPPException("No anonymous SASL authentication mechanism available");
|
||||||
response = new NonSASLAuthentication(this).authenticateAnonymously();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the user value.
|
// Set the user value.
|
||||||
|
|
Loading…
Reference in a new issue