if(supportClientSendFirst) r = sasl_client_start(con, list.latin1(), &need, &clientout, &clientoutlen, &m); else r = sasl_client_start(con, list.latin1(), &need, NULL, NULL, &m); if(r == SASL_INTERACT) {
while(1) { if(supportClientSendFirst) r = sasl_client_start(con, list.latin1(), &need, &clientout, &clientoutlen, &m); else r = sasl_client_start(con, list.latin1(), &need, NULL, NULL, &m); if(r != SASL_INTERACT) break;
	int clientFirstStep(QString *mech, QByteArray **out, QCA_SASLNeedParams *np)	{		clearNeedParams(np);		bool supportClientSendFirst = true;		const char *clientout, *m;		unsigned int clientoutlen;		need = 0;		QString list = methodsToString(mechlist);		int r;		if(supportClientSendFirst)			r = sasl_client_start(con, list.latin1(), &need, &clientout, &clientoutlen, &m);		else			r = sasl_client_start(con, list.latin1(), &need, NULL, NULL, &m);		if(r == SASL_INTERACT) {			*np = interactToNeedParams(need);			return NeedParams;		}		else if(r != SASL_OK && r != SASL_CONTINUE)			return Error;		*mech = m;		if(supportClientSendFirst && clientout)			*out = new QByteArray(makeByteArray(clientout, clientoutlen));		else			*out = 0;		if(r == SASL_OK)			return Success;		else			return Continue;	}