Currently, QNAM stalls when authentication is required (also see: https://bugreports.qt-project.org/browse/QTBUG-16251). Also, the connection between the authenticationRequired signal and the slot must be a direct connection. This is problematic when an application wants to show a login dialogbox for instance.
I propose to change this implementation by using a delegate authenticator instead. class QAuthenticator { … protected Q_SLOTS: //this method should be called asynchronously from QNAM void authenticate(QNetworkReply *reply) { if (doAuthenticate(reply)) Q_EMIT authenticated(); else Q_EMIT authenticationFailed(); } ... protected: //return false if the request should be stopped (authentication denied) //return true if authentication should continue virtual bool doAuthenticate(QNetworkReply *reply) = 0; ... } //example use class MyAuthenticator: public QAuthenticator { bool doAuthenticate(QNetworkReply *reply) { setUser(); setPassword(); setOption(); //whatever is required return true; } } The QNetworkRequest class would be extended with a setAuthenticator() method, as follows: class QNetworkRequest { ... void setAuthenticator(QAuthenticator *authenticator); ... } Usage: MyAuthenticator *auth = new MyAuthenticator; networkRequest.setAuthenticator(auth); Another option is to add the setAuthenticator() method to the QNAM class. When this would be implemented, the authenticationRequired() signal would become obsolete. What are your opinions on this? Note: QWebSocketServer uses the same blocking signal for CORS authentication (this was merely done to be inline with the QNAM way of working). Cheers, Kurt
_______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development