void qws_write_command(QIODevice *socket, int type, char *simpleData, int simpleLen,
                       char *rawData, int rawLen)
{
#ifdef QWSCOMMAND_DEBUG
    if (simpleLen) qDebug() << "WRITE simpleData " << QWSHexDump(simpleData, simpleLen);
    if (rawLen > 0) qDebug() << "WRITE rawData " << QWSHexDump(rawData, rawLen);
#endif

#ifndef QT_NO_SXE
    QTransportAuth *a = QTransportAuth::getInstance();
    // ###### as soon as public API can be modified get rid of horrible casts
    QIODevice *ad = a->passThroughByClient(reinterpret_cast<QWSClient*>(socket));
    if (ad)
        socket = ad;
#endif

    qws_write_uint(socket, type);

    if (rawLen > MAX_COMMAND_SIZE) {
        qWarning("qws_write_command: Message of size %d too big. "
                 "Truncated to %d", rawLen, MAX_COMMAND_SIZE);
        rawLen = MAX_COMMAND_SIZE;
    }

    qws_write_uint(socket, rawLen == -1 ? 0 : rawLen);

    if (simpleData && simpleLen)
        socket->write(simpleData, simpleLen);

    if (rawLen && rawData)
        socket->write(rawData, rawLen);
}
void wrapInFunction()
{

//! [0]
QTransportAuth::Data *conData;
QTransportAuth *a = QTransportAuth::getInstance();

conData = a->connectTransport(
    QTransportAuth::Trusted | QTransportAuth::UnixStreamSock,
    socketDescriptor );
//! [0]


//! [1]
// mySocket can be any QIODevice subclass
AuthDevice *ad = a->recvBuf( d, mySocket );

// proxy in the auth device where the socket would have gone
connect( ad, SIGNAL(readyRead()), this, SLOT(mySocketReadyRead()));
//! [1]


//! [2]
AuthDevice *ad = a->authBuf( d, mySocket );

ad->write( someData );
//! [2]


//! [3]
policyCheck( QTransportAuth::Data &, const QString & )
//! [3]


//! [4]
QTransportAuth::Result r = d.status & QTransportAuth::ErrMask;
qWarning( "error: %s", QTransportAuth::errorStrings[r] );
//! [4]


//! [5]
MD5(K XOR opad, MD5(K XOR ipad, text))
//! [5]

}
void QCopX11Server::incomingConnection( int socketDescriptor )
{
    QUnixSocket * sock = new QUnixSocket;
    sock->setSocketDescriptor(socketDescriptor);

    QCopX11Client *client;
#ifndef QT_NO_SXE
    QTransportAuth *a = QTransportAuth::getInstance();
    QTransportAuth::Data *d = a->connectTransport(
            QTransportAuth::UnixStreamSock |
            QTransportAuth::Trusted, sock->socketDescriptor() );
    QAuthDevice *ad = a->recvBuf( d, sock );
    ad->setRequestAnalyzer( new QCopRequestAnalyzer() );
    ad->setClient(sock);
    client = new QCopX11Client(ad, sock);
#else
    client = new QCopX11Client(sock, sock);
#endif
    sock->setParent(client);
}
void QCopX11Client::connectToServer()
{
    if ( !socket )  {
        // We are retrying the socket connection.
        socket = new QUnixSocket( this );
        device = socket;
    }

    if ( socket->connect( qcopSocketPath() ) ) {
        connecting = false;
#ifndef QT_NO_SXE
        QTransportAuth * a = QTransportAuth::getInstance();
        QTransportAuth::Data * d = a->connectTransport(
                QTransportAuth::UnixStreamSock |
                QTransportAuth::Trusted,
                socket->socketDescriptor());
        QAuthDevice *dev = a->authBuf( d, socket );
        dev->setClient( socket );
        device = dev;
#else
        device = socket;
#endif
        connectSignals();
        if ( pendingData.size() > 0 ) {
            device->write( pendingData.constData(), pendingData.size() );
            pendingData = QByteArray();
        }
    } else {
        connecting = false;
        delete socket;
        socket = 0;
        device = 0;
        if ( ++retryCount < 30 )
            QTimer::singleShot( 200, this, SLOT(connectToServer()) );
        else
            qWarning() << "Could not connect to QCop server; probably not running.";
    }
}