code: public void challengeReceived(String challenge, boolean finalChallenge) throws SmackSaslException, NotConnectedException, InterruptedException {
          try {
              currentMechanism.challengeReceived(challenge, finalChallenge);
          } catch (InterruptedException | SmackSaslException | NotConnectedException e) {
              authenticationFailed(e);
              throw e;
          }
      }
docs: The server is challenging the SASL authentication we just sent. Forward the challenge
  to the current SASLMechanism we are using. The SASLMechanism will eventually send a response to
  the server. The length of the challenge-response sequence varies according to the
  SASLMechanism in use.
  
  @param challenge 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 SmackSaslException
  @throws NotConnectedException
  @throws InterruptedException