User interface update
[qtmeetings] / src / IO / Communication / Communication.cpp
index 82b847e..04a26e2 100644 (file)
@@ -1,15 +1,16 @@
 #include "Communication.h"
 #include "ConnectionSettings.h"
 #include <QAuthenticator>
+#include "Configuration.h"
+#include <QDebug>
 
-Communication::Communication( const ConnectionSettings &aConnection ) :
+
+Communication::Communication() :
        iCurrentRequest(0),
        iAuthFailCount(0)
 {
-       iConnectionSettings = new ConnectionSettings( aConnection );
+       iHttp = new QHttp(Configuration::instance()->getServerUrl().toString()/*Configuration::instance()->getServerUrl().toString()*/, QHttp::ConnectionModeHttps );
 
-       iHttp = new QHttp( iConnectionSettings->serverUrl().toString(), QHttp::ConnectionModeHttps );
-       iResponse = new QByteArray();
 
        connect( iHttp,
                         SIGNAL( readyRead( const QHttpResponseHeader& ) ),
@@ -40,45 +41,57 @@ Communication::Communication( const ConnectionSettings &aConnection ) :
                         iHttp,
                         SLOT( ignoreSslErrors() )/*this, SLOT( notifySsl( const QList<QSslError>& ) )*/
                        );
+       connect(Configuration::instance(),SIGNAL(configrationChanged()), SLOT(configurationChanged()));
 }
 
 Communication::~Communication()
 {
-       delete iConnectionSettings;
+       //delete iConnectionSettings;
        delete iHttp;
-       delete iResponse;
+       QList<QByteArray*> responses = iResponses.values();
+       while(!responses.isEmpty())
+               delete responses.takeFirst();
 }
 
 void Communication::processResponse( const QHttpResponseHeader& aHeader )
 {
        if ( aHeader.statusCode() == 200 )
        {
-               iResponse->append( iHttp->readAll() );
+               if( iResponses.contains( iCurrentRequest ) )
+               {
+                       QByteArray* response = iResponses.value( iCurrentRequest, NULL );
+                       response->append( iHttp->readAll() );
+               }
        }
 }
 
 void Communication::handleRequestStarted( int aRequestId )
 {
-       if( aRequestId != 0 && iCurrentRequest != 0 &&
-           aRequestId == iCurrentRequest )
+       if( iResponses.contains( aRequestId ) )
        {
-               emit requestStarted( iCurrentRequest ); 
+               iCurrentRequest = aRequestId;
+               emit requestStarted( aRequestId );      
        }
 }
 
 void Communication::handleResults( int aId, bool /*aError*/ )
 {
-       if( aId == iCurrentRequest )
+       if( iCurrentRequest != 0 && aId == iCurrentRequest )
        {
+               iAuthFailCount = 0;
                iCurrentRequest = 0;
-               emit requestFinished( aId, iHttp->error() );
+               int err = (int)iHttp->error();
+               if( iHttp->error() == QHttp::Aborted && iAuthFailCount > 1 )
+                       err = 11;
+               emit requestFinished( aId, err );
        }
 }
 
 void Communication::handleAuthentication( const QString& /*aHost*/, quint16 /*aPort*/, QAuthenticator* aAuthenticator )
 {
-       aAuthenticator->setPassword( iConnectionSettings->password() );
-       aAuthenticator->setUser( iConnectionSettings->username() );
+
+       aAuthenticator->setPassword( Configuration::instance()->getPassword() );
+       aAuthenticator->setUser( Configuration::instance()->getUsername() );
        iAuthFailCount++;
        if( iAuthFailCount > 1 )
        {
@@ -88,27 +101,45 @@ void Communication::handleAuthentication( const QString& /*aHost*/, quint16 /*aP
 
 int Communication::request( const QString &aCommand, const QByteArray &aContent )
 {
-       //TODO: This is just temporarily here to implement multiple request support     
-       if( iCurrentRequest )
+       if( iAuthFailCount > 1 )
                return 0;
+
+       iHttp->setHost(Configuration::instance()->getServerUrl().toString(),QHttp::ConnectionModeHttps);
        QHttpRequestHeader header( QString( "POST" ), QString( "/ews/exchange.asmx" ) );
-       header.setValue( "Host", iConnectionSettings->serverUrl().toString() );
+
+       header.setValue( "Host",Configuration::instance()->getServerUrl().toString() );
+
        QString command = aCommand;
        header.setContentType( command );
 
-       iAuthFailCount = 0;
-       iResponse->clear();
-       iCurrentRequest = iHttp->request( header, aContent );
+       int id = iHttp->request( header, aContent );
+       if( iResponses.contains( id ) )
+       {
+               QByteArray* response = iResponses.value( id, NULL );
+               response->clear();
+       }
+       else
+       {
+               iResponses.insert( id, new QByteArray() );
+       }
        
-       return iCurrentRequest;
+       return id;
 }
 
-const QByteArray& Communication::response( int /*aRequestId*/ )
+QByteArray* Communication::response( int aRequestId )
 {
-       return *iResponse;
+       if( !iResponses.contains( aRequestId ) )
+               return NULL;
+       QByteArray* response = iResponses.take( aRequestId );
+       return response;
 }
 
 void Communication::handleReadProgress( int aDone, int aTotal )
 {
        emit readProgress( iCurrentRequest, aDone, aTotal );
 }
+
+void Communication::configurationChanged()
+{
+       iHttp->setHost(Configuration::instance()->getServerUrl().toString(),QHttp::ConnectionModeHttps );
+}