Example #1
0
 private final void authenticate() throws SmackException, NotConnectedException {
   byte[] authenticationBytes = getAuthenticationText();
   String authenticationText;
   // Some SASL mechanisms do return an empty array (e.g. EXTERNAL from javax), so check that
   // the array is not-empty. Mechanisms are allowed to return either 'null' or an empty array
   // if there is no authentication text.
   if (authenticationBytes != null && authenticationBytes.length > 0) {
     authenticationText = Base64.encodeToString(authenticationBytes);
   } else {
     // RFC6120 6.4.2 "If the initiating entity needs to send a zero-length initial response,
     // it MUST transmit the response as a single equals sign character ("="), which
     // indicates that the response is present but contains no data."
     authenticationText = "=";
   }
   // Send the authentication to the server
   connection.send(new AuthMechanism(getName(), authenticationText));
 }
Example #2
0
  /**
   * The server is challenging the SASL mechanism for the stanza he just sent. Send a response to
   * the server's challenge.
   *
   * @param challengeString a base64 encoded string representing the challenge.
   * @param finalChallenge true if this is the last challenge send by the server within the success
   *     stanza
   * @throws NotConnectedException
   * @throws SmackException
   */
  public final void challengeReceived(String challengeString, boolean finalChallenge)
      throws SmackException, NotConnectedException {
    byte[] challenge = Base64.decode(challengeString);
    byte[] response = evaluateChallenge(challenge);
    if (finalChallenge) {
      return;
    }

    Response responseStanza;
    if (response == null) {
      responseStanza = new Response();
    } else {
      responseStanza = new Response(Base64.encodeToString(response));
    }

    // Send the authentication to the server
    connection.send(responseStanza);
  }