#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& ) ),
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 )
{
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 );
+}