summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/oscar/liboscar/logintask.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/protocols/oscar/liboscar/logintask.cpp')
-rw-r--r--kopete/protocols/oscar/liboscar/logintask.cpp52
1 files changed, 43 insertions, 9 deletions
diff --git a/kopete/protocols/oscar/liboscar/logintask.cpp b/kopete/protocols/oscar/liboscar/logintask.cpp
index c3d568f9..73379e40 100644
--- a/kopete/protocols/oscar/liboscar/logintask.cpp
+++ b/kopete/protocols/oscar/liboscar/logintask.cpp
@@ -1,6 +1,6 @@
/*
Kopete Oscar Protocol
- logintask.cpp - Handles logging into to the ICQ service
+ logintask.cpp - Handles logging into to the AIM or ICQ service
Copyright (c) 2004 Matt Rogers <mattr@kde.org>
@@ -22,6 +22,7 @@
#include <kdebug.h>
#include <tdelocale.h>
+#include "aimlogintask.h"
#include "connection.h"
#include "closeconnectiontask.h"
#include "icqlogintask.h"
@@ -39,26 +40,49 @@
StageOneLoginTask::StageOneLoginTask( Task* parent )
: Task ( parent )
{
+ m_aimTask = 0L;
m_icqTask = 0L;
m_closeTask = 0L;
}
StageOneLoginTask::~StageOneLoginTask()
{
+ delete m_aimTask;
delete m_icqTask;
delete m_closeTask;
}
bool StageOneLoginTask::take( Transfer* transfer )
{
- if ( forMe( transfer ) ) {
- kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Starting ICQ login" << endl;
- m_icqTask = new IcqLoginTask( client()->rootTask() );
- m_closeTask = new CloseConnectionTask( client()->rootTask() );
-
- //connect finished signal
- connect( m_closeTask, TQT_SIGNAL( finished() ), this, TQT_SLOT( closeTaskFinished() ) );
- m_icqTask->go( true );
+ if ( forMe( transfer ) )
+ {
+ if ( client()->isIcq() )
+ {
+ kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Starting ICQ login" << endl;
+ m_icqTask = new IcqLoginTask( client()->rootTask() );
+ m_closeTask = new CloseConnectionTask( client()->rootTask() );
+
+ //connect finished signal
+ connect( m_closeTask, TQT_SIGNAL( finished() ), this, TQT_SLOT( closeTaskFinished() ) );
+ m_icqTask->go( true );
+ }
+ else
+ {
+ kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Starting AIM login" << endl;
+ kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Sending the FLAP version back" << endl;
+
+ //send the flap version response
+ FLAP f = { 0x01, 0 , 0 };
+ Buffer *outbuf = new Buffer;
+ outbuf->addDWord(0x00000001); //flap version
+ f.length = outbuf->length();
+ Transfer* ft = createTransfer( f, outbuf );
+ send( ft );
+
+ m_aimTask = new AimLoginTask( client()->rootTask() );
+ connect( m_aimTask, TQT_SIGNAL( finished() ), this, TQT_SLOT( aimTaskFinished() ) );
+ m_aimTask->go( true );
+ }
return true;
}
return false;
@@ -74,6 +98,16 @@ void StageOneLoginTask::closeTaskFinished()
setSuccess( m_closeTask->statusCode(), m_closeTask->statusString() );
}
+void StageOneLoginTask::aimTaskFinished()
+{
+ kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << endl;
+ m_cookie = m_aimTask->cookie();
+ m_bosPort = m_aimTask->bosPort();
+ m_bosServer = m_aimTask->bosHost();
+
+ setSuccess( m_aimTask->statusCode(), m_aimTask->statusString() );
+}
+
bool StageOneLoginTask::forMe( Transfer* transfer ) const
{
FlapTransfer* ft = dynamic_cast<FlapTransfer*> ( transfer );