rfbCredential *VncClientThread::credentialHandler(rfbClient *cl, int credentialType)
{
    kDebug(5011) << "credential request" << credentialType;

    VncClientThread *t = (VncClientThread*)rfbClientGetClientData(cl, 0);
    Q_ASSERT(t);

    rfbCredential *cred = 0;

    switch (credentialType) {
        case rfbCredentialTypeUser:
            t->passwordRequest(true);
            t->m_passwordError = true;

            cred = new rfbCredential;
            cred->userCredential.username = strdup(t->username().toUtf8());
            cred->userCredential.password = strdup(t->password().toUtf8());
            break;
        default:
            kError(5011) << "credential request failed, unspported credentialType:" << credentialType;
            t->outputErrorMessage(i18n("VNC authentication type is not supported."));
            break;
    }
    return cred;
}
char *VncClientThread::passwdHandler(rfbClient *cl)
{
    kDebug(5011) << "password request";

    VncClientThread *t = (VncClientThread*)rfbClientGetClientData(cl, 0);
    Q_ASSERT(t);

    t->passwordRequest();
    t->m_passwordError = true;

    return strdup(t->password().toUtf8());
}
char *VncClientThread::passwdHandler(rfbClient *cl)
{
    kDebug(5011) << "password request" << kBacktrace();

    VncClientThread *t = static_cast<VncClientThread*>(rfbClientGetClientData(cl, 0));
    Q_ASSERT(t);

    t->m_passwordError = true;
    t->passwordRequest();

    return strdup(t->password().toLocal8Bit());
}