code: function (elem)
      {
          // save stream:features for future usage
          this.features = elem;
  
          var i, child;
  
          for (i = 0; i < elem.childNodes.length; i++) {
              child = elem.childNodes[i];
              if (child.nodeName == 'bind') {
                  this.do_bind = true;
              }
  
              if (child.nodeName == 'session') {
                  this.do_session = true;
              }
          }
  
          if (!this.do_bind) {
              this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);
              return false;
          } else {
              this._addSysHandler(this._sasl_bind_cb.bind(this), null, null,
                                  null, "_bind_auth_2");
  
              var resource = Strophe.getResourceFromJid(this.jid);
              if (resource) {
                  this.send($iq({type: "set", id: "_bind_auth_2"})
                            .c('bind', {xmlns: Strophe.NS.BIND})
                            .c('resource', {}).t(resource).tree());
              } else {
                  this.send($iq({type: "set", id: "_bind_auth_2"})
                            .c('bind', {xmlns: Strophe.NS.BIND})
                            .tree());
              }
          }
  
          return false;
      }
docs: PrivateFunction: _sasl_auth1_cb
  _Private_ handler to start stream binding.
  
  Parameters:
  (XMLElement) elem - The matching stanza.
  
  Returns:
  false to remove the handler.