LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File kopete-3.5.10-ym_protocol_back_on_track.patch of Package kdenetwork3 (Project openSUSE:Factory)

diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/changestatustask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/changestatustask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/changestatustask.cpp	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/changestatustask.cpp	2010-01-18 17:22:57.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Change our Status
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005-2006 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -19,12 +19,12 @@
 #include "ymsgtransfer.h"
 #include "yahootypes.h"
 #include "client.h"
-#include <qstring.h>
+
 #include <kdebug.h>
 
 ChangeStatusTask::ChangeStatusTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 ChangeStatusTask::~ChangeStatusTask()
@@ -33,7 +33,7 @@
 
 void ChangeStatusTask::onGo()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	if( m_status == Yahoo::StatusInvisible )			// status --> Invisible
 	{
@@ -52,13 +52,13 @@
 		t->setParam( 10, m_status );
 		t->setParam( 47, m_type );
 		t->setParam( 97, 1 );	// it's utf8
-			
+
 		send( t );
 
 		if( client()->status() == Yahoo::StatusInvisible )	// Invisible --> Status
 			sendVisibility( Visible );
 	}
-	setSuccess( true );
+	setSuccess();
 }
 
 void ChangeStatusTask::sendVisibility( Visibility visible )
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/changestatustask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/changestatustask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/changestatustask.h	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/changestatustask.h	2010-01-18 17:19:27.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Change our Status
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -32,7 +32,7 @@
 	enum Type { Available, Away };
 	ChangeStatusTask(Task *parent);
 	~ChangeStatusTask();
-	
+
 	virtual void onGo();
 
 	void setMessage( const QString &msg );
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/chatsessiontask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/chatsessiontask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/chatsessiontask.cpp	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/chatsessiontask.cpp	2010-01-19 15:39:41.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     chatsessiontask.cpp - Register / Unregister a chatsession
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
 
     Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
 
@@ -26,7 +26,7 @@
 
 ChatSessionTask::ChatSessionTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 }
 
 ChatSessionTask::~ChatSessionTask()
@@ -35,7 +35,7 @@
 
 void ChatSessionTask::onGo()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
 	YMSGTransfer *t = new YMSGTransfer( Yahoo::ServiceChatSession );
 	t->setId( client()->sessionID() );
@@ -52,7 +52,7 @@
 	}
 	send( t );
 	
-	setSuccess( true );
+	setSuccess();
 }
 
 void ChatSessionTask::setTarget( const QString &to )
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/chatsessiontask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/chatsessiontask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/chatsessiontask.h	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/chatsessiontask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     chatsessiontask.h - Register / Unregister a chatsession
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
 
     Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/client.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/client.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/client.cpp	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/client.cpp	2010-01-19 02:10:07.000000000 +0200
@@ -1,14 +1,14 @@
 /*
     Kopete Yahoo Protocol
-    
-    Copyright (c) 2005-2006 André Duffeck <andre.duffeck@kdemail.net>
+
+    Copyright (c) 2005-2006 André Duffeck <duffeck@kde.org>
     Copyright (c) 2004 Duncan Mac-Vicar P. <duncan@kde.org>
     Copyright (c) 2004 Matt Rogers <matt.rogers@kdemail.net>
     Copyright (c) 2004 SuSE Linux AG <http://www.suse.com>
-    Copyright (C) 2003  Justin Karneges
-    
+    Copyright (C) 2003  Justin Karneges <justin@affinix.com>
+
     Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
- 
+
     *************************************************************************
     *                                                                       *
     * This library is free software; you can redistribute it and/or         *
@@ -20,9 +20,9 @@
 */
 
 #include <qtimer.h>
+#include <qpixmap.h>
 
 #include <kdebug.h>
-#include <kurl.h>
 #include <ksocketbase.h>
 
 #include "yahooclientstream.h"
@@ -52,6 +52,7 @@
 #include "sendfiletask.h"
 #include "filetransfernotifiertask.h"
 #include "receivefiletask.h"
+#include "yahoochattask.h"
 #include "client.h"
 #include "yahootypes.h"
 #include "yahoobuddyiconloader.h"
@@ -73,7 +74,7 @@
 	int error;
 	QString errorString;
 	QString errorInformation;
-	
+
 	// tasks
 	bool tasksInitialized;
 	LoginTask * loginTask;
@@ -86,6 +87,8 @@
 	ConferenceTask *conferenceTask;
 	YABTask *yabTask;
 	FileTransferNotifierTask *fileTransferTask;
+	YahooChatTask *yahooChatTask;
+	ReceiveFileTask *receiveFileTask;
 
 	// Connection data
 	uint sessionID;
@@ -95,10 +98,13 @@
 	Yahoo::Status status;
 	Yahoo::Status statusOnConnect;
 	QString statusMessageOnConnect;
-	int pictureFlag;
+	Yahoo::PictureStatus pictureFlag;
+	int pictureChecksum;
+	bool buddyListReady;
+	QStringList pictureRequestQueue;
 };
 
-Client::Client(QObject *par) :QObject(par, "yahooclient" )
+Client::Client(QObject *par) :QObject(par, "yahooclient")
 {
 	d = new ClientPrivate;
 /*	d->tzoffset = 0;*/
@@ -112,19 +118,21 @@
 	d->iconLoader = 0L;
 	d->loginTask = new LoginTask( d->root );
 	d->listTask = new ListTask( d->root );
-	d->pictureFlag = 0;
+	d->pictureFlag = Yahoo::NoPicture;
+	d->buddyListReady = false;
 	m_connector = 0L;
 
 	m_pingTimer = new QTimer( this );
 	QObject::connect( m_pingTimer, SIGNAL( timeout() ), this, SLOT( sendPing() ) );
 
 	QObject::connect( d->loginTask, SIGNAL( haveSessionID( uint ) ), SLOT( lt_gotSessionID( uint ) ) );
-	QObject::connect( d->loginTask, SIGNAL( loginResponse( int, const QString& ) ), 
+	QObject::connect( d->loginTask, SIGNAL( buddyListReady() ), SLOT( processPictureQueue() ) );
+	QObject::connect( d->loginTask, SIGNAL( loginResponse( int, const QString& ) ),
 				SLOT( slotLoginResponse( int, const QString& ) ) );
 	QObject::connect( d->loginTask, SIGNAL( haveCookies() ), SLOT( slotGotCookies() ) );
-	QObject::connect( d->listTask, SIGNAL( gotBuddy(const QString &, const QString &, const QString &) ), 
+	QObject::connect( d->listTask, SIGNAL( gotBuddy(const QString &, const QString &, const QString &) ),
 					SIGNAL( gotBuddy(const QString &, const QString &, const QString &) ) );
-	QObject::connect( d->listTask, SIGNAL( stealthStatusChanged( const QString&, Yahoo::StealthStatus ) ), 
+	QObject::connect( d->listTask, SIGNAL( stealthStatusChanged( const QString&, Yahoo::StealthStatus ) ),
 					SIGNAL( stealthStatusChanged( const QString&, Yahoo::StealthStatus ) ) );
 }
 
@@ -138,7 +146,7 @@
 
 void Client::connect( const QString &host, const uint port, const QString &userId, const QString &pass )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	d->host = host;
 	d->port = port;
 	d->user = userId;
@@ -151,7 +159,8 @@
 	QObject::connect( d->stream, SIGNAL( connected() ), this, SLOT( cs_connected() ) );
 	QObject::connect( d->stream, SIGNAL( error(int) ), this, SLOT( streamError(int) ) );
 	QObject::connect( d->stream, SIGNAL( readyRead() ), this, SLOT( streamReadyRead() ) );
-	
+	QObject::connect( d->stream, SIGNAL( connectionClosed() ), this, SLOT( streamDisconnected() ) );
+
 	d->stream->connectToServer( host, false );
 }
 
@@ -162,9 +171,9 @@
 
 void Client::cs_connected()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	emit connected();
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " starting login task ... "<<  endl;
+	kdDebug(YAHOO_RAW_DEBUG) << " starting login task ... " << endl;
 
 	d->loginTask->setStateOnConnect( (d->statusOnConnect == Yahoo::StatusInvisible) ? Yahoo::StatusInvisible : Yahoo::StatusAvailable );
 	d->loginTask->go();
@@ -173,7 +182,7 @@
 
 void Client::close()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	m_pingTimer->stop();
 	if( d->active )
 	{
@@ -181,7 +190,7 @@
 		lt->go( true );
 	}
 	if( d->tasksInitialized)
-		deleteTasks();	
+		deleteTasks();
 	d->loginTask->reset();
 	if( d->stream ) {
 		QObject::disconnect( d->stream, SIGNAL( readyRead() ), this, SLOT( streamReadyRead() ) );
@@ -191,6 +200,8 @@
 	if( m_connector )
 		m_connector->deleteLater();
 	m_connector = 0L;
+	d->active = false;
+	d->buddyListReady = false;
 }
 
 int Client::error()
@@ -211,18 +222,18 @@
 // SLOTS //
 void Client::streamError( int error )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "CLIENT ERROR (Error " <<  error << ")" << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "CLIENT ERROR (Error " <<  error << ")" << endl;
 	QString msg;
 
 	d->active = false;
 
 	// Examine error
-	if( error == ClientStream::ErrConnection )			// Ask Connector in this case
+	if( error == ClientStream::ErrConnection && m_connector )			// Ask Connector in this case
 	{
 		d->error = m_connector->errorCode();
 		d->errorString = KSocketBase::errorString( (KSocketBase::SocketError)d->error );
 	}
-	else
+	else if( d->stream )
 	{
 		d->error = error;
 		d->errorString = d->stream->errorText();
@@ -241,9 +252,15 @@
 	distribute( transfer );
 }
 
+void Client::streamDisconnected()
+{
+	d->active = false;
+	emit disconnected();
+}
+
 void Client::lt_loginFinished()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
 	slotLoginResponse( d->loginTask->statusCode(), d->loginTask->statusString() );
 }
@@ -258,26 +275,27 @@
 			changeStatus( d->statusOnConnect, d->statusMessageOnConnect, Yahoo::StatusTypeAway );
 		d->statusMessageOnConnect = QString::null;
 		setStatus( d->statusOnConnect );
-		m_pingTimer->start( 60 * 1000 );
+		/* only send a ping every hour. we get disconnected otherwise */
+		m_pingTimer->start( 60 * 60 * 1000 );
 		initTasks();
 	} else {
 		d->active = false;
 		close();
 	}
 
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Emitting loggedIn" << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "Emitting loggedIn" << endl;
 	emit loggedIn( response, msg );
 }
 
 void Client::lt_gotSessionID( uint id )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Got SessionID: " << id << endl;	
+	kdDebug(YAHOO_RAW_DEBUG) << "Got SessionID: " << id << endl;
 	d->sessionID = id;
 }
 
 void Client::slotGotCookies()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Y: " << d->loginTask->yCookie()
+	kdDebug(YAHOO_RAW_DEBUG) << "Y: " << d->loginTask->yCookie()
 					<< " T: " << d->loginTask->tCookie()
 					<< " C: " << d->loginTask->cCookie() << endl;
 	d->yCookie = d->loginTask->yCookie();
@@ -388,17 +406,17 @@
 
 void Client::changeStatus( Yahoo::Status status, const QString &message, Yahoo::StatusType type )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "status: " << status
+	kdDebug(YAHOO_RAW_DEBUG) << "status: " << status
 					<< " message: " << message
-					<< " type: " << type << endl;	
+					<< " type: " << type << endl;
 	ChangeStatusTask *cst = new ChangeStatusTask( d->root );
 	cst->setStatus( status );
 	cst->setMessage( message );
 	cst->setType( type );
 	cst->go( true );
-	
+
 	if( status == Yahoo::StatusInvisible )
-		stealthContact( QString::null, Yahoo::StealthOnline, Yahoo::StealthClear );
+		stealthContact( QString(), Yahoo::StealthOnline, Yahoo::StealthClear );
 
 	setStatus( status );
 }
@@ -416,10 +434,10 @@
 {
 	if( !d->active )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Disconnected. NOT sending a PING." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Disconnected. NOT sending a PING." << endl;
 		return;
 	}
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Sending a PING." << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "Sending a PING." << endl;
 	PingTask *pt = new PingTask( d->root );
 	pt->go( true );
 }
@@ -438,6 +456,10 @@
 void Client::addBuddy( const QString &userId, const QString &group, const QString &message )
 {
 	ModifyBuddyTask *mbt = new ModifyBuddyTask( d->root );
+
+	QObject::connect(mbt, SIGNAL(buddyAddResult( const QString &, const QString &, bool )),
+			 SIGNAL(buddyAddResult( const QString &, const QString &, bool)));
+
 	mbt->setType( ModifyBuddyTask::AddBuddy );
 	mbt->setTarget( userId );
 	mbt->setGroup( group );
@@ -448,6 +470,10 @@
 void Client::removeBuddy( const QString &userId, const QString &group )
 {
 	ModifyBuddyTask *mbt = new ModifyBuddyTask( d->root );
+
+	QObject::connect(mbt, SIGNAL(buddyRemoveResult( const QString &, const QString &, bool )),
+			 SIGNAL(buddyRemoveResult( const QString &, const QString &, bool)));
+
 	mbt->setType( ModifyBuddyTask::RemoveBuddy );
 	mbt->setTarget( userId );
 	mbt->setGroup( group );
@@ -457,6 +483,10 @@
 void Client::moveBuddy( const QString &userId, const QString &oldGroup, const QString &newGroup )
 {
 	ModifyBuddyTask *mbt = new ModifyBuddyTask( d->root );
+
+	QObject::connect(mbt, SIGNAL(buddyChangeGroupResult( const QString &, const QString &, bool )),
+			 SIGNAL(buddyChangeGroupResult( const QString &, const QString &, bool)));
+
 	mbt->setType( ModifyBuddyTask::MoveBuddy );
 	mbt->setTarget( userId );
 	mbt->setOldGroup( oldGroup );
@@ -466,8 +496,33 @@
 
 // ***** Buddyicon handling *****
 
+void Client::processPictureQueue()
+{
+	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	d->buddyListReady = true;
+	if( d->pictureRequestQueue.isEmpty() )
+	{
+		return;
+	}
+
+	requestPicture( d->pictureRequestQueue.front() );
+	d->pictureRequestQueue.pop_front();
+
+
+	if( !d->pictureRequestQueue.isEmpty() )
+	{
+		QTimer::singleShot( 1000, this, SLOT(processPictureQueue()) );
+	}
+}
+
 void Client::requestPicture( const QString &userId )
 {
+	if( !d->buddyListReady )
+	{
+		d->pictureRequestQueue << userId;
+		return;
+	}
+
 	RequestPictureTask *rpt = new RequestPictureTask( d->root );
 	rpt->setTarget( userId );
 	rpt->go( true );
@@ -478,8 +533,8 @@
 	if( !d->iconLoader )
 	{
 		d->iconLoader = new YahooBuddyIconLoader( this );
-		QObject::connect( d->iconLoader, SIGNAL(fetchedBuddyIcon(const QString&, KTempFile*, int )),
-				SIGNAL(pictureDownloaded(const QString&, KTempFile*,  int ) ) );
+		QObject::connect( d->iconLoader, SIGNAL(fetchedBuddyIcon(const QString&, const QByteArray &, int )),
+				SIGNAL(pictureDownloaded(const QString&, const QByteArray &,  int ) ) );
 	}
 
 	d->iconLoader->fetchBuddyIcon( QString(userId), KURL(url), checksum );
@@ -487,32 +542,31 @@
 
 void Client::uploadPicture( KURL url )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "URL: " << url.url() << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "URL: " << url.url() << endl;
 	SendPictureTask *spt = new SendPictureTask( d->root );
 	spt->setType( SendPictureTask::UploadPicture );
 	spt->setFilename( url.fileName() );
 	if ( url.isLocalFile() )
-		spt->setPath( url.path() );
+		spt->setPath( url.path() ); // FIXME: to test if is what we want
 	else
 		spt->setPath( url.url() );
-	d->pictureFlag = 2;
 	spt->go( true );
 }
 
-void Client::sendPictureChecksum( int checksum, const QString &who )
+void Client::sendPictureChecksum( const QString &userId, int checksum )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "checksum: " << checksum << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "checksum: " << checksum << endl;
 	SendPictureTask *spt = new SendPictureTask( d->root );
 	spt->setType( SendPictureTask::SendChecksum );
 	spt->setChecksum( checksum );
-	if( !who.isEmpty() )
-		spt->setTarget( who );
-	spt->go( true );	
+	if( !userId.isEmpty() )
+		spt->setTarget( userId );
+	spt->go( true );
 }
 
 void Client::sendPictureInformation( const QString &userId, const QString &url, int checksum )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "checksum: " << checksum << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "checksum: " << checksum << endl;
 	SendPictureTask *spt = new SendPictureTask( d->root );
 	spt->setType( SendPictureTask::SendInformation );
 	spt->setChecksum( checksum );
@@ -521,13 +575,16 @@
 	spt->go( true );
 }
 
-void Client::sendPictureStatusUpdate( const QString &userId, int type )
+void Client::setPictureStatus( Yahoo::PictureStatus status )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Setting PictureStatus to: " << type << endl;
+	if( d->pictureFlag == status )
+		return;
+
+	kdDebug(YAHOO_RAW_DEBUG) << "Setting PictureStatus to: " << status << endl;
+	d->pictureFlag = status;
 	SendPictureTask *spt = new SendPictureTask( d->root );
 	spt->setType( SendPictureTask::SendStatus );
-	spt->setStatus( type );
-	spt->setTarget( userId );
+	spt->setStatus( status );
 	spt->go( true );
 }
 
@@ -624,10 +681,36 @@
 	myt->go(true);
 }
 
+// ***** Yahoo Chat *****
+void Client::getYahooChatCategories()
+{
+	d->yahooChatTask->getYahooChatCategories();
+}
+
+void Client::getYahooChatRooms( const Yahoo::ChatCategory &category )
+{
+	d->yahooChatTask->getYahooChatRooms( category );
+}
+
+void Client::joinYahooChatRoom( const Yahoo::ChatRoom &room )
+{
+	d->yahooChatTask->joinRoom( room );
+}
+
+void Client::sendYahooChatMessage( const QString &msg, const QString &handle )
+{
+	d->yahooChatTask->sendYahooChatMessage( msg, handle );
+}
+
+void Client::leaveChat()
+{
+	d->yahooChatTask->logout();
+}
+
 // ***** other *****
 void Client::notifyError( const QString &info, const QString & errorString, LogLevel level )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << QString::fromLatin1("\nThe following error occured: %1\n    Reason: %2\n    LogLevel: %3")
+	kdDebug(YAHOO_RAW_DEBUG) << QString::fromLatin1("\nThe following error occurred: %1\n    Reason: %2\n    LogLevel: %3")
 		.arg(info).arg(errorString).arg(level) << endl;
 	d->errorString = errorString;
 	d->errorInformation = info;
@@ -675,12 +758,6 @@
 	return d->pass;
 }
 
-QCString Client::ipAddress()
-{
-	//TODO determine ip address
-	return "127.0.0.1";
-}
-
 QString Client::host()
 {
 	return d->host;
@@ -701,9 +778,14 @@
 	return d->pictureFlag;
 }
 
-void Client::setPictureFlag( int flag )
+int Client::pictureChecksum()
+{
+	return d->pictureChecksum;
+}
+
+void Client::setPictureChecksum( int cs )
 {
-	d->pictureFlag = flag;
+	d->pictureChecksum = cs;
 }
 
 QString Client::yCookie()
@@ -723,7 +805,7 @@
 
 void Client::distribute( Transfer * transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	if( !rootTask()->take( transfer ) )
 		kdDebug(YAHOO_RAW_DEBUG) << "CLIENT: root task refused transfer" << endl;
 	delete transfer;
@@ -731,9 +813,9 @@
 
 void Client::send( Transfer* request )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << "CLIENT::send()"<< endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "CLIENT::send()" << endl;
 	if( !d->stream )
-	{	
+	{
 		kdDebug(YAHOO_RAW_DEBUG) << "CLIENT - NO STREAM TO SEND ON!" << endl;
 		return;
 	}
@@ -743,7 +825,7 @@
 
 void Client::debug(const QString &str)
 {
-	qDebug( "CLIENT: %s", str.ascii() );
+       qDebug( "CLIENT: %s", str.ascii() );
 }
 
 Task * Client::rootTask()
@@ -757,23 +839,21 @@
 		return;
 
 	d->statusTask = new StatusNotifierTask( d->root );
-	QObject::connect( d->statusTask, SIGNAL( statusChanged( const QString&, int, const QString&, int, int ) ), 
-				SIGNAL( statusChanged( const QString&, int, const QString&, int, int ) ) );
-	QObject::connect( d->statusTask, SIGNAL( stealthStatusChanged( const QString&, Yahoo::StealthStatus ) ), 
+	QObject::connect( d->statusTask, SIGNAL( statusChanged(const QString&,int,const QString&,int,int,int) ),
+				SIGNAL( statusChanged(const QString&,int,const QString&,int,int,int) ) );
+	QObject::connect( d->statusTask, SIGNAL( stealthStatusChanged( const QString&, Yahoo::StealthStatus ) ),
 				SIGNAL( stealthStatusChanged( const QString&, Yahoo::StealthStatus ) ) );
-	QObject::connect( d->statusTask, SIGNAL( loginResponse( int, const QString& ) ), 
+	QObject::connect( d->statusTask, SIGNAL( loginResponse( int, const QString& ) ),
 				SLOT( slotLoginResponse( int, const QString& ) ) );
-	QObject::connect( d->statusTask, SIGNAL( authorizationRejected( const QString&, const QString& ) ), 
+	QObject::connect( d->statusTask, SIGNAL( authorizationRejected( const QString&, const QString& ) ),
 				SIGNAL( authorizationRejected( const QString&, const QString& ) ) );
-	QObject::connect( d->statusTask, SIGNAL( authorizationAccepted( const QString& ) ), 
+	QObject::connect( d->statusTask, SIGNAL( authorizationAccepted( const QString& ) ),
 				SIGNAL( authorizationAccepted( const QString& ) ) );
-	QObject::connect( d->statusTask, SIGNAL( gotAuthorizationRequest( const QString &, const QString &, const QString & ) ), 
+	QObject::connect( d->statusTask, SIGNAL( gotAuthorizationRequest( const QString &, const QString &, const QString & ) ),
 				SIGNAL( gotAuthorizationRequest( const QString &, const QString &, const QString & ) ) );
-	QObject::connect( d->statusTask, SIGNAL( gotPictureChecksum( const QString &, int ) ),
-				SIGNAL( pictureChecksumNotify( const QString &, int ) ) );
 
 	d->mailTask = new MailNotifierTask( d->root );
-	QObject::connect( d->mailTask, SIGNAL( mailNotify(const QString&, const QString&, int) ), 
+	QObject::connect( d->mailTask, SIGNAL( mailNotify(const QString&, const QString&, int) ),
 				SIGNAL( mailNotify(const QString&, const QString&, int) ) );
 
 	d->messageReceiverTask = new MessageReceiverTask( d->root );
@@ -797,8 +877,8 @@
 				SIGNAL( pictureInfoNotify( const QString &, KURL, int ) ) );
 	QObject::connect( d->pictureNotifierTask, SIGNAL( pictureRequest( const QString & ) ),
 				SIGNAL( pictureRequest( const QString & ) ) );
-	QObject::connect( d->pictureNotifierTask, SIGNAL( pictureUploaded( const QString & ) ),
-				SIGNAL( pictureUploaded( const QString & ) ) );
+	QObject::connect( d->pictureNotifierTask, SIGNAL( pictureUploaded( const QString &, int ) ),
+				SIGNAL( pictureUploaded( const QString &, int ) ) );
 
 	d->webcamTask = new WebcamTask( d->root );
 	QObject::connect( d->webcamTask, SIGNAL( webcamImageReceived( const QString &, const QPixmap &) ),
@@ -839,10 +919,24 @@
 				SIGNAL( gotYABRevision( long, bool ) ) );
 
 	d->fileTransferTask = new FileTransferNotifierTask( d->root );
-	QObject::connect( d->fileTransferTask, SIGNAL(incomingFileTransfer( const QString &, const QString &, 
-					long, const QString &, const QString &, unsigned long )),
-				SIGNAL(incomingFileTransfer( const QString &, const QString &, 
-					long, const QString &, const QString &, unsigned long )) );
+	QObject::connect( d->fileTransferTask, SIGNAL(incomingFileTransfer( const QString &, const QString &,
+					long, const QString &, const QString &, unsigned long, const QPixmap & )),
+				SIGNAL(incomingFileTransfer( const QString &, const QString &,
+					long, const QString &, const QString &, unsigned long, const QPixmap & )) );
+
+	d->yahooChatTask = new YahooChatTask( d->root );
+	QObject::connect( d->yahooChatTask, SIGNAL(gotYahooChatCategories( const QDomDocument & )),
+				SIGNAL(gotYahooChatCategories( const QDomDocument & )) );
+	QObject::connect( d->yahooChatTask, SIGNAL(gotYahooChatRooms( const Yahoo::ChatCategory &, const QDomDocument & )),
+				SIGNAL(gotYahooChatRooms( const Yahoo::ChatCategory &, const QDomDocument & )) );
+	QObject::connect( d->yahooChatTask, SIGNAL(chatRoomJoined( int , int , const QString &, const QString & ) ),
+				SIGNAL(chatRoomJoined( int , int , const QString &, const QString & ) ) );
+	QObject::connect( d->yahooChatTask, SIGNAL(chatBuddyHasJoined( const QString &, const QString &, bool  ) ),
+				SIGNAL(chatBuddyHasJoined( const QString &, const QString &, bool  ) ) );
+	QObject::connect( d->yahooChatTask, SIGNAL(chatBuddyHasLeft(QString,QString) ),
+				SIGNAL(chatBuddyHasLeft(QString,QString) ) );
+	QObject::connect( d->yahooChatTask, SIGNAL(chatMessageReceived( const QString &, const QString &, const QString & ) ),
+				SIGNAL(chatMessageReceived( const QString &, const QString &, const QString & ) ) );
 }
 
 void Client::deleteTasks()
@@ -864,6 +958,10 @@
 	d->yabTask = 0L;
 	d->fileTransferTask->deleteLater();
 	d->fileTransferTask = 0;
+	d->yahooChatTask->deleteLater();
+	d->yahooChatTask = 0;
+	d->receiveFileTask->deleteLater();
+	d->receiveFileTask = 0;
 }
 
 #include "client.moc"
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/client.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/client.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/client.h	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/client.h	2010-01-18 04:06:15.000000000 +0200
@@ -1,14 +1,14 @@
 /*
     Kopete Yahoo Protocol
-    
-    Copyright (c) 2005-2006 André Duffeck <andre.duffeck@kdemail.net>
+
+    Copyright (c) 2005-2006 André Duffeck <duffeck@kde.org>
     Copyright (c) 2004 Duncan Mac-Vicar P. <duncan@kde.org>
     Copyright (c) 2004 Matt Rogers <matt.rogers@kdemail.net>
     Copyright (c) 2004 SuSE Linux AG <http://www.suse.com>
-    Copyright (C) 2003  Justin Karneges
-    
-    Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
- 
+    Copyright (C) 2003  Justin Karneges <justin@affinix.com>
+
+    Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
+
     *************************************************************************
     *                                                                       *
     * This library is free software; you can redistribute it and/or         *
@@ -23,77 +23,80 @@
 #define LIBYAHOO_CLIENT_H
 
 #include <qobject.h>
+#include <kurl.h>
 
 #include "transfer.h"
 #include "yahootypes.h"
 
-#define YMSG_PROGRAM_VERSION_STRING "7,5,0,33"
+#define YMSG_PROGRAM_VERSION_STRING "8.1.0.209"
 
 class QString;
 class QTimer;
+class QPixmap;
+class QDomDocument;
 class ClientStream;
 class KNetworkConnector;
 class Task;
-class KURL;
-class KTempFile;
-class YABEntry;
-class SendFileTask;
+class KTemporaryFile;
+struct YABEntry;
 
 class Client : public QObject
 {
 Q_OBJECT
 
 	public:
-	
+
 		/*************
-		  EXTERNAL API 
+		  EXTERNAL API
 		 *************/
 
-		enum LogLevel { Debug, Info, Notice, Warning, Error, Critical }; 
-		  
+		enum LogLevel { Debug, Info, Notice, Warning, Error, Critical };
+
 		Client(QObject *parent=0);
 		~Client();
+
+		/**
+		 * Set the Yahoo Id of the account
+		 * @param username The Yahoo Id
+		 */
 		void setUserId( const QString& userName );
 
 		/**
+		 * Set the picture checksum
+		 * @param username The checksum
+		 */
+		void setPictureChecksum( int cs );
+
+		/**
 		 * Start a connection to the server using the supplied @ref ClientStream.
 		 * This is only a transport layer connection.
 		 * Needed for protocol action P1.
-		 * @param s initialised client stream to use for the connection.
-		 * @param server the server to connect to - but this is also set on the connector used to construct the clientstream??
-		 * @param auth indicate whether we're connecting to the authorizer or the bos server
+		 * @param host The server to connect to.
+		 * @param port The port to be used. The Yahoo server allows connection on arbitrary ports.
+		 * @param userId The yahoo ID that will be connected.
+		 * @param pass The password.
 		 */
 		void connect( const QString &host, const uint port, const QString &userId, const QString &pass );
 
-		/**
-		 * Cancel active login attemps
-		 */
+		/** Cancel active login attemps	 */
 		void cancelConnect();
 
-		/**
-		 * Logout and disconnect
-		 */
+		/** Logout and disconnect */
 		void close();
 
-		/**
-		 * Returns the errorcode
-		 */
+		/** Returns the errorcode */
 		int error();
 
-		/**
-		 * Returns a description of the error
-		 */
+		/** Returns a description of the error */
 		QString errorString();
 
-		/**
-		 * Returns information about what went wrong
-		 */
+		/** Returns information about what went wrong */
 		QString errorInformation();
 
 		/**
-		 * Specifies the status we connect with. 
+		 * Specifies the status we connect with.
 		 * The Yahoo protocol supports connecting into Online and Invisible state.
-		 * If status is any other status the Client connects into Online state and changes into the specified state after the login. 
+		 * If status is any other status the Client connects into Online state and changes into the specified state after the login.
 		 * @param status the status to connect with
 		 */
 		void setStatusOnConnect( Yahoo::Status status );
@@ -106,22 +109,9 @@
 		 */
 		void setStatusMessageOnConnect( const QString &msg );
 
-		/**
-		 * Accessors needed for login
-		 */
+		/** Accessors needed for login */
 		QString host();
 		int port();
-		
-		/**
-		 * return the pictureFlag describing the status of our buddy icon
-		 * 0 = no icon, 2 = icon, 1 = avatar (?)
-		 */
-		int pictureFlag();
-		
-		/**
-		 * set the pictureFlag describing the status of our buddy icon
-		 */
-		void setPictureFlag( int flag );
 
 		/**
 		 * Send a Typing notification
@@ -129,7 +119,7 @@
 		 * @param typing true if there is typing activity, false if not
 		 */
 		void sendTyping( const QString &to, bool typing );
-		
+
 		/**
 		 * Send a Message
 		 * @param to the buddy that should receive the message
@@ -139,7 +129,7 @@
 
 		/**
 		 * Register / Unregister a chatsession
-		 * @param to the buddy, the chatsession belongs to 
+		 * @param to the buddy, the chatsession belongs to
 		 * @param close if true, the chatsession will be closed, if false, it will be opened
 		 */
 		void setChatSessionState( const QString &to, bool close );
@@ -155,7 +145,7 @@
 		 * @param status the status that will be set
 		 * @param message the status message that will be set
 		 * @param type Yahoo::StatusTypeAvailable means that the user is available, Yahoo::StatusTypeAway means that the user is away from the keyboard
-		 */	
+		 */
 		void changeStatus(Yahoo::Status status, const QString &message, Yahoo::StatusType type);
 
 		/**
@@ -175,200 +165,281 @@
 
 		/**
 		 * Remove a buddy from the contact list
+		 * @param userId the yahoo ID of the buddy that should be removed
+		 * @param group the group where the buddy belongs to
 		 */
 		void removeBuddy( const QString &userId, const QString &group );
 
 		/**
 		 * Move a buddy into another group
+		 * @param userId the yahoo ID of the buddy that should be moved
+		 * @param oldGroup the group where the buddy belongs to
+		 * @param newGroup the group where the buddy will be placed
 		 */
 		void moveBuddy( const QString &userId, const QString &oldGroup, const QString &newGroup );
 
 		/**
 		 * Change the stealth status of a buddy
+		 * @param userId the yahoo ID of the buddy that should be moved
+		 * @param mode defines the Stealth mode that is changed. That can be "Appear Offline", "Appear Online" or "Apper permanently offline"
+		 * @param state the status of the specified Stealth mode. Active, Not Active or Clear
 		 */
 		void stealthContact( QString const &userId, Yahoo::StealthMode mode, Yahoo::StealthStatus state );
 
 		/**
 		 * Request the buddy's picture
+		 * @param userId the yahoo ID of the buddy
 		 */
 		void requestPicture( const QString &userId );
 
 		/**
 		 * Download the buddy's picture
+		 * @param userId the yahoo ID of the buddy
+		 * @param url the url of the picture
+		 * @param checksum the checksum of the picture
 		 */
 		void downloadPicture( const QString &userId, KURL url, int checksum );
 
 		/**
 		 * Send our picture
+		 * @param url the file that should be sent as our buddy picture
 		 */
 		void uploadPicture( KURL url );
 
 		/**
 		 * Send checksum of our picture
+		 * @param userId the yahoo ID of the buddy. Can be a null string if the picture has changed.
+		 * @param checksum the checksum of the picture
 		 */
-		void sendPictureChecksum( int checksum, const QString & );
+		void sendPictureChecksum( const QString &userId, int checksum );
 
 		/**
 		 * Send information about our picture
+		 * @param userId the yahoo ID of the buddy that should be informed
+		 * @param url the url of our picture
+		 * @param checksum the checksum of the picture
 		 */
 		void sendPictureInformation( const QString &userId, const QString &url, int checksum );
 
 		/**
 		 * Notify the buddies about our new status
+		 * @param flag the type of our picture (0=none, 1=avatar, 2=picture)
 		 */
-		void sendPictureStatusUpdate( const QString &userId, int type );
+		void setPictureStatus( Yahoo::PictureStatus flag );
 
 		/**
 		 * Send a response to the webcam invite ( Accept / Decline )
+		 * @param userId the yahoo ID of the sender
 		 */
 		void requestWebcam( const QString &userId );
 
 		/**
 		 * Stop receiving of webcam
+		 * @param userId the yahoo ID of the sender
 		 */
 		void closeWebcam( const QString &userId );
 
 		/**
 		 * Invite the user to view your Webcam
+		 * @param userId the yahoo ID of the receiver
 		 */
 		void sendWebcamInvite( const QString &userId );
 
 		/**
 		 * transmit a new image to the watchers
+		 * @param image the image data
 		 */
 		void sendWebcamImage( const QByteArray &image );
 
-		/**
-		 * Stop transmission
-		 */
+		/** Stop the webcam transmission */
 		void closeOutgoingWebcam();
 
 		/**
 		 * Allow a buddy to watch the cam
+		 * @param userId the yahoo ID of the receiver
 		 */
 		void grantWebcamAccess( const QString &userId );
 
 		/**
 		 * Invite buddies to a conference
+		 * @param room the name of the conference
+		 * @param members a list of members that are invited to the conference
+		 * @param msg the invite message
 		 */
 		void inviteConference( const QString &room, const QStringList &members, const QString &msg );
 
 		/**
 		 * Invite buddies to a already existing conference
+		 * @param room the name of the conference
+		 * @param who a list of members that are additionally invited to the conference
+		 * @param members a list of members that are already in the conference
+		 * @param msg the invite message
 		 */
 		void addInviteConference( const QString &room, const QStringList &who, const QStringList &members, const QString &msg );
 
 		/**
 		 * Join a conference
+		 * @param room the name of the conference
+		 * @param members a list of members that are already in the conference
 		 */
 		void joinConference( const QString &room, const QStringList &members );
 
 		/**
 		 * Decline to join a conference
+		 * @param room the name of the conference
+		 * @param members a list of members that are in the conference
+		 * @param msg the reason why we don't want to join
 		 */
 		void declineConference( const QString &room, const QStringList &members, const QString &msg );
 
 		/**
 		 * Leave the conference
+		 * @param room the name of the conference
+		 * @param members a list of members that are in the conference
 		 */
 		void leaveConference( const QString &room, const QStringList &members );
 
 		/**
 		 * Send a message to the conference
+		 * @param room the name of the conference
+		 * @param members a list of members that are in the conference
+		 * @param msg the message
 		 */
 		void sendConferenceMessage( const QString &room, const QStringList &members, const QString &msg );
 
 		/**
 		 * Send a authorization request response
+		 * @param userId the yahoo ID of the requesting buddy
+		 * @param accept true, if the user is allowed to see our status, false if not
+		 * @param msg the reason for our decision
 		 */
 		void sendAuthReply( const QString &userId, bool accept, const QString &msg );
 
 		/**
 		 * Fetches all entries of the YAB
+		 * @param lastMerge the YAB-Revision that was last merged with the local YAB
+		 * @param lastRemoteRevision the latest known YAB-Revision
 		 */
 		void getYABEntries( long lastMerge, long lastRemoteRevision );
 
 		/**
 		 * Saves a modified YAB entry
+		 * @param entry the YAB entry
 		 */
 		void saveYABEntry( YABEntry &entry );
 
 		/**
 		 * Creates a new YAB entry
+		 * @param entry the YAB entry
 		 */
 		void addYABEntry( YABEntry &entry );
 
 		/**
 		 * Deletes a YAB entry
+		 * @param entry the YAB entry
 		 */
 		void deleteYABEntry( YABEntry &entry );
 
 		/**
 		 * Send a file to a buddy
+		 * @param transferId the unique ID of the transfer
+		 * @param userId yahoo ID of the receiver
+		 * @param msg a description of the file to be sent
+		 * @param url the location of the file to be sent
 		 */
 		void sendFile( unsigned int transferId, const QString &userId, const QString &msg, KURL url );
 
 		/**
 		 * Receive a file from a buddy
+		 * @param transferId the unique ID of the transfer
+		 * @param userId yahoo ID of the sender
+		 * @param remoteURL the url of the file
+		 * @param localURL the location where the file should be stored
 		 */
 		void receiveFile( unsigned int transferId, const QString &userId, KURL remoteURL, KURL localURL );
 
 		/**
 		 * Reject a file offered by a buddy
+		 * @param userId yahoo ID of the sender
+		 * @param remoteURL the url of the file
 		 */
 		void rejectFile( const QString &userId, KURL remoteURL );
 
 		/**
-		 * The user canceled the filetransfer
+		 * Canceled a filetransfer
+		 * @param transferId the unique ID of the transfer
+		 */
+		void cancelFileTransfer( unsigned int transferId );
+
+		/**
+		 * Get the list of yahoo chat categories
+		 */
+		void getYahooChatCategories();
+
+		/**
+		 * Get the list of chatrooms for the given category
+		 */
+		void getYahooChatRooms( const Yahoo::ChatCategory &category );
+
+		/**
+		 * Join a chat room
+		 */
+		void joinYahooChatRoom( const Yahoo::ChatRoom &room );
+
+		/**
+		 * Leave the chat room
+		 */
+		void leaveChat();
+
+		/**
+		 * Send a chat message
 		 */
-		void cancelFileTransfer( unsigned int transferId );	
+		void sendYahooChatMessage( const QString &msg, const QString &handle );
 
 		/*************
-		  INTERNAL (FOR USE BY TASKS) METHODS 
+		  INTERNAL (FOR USE BY TASKS) METHODS
 		 *************/
 		/**
 		 * Send an outgoing request to the server
+		 * @param request the transfer to be sent
 		 */
 		void send( Transfer *request );
-		
+
 		/**
 		 * Print a debug statement
 		 */
 		void debug( const QString &str );
-		
-		/**
-		 * The current user's user ID
-		 */
+
+		/** The current user's user ID */
 		QString userId();
-		
-		/**
-		 * The current user's password
-		 */
+
+		/** The current user's password */
 		QString password();
-		
-		/**
-		 * Host's IP address
-		 */
-		QCString ipAddress();
-		
+
+		/** current Session ID */
+		uint sessionID();
+
 		/**
-		 * current Session ID
+		 * return the pictureFlag describing the status of our buddy icon
+		 * 0 = no icon, 2 = icon, 1 = avatar (?)
 		 */
-		uint sessionID();
+		int pictureFlag();
 
 		/**
-		 * Get our status
+		 * return the picture checksum
 		 */
+		int pictureChecksum();
+
+		/** Get our status */
 		Yahoo::Status status();
 
 		/**
 		 * Set our status
+		 * @param status the new status
 		 */
-		void setStatus( Yahoo::Status );
+		void setStatus( Yahoo::Status status );
 
-		/**
-		 * Access the root Task for this client, so tasks may be added to it.
-		 */
+		/** Access the root Task for this client, so tasks may be added to it. */
 		Task* rootTask();
 
 		/**
@@ -389,11 +460,11 @@
 		 */
 		void loggedIn( int, const QString& );
 
-		/** 
-		 * Notifies that the login process has failed 
+		/**
+		 * Notifies that the login process has failed
 		 */
 		void loginFailed();
-		
+
 		/**
 		 * Notifies tasks and account so they can react properly
 		 */
@@ -413,9 +484,21 @@
 		 */
 		void gotBuddy( const QString &, const QString &, const QString & );
 		/**
+		 * Notifies about adding buddies
+		 */
+		void buddyAddResult( const QString &, const QString &, bool );
+		/**
+		 * Notifies about removing buddies
+		 */
+		void buddyRemoveResult( const QString &, const QString &, bool );
+		/**
+		 * Notifies about buddies changing groups
+		 */
+		void buddyChangeGroupResult( const QString &, const QString &, bool );
+		/**
 		 * Notifies about the status of online buddies
 		 */
-		void statusChanged( const QString&, int, const QString&, int, int );
+		void statusChanged( const QString&, int, const QString&, int, int, int );
 		/**
 		 * Notifies about the stealth status of buddies
 		 */
@@ -459,7 +542,7 @@
 		/**
 		 * The iconLoader has successfully downloaded a picutre
 		 */
-		void pictureDownloaded( const QString &, KTempFile *, int );
+		void pictureDownloaded( const QString &, const QByteArray &, int );
 		/**
 		 * A Buddy asks for our picture
 		 */
@@ -467,7 +550,7 @@
 		/**
 		 * Information about the picture upload
 		 */
-		void pictureUploaded( const QString & );
+		void pictureUploaded( const QString &, int );
 		/**
 		 * We've received a webcam image from a buddy
 		 */
@@ -545,7 +628,7 @@
 		 */
 		void gotYABEntry( YABEntry * );
 		/**
-		 * An error occured while saving a Yahoo Addressbook entry
+		 * An error occurred while saving a Yahoo Addressbook entry
 		 */
 		void modifyYABEntryError( YABEntry *, const QString & );
 		/**
@@ -557,7 +640,7 @@
 		 */
 		void fileTransferComplete( unsigned int );
 		/**
-		 * An error occured during the filetransfer
+		 * An error occurred during the filetransfer
 		 */
 		void fileTransferError( unsigned int, int, const QString & );
 		/**
@@ -568,14 +651,39 @@
 		 * A buddy is trying to send us a file
 		 */
 		void incomingFileTransfer( const QString &, const QString &, long, const QString &,
-			const QString &, unsigned long );
+			const QString &, unsigned long, const QPixmap & );
+		/**
+		 * We have received the list of yahoo chat categories
+		 */
+		void gotYahooChatCategories( const QDomDocument & );
+		/**
+		 * We have received the list of chatrooms for the categories
+		 */
+		void gotYahooChatRooms( const Yahoo::ChatCategory &, const QDomDocument & );
+		/**
+		 * We have joined a chatroom
+		 */
+		void chatRoomJoined( int, int, const QString &, const QString & );
+		/**
+		 * A buddy has joined a chatroom
+		 */
+		void chatBuddyHasJoined( const QString &, const QString &, bool );
+		/**
+		 * A buddy has left a chatroom
+		 */
+		void chatBuddyHasLeft( const QString &, const QString & );
+		/**
+		 * We have received a message in a chatroom
+		 */
+		void chatMessageReceived( const QString &, const QString &, const QString & );
 	protected slots:
 		// INTERNAL, FOR USE BY TASKS' finished() SIGNALS //
 		void lt_loginFinished();
 		void lt_gotSessionID( uint );
 		void cs_connected();
 		void slotGotCookies();
-		
+		void streamDisconnected();
+
 		/**
 		 * Used by tasks to identify a response to a login attempt
 		 */
@@ -585,7 +693,7 @@
 		 * Used by the client stream to notify errors to upper layers.
 		 */
 		void streamError( int error );
-		
+
 		/**
 		 * The client stream has data ready to read.
 		 */
@@ -595,16 +703,22 @@
 		 * Send a Yahoo Ping packet to the server
 		 */
 		void sendPing();
+
+		/**
+		 * Send all queued buddy icon requests
+		 */
+		void processPictureQueue();
+
 	private:
 		void distribute( Transfer *transfer );
-		
+
 		/**
 		 * create static tasks and connect their signals
 		 */
 		void initTasks();
 
 		/**
-		 * remove static tasks and their singal connections
+		 * remove static tasks and their signal connections
 		 */
 		void deleteTasks();
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/conferencetask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/conferencetask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/conferencetask.cpp	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/conferencetask.cpp	2010-01-18 05:52:51.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Handles conferences
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -25,7 +25,7 @@
 
 ConferenceTask::ConferenceTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 ConferenceTask::~ConferenceTask()
@@ -34,14 +34,12 @@
 
 bool ConferenceTask::take( Transfer* transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
 	if ( !forMe( transfer ) )
 		return false;
 
 	YMSGTransfer *t = 0L;
 	t = static_cast<YMSGTransfer*>(transfer);
-	
+
  	if( t->service() == Yahoo::ServiceConfInvite ||
 		t->service() == Yahoo::ServiceConfAddInvite)
  		parseInvitation( t );
@@ -57,12 +55,10 @@
 	return true;
 }
 
-bool ConferenceTask::forMe( Transfer* transfer ) const
+bool ConferenceTask::forMe( const Transfer* transfer ) const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
-	YMSGTransfer *t = 0L;
-	t = dynamic_cast<YMSGTransfer*>(transfer);
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
@@ -71,7 +67,7 @@
 		t->service() == Yahoo::ServiceConfDecline ||
 		t->service() == Yahoo::ServiceConfLogoff ||
 		t->service() == Yahoo::ServiceConfAddInvite ||
-		t->service() == Yahoo::ServiceConfMsg )	
+		t->service() == Yahoo::ServiceConfMsg )
 		return true;
 	else
 		return false;
@@ -79,8 +75,8 @@
 
 void ConferenceTask::parseInvitation( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
 	int i = 0;
 	QString who = t->firstParam( 50 );
 	QString room = t->firstParam( 57 );
@@ -92,9 +88,9 @@
 		msg = t->firstParam( 58 );
 
 	QStringList members;
-	for( i = 0; i < t->paramCount( 52 ); i++ )
+	for( i = 0; i < t->paramCount( 52 ); ++i )
 		members.append( t->nthParam( 52, i ) );
-	for( i = 0; i < t->paramCount( 53 ); i++ )
+	for( i = 0; i < t->paramCount( 53 ); ++i )
 		members.append( t->nthParam( 53, i ) );
 	if( who == client()->userId() )
 		return;
@@ -105,7 +101,7 @@
 
 void ConferenceTask::parseMessage( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString room = t->firstParam( 57 );
 	QString from = t->firstParam( 3 );
@@ -117,12 +113,12 @@
 		msg = t->firstParam( 14 );
 
 	if( !msg.isEmpty() )
-		emit gotMessage( from, room, msg ); 
+		emit gotMessage( from, room, msg );
 }
 
 void ConferenceTask::parseUserJoined( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString room = t->firstParam( 57 );
 	QString who = t->firstParam( 53 );
@@ -133,7 +129,7 @@
 
 void ConferenceTask::parseUserLeft( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString room = t->firstParam( 57 );
 	QString who = t->firstParam( 56 );
@@ -144,7 +140,7 @@
 
 void ConferenceTask::parseUserDeclined( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString room = t->firstParam( 57 );
 	QString who = t->firstParam( 54 );
@@ -156,7 +152,7 @@
 
 void ConferenceTask::inviteConference( const QString &room, const QStringList &members, const QString &msg )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceConfInvite);
 	t->setId( client()->sessionID() );
@@ -165,7 +161,7 @@
 	t->setParam( 57, room.local8Bit() );
 	t->setParam( 58, msg.local8Bit() );
 	t->setParam( 97, 1 );
-	for( QStringList::const_iterator it = members.begin(); it != members.end(); it++ )
+	for( QStringList::const_iterator it = members.begin(); it != members.end(); ++it )
 		t->setParam( 52, (*it).local8Bit() );
 	t->setParam( 13, "0" );
 
@@ -174,21 +170,21 @@
 
 void ConferenceTask::addInvite( const QString &room, const QStringList &who, const QStringList &members, const QString &msg )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceConfAddInvite);
 	t->setId( client()->sessionID() );
 	t->setParam( 1, client()->userId().local8Bit() );
 
 	QString whoList = who.first();
-	for( uint i = 1; i < who.size(); i++ )
+	for( int i = 1; i < who.size(); i++ )
 		whoList += QString(",%1").arg( who[i] );
 	t->setParam( 51, whoList.local8Bit() );
 
 	t->setParam( 57, room.local8Bit() );
 	t->setParam( 58, msg.local8Bit() );
 	t->setParam( 97, 1 );
-	for( QStringList::const_iterator it = members.begin(); it != members.end(); it++ )
+	for( QStringList::const_iterator it = members.begin(); it != members.end(); ++it )
 	{
 		t->setParam( 52, (*it).local8Bit() );
 		t->setParam( 53, (*it).local8Bit() );	// Note: this field should only be set if the buddy has already joined the conference, but no harm is done this way
@@ -200,12 +196,12 @@
 
 void ConferenceTask::joinConference( const QString &room, const QStringList &members )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceConfLogon);
 	t->setId( client()->sessionID() );
 	t->setParam( 1, client()->userId().local8Bit() );
-	for( QStringList::const_iterator it = members.begin(); it != members.end(); it++ )
+	for( QStringList::const_iterator it = members.begin(); it != members.end(); ++it )
 		t->setParam( 3, (*it).local8Bit() );
 	t->setParam( 57, room.local8Bit() );
 
@@ -214,14 +210,14 @@
 
 void ConferenceTask::declineConference( const QString &room, const QStringList &members, const QString &msg )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceConfDecline);
 	t->setId( client()->sessionID() );
 	t->setParam( 1, client()->userId().local8Bit() );
-	for( QStringList::const_iterator it = members.begin(); it != members.end(); it++ )
+	for( QStringList::const_iterator it = members.begin(); it != members.end(); ++it )
 		t->setParam( 3, (*it).local8Bit() );
-	t->setParam( 57, room.local8Bit() );	
+	t->setParam( 57, room.local8Bit() );
 	t->setParam( 14, msg.utf8() );
 	t->setParam( 97, 1 );
 
@@ -229,12 +225,12 @@
 }
 void ConferenceTask::leaveConference( const QString &room, const QStringList &members )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceConfLogoff);
 	t->setId( client()->sessionID() );
 	t->setParam( 1, client()->userId().local8Bit() );
-	for( QStringList::const_iterator it = members.begin(); it != members.end(); it++ )
+	for( QStringList::const_iterator it = members.begin(); it != members.end(); ++it )
 		t->setParam( 3, (*it).local8Bit() );
 	t->setParam( 57, room.local8Bit() );
 
@@ -243,12 +239,12 @@
 
 void ConferenceTask::sendMessage( const QString &room, const QStringList &members, const QString &msg )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceConfMsg);
 	t->setId( client()->sessionID() );
 	t->setParam( 1, client()->userId().local8Bit() );
-	for( QStringList::const_iterator it = members.begin(); it != members.end(); it++ )
+	for( QStringList::const_iterator it = members.begin(); it != members.end(); ++it )
 		t->setParam( 53, (*it).local8Bit() );
 	t->setParam( 57, room.local8Bit() );
 	t->setParam( 14, msg.utf8() );
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/conferencetask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/conferencetask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/conferencetask.h	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/conferencetask.h	2010-01-18 05:51:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Handles conferences
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -30,9 +30,9 @@
 public:
 	ConferenceTask(Task *parent);
 	~ConferenceTask();
-	
+
 	bool take(Transfer *transfer);
-	bool forMe( Transfer* transfer ) const;
+	bool forMe( const Transfer* transfer ) const;
 
 	void joinConference( const QString &room, const QStringList &members );
 	void declineConference( const QString &room, const QStringList &members, const QString &msg );
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/connector.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/connector.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/connector.cpp	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/connector.cpp	2010-01-19 15:33:48.000000000 +0200
@@ -4,7 +4,7 @@
 
     Copyright (c) 2004 Matt Rogers <matt.rogers@kdemail.net>
 
-    Based on Iris, Copyright (C) 2003  Justin Karneges
+    Based on Iris, Copyright (C) 2003  Justin Karneges <justin@affinix.com>
 
     Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/connector.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/connector.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/connector.h	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/connector.h	2010-01-19 15:34:22.000000000 +0200
@@ -4,7 +4,7 @@
 
     Copyright (c) 2004 Matt Rogers <matt.rogers@kdemail.net>
     Based on code Copyright (c) 2004 SuSE Linux AG <http://www.suse.com>
-    Based on Iris, Copyright (C) 2003  Justin Karneges
+    Based on Iris, Copyright (C) 2003  Justin Karneges <justin@affinix.com>
 
     Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/coreprotocol.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/coreprotocol.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/coreprotocol.cpp	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/coreprotocol.cpp	2010-01-19 15:55:43.000000000 +0200
@@ -1,14 +1,14 @@
 /*
     Kopete Yahoo Protocol
-    
+
     Copyright (c) 2004 Duncan Mac-Vicar P. <duncan@kde.org>
-    
-    Based on code 
+
+    Based on code
     Copyright (c) 2004 SuSE Linux AG <http://www.suse.com>
-    Copyright (C) 2003  Justin Karneges
-    
+    Copyright (C) 2003  Justin Karneges <justin@affinix.com>
+
     Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
- 
+
     *************************************************************************
     *                                                                       *
     * This library is free software; you can redistribute it and/or         *
@@ -26,7 +26,6 @@
 #include <qdatetime.h>
 #include <qtextstream.h>
 
-
 #include <kdebug.h>
 #include <kurl.h>
 
@@ -39,7 +38,7 @@
 	m_YMSGProtocol = new YMSGProtocol( this, "ymsgprotocol" );
 }
 
-CoreProtocol::~CoreProtocol() 
+CoreProtocol::~CoreProtocol()
 {
 }
 
@@ -52,60 +51,63 @@
 {
 	// store locally
 	int oldsize = m_in.size();
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << incomingBytes.size() << " bytes. already had " << oldsize << " bytes" << endl;
-	
+	kdDebug(YAHOO_RAW_DEBUG) << incomingBytes.size() << " bytes. already had " << oldsize << " bytes" << endl;
+
 	m_in.resize( oldsize + incomingBytes.size() );
 	memcpy( m_in.data() + oldsize, incomingBytes.data(), incomingBytes.size() );
-	
+
 	m_state = Available;
 	// convert every event in the chunk to a Transfer, signalling it back to the clientstream
-	
+
 	int parsedBytes = 0;
 	int transferCount = 0;
 	// while there is data left in the input buffer, and we are able to parse something out of it
-	
+
 	while ( m_in.size() && ( parsedBytes = wireToTransfer(m_in) ) )
 	{
 		transferCount++;
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " parsed transfer " <<  transferCount << " in chunk of "<< parsedBytes << " bytes" << endl; 
+		kdDebug(YAHOO_RAW_DEBUG) << " parsed transfer " <<  transferCount << " in chunk of "<< parsedBytes << " bytes" << endl;
 		int size =  m_in.size();
 		if ( parsedBytes < size )
 		{
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " more data in chunk! ( I have parsed " << parsedBytes << " and total data of " << size << ")" << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " more data in chunk! ( I have parsed " << parsedBytes << " and total data of " << size << ")" << endl;
+			// remove parsed bytes from the buffer
+			//m_in.remove( 0, parsedBytes );
+
 			// copy the unparsed bytes into a new qbytearray and replace m_in with that
-			QByteArray remainder( size - parsedBytes );
-			memcpy( remainder.data(), m_in.data() + parsedBytes, remainder.size() );
-			m_in = remainder;
+                        QByteArray remainder( size - parsedBytes );
+                        memcpy( remainder.data(), m_in.data() + parsedBytes, remainder.size() );
+                        m_in = remainder;
 		}
 		else
 			m_in.truncate( 0 );
 	}
 	if ( m_state == NeedMore )
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " message was incomplete, waiting for more..." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << " message was incomplete, waiting for more..." << endl;
 	/*
 	if ( m_eventProtocol->state() == EventProtocol::OutOfSync )
-	{	
+	{
 		qDebug( " - protocol thinks it's out of sync, discarding the rest of the buffer and hoping the server regains sync soon..." );
 		m_in.truncate( 0 );
 	}
 	*/
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " done processing chunk" << endl;
-	
+	kdDebug(YAHOO_RAW_DEBUG) << " done processing chunk" << endl;
+
 }
 
 Transfer* CoreProtocol::incomingTransfer()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;	
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	if ( m_state == Available )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - got a transfer" << endl;
+// 		kdDebug(YAHOO_RAW_DEBUG) << " - got a transfer";
 		m_state = NoData;
 		return m_inTransfer;
 		m_inTransfer = 0;
 	}
 	else
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " no milk today" << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << " no milk today" << endl;
 		return 0;
 	}
 }
@@ -113,7 +115,7 @@
 void cp_dump( const QByteArray &bytes )
 {
 #ifdef YAHOO_COREPROTOCOL_DEBUG
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " contains " << bytes.count() << " bytes" << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << " contains " << bytes.count() << " bytes" << endl;
 	for ( uint i = 0; i < bytes.count(); ++i )
 	{
 		printf( "%02x ", bytes[ i ] );
@@ -126,20 +128,20 @@
 
 void CoreProtocol::outgoingTransfer( Transfer* outgoing )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	if ( outgoing->type() == Transfer::YMSGTransfer )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " got YMSGTransfer" << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << " got YMSGTransfer" << endl;
 		YMSGTransfer *yt = (YMSGTransfer *) outgoing;
 		QByteArray bytesOut = yt->serialize();
-		
-		//QTextStream dout( bytesOut, IO_WriteOnly );
+
+		//QTextStream dout( bytesOut, QIODevice::WriteOnly );
 		//dout.setEncoding( QTextStream::Latin1 );
 		//dout.setByteOrder( QDataStream::LittleEndian );
 		//dout << bytesOut;
-		//kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " " << bytesOut << endl;
+		//kdDebug(YAHOO_RAW_DEBUG) << " " << bytesOut;
 		emit outgoingData( bytesOut );
-		// now convert 
+		// now convert
 		//fieldsToWire( fields );
 	}
 	delete outgoing;
@@ -149,53 +151,60 @@
 
 int CoreProtocol::wireToTransfer( const QByteArray& wire )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	// processing incoming data and reassembling it into transfers
 	// may be an event or a response
-	
+
 	uint bytesParsed = 0;
-			
+
 	if ( wire.size() < 20 ) // minimal value of a YMSG header
 	{
 		m_state = NeedMore;
 		return bytesParsed;
 	}
-	
-	QDataStream din( wire, IO_ReadOnly );
-	
+
+	QByteArray tempWire = wire;
+	QDataStream din( tempWire, IO_ReadOnly );
+
 	// look at first four bytes and decide what to do with the chunk
 	if ( okToProceed( din ) )
 	{
 		if ( (wire[0] == 'Y') && (wire[1] == 'M') && (wire[2] == 'S') && (wire[3] == 'G'))
 		{
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - looks like a valid YMSG packet" << endl;
-			Transfer *t = m_YMSGProtocol->parse( wire, bytesParsed );
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - YMSG Protocol parsed " << bytesParsed << " bytes" << endl;
+// 			kdDebug(YAHOO_RAW_DEBUG) << " - looks like a valid YMSG packet";
+			YMSGTransfer *t = static_cast<YMSGTransfer *>(m_YMSGProtocol->parse( wire, bytesParsed ));
+// 			kdDebug(YAHOO_RAW_DEBUG) << " - YMSG Protocol parsed " << bytesParsed << " bytes";
 			if ( t )
 			{
+				if( wire.size() < t->packetLength() )
+				{
+					m_state = NeedMore;
+					delete t;
+					return 0;
+				}
 				m_inTransfer = t;
-				kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - got a valid packet " << endl;
-				
+// 				kdDebug(YAHOO_RAW_DEBUG) << " - got a valid packet ";
+
 				m_state = Available;
 				emit incomingData();
 			}
 			else
 				bytesParsed = 0;
 		}
-		else 
-		{ 
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - not a valid YMSG packet. Trying to recover: " << wire << endl;
+		else
+		{
+			kdDebug(YAHOO_RAW_DEBUG) << " - not a valid YMSG packet. Trying to recover." << endl;
 			QTextStream s( wire, IO_ReadOnly );
 			QString remaining = s.read();
 			int pos = remaining.find( "YMSG", bytesParsed );
 			if( pos >= 0 )
 			{
-				kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Recover successful." << endl;
+				kdDebug(YAHOO_RAW_DEBUG) << "Recover successful." << endl;
 				bytesParsed += pos;
 			}
 			else
 			{
-				kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Recover failed. Dump it!" << endl;
+				kdDebug(YAHOO_RAW_DEBUG) << "Recover failed. Dump it!" << endl;
 				bytesParsed = wire.size();
 			}
 		}
@@ -208,7 +217,7 @@
 	m_in.resize( 0 );
 }
 
-void CoreProtocol::slotOutgoingData( const QCString &out )
+void CoreProtocol::slotOutgoingData( const QByteArray &out )
 {
 	qDebug( "%s", out.data() );
 }
@@ -218,7 +227,7 @@
 	if ( din.atEnd() )
 	{
 		m_state = NeedMore;
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " saved message prematurely" << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << " saved message prematurely" << endl;
 		return false;
 	}
 	else
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/coreprotocol.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/coreprotocol.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/coreprotocol.h	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/coreprotocol.h	2010-01-18 03:27:59.000000000 +0200
@@ -1,14 +1,14 @@
 /*
     Kopete Yahoo Protocol
-    
+
     Copyright (c) 2004 Duncan Mac-Vicar P. <duncan@kde.org>
-    
-    Based on code 
+
+    Based on code
     Copyright (c) 2004 SuSE Linux AG <http://www.suse.com>
-    Copyright (C) 2003  Justin Karneges
-    
+    Copyright (C) 2003  Justin Karneges <justin@affinix.com>
+
     Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
- 
+
     *************************************************************************
     *                                                                       *
     * This library is free software; you can redistribute it and/or         *
@@ -22,9 +22,7 @@
 #ifndef YAHOO_CORE_PROTOCOL_H
 #define YAHOO_CORE_PROTOCOL_H
 
-#include <qcstring.h>
 #include <qobject.h>
-#include <qptrlist.h>
 
 class Transfer;
 class YMSGProtocol;
@@ -36,43 +34,43 @@
 	enum State { NeedMore, Available, NoData, OutOfSync };
 
 	CoreProtocol();
-	
+
 	virtual ~CoreProtocol();
-	
+
 	/**
 	 * Reset the protocol, clear buffers
 	 */
 	void reset();
-	
+
 	/**
 	 * Accept data from the network, and buffer it into a useful message
 	 * This requires parsing out each FLAP, etc. from the incoming data
 	 * @param incomingBytes Raw data in wire format.
 	 */
 	void addIncomingData( const QByteArray& incomingBytes );
-	
+
 	/**
 	 * @return the incoming transfer or 0 if none is available.
 	 */
 	Transfer* incomingTransfer();
-	
-	/** 
+
+	/**
 	 * Convert a request into an outgoing transfer
 	 * emits @ref outgoingData() with each part of the transfer
 	 */
 	void outgoingTransfer( Transfer* outgoing );
-	
+
 	/**
-	 * Get the state of the protocol 
+	 * Get the state of the protocol
 	 */
 	int state();
-	
+
 signals:
-	/** 
+	/**
 	 * Emitted as the core protocol converts fields to wire ready data
 	 */
 	void outgoingData( const QByteArray& );
-	
+
 	/**
 	 * Emitted when there is incoming data, parsed into a Transfer
 	 */
@@ -81,8 +79,8 @@
 	/**
 	 * Just a debug method to test emitting to the socket, atm - should go to the ClientStream
 	 */
-	void slotOutgoingData( const QCString & );
-	
+	void slotOutgoingData( const QByteArray & );
+
 protected:
 	/**
 	 * Check that there is data to read, and set the protocol's state if there isn't any.
@@ -91,7 +89,7 @@
 	/**
 	 * Convert incoming wire data into a Transfer object and queue it
 	 * @return number of bytes from the input that were parsed into a Transfer
-	 */ 
+	 */
 	int wireToTransfer( const QByteArray& wire );
 
 private:
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/filetransfernotifiertask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/filetransfernotifiertask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/filetransfernotifiertask.cpp	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/filetransfernotifiertask.cpp	2010-01-18 05:48:58.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Notifies about incoming filetransfers
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -19,12 +19,15 @@
 #include "ymsgtransfer.h"
 #include "yahootypes.h"
 #include "client.h"
+
 #include <qstring.h>
+#include <qpixmap.h>
 #include <kdebug.h>
+//#include <kcodecs.h>
 
 FileTransferNotifierTask::FileTransferNotifierTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 FileTransferNotifierTask::~FileTransferNotifierTask()
@@ -34,11 +37,9 @@
 
 bool FileTransferNotifierTask::take( Transfer* transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
 	if ( !forMe( transfer ) )
 		return false;
-	
+
 	YMSGTransfer *t = static_cast<YMSGTransfer*>(transfer);
 
 	if( t->service() == Yahoo::ServiceFileTransfer )
@@ -47,24 +48,24 @@
 		parseFileTransfer7( t );
 	else if( t->service() == Yahoo::ServicePeerToPeer )
 		acceptFileTransfer( t );
-		
+
 
 	return true;
 }
 
-bool FileTransferNotifierTask::forMe( Transfer *transfer ) const
+bool FileTransferNotifierTask::forMe( const Transfer *transfer ) const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	YMSGTransfer *t = 0L;
-	t = dynamic_cast<YMSGTransfer*>(transfer);
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
 
 	if( t->service() == Yahoo::ServiceP2PFileXfer ||
-		t->service() == Yahoo::ServicePeerToPeer ||
-		t->service() == Yahoo::ServiceFileTransfer ||
-		t->service() == Yahoo::ServiceFileTransfer7
+	    t->service() == Yahoo::ServicePeerToPeer ||
+	    t->service() == Yahoo::ServiceFileTransfer ||
+	    (t->service() == Yahoo::ServiceFileTransfer7 &&
+	     t->firstParam(222).toInt() == 1)
 	)
 		return true;
 	else
@@ -73,7 +74,7 @@
 
 void FileTransferNotifierTask::parseFileTransfer( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString from;		/* key = 4  */
 	QString to;		/* key = 5  */
@@ -97,22 +98,22 @@
 	{
 		client()->notifyError( "Fileupload result received.", msg, Client::Notice );
 		return;
-	}	
-	
+	}
+
 	if( url.isEmpty() )
 		return;
-	
+
 
 	unsigned int left = url.findRev( '/' ) + 1;
-	unsigned int right = url.findRev( '?' );
+        unsigned int right = url.findRev( '?' );
 	filename = url.mid( left, right - left );
 
-	emit incomingFileTransfer( from, url, expires, msg, filename, size );
+	emit incomingFileTransfer( from, url, expires, msg, filename, size, QPixmap() );
 }
 
 void FileTransferNotifierTask::parseFileTransfer7( YMSGTransfer *t )
-{ 
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString from;		/* key = 4  */
 	QString to;		/* key = 5  */
@@ -121,25 +122,35 @@
 	QString msg;		/* key = 14  */
 	QString filename;	/* key = 27  */
 	unsigned long size;	/* key = 28  */
-	
+	QByteArray preview;	/* key = 267 */
+	QPixmap previewPixmap;
+
 	if( t->firstParam( 222 ).toInt() == 2 )
 		return;					// user cancelled the file transfer
 
 	from = t->firstParam( 4 );
 	to = t->firstParam( 5 );
 	url = t->firstParam( 265 );
-	expires = t->firstParam( 38 ).toLong();
 	msg = t->firstParam( 14 );
+	expires = t->firstParam( 38 ).toLong();
 	filename = t->firstParam( 27 );
 	size = t->firstParam( 28 ).toULong();
 
-	emit incomingFileTransfer( from, url, expires, msg, filename, size );
+	// FIXME (same)
+	//preview = QByteArray::fromBase64( t->firstParam( 267 ) );
+
+	if( preview.size() > 0 )
+	{
+		previewPixmap.loadFromData( preview );
+	}
+
+	emit incomingFileTransfer( from, url, expires, msg, filename, size, previewPixmap );
 }
 
 void FileTransferNotifierTask::acceptFileTransfer( YMSGTransfer *transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServicePeerToPeer);
 	t->setId( client()->sessionID() );
 	t->setParam( 4, client()->userId().local8Bit() );
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/filetransfernotifiertask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/filetransfernotifiertask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/filetransfernotifiertask.h	2010-01-21 13:32:46.804475136 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/filetransfernotifiertask.h	2010-01-18 05:42:44.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Notifies about incoming filetransfers
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -22,6 +22,7 @@
 
 class QString;
 class YMSGTransfer;
+class QPixmap;
 
 /**
 @author André Duffeck
@@ -36,10 +37,10 @@
 	bool take(Transfer *transfer);
 
 protected:
-	bool forMe( Transfer *transfer ) const;
+	virtual bool forMe( const Transfer *transfer ) const;
 signals:
 	void incomingFileTransfer( const QString &who, const QString &url, long expires, const QString &msg ,
-	const QString &fname, unsigned long size );
+	const QString &fname, unsigned long size, const QPixmap &preview );
 private:
 	void parseFileTransfer( YMSGTransfer *transfer );
 	void parseFileTransfer7( YMSGTransfer *transfer );
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/inputprotocolbase.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/inputprotocolbase.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/inputprotocolbase.cpp	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/inputprotocolbase.cpp	2010-01-19 15:31:37.000000000 +0200
@@ -18,6 +18,7 @@
 
 #include "inputprotocolbase.h"
 
+
 InputProtocolBase::InputProtocolBase(QObject *parent, const char *name)
  : QObject(parent, name)
 {
@@ -59,6 +60,7 @@
 	return false;
 }
 
+// FIXME: need to be checked
 bool InputProtocolBase::safeReadBytes( QCString & data, uint & len )
 {
 	// read the length of the bytes
@@ -81,8 +83,8 @@
 		// the rest of the string will be filled with FF,
 		// so look for that in the last position instead of \0
 		// this caused a crash - guessing that temp.length() is set to the number of bytes actually read...
-		// if ( (Q_UINT8)( * ( temp.data() + ( temp.length() - 1 ) ) ) == 0xFF )
-		if ( temp.length() < ( val - 1 ) )
+		// if ( (quint8)( * ( temp.data() + ( temp.length() - 1 ) ) ) == 0xFF )
+		if ( temp.length() < static_cast<int>( val - 1 ) )
 		{
 			qDebug( "InputProtocol::safeReadBytes() - string broke, giving up, only got: %i bytes out of %i",  temp.length(), val );
 			m_state = NeedMore;
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/inputprotocolbase.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/inputprotocolbase.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/inputprotocolbase.h	2010-01-21 13:32:46.804475136 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/inputprotocolbase.h	2010-01-19 15:32:10.000000000 +0200
@@ -57,7 +57,7 @@
 	 */
 	bool okToProceed();
 	/** 
-	 * read a Q_UINT32 giving the number of following bytes, then a string of that length
+	 * read a quint32 giving the number of following bytes, then a string of that length
 	 * updates the bytes parsed counter
 	 * @return false if the string was broken or there was no data available at all
 	 */
@@ -66,7 +66,7 @@
 protected:
 	uint m_state;
 	uint m_bytes;
-	QDataStream * m_din;
+	QDataStream *m_din;
 };
 
 #endif
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/libyahoo.c kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/libyahoo.c
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/libyahoo.c	2010-01-21 13:32:46.804475136 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/libyahoo.c	2010-01-18 18:12:53.000000000 +0200
@@ -37,14 +37,10 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  *
  */
 
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif 
- 
 #include <string.h>
 #include <stdlib.h>
 #include <ctype.h>
@@ -149,7 +145,7 @@
 
 	magic_ptr = (unsigned char *)seed;
 
-	while (*magic_ptr != (int)NULL) {
+	while (*magic_ptr) {
 		char *loc;
 
 		/* Ignore parentheses.  */
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/libyahoo.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/libyahoo.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/libyahoo.h	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/libyahoo.h	2010-01-18 18:12:51.000000000 +0200
@@ -37,7 +37,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  *
  */
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/listtask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/listtask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/listtask.cpp	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/listtask.cpp	2010-01-18 15:49:58.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Handles several lists such as buddylist, ignorelist and so on
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -15,18 +15,17 @@
 */
 
 #include <qstring.h>
+#include <qstringlist.h>
 
 #include "listtask.h"
 #include "transfer.h"
 #include "ymsgtransfer.h"
 #include "client.h"
-#include <qstring.h>
-#include <qstringlist.h>
 #include <kdebug.h>
 
 ListTask::ListTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 ListTask::~ListTask()
@@ -36,11 +35,9 @@
 
 bool ListTask::take( Transfer* transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
 	if ( !forMe( transfer ) )
 		return false;
-	
+
 	YMSGTransfer *t = static_cast<YMSGTransfer *>(transfer);
 
 	parseBuddyList( t );
@@ -49,16 +46,15 @@
 	return true;
 }
 
-bool ListTask::forMe( Transfer* transfer ) const
+bool ListTask::forMe( const Transfer* transfer ) const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	YMSGTransfer *t = 0L;
-	t = dynamic_cast<YMSGTransfer*>(transfer);
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
 
-	if ( t->service() == Yahoo::ServiceList )
+	if ( t->service() == Yahoo::ServiceBuddyList )
 		return true;
 	else
 		return false;
@@ -66,40 +62,49 @@
 
 void ListTask::parseBuddyList( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
-	QString raw;
-	m_list.append( t->firstParam( 87 ) );
-
-	if( t->firstParam( 59 ).isEmpty() )
-		return;
-
-	QStringList groups;
-	groups = QStringList::split( "\n", m_list );
-
-	for ( QStringList::Iterator groupIt = groups.begin(); groupIt != groups.end(); ++groupIt ) 
+	QString group;
+	QString buddy;
+	// We need some low-level parsing here
+
+	// FIXME same: need to check
+	//foreach( const Param &p, t->paramList() )
+
+	ParamList paramList = t->paramList();
+	ParamList::const_iterator it;
+	for ( it = paramList.begin(); it != paramList.end(); ++it )
 	{
-		QString group = (*groupIt).section(":", 0, 0);
-		QStringList buddies;
-		buddies = QStringList::split( ",", (*groupIt).section(":", 1,1) );
-		for ( QStringList::Iterator buddyIt = buddies.begin(); buddyIt != buddies.end(); ++buddyIt ) 
+		const Param &p = *it;
+
+		kdDebug(YAHOO_RAW_DEBUG) << "1:" << p.first << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "2:" << p.second << endl;
+		switch( p.first )
 		{
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Parsed buddy: " << *buddyIt << " in group " << group << endl;
-			emit gotBuddy( *buddyIt, QString::null, group );
+		case 65:
+			group = p.second;
+			break;
+		case 7:
+			buddy = p.second;
+			break;
+		case 301:
+			if( p.second == "319"){
+				kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Parsed buddy: " << buddy << " in group " << group << endl;
+				emit gotBuddy( buddy, QString(), group );
+			}
 		}
 	}
-	m_list.truncate( 0 );
 }
 
 void ListTask::parseStealthList( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString raw;
 	raw = t->firstParam( 185 );
 
-	QStringList buddies = QStringList::split( ",", raw );
-	for ( QStringList::Iterator it = buddies.begin(); it != buddies.end(); ++it ) 
+	const QStringList buddies = QStringList::split( ',', raw );
+	for ( QStringList::ConstIterator it = buddies.begin(); it != buddies.end(); ++it )
 	{
 		emit stealthStatusChanged( *it, Yahoo::StealthActive );
 	}
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/listtask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/listtask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/listtask.h	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/listtask.h	2010-01-18 15:17:30.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Handles several lists such as buddylist, ignorelist and so on
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -31,18 +31,16 @@
 public:
 	ListTask(Task *parent);
 	~ListTask();
-	
+
 	bool take(Transfer *transfer);
 
 protected:
-	bool forMe( Transfer *transfer ) const;
+	virtual bool forMe( const Transfer *transfer ) const;
 	void parseBuddyList( YMSGTransfer *transfer );
-	void parseStealthList( YMSGTransfer *transfer );	
+	void parseStealthList( YMSGTransfer *transfer );
 signals:
 	void gotBuddy(const QString&, const QString&, const QString&);
 	void stealthStatusChanged( const QString&, Yahoo::StealthStatus );
-private:
-	QString m_list;
 };
 
 #endif
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/logintask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/logintask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/logintask.cpp	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/logintask.cpp	2010-01-19 17:17:58.000000000 +0200
@@ -3,10 +3,10 @@
     Handles logging into to the Yahoo service
 
     Copyright (c) 2004 Duncan Mac-Vicar P. <duncan@kde.org>
+    Copyright (c) 2005-2006 André Duffeck <duffeck@kde.org>
+    Copyright     2009 Matt Rogers <mattr@kde.org>
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
-
-    Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
+    Kopete (c) 2002-2009 by the Kopete developers <kopete-devel@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -18,7 +18,7 @@
     *************************************************************************
 */
 
-#include <qstring.h>
+
 
 #include "logintask.h"
 #include "transfer.h"
@@ -28,6 +28,10 @@
 #include <qstring.h>
 #include <kdebug.h>
 #include <stdlib.h>
+
+#include <kio/job.h>
+#include <kmdcodec.h>
+
 extern "C"
 {
 #include "libyahoo.h"
@@ -35,7 +39,7 @@
 
 LoginTask::LoginTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	mState = InitialState;
 }
 
@@ -46,10 +50,9 @@
 
 bool LoginTask::take(Transfer* transfer)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
 	/*
 	  Yahoo login task has various stages
-	  
+
 	  1 .- Initial State
 	      1.1 .- OnGo is called
 	      1.2 .- SendVerify() - send a service verify ack
@@ -61,12 +64,18 @@
               2.3 - Need to decode and send a transfer back
 	  4.- SentAuthResp
 	*/
-	
+
 	if ( !forMe( transfer ) )
 		return false;
 
 	YMSGTransfer *t = static_cast<YMSGTransfer *>(transfer);
 
+
+	if ( t->service() == Yahoo::ServicePing) {
+		emit buddyListReady();
+		return true;
+	}
+
 	switch (mState)
 	{
 		case (InitialState):
@@ -93,14 +102,16 @@
 	}
 }
 
-bool LoginTask::forMe(Transfer* transfer) const
+bool LoginTask::forMe(const Transfer* transfer) const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	YMSGTransfer *t = 0L;
-	t = dynamic_cast<YMSGTransfer*>(transfer);
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
+	if ( t->service() == Yahoo::ServicePing)
+		return true;
+
 	switch (mState)
 	{
 		case (InitialState):
@@ -128,12 +139,12 @@
 
 void LoginTask::onGo()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	/* initial state, we have to send a ServiceVerify */
 	if (mState == InitialState)
 		sendVerify();
 	else
-			client()->notifyError( "Error in login procedure.", "take called while not in initial state", Client::Debug );
+		client()->notifyError( "Error in login procedure.", "onGo called while not in initial state", Client::Debug );
 }
 
 void LoginTask::reset()
@@ -144,20 +155,20 @@
 void LoginTask::sendVerify()
 {
 	/* send a ServiceVerify */
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceVerify);
 	send( t );
-	mState = SentVerify;	
+	mState = SentVerify;
 }
 
 void LoginTask::sendAuth(YMSGTransfer* transfer)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	// transfer is the verify ack transfer, no useful data in it.
 	Q_UNUSED(transfer);
-	
+
 	/* got ServiceVerify ACK, send a ServiceAuth with username */
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	YMSGTransfer *t = new YMSGTransfer( Yahoo::ServiceAuth );
 	t->setParam( 1 , client()->userId().local8Bit() );
 	send(t);
@@ -166,76 +177,225 @@
 
 void LoginTask::sendAuthResp(YMSGTransfer* t)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
 	QString sn = t->firstParam( 1 );
 	QString seed = t->firstParam( 94 );
+	m_challengeString = seed;
 	QString version_s = t->firstParam( 13 );
-	uint sessionID = t->id();
+	m_sessionID = t->id();
 	int version = version_s.toInt();
-	
+
 	switch (version)
 	{
 		case 0:
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Version pre 0x0b "<< version_s << endl;	
-		break;
+		case 1:
+		case 2:
+			kdDebug(YAHOO_RAW_DEBUG) << "Using version 16 authorization" << endl;
+			sendAuthSixteenStage1(sn, seed);
+			break;
 		default:
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Version 0x0b "<< version_s << endl;
-		sendAuthResp_0x0b(sn, seed, sessionID);
+			kdDebug(YAHOO_RAW_DEBUG) << "Unknown authentication method used!"
+			                         << "Attempting current authentication anyways" << endl;
+			sendAuthSixteenStage1(sn, seed);
 		break;
-	}	
+	}
 	mState = SentAuthResp;
 
-	emit haveSessionID( sessionID );
+	emit haveSessionID( m_sessionID );
 }
 
-void LoginTask::sendAuthResp_0x0b(const QString &sn, const QString &seed, uint sessionID)
+void LoginTask::sendAuthSixteenStage1(const QString& sn, const QString& seed)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " with seed " << seed << endl;
-	char *resp_6 = (char *) malloc(100);
-	char *resp_96 = (char *) malloc(100);
-	authresp_0x0b(seed.latin1(), sn.latin1(), (client()->password()).latin1(), resp_6, resp_96);
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "resp_6: " << resp_6 << " resp_69: " << resp_96 << endl;
-	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceAuthResp, m_stateOnConnect);
-	t->setId( sessionID );
-	t->setParam( 0 , sn.local8Bit());
-	t->setParam( 6 , resp_6);
-	t->setParam( 96 , resp_96);
-	t->setParam( 59 , "B\\tfckeert1kk1nl&b=2" );	// ???
-	t->setParam( 135 , "7,0,0,437" );	// Client version
-	t->setParam( 148 , -60 );
-	t->setParam( 244 , 524223 );
-	t->setParam( 1 , sn.local8Bit());
+	const QString YahooTokenUrl = "https://login.yahoo.com/config/pwtoken_get?src=ymsgr&ts=&login=%1&passwd=%2&chal=%3";
+	kdDebug(YAHOO_RAW_DEBUG) << "seed:" << seed << endl;
+	m_stage1Data= QString::null;
+	/* construct a URL from the seed and request tokens */
+	QByteArray encodedUrl;
+	QString fullUrl = YahooTokenUrl.arg(sn, client()->password(), seed);
+	KURL tokenUrl(fullUrl);
+	KIO::Job* job = KIO::get(tokenUrl, true, false);
+	connect(job, SIGNAL(data(KIO::Job*, const QByteArray&)),
+	        this, SLOT(handleAuthSixteenStage1Data(KIO::Job*, const QByteArray&)));
+	connect(job, SIGNAL(result(KIO::Job*)),
+	        this, SLOT(handleAuthSixteenStage1Result(KIO::Job*)));
+}
+
+void LoginTask::handleAuthSixteenStage1Data(KIO::Job* job, const QByteArray& data)
+{
+	kdDebug(YAHOO_RAW_DEBUG) << "data:" << data << endl;
+	m_stage1Data.append(data);
+}
 
-	if( !m_verificationWord.isEmpty() )
+void LoginTask::handleAuthSixteenStage1Result(KIO::Job* job)
+{
+	int responseNumber = -1;
+	QString token;
+	int error = job->error();
+	kdDebug(YAHOO_RAW_DEBUG) << "error:" << error << endl;
+	if (error == 0)
 	{
-		t->setParam( 227 , m_verificationWord.local8Bit() );
-		m_verificationWord = QString::null;
+		QStringList responses = QStringList::split("\r\n", m_stage1Data);
+		responseNumber = responses[0].toInt();
+		if (responses.count() >= 3)
+		{
+			token = responses[1];
+			token.remove("ymsgr=");
+			kdDebug(YAHOO_RAW_DEBUG) << "response is:" << responseNumber << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << "token is:" << token << endl;
+		}
+		if (responseNumber != 0)
+		{
+			switch(responseNumber)
+			{
+			case -1:
+				/* error in the received stream */
+				emit loginResponse(Yahoo::LoginSock, QString());
+				kdDebug(YAHOO_RAW_DEBUG) << "unknown error logging in" << endl;
+				break;
+			case 1212:
+				/* password incorrect */
+				emit loginResponse(Yahoo::LoginPasswd, QString());
+				kdDebug(YAHOO_RAW_DEBUG) << "password incorrect" << endl;
+				break;
+			case 1213:
+				/* security lock */
+				emit loginResponse(Yahoo::LoginLock, QString());
+				break;
+			case 1235:
+				/* username does not exist */
+				emit loginResponse(Yahoo::LoginUname, QString());
+				kdDebug(YAHOO_RAW_DEBUG) << "user does not exist" << endl;
+				break;
+			case 1214:
+			case 1236:
+				emit loginResponse(Yahoo::LoginVerify, QString());
+				break;
+			case 100: /* username or password missing */
+				/*FIXME handle this */
+				break;
+			default:
+				/* FIXME unknown error. handle it! */
+				break;
+			}
+		}
+		else
+		{
+			/* start stage 2 here */
+			sendAuthSixteenStage2(token);
+		}
 	}
+}
+
+void LoginTask::sendAuthSixteenStage2(const QString& token)
+{
+	const QString YahooLoginUrl = "https://login.yahoo.com/config/pwtoken_login?src=ymsgr&ts=&token=%1";
+	kdDebug(YAHOO_RAW_DEBUG) << "token:" << token << endl;
+	m_stage2Data = QString::null;
+	QString fullUrl = YahooLoginUrl.arg(token);
+	KURL loginUrl(fullUrl);
+	KIO::Job* job = KIO::get(loginUrl, true, false);
+	connect(job, SIGNAL(data(KIO::Job*, const QByteArray&)),
+	        this, SLOT(handleAuthSixteenStage2Data(KIO::Job*, const QByteArray&)));
+	connect(job, SIGNAL(result(KIO::Job*)),
+	        this, SLOT(handleAuthSixteenStage2Result(KIO::Job*)));
+}
+
+void LoginTask::handleAuthSixteenStage2Data(KIO::Job*, const QByteArray& data)
+{
+	kdDebug(YAHOO_RAW_DEBUG) << "data:" << data << endl;
+	m_stage2Data.append(data);
+}
+
+void LoginTask::handleAuthSixteenStage2Result(KIO::Job* job)
+{
+	QString crumb;
+	int responseNumber = -1;
+	int error = job->error();
+	kdDebug(YAHOO_RAW_DEBUG) << "error:" << error << endl;
+	if (error == 0)
+	{
+		QStringList responses = QStringList::split("\r\n", m_stage2Data);
+		kdDebug(YAHOO_RAW_DEBUG) << responses << endl;
+		responseNumber = responses[0].toInt();
+		if (responseNumber == 0)
+		{
+			crumb = responses[1];
+			crumb.remove("crumb=");
+			m_yCookie = responses[2].remove(0,2); /* remove Y= */
+			m_tCookie = responses[3].remove(0,2); /* remove T= */
+		}
+
+		if (responseNumber != 0)
+		{
+			switch(responseNumber)
+			{
+			case -1:
+				emit loginResponse(Yahoo::LoginSock, QString());
+				break;
+			case 100:
+				emit loginResponse(Yahoo::LoginSock, QString());
+				break;
+			default: /* try to login anyways */
+				break;
+			}
+		}
+		else
+		{
+			QString cryptString = crumb;
+			cryptString.append(m_challengeString);
+			sendAuthSixteenStage3(cryptString);
+		}
+	}
+}
+
+void LoginTask::sendAuthSixteenStage3(const QString& cryptString)
+{
+	kdDebug(YAHOO_RAW_DEBUG) << " with crypt string" << cryptString << endl;
+
+	//QByteArray cryptStringHash = QCryptographicHash::hash( cryptString.toAscii(),
+	//                                                       QCryptographicHash::Md5 );
+	//cryptStringHash = cryptStringHash.toBase64();
+
+	QString cryptStringHash = KMD5( cryptString.ascii() ).base64Digest();
+
+	cryptStringHash = cryptStringHash.replace('+', '.');
+	cryptStringHash = cryptStringHash.replace('/', '_');
+	cryptStringHash = cryptStringHash.replace('=', '-');
+
+	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceAuthResp, m_stateOnConnect);
+	t->setId( m_sessionID );
+   	t->setParam( 1, client()->userId().local8Bit());
+	t->setParam( 0 , client()->userId().local8Bit());
+	t->setParam( 277, m_yCookie.local8Bit() );
+	t->setParam( 278, m_tCookie.local8Bit() );
+	t->setParam( 307, cryptStringHash.local8Bit() );
+	t->setParam( 244, 2097087 );
+	t->setParam( 2 , client()->userId().local8Bit());
+	t->setParam( 2, 1 ); // Both parameter 2s wind up in the packet
+	t->setParam( 135, YMSG_PROGRAM_VERSION_STRING );
 
-	free(resp_6);
-	free(resp_96);
 	send(t);
 
 }
 
 void LoginTask::sendAuthResp_pre_0x0b(const QString &/*sn*/, const QString &/*seed*/)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 void LoginTask::handleAuthResp(YMSGTransfer *t)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	switch( t->service() )
 	{
 		case( Yahoo::ServiceList ):
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Emitting Signal" << endl;
-			emit loginResponse( Yahoo::LoginOk, QString::null );
+			kdDebug(YAHOO_RAW_DEBUG) << "Emitting Signal" << endl;
+			emit loginResponse( Yahoo::LoginOk, QString() );
 		break;
 		case( Yahoo::ServiceAuthResp ):
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Emitting Signal" << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << "Emitting Signal" << endl;
 			emit loginResponse( t->firstParam( 66 ).toInt(), t->firstParam( 20 ) );
 		break;
 		default:
@@ -251,10 +411,10 @@
 
 void LoginTask::parseCookies( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	for( int i = 0; i < t->paramCount( 59 ); ++i)
-	{	
+	{
 		QString cookie;
 		cookie = t->nthParam( 59, i );
         	if( cookie.startsWith( "Y" ) )
@@ -271,8 +431,7 @@
 			m_cCookie = getcookie( cookie.latin1() );
 		}
     	}
-	if( !m_yCookie.isEmpty() && !m_tCookie.isEmpty() &&
-		!m_cCookie.isEmpty() )
+	if( !m_yCookie.isEmpty() && !m_tCookie.isEmpty())
 		emit haveCookies();
 }
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/logintask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/logintask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/logintask.h	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/logintask.h	2010-01-18 16:30:09.000000000 +0200
@@ -4,7 +4,7 @@
 
     Copyright (c) 2004 Duncan Mac-Vicar P. <duncan@kde.org>
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
 
@@ -27,6 +27,11 @@
 class QString;
 class YMSGTransfer;
 
+namespace KIO
+{
+	class Job;
+}
+
 /**
 @author Duncan Mac-Vicar
 */
@@ -36,7 +41,7 @@
 public:
 	LoginTask(Task *parent);
 	~LoginTask();
-	
+
 	bool take(Transfer* transfer);
 	virtual void onGo();
 
@@ -49,7 +54,7 @@
 	const QString &tCookie();
 	const QString &loginCookie();
 protected:
-	bool forMe( Transfer* transfer ) const;
+	virtual bool forMe( const Transfer* transfer ) const;
 	enum State { InitialState, SentVerify, GotVerifyACK, SentAuth, GotAuthACK, SentAuthResp };
 	void sendVerify();
 	void sendAuth(YMSGTransfer* transfer);
@@ -58,10 +63,20 @@
 	void sendAuthResp_pre_0x0b(const QString &sn, const QString &seed);
 	void handleAuthResp(YMSGTransfer *transfer);
 	void parseCookies( YMSGTransfer *transfer );
+	void sendAuthSixteenStage1(const QString& sn, const QString& seed);
+	void sendAuthSixteenStage2(const QString& token);
+	void sendAuthSixteenStage3(const QString& cryptString);
+protected slots:
+	void handleAuthSixteenStage1Data(KIO::Job*, const QByteArray& data);
+	void handleAuthSixteenStage1Result(KIO::Job*);
+	void handleAuthSixteenStage2Data(KIO::Job*, const QByteArray& data);
+	void handleAuthSixteenStage2Result(KIO::Job*);
+
 signals:
 	void haveSessionID( uint );
 	void haveCookies();
 	void loginResponse( int, const QString& );
+	void buddyListReady();
 private:
 	State mState;
 	Yahoo::Status m_stateOnConnect;
@@ -70,6 +85,10 @@
 	QString m_cCookie;
 	QString m_loginCookie;
 	QString m_verificationWord;
+	QString m_stage1Data;
+	QString m_stage2Data;
+	QString m_challengeString;
+	uint m_sessionID;
 };
 
 #endif
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/logofftask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/logofftask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/logofftask.cpp	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/logofftask.cpp	2010-01-18 18:26:46.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Log off the Yahoo server
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -24,7 +24,7 @@
 
 LogoffTask::LogoffTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 LogoffTask::~LogoffTask()
@@ -33,11 +33,11 @@
 
 void LogoffTask::onGo()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceLogoff);
 	t->setId( client()->sessionID() );
 	send( t );
-	
-	setSuccess( true );
+
+	setSuccess();
 }
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/logofftask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/logofftask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/logofftask.h	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/logofftask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Log off the Yahoo server
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -19,7 +19,6 @@
 
 #include "task.h"
 
-class QString;
 
 /**
 @author André Duffeck
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/mailnotifiertask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/mailnotifiertask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/mailnotifiertask.cpp	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/mailnotifiertask.cpp	2010-01-18 15:07:21.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Notifies about new mails
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -21,12 +21,11 @@
 #include "ymsgtransfer.h"
 #include "yahootypes.h"
 #include "client.h"
-#include <qstring.h>
 #include <kdebug.h>
 
 MailNotifierTask::MailNotifierTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 MailNotifierTask::~MailNotifierTask()
@@ -36,8 +35,6 @@
 
 bool MailNotifierTask::take( Transfer* transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
 	if ( !forMe( transfer ) )
 		return false;
 
@@ -48,11 +45,10 @@
 	return true;
 }
 
-bool MailNotifierTask::forMe( Transfer* transfer ) const
+bool MailNotifierTask::forMe( const Transfer* transfer ) const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	YMSGTransfer *t = 0L;
-	t = dynamic_cast<YMSGTransfer*>(transfer);
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
@@ -64,7 +60,7 @@
 
 void MailNotifierTask::parseMail( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString count = t->firstParam( 9 );
 	QString mail = t->firstParam( 42 );
@@ -74,7 +70,7 @@
 	if( !mail.isEmpty() && !from.isEmpty() && !subject.isEmpty() )
 		emit mailNotify( QString::fromLatin1( "%1 <%2>").arg( from, mail ), subject, count.toInt() );
 	else
-		emit mailNotify( QString::null, QString::null, count.toInt());
+		emit mailNotify( QString(), QString(), count.toInt());
 }
 
 #include "mailnotifiertask.moc"
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/mailnotifiertask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/mailnotifiertask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/mailnotifiertask.h	2010-01-21 13:32:46.808475136 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/mailnotifiertask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Notifies about new mails
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -35,7 +35,7 @@
 	bool take(Transfer *transfer);
 
 protected:
-	bool forMe( Transfer *transfer ) const;
+	virtual bool forMe( const Transfer *transfer ) const;
 	void parseMail( YMSGTransfer *transfer );
 signals:
 	void mailNotify(const QString&, const QString&, int);
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/Makefile.am kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/Makefile.am
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/Makefile.am	2010-01-21 13:32:46.801489314 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/Makefile.am	2010-01-18 04:58:51.000000000 +0200
@@ -14,10 +14,10 @@
 		requestpicturetask.cpp yahoobuddyiconloader.cpp stealthtask.cpp sendpicturetask.cpp \
 		webcamtask.cpp conferencetask.cpp sendauthresptask.cpp pingtask.cpp yabtask.cpp \
 		yabentry.cpp modifyyabtask.cpp chatsessiontask.cpp sendfiletask.cpp filetransfernotifiertask.cpp \
-		receivefiletask.cpp
+		receivefiletask.cpp yahoochattask.cpp
 libkyahoo_la_LDFLAGS = -no-undefined $(all_libraries)
 libkyahoo_la_LIBADD = $(LIB_QT)
 
 noinst_HEADERS = logintask.h yabentry.h yabtask.h modifyyabtask.h \
-	chatsessiontask.h
+	chatsessiontask.h yahoochattask.h
 KDE_OPTIONS = nofinal
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/Makefile.in kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/Makefile.in
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/Makefile.in	2010-01-21 13:32:46.804475136 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/Makefile.in	2010-01-19 15:44:17.000000000 +0200
@@ -63,7 +63,7 @@
 	sendpicturetask.lo webcamtask.lo conferencetask.lo \
 	sendauthresptask.lo pingtask.lo yabtask.lo yabentry.lo \
 	modifyyabtask.lo chatsessiontask.lo sendfiletask.lo \
-	filetransfernotifiertask.lo receivefiletask.lo
+	filetransfernotifiertask.lo receivefiletask.lo yahoochattask.lo
 #>- libkyahoo_la_OBJECTS = $(am_libkyahoo_la_OBJECTS)
 #>+ 14
 libkyahoo_la_OBJECTS = client.lo task.lo connector.lo \
@@ -79,7 +79,7 @@
 	sendpicturetask.lo webcamtask.lo conferencetask.lo \
 	sendauthresptask.lo pingtask.lo yabtask.lo yabentry.lo \
 	modifyyabtask.lo chatsessiontask.lo sendfiletask.lo \
-	filetransfernotifiertask.lo receivefiletask.lo
+	filetransfernotifiertask.lo receivefiletask.lo yahoochattask.lo
 #>- libkyahoo_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
 #>- 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
 #>- 	$(CXXFLAGS) $(libkyahoo_la_LDFLAGS) $(LDFLAGS) -o $@
@@ -446,7 +446,7 @@
 		requestpicturetask.cpp yahoobuddyiconloader.cpp stealthtask.cpp sendpicturetask.cpp \
 		webcamtask.cpp conferencetask.cpp sendauthresptask.cpp pingtask.cpp yabtask.cpp \
 		yabentry.cpp modifyyabtask.cpp chatsessiontask.cpp sendfiletask.cpp filetransfernotifiertask.cpp \
-		receivefiletask.cpp
+		receivefiletask.cpp yahoochattask.cpp
 
 libkyahoo_la_LDFLAGS = -no-undefined $(all_libraries)
 libkyahoo_la_LIBADD = $(LIB_QT)
@@ -542,6 +542,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/picturenotifiertask.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pingtask.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/receivefiletask.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yahoochattask.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/requestpicturetask.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/safedelete.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendauthresptask.Plo@am__quote@
@@ -902,6 +903,7 @@
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
 
+
 #>+ 3
 yabtask.moc: $(srcdir)/yabtask.h
 	$(MOC) $(srcdir)/yabtask.h -o yabtask.moc
@@ -945,6 +947,13 @@
 mocs: filetransfernotifiertask.moc
 
 #>+ 3
+modifybuddytask.moc: $(srcdir)/modifybuddytask.h
+	$(MOC) $(srcdir)/modifybuddytask.h -o modifybuddytask.moc
+
+#>+ 2
+mocs: modifybuddytask.moc
+
+#>+ 3
 connector.moc: $(srcdir)/connector.h
 	$(MOC) $(srcdir)/connector.h -o connector.moc
 
@@ -973,11 +982,11 @@
 mocs: yahoobytestream.moc
 
 #>+ 3
-receivefiletask.moc: $(srcdir)/receivefiletask.h
-	$(MOC) $(srcdir)/receivefiletask.h -o receivefiletask.moc
+yahoochattask.moc: $(srcdir)/yahoochattask.h
+	$(MOC) $(srcdir)/yahoochattask.h -o yahoochattask.moc
 
 #>+ 2
-mocs: receivefiletask.moc
+mocs: yahoochattask.moc
 
 #>+ 3
 requestpicturetask.moc: $(srcdir)/requestpicturetask.h
@@ -987,18 +996,24 @@
 mocs: requestpicturetask.moc
 
 #>+ 3
-conferencetask.moc: $(srcdir)/conferencetask.h
-	$(MOC) $(srcdir)/conferencetask.h -o conferencetask.moc
+receivefiletask.moc: $(srcdir)/receivefiletask.h
+	$(MOC) $(srcdir)/receivefiletask.h -o receivefiletask.moc
+
+yahoochattask.moc: $(srcdir)/yahoochattask.h
+	$(MOC) $(srcdir)/yahoochattask.h -o yahoochattask.moc
+
 
 #>+ 2
-mocs: conferencetask.moc
+mocs: receivefiletask.moc
+
+mocs: yahoochattask.moc
 
 #>+ 3
-stream.moc: $(srcdir)/stream.h
-	$(MOC) $(srcdir)/stream.h -o stream.moc
+conferencetask.moc: $(srcdir)/conferencetask.h
+	$(MOC) $(srcdir)/conferencetask.h -o conferencetask.moc
 
 #>+ 2
-mocs: stream.moc
+mocs: conferencetask.moc
 
 #>+ 3
 sendauthresptask.moc: $(srcdir)/sendauthresptask.h
@@ -1008,6 +1023,13 @@
 mocs: sendauthresptask.moc
 
 #>+ 3
+stream.moc: $(srcdir)/stream.h
+	$(MOC) $(srcdir)/stream.h -o stream.moc
+
+#>+ 2
+mocs: stream.moc
+
+#>+ 3
 picturenotifiertask.moc: $(srcdir)/picturenotifiertask.h
 	$(MOC) $(srcdir)/picturenotifiertask.h -o picturenotifiertask.moc
 
@@ -1036,18 +1058,18 @@
 mocs: coreprotocol.moc
 
 #>+ 3
-sendfiletask.moc: $(srcdir)/sendfiletask.h
-	$(MOC) $(srcdir)/sendfiletask.h -o sendfiletask.moc
+ymsgprotocol.moc: $(srcdir)/ymsgprotocol.h
+	$(MOC) $(srcdir)/ymsgprotocol.h -o ymsgprotocol.moc
 
 #>+ 2
-mocs: sendfiletask.moc
+mocs: ymsgprotocol.moc
 
 #>+ 3
-ymsgprotocol.moc: $(srcdir)/ymsgprotocol.h
-	$(MOC) $(srcdir)/ymsgprotocol.h -o ymsgprotocol.moc
+sendfiletask.moc: $(srcdir)/sendfiletask.h
+	$(MOC) $(srcdir)/sendfiletask.h -o sendfiletask.moc
 
 #>+ 2
-mocs: ymsgprotocol.moc
+mocs: sendfiletask.moc
 
 #>+ 3
 statusnotifiertask.moc: $(srcdir)/statusnotifiertask.h
@@ -1078,6 +1100,13 @@
 mocs: webcamtask.moc
 
 #>+ 3
+modifyyabtask.moc: $(srcdir)/modifyyabtask.h
+	$(MOC) $(srcdir)/modifyyabtask.h -o modifyyabtask.moc
+
+#>+ 2
+mocs: modifyyabtask.moc
+
+#>+ 3
 yahooconnector.moc: $(srcdir)/yahooconnector.h
 	$(MOC) $(srcdir)/yahooconnector.h -o yahooconnector.moc
 
@@ -1099,13 +1128,6 @@
 mocs: messagereceivertask.moc
 
 #>+ 3
-modifyyabtask.moc: $(srcdir)/modifyyabtask.h
-	$(MOC) $(srcdir)/modifyyabtask.h -o modifyyabtask.moc
-
-#>+ 2
-mocs: modifyyabtask.moc
-
-#>+ 3
 sendnotifytask.moc: $(srcdir)/sendnotifytask.h
 	$(MOC) $(srcdir)/sendnotifytask.h -o sendnotifytask.moc
 
@@ -1114,10 +1136,10 @@
 
 #>+ 3
 clean-metasources:
-	-rm -f  yabtask.moc listtask.moc yahoobuddyiconloader.moc bytestream.moc logintask.moc filetransfernotifiertask.moc connector.moc sendpicturetask.moc yahooclientstream.moc yahoobytestream.moc receivefiletask.moc requestpicturetask.moc conferencetask.moc stream.moc sendauthresptask.moc picturenotifiertask.moc task.moc client.moc coreprotocol.moc sendfiletask.moc ymsgprotocol.moc statusnotifiertask.moc safedelete.moc mailnotifiertask.moc webcamtask.moc yahooconnector.moc inputprotocolbase.moc messagereceivertask.moc modifyyabtask.moc sendnotifytask.moc
+	-rm -f  yabtask.moc listtask.moc yahoobuddyiconloader.moc bytestream.moc logintask.moc filetransfernotifiertask.moc modifybuddytask.moc connector.moc sendpicturetask.moc yahooclientstream.moc yahoobytestream.moc yahoochattask.moc requestpicturetask.moc receivefiletask.moc yahoochattask.moc conferencetask.moc sendauthresptask.moc stream.moc picturenotifiertask.moc task.moc client.moc coreprotocol.moc ymsgprotocol.moc sendfiletask.moc statusnotifiertask.moc safedelete.moc mailnotifiertask.moc webcamtask.moc modifyyabtask.moc yahooconnector.moc inputprotocolbase.moc messagereceivertask.moc sendnotifytask.moc
 
 #>+ 2
-KDE_DIST=yahoobuddyiconloader.h changestatustask.h coreprotocol.h yahoo_fn.h listtask.h ymsgprotocol.h picturenotifiertask.h safedelete.h sendmessagetask.h receivefiletask.h oscartypes.h sendnotifytask.h bytestream.h ymsgtransfer.h client.h logofftask.h transfer.h yahoobytestream.h sha1.h Makefile.in statusnotifiertask.h md5.h connector.h conferencetask.h yahootypes.h libyahoo.h pingtask.h stealthtask.h sendfiletask.h webcamtask.h stream.h task.h yahooclientstream.h sendpicturetask.h yahooconnector.h configure.in.in mailnotifiertask.h requestpicturetask.h sendauthresptask.h modifybuddytask.h messagereceivertask.h filetransfernotifiertask.h inputprotocolbase.h Makefile.am 
+KDE_DIST=libyahoo.h yahoobuddyiconloader.h changestatustask.h pingtask.h coreprotocol.h yahoo_fn.h stealthtask.h sendfiletask.h listtask.h ymsgprotocol.h webcamtask.h stream.h picturenotifiertask.h safedelete.h task.h yahoochattask.h yahooclientstream.h sendmessagetask.h receivefiletask.h yahoochattask.h sendnotifytask.h oscartypes.h bytestream.h ymsgtransfer.h client.h logofftask.h transfer.h yahoobytestream.h sendpicturetask.h yahooconnector.h configure.in.in sha1.h mailnotifiertask.h requestpicturetask.h sendauthresptask.h Makefile.in modifybuddytask.h statusnotifiertask.h messagereceivertask.h md5.h filetransfernotifiertask.h inputprotocolbase.h connector.h yahoochattask.cpp Makefile.am conferencetask.h yahootypes.h 
 
 #>+ 2
 docs-am:
@@ -1180,9 +1202,10 @@
 kde-rpo-clean:
 	-rm -f *.rpo
 
-#>+ 63
+#>+ 67
 sendpicturetask.o: sendpicturetask.moc 
 statusnotifiertask.lo: statusnotifiertask.moc 
+yahoochattask.lo: yahoochattask.moc 
 yahooconnector.lo: yahooconnector.moc 
 yahoobytestream.o: yahoobytestream.moc 
 yahoobuddyiconloader.lo: yahoobuddyiconloader.moc 
@@ -1194,6 +1217,7 @@
 nmcheck-am: nmcheck
 picturenotifiertask.o: picturenotifiertask.moc 
 receivefiletask.lo: receivefiletask.moc 
+yahoochattask.lo: yahoochattask.moc
 bytestream.lo: bytestream.moc 
 picturenotifiertask.lo: picturenotifiertask.moc 
 sendauthresptask.lo: sendauthresptask.moc 
@@ -1209,12 +1233,15 @@
 webcamtask.o: webcamtask.moc 
 webcamtask.lo: webcamtask.moc 
 receivefiletask.o: receivefiletask.moc 
+yahoochattask.o: yahoochattask.moc
 statusnotifiertask.o: statusnotifiertask.moc 
 modifyyabtask.lo: modifyyabtask.moc 
 listtask.lo: listtask.moc 
+yahoochattask.o: yahoochattask.moc 
 task.lo: task.moc 
 stream.lo: stream.moc 
 yabtask.lo: yabtask.moc 
+modifybuddytask.o: modifybuddytask.moc 
 yahooclientstream.lo: yahooclientstream.moc 
 yahoobuddyiconloader.o: yahoobuddyiconloader.moc 
 task.o: task.moc 
@@ -1229,6 +1256,7 @@
 safedelete.lo: safedelete.moc 
 sendfiletask.lo: sendfiletask.moc 
 connector.lo: connector.moc 
+modifybuddytask.lo: modifybuddytask.moc 
 sendfiletask.o: sendfiletask.moc 
 mailnotifiertask.lo: mailnotifiertask.moc 
 messagereceivertask.lo: messagereceivertask.moc 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/md5.c kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/md5.c
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/md5.c	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/md5.c	2010-01-18 18:25:03.000000000 +0200
@@ -37,9 +37,7 @@
   1999-05-03 lpd Original version.
  */
 
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include "../../../../config.h"
 
 #include "md5.h"
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/messagereceivertask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/messagereceivertask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/messagereceivertask.cpp	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/messagereceivertask.cpp	2010-01-18 15:03:35.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Receive Messages
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -21,12 +21,11 @@
 #include "ymsgtransfer.h"
 #include "yahootypes.h"
 #include "client.h"
-#include <qstring.h>
 #include <kdebug.h>
 
 MessageReceiverTask::MessageReceiverTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 MessageReceiverTask::~MessageReceiverTask()
@@ -35,8 +34,6 @@
 
 bool MessageReceiverTask::take( Transfer* transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
 	if ( !forMe( transfer ) )
 		return false;
 
@@ -44,7 +41,7 @@
 	t = dynamic_cast<YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
-	
+
 	if( t->service() == Yahoo::ServiceNotify )
 		parseNotify( t );
 	else
@@ -53,19 +50,17 @@
 	return true;
 }
 
-bool MessageReceiverTask::forMe( Transfer* transfer ) const
+bool MessageReceiverTask::forMe( const Transfer* transfer ) const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
-	YMSGTransfer *t = 0L;
-	t = dynamic_cast<YMSGTransfer*>(transfer);
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
 	if ( t->service() == Yahoo::ServiceMessage ||
 		t->service() == Yahoo::ServiceGameMsg ||
 		t->service() == Yahoo::ServiceSysMessage ||
-		t->service() == Yahoo::ServiceNotify )	
+		t->service() == Yahoo::ServiceNotify )
 		return true;
 	else
 		return false;
@@ -73,7 +68,7 @@
 
 void MessageReceiverTask::parseMessage( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	int cnt = t->paramCount( 5 );
 	for( int i = 0; i < cnt; ++i )
@@ -89,26 +84,26 @@
 		// Separating by key "5" (sender) doesn't work in that case, because the "1" and "4" keys are sent before the "5" key
 		if( cnt == 1 )
 			from = t->firstParam( 1 ).isEmpty() ? t->firstParam( 4 ) : t->firstParam( 1 );
-	
+
 		if( !sysmsg.isEmpty() )
 		{
 			client()->notifyError( "Server message received: ", sysmsg, Client::Error );
 			continue;
 		}
-	
+
 		if( msg.isEmpty() )
 		{
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Got a empty message. Dropped." << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << "Got a empty message. Dropped." << endl;
 			continue;
 		}
-	
+
 		if( utf8.startsWith( "1" ) )
 			msg = QString::fromUtf8( msg.latin1() );
-	
+
 		if( t->service() == Yahoo::ServiceSysMessage )
 			emit systemMessage( sysmsg );
 		else
-		{	
+		{
 			if( msg.startsWith( "<ding>" ) )
 				emit gotBuzz( from, timestamp.toLong() );
 			else
@@ -119,7 +114,7 @@
 
 void MessageReceiverTask::parseNotify( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString from = t->firstParam( 4 );
 	//QString to = t->firstParam( 5 );
@@ -135,12 +130,12 @@
 	{
 		if( ind.startsWith(" ") )
 		{
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Got a WebcamInvitation." << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << "Got a WebcamInvitation." << endl;
 			emit gotWebcamInvite( from );
 		}
 		else
 		{
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Got a WebcamRequest-Response: " << ind.toInt() << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << "Got a WebcamRequest-Response: " << ind.toInt() << endl;
 		}
 	}
 }
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/messagereceivertask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/messagereceivertask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/messagereceivertask.h	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/messagereceivertask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Receive Messages
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -35,7 +35,7 @@
 	bool take(Transfer *transfer);
 
 protected:
-	bool forMe( Transfer *transfer ) const;
+	virtual bool forMe( const Transfer *transfer ) const;
 	void parseMessage( YMSGTransfer *transfer );
 	void parseNotify( YMSGTransfer *transfer );
 signals:
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/modifybuddytask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/modifybuddytask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/modifybuddytask.cpp	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/modifybuddytask.cpp	2010-01-18 18:41:56.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Add a buddy to the Contactlist
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005-2006 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -19,21 +19,70 @@
 #include "ymsgtransfer.h"
 #include "yahootypes.h"
 #include "client.h"
-#include <qstring.h>
+
 #include <kdebug.h>
 
 ModifyBuddyTask::ModifyBuddyTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 ModifyBuddyTask::~ModifyBuddyTask()
 {
 }
 
+bool ModifyBuddyTask::take( Transfer* transfer )
+{
+     if( !forMe( transfer ) )
+	  return false;
+
+     YMSGTransfer *t = static_cast<YMSGTransfer *>(transfer);
+
+     bool success = t->firstParam(66) == "0";
+
+     switch(t->service())
+     {
+     case Yahoo::ServiceBuddyAdd:
+	  emit buddyAddResult(m_target, m_group, success);
+	  break;
+     case Yahoo::ServiceBuddyRemove:
+	  emit buddyRemoveResult(m_target, m_group, success);
+	  break;
+     case Yahoo::ServiceBuddyChangeGroup:
+	  emit buddyChangeGroupResult(m_target, m_group, success);
+     default:
+	  return false;
+     }
+
+     if(success)
+	  setSuccess();
+     else
+	  setError();
+
+     return true;
+}
+
+bool ModifyBuddyTask::forMe( const Transfer* transfer ) const
+{
+     const YMSGTransfer *t = 0L;
+     t = dynamic_cast<const YMSGTransfer*>(transfer);
+
+     if(!t)
+	  return false;
+
+     if( (t->service() == Yahoo::ServiceBuddyAdd ||
+	  t->service() == Yahoo::ServiceBuddyRemove) &&
+	 m_target == t->firstParam(7).data() )
+     {
+	  return true;
+     }
+
+     return false;
+}
+
 void ModifyBuddyTask::onGo()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	switch( m_type )
 	{
@@ -47,31 +96,31 @@
 			moveBuddy();
 		break;
 	}
-
-
-	
-	setSuccess( true );
 }
 
 void ModifyBuddyTask::addBuddy()
 {
-	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceAddBuddy);
+	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceBuddyAdd);
 	t->setId( client()->sessionID() );
+	t->setParam( 65, m_group.local8Bit() );
+	t->setParam( 97, 1 );           // UTF-8
 	t->setParam( 1, client()->userId().local8Bit() );
-	t->setParam( 7, m_target.local8Bit() );
-	t->setParam( 14, m_message.utf8() );
-	t->setParam( 65, m_group.local8Bit() );	
-	t->setParam( 97, 1 );	// UTF-8
+	t->setParam( 302,  319 );
+	t->setParam( 300,  319 );
+	t->setParam( 7,  m_target.local8Bit() );
+	t->setParam( 334,  0 );
+	t->setParam( 301, 319 );
+	t->setParam( 303, 319 );
 	send( t );
 }
 
 void ModifyBuddyTask::removeBuddy()
 {
-	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceRemBuddy);
+	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceBuddyRemove);
 	t->setId( client()->sessionID() );
 	t->setParam( 1, client()->userId().local8Bit() );
 	t->setParam( 7, m_target.local8Bit() );
-	t->setParam( 65, m_group.local8Bit() );	
+	t->setParam( 65, m_group.local8Bit() );
 	send( t );
 }
 
@@ -114,3 +163,5 @@
 {
 	m_type = type;
 }
+
+#include "modifybuddytask.moc"
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/modifybuddytask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/modifybuddytask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/modifybuddytask.h	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/modifybuddytask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Add, remove or move a buddy to the Contactlist
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -26,6 +26,7 @@
 */
 class ModifyBuddyTask : public Task
 {
+Q_OBJECT
 public:
 	enum Type { AddBuddy, RemoveBuddy, MoveBuddy };
 	ModifyBuddyTask(Task *parent);
@@ -33,11 +34,22 @@
 	
 	virtual void onGo();
 	
+	bool take(Transfer *transfer);
+
 	void setType( Type type );
 	void setMessage( const QString &text );
 	void setTarget( const QString &target );
 	void setGroup( const QString &group );
 	void setOldGroup( const QString &group );
+
+signals:
+	void buddyAddResult( const QString &, const QString &, bool );
+	void buddyRemoveResult( const QString &, const QString &, bool );
+	void buddyChangeGroupResult( const QString &, const QString &, bool );
+
+protected:
+	virtual bool forMe( const Transfer *transfer ) const;
+
 private:
 	void addBuddy();
 	void removeBuddy();
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/modifyyabtask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/modifyyabtask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/modifyyabtask.cpp	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/modifyyabtask.cpp	2010-01-19 15:04:17.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     modifyyabtask.h - Handles the Yahoo Address Book
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
     Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
 
     *************************************************************************
@@ -33,7 +33,7 @@
 using namespace KNetwork;
 ModifyYABTask::ModifyYABTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	m_socket = 0;
 }
 
@@ -44,7 +44,7 @@
 
 void ModifyYABTask::onGo()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	m_socket = new KBufferedSocket( "address.yahoo.com", QString::number(80) );
 	connect( m_socket, SIGNAL( connected( const KResolverEntry& ) ), this, SLOT( connectSucceeded() ) );
 	connect( m_socket, SIGNAL( gotError(int) ), this, SLOT( connectFailed(int) ) );
@@ -66,7 +66,7 @@
 	root.setAttribute( "k", client()->userId() );
 	root.setAttribute( "cc", "1" );
 	doc.appendChild( root );
-	
+
 	QDomElement contact = doc.createElement( "ct" );
 	entry.fillQDomElement( contact );
 	switch( m_action )
@@ -90,13 +90,14 @@
 void ModifyYABTask::connectFailed( int i)
 {
 	m_socket->close();
-	client()->notifyError( i18n( "An error occured saving the Addressbook entry." ), 
+	client()->notifyError( i18n( "An error occurred while saving the address book entry." ),
 			QString( "%1 - %2").arg(i).arg(static_cast<const KBufferedSocket*>( sender() )->errorString()), Client::Error );
 }
 
 void ModifyYABTask::connectSucceeded()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
+	KBufferedSocket* socket = const_cast<KBufferedSocket*>( static_cast<const KBufferedSocket*>( sender() ) );
 
 	QString header = QString::fromLatin1("POST /yab/us?v=XM&prog=ymsgr&.intl=us&sync=1&tags=short&noclear=1& HTTP/1.1\r\n"
 			"Cookie: Y=%1; T=%2; C=%3 ;B=fckeert1kk1nl&b=2\r\n"
@@ -112,38 +113,36 @@
 	QDataStream stream( buffer, IO_WriteOnly );
 	stream.writeRawBytes( header.local8Bit(), header.length() );
 	stream.writeRawBytes( m_postData.utf8(), m_postData.utf8().size() );
-	
-	if( m_socket->writeBlock( buffer, buffer.size() ) )
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Upload Successful. Waiting for confirmation..." << endl;
+
+	if( socket->writeBlock( buffer, buffer.size() ) )
+		kdDebug(YAHOO_RAW_DEBUG) << "Upload Successful. Waiting for confirmation..." << endl;
 	else
 	{
-		client()->notifyError( i18n( "An error occured saving the Addressbook entry." ), m_socket->errorString(), Client::Error );
-		setSuccess( false );
+		client()->notifyError( i18n( "An error occurred while saving the address book entry." ), m_socket->errorString(), Client::Error );
+		setError();
 		return;
 	}
-	
+
 	connect( m_socket, SIGNAL( readyRead() ), this, SLOT( slotRead() ) );
 }
 
 void ModifyYABTask::slotRead()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	QByteArray ar( m_socket->bytesAvailable() );
-	m_socket->readBlock ( ar.data (), ar.size () );
-	QString buf( ar );
-	m_data += buf.right( buf.length() - buf.find("<?xml") );
+	KBufferedSocket* socket = const_cast<KBufferedSocket*>( static_cast<const KBufferedSocket*>( sender() ) );
+	QByteArray ar( socket->bytesAvailable() );
+	socket->readBlock( ar.data (), ar.size () );
+	QString data( ar );
+	data = data.right( data.length() - data.find("<?xml") );
 
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << m_data.find("</ab>") << endl;
 	if( m_data.find("</ab>") < 0 )
 		return;						// Need more data
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << m_data.find("</ab>") << endl;
 
 	m_socket->close();
 	QDomDocument doc;
 	QDomNodeList list;
 	QDomElement e;
-	uint it = 0;
-	
+	int it = 0;
+
 	doc.setContent( m_data );
 
 	list = doc.elementsByTagName( "ab" );			// Get the Addressbook
@@ -151,7 +150,7 @@
 		if( !list.item( it ).isElement() )
 			continue;
 		e = list.item( it ).toElement();
-		
+
 		if( !e.attribute( "lm" ).isEmpty() )
 			emit gotRevision( e.attribute( "lm" ).toLong(), true );
 
@@ -161,11 +160,11 @@
 
 	list = doc.elementsByTagName( "ct" );			// Get records
 	for( it = 0; it < list.count(); it++ )	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Parsing entry..." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Parsing entry..." << endl;
 		if( !list.item( it ).isElement() )
 			continue;
 		e = list.item( it ).toElement();
-		
+
 		YABEntry *entry = new YABEntry;
 		entry->fromQDomElement( e );
 		entry->source = YABEntry::SourceYAB;
@@ -175,31 +174,31 @@
 		case EditEntry:
 			if( !e.attribute( "es" ).isEmpty() && e.attribute( "es" ) != "0" )		// Check for edit errors
 			{
-				emit error( entry, i18n("The Yahoo Addressbook entry could not be saved:\n%1 - %2").arg( e.attribute("es") ).arg( e.attribute("ee") ) );
+				emit error( entry, i18n("The Yahoo Address Book entry could not be saved:\n%1 - %2").arg( e.attribute("es") ).arg( e.attribute("ee") ) );
 				continue;
 			}
 			break;
 		case AddEntry:
 			if( !e.attribute( "as" ).isEmpty() && e.attribute( "as" ) != "0" )		// Check for add errors
 			{
-				emit error( entry, i18n("The Yahoo Addressbook entry could not be created:\n%1 - %2").arg( e.attribute("as") ).arg( e.attribute("ae") ) );
+				emit error( entry, i18n("The Yahoo Address Book entry could not be created:\n%1 - %2").arg( e.attribute("as") ).arg( e.attribute("ae") ) );
 				continue;
 			}
 			break;
 		case DeleteEntry:
 			if( !e.attribute( "ds" ).isEmpty() && e.attribute( "ds" ) != "0" )		// Check for delete errors
 			{
-				emit error( entry, i18n("The Yahoo Addressbook entry could not be deleted:\n%1 - %2").arg( e.attribute("ds") ).arg( e.attribute("de") ) );
+				emit error( entry, i18n("The Yahoo Address Book entry could not be deleted:\n%1 - %2").arg( e.attribute("ds") ).arg( e.attribute("de") ) );
 				continue;
 			}
 			break;
 		}
 
-		// No errors occured
+		// No errors occurred
 		emit gotEntry( entry );
 	}
 
-	
-	setSuccess( true );
+
+	setSuccess();
 }
 #include "modifyyabtask.moc"
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/modifyyabtask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/modifyyabtask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/modifyyabtask.h	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/modifyyabtask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     modifyyabtask.h - Saves a YAB entry
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
     Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
 
     *************************************************************************
@@ -21,7 +21,6 @@
 #include "task.h"
 #include "yabentry.h"
 
-struct KURL;
 namespace KIO	{ 
 	class Job;
 	class TransferJob;
@@ -29,7 +28,6 @@
 namespace KNetwork	{ 
 	class KBufferedSocket;
 }
-class QDomElement;
 
 /**
 @author André Duffeck
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/oscartypes.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/oscartypes.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/oscartypes.h	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/oscartypes.h	2010-01-18 04:23:48.000000000 +0200
@@ -16,16 +16,16 @@
     *************************************************************************
 */
 
-#ifndef _YAHOOTYPES_H_
-#define _YAHOOTYPES_H_
+#ifndef OSCARTYPES_H
+#define OSCARTYPES_H
 
 #include <qglobal.h>
 
 namespace Yahoo
 {
-	typedef Q_UINT8 BYTE;
-	typedef Q_UINT16 WORD;
-	typedef Q_UINT32 DWORD;
+	typedef quint8 BYTE;
+	typedef quint16 WORD;
+	typedef quint32 DWORD;
 }
 
-#endif
+#endif // OSCARTYPES_H
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/picturenotifiertask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/picturenotifiertask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/picturenotifiertask.cpp	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/picturenotifiertask.cpp	2010-01-18 14:07:22.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Notifies about buddy icons
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -19,15 +19,15 @@
 #include "ymsgtransfer.h"
 #include "yahootypes.h"
 #include "client.h"
-#include <qstring.h>
+
 #include <qstringlist.h>
-#include <kurl.h>
 #include <kdebug.h>
 #include <klocale.h>
 
+
 PictureNotifierTask::PictureNotifierTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 PictureNotifierTask::~PictureNotifierTask()
@@ -37,23 +37,23 @@
 
 bool PictureNotifierTask::take( Transfer* transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
 	if ( !forMe( transfer ) )
 		return false;
-	
+
 	YMSGTransfer *t = 0L;
 	t = dynamic_cast<YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
 	switch( t->service() )
-	{	
+	{
 		case Yahoo::ServicePictureStatus:
 			parsePictureStatus( t );
+			parsePicture( t );
 		break;
 		case Yahoo::ServicePictureChecksum:
 			parsePictureChecksum( t );
+			parsePicture( t );
 		break;
 		case Yahoo::ServicePicture:
 			parsePicture( t );
@@ -63,16 +63,15 @@
 		break;
 		default:
 		break;
-	}	
+	}
 
 	return true;
 }
 
-bool PictureNotifierTask::forMe( Transfer* transfer ) const
+bool PictureNotifierTask::forMe( const Transfer* transfer ) const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	YMSGTransfer *t = 0L;
-	t = dynamic_cast<YMSGTransfer*>(transfer);
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
@@ -89,37 +88,37 @@
 
 void PictureNotifierTask::parsePictureStatus( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString	nick;		/* key = 4 */
 	int state;		/* key = 213  */
 
 	nick = t->firstParam( 4 );
 	state = t->firstParam( 213 ).toInt();
-	
+
 	emit pictureStatusNotify( nick, state );
 }
 
 void PictureNotifierTask::parsePictureChecksum( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString	nick;		/* key = 4 */
 	int checksum;		/* key = 192  */
 
 	nick = t->firstParam( 4 );
 	checksum = t->firstParam( 192 ).toInt();
-	
+
 	if( nick != client()->userId() )
 		emit pictureChecksumNotify( nick, checksum );
 }
 
 void PictureNotifierTask::parsePicture( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString	nick;		/* key = 4 */
-	int type;		/* key = 13: 1 = request, 2 = notification */
+	int type;		/* key = 13: 1 = request, 2 = notification, 0 = Just changed */
 	QString url;		/* key = 20 */
 	int checksum;		/* key = 192  */
 
@@ -127,30 +126,34 @@
 	url = t->firstParam( 20 );
 	checksum = t->firstParam( 192 ).toInt();
 	type = t->firstParam( 13 ).toInt();
-	
+
 	if( type == 1 )
 		emit pictureRequest( nick );
+	else if( type == 0 )
+		emit pictureInfoNotify( nick, KURL( url ), checksum );
 	else if( type == 2 )
 		emit pictureInfoNotify( nick, KURL( url ), checksum );
 }
 
 void PictureNotifierTask::parsePictureUploadResponse( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString url;
 	QString error;
+	int expires;
 
 	url = t->firstParam( 20 );
 	error = t->firstParam( 16 );
-	
+	expires = t->firstParam( 38 ).toInt();
+
 	if( !error.isEmpty() )
 		client()->notifyError(i18n("The picture was not successfully uploaded"), error, Client::Error );
 
 	if( !url.isEmpty() )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Emitting url: " << url << endl;
-		emit pictureUploaded( url );
+		kdDebug(YAHOO_RAW_DEBUG) << "Emitting url: " << url << " Picture expires: " << expires << endl;
+		emit pictureUploaded( url, expires );
 	}
 }
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/picturenotifiertask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/picturenotifiertask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/picturenotifiertask.h	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/picturenotifiertask.h	2010-01-18 14:06:24.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Notifies about buddy icons
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -19,8 +19,9 @@
 
 #include "task.h"
 
+#include <kurl.h>
+
 class QString;
-class KURL;
 class YMSGTransfer;
 /**
 @author André Duffeck
@@ -31,11 +32,11 @@
 public:
 	PictureNotifierTask(Task *parent);
 	~PictureNotifierTask();
-	
+
 	bool take(Transfer *transfer);
 
 protected:
-	bool forMe( Transfer *transfer ) const;
+	virtual bool forMe( const Transfer *transfer ) const;
 	void parsePictureChecksum( YMSGTransfer *transfer );
 	void parsePictureStatus( YMSGTransfer *transfer );
 	void parsePicture( YMSGTransfer *transfer );
@@ -43,9 +44,9 @@
 signals:
 	void pictureStatusNotify( const QString &, int );
 	void pictureChecksumNotify( const QString &, int );
-	void pictureInfoNotify( const QString &, KURL, int ); 
+	void pictureInfoNotify( const QString &, KURL, int );
 	void pictureRequest( const QString & );
-	void pictureUploaded( const QString & );
+	void pictureUploaded( const QString &, int );
 };
 
 #endif
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/pingtask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/pingtask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/pingtask.cpp	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/pingtask.cpp	2010-01-19 15:18:36.000000000 +0200
@@ -2,7 +2,7 @@
     pingtask.cpp
     Send a ping to the server
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
 
     Kopete    (c) 2002-2006 by the Kopete developers  <kopete-devel@kde.org>
 
@@ -26,7 +26,7 @@
 
 PingTask::PingTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 }
 
 PingTask::~PingTask()
@@ -35,12 +35,12 @@
 
 void PingTask::onGo()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServicePing7);
 	t->setParam( 0, client()->userId().local8Bit() );
 	t->setId( client()->sessionID() );
 	send( t );
 	
-	setSuccess( true );
+	setSuccess();
 }
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/pingtask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/pingtask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/pingtask.h	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/pingtask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     pingtask.h
     Send a ping to the server
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
 
     Kopete    (c) 2002-2006 by the Kopete developers  <kopete-devel@kde.org>
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/receivefiletask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/receivefiletask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/receivefiletask.cpp	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/receivefiletask.cpp	2010-01-19 01:56:12.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Receive a file
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -19,8 +19,9 @@
 #include "ymsgtransfer.h"
 #include "yahootypes.h"
 #include "client.h"
-#include <qstring.h>
+
 #include <qtimer.h>
+#include <qfile.h>
 #include <kdebug.h>
 #include <klocale.h>
 #include <kio/global.h>
@@ -29,7 +30,7 @@
 
 ReceiveFileTask::ReceiveFileTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	m_transmitted = 0;
 	m_file = 0;
 	m_transferJob = 0;
@@ -43,7 +44,7 @@
 
 void ReceiveFileTask::onGo()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceFileTransfer7);
 	switch( m_type )
 	{
@@ -52,7 +53,8 @@
 		if( !m_file->open( IO_WriteOnly ) )
 		{
 			emit error( m_transferId, KIO::ERR_CANNOT_OPEN_FOR_WRITING, i18n("Could not open file for writing.") );
-			setSuccess( false );
+			setError();
+			delete t;
 			return;
 		}
 		m_transferJob = KIO::get( m_remoteUrl, false, false );
@@ -66,7 +68,7 @@
 		t->setParam( 5, m_userId.local8Bit() );
 		t->setParam( 265, m_remoteUrl.url().local8Bit() );
 		t->setParam( 222, 3 );
-	
+
 		send( t );
 		break;
 	case FileTransfer7Reject:
@@ -75,7 +77,7 @@
 		t->setParam( 5, m_userId.local8Bit() );
 		t->setParam( 265, m_remoteUrl.url().local8Bit() );
 		t->setParam( 222, 4 );
-	
+
 		send( t );
 		break;
 	default:
@@ -85,23 +87,23 @@
 
 bool ReceiveFileTask::take( Transfer* transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+
 	if ( !forMe( transfer ) )
 		return false;
-	
+
 	YMSGTransfer *t = static_cast<YMSGTransfer*>(transfer);
 
 	parseFileTransfer7Info( t );
-	
+
 	return true;
 }
 
-bool ReceiveFileTask::forMe( Transfer *transfer ) const
+bool ReceiveFileTask::forMe( const Transfer *transfer ) const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	YMSGTransfer *t = 0L;
-	t = dynamic_cast<YMSGTransfer*>(transfer);
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
@@ -113,7 +115,7 @@
 			return true;
 		else
 			return false;
-	}	
+	}
 	else
 		return false;
 }
@@ -121,17 +123,16 @@
 void ReceiveFileTask::slotData( KIO::Job *job, const QByteArray& data )
 {
 	Q_UNUSED( job );
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
 	m_transmitted += data.size();
 	emit bytesProcessed( m_transferId, m_transmitted );
 	m_file->writeBlock( data.data() , data.size() );
-	
 }
 
 void ReceiveFileTask::slotComplete( KIO::Job *job )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
 	KIO::TransferJob *transfer = static_cast< KIO::TransferJob * >(job);
 
@@ -139,19 +140,19 @@
 		m_file->close();
 	if ( job->error () || transfer->isErrorPage () )
 	{
-		emit error( m_transferId, KIO::ERR_ABORTED, i18n("An error occured while downloading the file.") );
-		setSuccess( false );
+		emit error( m_transferId, KIO::ERR_ABORTED, i18n("An error occurred while downloading the file.") );
+		setError();
 	}
 	else
 	{
 		emit complete( m_transferId );
-		setSuccess( true );
+		setSuccess();
 	}
 }
 
 void ReceiveFileTask::parseFileTransfer7Info( YMSGTransfer *transfer )
-{	
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+{
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
 	if( transfer->firstParam( 249 ).toInt() == 1 )
 	{
@@ -162,7 +163,7 @@
 		t->setParam( 5, transfer->firstParam( 4 ) );
 		t->setParam( 265, transfer->firstParam( 265 ) );
 		t->setParam( 66, -3 );
-	
+
 		send( t );
 	}
 	else if( transfer->firstParam( 249 ).toInt() == 3 )
@@ -171,7 +172,7 @@
 		if( !m_file->open( IO_WriteOnly ) )
 		{
 			emit error( m_transferId, KIO::ERR_CANNOT_OPEN_FOR_WRITING, i18n("Could not open file for writing.") );
-			setSuccess( false );
+			setError();
 			return;
 		}
 
@@ -183,23 +184,23 @@
 		t->setParam( 27, transfer->firstParam( 27 ) );
 		t->setParam( 249, 3 );			// Use Reflection server
 		t->setParam( 251, transfer->firstParam( 251 ) );
-	
+
 		send( t );
 		// The server expects a HTTP HEAD command prior to the GET
 		m_mimetypeJob = KIO::mimetype(QString::fromLatin1("http://%1/relay?token=%2&sender=%3&recver=%4")
-				.arg(transfer->firstParam( 250 )).arg(transfer->firstParam( 251 )).arg(m_userId).arg(client()->userId()), false);
+				.arg( QString(transfer->firstParam( 250 )) ).arg( QString(transfer->firstParam( 251 )) ).arg(m_userId).arg(client()->userId()), false);
 		m_mimetypeJob->addMetaData("cookies", "manual");
 		m_mimetypeJob->addMetaData("setcookies", QString::fromLatin1("Cookie: T=%1; path=/; domain=.yahoo.com; Y=%2; C=%3;")
 				.arg(client()->tCookie()).arg(client()->yCookie()).arg(client()->cCookie()) );
 
 
 		m_transferJob = KIO::get( QString::fromLatin1("http://%1/relay?token=%2&sender=%3&recver=%4")
-				.arg(transfer->firstParam( 250 )).arg(transfer->firstParam( 251 )).arg(m_userId).arg(client()->userId()), false, false );
+				.arg( QString(transfer->firstParam( 250 )) ).arg( QString(transfer->firstParam( 251 )) ).arg(m_userId).arg(client()->userId()), false, false );
 		QObject::connect( m_transferJob, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotComplete( KIO::Job* ) ) );
 		QObject::connect( m_transferJob, SIGNAL( data( KIO::Job*, const QByteArray & ) ), this, SLOT( slotData( KIO::Job*, const QByteArray & ) ) );
 		m_transferJob->addMetaData("cookies", "manual");
-		m_transferJob->addMetaData("setcookies", QString::fromLatin1("Cookie: T=%1; path=/; domain=.yahoo.com; Y=%2; C=%3;")
-				.arg(client()->tCookie()).arg(client()->yCookie()).arg(client()->cCookie()) );
+ 		m_transferJob->addMetaData("setcookies", QString::fromLatin1("Cookie: T=%1; path=/; domain=.yahoo.com; Y=%2;  path=/; domain=.yahoo.com;")
+ 				.arg(client()->tCookie()).arg(client()->yCookie()) );
 	}
 }
 
@@ -232,11 +233,11 @@
 {
 	if( m_transferId != id )
 		return;
-	
+
 	if( m_transferJob )
 		m_transferJob->kill();
-	
-	setSuccess( false );
+
+	setError();
 }
 
 #include "receivefiletask.moc"
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/receivefiletask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/receivefiletask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/receivefiletask.h	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/receivefiletask.h	2010-01-19 01:51:42.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Receive a file
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -18,16 +18,16 @@
 #define RECEIVEFILETASK_H
 
 #include "task.h"
-#include <qfile.h>
 #include <kurl.h>
 
 class QString;
 class QFile;
-namespace KIO { 
+namespace KIO {
 	class Job;
 	class TransferJob;
 	class MimetypeJob;
 }
+
 class YMSGTransfer;
 
 /**
@@ -40,20 +40,20 @@
 	enum Type { FileTransferAccept, FileTransfer7Accept, FileTransfer7Reject };
 	ReceiveFileTask(Task *parent);
 	~ReceiveFileTask();
-	
+
 	virtual void onGo();
-	
+
 	void setRemoteUrl( KURL url );
 	void setLocalUrl( KURL url );
 	void setFileName( const QString &filename );
 	void setTransferId( unsigned int transferId );
 	void setType( Type type );
 	void setUserId( const QString & userId );
-	
+
 	bool take(Transfer *transfer);
 
 protected:
-	bool forMe( Transfer *transfer ) const;
+	virtual bool forMe( const Transfer *transfer ) const;
 
 signals:
 	void bytesProcessed( unsigned int, unsigned int );
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/requestpicturetask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/requestpicturetask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/requestpicturetask.cpp	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/requestpicturetask.cpp	2010-01-19 01:58:43.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Request a Picture of a Buddy
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005-2006 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -19,12 +19,12 @@
 #include "ymsgtransfer.h"
 #include "yahootypes.h"
 #include "client.h"
-#include <qstring.h>
+
 #include <kdebug.h>
 
 RequestPictureTask::RequestPictureTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 }
 
 RequestPictureTask::~RequestPictureTask()
@@ -35,12 +35,12 @@
 {
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServicePicture);
 	t->setId( client()->sessionID() );
-	t->setParam( 4, client()->userId().local8Bit());
+	t->setParam( 1, client()->userId().local8Bit());
 	t->setParam( 5, m_target.local8Bit() );
 	t->setParam( 13, "1" );
 	send( t );
-	
-	setSuccess( true );
+
+	setSuccess();
 }
 
 void RequestPictureTask::setTarget( const QString &target )
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/requestpicturetask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/requestpicturetask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/requestpicturetask.h	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/requestpicturetask.h	2010-01-19 01:58:20.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Request a Picture of a Buddy
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -29,10 +29,10 @@
 Q_OBJECT
 public:
 	RequestPictureTask(Task *parent);
-	~RequestPictureTask();
-	
+	virtual ~RequestPictureTask();
+
 	virtual void onGo();
-	
+
 	void setTarget( const QString &target );
 private:
 	QString m_target;
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/safedelete.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/safedelete.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/safedelete.cpp	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/safedelete.cpp	2010-01-19 15:17:27.000000000 +0200
@@ -3,7 +3,7 @@
   
     Copyright (c) 2004      SUSE Linux AG	 	 http://www.suse.com
 
-    Based on Iris, Copyright (C) 2003  Justin Karneges
+    Based on Iris, Copyright (C) 2003  Justin Karneges <justin@affinix.com>
     
     Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
  
@@ -55,8 +55,9 @@
 		return;
 
 	QObjectListIt it(list);
-	for(QObject *o; (o = it.current()); ++it)
+        for(QObject *o; (o = it.current()); ++it)
 		deleteSingle(o);
+
 	list.clear();
 }
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/safedelete.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/safedelete.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/safedelete.h	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/safedelete.h	2010-01-19 15:15:02.000000000 +0200
@@ -3,7 +3,7 @@
   
     Copyright (c) 2004      SUSE Linux AG	 	 http://www.suse.com
     
-    Based on Iris, Copyright (C) 2003  Justin Karneges
+    Based on Iris, Copyright (C) 2003  Justin Karneges <justin@affinix.com>
     
     Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
  
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendauthresptask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendauthresptask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendauthresptask.cpp	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendauthresptask.cpp	2010-01-19 15:11:27.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Send a authorization request response
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
     Kopete    (c) 2003-2006 by the Kopete developers  <kopete-devel@kde.org>
 
     *************************************************************************
@@ -25,7 +25,7 @@
 
 SendAuthRespTask::SendAuthRespTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 }
 
 SendAuthRespTask::~SendAuthRespTask()
@@ -51,7 +51,7 @@
 	}
 	send( t );
 	
-	setSuccess( true );
+	setSuccess();
 }
 
 void SendAuthRespTask::setGranted( bool granted )
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendauthresptask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendauthresptask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendauthresptask.h	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendauthresptask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Send a authorization request response
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
     Kopete    (c) 2003-2006 by the Kopete developers  <kopete-devel@kde.org>
 
     *************************************************************************
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendfiletask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendfiletask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendfiletask.cpp	2010-01-21 13:32:46.804475136 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendfiletask.cpp	2010-01-19 21:47:33.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Send a file
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -21,6 +21,7 @@
 #include "client.h"
 #include <qstring.h>
 #include <qtimer.h>
+#include <kapplication.h> // for random()
 #include <kdebug.h>
 #include <klocale.h>
 #include <kstreamsocket.h>
@@ -30,9 +31,11 @@
 
 SendFileTask::SendFileTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	m_transmitted = 0;
 	m_socket = 0;
+
+	QTime epoch(0, 0, 0);
 }
 
 SendFileTask::~SendFileTask()
@@ -41,47 +44,159 @@
 	m_socket = 0;
 }
 
+bool SendFileTask::forMe( const Transfer *transfer ) const
+{
+	const YMSGTransfer *t = static_cast<const YMSGTransfer*>(transfer);
+
+	if(!t)
+		return false;
+
+	if((t->service() == Yahoo::ServiceFileTransfer7 ||
+	    t->service() == Yahoo::ServiceFileTransfer7Accept) &&
+	   t->firstParam(265).data() == m_yahooTransferId)
+	{
+		return true;
+	}
+
+	return false;
+}
+
+bool SendFileTask::take(Transfer* transfer)
+{
+	if( !forMe( transfer ) )
+		return false;
+
+	YMSGTransfer *t = static_cast<YMSGTransfer*>(transfer);
+
+	kdDebug(YAHOO_RAW_DEBUG) << t->service() << endl;
+
+	if(t->service() == Yahoo::ServiceFileTransfer7)
+		parseFileTransfer(t);
+	else if(t->service() == Yahoo::ServiceFileTransfer7Accept)
+		parseTransferAccept(t);
+
+	return true;
+}
+
+void SendFileTask::parseFileTransfer( const Transfer *transfer )
+{
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+
+	const YMSGTransfer *t = static_cast<const YMSGTransfer*>(transfer);
+
+	if(!t)
+		return;
+
+	if(t->firstParam(222).toInt() == 4)
+	{
+		emit declined();
+	}
+	else if(t->firstParam(222).toInt() == 3)
+	{
+		sendFileTransferInfo();
+	}
+	else
+	{
+		setError();
+		emit error(m_transferId, 0, i18n("Unknown error"));
+	}
+}
+
 void SendFileTask::onGo()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+
+	m_file.setName( m_url.path() );
+
+	m_yahooTransferId = newYahooTransferId();
+
+	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceFileTransfer7);
+	t->setId( client()->sessionID() );
+
+	t->setParam( 1, client()->userId().local8Bit() );
+	t->setParam( 5, m_target.local8Bit() );
+	t->setParam( 265,  m_yahooTransferId.local8Bit() );
+	t->setParam( 222, 1 );
+	t->setParam( 266, 1 );
+	t->setParam( 302, 268 );
+	t->setParam( 300, 268 );
+	t->setParam( 27, m_url.fileName().local8Bit() );
+	t->setParam( 28, m_file.size());
+	t->setParam( 301, 268 );
+	t->setParam( 303, 268 );
 
-	QTimer::singleShot( 0, this, SLOT(initiateUpload()) );
+	send( t );
 }
 
-void SendFileTask::initiateUpload()
+void SendFileTask::sendFileTransferInfo()
+{
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+
+	KResolverResults results = KResolver::resolve("filetransfer.msg.yahoo.com", QString::number(80));
+	if(results.count() > 0)
+	{
+		m_relayHost = results.first().address().toString();
+		m_relayHost = m_relayHost.left( m_relayHost.length() - 3 ); // Remove the :80 from the end
+		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << m_relayHost << endl;
+	}
+	else
+	{
+		emit error(m_transferId, 0, i18n("Unable to connect to file transfer server"));
+		setError();
+		return;
+	}
+
+	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceFileTransfer7Info);
+	t->setId( client()->sessionID() );
+
+	t->setParam( 1, client()->userId().local8Bit() );
+	t->setParam( 5, m_target.local8Bit() );
+	t->setParam( 265, m_yahooTransferId.local8Bit() );
+	t->setParam( 27, m_url.fileName().local8Bit() );
+	t->setParam( 249, 3 );
+	t->setParam( 250, m_relayHost.local8Bit() );
+
+	send( t );
+}
+
+void SendFileTask::parseTransferAccept(const Transfer *transfer)
 {	
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	m_socket = new KStreamSocket( "filetransfer.msg.yahoo.com", QString::number(80) );
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+
+	const YMSGTransfer *t = static_cast<const YMSGTransfer*>(transfer);
+
+	// Disconnected
+	if(t->status() == Yahoo::StatusDisconnected)
+	{
+		setError();
+		return;
+	}
+
+	m_token = KURL::encode_string(t->firstParam(251));
+	kdDebug(YAHOO_RAW_DEBUG) << "Token: " << m_token << endl;
+
+	m_socket = new KStreamSocket( m_relayHost, QString::number(80) );
 	m_socket->setBlocking( true );
 	connect( m_socket, SIGNAL( connected( const KResolverEntry& ) ), this, SLOT( connectSucceeded() ) );
 	connect( m_socket, SIGNAL( gotError(int) ), this, SLOT( connectFailed(int) ) );
 
 	m_socket->connect();
+
 }
 
 void SendFileTask::connectFailed( int i )
 {
-	QString err = m_socket->errorString();
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << i << ": " << err << endl;
+	QString err = KSocketBase::errorString(m_socket->error());
+	kdDebug(YAHOO_RAW_DEBUG) << i << ": " << err << endl;
 	emit error( m_transferId, i, err );
-	setSuccess( false );
+	setError();
 }
 
 void SendFileTask::connectSucceeded()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	YMSGTransfer t( Yahoo::ServiceFileTransfer );
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
-	m_file.setName( m_url.path() );
-
-	t.setId( client()->sessionID() );
-	t.setParam( 0, client()->userId().local8Bit());
-	t.setParam( 5, m_target.local8Bit());
-	t.setParam( 28, m_file.size() );	
-	t.setParam( 27, m_url.fileName().local8Bit() );
-	t.setParam( 14, "" );
 	QByteArray buffer;
-	QByteArray paket;
 	QDataStream stream( buffer, IO_WriteOnly );
 
 	if ( m_file.open(IO_ReadOnly ) )
@@ -90,22 +205,25 @@
 	}
 	else
 	{
-		client()->notifyError( i18n( "An error occured sending the file." ), m_file.errorString(), Client::Error );
-		setSuccess( false );
+		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Error opening file: " << m_file.errorString() << endl;
+		client()->notifyError( i18n( "An error occurred while sending the file." ), m_file.errorString(), Client::Error );
+		setError();
 		return;
 	}
 
-	paket = t.serialize();
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Sizes: File (" << m_url << "): " << m_file.size() << " - paket: " << paket.size() << endl;
-	QString header = QString::fromLatin1("POST http://filetransfer.msg.yahoo.com:80/notifyft HTTP/1.1\r\n"
-			"Cookie: Y=%1; T=%2; C=%3 ;B=fckeert1kk1nl&b=2\r\n"
-			"User-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\n"
-			"Host: filetransfer.msg.yahoo.com:80\r\n"
-			"Content-length: %4\r\n"
-			"Cache-Control: no-cache\r\n\r\n").arg(client()->yCookie()).arg(client()->tCookie()).arg(client()->cCookie()).arg(m_file.size()+4+paket.size());
+	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Sizes: File (" << m_url << "): " << m_file.size() << endl;
+	QString header =
+		"POST /relay?token=" + m_token +
+		"&sender=" + client()->userId() +
+		"&recver=" + m_target + " HTTP/1.1\r\n"
+		"User-Agent: Mozilla/5.0\r\n"
+		"Cache-Control: no-cache\r\n"
+		"Cookie: T=" + client()->tCookie() + "; Y=" + client()->yCookie() + "\r\n"
+		"Host: " + m_relayHost + "\r\n"
+		"Content-Length: " + QString::number(m_file.size()) + "\r\n"
+		"Connection: Close\r\n\r\n";
+	kdDebug() << header << endl;
 	stream.writeRawBytes( header.local8Bit(), header.length() );
-	stream.writeRawBytes( paket.data(), paket.size() );
-	stream << (Q_INT8)0x32 << (Q_INT8)0x39 << (Q_INT8)0xc0 << (Q_INT8)0x80;
 
 	if( !m_socket->writeBlock( buffer, buffer.size() ) )
 	{
@@ -121,7 +239,7 @@
 
 void SendFileTask::transmitData()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	int read = 0;
 	int written = 0;	
 	char buf[1024];
@@ -138,14 +256,14 @@
 	{
 		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Upload Failed!" << endl;
 		emit error( m_transferId, m_socket->error(), m_socket->errorString() );
-		setSuccess( false );
+		setError();
 		return;
 	}
 	if( m_transmitted == m_file.size() )
 	{
 		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Upload Successful: " << m_transmitted << endl;
 		emit complete( m_transferId );
-		setSuccess( true );
+		setSuccess();
 		m_socket->close();
 	}
 	else
@@ -182,7 +300,32 @@
 	if( m_socket )
 		m_socket->close();
 	
-	setSuccess( false );
+	setError();
+}
+
+QString SendFileTask::newYahooTransferId()
+{
+	// Adapted from libpurple/protocols/yahoo/yahoo_filexfer.c yahoo_xfer_new_xfer_id()
+
+	QString newId;
+
+	for(int i = 0; i < 22; i++)
+	{
+		char j = KApplication::random() % 61;
+
+		if(j < 26)
+			newId += j + 'a';
+		else if(j < 52)
+			newId += j - 26 + 'A';
+		else
+			newId += j - 52 + '0';
+	}
+
+	newId += "$$";
+
+	kdDebug() << "New Yahoo Transfer Id: " << newId << endl;
+
+	return newId;
 }
 
 #include "sendfiletask.moc"
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendfiletask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendfiletask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendfiletask.h	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendfiletask.h	2010-01-19 13:54:04.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Send a file
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -38,6 +38,8 @@
 	
 	virtual void onGo();
 	
+	bool take(Transfer *transfer);
+
 	void setTarget( const QString &to );
 	void setMessage( const QString &msg );
 	void setFileUrl( KURL url );
@@ -48,8 +50,17 @@
 	void complete( unsigned int );
 	void error( unsigned int, int, const QString & );
 
+	void declined();
+
+protected:
+	bool forMe( const Transfer *transfer ) const;
+	void sendFileTransferInfo();
+	void parseFileTransfer( const Transfer *transfer );
+	void parseTransferAccept(const Transfer *transfer);
+
+	QString newYahooTransferId();
+
 private slots:
-	void initiateUpload();
 	void connectSucceeded();
 	void connectFailed( int );
 	void transmitData();
@@ -63,6 +74,10 @@
 	unsigned int m_transferId;
 	unsigned int m_transmitted;
 	KNetwork::KStreamSocket *m_socket;
+
+	QString m_relayHost;
+	QString m_token;
+	QString m_yahooTransferId;
 };
 
 #endif
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendmessagetask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendmessagetask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendmessagetask.cpp	2010-01-21 13:32:46.804475136 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendmessagetask.cpp	2010-01-19 14:54:37.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Send a message
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -25,7 +25,7 @@
 
 SendMessageTask::SendMessageTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 }
 
 SendMessageTask::~SendMessageTask()
@@ -34,15 +34,15 @@
 
 void SendMessageTask::onGo()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
 	if( m_text.isEmpty() )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Text to send is empty." << endl;
-		client()->notifyError( i18n( "An error occured sending the message" ), i18n( "The message is empty." ), Client::Debug );
+		kdDebug(YAHOO_RAW_DEBUG) << "Text to send is empty." << endl;
+		client()->notifyError( i18n( "An error occurred while sending the message" ), i18n( "The message is empty." ), Client::Debug );
 		return;
 	}	
-	uint pos=0;
+	int pos=0;
 	
 	// split messages that are longer than 800 chars. they get dropped otherwise
 	while( pos < m_text.length() )
@@ -61,7 +61,7 @@
 		pos += 700;
 	}
 	
-	setSuccess( true );
+	setSuccess();
 }
 
 void SendMessageTask::setTarget( const QString &to )
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendmessagetask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendmessagetask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendmessagetask.h	2010-01-21 13:32:46.804475136 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendmessagetask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Send a message
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendnotifytask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendnotifytask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendnotifytask.cpp	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendnotifytask.cpp	2010-01-19 13:52:34.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Send a notification
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005-2006 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -19,12 +19,12 @@
 #include "ymsgtransfer.h"
 #include "yahootypes.h"
 #include "client.h"
-#include <qstring.h>
+
 #include <kdebug.h>
 
 SendNotifyTask::SendNotifyTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 }
 
 SendNotifyTask::~SendNotifyTask()
@@ -36,29 +36,35 @@
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceNotify);
 	t->setId( client()->sessionID() );
 	t->setStatus( Yahoo::StatusNotify );
-	t->setParam( 4, client()->userId().local8Bit() );
-	t->setParam( 5, m_target.local8Bit() );
-	t->setParam( 14, " " );	
+
 	switch( m_type )
 	{
 	case NotifyTyping:
+		t->setParam( 4, client()->userId().local8Bit() );
+		t->setParam( 5, m_target.local8Bit() );
 		t->setParam( 13, m_state );
+		t->setParam( 14, " " );
 		t->setParam( 49, "TYPING" );
 	break;
 	case NotifyWebcamInvite:
+
+		kdDebug(YAHOO_RAW_DEBUG) << "send invitation set Param" << endl;
+		t->setParam( 1, client()->userId().local8Bit() );
+		t->setParam( 5, m_target.local8Bit() );
 		t->setParam( 13, 0 );
-		t->setParam( 49, "WEBCAMINVITE" );		
+		t->setParam( 14, " " );
+		t->setParam( 49, "WEBCAMINVITE" );
 	break;
 	case NotifyGame:
 	default:
-		setSuccess( false );
+		setError();
 		delete t;
 		return;
 	break;
 	}
 	send( t );
-	
-	setSuccess( true );
+
+	setSuccess();
 }
 
 void SendNotifyTask::setType( Type type )
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendnotifytask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendnotifytask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendnotifytask.h	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendnotifytask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Send a notification
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendpicturetask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendpicturetask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendpicturetask.cpp	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendpicturetask.cpp	2010-01-19 15:04:09.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     sendpicturetask.cpp - Send our picture or information about it
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -21,7 +21,6 @@
 #include "client.h"
 #include <qstring.h>
 #include <qfile.h>
-#include <qcstring.h>
 #include <qdatastream.h>
 #include <kio/global.h>
 #include <kio/job.h>
@@ -34,7 +33,7 @@
 
 SendPictureTask::SendPictureTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	m_socket = 0;
 }
 
@@ -55,6 +54,7 @@
 		break;
 		case SendInformation:
 			sendInformation();
+		break;
 		case SendStatus:
 			sendStatus();
 		break;
@@ -62,26 +62,27 @@
 }
 
 void SendPictureTask::initiateUpload()
-{	
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+{
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	m_socket = new KBufferedSocket( "filetransfer.msg.yahoo.com", QString::number(80) );
 	connect( m_socket, SIGNAL( connected( const KResolverEntry& ) ), this, SLOT( connectSucceeded() ) );
 	connect( m_socket, SIGNAL( gotError(int) ), this, SLOT( connectFailed(int) ) );
+	connect( m_socket, SIGNAL( readyRead() ), this, SLOT( readResult() ) );
 
 	m_socket->connect();
 }
 
 void SendPictureTask::connectFailed( int i)
 {
-	m_socket->close();
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << i << ": " << static_cast<const KBufferedSocket*>( sender() )->errorString() << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << i << ": " << static_cast<const KBufferedSocket*>( sender() )->errorString() << endl;
+
 	client()->notifyError(i18n("The picture was not successfully uploaded"), QString("%1 - %2").arg(i).arg(static_cast<const KBufferedSocket*>( sender() )->errorString()), Client::Error );
-	setSuccess( false );
+	setError();
 }
 
 void SendPictureTask::connectSucceeded()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	YMSGTransfer t(Yahoo::ServicePictureUpload);
 
 	QFile file( m_path );
@@ -90,26 +91,26 @@
 	t.setParam( 1, client()->userId().local8Bit());
 	t.setParam( 38, 604800);
 	t.setParam( 0, client()->userId().local8Bit());
-	t.setParam( 28, file.size() );	
+	t.setParam( 28, file.size() );
 	t.setParam( 27, m_fileName.local8Bit() );
 	t.setParam( 14, "" );
 	QByteArray buffer;
 	QByteArray paket;
 	QDataStream stream( buffer, IO_WriteOnly );
 
-	if ( file.open(IO_ReadOnly ) )
+	if ( file.open( IO_ReadOnly ) )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "File successfully opened. Reading..." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "File successfully opened. Reading..." << endl;
 	}
 	else
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Error opening file: " << file.errorString() << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Error opening file: " << file.errorString() << endl;
 		client()->notifyError(i18n("Error opening file: %1").arg(m_path), file.errorString(), Client::Error );
 		return;
 	}
 
 	paket = t.serialize();
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Sizes: File (" << m_path << "): " << file.size() << " - paket: " << paket.size() << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "Sizes: File (" << m_path << "): " << file.size() << " - paket: " << paket.size() << endl;
 	QString header = QString::fromLatin1("POST /notifyft HTTP/1.1\r\n"
 			"Cookie: Y=%1; T=%2; C=%3 ;\r\n"
 			"User-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\n"
@@ -121,43 +122,62 @@
 	stream << (Q_INT8)0x32 << (Q_INT8)0x39 << (Q_INT8)0xc0 << (Q_INT8)0x80;
 	stream.writeRawBytes( file.readAll(), file.size() );
 
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Buffersize: " << buffer.size() << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "Buffersize: " << buffer.size() << endl;
 	if( m_socket->writeBlock( buffer, buffer.size() ) )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Upload Successful." << endl;
-		connect( m_socket, SIGNAL( readyRead() ), this, SLOT( readResult() ) );
+		kdDebug(YAHOO_RAW_DEBUG) << "Upload Successful!" << endl;
+		m_socket->enableRead( true );
+// 		setSuccess();
 	}
 	else
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Upload Failed." << endl;
-		m_socket->close();
-		setSuccess( false );
+		kdDebug(YAHOO_RAW_DEBUG) << "Upload Failed!" << endl;
+		setError();
 	}
 }
 
 void SendPictureTask::readResult()
 {
-	QByteArray ar( m_socket->bytesAvailable() );
-	m_socket->readBlock ( ar.data (), ar.size () );
-	QString buf( ar );
+	kdDebug(YAHOO_RAW_DEBUG) << m_socket->bytesAvailable() << endl;
 
-	m_socket->close();
-	if( buf.find( "error", 0, false ) >= 0 )
-	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Picture upload failed" << endl;
-		setSuccess( false );
-	}
-	else
-	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Picture upload acknowledged." << endl;
-		setSuccess( true );
-	}
+	// FIXME: to check
+// 	m_socket->enableRead( false );
+// 	QByteArray buf;
+// 	buf.resize( m_socket->bytesAvailable() );
+// 	m_socket->read( buf.data(), m_socket->bytesAvailable() );
+//
+// 	if( buf.indexOf( "error", 0 ) >= 0 )
+// 	{
+// 		kdDebug(YAHOO_RAW_DEBUG) << "Picture upload failed" << endl;
+// 		setError();
+// 	}
+// 	else
+// 	{
+// 		kdDebug(YAHOO_RAW_DEBUG) << "Picture upload acknowledged." << endl;
+// 		setSuccess();
+// 	}
+
+	// from original file
+	QByteArray ar( m_socket->bytesAvailable() );
+        m_socket->readBlock ( ar.data (), ar.size () );
+        QString buf( ar );
 
+        m_socket->close();
+        if( buf.find( "error", 0, false ) >= 0 )
+        {
+                kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Picture upload failed" << endl;
+                setSuccess( false );
+        }
+        else
+        {
+                kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Picture upload acknowledged." << endl;
+                setSuccess( true );
+        }
 }
 
 void SendPictureTask::sendChecksum()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServicePictureChecksum);
 	t->setId( client()->sessionID() );
@@ -167,41 +187,39 @@
 	t->setParam(192, m_checksum);
 	t->setParam(212, 1);
 	send( t );
-	
-	setSuccess( true );
+
+	setSuccess();
 }
 
 void SendPictureTask::sendInformation()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServicePicture);
 	t->setId( client()->sessionID() );
 	t->setParam(1, client()->userId().local8Bit());
-	t->setParam(4, client()->userId().local8Bit());
 	t->setParam(13, 2 );
 	t->setParam(5, m_target.local8Bit() );
 	t->setParam(20, m_url.local8Bit() );
 	t->setParam(192, m_checksum);
 
 	send( t );
-	
-	setSuccess( true );
+
+	setSuccess();
 }
 
 void SendPictureTask::sendStatus()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
-	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServicePictureUpdate);
+	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServicePictureStatus);
 	t->setId( client()->sessionID() );
-	t->setParam(1, client()->userId().local8Bit());
-	t->setParam(5, m_target.local8Bit() );
-	t->setParam(206, m_status );
+	t->setParam(3, client()->userId().local8Bit());
+	t->setParam(213, m_status );
 
 	send( t );
-	
-	setSuccess( true );
+
+	setSuccess();
 }
 
 void SendPictureTask::setType( Type type )
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendpicturetask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendpicturetask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sendpicturetask.h	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sendpicturetask.h	2010-01-19 01:07:19.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     sendpicturetask.h - Send our picture or information about it
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -21,11 +21,11 @@
 
 class QString;
 class QFile;
-namespace KIO	{ 
+namespace KIO	{
 	class Job;
-	class TransferJob; 
+	class TransferJob;
 }
-namespace KNetwork	{ 
+namespace KNetwork	{
 	class KBufferedSocket;
 }
 
@@ -39,8 +39,8 @@
 	enum Type { UploadPicture, SendChecksum, SendInformation, SendStatus };
 
 	SendPictureTask(Task *parent);
-	~SendPictureTask();
-	
+	virtual ~SendPictureTask();
+
 	virtual void onGo();
 
 	void setType( Type type );
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sha1.c kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sha1.c
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sha1.c	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sha1.c	2010-01-18 18:16:28.000000000 +0200
@@ -23,7 +23,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
- * $Id: sha1.c 373471 2004-12-27 03:02:26Z dmacvicar $
+ * $Id: sha1.c 627480 2007-01-26 18:56:02Z dfaure $
  */
 
 /*
@@ -37,14 +37,12 @@
  *   34aa973c d4c4daa4 f61eeb2b dbad2731 6534016f
  */
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif /* HAVE_CONFIG_H */
+/* #include <config-kopete.h> */
 
-#if HAVE_INTTYPES_H
+#ifdef HAVE_INTTYPES_H
 # include <inttypes.h>
 #else
-# if HAVE_STDINT_H
+# ifdef HAVE_STDINT_H
 #  include <stdint.h>
 # endif
 #endif
@@ -55,7 +53,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-	"$Id: sha1.c 373471 2004-12-27 03:02:26Z dmacvicar $";
+	"$Id: sha1.c 627480 2007-01-26 18:56:02Z dfaure $";
 #endif /* !lint */
 
 #define ROTL(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sha1.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sha1.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/sha1.h	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/sha1.h	2010-01-18 18:20:18.000000000 +0200
@@ -23,12 +23,13 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
- * $Id: sha1.h 373471 2004-12-27 03:02:26Z dmacvicar $
+ * $Id: sha1.h 549618 2006-06-09 10:11:04Z mlaurent $
  */
 
 #ifndef _SHA1_H
 #define _SHA1_H
 
+#include "../../../../config.h"
 #if HAVE_INTTYPES_H
 # include <inttypes.h>
 #else
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/statusnotifiertask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/statusnotifiertask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/statusnotifiertask.cpp	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/statusnotifiertask.cpp	2010-01-18 15:09:18.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Notifies about status changes of buddies
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -26,7 +26,7 @@
 
 StatusNotifierTask::StatusNotifierTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 StatusNotifierTask::~StatusNotifierTask()
@@ -36,11 +36,9 @@
 
 bool StatusNotifierTask::take( Transfer* transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
 	if ( !forMe( transfer ) )
 		return false;
-	
+
 	YMSGTransfer *t = static_cast<YMSGTransfer*>(transfer);
 
 	if( t->service() == Yahoo::ServiceStealthOffline )
@@ -48,16 +46,15 @@
 	else if( t->service() == Yahoo::ServiceAuthorization )
 		parseAuthorization( t );
 	else
-		parseStatus( t );	
+		parseStatus( t );
 
 	return true;
 }
 
-bool StatusNotifierTask::forMe( Transfer* transfer ) const
+bool StatusNotifierTask::forMe( const Transfer* transfer ) const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	YMSGTransfer *t = 0L;
-	t = dynamic_cast<YMSGTransfer*>(transfer);
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
@@ -72,7 +69,8 @@
 		t->service() == Yahoo::ServiceIddeAct ||
 		t->service() == Yahoo::ServiceStatus ||
 		t->service() == Yahoo::ServiceStealthOffline ||
-		t->service() == Yahoo::ServiceAuthorization
+		t->service() == Yahoo::ServiceAuthorization ||
+		t->service() == Yahoo::ServiceBuddyStatus
 	)
 		return true;
 	else
@@ -81,12 +79,12 @@
 
 void StatusNotifierTask::parseStatus( YMSGTransfer* t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
-	if( t->status() == Yahoo::StatusDisconnected && 
+	if( t->status() == Yahoo::StatusDisconnected &&
 		t->service() == Yahoo::ServiceLogoff )
 	{
-		emit loginResponse( Yahoo::LoginDupl, QString::null );
+		emit loginResponse( Yahoo::LoginDupl, QString() );
 	}
 
 	QString	myNick;		/* key = 1 */
@@ -98,14 +96,14 @@
 	int away;		/* key = 47  */
 	int idle;		/* key = 137 */
 	bool utf;		/* key = 97 */
-	int checksum;		/* key = 192 */
+	int pictureChecksum;	/* key = 192 */
 
 	customError = t->firstParam( 16 );
 	if( !customError.isEmpty() )
-		client()->notifyError( i18n("An unknown error has occured."), customError, Client::Warning );
+		client()->notifyError( i18n("An unknown error has occurred."), customError, Client::Warning );
 
 	myNick = t->firstParam( 1 );
-	
+
 	for( int i = 0; i < t->paramCount( 7 ); ++i)
 	{
 		nick = t->nthParam( 7, i );
@@ -114,27 +112,24 @@
 		away = t->nthParamSeparated( 47, i, 7 ).toInt();
 		idle = t->nthParamSeparated( 137, i, 7 ).toInt();
 		utf = t->nthParamSeparated( 97, i, 7 ).toInt() == 1;
-		checksum = t->nthParamSeparated( 192, i, 7 ).toInt();
+		pictureChecksum = t->nthParamSeparated( 192, i, 7 ).toInt();
 		if( utf )
 			message = QString::fromUtf8( t->nthParamSeparated( 19, i, 7 ) );
 		else
 			message = t->nthParamSeparated( 19, i, 7 );
 
 		if( t->service() == Yahoo::ServiceLogoff || ( state != 0 && flags == 0 ) )
-			emit statusChanged( nick, Yahoo::StatusOffline, QString::null, 0, 0 );
+			emit statusChanged( nick, Yahoo::StatusOffline, QString(), 0, 0, 0 );
 		else
-			emit statusChanged( nick, state, message, away, idle );
-		
-		if( checksum )
-			emit gotPictureChecksum( nick, checksum );
+			emit statusChanged( nick, state, message, away, idle, pictureChecksum );
 	}
 }
 
 void StatusNotifierTask::parseAuthorization( YMSGTransfer* t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
-	QString nick;		/* key = 4  */	
+	QString nick;		/* key = 4  */
 	QString msg;		/* key = 14  */
 	int state;		/* key = 13  */
 	bool utf;		/* key = 97 */
@@ -163,14 +158,14 @@
 		if( !fname.isEmpty() || !lname.isEmpty() )
 			name = QString("%1 %2").arg(fname).arg(lname);
 
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Emitting gotAuthorizationRequest( " << nick<< ", " << msg << ", " << name << " )" << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Emitting gotAuthorizationRequest( " << nick<< ", " << msg << ", " << name << " )" << endl;
 		emit gotAuthorizationRequest( nick, msg, name );
 	}
 }
 
 void StatusNotifierTask::parseStealthStatus( YMSGTransfer* t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString nick;		/* key = 7  */
 	int state;		/* key = 31  */
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/statusnotifiertask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/statusnotifiertask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/statusnotifiertask.h	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/statusnotifiertask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Notifies about status changes of buddies
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -36,18 +36,17 @@
 	bool take(Transfer *transfer);
 
 protected:
-	bool forMe( Transfer *transfer ) const;
+	virtual bool forMe( const Transfer *transfer ) const;
 	void parseStatus( YMSGTransfer *transfer );
 	void parseStealthStatus( YMSGTransfer *transfer );
 	void parseAuthorization( YMSGTransfer *transfer );
 signals:
-	void statusChanged( const QString&, int, const QString&, int, int );
+	void statusChanged( const QString &nick, int state, const QString &message, int away, int idle, int pictureChecksum );
 	void stealthStatusChanged( const QString&, Yahoo::StealthStatus );
 	void loginResponse( int, const QString& );
 	void authorizationAccepted( const QString & );
 	void authorizationRejected( const QString &, const QString & );
 	void gotAuthorizationRequest( const QString &, const QString &, const QString & );
-	void gotPictureChecksum( const QString &, int );
 };
 
 #endif
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/stealthtask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/stealthtask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/stealthtask.cpp	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/stealthtask.cpp	2010-01-18 18:31:30.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Stealth/Unstealth a buddy
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -23,7 +23,7 @@
 
 StealthTask::StealthTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 StealthTask::~StealthTask()
@@ -37,7 +37,7 @@
 	{
 		t->setService( Yahoo::ServiceStealthOnline );
 		t->setParam( 13, "1" );
-		t->setParam( 31, m_state );	
+		t->setParam( 31, m_state );
 	}
 	else if( m_mode == Yahoo::StealthOffline )
 	{
@@ -53,11 +53,16 @@
 	}
 	t->setId( client()->sessionID() );
 	t->setParam( 1, client()->userId().local8Bit());
-	if( !m_target.isEmpty() )
+	if( !m_target.isEmpty() ) {
+		t->setParam( 302, 319 );
+		t->setParam( 300, 319 );
 		t->setParam( 7, m_target.local8Bit() );
+		t->setParam( 301, 319 );
+		t->setParam( 303, 319 );
+	}
 	send( t );
-	
-	setSuccess( true );
+
+	setSuccess();
 }
 
 void StealthTask::setTarget( const QString &to )
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/stealthtask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/stealthtask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/stealthtask.h	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/stealthtask.h	2010-01-18 04:23:48.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Stealth/Unstealth a buddy
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/stream.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/stream.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/stream.cpp	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/stream.cpp	2010-01-18 04:23:48.000000000 +0200
@@ -3,7 +3,7 @@
 
     Copyright (c) 2004      SUSE Linux AG	 	 http://www.suse.com
 
-    Based on Iris, Copyright (C) 2003  Justin Karneges
+    Based on Iris, Copyright (C) 2003  Justin Karneges <justin@affinix.com>
 
     Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
  
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/stream.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/stream.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/stream.h	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/stream.h	2010-01-18 18:28:18.000000000 +0200
@@ -4,7 +4,7 @@
     Copyright (c) 2004 Matt Rogers <matt.rogers@kdemail.net>
 
     Based on code copyright (c) 2004 SuSE Linux AG <http://www.suse.com>
-    Based on Iris, Copyright (C) 2003  Justin Karneges
+    Based on Iris, Copyright (C) 2003  Justin Karneges <justin@affinix.com>
 
     Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
 
@@ -63,7 +63,7 @@
 	 * Send a message to the server
 	 */
 	virtual void write( Transfer *request) = 0;
-	
+
 
 signals:
 	void connectionClosed();
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/task.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/task.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/task.cpp	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/task.cpp	2010-01-18 03:13:46.000000000 +0200
@@ -1,12 +1,12 @@
 /*
     task.cpp - Kopete Groupwise Protocol
-   
+
     Copyright (c) 2004      SUSE Linux AG	 	 http://www.suse.com
-    
-    Based on Iris, Copyright (C) 2003  Justin Karneges
-    
+
+    Based on Iris, Copyright (C) 2003  Justin Karneges <justin@affinix.com>
+
     Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
- 
+
     *************************************************************************
     *                                                                       *
     * This library is free software; you can redistribute it and/or         *
@@ -16,7 +16,7 @@
     *                                                                       *
     *************************************************************************
 */
-  
+
 #include <qtimer.h>
 
 #include "client.h"
@@ -131,20 +131,19 @@
 	// pass along the transfer to our children
 	QObjectListIt it(*p);
 	Task *t;
-	for(; it.current(); ++it) {
+	for(; it.current(); ++it)
+	{
 		QObject *obj = it.current();
 		if(!obj->inherits("Task"))
 			continue;
 
 		t = static_cast<Task*>(obj);
-		
+
 		if(t->take( transfer ))
 		{
 			qDebug( "Transfer ACCEPTED by: %s", t->className() );
 			return true;
 		}
-/*		else
-			qDebug( "Transfer refused by: %s", t->className() );*/
 	}
 
 	return false;
@@ -232,22 +231,22 @@
 // 	QString str;
 // 	int size = 1024;
 // 	int r;
-// 
+//
 // 	do {
 // 		buf = new char[size];
 // 		va_list ap;
 // 		va_start(ap, fmt);
 // 		r = vsnprintf(buf, size, fmt, ap);
 // 		va_end(ap);
-// 
+//
 // 		if(r != -1)
 // 			str = QString(buf);
-// 
+//
 // 		delete [] buf;
-// 
+//
 // 		size *= 2;
 // 	} while(r == -1);
-// 
+//
 // 	debug(str);
 // }
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/task.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/task.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/task.h	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/task.h	2010-01-18 03:03:47.000000000 +0200
@@ -3,7 +3,7 @@
       
     Copyright (c) 2004      SUSE Linux AG	 	 http://www.suse.com
     
-    Based on Iris, Copyright (C) 2003  Justin Karneges
+    Based on Iris, Copyright (C) 2003  Justin Karneges <justin@affinix.com>
     
     Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
  
@@ -25,7 +25,6 @@
 class QString;
 
 class Client;
-class Request;
 class Transfer;
 
 class Task : public QObject
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/webcamtask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/webcamtask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/webcamtask.cpp	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/webcamtask.cpp	2010-01-19 15:04:03.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Handles incoming webcam connections
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -20,10 +20,11 @@
 #include "ymsgtransfer.h"
 #include "yahootypes.h"
 #include "client.h"
-#include <qstring.h>
+
 #include <qbuffer.h>
 #include <qfile.h>
 #include <qtimer.h>
+#include <qpixmap.h>
 #include <ktempfile.h>
 #include <kprocess.h>
 #include <kstreamsocket.h>
@@ -34,7 +35,7 @@
 
 WebcamTask::WebcamTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	transmittingData = false;
 	transmissionPending = false;
 	timestamp = 1;
@@ -46,13 +47,11 @@
 
 bool WebcamTask::take( Transfer* transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
 	if ( !forMe( transfer ) )
 		return false;
 
 	YMSGTransfer *t = static_cast<YMSGTransfer*>(transfer);
-	
+
  	if( t->service() == Yahoo::ServiceWebcam )
  		parseWebcamInformation( t );
 // 	else
@@ -61,16 +60,14 @@
 	return true;
 }
 
-bool WebcamTask::forMe( Transfer* transfer ) const
+bool WebcamTask::forMe( const Transfer* transfer ) const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
-	YMSGTransfer *t = 0L;
-	t = dynamic_cast<YMSGTransfer*>(transfer);
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
-	if ( t->service() == Yahoo::ServiceWebcam )	
+	if ( t->service() == Yahoo::ServiceWebcam )
 		return true;
 	else
 		return false;
@@ -78,8 +75,8 @@
 
 void WebcamTask::requestWebcam( const QString &who )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceWebcam);
 	t->setId( client()->sessionID() );
 	t->setParam( 1, client()->userId().local8Bit());
@@ -91,7 +88,7 @@
 
 void WebcamTask::parseWebcamInformation( YMSGTransfer *t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	YahooWebcamInformation info;
 	info.sender = keyPending;
@@ -108,8 +105,8 @@
 	}
 	else
 		info.direction = Incoming;
-	
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Got WebcamInformation: Sender: " << info.sender << " Server: " << info.server << " Key: " << info.key << endl;
+
+	kdDebug(YAHOO_RAW_DEBUG) << "Got WebcamInformation: Sender: " << info.sender << " Server: " << info.server << " Key: " << info.key << endl;
 
 	KStreamSocket *socket = new KStreamSocket( info.server, QString::number(5100) );
 	socketMap[socket] = info;
@@ -117,8 +114,8 @@
 	connect( socket, SIGNAL( connected( const KResolverEntry& ) ), this, SLOT( slotConnectionStage1Established() ) );
 	connect( socket, SIGNAL( gotError(int) ), this, SLOT( slotConnectionFailed(int) ) );
 	connect( socket, SIGNAL( readyRead() ), this, SLOT( slotRead() ) );
-	
-	socket->connect();	
+
+	socket->connect();
 }
 
 void WebcamTask::slotConnectionStage1Established()
@@ -126,11 +123,11 @@
 	KStreamSocket* socket = const_cast<KStreamSocket*>( dynamic_cast<const KStreamSocket*>( sender() ) );
 	if( !socket )
 		return;
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Webcam connection Stage1 to the user " << socketMap[socket].sender << " established." << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "Webcam connection Stage1 to the user " << socketMap[socket].sender << " established." << endl;
 	disconnect( socket, SIGNAL( connected( const KResolverEntry& ) ), this, SLOT( slotConnectionStage1Established() ) );
 	disconnect( socket, SIGNAL( gotError(int) ), this, SLOT( slotConnectionFailed(int) ) );
 	socketMap[socket].status = ConnectedStage1;
-	
+
 
 	QByteArray buffer;
 	QDataStream stream( buffer, IO_WriteOnly );
@@ -146,10 +143,10 @@
 		s = QString("f=1\r\n");
 	}
 
-	// Header: 08 00 01 00 00 00 00	
+	// Header: 08 00 01 00 00 00 00
 	stream << (Q_INT8)0x08 << (Q_INT8)0x00 << (Q_INT8)0x01 << (Q_INT8)0x00 << (Q_INT32)s.length();
 	stream.writeRawBytes( s.local8Bit(), s.length() );
-	
+
 	socket->writeBlock( buffer.data(), buffer.size() );
 }
 
@@ -159,7 +156,7 @@
 	if( !socket )
 		return;
 
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Webcam connection Stage2 to the user " << socketMap[socket].sender << " established." << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "Webcam connection Stage2 to the user " << socketMap[socket].sender << " established." << endl;
 	disconnect( socket, SIGNAL( connected( const KResolverEntry& ) ), this, SLOT( slotConnectionStage2Established() ) );
 	disconnect( socket, SIGNAL( gotError(int) ), this, SLOT( slotConnectionFailed(int) ) );
 	socketMap[socket].status = ConnectedStage2;
@@ -176,7 +173,7 @@
 		// Send request information
 		s = QString("a=2\r\nc=us\r\ne=21\r\nu=%1\r\nt=%2\r\ni=\r\ng=%3\r\no=w-2-5-1\r\np=1")
 			.arg(client()->userId()).arg(socketMap[socket].key).arg(socketMap[socket].sender);
-		// Header: 08 00 01 00 00 00 00	
+		// Header: 08 00 01 00 00 00 00
 		stream << (Q_INT8)0x08 << (Q_INT8)0x00 << (Q_INT8)0x01 << (Q_INT8)0x00 << (Q_INT32)s.length();
 	}
 	else
@@ -190,17 +187,19 @@
 		stream << (Q_INT8)0x0d << (Q_INT8)0x00 << (Q_INT8)0x05 << (Q_INT8)0x00 << (Q_INT32)s.length()
 			<< (Q_INT8)0x01 << (Q_INT8)0x00 << (Q_INT8)0x00 << (Q_INT8)0x00 << (Q_INT8)0x01;
 	}
+
 	socket->writeBlock( buffer.data(), buffer.size() );
-	socket->writeBlock( s.local8Bit(), s.length() );
+        socket->writeBlock( s.local8Bit(), s.length() );
 }
 
 void WebcamTask::slotConnectionFailed( int error )
 {
 	KStreamSocket* socket = const_cast<KStreamSocket*>( dynamic_cast<const KStreamSocket*>( sender() ) );
-	client()->notifyError( i18n("Webcam connection to the user %1 could not be established.\n\nPlease relogin and try again.")
-			.arg(socketMap[socket].sender), QString("%1 - %2").arg(error).arg( socket->errorString()), Client::Error );
-	socketMap.remove( socket );
-	socket->deleteLater();
+	kdDebug(YAHOO_RAW_DEBUG) << "Webcam connection to the user " << socketMap[socket].sender << " failed. Error " << error << " - " << socket->errorString() << endl;
+        client()->notifyError( i18n("Webcam connection to the user %1 could not be established.\n\nPlease relogin and try again.")
+                        .arg(socketMap[socket].sender), QString("%1 - %2").arg(error).arg( socket->errorString()), Client::Error );
+        socketMap.remove( socket );
+        socket->deleteLater();
 }
 
 void WebcamTask::slotRead()
@@ -208,7 +207,7 @@
 	KStreamSocket* socket = const_cast<KStreamSocket*>( dynamic_cast<const KStreamSocket*>( sender() ) );
 	if( !socket )
 		return;
-	
+
 	switch( socketMap[socket].status )
 	{
 		case ConnectedStage1:
@@ -226,10 +225,10 @@
 
 void WebcamTask::connectStage2( KStreamSocket *socket )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	QByteArray data( socket->bytesAvailable() );
 	socket->readBlock ( data.data (), data.size () );
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Magic Byte:" << data[2] << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "Magic Byte:" << data[2] << endl;
 
 	socketMap[socket].status = ConnectedStage2;
 
@@ -245,14 +244,14 @@
 	case (Q_INT8)0x07:
 		while( (const char)data[i] != (Q_INT8)0x00 )
 			server += data[i++];
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Server:" << server << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Server:" << server << endl;
 		if( server.isEmpty() )
 		{
 			emit webcamNotAvailable(socketMap[socket].sender);
 			break;
 		}
-		
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Connecting to " << server << endl;
+
+		kdDebug(YAHOO_RAW_DEBUG) << "Connecting to " << server << endl;
 		newSocket = new KStreamSocket( server, QString::number(5100) );
 		socketMap[newSocket] = socketMap[socket];
 		newSocket->enableRead( true );
@@ -264,8 +263,8 @@
 			newSocket->enableWrite( true );
 			connect( newSocket, SIGNAL( readyWrite() ), this, SLOT( transmitWebcamImage() ) );
 		}
-		
-		newSocket->connect();	
+
+		newSocket->connect();
 		break;
 	default:
 		break;
@@ -277,28 +276,29 @@
 void WebcamTask::processData( KStreamSocket *socket )
 {
 	QByteArray data( socket->bytesAvailable() );
-	
+
 	socket->readBlock ( data.data (), data.size () );
+
 	if( data.size() <= 0 )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "No data read." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "No data read." << endl;
 		return;
 	}
-	
+
 	parseData( data, socket );
 }
 
 void WebcamTask::parseData( QByteArray &data, KStreamSocket *socket )
 {
-	uint headerLength = 0;
-	uint read = 0;
+	int headerLength = 0;
+	int read = 0;
 	YahooWebcamInformation *info = &socketMap[socket];
 	if( !info->headerRead )
 	{
-		headerLength = data[0];	
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "headerLength " << headerLength << endl;
+		headerLength = data[0];
+		kdDebug(YAHOO_RAW_DEBUG) << "headerLength " << headerLength << endl;
 		if( data.size() < headerLength )
-			return;			
+			return;
 		if( headerLength >= 8 )
 		{
 			kdDebug() << data[0] << data[1] << data[2] << data[3] << data[4] << data[5] << data[6] << data[7] << endl;
@@ -309,7 +309,7 @@
 		{
 			kdDebug() << data[8] << data[9] << data[10] << data[11] << data[12] << endl;
 			info->timestamp = yahoo_get32(data.data() + 9);
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "PacketType: " << data[8] << " reason: " << info->reason << " timestamp: " << info->timestamp << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << "PacketType: " << data[8] << " reason: " << info->reason << " timestamp: " << info->timestamp << endl;
 			QStringList::iterator it;
 			switch( data[8] )
 			{
@@ -328,7 +328,7 @@
 						info->headerRead = true;
 					}
 				break;
-				case 0x02: 
+				case 0x02:
 					info->type = Image;
 					info->headerRead = true;
 				break;
@@ -339,7 +339,7 @@
 					}
 				break;
 				case 0x05:
-					kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Ready for Transmission. " << info->timestamp << " watchers." << endl;
+					kdDebug(YAHOO_RAW_DEBUG) << "Ready for Transmission" << endl;
 					if( info->timestamp == 1 )
 					{
 						info->status = Sending;
@@ -351,7 +351,7 @@
 						emit stopTransmission();
 						sendEmptyWebcamImage();
 					}
-					
+
 					// Send Invitation packets
 					for(it = pendingInvitations.begin(); it != pendingInvitations.end(); it++)
 					{
@@ -359,12 +359,12 @@
 						snt->setTarget( *it );
 						snt->setType( SendNotifyTask::NotifyWebcamInvite );
 						snt->go( true );
-						it = pendingInvitations.remove( it );
+						it = pendingInvitations.erase( it );
 						it--;
 					}
 				break;
-				case 0x07: 
-					
+				case 0x07:
+
 					info->type = ConnectionClosed;
 					emit webcamClosed( info->sender, info->reason );
 					cleanUpConnection( socket );
@@ -383,41 +383,41 @@
 		if( !info->headerRead && data.size() > headerLength )
 		{
 			// More headers to read
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "More data to read..." << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << "More data to read..." << endl;
 			QByteArray newData( data.size() - headerLength );
 			QDataStream stream( newData, IO_WriteOnly );
 			stream.writeRawBytes( data.data() + headerLength, data.size() - headerLength );
 			parseData( newData, socket );
 			return;
 		}
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Parsed Packet: HeaderLen: " << headerLength << " DataLen: " << info->dataLength << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Parsed Packet: HeaderLen: " << headerLength << " DataLen: " << info->dataLength << endl;
 	}
-	
+
 	if( info->dataLength <= 0 )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "No data to read. (info->dataLength <= 0)" << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "No data to read. (info->dataLength <= 0)" << endl;
 		if( info->headerRead )
 			info->headerRead = false;
 		return;
 	}
 	if( headerLength >= data.size() )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "No data to read. (headerLength >= data.size())" << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "No data to read. (headerLength >= data.size())" << endl;
 		return;		//Nothing to read here...
 	}
 	if( !info->buffer )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Buffer created" << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Buffer created" << endl;
 		info->buffer = new QBuffer();
 		info->buffer->open( IO_WriteOnly );
 	}
-	
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "data.size() " << data.size() << " headerLength " << headerLength << " buffersize " << info->buffer->size() << endl;
+
+	kdDebug(YAHOO_RAW_DEBUG) << "data.size() " << data.size() << " headerLength " << headerLength << " buffersize " << info->buffer->size() << endl;
 	read = headerLength + info->dataLength - info->buffer->size();
 	info->buffer->writeBlock( data.data() + headerLength, data.size() - headerLength );//info->dataLength - info->buffer->size() );
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "read " << data.size() - headerLength << " Bytes, Buffer is now " << info->buffer->size() << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "read " << data.size() - headerLength << " Bytes, Buffer is now " << info->buffer->size() << endl;
 	if( info->buffer->size() >= static_cast<uint>(info->dataLength) )
-	{	
+	{
 		info->buffer->close();
 		QString who;
 		switch( info->type )
@@ -426,7 +426,7 @@
 			{
 			who.append( info->buffer->buffer() );
 			who = who.mid( 2, who.find('\n') - 3);
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "User wants to view webcam: " << who << " len: " << who.length() << " Index: " << accessGranted.findIndex( who ) << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << "User wants to view webcam: " << who << " len: " << who.length() << " Index: " << accessGranted.findIndex( who ) << endl;
 			if( accessGranted.findIndex( who ) >= 0 )
 			{
 				grantAccess( who );
@@ -438,13 +438,13 @@
 		case NewWatcher:
 			who.append( info->buffer->buffer() );
 			who = who.left( who.length() - 1 );
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "New Watcher of webcam: " << who << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << "New Watcher of webcam: " << who << endl;
 			emit viewerJoined( who );
 		break;
 		case WatcherLeft:
 			who.append( info->buffer->buffer() );
 			who = who.left( who.length() - 1 );
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "A Watcher left: " << who << " len: " << who.length() << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << "A Watcher left: " << who << " len: " << who.length() << endl;
 			accessGranted.remove( who );
 			emit viewerLeft( who );
 		break;
@@ -452,17 +452,28 @@
 			{
 			QPixmap webcamImage;
 			//webcamImage.loadFromData( info->buffer->buffer() );
-	
+
+			// FIXME (same)
+			//KTemporaryFile jpcTmpImageFile;
+			//jpcTmpImageFile.setAutoRemove(false);
+			//jpcTmpImageFile.open();
+			//KTemporaryFile bmpTmpImageFile;
+			//bmpTmpImageFile.setAutoRemove(false);
+			//bmpTmpImageFile.open();
+
+			//jpcTmpImageFile.write((info->buffer->buffer()).data(), info->buffer->size());
+			//jpcTmpImageFile.close();
+
 			KTempFile jpcTmpImageFile;
-			KTempFile bmpTmpImageFile;
-			QFile *file = jpcTmpImageFile.file();
-			file->writeBlock((info->buffer->buffer()).data(), info->buffer->size());
-			file->close();
-			
+                        KTempFile bmpTmpImageFile;
+                        QFile *file = jpcTmpImageFile.file();
+                        file->writeBlock((info->buffer->buffer()).data(), info->buffer->size());
+                        file->close();
+
 			KProcess p;
 			p << "jasper";
 			p << "--input" << jpcTmpImageFile.name() << "--output" << bmpTmpImageFile.name() << "--output-format" << "bmp";
-			
+
 			p.start( KProcess::Block );
 			if( p.exitStatus() != 0 )
 			{
@@ -475,15 +486,15 @@
 				emit webcamImageReceived( info->sender, webcamImage );
 			}
 			QFile::remove(jpcTmpImageFile.name());
-			QFile::remove(bmpTmpImageFile.name());
-	
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Image Received. Size: " << webcamImage.size() << endl;
+                        QFile::remove(bmpTmpImageFile.name());
+
+			kdDebug(YAHOO_RAW_DEBUG) << "Image Received. Size: " << webcamImage.size() << endl;
 			}
 		break;
 		default:
 		break;
 		}
-		
+
 		info->headerRead = false;
 		delete info->buffer;
 		info->buffer = 0L;
@@ -491,7 +502,7 @@
 	if( data.size() > read )
 	{
 		// More headers to read
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "More data to read..." << data.size() - read << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "More data to read..." << data.size() - read << endl;
 		QByteArray newData( data.size() - read );
 		QDataStream stream( newData, IO_WriteOnly );
 		stream.writeRawBytes( data.data() + read, data.size() - read );
@@ -506,33 +517,33 @@
 	if( info->buffer )
 		delete info->buffer;
 	socketMap.remove( socket );
-	delete socket;	
+	delete socket;
 }
 
 void WebcamTask::closeWebcam( const QString & who )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	SocketInfoMap::Iterator it;
 	for( it = socketMap.begin(); it != socketMap.end(); it++ )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << it.data().sender << " - " << who << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << it.data().sender << " - " << who << endl;
 		if( it.data().sender == who )
 		{
 			cleanUpConnection( it.key() );
 			return;
 		}
 	}
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Error. You tried to close a connection that didn't exist." << endl;
-	client()->notifyError( i18n( "An error occured closing the webcam session. " ), i18n( "You tried to close a connection that didn't exist." ), Client::Debug );
+	kdDebug(YAHOO_RAW_DEBUG) << "Error. You tried to close a connection that did not exist." << endl;
+	client()->notifyError( i18n( "An error occurred closing the webcam session. " ), i18n( "You tried to close a connection that did not exist." ), Client::Debug );
 }
 
 
-// Sending 
+// Sending
 
 void WebcamTask::registerWebcam()
-{	
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
 	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceWebcam);
 	t->setId( client()->sessionID() );
 	t->setParam( 1, client()->userId().local8Bit());
@@ -543,14 +554,14 @@
 
 void WebcamTask::addPendingInvitation( const QString &userId )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Inviting " << userId << " to watch the webcam." << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "Inviting " << userId << " to watch the webcam." << endl;
 	pendingInvitations.append( userId );
 	accessGranted.append( userId );
 }
 
 void WebcamTask::grantAccess( const QString &userId )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	KStreamSocket *socket = 0L;
 	SocketInfoMap::Iterator it;
 	for( it = socketMap.begin(); it != socketMap.end(); it++ )
@@ -563,7 +574,7 @@
 	}
 	if( !socket )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Error. No outgoing socket found." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Error. No outgoing socket found." << endl;
 		return;
 	}
 	QByteArray ar;
@@ -573,12 +584,12 @@
 	stream << (Q_INT8)0x0d << (Q_INT8)0x00 << (Q_INT8)0x05 << (Q_INT8)0x00 << (Q_INT32)user.length()
 	<< (Q_INT8)0x00 << (Q_INT8)0x00 << (Q_INT8)0x00 << (Q_INT8)0x00 << (Q_INT8)0x01;
 	socket->writeBlock( ar.data(), ar.size() );
-	socket->writeBlock( user.local8Bit(), user.length() );
+        socket->writeBlock( user.local8Bit(), user.length() );
 }
 
 void WebcamTask::closeOutgoingWebcam()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	KStreamSocket *socket = 0L;
 	SocketInfoMap::Iterator it;
 	for( it = socketMap.begin(); it != socketMap.end(); it++ )
@@ -591,17 +602,17 @@
 	}
 	if( !socket )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Error. No outgoing socket found." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Error. No outgoing socket found." << endl;
 		return;
 	}
-	
+
 	cleanUpConnection( socket );
 	transmittingData = false;
 }
 
 void WebcamTask::sendEmptyWebcamImage()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	KStreamSocket *socket = 0L;
 	SocketInfoMap::Iterator it;
@@ -615,11 +626,11 @@
 	}
 	if( !socket )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Error. No outgoing socket found." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Error. No outgoing socket found." << endl;
 		return;
 	}
 	if( socketMap[socket].status != SendingEmpty )
-		return;	
+		return;
 
 	pictureBuffer.resize( 0 );
 	transmissionPending = true;
@@ -630,8 +641,8 @@
 
 void WebcamTask::sendWebcamImage( const QByteArray &image )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	pictureBuffer.duplicate( image );
+	kdDebug(YAHOO_RAW_DEBUG) ;
+	pictureBuffer = image;
 	transmissionPending = true;
 	KStreamSocket *socket = 0L;
 	SocketInfoMap::Iterator it;
@@ -645,7 +656,7 @@
 	}
 	if( !socket )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Error. No outgoing socket found." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Error. No outgoing socket found." << endl;
 		return;
 	}
 
@@ -656,7 +667,7 @@
 {
 	if( !transmissionPending )
 		return;
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "arraysize: " << pictureBuffer.size() << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "arraysize: " << pictureBuffer.size() << endl;
 
 	// Find outgoing socket
 	KStreamSocket *socket = 0L;
@@ -671,7 +682,7 @@
 	}
 	if( !socket )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Error. No outgoing socket found." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Error. No outgoing socket found." << endl;
 		return;
 	}
 
@@ -683,7 +694,7 @@
 	socket->writeBlock( buffer.data(), buffer.size() );
 	if( pictureBuffer.size() )
 		socket->writeBlock( pictureBuffer.data(), pictureBuffer.size() );
-	
+
 	transmissionPending = false;
 }
 #include "webcamtask.moc"
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/webcamtask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/webcamtask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/webcamtask.h	2010-01-21 13:32:46.808475136 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/webcamtask.h	2010-01-18 05:55:15.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     Handles incoming webcam connections
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -60,15 +60,14 @@
 public:
 	WebcamTask(Task *parent);
 	~WebcamTask();
-	
+
 	bool take(Transfer *transfer);
-	bool forMe( Transfer* transfer ) const;
 
 	bool transmitting() { return transmittingData; }
-	
+
 	void requestWebcam( const QString &who );
 	void closeWebcam( const QString &who );
-	
+
 	void registerWebcam();
 	void sendWebcamImage( const QByteArray &image );
 	void addPendingInvitation( const QString &userId );
@@ -91,13 +90,15 @@
 	void slotRead();
 	void sendEmptyWebcamImage();
 	void transmitWebcamImage();
+protected:
+	virtual bool forMe( const Transfer* transfer ) const;
 private:
 	void parseWebcamInformation( YMSGTransfer *transfer );
 	void parseData( QByteArray &data, KStreamSocket *socket );
 
 	void connectStage2( KStreamSocket *socket );
 	void processData( KStreamSocket *socket );
-	void cleanUpConnection( KStreamSocket *socket );	
+	void cleanUpConnection( KStreamSocket *socket );
 
 	QString keyPending;	// the buddy we have requested the webcam from
 	SocketInfoMap socketMap;
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yabentry.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yabentry.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yabentry.cpp	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yabentry.cpp	2010-01-18 03:55:24.000000000 +0200
@@ -1,7 +1,7 @@
 /*
     yabcpp - Encapsulate Yahoo Adressbook information
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
     Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
 
     *************************************************************************
@@ -48,9 +48,9 @@
 	privateZIP = e.attribute("hz");
 	privateCountry = e.attribute("hn");
 	QString birtday = e.attribute("bi");
-	birthday = QDate( birtday.section("/",2,2).toInt(), birtday.section("/",1,1).toInt(), birtday.section("/",0,0).toInt() );
+	birthday = QDate( birtday.section('/',2,2).toInt(), birtday.section('/',1,1).toInt(), birtday.section('/',0,0).toInt() );
 	QString an = e.attribute("an");
-	anniversary = QDate( an.section("/",2,2).toInt(), an.section("/",1,1).toInt(), an.section("/",0,0).toInt() );
+	anniversary = QDate( an.section('/',2,2).toInt(), an.section('/',1,1).toInt(), an.section('/',0,0).toInt() );
 	additional1 = e.attribute("c1");
 	additional2 = e.attribute("c2");
 	additional3 = e.attribute("c3");
@@ -67,8 +67,8 @@
 
 void YABEntry::fromQDomDocument( const QDomDocument &d )
 {
-	kdDebug() << d.toString() << 
-		d.elementsByTagName("yi").item(0).toElement().text();
+	kdDebug() << d.toString() <<
+		d.elementsByTagName("yi").item(0).toElement().text() << endl;
 	yahooId = d.elementsByTagName("yi").item(0).toElement().text();
 	firstName = d.elementsByTagName("fn").item(0).toElement().text();
 	secondName = d.elementsByTagName("mn").item(0).toElement().text();
@@ -98,9 +98,9 @@
 	privateZIP = d.elementsByTagName("hz").item(0).toElement().text();
 	privateCountry = d.elementsByTagName("hn").item(0).toElement().text();
 	QString birtday = d.elementsByTagName("bi").item(0).toElement().text();
-	birthday = QDate( birtday.section("/",2,2).toInt(), birtday.section("/",1,1).toInt(), birtday.section("/",0,0).toInt() );
+	birthday = QDate( birtday.section('/',2,2).toInt(), birtday.section('/',1,1).toInt(), birtday.section('/',0,0).toInt() );
 	QString an = d.elementsByTagName("an").item(0).toElement().text();
-	anniversary = QDate( an.section("/",2,2).toInt(), an.section("/",1,1).toInt(), an.section("/",0,0).toInt() );
+	anniversary = QDate( an.section('/',2,2).toInt(), an.section('/',1,1).toInt(), an.section('/',0,0).toInt() );
 	additional1 = d.elementsByTagName("c1").item(0).toElement().text();
 	additional2 = d.elementsByTagName("c2").item(0).toElement().text();
 	additional3 = d.elementsByTagName("c3").item(0).toElement().text();
@@ -135,13 +135,13 @@
 	e.setAttribute( "pu", privateURL );
 	e.setAttribute( "ti", title );
 	e.setAttribute( "co", corporation );
-	e.setAttribute( "wa", QString( workAdress ).replace( "\n", "&#xd;&#xa;" ) );
+	e.setAttribute( "wa", QString( workAdress ).replace( '\n', "&#xd;&#xa;" ) );
 	e.setAttribute( "wc", workCity );
 	e.setAttribute( "ws", workState );
 	e.setAttribute( "wz", workZIP );
 	e.setAttribute( "wn", workCountry );
 	e.setAttribute( "wu", workURL );
-	e.setAttribute( "ha", QString( privateAdress ).replace( "\n", "&#xd;&#xa;" ) );
+	e.setAttribute( "ha", QString( privateAdress ).replace( '\n', "&#xd;&#xa;" ) );
 	e.setAttribute( "hc", privateCity );
 	e.setAttribute( "hs", privateState );
 	e.setAttribute( "hz", privateZIP );
@@ -152,7 +152,7 @@
 	e.setAttribute( "c2", additional2 );
 	e.setAttribute( "c3", additional3 );
 	e.setAttribute( "c4", additional4 );
-	e.setAttribute( "cm", QString( notes ).replace( "\n", "&#xd;&#xa;" ) );
+	e.setAttribute( "cm", QString( notes ).replace( '\n', "&#xd;&#xa;" ) );
 	e.setAttribute( "ima", imAIM );
 	e.setAttribute( "img", imGoogleTalk );
 	e.setAttribute( "imq", imICQ );
@@ -164,38 +164,38 @@
 
 void YABEntry::dump() const
 {
-	kdDebug() << "firstName: " << firstName << endl << 
-		"secondName: " << secondName << endl << 
-		"lastName: " << lastName << endl << 
-		"nickName: " << nickName << endl << 
-		"title: " << title << endl << 
-		"phoneMobile: " << phoneMobile << endl << 
-		"email: " << email << endl << 
-		"yahooId: " << yahooId << endl << 
-		"pager: " << pager << endl << 
-		"fax: " << fax << endl << 
-		"additionalNumber: " << additionalNumber << endl << 
-		"altEmail1: " << altEmail1 << endl << 
-		"altEmail2: " << altEmail2 << endl << 
-		"privateAdress: " << privateAdress << endl << 
-		"privateCity: " << privateCity << endl << 
-		"privateState: " << privateState << endl << 
-		"privateZIP: " << privateZIP << endl << 
-		"privateCountry: " << privateCountry << endl << 
-		"privatePhone: " << privatePhone << endl << 
-		"privateURL: " << privateURL << endl << 
-		"corporation: " << corporation << endl << 
-		"workAdress: " << workAdress << endl << 
-		"workCity: " << workCity << endl << 
-		"workState: " << workState << endl << 
-		"workZIP: " << workZIP << endl << 
-		"workCountry: " << workCountry << endl << 
-		"workURL: " << workURL << endl << 
-		"birthday: " << birthday.toString() << endl << 
-		"anniversary: " << anniversary.toString() << endl << 
-		"notes: " << notes << endl << 
-		"additional1: " << additional1 << endl << 
-		"additional2: " << additional2 << endl << 
-		"additional3: " << additional3 << endl << 
+	kdDebug() << "firstName: " << firstName << endl <<
+		"secondName: " << secondName << endl <<
+		"lastName: " << lastName << endl <<
+		"nickName: " << nickName << endl <<
+		"title: " << title << endl <<
+		"phoneMobile: " << phoneMobile << endl <<
+		"email: " << email << endl <<
+		"yahooId: " << yahooId << endl <<
+		"pager: " << pager << endl <<
+		"fax: " << fax << endl <<
+		"additionalNumber: " << additionalNumber << endl <<
+		"altEmail1: " << altEmail1 << endl <<
+		"altEmail2: " << altEmail2 << endl <<
+		"privateAdress: " << privateAdress << endl <<
+		"privateCity: " << privateCity << endl <<
+		"privateState: " << privateState << endl <<
+		"privateZIP: " << privateZIP << endl <<
+		"privateCountry: " << privateCountry << endl <<
+		"privatePhone: " << privatePhone << endl <<
+		"privateURL: " << privateURL << endl <<
+		"corporation: " << corporation << endl <<
+		"workAdress: " << workAdress << endl <<
+		"workCity: " << workCity << endl <<
+		"workState: " << workState << endl <<
+		"workZIP: " << workZIP << endl <<
+		"workCountry: " << workCountry << endl <<
+		"workURL: " << workURL << endl <<
+		"birthday: " << birthday.toString() << endl <<
+		"anniversary: " << anniversary.toString() << endl <<
+		"notes: " << notes << endl <<
+		"additional1: " << additional1 << endl <<
+		"additional2: " << additional2 << endl <<
+		"additional3: " << additional3 << endl <<
 		"additional4: " << additional4 << endl;
 }
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yabentry.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yabentry.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yabentry.h	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yabentry.h	2010-01-18 03:53:51.000000000 +0200
@@ -1,7 +1,7 @@
 /*
     yabentry.h - Encapsulate Yahoo Adressbook information
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
     Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
 
     *************************************************************************
@@ -71,7 +71,7 @@
 	QString		workPhone;
 	QString		workURL;
 
-	// Miscellanous
+	// Miscellaneous
 	QDate		birthday;
 	QDate		anniversary;
 	QString		notes;
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yabtask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yabtask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yabtask.cpp	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yabtask.cpp	2010-01-18 17:00:01.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     yabtask.h - Handles the Yahoo Address Book
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
     Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
 
     *************************************************************************
@@ -29,7 +29,7 @@
 
 YABTask::YABTask(Task* parent) : Task(parent)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 }
 
 YABTask::~YABTask()
@@ -38,29 +38,25 @@
 
 bool YABTask::take( Transfer* transfer )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
 	if ( !forMe( transfer ) )
 		return false;
 
 	YMSGTransfer *t = static_cast<YMSGTransfer*>(transfer);
-	
+
 	if( t->service() == Yahoo::ServiceContactDetails )
 		parseContactDetails( t );
-	
+
 	return true;
 }
 
-bool YABTask::forMe( Transfer* transfer ) const
+bool YABTask::forMe( const Transfer* transfer ) const
 {
-// 	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
-	YMSGTransfer *t = 0L;
-	t = dynamic_cast<YMSGTransfer*>(transfer);
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
 	if (!t)
 		return false;
 
-	if ( t->service() == Yahoo::ServiceContactDetails )	
+	if ( t->service() == Yahoo::ServiceContactDetails )
 		return true;
 	else
 		return false;
@@ -68,14 +64,14 @@
 
 void YABTask::parseContactDetails( YMSGTransfer* t )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 
 	QString from;		/* key = 7  */
 	int count;
 
 	from = t->firstParam( 4 );
 	count = t->paramCount( 5 );
-	
+
 	for( int i = 0; i < count; i++ )
 	{
 		QString who = t->nthParam( 5, i );
@@ -96,7 +92,7 @@
 
 void YABTask::getAllEntries( long lastMerge, long lastRemoteRevision )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "LastMerge: " << lastMerge << " LastRemoteRevision: " << lastRemoteRevision << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "LastMerge: " << lastMerge << " LastRemoteRevision: " << lastRemoteRevision << endl;
 	m_data = QString::null;
 	QString url = QString::fromLatin1("http://address.yahoo.com/yab/us?v=XM&prog=ymsgr&.intl=us&diffs=1&t=%1&tags=short&rt=%2&prog-ver=%3")
 		.arg( lastMerge ).arg( lastRemoteRevision ).arg( YMSG_PROGRAM_VERSION_STRING );
@@ -111,44 +107,47 @@
 
 void YABTask::slotData( KIO::Job* /*job*/, const QByteArray &info  )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	m_data += info;
 }
 
 void YABTask::slotResult( KIO::Job* job )
 {
 	if( job->error () || m_transferJob->isErrorPage () )
-		client()->notifyError( i18n( "Could not retrieve server side addressbook for user info." ), job->errorString(), Client::Info );
-	else 
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Server side addressbook retrieved." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "Could not retrieve server side addressbook for user info." << endl;
+		client()->notifyError( i18n( "Could not retrieve server side address book for user info." ), job->errorString(), Client::Info );
+	}
+	else
+	{
+		kdDebug(YAHOO_RAW_DEBUG) << "Server side addressbook retrieved." << endl;
 		QDomDocument doc;
 		QDomNodeList list;
 		QDomElement e;
-		uint it = 0;
+		int it = 0;
 
 		kdDebug(YAHOO_RAW_DEBUG) << m_data << endl;
 		doc.setContent( m_data );
-		
+
 		list = doc.elementsByTagName( "ab" );			// Get the Addressbook
 		for( it = 0; it < list.count(); it++ )	{
 			if( !list.item( it ).isElement() )
 				continue;
 			e = list.item( it ).toElement();
-			
+
 			if( !e.attribute( "lm" ).isEmpty() )
 				emit gotRevision( e.attribute( "lm" ).toLong(), true );
 
 			if( !e.attribute( "rt" ).isEmpty() )
 				emit gotRevision( e.attribute( "rt" ).toLong(), false );
 		}
-		
+
 		list = doc.elementsByTagName( "ct" );			// Get records
 		for( it = 0; it < list.count(); it++ )	{
 			if( !list.item( it ).isElement() )
 				continue;
 			e = list.item( it ).toElement();
-			
+
 			YABEntry *entry = new YABEntry;
 			entry->fromQDomElement( e );
 			entry->source = YABEntry::SourceYAB;
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yabtask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yabtask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yabtask.h	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yabtask.h	2010-01-18 15:40:35.000000000 +0200
@@ -2,7 +2,7 @@
     Kopete Yahoo Protocol
     yabtask.h - Handles the Yahoo Address Book
 
-    Copyright (c) 2006 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
     Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
 
     *************************************************************************
@@ -22,12 +22,11 @@
 #include "yabentry.h"
 
 class YMSGTransfer;
-struct KURL;
-namespace KIO	{ 
+
+namespace KIO	{
 	class Job;
-	class TransferJob; 
+	class TransferJob;
 }
-class QDomElement;
 
 /**
 @author André Duffeck
@@ -38,9 +37,8 @@
 public:
 	YABTask(Task *parent);
 	~YABTask();
-	
+
 	bool take(Transfer *transfer);
-	bool forMe( Transfer* transfer ) const;
 
 	void getAllEntries( long lastMerge, long lastRemoteRevision );
 	void saveEntry( const YABEntry & );
@@ -48,6 +46,7 @@
 	void gotEntry( YABEntry * );
 	void gotRevision( long rev, bool merged );
 protected:
+	virtual bool forMe( const Transfer* transfer ) const;
 	void parseContactDetails( YMSGTransfer* t );
 private slots:
 	void slotData( KIO::Job*, const QByteArray & );
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoobuddyiconloader.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoobuddyiconloader.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoobuddyiconloader.cpp	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoobuddyiconloader.cpp	2010-01-19 16:55:51.000000000 +0200
@@ -1,7 +1,7 @@
 /*
     yahoobuddyiconloader.cpp - Fetches YahooBuddyIcons
 
-    Copyright (c) 2005 by André Duffeck <andre@duffeck.de>
+    Copyright (c) 2005 by André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -42,12 +42,12 @@
 
 void YahooBuddyIconLoader::fetchBuddyIcon( const QString &who, KURL url, int checksum )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << url << endl;
 	KIO::TransferJob *transfer;
 	QString Url = url.url();
 	QString ext = Url.left( Url.findRev( "?" ) );
 	ext = ext.right( ext.length() - ext.findRev( "." ) );
-	
+
 	transfer = KIO::get( url, false, false );
 	connect( transfer, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotComplete( KIO::Job* ) ) );
 	connect( transfer, SIGNAL( data( KIO::Job*, const QByteArray& ) ), this, SLOT( slotData( KIO::Job*, const QByteArray& ) ) );
@@ -55,48 +55,37 @@
 	m_jobs[transfer].url = url;
 	m_jobs[transfer].who = who;
 	m_jobs[transfer].checksum = checksum;
-	m_jobs[transfer].file = new KTempFile( locateLocal( "tmp", "yahoobuddyicon-" ), ext );
-	m_jobs[transfer].file->setAutoDelete( true );
 
 }
 
 void YahooBuddyIconLoader::slotData( KIO::Job *job, const QByteArray& data )
 {
-
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
 	KIO::TransferJob *transfer = static_cast< KIO::TransferJob * >(job);
 
-	if( m_jobs[transfer].file )
-		m_jobs[transfer].file->file()->writeBlock( data.data() , data.size() );
-
+	// FIXME need to check
+	//m_jobs[transfer].icon.append( data );
+	int oldsize = m_jobs[transfer].icon.size();
+	m_jobs[transfer].icon.resize( data.size() + oldsize );
+	memcpy( m_jobs[transfer].icon.data() + oldsize, data.data(), data.size() );
 }
 
 void YahooBuddyIconLoader::slotComplete( KIO::Job *job )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 
 	KIO::TransferJob *transfer = static_cast< KIO::TransferJob * >(job);
 
 	if ( job->error () || transfer->isErrorPage () )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "An error occured while downloading buddy icon." << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << "An error occurred while downloading buddy icon." << endl;
 		if( m_client )
-			m_client->notifyError( i18n( "An error occured while downloading buddy icon (%1)" ).arg(m_jobs[transfer].url.url()), job->errorString(), Client::Info );
+			m_client->notifyError( i18n( "An error occurred while downloading a buddy icon (%1)").arg( m_jobs[transfer].url.url() ), job->errorString(), Client::Info );
 	}
 	else
 	{
-		if ( m_jobs[transfer].file )
-		{
-			m_jobs[transfer].file->close();
-			emit fetchedBuddyIcon( m_jobs[transfer].who, m_jobs[transfer].file, m_jobs[transfer].checksum );
-		}
-		else
-		{
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Fatal Error occured. IconLoadJob has an empty KTempFile pointer." << endl;
-			if( m_client )
-				m_client->notifyError( i18n( "Fatal Error occured while downloading buddy icon." ), i18n( "IconLoadJob has an empty KTempFile pointer." ), Client::Info );
-		}
+		emit fetchedBuddyIcon( m_jobs[transfer].who, m_jobs[transfer].icon, m_jobs[transfer].checksum );
 	}
 
 	m_jobs.remove( transfer );
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoobuddyiconloader.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoobuddyiconloader.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoobuddyiconloader.h	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoobuddyiconloader.h	2010-01-19 01:24:18.000000000 +0200
@@ -1,7 +1,7 @@
 /*
     yahoobuddyiconloader.h - Fetches YahooBuddyIcons
 
-    Copyright (c) 2005 by André Duffeck <andre@duffeck.de>
+    Copyright (c) 2005 by André Duffeck <duffeck@kde.org>
 
     *************************************************************************
     *                                                                       *
@@ -24,7 +24,7 @@
 // KDE Includes
 #include <kurl.h>
 
-class KTempFile;
+class KJob;
 class Client;
 namespace KIO {
 	class Job;
@@ -35,7 +35,7 @@
 	KURL url;
 	QString who;
 	int checksum;
-	KTempFile *file;
+	QByteArray icon;
 };
 
 /**
@@ -60,9 +60,9 @@
 signals:
 	/**
 	 * 	The account can connect to this signal and append the icon
-	 * 	stored in 'file' to the apropriate contact
+	 * 	stored in 'file' to the appropriate contact
 	 */
-	void fetchedBuddyIcon( const QString &who, KTempFile *file, int checksum );
+	void fetchedBuddyIcon( const QString &who, const QByteArray &icon, int checksum );
 
 private slots:
 	void slotData( KIO::Job *job, const QByteArray &data );
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoobytestream.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoobytestream.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoobytestream.cpp	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoobytestream.cpp	2010-01-18 18:51:30.000000000 +0200
@@ -22,10 +22,10 @@
 
 #include "yahoobytestream.h"
 
-KNetworkByteStream::KNetworkByteStream( QObject *parent, const char */*name*/ )
+KNetworkByteStream::KNetworkByteStream( QObject *parent )
  : ByteStream ( parent )
 {
-	kdDebug( 14181 ) << k_funcinfo << "Instantiating new KNetwork byte stream." << endl;
+	kdDebug( 14181 ) << "Instantiating new KNetwork byte stream." << endl;
 
 	// reset close tracking flag
 	mClosing = false;
@@ -45,7 +45,7 @@
 
 bool KNetworkByteStream::connect( QString host, QString service )
 {
-	kdDebug( 14181 ) << k_funcinfo << "Connecting to " << host << ", service " << service << endl;
+	kdDebug( 14181 ) << "Connecting to " << host << ", service " << service << endl;
 
 	return socket()->connect( host, service );
 }
@@ -58,7 +58,7 @@
 
 void KNetworkByteStream::close ()
 {
-	kdDebug ( 14181 ) << k_funcinfo << "Closing stream." << endl;
+	kdDebug ( 14181 ) << "Closing stream." << endl;
 
 	// close the socket and set flag that we are closing it ourselves
 	mClosing = true;
@@ -69,8 +69,8 @@
 {
 	// send all data from the buffers to the socket
 	QByteArray writeData = takeWrite();
-	kdDebug( 14181 ) << k_funcinfo << "[writeData.size() = " << writeData.size() << "]" <<   endl;
-	
+	kdDebug( 14181 ) << "[writeData.size() = " << writeData.size() << "]" << endl;
+
 	socket()->writeBlock( writeData.data(), writeData.size () );
 
 	return writeData.size();
@@ -93,13 +93,13 @@
 
 void KNetworkByteStream::slotConnectionClosed()
 {
-	kdDebug( 14181 ) << k_funcinfo << "Socket has been closed." << endl;
+	kdDebug( 14181 ) << "Socket has been closed." << endl;
 
 	// depending on who closed the socket, emit different signals
 	if ( mClosing )
 	{
 		kdDebug( 14181 ) << "..by ourselves!" << endl;
-		kdDebug( 14181 ) << "socket error is " << socket()->errorString( socket()->error() ) << endl;
+		kdDebug( 14181 ) << "socket error is " << socket()->errorString() << endl;
 		emit connectionClosed ();
 	}
 	else
@@ -111,9 +111,10 @@
 
 void KNetworkByteStream::slotReadyRead()
 {
-	kdDebug( 14181 ) <<  endl;
+	kdDebug( 14181 );
 	// stuff all available data into our buffers
-	QByteArray readBuffer( socket()->bytesAvailable () );
+	QByteArray readBuffer;
+	readBuffer.resize( socket()->bytesAvailable () );
 
 	socket()->readBlock( readBuffer.data (), readBuffer.size () );
 
@@ -130,7 +131,7 @@
 
 void KNetworkByteStream::slotError( int code )
 {
-	kdDebug( 14181 ) << k_funcinfo << "Socket error " << code << endl;
+	kdDebug( 14181 ) << "Socket error " << code << endl;
 
 	emit error( code );
 }
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoobytestream.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoobytestream.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoobytestream.h	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoobytestream.h	2010-01-18 18:50:32.000000000 +0200
@@ -15,8 +15,8 @@
     *************************************************************************
 */
 
-#ifndef KNETWORKBYTESTREAM_H
-#define KNETWORKBYTESTREAM_H
+#ifndef YAHOOBYTESTREAM_H
+#define YAHOOBYTESTREAM_H
 
 #include <kbufferedsocket.h>
 
@@ -27,14 +27,14 @@
  * Low level socket class, using KDE's KNetwork socket classes
  * @author Till Gerken
  */
- 
+
 class KNetworkByteStream : public ByteStream
 {
 
 Q_OBJECT
 
 public:
-	KNetworkByteStream ( QObject *parent = 0, const char *name = 0 );
+	KNetworkByteStream ( QObject *parent = 0 );
 
 	~KNetworkByteStream ();
 
@@ -63,7 +63,6 @@
 
 };
 
-#endif
+#endif // YAHOOBYTESTREAM_H
 
 // kate: indent-width 4; replace-tabs off; tab-width 4; space-indent off;
-
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoochattask.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoochattask.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoochattask.cpp	1970-01-01 02:00:00.000000000 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoochattask.cpp	2010-01-18 15:40:20.000000000 +0200
@@ -0,0 +1,348 @@
+/*
+    Kopete Yahoo Protocol
+    yahoochattask.cpp - Handle Yahoo Chat
+
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
+    Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
+
+    *************************************************************************
+    *                                                                       *
+    * This library is free software; you can redistribute it and/or         *
+    * modify it under the terms of the GNU Lesser General Public            *
+    * License as published by the Free Software Foundation; either          *
+    * version 2 of the License, or (at your option) any later version.      *
+    *                                                                       *
+    *************************************************************************
+*/
+
+#include "yahoochattask.h"
+#include "transfer.h"
+#include "ymsgtransfer.h"
+#include "yahootypes.h"
+#include "client.h"
+#include <kdebug.h>
+#include <klocale.h>
+#include <kio/global.h>
+#include <kio/job.h>
+#include <kio/jobclasses.h>
+#include <qdom.h>
+
+YahooChatTask::YahooChatTask(Task* parent) : Task(parent)
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+	m_loggedIn = false;
+}
+
+YahooChatTask::~YahooChatTask()
+{
+}
+
+bool YahooChatTask::take( Transfer* transfer )
+{
+	if ( !forMe( transfer ) )
+		return false;
+
+	YMSGTransfer *t = 0L;
+	t = dynamic_cast<YMSGTransfer*>(transfer);
+	if (!t)
+		return false;
+
+	if( t->service() == Yahoo::ServiceChatOnline )
+		parseLoginResponse( t );
+	else if( t->service() == Yahoo::ServiceComment )
+		parseChatMessage( t );
+	else if( t->service() == Yahoo::ServiceChatJoin )
+		parseJoin( t );
+	else if( t->service() == Yahoo::ServiceChatExit )
+		parseChatExit( t );
+	else if( t->service() == Yahoo::ServiceChatLogout )
+		parseLogout( t );
+	return true;
+}
+
+bool YahooChatTask::forMe( const Transfer* transfer ) const
+{
+	const YMSGTransfer *t = 0L;
+	t = dynamic_cast<const YMSGTransfer*>(transfer);
+	if (!t)
+		return false;
+
+	if ( t->service() == Yahoo::ServiceChatOnline ||
+		t->service() == Yahoo::ServiceChatGoto ||
+		t->service() == Yahoo::ServiceChatJoin ||
+		t->service() == Yahoo::ServiceChatleave ||
+		t->service() == Yahoo::ServiceChatExit ||
+		t->service() == Yahoo::ServiceChatLogout ||
+		t->service() == Yahoo::ServiceChatPing ||
+		t->service() == Yahoo::ServiceChatLogon ||
+		t->service() == Yahoo::ServiceChatLogoff ||
+		t->service() == Yahoo::ServiceComment )
+		return true;
+	else
+		return false;
+}
+
+void YahooChatTask::onGo()
+{
+}
+
+void YahooChatTask::getYahooChatCategories()
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+	KIO::TransferJob *transfer;
+
+	transfer = KIO::get( KURL("http://insider.msg.yahoo.com/ycontent/?chatcat=0"), false, false );
+	transfer->addMetaData( "UserAgent", "Mozilla/4.0 (compatible; MSIE 5.5)");
+	transfer->addMetaData( "no-cache", "true" );
+	transfer->addMetaData( "cookies", "manual" );
+	transfer->addMetaData("setcookies", QString("Cookie: %1; %2; %3").arg(client()->tCookie(), client()->yCookie()) );
+
+
+	connect( transfer, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotCategoriesComplete( KIO::Job* ) ) );
+	connect( transfer, SIGNAL( data( KIO::Job*, const QByteArray& ) ), this, SLOT( slotData( KIO::Job*, const QByteArray& ) ) );
+}
+
+void YahooChatTask::getYahooChatRooms( const Yahoo::ChatCategory &category )
+{
+	kdDebug(YAHOO_RAW_DEBUG) << "Category Id: " << category.id << endl;
+	KIO::TransferJob *transfer;
+
+	transfer = KIO::get( KURL(QString("http://insider.msg.yahoo.com/ycontent/?chatroom_%1=0").arg( category.id )), false, false );
+	transfer->addMetaData( "UserAgent", "Mozilla/4.0 (compatible; MSIE 5.5)");
+	transfer->addMetaData( "no-cache", "true" );
+	transfer->addMetaData( "cookies", "manual" );
+	transfer->addMetaData("setcookies", QString("Cookie: %1; %2; %3").arg(client()->tCookie(), client()->yCookie()) );
+
+
+	connect( transfer, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotChatRoomsComplete( KIO::Job* ) ) );
+	connect( transfer, SIGNAL( data( KIO::Job*, const QByteArray& ) ), this, SLOT( slotData( KIO::Job*, const QByteArray& ) ) );
+
+	m_jobs[ transfer ].category = category;
+}
+
+void YahooChatTask::slotData( KIO::Job *job, const QByteArray& data)
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+	// FIXME (same)
+	//m_jobs[job].data.append( data );
+}
+
+void YahooChatTask::slotCategoriesComplete( KIO::Job *job )
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
+	KIO::TransferJob *transfer = static_cast< KIO::TransferJob * >(job);
+
+	if ( job->error () || transfer->isErrorPage () )
+	{
+		kdDebug(YAHOO_RAW_DEBUG) << "An error occurred while downloading the chat categories list." << endl;
+	}
+	else
+	{
+		QDomDocument doc;
+		doc.setContent( m_jobs[ transfer ].data );
+		emit gotYahooChatCategories( doc );
+	}
+
+	m_jobs.remove( transfer );
+}
+
+void YahooChatTask::slotChatRoomsComplete( KIO::Job *job )
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
+	KIO::TransferJob *transfer = static_cast< KIO::TransferJob * >(job);
+
+	if ( job->error () || transfer->isErrorPage () )
+	{
+		kdDebug(YAHOO_RAW_DEBUG) << "An error occurred while downloading the chat categories list." << endl;
+	}
+	else
+	{
+		QDomDocument doc;
+		doc.setContent( m_jobs[ transfer ].data );
+// 		kdDebug(YAHOO_RAW_DEBUG) << doc.toString();
+		emit gotYahooChatRooms( m_jobs[ transfer ].category, doc );
+	}
+
+	m_jobs.remove( transfer );
+}
+
+void YahooChatTask::joinRoom( const Yahoo::ChatRoom &room )
+{
+	kdDebug(YAHOO_RAW_DEBUG) << "Joining room " << room.name << " (" << room.id << ")..." << endl;
+	if( !m_loggedIn )
+	{
+		m_pendingJoins.append( room );
+		login();
+		return;
+	}
+
+	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceChatJoin);
+	t->setId( client()->sessionID() );
+	t->setParam( 1, client()->userId().local8Bit() );
+	t->setParam( 104, room.name.local8Bit() );
+	t->setParam( 129, room.id );
+	t->setParam( 62, 2 );
+
+	send( t );
+}
+
+void YahooChatTask::sendYahooChatMessage( const QString &msg, const QString &handle )
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+	if( !m_loggedIn )
+	{
+		kdDebug(YAHOO_RAW_DEBUG) << "Error: trying to send, but not logged in." << endl;
+		return;
+	}
+
+	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceComment);
+	t->setId( client()->sessionID() );
+	t->setParam( 1, client()->userId().local8Bit() );
+	t->setParam( 104, handle.local8Bit() );
+	t->setParam( 117, msg.local8Bit() );
+	t->setParam( 124, 1 );
+
+	send( t );
+}
+
+void YahooChatTask::login()
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
+	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceChatOnline);
+	t->setId( client()->sessionID() );
+	t->setParam( 1, client()->userId().local8Bit() );
+	t->setParam( 135, QString("ym%1").arg(YMSG_PROGRAM_VERSION_STRING).local8Bit() );
+
+	send( t );
+}
+
+void YahooChatTask::logout()
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
+	YMSGTransfer *t = new YMSGTransfer(Yahoo::ServiceChatLogout);
+	t->setId( client()->sessionID() );
+	t->setParam( 1, client()->userId().local8Bit() );
+
+	send( t );
+}
+
+void YahooChatTask::parseLoginResponse( YMSGTransfer *t )
+{
+	if( !QString(t->firstParam( 1 )).startsWith( client()->userId().local8Bit() ) )
+		return;
+	m_loggedIn = true;
+
+	QValueList< Yahoo::ChatRoom >::iterator it;
+	for ( it = m_pendingJoins.begin(); it != m_pendingJoins.end(); ++it )
+	//for( int i = 0; i < m_pendingJoins.size(); ++i )
+	{
+		// FIXME (same)
+		// Yahoo::ChatRoom entry = m_pendingJoins.at( i );
+		Yahoo::ChatRoom entry = *it;
+		joinRoom( entry );
+
+		// FIXME (same)
+		//m_pendingJoins.removeAt( i );
+		m_pendingJoins.erase(it);
+	}
+}
+
+void YahooChatTask::parseJoin( YMSGTransfer *t )
+{
+	int room;
+	int category;
+	QString handle;
+	QString comment;
+	bool suppressJoinNotification = false;
+	QString error;
+
+	room = t->firstParam( 129 ).toInt();
+	category = t->firstParam( 128 ).toInt();
+	handle = t->firstParam( 104 );
+	comment = t->firstParam( 105 );
+	error = t->firstParam( 114 );
+
+	if( error.startsWith( "-35" ) ) {
+		client()->notifyError( i18n("Could not join chat"),
+				i18n("The room is full. Please choose another one."), Client::Error );
+		return;
+	} else if( error.startsWith( "-15" ) ) {
+		client()->notifyError( i18n("Could not join chat"),
+				i18n("Invalid user."), Client::Error );
+		return;
+	} else if( !error.isEmpty() ) {
+		client()->notifyError( i18n("Could not join chat"),
+				i18n("An unknown error occurred while joining the chat room."), Client::Error );
+		return;
+	}
+
+        // Yahoo sends a captcha requests before we can join the room
+        if( room == 0 && category == 0 && !comment.isEmpty() )
+        {
+        	kdDebug(YAHOO_RAW_DEBUG) << "Showing captcha request" << endl;
+		emit chatRoomJoined( room, category, "", handle );
+		emit chatMessageReceived( "Yahoo", comment, handle );
+        }
+
+	if( room > 0 && category > 0 )
+	{
+		// We have just joined this room. Suppress join notifications for the people
+		// that are already in here.
+		suppressJoinNotification = true;
+		emit chatRoomJoined( room, category, comment, handle );
+	}
+
+	QString nick;
+	for( int i = 0; i < t->paramCount( 109 ); ++i )
+	{
+		nick = t->nthParam( 109 , i );
+		emit chatBuddyHasJoined( nick, handle, suppressJoinNotification );
+	}
+}
+
+void YahooChatTask::parseChatMessage( YMSGTransfer *t )
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
+	QString handle;
+	QString msg;
+	QString nick;
+
+	handle = t->firstParam( 104 );
+	for( int i = 0; i < t->paramCount( 109 ); ++i )
+	{
+		nick = t->nthParam( 109, i );
+		msg = t->nthParamSeparated( 117, i, 109 );
+		emit chatMessageReceived( nick, msg, handle );
+	}
+}
+
+void YahooChatTask::parseChatExit( YMSGTransfer *t )
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
+	QString handle;
+	QString nick;
+
+	handle = t->firstParam( 104 );
+	for( int i = 0; i < t->paramCount( 109 ); ++i )
+	{
+		nick = t->nthParam( 109, i );
+		emit chatBuddyHasLeft( nick, handle );
+	}
+}
+
+void YahooChatTask::parseLogout( YMSGTransfer *t )
+{
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
+	QString nick = t->firstParam( 1 );
+	if( nick == client()->userId() )
+		m_loggedIn = false;
+}
+
+#include "yahoochattask.moc"
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoochattask.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoochattask.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoochattask.h	1970-01-01 02:00:00.000000000 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoochattask.h	2010-01-18 15:40:31.000000000 +0200
@@ -0,0 +1,87 @@
+/*
+    Kopete Yahoo Protocol
+    yahoochattask.h - Handle Yahoo Chat
+
+    Copyright (c) 2006 André Duffeck <duffeck@kde.org>
+    Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
+
+    *************************************************************************
+    *                                                                       *
+    * This library is free software; you can redistribute it and/or         *
+    * modify it under the terms of the GNU Lesser General Public            *
+    * License as published by the Free Software Foundation; either          *
+    * version 2 of the License, or (at your option) any later version.      *
+    *                                                                       *
+    *************************************************************************
+*/
+
+#ifndef YAHOOCHATTASK_H
+#define YAHOOCHATTASK_H
+
+#include "task.h"
+#include "yahootypes.h"
+#include <qmap.h>
+#include <qvaluelist.h>
+#include <qpair.h>
+
+class QDomDocument;
+class YMSGTransfer;
+namespace KIO {
+	class Job;
+}
+
+struct YahooChatJob {
+	QByteArray data;
+	Yahoo::ChatCategory category;
+};
+
+/**
+@author André Duffeck
+*/
+class YahooChatTask : public Task
+{
+Q_OBJECT
+public:
+	YahooChatTask(Task *parent);
+	virtual ~YahooChatTask();
+
+	virtual void onGo();
+	virtual bool forMe( const Transfer *transfer ) const;
+	bool take(Transfer *transfer);
+
+	void getYahooChatCategories();
+	void getYahooChatRooms( const Yahoo::ChatCategory &category );
+
+	void joinRoom( const Yahoo::ChatRoom &room );
+
+	void sendYahooChatMessage( const QString &msg, const QString &handle );
+
+	void logout();
+
+signals:
+	void gotYahooChatCategories( const QDomDocument & );
+	void gotYahooChatRooms( const Yahoo::ChatCategory &, const QDomDocument & );
+
+	void chatRoomJoined( int roomId, int categoryId, const QString &comment, const QString &handle );
+	void chatBuddyHasJoined( const QString &nick, const QString &handle, bool suppressNotification );
+	void chatBuddyHasLeft( const QString &nick, const QString &handle );
+	void chatMessageReceived( const QString &nick, const QString &message, const QString &handle );
+private:
+	void login();
+	void parseLoginResponse( YMSGTransfer *t );
+	void parseJoin( YMSGTransfer *t );
+	void parseChatMessage( YMSGTransfer * );
+	void parseChatExit( YMSGTransfer * );
+	void parseLogout( YMSGTransfer * );
+
+private slots:
+	void slotData( KIO::Job *, const QByteArray & );
+	void slotCategoriesComplete( KIO::Job * );
+	void slotChatRoomsComplete( KIO::Job * );
+private:
+	QMap< KIO::Job *, YahooChatJob > m_jobs;
+	QValueList< Yahoo::ChatRoom > m_pendingJoins;
+	bool m_loggedIn;
+};
+
+#endif
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahooclientstream.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahooclientstream.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahooclientstream.cpp	2010-01-21 13:32:46.807475066 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahooclientstream.cpp	2010-01-18 17:14:11.000000000 +0200
@@ -1,13 +1,13 @@
 /*
 	oscarclientstream.cpp - Kopete Oscar Protocol
-	
+
 	Copyright (c) 2004 Matt Rogers <matt.rogers@kdemail.net>
-	
+
 	Based on code Copyright (c) 2004 SuSE Linux AG <http://www.suse.com>
-	Based on Iris, Copyright (C) 2003  Justin Karneges
-	
+	Based on Iris, Copyright (C) 2003  Justin Karneges <justin@affinix.com>
+
 	Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
-	
+
 	*************************************************************************
 	*                                                                       *
 	* This library is free software; you can redistribute it and/or         *
@@ -21,7 +21,7 @@
 
 
 #include <qapplication.h>  // for qdebug
-#include <qguardedptr.h> 
+#include <qguardedptr.h>
 #include <qobject.h>
 #include <qptrqueue.h>
 #include <qtimer.h>
@@ -57,7 +57,7 @@
 	{
 		conn = 0;
 		bs = 0;
-		
+
 		username = QString::null;
 		password = QString::null;
 		server = QString::null;
@@ -72,7 +72,7 @@
 		notify = 0;
 		newTransfers = false;
 	}
-	
+
 	QString username;
 	QString password;
 	QString server;
@@ -92,7 +92,7 @@
 	int state;
 	int notify;
 	bool newTransfers;
-	
+
 	int errCond;
 	QString errText;
 
@@ -103,12 +103,10 @@
 };
 
 ClientStream::ClientStream(Connector *conn, QObject *parent)
-:Stream(parent)
+:Stream(parent), d(new Private())
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
-	d = new Private;
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
 	d->mode = Client;
 	d->conn = conn;
 	connect( d->conn, SIGNAL(connected()), SLOT(cr_connected()) );
@@ -128,15 +126,16 @@
 
 void ClientStream::reset(bool all)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	d->reset();
 	d->noopTimer.stop();
 
 	// client
 	if(d->mode == Client) {
-		
+
 		// reset connector
 		if(d->bs) {
+			disconnect(d->bs, 0, this, 0);
 			d->bs->close();
 			d->bs = 0;
 		}
@@ -151,7 +150,7 @@
 
 void ClientStream::connectToServer(const QString& server, bool auth)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	reset(true);
 	d->state = Connecting;
 	d->doAuth = auth;
@@ -162,7 +161,7 @@
 
 void ClientStream::continueAfterWarning()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 /* unneeded?
 	if(d->state == WaitVersion) {
 		d->state = Connecting;
@@ -235,7 +234,7 @@
 
 bool ClientStream::transfersAvailable() const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	return ( !d->in.isEmpty() );
 }
 
@@ -243,17 +242,17 @@
 {
 	if(d->in.isEmpty())
 		return 0; //first from queue...
-	else 
+	else
 		return d->in.dequeue();
 }
 
 void ClientStream::write( Transfer *request )
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	// pass to CoreProtocol for transformation into wire format
 	d->client.outgoingTransfer( request );
 }
-	
+
 void cs_dump( const QByteArray &bytes )
 {
 #if 0
@@ -278,7 +277,7 @@
 			if ( count + i < bytes.count() )
 			{
 				int j = bytes [ count + i ];
-				if ( j >= 0x20 && j <= 0x7e ) 
+				if ( j >= 0x20 && j <= 0x7e )
 					printf( "%2c ", j );
 				else
 					printf( "%2c ", '.' );
@@ -298,32 +297,35 @@
 
 void ClientStream::cp_outgoingData( const QByteArray& outgoingBytes )
 {
+	if ( !d->bs )
+		return;
+
 	// take formatted bytes from CoreProtocol and put them on the wire
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "[data size: " << outgoingBytes.size() << "]" << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "[data size: " << outgoingBytes.size() << "]" << endl;
 	//cs_dump( outgoingBytes );
 	d->bs->write( outgoingBytes );
 }
 
 void ClientStream::cp_incomingData()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+// 	kdDebug(YAHOO_RAW_DEBUG) ;
 	Transfer * incoming = d->client.incomingTransfer();
 	if ( incoming )
 	{
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - got a new transfer" << endl;
+// 		kdDebug(YAHOO_RAW_DEBUG) << " - got a new transfer";
 		d->in.enqueue( incoming );
 		d->newTransfers = true;
 		emit doReadyRead();
 	}
 	else
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - client signalled incomingData but none was available, state is: "<< d->client.state() << endl;
+		kdDebug(YAHOO_RAW_DEBUG) << " - client signalled incomingData but none was available, state is: "<< d->client.state() << endl;
 }
 
 /* Connector connected */
 void ClientStream::cr_connected()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
-	
+	kdDebug(YAHOO_RAW_DEBUG) ;
+
 	d->bs = d->conn->stream();
 	connect(d->bs, SIGNAL(connectionClosed()), SLOT(bs_connectionClosed()));
 	connect(d->bs, SIGNAL(delayedCloseFinished()), SLOT(bs_delayedCloseFinished()));
@@ -341,12 +343,12 @@
 
 void ClientStream::cr_error()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	reset();
 	emit error(ErrConnection);
 }
 
-void ClientStream::bs_connectionClosed()	
+void ClientStream::bs_connectionClosed()
 {
 	reset();
 	emit connectionClosed();
@@ -359,20 +361,20 @@
 
 void ClientStream::bs_error(int)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	// TODO
 }
 
 void ClientStream::bs_readyRead()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+// 	kdDebug(YAHOO_RAW_DEBUG) ;
 	QByteArray a;
 	//qDebug( "size of storage for incoming data is %i bytes.", a.size() );
 	a = d->bs->read();
 
 	//QCString cs(a.data(), a.size()+1);
 	//qDebug("ClientStream: recv: %d [%s]\n", a.size(), cs.data());
-	//kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " recv: " << a.size()  <<" bytes" <<endl;
+	//kdDebug(YAHOO_RAW_DEBUG) << " recv: " << a.size()  <<" bytes";
 	//cs_dump( a );
 
 	d->client.addIncomingData(a);
@@ -380,7 +382,7 @@
 
 void ClientStream::bs_bytesWritten(int bytes)
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " written: " << bytes  <<" bytes" <<endl;
+	kdDebug(YAHOO_RAW_DEBUG) << " written: " << bytes  <<" bytes" << endl;
 }
 
 void ClientStream::srvProcessNext()
@@ -389,13 +391,13 @@
 
 void ClientStream::doReadyRead()
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+// 	kdDebug(YAHOO_RAW_DEBUG) ;
 	emit readyRead();
 }
 
 void ClientStream::processNext()
 {
-	if( !d->in.isEmpty() ) 
+	if( !d->in.isEmpty() )
 	{
 		QTimer::singleShot(0, this, SLOT(doReadyRead()));
 	}
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahooclientstream.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahooclientstream.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahooclientstream.h	2010-01-21 13:32:46.808475136 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahooclientstream.h	2010-01-18 17:09:31.000000000 +0200
@@ -1,13 +1,13 @@
 /*
 	oscarclientstream.h - Kopete Yahoo Protocol
-	
+
 	Copyright (c) 2004 Matt Rogers <matt.rogers@kdemail.net>
-	
+
 	Based on code Copyright (c) 2004 SuSE Linux AG <http://www.suse.com>
-	Based on Iris, Copyright (C) 2003  Justin Karneges
-	
+	Based on Iris, Copyright (C) 2003  Justin Karneges <justin@affinix.com>
+
 	Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
-	
+
 	*************************************************************************
 	*                                                                       *
 	* This library is free software; you can redistribute it and/or         *
@@ -26,7 +26,6 @@
 class QHostAddress;
 
 // forward defines
-class ByteStream;
 class Connector;
 class Transfer;
 
@@ -40,20 +39,20 @@
 		ErrAuth,                    // Auth error, see condition
 		ErrBind                     // Resource binding error
 	};
-	
+
 	enum Warning {
-		WarnOldVersion,             // server uses older XMPP/Jabber "0.9" protocol  // can be customised for novell versions
+		WarnOldVersion,             // server uses older XMPP/Jabber "0.9" protocol  // can be customized for novell versions
 		WarnNoTLS                   // there is no chance for TLS at this point
 	};
-	
+
 	enum NegCond {
 		HostGone,                   // host no longer hosted
 		HostUnknown,                // unknown host
 		RemoteConnectionFailed,     // unable to connect to a required remote resource
 		SeeOtherHost,               // a 'redirect', see errorText() for other host
 		UnsupportedVersion          // unsupported XMPP version
-	};
-
+	}
+;
 	enum AuthCond {
 		GenericAuthError,           // all-purpose "can't login" error
 		NoMech,                     // No appropriate auth mech available
@@ -66,13 +65,13 @@
 		NotAuthorized,              // bad user, bad password, bad creditials
 		TemporaryAuthFailure        // please try again later!
 	};
-	
+
 	enum BindCond {
 		BindNotAllowed,             // not allowed to bind a resource
 		BindConflict                // resource in-use
 	};
 
-	ClientStream(Connector *conn, QObject *parent=0);
+	explicit ClientStream(Connector *conn, QObject *parent=0);
 	~ClientStream();
 
 	void connectToServer(const QString& server, bool auth=true);
@@ -87,12 +86,12 @@
 	void setLocalAddr(const QHostAddress &addr, Q_UINT16 port);
 
 	void close();
-	
+
 	/**
 	 * Are there any messages waiting to be read
 	 */
 	bool transfersAvailable() const;
-	
+
 	/**
 	 * Read a message received from the server
 	 */
@@ -124,7 +123,7 @@
 	void cr_error();
 	/**
 	 * collects wire ready outgoing data from the core protocol and sends
-	 */ 
+	 */
 	void cp_outgoingData( const QByteArray& );
 	/**
 	 * collects parsed incoming data as a transfer from the core protocol and queues
@@ -142,15 +141,15 @@
 
 private:
 	class Private;
-	Private *d;
+	Private * const d;
 
 	void reset(bool all=false);
 	void processNext();
 	bool handleNeed();
 	void handleError();
 	void srvProcessNext();
-	
-	/** 
+
+	/**
 	 * convert internal method representation to wire
 	 */
 	static char* encode_method(Q_UINT8 method);
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahooconnector.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahooconnector.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahooconnector.cpp	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahooconnector.cpp	2010-01-18 17:35:37.000000000 +0200
@@ -4,7 +4,7 @@
                              -------------------
     begin                : Wed Jul 7 2004
     copyright            : (C) 2004 by Till Gerken <till@tantalo.net>
- 
+
 			Kopete (C) 2004 Kopete developers <kopete-devel@kde.org>
  ***************************************************************************/
 
@@ -25,10 +25,10 @@
 #include "yahoobytestream.h"
 #include "yahootypes.h"
 
-KNetworkConnector::KNetworkConnector( QObject *parent, const char */*name*/ )
+KNetworkConnector::KNetworkConnector( QObject *parent )
 		: Connector( parent )
 {
-	kdDebug( YAHOO_RAW_DEBUG ) << k_funcinfo << "New KNetwork connector." << endl;
+	kdDebug( YAHOO_RAW_DEBUG ) << "New KNetwork connector." << endl;
 
 	mErrorCode = KNetwork::KSocketBase::NoError;
 
@@ -47,7 +47,7 @@
 void KNetworkConnector::connectToServer( const QString &server )
 {
 	Q_UNUSED( server );
-	kdDebug( YAHOO_RAW_DEBUG ) << k_funcinfo << "Initiating connection to " << mHost << endl;
+	kdDebug( YAHOO_RAW_DEBUG ) << "Initiating connection to " << mHost << endl;
 	Q_ASSERT( !mHost.isNull() );
 	Q_ASSERT( mPort );
 
@@ -63,7 +63,7 @@
 
 void KNetworkConnector::slotConnected()
 {
-	kdDebug( YAHOO_RAW_DEBUG ) << k_funcinfo << "We are connected." << endl;
+	kdDebug( YAHOO_RAW_DEBUG ) << "We are connected." << endl;
 
 	// FIXME: setPeerAddress() is something different, find out correct usage later
 	//KInetSocketAddress inetAddress = mStreamSocket->address().asInet().makeIPv6 ();
@@ -74,7 +74,7 @@
 
 void KNetworkConnector::slotError( int code )
 {
-	kdDebug( YAHOO_RAW_DEBUG ) << k_funcinfo << "Error detected: " << code << endl;
+	kdDebug( YAHOO_RAW_DEBUG ) << "Error detected: " << code << endl;
 
 	mErrorCode = code;
 	emit error ();
@@ -87,19 +87,19 @@
 
 ByteStream *KNetworkConnector::stream() const
 {
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_RAW_DEBUG) ;
 	return mByteStream;
 }
 
 void KNetworkConnector::done()
 {
-	kdDebug ( YAHOO_RAW_DEBUG ) << k_funcinfo << endl;
+	kdDebug ( YAHOO_RAW_DEBUG ) ;
 	mByteStream->close ();
 }
 
 void KNetworkConnector::setOptHostPort( const QString &host, Q_UINT16 port )
 {
-	kdDebug ( YAHOO_RAW_DEBUG ) << k_funcinfo << "Manually specifying host " << host << " and port " << port << endl;
+	kdDebug ( YAHOO_RAW_DEBUG ) << "Manually specifying host " << host << " and port " << port << endl;
 
 	mHost = host;
 	mPort = port;
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahooconnector.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahooconnector.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahooconnector.h	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahooconnector.h	2010-01-18 17:34:06.000000000 +0200
@@ -25,7 +25,6 @@
 
 class ByteStream;
 class KNetworkByteStream;
-class KResolverEntry;
 
 /**
 @author Till Gerken
@@ -37,7 +36,7 @@
 Q_OBJECT
 
 public:
-	KNetworkConnector( QObject *parent = 0, const char *name = 0 );
+	KNetworkConnector( QObject *parent = 0 );
 
 	virtual ~KNetworkConnector();
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoo_fn.c kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoo_fn.c
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoo_fn.c	2010-01-21 13:32:46.806476044 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoo_fn.c	2010-01-18 18:29:51.000000000 +0200
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  *
  */
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoo_fn.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoo_fn.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahoo_fn.h	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahoo_fn.h	2010-01-18 18:29:53.000000000 +0200
@@ -15,9 +15,12 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#ifndef YAHOO_FN_H
+#define YAHOO_FN_H
+
 #define IDENT  1 /* identify function */
 #define XOR    2 /* xor with arg1 */
 #define MULADD 3 /* multipy by arg1 then add arg2 */
@@ -31,3 +34,5 @@
 };
 
 int yahoo_xfrm( int table, int depth, int seed );
+
+#endif // YAHOO_FN_H
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahootypes.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahootypes.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/yahootypes.h	2010-01-21 13:32:46.803488266 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/yahootypes.h	2010-01-18 01:54:56.000000000 +0200
@@ -19,14 +19,15 @@
 #define YAHOOTYPESH
 
 #include <qglobal.h>
+#include <qstring.h>
 
 const int YAHOO_RAW_DEBUG = 14181;
 const int YAHOO_GEN_DEBUG = 14180;
 
 namespace Yahoo
 {
-	enum Service 
-	{ 
+	enum Service
+	{
 		/* these are easier to see in hex */
 		ServiceLogon = 1,
 		ServiceLogoff,
@@ -71,8 +72,8 @@
 		ServiceAuthResp = 0x54,
 		ServiceList = 85,
 		ServiceAuth = 0x57,
-		ServiceAddBuddy = 0x83,
-		ServiceRemBuddy,
+		ServiceBuddyAdd = 0x83,
+		ServiceBuddyRemove = 0x84,
 		ServiceIgnoreContact,	/* > 1, 7, 13 < 1, 66, 13, 0*/
 		ServiceRejectContact,
 		ServiceGroupRename = 0x89, /* > 1, 65(new), 66(0), 67(old) */
@@ -95,15 +96,17 @@
 		ServiceStatus = 0xc6,		/* YMSG13 */
 		ServicePictureStatus = 0xc7,	/* YMSG13, key 213: 0 = none, 1 = avatar, 2 = picture */
 		ServiceContactDetails = 0xd3,	/* YMSG13 */
-		ServiceChatSession = 0xd4,	
+		ServiceChatSession = 0xd4,
 		ServiceAuthorization = 0xd6,	/* YMSG13 */
 		ServiceFileTransfer7 = 0xdc,	/* YMSG13 */
-		ServiceFileTransfer7Info,	/* YMSG13 */
-		ServiceFileTransfer7Accept,	/* YMSG13 */
-		ServiceBuddyChangeGroup = 0xe7	/* YMSG13 */
+		ServiceFileTransfer7Info = 0xdd,	/* YMSG13 */
+		ServiceFileTransfer7Accept = 0xde,	/* YMSG13 */
+		ServiceBuddyChangeGroup = 0xe7,	/* YMSG13 */
+		ServiceBuddyStatus = 0xf0,
+		ServiceBuddyList = 0xf1
 	};
-	
-	enum Status 
+
+	enum Status
 	{
 		StatusConnecting = -2,
 		StatusDisconnected = -1,
@@ -132,13 +135,13 @@
 	};
 
 	enum LoginStatus {
-	LoginOk = 0,
-	LoginUname = 3,
-	LoginPasswd = 13,
-	LoginLock = 14,
-	LoginVerify = 29,	// FIXME: Find the reason for this response
-	LoginDupl = 99,
-	LoginSock = -1
+		LoginOk = 0,
+		LoginUname = 3,
+		LoginPasswd = 13,
+		LoginLock = 14,
+		LoginVerify = 29,	// FIXME: Find the reason for this response
+		LoginDupl = 99,
+		LoginSock = -1
 	};
 
 	enum StealthMode {
@@ -158,9 +161,26 @@
 		ResponseDecline
 	};
 
+	enum PictureStatus {
+		NoPicture = 0,
+		Avatar = 1,
+		Picture = 2
+	};
+
 	typedef Q_UINT8 BYTE;
 	typedef Q_UINT16 WORD;
 	typedef Q_UINT32 DWORD;
+
+	struct ChatRoom {
+		QString name;
+		QString topic;
+		int id;
+	};
+
+	struct ChatCategory {
+		QString name;
+		int id;
+	};
 }
 
 #define yahoo_put16(buf, data) ( \
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.cpp	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.cpp	2010-01-18 03:50:00.000000000 +0200
@@ -3,7 +3,7 @@
 
     Copyright (c) 2004 Duncan Mac-Vicar Prett <duncan@kde.org>
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
     Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
 
     *************************************************************************
@@ -16,14 +16,18 @@
     *************************************************************************
 */
 
-#include <stdlib.h>
+//#include <QDataStream>
+//#include <QMap>
+//#include <QObject>
+//#include <QStringList>
 
-#include <qcstring.h>
+//#include <qcstring.h>
 #include <qdatastream.h>
 #include <qmap.h>
 #include <qobject.h>
 #include <qstringlist.h>
 
+
 #include <kdebug.h>
 
 #include "ymsgprotocol.h"
@@ -55,188 +59,252 @@
 	/                   0 - 65535*                   |
 	+-------------------------------------------------+
 	*/
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << packet << endl;
-	
+	kdDebug(YAHOO_RAW_DEBUG) << packet << endl;
+
 	int pos = 0;
 	int len = 0;
-	
+
 	Yahoo::Status status = Yahoo::StatusAvailable;
 	Yahoo::Service service = Yahoo::ServiceAuth;
 	int statusnum = 0;
 	int sessionid = 0;
 	int servicenum;
 	int version1, version2;
-	
+
 	QMap<QString, QString> params;
-	
+
 	// Skip the YMSG header
 	pos += 4;
-	
+
 	// Skip the version
 	version1 = yahoo_get16(packet.data() + pos);
 	pos += 2;
 	version2 = yahoo_get16(packet.data() + pos);
 	pos += 2;
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - parsed packet version " << version1 << " " << version2 << endl;
-	
+	kdDebug(YAHOO_RAW_DEBUG) << " - parsed packet version " << version1 << " " << version2 << endl;
+
 	len = yahoo_get16(packet.data() + pos);
 	pos += 2;
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - parsed packet len " << len << endl;
-	
+	kdDebug(YAHOO_RAW_DEBUG) << " - parsed packet len " << len << endl;
+
 	servicenum = yahoo_get16(packet.data() + pos);
 	pos += 2;
-	
+
 	switch (servicenum)
 	{
 		// TODO add remamining services
 		case (Yahoo::ServiceAuth) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceAuth " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceAuth " << servicenum << endl;
 			service = Yahoo::ServiceAuth;
 		break;
 		case (Yahoo::ServiceAuthResp) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceAuthResp " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceAuthResp " << servicenum << endl;
 			service = Yahoo::ServiceAuthResp;
 		break;
 		case (Yahoo::ServiceVerify) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceVerify " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceVerify " << servicenum << endl;
 			service = Yahoo::ServiceVerify;
 		break;
 		case (Yahoo::ServiceList) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceList " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceList " << servicenum << endl;
 			service = Yahoo::ServiceList;
 		break;
 		case (Yahoo::ServiceLogon) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceLogon " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceLogon " << servicenum << endl;
 			service = Yahoo::ServiceLogon;
 		break;
 		case (Yahoo::ServicePing) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServicePing " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServicePing " << servicenum << endl;
 			service = Yahoo::ServicePing;
 		break;
 		case (Yahoo::ServiceNewMail) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceNewMail " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceNewMail " << servicenum << endl;
 			service = Yahoo::ServiceNewMail;
 		break;
 		case (Yahoo::ServiceLogoff) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceLogoff " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceLogoff " << servicenum << endl;
 			service = Yahoo::ServiceLogoff;
 		break;
 		case (Yahoo::ServiceIsAway) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceIsAway " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceIsAway " << servicenum << endl;
 			service = Yahoo::ServiceIsAway;
 		break;
 		case (Yahoo::ServiceIsBack) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceIsBack " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceIsBack " << servicenum << endl;
 			service = Yahoo::ServiceIsBack;
 		break;
 		case (Yahoo::ServiceGameLogon) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceGameLogon " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceGameLogon " << servicenum << endl;
 			service = Yahoo::ServiceGameLogon;
 		break;
 		case (Yahoo::ServiceGameLogoff) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceGameLogoff " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceGameLogoff " << servicenum << endl;
 			service = Yahoo::ServiceGameLogoff;
 		break;
 		case (Yahoo::ServiceIdAct) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceIdAct " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceIdAct " << servicenum << endl;
 			service = Yahoo::ServiceIdAct;
 		break;
 		case (Yahoo::ServiceIddeAct) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceIddeAct " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceIddeAct " << servicenum << endl;
 			service = Yahoo::ServiceIddeAct;
 		break;
 		case (Yahoo::ServiceStatus) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceStatus " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceStatus " << servicenum << endl;
 			service = Yahoo::ServiceStatus;
 		break;
 		case (Yahoo::ServiceMessage) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceMessage " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceMessage " << servicenum << endl;
 			service = Yahoo::ServiceMessage;
 		break;
 		case (Yahoo::ServiceNotify) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceNotify " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceNotify " << servicenum << endl;
 			service = Yahoo::ServiceNotify;
 		break;
-		case (Yahoo::ServiceAddBuddy) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceAddBuddy " << servicenum << endl;
-			service = Yahoo::ServiceAddBuddy;
-		break;
+		case (Yahoo::ServiceBuddyAdd) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceBuddyAdd " << servicenum << endl;
+			service = Yahoo::ServiceBuddyAdd;
+		break;
+        	case (Yahoo::ServiceBuddyRemove) :
+	                kdDebug(YAHOO_RAW_DEBUG) << "Parsed packet service -  This means ServiceBuddyRemove " << servicenum << endl;
+	                service = Yahoo::ServiceBuddyRemove;
+	        break;
+        	case (Yahoo::ServiceBuddyChangeGroup) :
+	                kdDebug(YAHOO_RAW_DEBUG) << "Parsed packet service -  This means ServiceBuddyChangeGroup " << servicenum << endl;
+	                service = Yahoo::ServiceBuddyChangeGroup;
+	        break;
 		case (Yahoo::ServicePictureChecksum) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServicePictureChecksum " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServicePictureChecksum " << servicenum << endl;
 			service = Yahoo::ServicePictureChecksum;
 		break;
 		case (Yahoo::ServicePictureStatus) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServicePictureStatus " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServicePictureStatus " << servicenum << endl;
 			service = Yahoo::ServicePictureStatus;
 		break;
 		case (Yahoo::ServicePicture) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServicePicture " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServicePicture " << servicenum << endl;
 			service = Yahoo::ServicePicture;
 		break;
 		case (Yahoo::ServiceStealthOnline) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceStealthOnline " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceStealthOnline " << servicenum << endl;
 			service = Yahoo::ServiceStealthOnline;
 		break;
 		case (Yahoo::ServiceStealthOffline) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceStealthOffline " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceStealthOffline " << servicenum << endl;
 			service = Yahoo::ServiceStealthOffline;
 		break;
 		case (Yahoo::ServicePictureUpload) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServicePictureUpload " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServicePictureUpload " << servicenum << endl;
 			service = Yahoo::ServicePictureUpload;
 		break;
 		case (Yahoo::ServiceWebcam) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceWebcam " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceWebcam " << servicenum << endl;
 			service = Yahoo::ServiceWebcam;
 		break;
 		case (Yahoo::ServiceConfInvite) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceConfInvite " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceConfInvite " << servicenum << endl;
 			service = Yahoo::ServiceConfInvite;
 		break;
 		case (Yahoo::ServiceConfLogon) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceConfLogon " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceConfLogon " << servicenum << endl;
 			service = Yahoo::ServiceConfLogon;
 		break;
 		case (Yahoo::ServiceConfDecline) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceConfDecline " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceConfDecline " << servicenum << endl;
 			service = Yahoo::ServiceConfDecline;
 		break;
 		case (Yahoo::ServiceConfLogoff) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceConfLogoff " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceConfLogoff " << servicenum << endl;
 			service = Yahoo::ServiceConfLogoff;
 		break;
 		case (Yahoo::ServiceConfAddInvite) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceConfAddInvite " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceConfAddInvite " << servicenum << endl;
 			service = Yahoo::ServiceConfAddInvite;
 		break;
 		case (Yahoo::ServiceConfMsg) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceConfMsg " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceConfMsg " << servicenum << endl;
 			service = Yahoo::ServiceConfMsg;
 		break;
 		case (Yahoo::ServiceAuthorization) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceAuthorization " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceAuthorization " << servicenum << endl;
 			service = Yahoo::ServiceAuthorization;
 		break;
 		case (Yahoo::ServiceContactDetails) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceContactDetails " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceContactDetails " << servicenum << endl;
 			service = Yahoo::ServiceContactDetails;
 		break;
 		case (Yahoo::ServiceFileTransfer) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceFileTransfer " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceFileTransfer " << servicenum << endl;
 			service = Yahoo::ServiceFileTransfer;
 		break;
 		case (Yahoo::ServiceFileTransfer7) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceFileTransfer7 " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceFileTransfer7 " << servicenum << endl;
 			service = Yahoo::ServiceFileTransfer7;
 		break;
 		case (Yahoo::ServiceFileTransfer7Info) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServiceFileTransfer7Info " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceFileTransfer7Info " << servicenum << endl;
 			service = Yahoo::ServiceFileTransfer7Info;
 		break;
+		case (Yahoo::ServiceFileTransfer7Accept) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceFileTransfer7Accept " << servicenum << endl;
+			service = Yahoo::ServiceFileTransfer7Accept;
+		break;
 		case (Yahoo::ServicePeerToPeer) :
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Parsed packet service -  This means ServicePeerToPeer " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServicePeerToPeer " << servicenum << endl;
 			service = Yahoo::ServicePeerToPeer;
 		break;
+		case (Yahoo::ServiceChatOnline) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceChatOnline " << servicenum << endl;
+			service = Yahoo::ServiceChatOnline;
+		break;
+		case (Yahoo::ServiceChatGoto) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceChatGoto " << servicenum << endl;
+			service = Yahoo::ServiceChatGoto;
+		break;
+		case (Yahoo::ServiceChatJoin) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceChatJoin " << servicenum << endl;
+			service = Yahoo::ServiceChatJoin;
+		break;
+		case (Yahoo::ServiceChatleave) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceChatleave " << servicenum << endl;
+			service = Yahoo::ServiceChatleave;
+		break;
+		case (Yahoo::ServiceChatExit) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceChatExit " << servicenum << endl;
+			service = Yahoo::ServiceChatExit;
+		break;
+		case (Yahoo::ServiceChatLogout) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceChatLogout " << servicenum << endl;
+			service = Yahoo::ServiceChatLogout;
+		break;
+		case (Yahoo::ServiceChatPing) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServicePeerToPeer " << servicenum << endl;
+			service = Yahoo::ServiceChatPing;
+		break;
+		case (Yahoo::ServiceChatLogon) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceChatLogon " << servicenum << endl;
+			service = Yahoo::ServiceChatLogon;
+		break;
+		case (Yahoo::ServiceChatLogoff) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceChatLogoff " << servicenum << endl;
+			service = Yahoo::ServiceChatLogoff;
+		break;
+		case (Yahoo::ServiceChatMsg) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceChatMsg " << servicenum << endl;
+			service = Yahoo::ServiceChatMsg;
+		break;
+		case (Yahoo::ServiceComment) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceComment " << servicenum << endl;
+			service = Yahoo::ServiceComment;
+		break;
+		case (Yahoo::ServiceBuddyStatus) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceBuddyStatus " << servicenum << endl;
+			service = Yahoo::ServiceBuddyStatus;
+		break;
+		case (Yahoo::ServiceBuddyList) :
+			kdDebug(YAHOO_RAW_DEBUG) << " Parsed packet service -  This means ServiceBuddyList " << servicenum << endl;
+			service = Yahoo::ServiceBuddyList;
+		break;
 		/*
 		ServiceIdle, // 5 (placemarker)
 		ServiceMailStat,
@@ -250,9 +318,6 @@
 		ServiceGotGroupRename, // < 1, 36(old), 37(new)
 		ServiceSysMessage = 0x14,
 		ServicePassThrough2 = 0x16,
-		ServiceChatLogon,
-		ServiceChatLogoff,
-		ServiceChatMsg = 0x20,
 		ServiceGameMsg = 0x2a,
 		ServiceFileTransfer = 0x46,
 		ServiceVoiceChat = 0x4A,
@@ -261,28 +326,20 @@
 		ServiceRemBuddy,
 		ServiceIgnoreContact,	// > 1, 7, 13 < 1, 66, 13, 0
 		ServiceRejectContact,
-		ServiceGroupRename = 0x89, // > 1, 65(new), 66(0), 67(old) 
-		ServiceChatOnline = 0x96, // > 109(id), 1, 6(abcde) < 0,1
-		ServiceChatGoto,
-		ServiceChatJoin,	// > 1 104-room 129-1600326591 62-2
-		ServiceChatleave,
-		ServiceChatExit = 0x9b,
-		ServiceChatLogout = 0xa0,
-		ServiceChatPing,
-		ServiceComment = 0xa8
+		ServiceGroupRename = 0x89, // > 1, 65(new), 66(0), 67(old)
 		ServicePictureUpdate = 0xc1,
-		ServiceVisibility = 0xc5,	// YMSG13, key 13: 2 = invisible, 1 = visible 
-		ServiceStatus = 0xc6,		// YMSG13 
+		ServiceVisibility = 0xc5,	// YMSG13, key 13: 2 = invisible, 1 = visible
+		ServiceStatus = 0xc6,		// YMSG13
 		*/
 
 		default:
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "  Parsed packet service -  This means an unknown service " << servicenum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << "  Parsed packet service -  This means an unknown service " << servicenum << endl;
 		break;
 	}
-	
+
 	statusnum = yahoo_get32(packet.data() + pos);
 	pos += 4;
-	
+
 	switch (statusnum)
 	{
 		// TODO add remaining status
@@ -309,37 +366,37 @@
 		StatusOffline
 		StatusNotify*/
 		default:
-			kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - unknown status " << statusnum << endl;
+			kdDebug(YAHOO_RAW_DEBUG) << " - unknown status " << statusnum << endl;
 		break;
 	}
-	
+
 	sessionid = yahoo_get32(packet.data() + pos);
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "  Parsed session id: " << (void *)sessionid << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << "  Parsed session id: " << (void *)sessionid << endl;
 	pos += 4;
-	
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Setting incoming transfer basic information." << endl;
+
+	kdDebug(YAHOO_RAW_DEBUG) << " Setting incoming transfer basic information." << endl;
 	YMSGTransfer *t = new YMSGTransfer();
 	t->setService(service);
 	t->setId(sessionid);
 	t->setStatus(status);
+	t->setPacketLength(len);
 
-	QString d = QString::fromAscii( packet.data() + pos, packet.size() - pos );
-	QStringList list;
-	list = QStringList::split( "\xc0\x80", d );
-	for( uint i = 0; i+1 < list.size() && pos+1 < len+20; i += 2 ) {
-		QString key = list[i];
-		QString value = QString::fromUtf8( list[i+1].ascii() );
-		pos += key.utf8().length() + value.utf8().length() + 4;
-		t->setParam( QString(key).toInt(), value.utf8() );
-		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Key: " << key << " Value: " << value << endl;
-	}	
+        QString d = QString::fromAscii( packet.data() + pos, packet.size() - pos );
+        QStringList list = QStringList::split( "\xc0\x80", d );
+        for( int i = 0; i+1 < list.size() && pos+1 < len+20; i += 2 ) {
+                QString key = list[i];
+                QString value = QString::fromUtf8( list[i+1].ascii() );
+                pos += key.utf8().length() + value.utf8().length() + 4;
+                t->setParam( QString(key).toInt(), value.utf8() );
+                kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << "Key: " << key << " Value: " << value << endl;
+        }
 
-	while( (uint)pos < packet.size() && packet.data()[pos] == '\x00' )
-		pos++;
+        while( pos < packet.size() && packet.data()[pos] == '\x00' )
+                pos++;
 
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Returning transfer" << endl;
+// 	kdDebug(YAHOO_RAW_DEBUG) << " Returning transfer";
 	// tell them we have parsed offset bytes
-	
+
 	bytes = pos;
 	return t;
 }
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.h	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.h	2010-01-18 03:32:06.000000000 +0200
@@ -3,7 +3,7 @@
 
     Copyright (c) 2004 Duncan Mac-Vicar Prett <duncan@kde.org>
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
     Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
 
     *************************************************************************
@@ -26,17 +26,17 @@
 {
 Q_OBJECT
 public:
-	
+
 
 	YMSGProtocol( QObject *parent = 0, const char *name = 0 );
 	~YMSGProtocol();
-	
-	/** 
-	 * Attempt to parse the supplied data into an @ref YMSGTransfer object.  
-	 * The exact state of the parse attempt can be read using @ref state. 
+
+	/**
+	 * Attempt to parse the supplied data into an @ref YMSGTransfer object.
+	 * The exact state of the parse attempt can be read using @ref state.
 	 * @param rawData The unparsed data.
 	 * @param bytes An integer used to return the number of bytes read.
-	 * @return A pointer to an EventTransfer object if successfull, otherwise 0.  The caller is responsible for deleting this object.
+	 * @return A pointer to an EventTransfer object if successful, otherwise 0.  The caller is responsible for deleting this object.
 	 */
 	Transfer * parse( const QByteArray &, uint & bytes );
 };
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/ymsgtransfer.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/ymsgtransfer.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/ymsgtransfer.cpp	2010-01-21 13:32:46.805476253 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/ymsgtransfer.cpp	2010-01-18 14:57:35.000000000 +0200
@@ -4,7 +4,7 @@
 
     Copyright (c) 2004 Duncan Mac-Vicar P. <duncan@kde.org>
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
 
@@ -23,6 +23,7 @@
 #include "ymsgtransfer.h"
 #include "yahootypes.h"
 #include "kdebug.h"
+
 #include <qdatastream.h>
 #include <qmap.h>
 #include <qstring.h>
@@ -39,7 +40,7 @@
 	int packetLength;
 	Yahoo::Service service;
 	Yahoo::Status status;
-	unsigned int id;	
+	unsigned int id;
 	ParamList data;
 	bool valid;
 };
@@ -80,12 +81,12 @@
 	return Transfer::YMSGTransfer;
 }
 
-bool YMSGTransfer::isValid()
+bool YMSGTransfer::isValid() const
 {
 	return d->valid;
 }
 
-Yahoo::Service YMSGTransfer::service()
+Yahoo::Service YMSGTransfer::service() const
 {
 	return d->service;
 }
@@ -95,7 +96,7 @@
 	d->service = service;
 }
 
-Yahoo::Status YMSGTransfer::status()
+Yahoo::Status YMSGTransfer::status() const
 {
 	return d->status;
 }
@@ -105,7 +106,7 @@
 	d->status = status;
 }
 
-unsigned int YMSGTransfer::id()
+unsigned int YMSGTransfer::id() const
 {
 	return d->id;
 }
@@ -115,15 +116,25 @@
 	d->id = id;
 }
 
-ParamList YMSGTransfer::paramList()
+int YMSGTransfer::packetLength() const
+{
+	return d->packetLength;
+}
+
+void YMSGTransfer::setPacketLength(int len)
+{
+	d->packetLength = len;
+}
+
+ParamList YMSGTransfer::paramList() const
 {
 	return d->data;
 }
 
-int YMSGTransfer::paramCount( int index )
+int YMSGTransfer::paramCount( int index ) const
 {
 	int cnt = 0;
-	for (ParamList::ConstIterator it = d->data.begin(); it !=  d->data.end(); ++it) 
+	for (ParamList::ConstIterator it = d->data.constBegin(); it !=  d->data.constEnd(); ++it)
 	{
 		if( (*it).first == index )
 			cnt++;
@@ -132,34 +143,34 @@
 }
 
 
-QCString YMSGTransfer::nthParam( int index, int occurence )
+QCString YMSGTransfer::nthParam( int index, int occurrence ) const
 {
 	int cnt = 0;
-	for (ParamList::ConstIterator it = d->data.begin(); it !=  d->data.end(); ++it) 
+	for (ParamList::ConstIterator it = d->data.constBegin(); it !=  d->data.constEnd(); ++it)
 	{
-		if( (*it).first == index && cnt++ == occurence)
+		if( (*it).first == index && cnt++ == occurrence)
 			return (*it).second;
 	}
 	return QCString();
 }
 
-QCString YMSGTransfer::nthParamSeparated( int index, int occurence, int separator )
+QCString YMSGTransfer::nthParamSeparated( int index, int occurrence, int separator ) const
 {
 
 	int cnt = -1;
-	for (ParamList::ConstIterator it = d->data.begin(); it !=  d->data.end(); ++it) 
+	for (ParamList::ConstIterator it = d->data.constBegin(); it !=  d->data.constEnd(); ++it)
 	{
 		if( (*it).first == separator )
 			cnt++;
-		if( (*it).first == index && cnt == occurence)
+		if( (*it).first == index && cnt == occurrence)
 			return (*it).second;
 	}
 	return QCString();
 }
 
-QCString YMSGTransfer::firstParam( int index )
+QCString YMSGTransfer::firstParam( int index ) const
 {
-	for (ParamList::ConstIterator it = d->data.begin(); it !=  d->data.end(); ++it) 
+	for (ParamList::ConstIterator it = d->data.constBegin(); it !=  d->data.constEnd(); ++it)
 	{
 		if( (*it).first == index )
 			return (*it).second;
@@ -177,10 +188,10 @@
 	d->data.append( Param( index, QString::number( data ).local8Bit() ) );
 }
 
-int YMSGTransfer::length()
+int YMSGTransfer::length() const
 {
 	int len = 0;
-	for (ParamList::ConstIterator it = d->data.begin(); it !=  d->data.end(); ++it) 
+	for (ParamList::ConstIterator it = d->data.constBegin(); it !=  d->data.constEnd(); ++it)
 	{
 		len += QString::number( (*it).first ).length();
 		len += 2;
@@ -191,7 +202,7 @@
 }
 
 
-QByteArray YMSGTransfer::serialize()
+QByteArray YMSGTransfer::serialize() const
 {
 	/*
 	<------- 4B -------><------- 4B -------><---2B--->
@@ -205,17 +216,17 @@
 	/                   0 - 65535*                   |
 	+-------------------------------------------------+
 	*/
-	
+
 	int pos = 0;
 	QStringList::ConstIterator listIt = 0;
 	QByteArray buffer;
 	QDataStream stream( buffer, IO_WriteOnly );
-	
+
 	stream << (Q_INT8)'Y' << (Q_INT8)'M' << (Q_INT8)'S' << (Q_INT8)'G';
 	if( d->service == Yahoo::ServicePictureUpload )
-		stream << (Q_INT16)0x0e00;
+		stream << (Q_INT16)0x0f00;
 	else
-		stream << (Q_INT16)0x000e;
+		stream << (Q_INT16)0x000f;
 	stream << (Q_INT16)0x0000;
 	if( d->service == Yahoo::ServicePictureUpload ||
 		d->service == Yahoo::ServiceFileTransfer )
@@ -225,15 +236,15 @@
 	stream << (Q_INT16)d->service;
 	stream << (Q_INT32)d->status;
 	stream << (Q_INT32)d->id;
- 	for (ParamList::ConstIterator it = d->data.begin(); it !=  d->data.end(); ++it) 
+ 	for (ParamList::ConstIterator it = d->data.constBegin(); it !=  d->data.constEnd(); ++it)
 	{
- 		kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Serializing key " << (*it).first << " value " << (*it).second << endl;
+ 		kdDebug(YAHOO_RAW_DEBUG) << " Serializing key " << (*it).first << " value " << (*it).second << endl;
 		stream.writeRawBytes ( QString::number( (*it).first ).local8Bit(), QString::number( (*it).first ).length() );
 		stream << (Q_INT8)0xc0 << (Q_INT8)0x80;
 		stream.writeRawBytes( (*it).second, (*it).second.length() );
 		stream << (Q_INT8)0xc0 << (Q_INT8)0x80;
 	}
-	kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " pos=" << pos << " (packet size)" << buffer << endl;
+	kdDebug(YAHOO_RAW_DEBUG) << " pos=" << pos << " (packet size)" << buffer << endl;
 	return buffer;
 }
 
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/ymsgtransfer.h kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/ymsgtransfer.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/libkyahoo/ymsgtransfer.h	2010-01-21 13:32:46.802488895 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/libkyahoo/ymsgtransfer.h	2010-01-18 03:00:27.000000000 +0200
@@ -4,7 +4,7 @@
 
     Copyright (c) 2004 Duncan Mac-Vicar P. <duncan@kde.org>
 
-    Copyright (c) 2005 André Duffeck <andre.duffeck@kdemail.net>
+    Copyright (c) 2005 André Duffeck <duffeck@kde.org>
 
     Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
 
@@ -24,12 +24,11 @@
 #include "transfer.h"
 
 #include "yahootypes.h"
-#include <qcstring.h>
+
 #include <qpair.h>
 #include <qvaluelist.h>
 
 class YMSGTransferPrivate;
-class QString;
 
 typedef QPair< int, QCString > Param;
 typedef QValueList< Param > ParamList;
@@ -49,26 +48,29 @@
 	TransferType type();
 
 	//! Get the validity of the transfer object
-	bool isValid();
-	Yahoo::Service service();
+	bool isValid() const;
+	Yahoo::Service service() const;
 	void setService(Yahoo::Service service);
-	Yahoo::Status status();
+	Yahoo::Status status() const;
 	void setStatus(Yahoo::Status status);
-	unsigned int id();
+	unsigned int id() const;
 	void setId(unsigned int id);
+	int packetLength() const;
+	void setPacketLength(int len);
+
+
+	ParamList paramList() const;
+	QCString firstParam( int index ) const;
+	QCString nthParam( int index, int occurrence ) const;
+	QCString nthParamSeparated( int index, int occurrence, int separator ) const;
+	int paramCount( int index ) const;
 
-	ParamList paramList();
-	QCString firstParam( int index );
-	QCString nthParam( int index, int occurence );
-	QCString nthParamSeparated( int index, int occurence, int separator );
-	int paramCount( int index );
-	
 
 	void setParam(int index, const QCString &data);
 	void setParam(int index, int data);
-	QByteArray serialize();
-	
-	int length();
+	QByteArray serialize() const;
+
+	int length() const;
 private:
 	YMSGTransferPrivate* d;
 };
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/yahooaccount.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/yahooaccount.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/yahooaccount.cpp	2010-01-21 13:32:46.808475136 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/yahooaccount.cpp	2010-01-21 13:26:38.000000000 +0200
@@ -3,7 +3,8 @@
 
     Copyright (c) 2003 by Gav Wood               <gav@kde.org>
     Copyright (c) 2003-2004 by Matt Rogers       <matt.rogers@kdemail.net>
-    Based on code by Olivier Goffart             <ogoffart @ kde.org>
+    Based on code by Olivier Goffart             <ogoffart@kde.org>
+
     Kopete    (c) 2002-2004 by the Kopete developers  <kopete-devel@kde.org>
 
     *************************************************************************
@@ -26,6 +27,7 @@
 #include <qregexp.h>
 #include <qimage.h>
 #include <qfile.h>
+#include <qpixmap.h>
 #include <qdir.h>
 #include <qfileinfo.h>
 
@@ -36,10 +38,7 @@
 #include <kaction.h>
 #include <kpopupmenu.h>
 #include <kmessagebox.h>
-#include <kapplication.h>
 #include <krun.h>
-#include <kurl.h>
-#include <kstandarddirs.h>
 #include <kstandarddirs.h>
 
 // Kopete
@@ -67,19 +66,6 @@
 #include "yabentry.h"
 #include "yahoouserinfodialog.h"
 
-YahooAwayDialog::YahooAwayDialog(YahooAccount* account, QWidget *parent, const char *name) :
-	KopeteAwayDialog(parent, name)
-{
-	theAccount = account;
-}
-
-void YahooAwayDialog::setAway(int awayType)
-{
-	awayType = 0;
-	theAccount->setAway(awayType, getSelectedAwayMessage());
-}
-
-
 YahooAccount::YahooAccount(YahooProtocol *parent, const QString& accountId, const char *name)
  : Kopete::PasswordedAccount(parent, accountId, 0, name)
 {
@@ -87,58 +73,74 @@
 	// first things first - initialise internals
 	stateOnConnection = 0;
 	theHaveContactList = false;
-	theAwayDialog = new YahooAwayDialog( this );
 	m_protocol = parent;
 	m_session = new Client( this );
 	m_lastDisconnectCode = 0;
 	m_currentMailCount = 0;
-	m_webcam = 0L;
-	
-	m_session->setUserId( accountId.lower() );
-	
+	m_webcam = 0;
+	m_chatChatSession = 0;
+
+	// FIXME
+	//m_openInboxAction = new KAction( KIcon("mail-folder-inbox"), i18n( "Open Inbo&x..." ), this );
+        //, "m_openInboxAction" );
+	//QObject::connect(m_openInboxAction, SIGNAL( triggered(bool) ), this, SLOT( slotOpenInbox() ) );
+	//m_openYABAction = new KAction( KIcon("x-office-address-book"), i18n( "Open &Address book..." ), this );
+        //, "m_openYABAction" );
+	//QObject::connect(m_openYABAction, SIGNAL( triggered(bool) ), this, SLOT( slotOpenYAB() ) );
+	//m_editOwnYABEntry = new KAction( KIcon("document-properties"), i18n( "&Edit my contact details..."), this );
+        //, "m_editOwnYABEntry" );
+	//QObject::connect(m_editOwnYABEntry, SIGNAL( triggered(bool) ), this, SLOT( slotEditOwnYABEntry() ) );
+	//m_joinChatAction = new KAction( KIcon("im-chat-room-join"), i18n( "&Join chat room..."), this );
+        //, "m_joinChatAction" );
+	//QObject::connect(m_joinChatAction, SIGNAL( triggered(bool) ), this, SLOT( slotJoinChatRoom() ) );
+
 	m_openInboxAction = new KAction( i18n( "Open Inbo&x..." ), "mail_generic", 0, this, SLOT( slotOpenInbox() ), this, "m_openInboxAction" );
 	m_openYABAction = new KAction( i18n( "Open &Addressbook..." ), "contents", 0, this, SLOT( slotOpenYAB() ), this, "m_openYABAction" );
 	m_editOwnYABEntry = new KAction( i18n( "&Edit my contact details..."), "contents", 0, this, SLOT( slotEditOwnYABEntry() ), this, "m_editOwnYABEntry" );
+	m_joinChatAction = new KAction( i18n( "&Join chat room..."), "contents", 0, this, SLOT( slotJoinChatRoom() ), this, "m_joinChatAction");
 
 	YahooContact* _myself=new YahooContact( this, accountId.lower(), accountId, Kopete::ContactList::self()->myself() );
 	setMyself( _myself );
 	_myself->setOnlineStatus( parent->Offline );
 	myself()->setProperty( YahooProtocol::protocol()->iconRemoteUrl, configGroup()->readEntry( "iconRemoteUrl", "" ) );
 	myself()->setProperty( Kopete::Global::Properties::self()->photo(), configGroup()->readEntry( "iconLocalUrl", "" ) );
-	myself()->setProperty( YahooProtocol::protocol()->iconCheckSum, configGroup()->readNumEntry( "iconCheckSum", 0 ) );
-	myself()->setProperty( YahooProtocol::protocol()->iconExpire, configGroup()->readNumEntry( "iconExpire", 0 ) );
-	
-	QObject::connect( Kopete::ContactList::self(), SIGNAL( globalIdentityChanged(const QString&, const QVariant& ) ), SLOT( slotGlobalIdentityChanged(const QString&, const QVariant& ) ));
+	myself()->setProperty( YahooProtocol::protocol()->iconCheckSum, configGroup()->readEntry( "iconCheckSum", 0 ) );
+	myself()->setProperty( YahooProtocol::protocol()->iconExpire, configGroup()->readEntry( "iconExpire", 0 ) );
+
 // 	initConnectionSignals( MakeConnections );
-	
-	QString displayName = configGroup()->readEntry(QString::fromLatin1("displayName"));
+
+	QString displayName = configGroup()->readEntry(QString::fromLatin1("displayName"), QString());
 	if(!displayName.isEmpty())
 		_myself->setNickName(displayName);
-	
+
 	m_YABLastMerge = configGroup()->readNumEntry( "YABLastMerge", 0 );
 	m_YABLastRemoteRevision = configGroup()->readNumEntry( "YABLastRemoteRevision", 0 );
+
+	m_session->setUserId( accountId.lower() );
+	m_session->setPictureChecksum( myself()->property( YahooProtocol::protocol()->iconCheckSum ).value().toInt() );
+
+	setupActions( false );
 }
 
 YahooAccount::~YahooAccount()
 {
 	if( m_webcam )
 		m_webcam->stopTransmission();
-	delete theAwayDialog;
 }
 
 void YahooAccount::setServer( const QString &server )
 {
-	configGroup()->writeEntry( QString::fromLatin1( "Server" ), server );	
+	configGroup()->writeEntry( QString::fromLatin1( "Server" ), server );
 }
 
 void YahooAccount::setPort( int port )
 {
-	configGroup()->writeEntry( QString::fromLatin1( "Port" ), port );	
+	configGroup()->writeEntry( QString::fromLatin1( "Port" ), port );
 }
 
 void YahooAccount::slotGoStatus( int status, const QString &awayMessage)
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "GoStatus: " << status << " msg: " << awayMessage <<endl;
+	kdDebug(YAHOO_GEN_DEBUG) << "GoStatus: " << status << " msg: " << awayMessage << endl;
 	if( !isConnected() )
 	{
 		connect( m_protocol->statusFromYahoo( status ) );
@@ -146,12 +148,11 @@
 	}
 	else
 	{
-		m_session->changeStatus( Yahoo::Status( status ), awayMessage, 
+		m_session->changeStatus( Yahoo::Status( status ), awayMessage,
 			(status == Yahoo::StatusAvailable)? Yahoo::StatusTypeAvailable : Yahoo::StatusTypeAway );
-		
+
 		//sets the awayMessage property for the owner of the account. shows up in the statusbar icon's tooltip. the property is unset when awayMessage is null
 		myself()->setProperty( m_protocol->awayMessage, awayMessage );
-
 		myself()->setOnlineStatus( m_protocol->statusFromYahoo( status ) );
 	}
 }
@@ -164,7 +165,7 @@
 QString YahooAccount::stripMsgColorCodes(const QString& msg)
 {
 	QString filteredMsg = msg;
-	
+
 	//Handle bold, underline and italic messages
 	filteredMsg.replace( "\033[1m", "<b>" );
 	filteredMsg.replace( "\033[x1m", "</b>" );
@@ -172,18 +173,18 @@
 	filteredMsg.replace( "\033[x2m", "</i>" );
 	filteredMsg.replace( "\033[4m", "<u>" );
 	filteredMsg.replace( "\033[x4m", "</u>" );
-	
+
 	//GAIM doesn't check for ^[[3m. Does this ever get sent?
 	filteredMsg.replace( "\033[3m", "<i>" );
 	filteredMsg.replace( "\033[x3m", "</i>" );
-	
+
 	//Strip link tags
 	filteredMsg.remove( "\033[lm" );
 	filteredMsg.remove( "\033[xlm" );
-	
+
 	//Remove color codes and other residual formatting
 	filteredMsg.remove( QRegExp("\033\\[[^m]*m") );
-	
+
 	return filteredMsg;
 }
 
@@ -192,7 +193,7 @@
 	/* Yahoo sends a message either with color or without color
 	 * so we have to use this really hacky method to get colors
 	 */
-	//kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "msg is " << msg << endl;
+	//kdDebug(YAHOO_GEN_DEBUG) << "msg is " << msg;
 	//Please note that some of the colors are hard-coded to
 	//match the yahoo colors
 	if ( msg.find("\033[38m") != -1 )
@@ -230,37 +231,46 @@
 	{
 		QObject::connect(m_session, SIGNAL(loggedIn( int, const QString &)),
 		                 this, SLOT(slotLoginResponse(int, const QString &)) );
-		
+
 		QObject::connect(m_session, SIGNAL(disconnected()),
 		                 this, SLOT(slotDisconnected()) );
-		
+
 		QObject::connect(m_session, SIGNAL(loginFailed()),
 		                 this, SLOT(slotLoginFailed()) );
-		
+
 		QObject::connect(m_session, SIGNAL(error(int)),
 		                 this, SLOT(slotError(int)));
-		
+
 		QObject::connect(m_session, SIGNAL(gotBuddy(const QString &, const QString &, const QString &)),
 		                 this, SLOT(slotGotBuddy(const QString &, const QString &, const QString &)));
-		
+
+		QObject::connect(m_session, SIGNAL(buddyAddResult(const QString &, const QString &, bool)),
+				 this, SLOT(slotBuddyAddResult(const QString &, const QString &, bool)));
+
+		QObject::connect(m_session, SIGNAL(buddyRemoveResult(const QString &, const QString &, bool)),
+				 this, SLOT(slotBuddyRemoveResult(const QString &, const QString &, bool)));
+
+		QObject::connect(m_session, SIGNAL(buddyChangeGroupResult(const QString &, const QString &, bool)),
+				 this, SLOT(slotBuddyChangeGroupResult(const QString &, const QString &, bool)));
+
 		QObject::connect(m_session, SIGNAL(authorizationAccepted( const QString & )),
 		                 this, SLOT(slotAuthorizationAccepted( const QString & )) );
-		
+
 		QObject::connect(m_session, SIGNAL(authorizationRejected( const QString &, const QString & )),
 		                 this, SLOT(slotAuthorizationRejected( const QString &, const QString & )) );
-		
+
 		QObject::connect(m_session, SIGNAL(gotAuthorizationRequest( const QString &, const QString &, const QString & )),
 		                 this, SLOT(slotgotAuthorizationRequest( const QString &, const QString &, const QString & )) );
-		
-		QObject::connect(m_session, SIGNAL(statusChanged(const QString&, int, const QString&, int, int)),
-		                 this, SLOT(slotStatusChanged(const QString&, int, const QString&, int, int)));
-		
-		QObject::connect(m_session, SIGNAL(stealthStatusChanged(const QString &, Yahoo::StealthStatus)), 
+
+		QObject::connect(m_session, SIGNAL(statusChanged(const QString&,int,const QString&,int,int,int)),
+		                 this, SLOT(slotStatusChanged(const QString&,int,const QString&,int,int,int)));
+
+		QObject::connect(m_session, SIGNAL(stealthStatusChanged(const QString &, Yahoo::StealthStatus)),
 		                 this, SLOT(slotStealthStatusChanged( const QString &, Yahoo::StealthStatus)) );
-		
+
 		QObject::connect(m_session, SIGNAL(gotIm(const QString&, const QString&, long, int)),
 		                 this, SLOT(slotGotIm(const QString &, const QString&, long, int)));
-		
+
 		QObject::connect(m_session, SIGNAL(gotBuzz(const QString&, long)),
 		                 this, SLOT(slotGotBuzz(const QString &, long)));
 
@@ -269,233 +279,258 @@
 		                 this,
 		                 SLOT( slotGotConfInvite( const QString&, const QString&,
 		                                          const QString&, const QStringList& ) ) );
-		
+
 		QObject::connect(m_session, SIGNAL(confUserDeclined(const QString&, const QString &, const QString &)),
 		                 this,
 		                 SLOT(slotConfUserDecline( const QString &, const QString &, const QString &)) );
-		
+
 		QObject::connect(m_session , SIGNAL(confUserJoined( const QString &, const QString &)), this,
 		                 SLOT(slotConfUserJoin( const QString &, const QString &)) );
-		
+
 		QObject::connect(m_session , SIGNAL(confUserLeft( const QString &, const QString &)), this,
 		                 SLOT(slotConfUserLeave( const QString &, const QString &)) );
-		
+
 		QObject::connect(m_session , SIGNAL(gotConferenceMessage( const QString &, const QString &, const QString &)), this,
 		                 SLOT(slotConfMessage( const QString &, const QString &, const QString &)) );
-		
+
 		QObject::connect(m_session,
-		                 SIGNAL(incomingFileTransfer(const QString &, const QString &, long, const QString &, const QString &, unsigned long)),
+		                 SIGNAL(incomingFileTransfer(const QString &, const QString &, long, const QString &, const QString &, unsigned long, const QPixmap &)),
 		                 this,
-		                 SLOT(slotGotFile(const QString&, const QString&, long, const QString&, const QString&, unsigned long)));
-		
+		                 SLOT(slotGotFile(const QString&, const QString&, long, const QString&, const QString&, unsigned long, const QPixmap &)));
+
 		QObject::connect(m_session, SIGNAL(fileTransferComplete(unsigned int)), this,
 		                 SLOT(slotFileTransferComplete(unsigned int)) );
-		
+
 		QObject::connect(m_session, SIGNAL(fileTransferBytesProcessed(unsigned int,unsigned int)), this,
 		                 SLOT(slotFileTransferBytesProcessed(unsigned int,unsigned int)) );
-		
+
 		QObject::connect(m_session, SIGNAL(fileTransferError(unsigned int,int,const QString &)), this,
 		                 SLOT(slotFileTransferError(unsigned int,int,const QString &)) );
-		
+
 		QObject::connect(m_session, SIGNAL(typingNotify(const QString &, int)), this ,
 		                 SLOT(slotTypingNotify(const QString &, int)));
-		
+
 // 		QObject::connect(m_session, SIGNAL(gameNotify(const QString &, int)), this,
 // 		                 SLOT(slotGameNotify( const QString &, int)));
-		
+
 		QObject::connect(m_session, SIGNAL(mailNotify(const QString&, const QString&, int)), this,
 		                 SLOT(slotMailNotify(const QString &, const QString&, int)));
-		
+
 		QObject::connect(m_session, SIGNAL(systemMessage(const QString&)), this,
 		                 SLOT(slotSystemMessage(const QString &)));
-		
+
 // 		QObject::connect(m_session, SIGNAL(gotIdentities(const QStringList &)), this,
 // 		                 SLOT(slotGotIdentities( const QStringList&)));
-		
+
 		QObject::connect(m_session, SIGNAL(gotWebcamInvite(const QString&)), this, SLOT(slotGotWebcamInvite(const QString&)));
-		
+
 		QObject::connect(m_session, SIGNAL(webcamNotAvailable(const QString&)), this, SLOT(slotWebcamNotAvailable(const QString&)));
-		
+
 		QObject::connect(m_session, SIGNAL(webcamImageReceived(const QString&, const QPixmap& )), this, SLOT(slotGotWebcamImage(const QString&, const QPixmap& )));
-		
+
 		QObject::connect(m_session, SIGNAL(webcamClosed(const QString&, int )), this, SLOT(slotWebcamClosed(const QString&, int )));
-		
+
 		QObject::connect(m_session, SIGNAL(webcamPaused(const QString&)), this, SLOT(slotWebcamPaused(const QString&)));
-		
+
 		QObject::connect(m_session, SIGNAL(webcamReadyForTransmission()), this, SLOT(slotWebcamReadyForTransmission()));
-		
+
 		QObject::connect(m_session, SIGNAL(webcamStopTransmission()), this, SLOT(slotWebcamStopTransmission()));
-		
+
 		QObject::connect(m_session, SIGNAL(webcamViewerJoined(const QString&)), this, SLOT(slotWebcamViewerJoined(const QString&)));
-		
+
 		QObject::connect(m_session, SIGNAL(webcamViewerLeft(const QString&)), this, SLOT(slotWebcamViewerLeft(const QString&)));
-		
+
 		QObject::connect(m_session, SIGNAL(webcamViewerRequest(const QString&)), this, SLOT(slotWebcamViewerRequest( const QString&)));
-		
-		QObject::connect(m_session, SIGNAL(pictureStatusNotify( const QString&, int )), SLOT(slotPictureStatusNotiy( const QString&, int)));
-		
-		QObject::connect(m_session, SIGNAL(pictureDownloaded(const QString&, KTempFile*, int)), this, SLOT(slotGotBuddyIcon(const QString&, KTempFile*, int)) );
+
+		QObject::connect(m_session, SIGNAL(pictureStatusNotify( const QString&, int )), SLOT(slotPictureStatusNotify( const QString&, int)));
+
+		QObject::connect(m_session, SIGNAL(pictureDownloaded(const QString&, const QByteArray &, int)), this, SLOT(slotGotBuddyIcon(const QString&, const QByteArray &, int)) );
 
 		QObject::connect(m_session, SIGNAL(pictureInfoNotify(const QString&, KURL, int)), this, SLOT(slotGotBuddyIconInfo(const QString&, KURL, int )));
 
 		QObject::connect(m_session, SIGNAL(pictureChecksumNotify(const QString&, int)), this, SLOT(slotGotBuddyIconChecksum(const QString&, int )));
-		
+
 		QObject::connect(m_session, SIGNAL(pictureRequest(const QString&)), this, SLOT(slotGotBuddyIconRequest(const QString&)) );
 
-		QObject::connect(m_session, SIGNAL(pictureUploaded( const QString &)), this, SLOT(slotBuddyIconChanged(const QString&)));
-		
+		QObject::connect(m_session, SIGNAL(pictureUploaded( const QString &, int)), this, SLOT(slotBuddyIconChanged(const QString&, int)));
+
 		QObject::connect(m_session, SIGNAL(gotYABEntry( YABEntry * )), this, SLOT(slotGotYABEntry( YABEntry * )));
-		
+
 		QObject::connect(m_session, SIGNAL(modifyYABEntryError( YABEntry *, const QString & )), this, SLOT(slotModifyYABEntryError( YABEntry *, const QString & )));
-		
+
 		QObject::connect(m_session, SIGNAL(gotYABRevision( long, bool )), this, SLOT(slotGotYABRevision( long , bool )) );
+
+		QObject::connect(m_session, SIGNAL(chatRoomJoined(int,int,QString,QString)), this, SLOT(slotChatJoined(int,int,QString,QString)));
+
+		QObject::connect(m_session, SIGNAL(chatBuddyHasJoined(QString,QString,bool)), this, SLOT(slotChatBuddyHasJoined(QString,QString,bool)));
+
+		QObject::connect(m_session, SIGNAL(chatBuddyHasLeft(QString,QString)), this, SLOT(slotChatBuddyHasLeft(QString,QString)));
+
+		QObject::connect(m_session, SIGNAL(chatMessageReceived(QString,QString,QString)), this, SLOT(slotChatMessageReceived(QString,QString,QString)));
 	}
 
 	if ( sct == DeleteConnections )
 	{
 		QObject::disconnect(m_session, SIGNAL(loggedIn(int, const QString &)),
 		                    this, SLOT(slotLoginResponse(int, const QString &)) );
-		
+
 		QObject::disconnect(m_session, SIGNAL(disconnected()),
 		                    this, SLOT(slotDisconnected()) );
-		
+
 		QObject::disconnect(m_session, SIGNAL(loginFailed()),
 		                    this, SLOT(slotLoginFailed()) );
-		
+
 		QObject::disconnect(m_session, SIGNAL(error(int)),
 		                 this, SLOT(slotError(int)));
-		
+
 		QObject::disconnect(m_session, SIGNAL(gotBuddy(const QString &, const QString &, const QString &)),
 		                    this, SLOT(slotGotBuddy(const QString &, const QString &, const QString &)));
-		
+
+		QObject::disconnect(m_session, SIGNAL(buddyAddResult(const QString &, const QString &, bool)),
+		                    this, SLOT(slotBuddyAddResult(const QString &, const QString &, bool)));
+
+		QObject::disconnect(m_session, SIGNAL(buddyRemoveResult(const QString &, const QString &, bool)),
+		                    this, SLOT(slotBuddyRemoveResult(const QString &, const QString &, bool)));
+
+		QObject::disconnect(m_session, SIGNAL(buddyChangeGroupResult(const QString &, const QString &, bool)),
+				 this, SLOT(slotBuddyChangeGroupResult(const QString &, const QString &, bool)));
+
 		QObject::disconnect(m_session, SIGNAL(authorizationAccepted( const QString &)),
 		                 this, SLOT(slotAuthorizationAccepted( const QString &)) );
-		
+
 		QObject::disconnect(m_session, SIGNAL(authorizationRejected( const QString &, const QString &)),
 		                    this, SLOT(slotAuthorizationRejected( const QString &, const QString & )) );
-		
+
 		QObject::disconnect(m_session, SIGNAL(gotAuthorizationRequest( const QString &, const QString &, const QString & )),
 		                 this, SLOT(slotgotAuthorizationRequest( const QString &, const QString &, const QString & )) );
-		
-		QObject::disconnect(m_session, SIGNAL(statusChanged(const QString&, int, const QString&, int, int)),
-		                    this, SLOT(slotStatusChanged(const QString&, int, const QString&, int, int)));
-		
-		QObject::disconnect(m_session, SIGNAL(stealthStatusChanged(const QString &, Yahoo::StealthStatus)), 
+
+		QObject::disconnect(m_session, SIGNAL(statusChanged(const QString&,int,const QString&,int,int,int)),
+		                    this, SLOT(slotStatusChanged(const QString&,int,const QString&,int,int,int)));
+
+		QObject::disconnect(m_session, SIGNAL(stealthStatusChanged(const QString &, Yahoo::StealthStatus)),
 		                 this, SLOT(slotStealthStatusChanged( const QString &, Yahoo::StealthStatus)) );
-		
+
 		QObject::disconnect(m_session, SIGNAL(gotIm(const QString&, const QString&, long, int)),
 		                    this, SLOT(slotGotIm(const QString &, const QString&, long, int)));
 
 		QObject::disconnect(m_session, SIGNAL(gotBuzz(const QString&, long)),
 		                    this, SLOT(slotGotBuzz(const QString &, long)));
-		
+
 		QObject::disconnect(m_session,
 		                    SIGNAL( gotConferenceInvite( const QString&, const QString&,
 		                                           const QString&, const QStringList&) ),
-		                    this, 
+		                    this,
 		                    SLOT( slotGotConfInvite( const QString&, const QString&,
 		                                             const QString&, const QStringList&) ) );
-		
+
 		QObject::disconnect(m_session,
 		                    SIGNAL(confUserDeclined(const QString&, const QString &, const QString &)),
 		                    this,
 		                    SLOT(slotConfUserDecline( const QString &, const QString &, const QString& ) ) );
-		
+
 		QObject::disconnect(m_session , SIGNAL(confUserJoined( const QString &, const QString &)),
 		                    this, SLOT(slotConfUserJoin( const QString &, const QString &)) );
-		
+
 		QObject::disconnect(m_session , SIGNAL(confUserLeft( const QString &, const QString &)),
 		                    this, SLOT(slotConfUserLeave( const QString &, const QString &)) );
-		
+
 		QObject::disconnect(m_session , SIGNAL(gotConferenceMessage( const QString &, const QString &, const QString &)), this,
 		                    SLOT(slotConfMessage( const QString &, const QString &, const QString &)) );
-		
+
 		QObject::disconnect(m_session,
 		                    SIGNAL(incomingFileTransfer(const QString &, const QString &,
-		                                   long, const QString &, const QString &, unsigned long)),
+			                    long, const QString &, const QString &, unsigned long, const QPixmap &)),
 		                    this,
 		                    SLOT(slotGotFile(const QString&, const QString&,
-		                                     long, const QString&, const QString&, unsigned long)));
-		
+		                                     long, const QString&, const QString&, unsigned long, const QPixmap &)));
+
 		QObject::disconnect(m_session, SIGNAL(fileTransferComplete(unsigned int)), this,
 		                 SLOT(slotFileTransferComplete(unsigned int)) );
-		
+
 		QObject::disconnect(m_session, SIGNAL(fileTransferBytesProcessed(unsigned int,unsigned int)), this,
 		                 SLOT(slotFileTransferBytesProcessed(unsigned int,unsigned int)) );
-		
+
 		QObject::disconnect(m_session, SIGNAL(fileTransferError(unsigned int,int,const QString &)), this,
 		                 SLOT(slotFileTransferError(unsigned int,int,const QString &)) );
-		
+
 		QObject::disconnect(m_session, SIGNAL(typingNotify(const QString &, int)), this ,
 		                    SLOT(slotTypingNotify(const QString &, int)));
-		
+
 // 		QObject::disconnect(m_session, SIGNAL(gameNotify(const QString &, int)), this,
 // 		                    SLOT(slotGameNotify( const QString &, int)));
-		
+
 		QObject::disconnect(m_session, SIGNAL(mailNotify(const QString&, const QString&, int)), this,
 		                    SLOT(slotMailNotify(const QString &, const QString&, int)));
-		
+
 		QObject::disconnect(m_session, SIGNAL(systemMessage(const QString&)), this,
 		                    SLOT(slotSystemMessage(const QString &)));
-		
+
 // 		QObject::disconnect(m_session, SIGNAL(gotIdentities(const QStringList &)), this,
 // 		                    SLOT(slotGotIdentities( const QStringList&)));
-		
+
 		QObject::disconnect(m_session, SIGNAL(gotWebcamInvite(const QString&)), this, SLOT(slotGotWebcamInvite(const QString&)));
-		
+
 		QObject::disconnect(m_session, SIGNAL(webcamNotAvailable(const QString&)), this, SLOT(slotWebcamNotAvailable(const QString&)));
-		
+
 		QObject::disconnect(m_session, SIGNAL(webcamImageReceived(const QString&, const QPixmap& )), this, SLOT(slotGotWebcamImage(const QString&, const QPixmap& )));
-		
+
 		QObject::disconnect(m_session, SIGNAL(webcamClosed(const QString&, int )), this, SLOT(slotWebcamClosed(const QString&, int )));
-		
+
 		QObject::disconnect(m_session, SIGNAL(webcamPaused(const QString&)), this, SLOT(slotWebcamPaused(const QString&)));
-		
+
 		QObject::disconnect(m_session, SIGNAL(webcamReadyForTransmission()), this, SLOT(slotWebcamReadyForTransmission()));
-		
+
 		QObject::disconnect(m_session, SIGNAL(webcamStopTransmission()), this, SLOT(slotWebcamStopTransmission()));
-		
+
 		QObject::disconnect(m_session, SIGNAL(webcamViewerJoined(const QString&)), this, SLOT(slotWebcamViewerJoined(const QString&)));
-		
+
 		QObject::disconnect(m_session, SIGNAL(webcamViewerLeft(const QString&)), this, SLOT(slotWebcamViewerLeft(const QString&)));
-		
+
 		QObject::disconnect(m_session, SIGNAL(webcamViewerRequest(const QString&)), this, SLOT(slotWebcamViewerRequest( const QString&)));
-		
-		QObject::disconnect(m_session, SIGNAL(pictureDownloaded(const QString&, KTempFile*, int )), this, SLOT(slotGotBuddyIcon(const QString&, KTempFile*,int )));
+
+		QObject::disconnect(m_session, SIGNAL(pictureDownloaded(const QString&, const QByteArray &, int )), this, SLOT(slotGotBuddyIcon(const QString&, const QByteArray &,int )));
 
 		QObject::disconnect(m_session, SIGNAL(pictureInfoNotify(const QString&, KURL, int)), this, SLOT(slotGotBuddyIconInfo(const QString&, KURL, int )));
-	
-		QObject::disconnect(m_session, SIGNAL(gotBuddyIconRequest(const QString&)), this, SLOT(slotGotBuddyIconRequest(const QString&)) );
-		
-		QObject::disconnect(m_session, SIGNAL(pictureUploaded( const QString & )), this, SLOT(slotBuddyIconChanged(const QString&)));
-	
-		QObject::disconnect(m_session, SIGNAL(pictureStatusNotify( const QString&, int )), this, SLOT(slotPictureStatusNotiy( const QString&, int)));
-		
+
+		QObject::disconnect(m_session, SIGNAL(pictureRequest(const QString&)), this, SLOT(slotGotBuddyIconRequest(const QString&)) );
+
+		QObject::disconnect(m_session, SIGNAL(pictureUploaded( const QString &, int )), this, SLOT(slotBuddyIconChanged(const QString&, int)));
+
+		QObject::disconnect(m_session, SIGNAL(pictureStatusNotify( const QString&, int )), this, SLOT(slotPictureStatusNotify( const QString&, int)));
+
 		QObject::disconnect(m_session, SIGNAL(pictureChecksumNotify(const QString&, int)), this, SLOT(slotGotBuddyIconChecksum(const QString&, int )));
-		
+
 		QObject::disconnect(m_session, SIGNAL(gotYABEntry( YABEntry * )), this, SLOT(slotGotYABEntry( YABEntry * )));
-		
+
 		QObject::disconnect(m_session, SIGNAL(modifyYABEntryError( YABEntry *, const QString & )), this, SLOT(slotModifyYABEntryError( YABEntry *, const QString & )));
-		
+
 		QObject::disconnect(m_session, SIGNAL(gotYABRevision( long, bool )), this, SLOT(slotGotYABRevision( long , bool )) );
+
+		QObject::disconnect(m_session, SIGNAL(chatRoomJoined(int,int,const QString&,const QString&)), this, SLOT(slotChatJoined(int,int,const QString&,const QString&)));
+
+		QObject::disconnect(m_session, SIGNAL(chatBuddyHasJoined(const QString&,const QString&,bool)), this, SLOT(slotChatBuddyHasJoined(const QString&,const QString&,bool)));
+
+		QObject::disconnect(m_session, SIGNAL(chatBuddyHasLeft(const QString&,const QString&)), this, SLOT(slotChatBuddyHasLeft(const QString&,const QString&)));
+
+		QObject::disconnect(m_session, SIGNAL(chatMessageReceived(const QString&,const QString&,const QString&)), this, SLOT(slotChatMessageReceived(const QString&,const QString&,const QString&)));
 	}
 }
 
 void YahooAccount::connectWithPassword( const QString &passwd )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	if ( isAway() )
 	{
 		slotGoOnline();
 		return;
 	}
 
-	if ( isConnected() || 
+	if ( isConnected() ||
 	     myself()->onlineStatus() == m_protocol->Connecting )
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << "Yahoo plugin: Ignoring connect request (already connected)." <<endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "Yahoo plugin: Ignoring connect request (already connected)." << endl;
 		return;
-	
+
 	}
 
 	if ( passwd.isNull() )
@@ -503,17 +538,17 @@
 		static_cast<YahooContact*>( myself() )->setOnlineStatus( m_protocol->Offline );
 		return;
 	}
-	
-	QString server = configGroup()->readEntry( "Server", "scs.msg.yahoo.com" );
+
+	QString server = configGroup()->readEntry( "Server", "scsa.msg.yahoo.com" );
 	int port = configGroup()->readNumEntry( "Port", 5050 );
-	
+
 	initConnectionSignals( MakeConnections );
 
 	//YahooSessionManager::manager()->setPager( server, port );
 	//m_session = YahooSessionManager::manager()->createSession( accountId(), passwd );
-	kdDebug(YAHOO_GEN_DEBUG) << "Attempting to connect to Yahoo on <" << server << ":" 
+	kdDebug(YAHOO_GEN_DEBUG) << "Attempting to connect to Yahoo on <" << server << ":"
 		<< port << ">. user <" << accountId() << ">"  << endl;
-	static_cast<YahooContact *>( myself() )->setOnlineStatus( m_protocol->Connecting );	
+	static_cast<YahooContact *>( myself() )->setOnlineStatus( m_protocol->Connecting );
 	m_session->setStatusOnConnect( Yahoo::Status( initialStatus().internalStatus() ) );
 	m_session->connect( server, port, accountId().lower(), passwd );
 }
@@ -527,37 +562,49 @@
 	{
 		kdDebug(YAHOO_GEN_DEBUG) <<  "Attempting to disconnect from Yahoo server " << endl;
 
+		disconnected( Manual );
 		m_session->close();
 		static_cast<YahooContact *>( myself() )->setOnlineStatus( m_protocol->Offline );
 
+		// FIXME: to check
+		//QHash<QString,Kopete::Contact*>::ConstIterator it, itEnd = contacts().constEnd();
+		//for ( it = contacts().constBegin(); it != itEnd; ++it )
+		//	static_cast<YahooContact *>( it.value() )->setOnlineStatus( m_protocol->Offline );
 		for ( QDictIterator<Kopete::Contact> i( contacts() ); i.current(); ++i )
 			static_cast<YahooContact *>( i.current() )->setOnlineStatus( m_protocol->Offline );
-		
-		disconnected( Manual );
+
+		static_cast<YahooContact*>( myself() )->setOnlineStatus( m_protocol->Offline );
 	}
 	else
 	{       //make sure we set everybody else offline explicitly, just for cleanup
 		kdDebug(YAHOO_GEN_DEBUG) << "Cancelling active login attempts (not fully connected)." << endl;
 		m_session->cancelConnect();
 
+		// FIXME: to check
+		//QHash<QString,Kopete::Contact*>::ConstIterator it, itEnd = contacts().constEnd();
+		//for ( it = contacts().constBegin(); it != itEnd; ++it )
+		//	static_cast<YahooContact*>( it.value() )->setOnlineStatus( m_protocol->Offline );
 		for ( QDictIterator<Kopete::Contact> i(contacts()); i.current(); ++i )
 			static_cast<YahooContact*>( i.current() )->setOnlineStatus( m_protocol->Offline );
+
+		static_cast<YahooContact*>( myself() )->setOnlineStatus( m_protocol->Offline );
 	}
 
 	initConnectionSignals( DeleteConnections );
+	setupActions( false );
 	theHaveContactList = false;
 }
 
 void YahooAccount::verifyAccount( const QString &word )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Word: s" << word << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << "Word: s" << word << endl;
 	m_session->setVerificationWord( word );
 	disconnected( BadPassword );
 }
 
 void YahooAccount::setAway(bool status, const QString &awayMessage)
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 
 	if( awayMessage.isEmpty() )
 		slotGoStatus( status ? 2 : 0 );
@@ -567,12 +614,12 @@
 
 void YahooAccount::slotConnected()
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Moved to slotLoginResponse for the moment" << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << "Moved to slotLoginResponse for the moment" << endl;
 }
 
 void YahooAccount::slotGoOnline()
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	if( !isConnected() )
 		connect( m_protocol->Online );
 	else
@@ -587,17 +634,27 @@
 		static_cast<YahooContact *>( myself() )->setOnlineStatus( m_protocol->Offline );
 }
 
-KActionMenu *YahooAccount::actionMenu()
+KActionMenu* YahooAccount::actionMenu()
 {
-//	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+
+	// FIXME (to check)
+	//Kopete::Account::fillActionMenu( actionMenu );
 	KActionMenu *theActionMenu = Kopete::Account::actionMenu();
-	
+
+	// FIXME: (to check)
+	//actionMenu->addSeparator();
+	//actionMenu->addAction( m_openInboxAction );
+	//actionMenu->addAction( m_openYABAction );
+	//actionMenu->addAction( m_editOwnYABEntry );
+	//actionMenu->addAction( m_joinChatAction );
+
 	theActionMenu->popupMenu()->insertSeparator();
 	theActionMenu->insert( m_editOwnYABEntry );
 	theActionMenu->insert( m_openInboxAction );
 	theActionMenu->insert( m_openYABAction );
-	
+	theActionMenu->insert( m_joinChatAction );
+
 	return theActionMenu;
 }
 
@@ -608,7 +665,7 @@
 
 bool YahooAccount::createContact(const QString &contactId, Kopete::MetaContact *parentContact )
 {
-//	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << " contactId: " << contactId << endl;
+//	kdDebug(YAHOO_GEN_DEBUG) << " contactId: " << contactId;
 
 	if(!contact(contactId))
 	{
@@ -616,38 +673,40 @@
 		// How on earth do you tell if a contact is being deserialised or added brand new here?
 			// -- actualy (oct 2004) this method is only called when new contact are added.  but this will
 			//    maybe change and you will be noticed   --Olivier
-		YahooContact *newContact = new YahooContact( this, contactId, 
+		YahooContact *newContact = new YahooContact( this, contactId,
 		                                             parentContact->displayName(), parentContact );
 		return newContact != 0;
 	}
 	else
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Contact already exists" << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "Contact already exists" << endl;
 
 	return false;
 }
 
-void YahooAccount::slotGlobalIdentityChanged( const QString &key, const QVariant &value )
+bool YahooAccount::createChatContact(const QString &nick)
 {
-	if( !configGroup()->readBoolEntry("ExcludeGlobalIdentity", false) )
-	{
-		if ( key == Kopete::Global::Properties::self()->photo().key() )
-		{
-			setBuddyIcon( KURL( value.toString() ) );
-		}
-	}
+	Kopete::MetaContact *m = new Kopete::MetaContact;
+	m->setTemporary( true );
+	return createContact( nick, m );
 }
 
 void YahooAccount::sendFile( YahooContact *to, const KURL &url )
-{	
+{
 	QFile file( url.path() );
-	
+
 	Kopete::Transfer *transfer = Kopete::TransferManager::transferManager()->addTransfer ( to,
 		url.fileName(), file.size(), to->userId(), Kopete::FileTransferInfo::Outgoing );
 	m_session->sendFile( transfer->info().transferId(), to->userId(), QString(), url );
-	
+
 	QObject::connect( transfer, SIGNAL(result( KIO::Job * )), this, SLOT(slotFileTransferResult( KIO::Job * )) );
-	
-	m_fileTransfers.insert( transfer->info().transferId(), transfer );	
+
+	m_fileTransfers.insert( transfer->info().transferId(), transfer );
+}
+
+void YahooAccount::setupActions( bool connected )
+{
+	m_joinChatAction->setEnabled( connected );
+	m_editOwnYABEntry->setEnabled( connected );
 }
 
 /***************************************************************************
@@ -658,8 +717,9 @@
 
 void YahooAccount::slotLoginResponse( int succ , const QString &url )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << succ << ", " << url << ")]" << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << succ << ", " << url << ")]" << endl;
 	QString errorMsg;
+	setupActions( succ == Yahoo::LoginOk );
 	if ( succ == Yahoo::LoginOk || (succ == Yahoo::LoginDupl && m_lastDisconnectCode == 2) )
 	{
 		if ( initialStatus().internalStatus() )
@@ -671,9 +731,10 @@
 			static_cast<YahooContact *>( myself() )->setOnlineStatus( m_protocol->Online );
 		}
 
-		 
+
 		setBuddyIcon( myself()->property( Kopete::Global::Properties::self()->photo() ).value().toString() );
 		m_session->getYABEntries( m_YABLastMerge, m_YABLastRemoteRevision );
+		IDs.clear();
 		m_lastDisconnectCode = 0;
 		theHaveContactList = true;
 		return;
@@ -689,7 +750,7 @@
 	else if(succ == Yahoo::LoginLock)
 	{
 		initConnectionSignals( DeleteConnections );
-		errorMsg = i18n("Could not log into Yahoo service: your account has been locked.\nVisit %1 to reactivate it.").arg(url);
+		errorMsg = i18n("Could not log into the Yahoo service: your account has been locked.\nVisit %1 to reactivate it.").arg(url);
 		KMessageBox::queuedMessageBox(Kopete::UI::Global::mainWidget(), KMessageBox::Error, errorMsg);
 		static_cast<YahooContact *>( myself() )->setOnlineStatus( m_protocol->Offline );
 		disconnected( BadUserName ); // FIXME: add a more appropriate disconnect reason
@@ -730,13 +791,14 @@
 
 void YahooAccount::slotDisconnected()
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	initConnectionSignals( DeleteConnections );
+	setupActions( false );
 	if( !isConnected() )
 		return;
 	static_cast<YahooContact *>( myself() )->setOnlineStatus( m_protocol->Offline );
 	disconnected( ConnectionReset );	// may reconnect
-	
+
 	QString message;
 	message = i18n( "%1 has been disconnected.\nError message:\n%2 - %3" )
 		.arg( accountId() ).arg( m_session->error() ).arg( m_session->errorString() );
@@ -745,33 +807,34 @@
 
 void YahooAccount::slotLoginFailed()
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	initConnectionSignals( DeleteConnections );
 	static_cast<YahooContact *>( myself() )->setOnlineStatus( m_protocol->Offline );
 	disconnected( Manual );			// don't reconnect
-	
+
 	QString message;
 	message = i18n( "There was an error while connecting %1 to the Yahoo server.\nError message:\n%2 - %3" )
-		.arg( accountId() ).arg( m_session->error() ).arg( m_session->errorString() );
+		.arg( accountId()).arg( m_session->error() ).arg( m_session->errorString() );
 	KNotification::event( "cannot_connect", message, myself()->onlineStatus().protocolIcon() );
 }
 
 void YahooAccount::slotError( int level )
 {
-	// enum LogLevel { Debug, Info, Notice, Warning, Error, Critical }; 
+	// enum LogLevel { Debug, Info, Notice, Warning, Error, Critical };
 	if( level <= Client::Notice )
 		return;
 	else if( level <= Client::Warning )
-		KMessageBox::information( Kopete::UI::Global::mainWidget(), i18n( "%1\n\nReason: %2 - %3" ).arg(m_session->errorInformation())
-		                          .arg(m_session->error()).arg(m_session->errorString()), i18n( "Yahoo Plugin" ) );
-	else 
-		KMessageBox::error( Kopete::UI::Global::mainWidget(), i18n( "%1\n\nReason: %2 - %3" ).arg(m_session->errorInformation())
-		                    .arg(m_session->error()).arg(m_session->errorString()), i18n( "Yahoo Plugin" ) );
+		KMessageBox::information( Kopete::UI::Global::mainWidget(),
+			i18n( "%1\n\nReason: %2").arg( m_session->errorInformation() ).arg( m_session->errorString() ),
+			i18n( "Yahoo Plugin" ) );
+	else
+		KMessageBox::error( Kopete::UI::Global::mainWidget(), i18n( "%1\n\nReason: %2" )
+			.arg( m_session->errorInformation() ).arg(  m_session->errorString() ), i18n( "Yahoo Plugin" ) );
 }
 
 void YahooAccount::slotGotBuddy( const QString &userid, const QString &alias, const QString &group )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	IDs[userid] = QPair<QString, QString>(group, alias);
 
 	// Serverside -> local
@@ -781,50 +844,101 @@
 		Kopete::Group *g=Kopete::ContactList::self()->findGroup(group);
 		addContact(userid, alias.isEmpty() ? userid : alias, g, Kopete::Account::ChangeKABC);
 	}
+
+	// FIXME (same)
+	//kdDebug(YAHOO_GEN_DEBUG) << IDs << endl;
+}
+
+void YahooAccount::slotBuddyAddResult( const QString &userid, const QString &group, bool success )
+{
+     kdDebug(YAHOO_GEN_DEBUG) << success << endl;
+
+     if(success)
+	  IDs[userid] = QPair<QString, QString>(group, QString());
+
+	// FIXME (same)
+	//kdDebug(YAHOO_GEN_DEBUG) << IDs << endl;
+}
+
+void YahooAccount::slotBuddyRemoveResult( const QString &userid, const QString &group, bool success )
+{
+     kdDebug(YAHOO_GEN_DEBUG);
+
+     // Ignore success here, the only reason this will fail is because the
+     // contact isn't on the server's list, so we shouldn't have them in our
+     // list either.
+     IDs.remove(userid);
+
+	// FIXME
+	// kdDebug(YAHOO_GEN_DEBUG) << IDs << endl;
+}
+
+void YahooAccount::slotBuddyChangeGroupResult(const QString &userid, const QString &group, bool success)
+{
+     kdDebug(YAHOO_GEN_DEBUG);
+
+     if(success)
+	  IDs[userid] = QPair<QString, QString>(group, QString());
+
+	// FIXME
+	//kdDebug(YAHOO_GEN_DEBUG) << IDs << endl;
 }
 
 void YahooAccount::slotAuthorizationAccepted( const QString &who )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	QString message;
-	message = i18n( "User %1 has granted your authorization request." )
-		.arg( who );
-	KNotification::event( "kopete_authorization", message, 0 , 0 , 0 );
-	
+	message = i18n( "User %1 has granted your authorization request." ).arg( who );
+	KNotification::event( QString::fromLatin1("kopete_authorization"), message );
+
 	if( contact( who ) )
 		contact( who )->setOnlineStatus( m_protocol->Online );
 }
 
 void YahooAccount::slotAuthorizationRejected( const QString &who, const QString &msg )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	QString message;
-	message = i18n( "User %1 has granted your authorization request.\n%2" )
+	message = i18n( "User %1 has rejected your authorization request.\n%2" )
 		.arg( who ).arg( msg );
-	KNotification::event( "kopete_authorization", message, 0 , 0 , 0 );
+	KNotification::event( QString::fromLatin1("kopete_authorization"), message );
 }
 
 void YahooAccount::slotgotAuthorizationRequest( const QString &user, const QString &msg, const QString &name )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	Q_UNUSED( msg );
 	Q_UNUSED( name );
 	YahooContact *kc = contact( user );
 	Kopete::MetaContact *metaContact=0L;
 	if(kc)
 		metaContact=kc->metaContact();
-	
+
+	// FIXME: to check
+	//Kopete::AddedInfoEvent::ShowActionOptions actions = Kopete::AddedInfoEvent::AuthorizeAction;
+	//actions |= Kopete::AddedInfoEvent::BlockAction;
+	//if( !metaContact || metaContact->isTemporary() )
+	//	actions |= Kopete::AddedInfoEvent::AddAction;
+
+	//Kopete::AddedInfoEvent* event = new Kopete::AddedInfoEvent( user, this );
+	//QObject::connect( event, SIGNAL(actionActivated(uint)),
+	//                  this, SLOT(slotAddedInfoEventActionActivated(uint)) );
+
+	//event->showActions( actions );
+	//event->sendEvent();
+
 	int hideFlags=Kopete::UI::ContactAddedNotifyDialog::InfoButton;
 	if( metaContact && !metaContact->isTemporary() )
-		hideFlags |= Kopete::UI::ContactAddedNotifyDialog::AddCheckBox | Kopete::UI::ContactAddedNotifyDialog::AddGroupBox ;
-	
+			hideFlags |= Kopete::UI::ContactAddedNotifyDialog::AddCheckBox | Kopete::UI::ContactAddedNotifyDialog::AddGroupBox ;
+
 	Kopete::UI::ContactAddedNotifyDialog *dialog=
-		new Kopete::UI::ContactAddedNotifyDialog( user,QString::null,this, hideFlags );
+			new Kopete::UI::ContactAddedNotifyDialog( user,QString::null,this, hideFlags );
 	QObject::connect(dialog,SIGNAL(applyClicked(const QString&)),
-	                 this,SLOT(slotContactAddedNotifyDialogClosed(const QString& )));
+			this,SLOT(slotContactAddedNotifyDialogClosed(const QString& )));
 	dialog->show();
 }
 
+
 void YahooAccount::slotContactAddedNotifyDialogClosed( const QString &user )
 {
 	const Kopete::UI::ContactAddedNotifyDialog *dialog =
@@ -840,24 +954,45 @@
 	}
 }
 
+
+/*void YahooAccount::slotAddedInfoEventActionActivated( uint actionId )
+{
+	const Kopete::AddedInfoEvent *event = dynamic_cast<const Kopete::AddedInfoEvent *>(sender());
+	if( !event || !isConnected() )
+		return;
+
+	switch ( actionId )
+	{
+	case Kopete::AddedInfoEvent::AuthorizeAction:
+		m_session->sendAuthReply( event->contactId(), true, QString() );
+		break;
+	case Kopete::AddedInfoEvent::BlockAction:
+		m_session->sendAuthReply( event->contactId(), false, QString() );
+		break;
+	case Kopete::AddedInfoEvent::AddContactAction:
+		event->addContact();
+		break;
+	}
+}*/
+
 void YahooAccount::slotGotIgnore( const QStringList & /* igns */ )
 {
-	//kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	//kdDebug(YAHOO_GEN_DEBUG) ;
 }
 
 void YahooAccount::slotGotIdentities( const QStringList & /* ids */ )
 {
-	//kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	//kdDebug(YAHOO_GEN_DEBUG) ;
 }
 
-void YahooAccount::slotStatusChanged( const QString &who, int stat, const QString &msg, int away, int idle )
+void YahooAccount::slotStatusChanged( const QString &who, int stat, const QString &msg, int away, int idle, int pictureChecksum )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << who << " status: " << stat << " msg: " << msg << " away: " << away << " idle: " << idle <<endl;
+	kdDebug(YAHOO_GEN_DEBUG) << who << " status: " << stat << " msg: " << msg << " away: " << away << " idle: " << idle << endl;
 	YahooContact *kc = contact( who );
-	
+
 	if( contact( who ) == myself() )
 		return;
-	
+
 	if ( kc )
 	{
 		Kopete::OnlineStatus newStatus = m_protocol->statusFromYahoo( stat );
@@ -871,37 +1006,39 @@
 		else
 			kc->removeProperty( m_protocol->awayMessage );
 
-		if( newStatus != m_protocol->Offline &&
-		    oldStatus == m_protocol->Offline && contact(who) != myself() )
+		// from original file
+		if( newStatus != m_protocol->Offline && oldStatus == m_protocol->Offline && contact(who) != myself() )
 		{
-			//m_session->requestBuddyIcon( who );		// Try to get Buddy Icon
+			//m_session->requestBuddyIcon( who );           // Try to get Buddy Icon
 
 			if ( !myself()->property( Kopete::Global::Properties::self()->photo() ).isNull() &&
-					myself()->onlineStatus() != m_protocol->Invisible && 
+					myself()->onlineStatus() != m_protocol->Invisible &&
 					!kc->stealthed() )
 			{
 				kc->sendBuddyIconUpdate( m_session->pictureFlag() );
 				kc->sendBuddyIconChecksum( myself()->property( YahooProtocol::protocol()->iconCheckSum ).value().toInt() );
 			}
 		}
-		
+
 		//if( newStatus == static_cast<YahooProtocol*>( m_protocol )->Idle ) {
 		if( newStatus == m_protocol->Idle )
 			kc->setIdleTime( idle ? idle : 1 );
 		else
 			kc->setIdleTime( 0 );
-		
+
 		kc->setOnlineStatus( newStatus );
+
+		slotGotBuddyIconChecksum( who, pictureChecksum );
 	}
 }
 
 void YahooAccount::slotStealthStatusChanged( const QString &who, Yahoo::StealthStatus state )
 {
-	//kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Stealth Status of " << who << "changed to " << state << endl;
-	
+	//kdDebug(YAHOO_GEN_DEBUG) << "Stealth Status of " << who << "changed to " << state;
+
 	YahooContact* kc = contact( who );
 	if ( kc == NULL ) {
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "contact " << who << " doesn't exist." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "contact " << who << " doesn't exist." << endl;
 		return;
 	}
 	kc->setStealthed( state == Yahoo::StealthActive );
@@ -913,11 +1050,11 @@
 	QRegExp regExp;
 	int pos = 0;
 	newMsgText = stripMsgColorCodes( newMsgText );
-	
+
 	kdDebug(YAHOO_GEN_DEBUG) << "Message after stripping color codes '" << newMsgText << "'" << endl;
-	
+
 	newMsgText.replace( QString::fromLatin1( "&" ), QString::fromLatin1( "&amp;" ) );
-	
+
 	// Replace Font tags
 	regExp.setMinimal( true );
 	regExp.setPattern( "<font([^>]*)size=\"([^>]*)\"([^>]*)>" );
@@ -929,7 +1066,7 @@
 		newMsgText.replace( regExp, QString::fromLatin1("<font\\1style=\"font-size:\\2pt\">" ) );
 		}
 	}
-	
+
 	// Remove FADE and ALT tags
 	regExp.setPattern( "<[/]*FADE([^>]*)>" );
 	pos = 0;
@@ -937,8 +1074,8 @@
 		pos = regExp.search( newMsgText, pos );
 		if ( pos >= 0 ) {
 			pos += regExp.matchedLength();
-			newMsgText.replace( regExp, QString::fromLatin1("" ) );
-		
+			newMsgText.remove( regExp );
+
 		}
 	}
 	regExp.setPattern( "<[/]*ALT([^>]*)>" );
@@ -947,10 +1084,10 @@
 		pos = regExp.search( newMsgText, pos );
 		if ( pos >= 0 ) {
 			pos += regExp.matchedLength();
-			newMsgText.replace( regExp, QString::fromLatin1("" ) );
+			newMsgText.remove( regExp );
 		}
 	}
-	
+
 	// Replace < and > in text
 	regExp.setPattern( "<(?!(/*(font.*|[\"fbui])>))" );
 	pos = 0;
@@ -970,7 +1107,7 @@
 			newMsgText.replace( regExp, QString::fromLatin1("\\1&gt;" ) );
 		}
 	}
-	
+
 	// add closing tags when needed
 	regExp.setMinimal( false );
 	regExp.setPattern( "(<b>.*)(?!</b>)" );
@@ -981,9 +1118,9 @@
 	newMsgText.replace( regExp, QString::fromLatin1("\\1</u>" ) );
 	regExp.setPattern( "(<font.*)(?!</font>)" );
 	newMsgText.replace( regExp, QString::fromLatin1("\\1</font>" ) );
-	
+
 	newMsgText.replace( QString::fromLatin1( "\r" ), QString::fromLatin1( "<br/>" ) );
-	
+
 	return newMsgText;
 }
 
@@ -992,36 +1129,40 @@
 	QFont msgFont;
 	QDateTime msgDT;
 	Kopete::ContactPtrList justMe;
-	
+
 	if( !contact( who ) )
 	{
 		kdDebug(YAHOO_GEN_DEBUG) << "Adding contact " << who << endl;
 		addContact( who,who,  0L, Kopete::Account::Temporary );
 	}
-	
+
 	//Parse the message for it's properties
 	kdDebug(YAHOO_GEN_DEBUG) << "Original message is '" << msg << "'" << endl;
-	//kdDebug(YAHOO_GEN_DEBUG) << "Message color is " << getMsgColor(msg) << endl;
+	//kdDebug(YAHOO_GEN_DEBUG) << "Message color is " << getMsgColor(msg);
 	QColor fgColor = getMsgColor( msg );
+
+	// FIXME to check
 	if (tm == 0)
+		//msgDT = QDateTime( QDate::currentDate(), QTime::currentTime(), Qt::LocalTime );
 		msgDT.setTime_t(time(0L));
 	else
+		//msgDT = QDateTime::fromTime_t(tm);
 		msgDT.setTime_t(tm, Qt::LocalTime);
-	
+
 	QString newMsgText = prepareIncomingMessage( msg );
-	
+
 	kdDebug(YAHOO_GEN_DEBUG) << "Message after fixing font tags '" << newMsgText << "'" << endl;
-	
+
 	Kopete::ChatSession *mm = contact(who)->manager(Kopete::Contact::CanCreate);
-	
+
 	// Tell the message manager that the buddy is done typing
 	mm->receivedTypingMsg(contact(who), false);
-	
+
 	justMe.append(myself());
-	
+
 	Kopete::Message kmsg(msgDT, contact(who), justMe, newMsgText,
-	                     Kopete::Message::Inbound , Kopete::Message::RichText);
-	
+		Kopete::Message::Inbound , Kopete::Message::RichText);
+
 	kmsg.setFg( fgColor );
 	mm->appendMessage(kmsg);
 }
@@ -1031,27 +1172,31 @@
 	QFont msgFont;
 	QDateTime msgDT;
 	Kopete::ContactPtrList justMe;
-	
+
 	if( !contact( who ) )
 	{
 		kdDebug(YAHOO_GEN_DEBUG) << "Adding contact " << who << endl;
 		addContact( who,who,  0L, Kopete::Account::Temporary );
 	}
-	
+
+	// FIXME: to check
 	if (tm == 0)
+		//msgDT = QDateTime( QDate::currentDate(), QTime::currentTime(), Qt::LocalTime );
 		msgDT.setTime_t(time(0L));
 	else
+		//msgDT = QDateTime::fromTime_t(tm);
 		msgDT.setTime_t(tm, Qt::LocalTime);
-	
+
 	justMe.append(myself());
-	
-	QString buzzMsgText = i18n("This string is shown when the user is buzzed by a contact", "Buzz!!");
-	
+
+	QString buzzMsgText = i18n("This string is shown when the user is buzzed by a contact", "Buzz");
+
 	Kopete::Message kmsg(msgDT, contact(who), justMe, buzzMsgText, Kopete::Message::Inbound,
-	                     Kopete::Message::PlainText, QString::null, Kopete::Message::TypeAction);
+		Kopete::Message::PlainText, QString::null, Kopete::Message::TypeAction);
+
 	QColor fgColor( "gold" );
 	kmsg.setFg( fgColor );
-	
+
 	Kopete::ChatSession *mm = contact(who)->manager(Kopete::Contact::CanCreate);
 	mm->appendMessage(kmsg);
 	// Emit the buzz notification.
@@ -1060,20 +1205,20 @@
 
 void YahooAccount::slotGotConfInvite( const QString & who, const QString & room, const QString &msg, const QStringList &members )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << who << " has invited you to join the conference \"" << room << "\" : " << msg << endl;
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Members: " << members << endl;
-	
+	kdDebug(YAHOO_GEN_DEBUG) << who << " has invited you to join the conference \"" << room << "\" : " << msg << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << "Members: " << members << endl;
+
 	if( !m_pendingConfInvites.contains( room ) )	// We have to keep track of the invites as the server will send the same invite twice if it gets canceled by the host
 		m_pendingConfInvites.push_back( room );
 	else
 	{
 		return;
 	}
-	
+
 	QString m = who;
 	QStringList myMembers;
 	myMembers.push_back( who );
-	for( QStringList::const_iterator it = ++members.begin(); it != members.end(); it++ )
+	for( QStringList::const_iterator it = ++members.constBegin(); it != members.constEnd(); ++it )
 	{
 		if( *it != m_session->userId() )
 		{
@@ -1081,9 +1226,9 @@
 			myMembers.push_back( *it );
 		}
 	}
-	if( KMessageBox::Yes == KMessageBox::questionYesNo( Kopete::UI::Global::mainWidget(), 
-				i18n("%1 has invited you to join a conference with %2.\n\nHis message: %3\n\n Accept?")
-				.arg(who).arg(m).arg(msg), QString::null, i18n("Accept"), i18n("Ignore") ) )
+	if( KMessageBox::Yes == KMessageBox::questionYesNo( Kopete::UI::Global::mainWidget(),
+		i18n("%1 has invited you to join a conference with %2.\n\nHis/her message: %3\n\nAccept?")
+		.arg(who).arg(m).arg(msg), QString(), i18n("Accept"), i18n("Ignore") ) )
 	{
 		m_session->joinConference( room, myMembers );
 		if( !m_conferences[room] )
@@ -1091,26 +1236,26 @@
 			Kopete::ContactPtrList others;
 			YahooConferenceChatSession *session = new YahooConferenceChatSession( room, protocol(), myself(), others );
 			m_conferences[room] = session;
-			
+
 			QObject::connect( session, SIGNAL(leavingConference( YahooConferenceChatSession * ) ), this, SLOT( slotConfLeave( YahooConferenceChatSession * ) ) );
-			
-			for ( QValueList<QString>::ConstIterator it = myMembers.begin(); it != myMembers.end(); ++it )
+
+			for ( QStringList::ConstIterator it = myMembers.constBegin(); it != myMembers.constEnd(); ++it )
 			{
 				YahooContact * c = contact( *it );
 				if ( !c )
 				{
-					kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Adding contact " << *it << " to conference." << endl;
+					kdDebug(YAHOO_GEN_DEBUG) << "Adding contact " << *it << " to conference." << endl;
 					addContact( *it,*it,  0L, Kopete::Account::Temporary );
 					c = contact( *it );
 				}
-				session->joined( c );	
+				session->joined( c );
 			}
 			session->view( true )->raise( false );
 		}
 	}
 	else
-		m_session->declineConference( room, myMembers, QString::null );
-	
+		m_session->declineConference( room, myMembers, QString() );
+
 	m_pendingConfInvites.remove( room );
 }
 
@@ -1123,18 +1268,26 @@
 		room += (c > 25)  ? c + 71 : c + 65;
 	}
 	room = QString("%1-%2--").arg(accountId()).arg(room);
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "The generated roomname is: " << room << endl;
-	
+	kdDebug(YAHOO_GEN_DEBUG) << "The generated roomname is: " << room << endl;
+
 	QStringList buddies;
+
+	// FIXME: to check
+	//QHash<QString,Kopete::Contact*>::ConstIterator it, itEnd = contacts().constEnd();
+	//for( it = contacts().constBegin(); it != itEnd; ++it )
+	//{
+	//	buddies.push_back( it.value()->contactId() );
+	//}
+
 	QDictIterator<Kopete::Contact> it( contacts() );
 	for( ; it.current(); ++it )
 	{
 		if( (*it) != myself() )
 			buddies.push_back( (*it)->contactId() );
 	}
-	
+
 	YahooInviteListImpl *dlg = new YahooInviteListImpl( Kopete::UI::Global::mainWidget() );
-	QObject::connect( dlg, SIGNAL( readyToInvite( const QString &, const QStringList &, const QStringList &, const QString & ) ), 
+	QObject::connect( dlg, SIGNAL( readyToInvite( const QString &, const QStringList &, const QStringList &, const QString & ) ),
 			this, SLOT( slotInviteConference( const QString &, const QStringList &, const QStringList &, const QString & ) ) );
 	dlg->setRoom( room );
 	dlg->fillFriendList( buddies );
@@ -1143,54 +1296,54 @@
 }
 
 void YahooAccount::slotInviteConference( const QString &room, const QStringList &members, const QStringList &participants, const QString &msg )
-{	
+{
 	Q_UNUSED( participants );
-kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Inviting " << members << " to the conference " << room << ". Message: " << msg << endl;
+kdDebug(YAHOO_GEN_DEBUG) << "Inviting " << members << " to the conference " << room << ". Message: " << msg << endl;
 	m_session->inviteConference( room, members, msg );
-	
+
 	Kopete::ContactPtrList others;
 	YahooConferenceChatSession *session = new YahooConferenceChatSession( room, protocol(), myself(), others );
 	m_conferences[room] = session;
-	
+
 	QObject::connect( session, SIGNAL(leavingConference( YahooConferenceChatSession * ) ), this, SLOT( slotConfLeave( YahooConferenceChatSession * ) ) );
-	
+
 	session->joined( static_cast< YahooContact *>(myself()) );
 	session->view( true )->raise( false );
 }
 
 void YahooAccount::slotAddInviteConference( const QString &room, const QStringList &who, const QStringList &members, const QString &msg )
-{	
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Inviting " << who << " to the conference " << room << ". Message: " << msg << endl;
+{
+	kdDebug(YAHOO_GEN_DEBUG) << "Inviting " << who << " to the conference " << room << ". Message: " << msg << endl;
 	m_session->addInviteConference( room, who, members, msg );
 }
 
 void YahooAccount::slotConfUserDecline( const QString &who, const QString &room, const QString &msg)
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	
+	kdDebug(YAHOO_GEN_DEBUG) ;
+
 	if( !m_conferences.contains( room ) )
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Error. No chatsession for this conference found." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "Error. No chatsession for this conference found." << endl;
 		return;
 	}
-	
+
 	YahooConferenceChatSession *session = m_conferences[room];
-	
-	QString body = i18n( "%1 declined to join the conference: \"%2\"" ).arg( who ).arg( msg );
-	Kopete::Message message = Kopete::Message( contact( who ), myself(), body, Kopete::Message::Internal, Kopete::Message::PlainText );
-	
+
+	QString body = i18n( "%1 has declined to join the conference: \"%2\"").arg( who ).arg( msg );
+    Kopete::Message message = Kopete::Message( contact( who ), myself(), body, Kopete::Message::Internal, Kopete::Message::PlainText );
+
 	session->appendMessage( message );
 }
 
 void YahooAccount::slotConfUserJoin( const QString &who, const QString &room )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;	
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	if( !m_conferences.contains( room ) )
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Error. No chatsession for this conference found." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "Error. No chatsession for this conference found." << endl;
 		return;
 	}
-	
+
 	YahooConferenceChatSession *session = m_conferences[room];
 	if( !contact( who ) )
 	{
@@ -1201,13 +1354,13 @@
 
 void YahooAccount::slotConfUserLeave( const QString & who, const QString &room )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;	
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	if( !m_conferences.contains( room ) )
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Error. No chatsession for this conference found." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "Error. No chatsession for this conference found." << endl;
 		return;
 	}
-	
+
 	YahooConferenceChatSession *session = m_conferences[room];
 	if( !contact( who ) )
 	{
@@ -1218,15 +1371,15 @@
 
 void YahooAccount::slotConfLeave( YahooConferenceChatSession *s )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	if( !s )
 		return;
 	QStringList members;
-	for( Kopete::ContactPtrList::iterator it = s->members().begin(); it != s->members().end(); ++it )
+	for( Kopete::ContactPtrList::ConstIterator it = s->members().constBegin(); it != s->members().constEnd(); ++it )
 	{
 		if( (*it) == myself() )
 			continue;
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Member: " << (*it)->contactId() << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "Member: " << (*it)->contactId() << endl;
 		members.append( (*it)->contactId() );
 	}
 	m_session->leaveConference( s->room(), members );
@@ -1235,53 +1388,53 @@
 
 void YahooAccount::slotConfMessage( const QString &who, const QString &room, const QString &msg )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	
+	kdDebug(YAHOO_GEN_DEBUG) ;
+
 	if( !m_conferences.contains( room ) )
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Error. No chatsession for this conference found." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "Error. No chatsession for this conference found." << endl;
 		return;
 	}
-	
+
 	YahooConferenceChatSession *session = m_conferences[room];
 
 	QFont msgFont;
 	QDateTime msgDT;
 	Kopete::ContactPtrList justMe;
-	
+
 	if( !contact( who ) )
 	{
 		kdDebug(YAHOO_GEN_DEBUG) << "Adding contact " << who << endl;
 		addContact( who,who,  0L, Kopete::Account::Temporary );
 	}
 	kdDebug(YAHOO_GEN_DEBUG) << "Original message is '" << msg << "'" << endl;
-	
+
 	QColor fgColor = getMsgColor( msg );
-	msgDT.setTime_t(time(0L));	
-	
+	msgDT.setTime_t(time(0L));
+
 	QString newMsgText = prepareIncomingMessage( msg );
-	
+
 	kdDebug(YAHOO_GEN_DEBUG) << "Message after fixing font tags '" << newMsgText << "'" << endl;
 	session->receivedTypingMsg(contact(who), false);
-	
+
 	justMe.append(myself());
-	
+
 	Kopete::Message kmsg(msgDT, contact(who), justMe, newMsgText,
-	                     Kopete::Message::Inbound , Kopete::Message::RichText);
-	
+		Kopete::Message::Inbound , Kopete::Message::RichText);
+
 	kmsg.setFg( fgColor );
 	session->appendMessage(kmsg);
 }
 
-void YahooAccount::sendConfMessage( YahooConferenceChatSession *s, Kopete::Message &message )
+void YahooAccount::sendConfMessage( YahooConferenceChatSession *s, const Kopete::Message &message )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	QStringList members;
-	for( Kopete::ContactPtrList::iterator it = s->members().begin(); it != s->members().end(); ++it )
+	for( Kopete::ContactPtrList::ConstIterator it = s->members().constBegin(); it != s->members().constEnd(); ++it )
 	{
 		if( (*it) == myself() )
 			continue;
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Member: " << (*it)->contactId() << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "Member: " << (*it)->contactId() << endl;
 		members.append( (*it)->contactId() );
 	}
 	m_session->sendConferenceMessage( s->room(), members, YahooContact::prepareMessage( message.escapedBody() ) );
@@ -1291,14 +1444,14 @@
 {
 	if( merged )
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Merge Revision received: " << rev << endl;
-		configGroup()->writeEntry( "YABLastMerge", rev );
+		kdDebug(YAHOO_GEN_DEBUG) << "Merge Revision received: " << rev << endl;
+		configGroup()->writeEntry( "YABLastMerge", (Q_INT64)rev );
 		m_YABLastMerge = rev;
 	}
 	else
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Remote Revision received: " << rev << endl;
-		configGroup()->writeEntry( "YABLastRemoteRevision", rev );
+		kdDebug(YAHOO_GEN_DEBUG) << "Remote Revision received: " << rev << endl;
+		configGroup()->writeEntry( "YABLastRemoteRevision", (Q_INT64)rev );
 		m_YABLastRemoteRevision = rev;
 	}
 }
@@ -1308,12 +1461,12 @@
 	YahooContact* kc = contact( entry->yahooId );
 	if( !kc )
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "YAB entry received for a contact not on our buddylist: " << entry->yahooId << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "YAB entry received for a contact not on our buddylist: " << entry->yahooId << endl;
 		delete entry;
 	}
 	else
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "YAB entry received for: " << entry->yahooId << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "YAB entry received for: " << entry->yahooId << endl;
 		if( entry->source == YABEntry::SourceYAB )
 		{
 			kc->setYABEntry( entry );
@@ -1321,7 +1474,7 @@
 		else if( entry->source == YABEntry::SourceContact )
 		{
 			entry->YABId = kc->yabEntry()->YABId;
-			YahooUserInfoDialog *dlg = new YahooUserInfoDialog( kc, Kopete::UI::Global::mainWidget(), "yahoo userinfo" );
+			YahooUserInfoDialog *dlg = new YahooUserInfoDialog( kc, Kopete::UI::Global::mainWidget() );
 			dlg->setData( *entry );
 			dlg->setAccountConnected( isConnected() );
 			dlg->show();
@@ -1333,7 +1486,7 @@
 
 void YahooAccount::slotSaveYABEntry( YABEntry &entry )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "YABId: " << entry.YABId << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << "YABId: " << entry.YABId << endl;
 	if( entry.YABId > 0 )
 		m_session->saveYABEntry( entry );
 	else
@@ -1345,34 +1498,36 @@
 	YahooContact* kc = contact( entry->yahooId );
 	if( kc )
 		kc->setYABEntry( entry, true );
-	KMessageBox::sorry( Kopete::UI::Global::mainWidget(), msg, i18n( "Yahoo Plugin" ) );
+	KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, msg, i18n( "Yahoo Plugin" ) );
 }
 
-void YahooAccount::slotGotFile( const QString &  who, const QString &  url , long /* expires */, const QString &  msg ,
-	const QString &  fname, unsigned long  fesize  )
+void YahooAccount::slotGotFile( const QString &  who, const QString &  url , long /* expires */, const QString &  msg , const QString &  fname, unsigned long  fesize, const QPixmap &preview )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Received File from " << who << ": " << msg << endl;
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Filename :" << fname << " size:" << fesize << endl;
-	
-	Kopete::TransferManager::transferManager()->askIncomingTransfer( contact( who ) , fname, fesize, msg, url );	
-	
+	kdDebug(YAHOO_GEN_DEBUG) << "Received File from " << who << ": " << msg << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << "Filename :" << fname << " size:" << fesize << endl;
+
+	// FIXME: preview?
+	Kopete::TransferManager::transferManager()->askIncomingTransfer( contact( who ) , fname, fesize, msg, url /* , preview */ );
+
 	if( m_pendingFileTransfers.empty() )
 	{
-		QObject::connect( Kopete::TransferManager::transferManager(), SIGNAL( accepted( Kopete::Transfer *, const QString& ) ),
-						this, SLOT( slotReceiveFileAccepted( Kopete::Transfer *, const QString& ) ) );
-		QObject::connect( Kopete::TransferManager::transferManager(), SIGNAL( refused(const Kopete::FileTransferInfo& ) ),
-						this, SLOT( slotReceiveFileRefused( const Kopete::FileTransferInfo& ) ) );
+	QObject::connect( Kopete::TransferManager::transferManager(), SIGNAL( accepted( Kopete::Transfer *, const QString& ) ),
+					this, SLOT( slotReceiveFileAccepted( Kopete::Transfer *, const QString& ) ) );
+	QObject::connect( Kopete::TransferManager::transferManager(), SIGNAL( refused(const Kopete::FileTransferInfo& ) ),
+	                  this, SLOT( slotReceiveFileRefused( const Kopete::FileTransferInfo& ) ) );
 	}
 	m_pendingFileTransfers.append( url );
 }
 
 void YahooAccount::slotReceiveFileAccepted(Kopete::Transfer *transfer, const QString& fileName)
-{	
+{
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	if( !m_pendingFileTransfers.contains( transfer->info().internalId() ) )
 		return;
-	
+
 	m_pendingFileTransfers.remove( transfer->info().internalId() );
-	
+
+	// FIXME to check
 	//Create directory if it doesn't already exist
 	QDir dir;
 	QString path = QFileInfo( fileName ).dirPath();
@@ -1380,31 +1535,31 @@
 	{
 		if( !dir.exists( path.section( '/', 0, i ) ) )
 		{
-			dir.mkdir( path.section( '/', 0, i) );
-		}		
+				dir.mkdir( path.section( '/', 0, i) );
+		}
 	}
-	
-	m_session->receiveFile( transfer->info().transferId(), transfer->info().contact()->contactId(), transfer->info().internalId(), fileName );	
+
+	m_session->receiveFile( transfer->info().transferId(), transfer->info().contact()->contactId(), transfer->info().internalId(), fileName );
 	m_fileTransfers.insert( transfer->info().transferId(), transfer );
 	QObject::connect( transfer, SIGNAL(result( KIO::Job * )), this, SLOT(slotFileTransferResult( KIO::Job * )) );
-	
+
 	if( m_pendingFileTransfers.empty() )
 	{
 		QObject::disconnect( Kopete::TransferManager::transferManager(), SIGNAL( accepted( Kopete::Transfer *, const QString& ) ),
 							this, SLOT( slotReceiveFileAccepted( Kopete::Transfer *, const QString& ) ) );
 		QObject::disconnect( Kopete::TransferManager::transferManager(), SIGNAL( refused(const Kopete::FileTransferInfo& ) ),
 						this, SLOT( slotReceiveFileRefused( const Kopete::FileTransferInfo& ) ) );
-	}	
+	}
 }
 
 void YahooAccount::slotReceiveFileRefused( const Kopete::FileTransferInfo& info )
-{		
+{
 	if( !m_pendingFileTransfers.contains( info.internalId() ) )
 		return;
-	
+
 	m_pendingFileTransfers.remove( info.internalId() );
 	m_session->rejectFile( info.contact()->contactId(), info.internalId() );
-	
+
 	if( m_pendingFileTransfers.empty() )
 	{
 		QObject::disconnect( Kopete::TransferManager::transferManager(), SIGNAL( accepted( Kopete::Transfer *, const QString& ) ),
@@ -1416,44 +1571,44 @@
 
 void YahooAccount::slotFileTransferBytesProcessed( unsigned int transferId, unsigned int bytes )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Transfer: " << transferId << " Bytes:" << bytes << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << "Transfer: " << transferId << " Bytes:" << bytes << endl;
 	Kopete::Transfer *t = m_fileTransfers[transferId];
 	if( !t )
 		return;
-	
+
 	t->slotProcessed( bytes );
 }
 
 void YahooAccount::slotFileTransferComplete( unsigned int transferId )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	Kopete::Transfer *t = m_fileTransfers[transferId];
 	if( !t )
 		return;
-	
+
 	t->slotComplete();
 	m_fileTransfers.remove( transferId );
 }
 
 void YahooAccount::slotFileTransferError( unsigned int transferId, int error, const QString &desc )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	Kopete::Transfer *t = m_fileTransfers[transferId];
 	if( !t )
 		return;
-	
+
 	t->slotError( error, desc );
 	m_fileTransfers.remove( transferId );
 }
 
 void YahooAccount::slotFileTransferResult( KIO::Job *job )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	const Kopete::Transfer *t = dynamic_cast< const Kopete::Transfer * >( job );
-	
+
 	if( !t )
 		return;
-	
+
 	if( t->error() == KIO::ERR_USER_CANCELED )
 	{
 		m_session->cancelFileTransfer( t->info().transferId() );
@@ -1463,12 +1618,12 @@
 
 void YahooAccount::slotContactAdded( const QString & /* myid */, const QString & /* who */, const QString & /* msg */ )
 {
-//	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << myid << " " << who << " " << msg << endl;
+//	kdDebug(YAHOO_GEN_DEBUG) << myid << " " << who << " " << msg;
 }
 
 void YahooAccount::slotRejected( const QString & /* who */, const QString & /* msg */ )
 {
-//	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+//	kdDebug(YAHOO_GEN_DEBUG) ;
 }
 
 void YahooAccount::slotTypingNotify( const QString &who, int what )
@@ -1478,53 +1633,56 @@
 
 void YahooAccount::slotGameNotify( const QString & /* who */, int /* stat */ )
 {
-//	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+//	kdDebug(YAHOO_GEN_DEBUG) ;
 }
 
-void YahooAccount::slotMailNotify( const QString& from, const QString& /* subject */, int cnt )
+void YahooAccount::slotMailNotify( const QString& from, const QString&  subject , int cnt )
 {
-//	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Mail count: " << cnt << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << "Mail count: " << cnt << endl;
 
-	if ( cnt > m_currentMailCount && from.isEmpty() )
+	if ( cnt > 0 && from.isEmpty() )
 	{
-		QObject::connect(KNotification::event( "yahoo_mail", i18n( "You have one unread message in your Yahoo inbox.",
-			"You have %n unread messages in your Yahoo inbox.", cnt ), 0 , 0 , i18n( "Open Inbox..." ) ),
-		                 SIGNAL(activated(unsigned int ) ) , this, SLOT( slotOpenInbox() ) );
+		QObject::connect(KNotification::event( QString::fromLatin1("yahoo_mail"), i18n( "You have one unread message in your Yahoo inbox.",
+			"You have %n unread messages in your Yahoo inbox.", cnt ), QPixmap() , 0 ),
+			SIGNAL(activated(unsigned int ) ) , this, SLOT( slotOpenInbox() ) );
+
 		m_currentMailCount = cnt;
 	}
-	else if ( cnt > m_currentMailCount )
-	{	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "attempting to trigger event" << endl;
-		QObject::connect(KNotification::event( "yahoo_mail", i18n( "You have a message from %1 in your Yahoo inbox.").arg(from) 
-			, 0 , 0 , i18n( "Open Inbox..." ) ), SIGNAL(activated(unsigned int ) ) , this, SLOT( slotOpenInbox() ) );
+	else if ( cnt > 0 )
+	{	kdDebug(YAHOO_GEN_DEBUG) << "attempting to trigger event" << endl;
+
+		QObject::connect(KNotification::event( QString::fromLatin1("yahoo_mail"), i18n( "You have a message from %1 in your Yahoo inbox. <br><br>Subject: %2").arg( from ).arg( subject ),
+			QPixmap() , 0 ), SIGNAL(activated(unsigned int ) ) , this, SLOT( slotOpenInbox() ) );
+
 		m_currentMailCount = cnt;
 	}
 }
 
 void YahooAccount::slotSystemMessage( const QString & /* msg */ )
 {
-//	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << msg << endl;
+//	kdDebug(YAHOO_GEN_DEBUG) << msg;
 }
 
 void YahooAccount::slotRemoveHandler( int /* fd */ )
 {
-//	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+//	kdDebug(YAHOO_GEN_DEBUG) ;
 }
 
 void YahooAccount::slotGotWebcamInvite( const QString& who )
 {
 	YahooContact* kc = contact( who );
 	if ( kc == NULL ) {
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "contact " << who << " doesn't exist." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "contact " << who << " doesn't exist." << endl;
 		return;
 	}
-	
+
 	if( m_pendingWebcamInvites.contains( who ) )
 		return;
-	
+
 	m_pendingWebcamInvites.append( who );
-	
-	if( KMessageBox::Yes == KMessageBox::questionYesNo( Kopete::UI::Global::mainWidget(), i18n("%1 has invited you to view his/her webcam. Accept?")
-							.arg(who), QString::null, i18n("Accept"), i18n("Ignore") ) )
+
+	if( KMessageBox::Yes == KMessageBox::questionYesNo( Kopete::UI::Global::mainWidget(), i18n("%1 has invited you to view his/her webcam. Accept?").arg( who ),
+                            QString(), i18n("Accept"), i18n("Ignore") ) )
 	{
 		m_pendingWebcamInvites.remove( who );
 		m_session->requestWebcam( who );
@@ -1532,42 +1690,42 @@
 }
 void YahooAccount::slotWebcamNotAvailable( const QString &who )
 {
-	KMessageBox::sorry( Kopete::UI::Global::mainWidget(), i18n("Webcam for %1 is not available.").arg(who), i18n( "Yahoo Plugin" ) );
+	KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, i18n("Webcam for %1 is not available.").arg(who), i18n( "Yahoo Plugin" ) );
 }
 
 void YahooAccount::slotGotWebcamImage( const QString& who, const QPixmap& image )
 {
 	YahooContact* kc = contact( who );
 	if ( kc == NULL ) {
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "contact " << who << " doesn't exist." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "contact " << who << " doesn't exist." << endl;
 		return;
 	}
 	kc->receivedWebcamImage( image );
 }
 
-void YahooAccount::slotPictureStatusNotiy( const QString &who, int status)
+void YahooAccount::slotPictureStatusNotify( const QString &who, int status)
 {
 	YahooContact *kc = contact( who );
 	if ( kc == NULL ) {
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "contact " << who << " doesn't exist." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "contact " << who << " doesn't exist." << endl;
 		return;
 	}
-	
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "contact " << who << " changed picture status to" << status << endl;
+
+	kdDebug(YAHOO_GEN_DEBUG) << "contact " << who << " changed picture status to" << status << endl;
 }
 
 void YahooAccount::slotGotBuddyIconChecksum(const QString &who, int checksum)
 {
 	YahooContact *kc = contact( who );
 	if ( kc == NULL ) {
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "contact " << who << " doesn't exist." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "contact " << who << " doesn't exist." << endl;
 		return;
 	}
 
 	if ( checksum == kc->property( YahooProtocol::protocol()->iconCheckSum ).value().toInt() &&
 	     QFile::exists( locateLocal( "appdata", "yahoopictures/"+ who.lower().replace(QRegExp("[./~]"),"-")  +".png" ) ) )
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Icon already exists. I will not request it again." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "Icon already exists. I will not request it again." << endl;
 		return;
 	} else
 		m_session->requestPicture( who );
@@ -1575,57 +1733,51 @@
 
 void YahooAccount::slotGotBuddyIconInfo(const QString &who, KURL url, int checksum)
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	YahooContact *kc = contact( who );
 	if ( kc == NULL ) {
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "contact " << who << " doesn't exist." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "contact " << who << " doesn't exist." << endl;
 		return;
 	}
 
 	if ( checksum == kc->property( YahooProtocol::protocol()->iconCheckSum ).value().toInt()  &&
 	     QFile::exists( locateLocal( "appdata", "yahoopictures/"+ who.lower().replace(QRegExp("[./~]"),"-")  +".png" ) ))
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Icon already exists. I will not download it again." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "Icon already exists. I will not download it again." << endl;
 		return;
 	} else
 		m_session->downloadPicture( who, url, checksum );
 }
 
-void YahooAccount::slotGotBuddyIcon( const QString &who, KTempFile *file, int checksum )
+void YahooAccount::slotGotBuddyIcon( const QString &who, const QByteArray &data, int checksum )
 {
 	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	YahooContact *kc = contact( who );
 	if ( kc == NULL ) {
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "contact " << who << " doesn't exist." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "contact " << who << " doesn't exist." << endl;
 		return;
 	}
-	kc->setDisplayPicture( file, checksum );
+	kc->setDisplayPicture( data, checksum );
 }
 void YahooAccount::slotGotBuddyIconRequest( const QString & who )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	YahooContact *kc = contact( who );
-	if ( kc == NULL ) {
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "contact " << who << " doesn't exist." << endl;
-		return;
-	}
-	kc->sendBuddyIconInfo( myself()->property( YahooProtocol::protocol()->iconRemoteUrl ).value().toString(),
-							myself()->property( YahooProtocol::protocol()->iconCheckSum ).value().toInt() );
+	kdDebug(YAHOO_GEN_DEBUG) ;
+	m_session->sendPictureInformation( who, myself()->property( YahooProtocol::protocol()->iconRemoteUrl ).value().toString(),
+	                                   myself()->property( YahooProtocol::protocol()->iconCheckSum ).value().toInt() );
 }
 
-void YahooAccount::setBuddyIcon( KURL url )
+void YahooAccount::setBuddyIcon( const KURL &url )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Url: " << url.path() << endl;
+	kdDebug(YAHOO_GEN_DEBUG) << "Url: " << url.path() << endl;
 	QString s = url.path();
 	if ( url.path().isEmpty() )
 	{
 		myself()->removeProperty( Kopete::Global::Properties::self()->photo() );
 		myself()->removeProperty( YahooProtocol::protocol()->iconRemoteUrl );
 		myself()->removeProperty( YahooProtocol::protocol()->iconExpire );
-		myself()->removeProperty( YahooProtocol::protocol()->iconCheckSum );
-		m_session->setPictureFlag( 0 );
-		
-		slotBuddyIconChanged( QString::null );
+
+		if ( m_session )
+			m_session->setPictureStatus( Yahoo::NoPicture );
 	}
 	else
 	{
@@ -1634,9 +1786,9 @@
 		QFile iconFile( newlocation );
 		QByteArray data;
 		uint expire = myself()->property( YahooProtocol::protocol()->iconExpire ).value().toInt();
-		
+
 		if ( image.isNull() ) {
-			KMessageBox::sorry( Kopete::UI::Global::mainWidget(), i18n( "<qt>The selected buddy icon could not be opened. <br>Please set a new buddy icon.</qt>" ), i18n( "Yahoo Plugin" ) );
+			KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, i18n( "<qt>The selected buddy icon could not be opened. <br />Please set a new buddy icon.</qt>" ), i18n( "Yahoo Plugin" ) );
 			return;
 		}
 		image = image.smoothScale( 96, 96, QImage::ScaleMin );
@@ -1651,13 +1803,13 @@
 
 		if( !image.save( newlocation, "PNG" ) || !iconFile.open(IO_ReadOnly) )
 		{
-			KMessageBox::sorry( Kopete::UI::Global::mainWidget(), i18n( "An error occurred when trying to change the display picture." ), i18n( "Yahoo Plugin" ) );
+			KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, i18n( "An error occurred when trying to change the display picture." ), i18n( "Yahoo Plugin" ) );
 			return;
 		}
-		
+
 		data = iconFile.readAll();
 		iconFile.close();
-		
+
 		// create checksum - taken from qhash.cpp of qt4
 		const uchar *p = reinterpret_cast<const uchar *>(data.data());
 		int n = data.size();
@@ -1670,59 +1822,53 @@
 				checksum ^= g >> 23;
 			checksum &= ~g;
 		}
-		
+
 		myself()->setProperty( Kopete::Global::Properties::self()->photo() , newlocation );
 		configGroup()->writeEntry( "iconLocalUrl", newlocation );
-		
+
 		if ( checksum != static_cast<uint>(myself()->property( YahooProtocol::protocol()->iconCheckSum ).value().toInt()) ||
 		     QDateTime::currentDateTime().toTime_t() > expire )
 		{
 			myself()->setProperty( YahooProtocol::protocol()->iconCheckSum, checksum );
-			myself()->setProperty( YahooProtocol::protocol()->iconExpire , QDateTime::currentDateTime().toTime_t() + 604800 );
 			configGroup()->writeEntry( "iconCheckSum", checksum );
-			configGroup()->writeEntry( "iconExpire", myself()->property( YahooProtocol::protocol()->iconExpire ).value().toInt() );
 			if ( m_session != 0 )
 				m_session->uploadPicture( newlocation );
 		}
 	}
 }
 
-void YahooAccount::slotBuddyIconChanged( const QString &url )
+void YahooAccount::slotBuddyIconChanged( const QString &url, int expires )
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	QDictIterator<Kopete::Contact> it( contacts() );
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	int checksum = myself()->property( YahooProtocol::protocol()->iconCheckSum ).value().toInt();
 
-	if ( url.isEmpty() )	// remove pictures from buddie's clients
-	{
-		checksum = 0;	
-		m_session->setPictureFlag( 0 );
-	}
-	else
+	if( !url.isEmpty() )
 	{
 		myself()->setProperty( YahooProtocol::protocol()->iconRemoteUrl, url );
+		myself()->setProperty( YahooProtocol::protocol()->iconExpire , expires );
 		configGroup()->writeEntry( "iconRemoteUrl", url );
-		m_session->setPictureFlag( 2 );
-		m_session->sendPictureChecksum( checksum, QString::null );
+		configGroup()->writeEntry( "iconExpire", expires );
+		m_session->setPictureStatus( Yahoo::Picture );
+		m_session->sendPictureChecksum( QString(), checksum );
 	}
 }
 
 void YahooAccount::slotWebcamReadyForTransmission()
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
+	kdDebug(YAHOO_GEN_DEBUG) ;
 	if( !m_webcam )
 	{
 		m_webcam = new YahooWebcam( this );
 		QObject::connect( m_webcam, SIGNAL(webcamClosing()), this, SLOT(slotOutgoingWebcamClosing()) );
 	}
-	
+
 	m_webcam->startTransmission();
 }
 
 void YahooAccount::slotWebcamStopTransmission()
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	
+	kdDebug(YAHOO_GEN_DEBUG) ;
+
 	if( m_webcam )
 	{
 		m_webcam->stopTransmission();
@@ -1747,7 +1893,7 @@
 void YahooAccount::slotWebcamViewerRequest( const QString &viewer )
 {
 	if( KMessageBox::Yes == KMessageBox::questionYesNo( Kopete::UI::Global::mainWidget(), i18n("%1 wants to view your webcam. Grant access?")
-		.arg(viewer), QString::null, i18n("Accept"), i18n("Ignore") ) )	
+		.arg(viewer), QString::null, i18n("Accept"), i18n("Ignore") ) )
 		m_session->grantWebcamAccess( viewer );
 }
 
@@ -1763,7 +1909,7 @@
 {
 	YahooContact* kc = contact( who );
 	if ( kc == NULL ) {
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "contact " << who << " doesn't exist." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "contact " << who << " doesn't exist." << endl;
 		return;
 	}
 	kc->webcamClosed( reason );
@@ -1773,16 +1919,16 @@
 {
 	YahooContact* kc = contact( who );
 	if ( kc == NULL ) {
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "contact " << who << " doesn't exist." << endl;
+		kdDebug(YAHOO_GEN_DEBUG) << "contact " << who << " doesn't exist." << endl;
 		return;
 	}
 	kc->webcamPaused();
 }
 
-void YahooAccount::setOnlineStatus( const Kopete::OnlineStatus& status , const QString &reason)
+void YahooAccount::setOnlineStatus( const Kopete::OnlineStatus &status, const QString &reason)
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	if ( myself()->onlineStatus().status() == Kopete::OnlineStatus::Offline && 
+	kdDebug(YAHOO_GEN_DEBUG) ;
+	if ( myself()->onlineStatus().status() == Kopete::OnlineStatus::Offline &&
 	     status.status() != Kopete::OnlineStatus::Offline )
 	{
 		if( !reason.isEmpty() )
@@ -1810,6 +1956,16 @@
 	}
 }
 
+/* FIXME: not ported yet
+void YahooAccount::setStatusMessage(const Kopete::StatusMessage &statusMessage)
+{
+	int currentStatus = myself()->onlineStatus().internalStatus();
+	m_session->changeStatus( Yahoo::Status( currentStatus ), statusMessage.message(),
+	                         (currentStatus == Yahoo::StatusAvailable)? Yahoo::StatusTypeAvailable : Yahoo::StatusTypeAway );
+	myself()->setStatusMessage( statusMessage );
+}
+*/
+
 void YahooAccount::slotOpenInbox()
 {
 	KRun::runURL( KURL( QString::fromLatin1("http://mail.yahoo.com/") ) , "text/html" );
@@ -1825,6 +1981,164 @@
 	myself()->slotUserInfo();
 }
 
+// FIXME: not ported yet
+void YahooAccount::slotJoinChatRoom()
+{
+}
+/*
+	YahooChatSelectorDialog *chatDialog = new YahooChatSelectorDialog( Kopete::UI::Global::mainWidget() );
+
+	QObject::connect( m_session, SIGNAL(gotYahooChatCategories( const QDomDocument & )), chatDialog,
+					SLOT(slotSetChatCategories( const QDomDocument & )) );
+	QObject::connect( m_session, SIGNAL(gotYahooChatRooms( const Yahoo::ChatCategory &, const QDomDocument & )),
+					chatDialog, SLOT(slotSetChatRooms( const Yahoo::ChatCategory &, const QDomDocument & )) );
+	QObject::connect( chatDialog, SIGNAL(chatCategorySelected( const Yahoo::ChatCategory & )),
+					this, SLOT(slotChatCategorySelected( const Yahoo::ChatCategory & ) ) );
+	m_session->getYahooChatCategories();
+
+	if( chatDialog->exec() == QDialog::Accepted )
+	{
+		kdDebug() << chatDialog->selectedRoom().topic << " " << chatDialog->selectedRoom().topic << " " << chatDialog->selectedRoom().id << endl;
+		m_session->joinYahooChatRoom( chatDialog->selectedRoom() );
+	}
+
+	chatDialog->deleteLater();
+}
+*/
+
+void YahooAccount::slotLeavChat()
+{
+	m_chatChatSession = 0;
+	m_session->leaveChat();
+}
+
+void YahooAccount::slotChatCategorySelected( const Yahoo::ChatCategory &category )
+{
+	m_session->getYahooChatRooms( category );
+}
+
+// FIXME: not ported yet
+void YahooAccount::slotChatJoined( int roomId, int categoryId, const QString &comment, const QString &handle )
+{
+}
+/*
+	Kopete::ContactPtrList others;
+	others.append(myself());
+
+	if( !m_chatChatSession )
+	{
+		m_chatChatSession = new YahooChatChatSession( protocol(), myself(), others );
+		QObject::connect( m_chatChatSession, SIGNAL(closing(Kopete::ChatSession *)), this,
+					SLOT(slotLeavChat()) );
+	}
+	m_chatChatSession->removeAllContacts();
+	m_chatChatSession->setHandle( handle );
+	m_chatChatSession->setTopic( handle );
+
+	m_chatChatSession->view( true )->raise( false );
+
+	Kopete::Message msg( myself(), m_chatChatSession->members() );
+	msg.setHtmlBody( i18n("You are now in %1 (%2)", handle, comment) );
+	msg.setDirection( Kopete::Message::Internal );
+
+	m_chatChatSession->appendMessage( msg );
+}
+*/
+
+// FIXME: not ported yet
+void YahooAccount::slotChatBuddyHasJoined( const QString &nick, const QString &handle, bool suppressNotification )
+{
+}
+/*
+	if(!m_chatChatSession)
+		return;
+
+	if( !m_chatChatSession->handle().startsWith( handle ) )
+		return;
+
+	YahooContact *c = contact( nick );
+	if ( !c )
+	{
+		kdDebug(YAHOO_GEN_DEBUG) << "Adding contact " << nick << " to chat." << endl;
+// 		addContact( nick, nick, 0, Kopete::Account::Temporary );
+		if( !createChatContact( nick ) )
+			return;
+		c = contact( nick );
+		c->setOnlineStatus( m_protocol->Online );
+	}
+	m_chatChatSession->joined( c, suppressNotification );
+}
+*/
+
+// FIXME: not ported yet
+void YahooAccount::slotChatBuddyHasLeft( const QString &nick, const QString &handle )
+{
+}
+/*
+	kdDebug(YAHOO_GEN_DEBUG) ;
+
+	if(!m_chatChatSession)
+		return;
+
+	if( !m_chatChatSession->handle().startsWith( handle ) )
+		return;
+
+	YahooContact *c = contact( nick );
+	if( !c )
+		return;
+	m_chatChatSession->left( c );
+}
+*/
+
+// FIXME: not ported yet
+void YahooAccount::slotChatMessageReceived( const QString &nick, const QString &message, const QString &handle )
+{
+}
+/*
+	if(!m_chatChatSession)
+		return;
+
+	if( !m_chatChatSession->handle().startsWith( handle ) )
+		return;
+
+	QFont msgFont;
+	QDateTime msgDT;
+	Kopete::ContactPtrList justMe;
+
+	if( !contact( nick ) )
+	{
+		kdDebug(YAHOO_GEN_DEBUG) << "Adding contact " << nick << endl;
+		addContact( nick, nick, 0, Kopete::Account::DontChangeKABC );
+		if( !createChatContact( nick ) )
+			return;
+	}
+	kdDebug(YAHOO_GEN_DEBUG) << "Original message is '" << message << "'" << endl;
+
+	QColor fgColor = getMsgColor( message );
+	msgDT.setTime_t(time(0L));
+
+	QString newMsgText = prepareIncomingMessage( message );
+
+	kdDebug(YAHOO_GEN_DEBUG) << "Message after fixing font tags '" << newMsgText << "'" << endl;
+
+	justMe.append(myself());
+
+	Kopete::Message kmsg( contact(nick), justMe );
+	kmsg.setTimestamp( msgDT );
+	kmsg.setHtmlBody( newMsgText );
+	kmsg.setDirection( Kopete::Message::Inbound );
+
+	kmsg.setForegroundColor( fgColor );
+	m_chatChatSession->appendMessage(kmsg);
+}
+*/
+
+void YahooAccount::sendChatMessage( const Kopete::Message &msg, const QString &handle )
+{
+	m_session->sendYahooChatMessage( YahooContact::prepareMessage( msg.escapedBody() ), handle );
+}
+
+
 #include "yahooaccount.moc"
 
 // vim: set noet ts=4 sts=4 sw=4:
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/yahooaccount.h kdenetwork-3.5.10/kopete/protocols/yahoo/yahooaccount.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/yahooaccount.h	2010-01-21 13:32:46.801489314 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/yahooaccount.h	2010-01-21 13:27:59.000000000 +0200
@@ -3,7 +3,8 @@
 
     Copyright (c) 2003 by Gav Wood               <gav@kde.org>
     Copyright (c) 2003 by Matt Rogers            <mattrogers@sbcglobal.net>
-    Based on code by Olivier Goffart             <ogoffart @ kde.org>
+    Based on code by Olivier Goffart             <ogoffart@kde.org>
+
     Kopete    (c) 2003 by the Kopete developers  <kopete-devel@kde.org>
 
     *************************************************************************
@@ -17,16 +18,20 @@
 */
 
 
-#ifndef YAHOOIDENTITY_H
-#define YAHOOIDENTITY_H
+#ifndef YAHOOACCOUNT_H
+#define YAHOOACCOUNT_H
 
 // Qt
 #include <qobject.h>
 #include <qmap.h>
+#include <qpixmap.h>
+#include <qpair.h>
+
+// KDE
+#include <kurl.h>
 
 // Kopete
 #include "kopetepasswordedaccount.h"
-#include "kopeteawaydialog.h"
 
 // Local
 #include "yahooprotocol.h"
@@ -40,27 +45,21 @@
 class YahooProtocol;
 class YahooWebcam;
 class YahooConferenceChatSession;
-class KTempFile;
-struct KURL;
+class YahooChatChatSession;
+class KTemporaryFile;
+
 namespace Kopete{
 class Transfer;
 class ChatSession;
+class StatusMessage;
 class FileTransferInfo;
 }
 class Client;
-class YABEntry;
+struct YABEntry;
+class KJob;
 namespace KIO{
 	class Job;
 }
-class YahooAwayDialog : public KopeteAwayDialog
-{
-public:
-	YahooAwayDialog(YahooAccount *account, QWidget *parent = 0, const char *name = 0);
-	virtual void setAway(int awayType);
-
-private:
-	YahooAccount *theAccount;
-};
 
 class YahooAccount : public Kopete::PasswordedAccount
 {
@@ -70,7 +69,7 @@
 
 	enum SignalConnectionType { MakeConnections, DeleteConnections };
 
-	YahooAccount(YahooProtocol *parent,const QString& accountID, const char *name = 0L);
+	YahooAccount(YahooProtocol *parent,const QString& accountID, const char *name = 0);
 	~YahooAccount();
 
 	/*
@@ -108,7 +107,7 @@
 	 * Set the pager server
 	 */
 	void setServer( const QString &server );
-	
+
 	/**
 	 * Set the port of the pager server
 	 */
@@ -117,11 +116,12 @@
 	/**
 	 * Set Buddy Icon
 	 */
-	void setBuddyIcon( KURL url );
+	void setBuddyIcon( const KURL &url );
 
 	void verifyAccount( const QString &word );
 
-	void sendConfMessage( YahooConferenceChatSession *s, Kopete::Message &message );
+	void sendConfMessage( YahooConferenceChatSession *s, const Kopete::Message &message );
+	void sendChatMessage( const Kopete::Message &msg, const QString &handle );
 	void prepareConference( const QString &who );
 	void sendFile( YahooContact *to, const KURL &url );
 public slots:
@@ -137,7 +137,6 @@
 	/** Reimplemented from Kopete::Account */
 	void setOnlineStatus( const Kopete::OnlineStatus&, const QString &reason = QString::null);
 
-
 signals:
 	/**
 	 * Emitted when we receive notification that the person we're talking to is typing
@@ -155,6 +154,8 @@
 	 */
 	virtual bool createContact(const QString &contactId,  Kopete::MetaContact *parentContact);
 
+	virtual bool createChatContact( const QString &nick );
+
 	/**
 	 * Gets the just-received message color
 	 */
@@ -171,19 +172,25 @@
 	void slotOpenInbox();			// Open Yahoo Mailbox in browser
 	void slotOpenYAB();			// Open Yahoo Addressbook in browser
 	void slotEditOwnYABEntry();		// Show own Yahoo Addressbook entry
+	void slotJoinChatRoom();
+	void slotChatCategorySelected( const Yahoo::ChatCategory &category );
 
-	void slotGoStatus(int status, const QString &awayMessage = QString::null);
+	void slotGoStatus(int status, const QString &awayMessage = QString());
 	void slotLoginResponse(int succ, const QString &url);
 	void slotDisconnected();
 	void slotLoginFailed();
 	void slotGotBuddy(const QString &userid, const QString &alias, const QString &group);
+	void slotBuddyAddResult(const QString &userid, const QString &group, bool success);
+	void slotBuddyRemoveResult(const QString &userid, const QString &group, bool success);
+	void slotBuddyChangeGroupResult(const QString &userid, const QString &group, bool success);
 	void slotAuthorizationAccepted( const QString &who );
 	void slotAuthorizationRejected( const QString &who, const QString &msg );
 	void slotgotAuthorizationRequest( const QString &, const QString &, const QString & );
-	void slotContactAddedNotifyDialogClosed( const QString & );
+	void slotContactAddedNotifyDialogClosed( const QString &user );
+	//void slotAddedInfoEventActionActivated( uint actionId );
 	void slotGotIgnore(const QStringList &);
 	void slotGotIdentities(const QStringList &);
-	void slotStatusChanged(const QString &who, int stat, const QString &msg, int away, int idle);
+	void slotStatusChanged(const QString &who, int stat, const QString &msg, int away, int idle, int pictureChecksum);
 	void slotStealthStatusChanged(const QString &who, Yahoo::StealthStatus state);
 	void slotGotIm(const QString &who, const QString &msg, long tm, int stat);
 	void slotGotBuzz(const QString &who, long tm);
@@ -195,7 +202,7 @@
 	void slotConfLeave( YahooConferenceChatSession *s );
 	void slotInviteConference( const QString &room, const QStringList &who, const QStringList &members, const QString &msg );
 	void slotAddInviteConference( const QString &room, const QStringList &who, const QStringList &members, const QString &msg );
-	void slotGotFile(const QString &who, const QString &url, long expires, const QString &msg, const QString &fname, unsigned long fesize);
+	void slotGotFile(const QString &who, const QString &url, long expires, const QString &msg, const QString &fname, unsigned long fesize, const QPixmap &);
 	void slotContactAdded(const QString &myid, const QString &who, const QString &msg);
 	void slotRejected(const QString &, const QString &);
 	void slotTypingNotify(const QString &, int );
@@ -215,16 +222,21 @@
 	void slotWebcamViewerJoined( const QString & );
 	void slotWebcamViewerLeft( const QString & );
 	void slotWebcamViewerRequest( const QString & );
-	void slotPictureStatusNotiy( const QString&, int);
-	void slotGotBuddyIcon(const QString&, KTempFile*, int);
+	void slotPictureStatusNotify( const QString&, int);
+	void slotGotBuddyIcon(const QString&, const QByteArray&, int);
 	void slotGotBuddyIconInfo(const QString&, KURL, int);
 	void slotGotBuddyIconChecksum(const QString&, int);
 	void slotGotBuddyIconRequest(const QString &);
-	void slotBuddyIconChanged(const QString&);
+	void slotBuddyIconChanged(const QString&, int);
 	void slotGotYABEntry( YABEntry *entry );
 	void slotGotYABRevision( long revision, bool merged );
 	void slotSaveYABEntry( YABEntry &entry );
 	void slotModifyYABEntryError( YABEntry *entry, const QString & );
+	void slotChatJoined( int roomId, int categoryId, const QString &comment, const QString &handle );
+	void slotChatBuddyHasJoined( const QString &nick, const QString &handle, bool suppressNotification );
+	void slotChatBuddyHasLeft( const QString &nick, const QString &handle );
+	void slotChatMessageReceived( const QString &nick, const QString &message, const QString &handle );
+	void slotLeavChat();
 
 	void slotReceiveFileAccepted( Kopete::Transfer *trans, const QString& fileName );
 	void slotReceiveFileRefused( const Kopete::FileTransferInfo& info );
@@ -234,11 +246,6 @@
 	void slotFileTransferResult( KIO::Job * );
 	void slotError( int level );
 
-private slots:
-	/**
-	 * When a global identity key get changed.
-	 */
-	void slotGlobalIdentityChanged( const QString &key, const QVariant &value );
 private:
 
 	/**
@@ -246,6 +253,8 @@
 	 */
 	void initConnectionSignals( enum SignalConnectionType sct );
 
+	void setupActions( bool connected );
+
 	QString prepareIncomingMessage( const QString &msg );
 
 	/**
@@ -258,6 +267,7 @@
 	 * Conferences list, maped by room name (id)
 	 */
 	QMap<QString, YahooConferenceChatSession *> m_conferences;
+	YahooChatChatSession * m_chatChatSession;
 	QStringList m_pendingConfInvites;
 	QStringList m_pendingWebcamInvites;
 	QStringList m_pendingFileTransfers;
@@ -281,15 +291,12 @@
 
 	YahooWebcam *m_webcam;
 
-	YahooAwayDialog *theAwayDialog;	// Our away message dialog
-
 	KAction *m_openInboxAction;	// Menu item openInbox
 	KAction *m_openYABAction;	// Menu item openYahooAddressbook
 	KAction *m_editOwnYABEntry;	// Menu item editOwnYABEntry
-	
+	KAction *m_joinChatAction;	// Menu item joinChatAction
+
 	Client *m_session;		// The Connection object
 };
 
-
-#endif
-
+#endif // YAHOOACCOUNT_H
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/yahoocontact.cpp kdenetwork-3.5.10/kopete/protocols/yahoo/yahoocontact.cpp
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/yahoocontact.cpp	2010-01-21 13:32:46.801489314 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/yahoocontact.cpp	2010-01-19 03:05:17.000000000 +0200
@@ -79,10 +79,10 @@
 	setNickName( fullName );
 	setOnlineStatus( static_cast<YahooProtocol*>( m_account->protocol() )->Offline );
 	setFileCapable( true );
-	
+
 	if ( m_account->haveContactList() )
 		syncToServer();
-	
+
 	m_webcamDialog = 0L;
 	m_webcamAction = 0L;
 	m_stealthAction = 0L;
@@ -108,7 +108,7 @@
 {
 	if( m_stealthed && status.internalStatus() <= 999)	// Not Stealted -> Stealthed
 	{
-		Contact::setOnlineStatus( 
+		Contact::setOnlineStatus(
 			Kopete::OnlineStatus(status.status() ,
 			(status.weight()==0) ? 0 : (status.weight() -1)  ,
 			protocol() ,
@@ -120,8 +120,8 @@
 		Contact::setOnlineStatus( static_cast< YahooProtocol *>( protocol() )->statusFromYahoo( status.internalStatus() - 1000 ) );
 	else
 		Contact::setOnlineStatus( status );
-	
-	if( status.status() == Kopete::OnlineStatus::Offline ) 
+
+	if( status.status() == Kopete::OnlineStatus::Offline )
 		removeProperty( ((YahooProtocol*)(m_account->protocol()))->awayMessage);
 }
 
@@ -217,14 +217,14 @@
 }
 
 QString YahooContact::prepareMessage( const QString &messageText )
-{	
+{
 	// Yahoo does not understand XML/HTML message data, so send plain text
 	// instead.  (Yahoo has its own format for "rich text".)
 	QString newMsg( messageText );
 	QRegExp regExp;
 	int pos = 0;
 	regExp.setMinimal( true );
-	
+
 	// find and replace Bold-formattings
 	regExp.setPattern( "<span([^>]*)font-weight:600([^>]*)>(.*)</span>" );
 	pos = 0;
@@ -235,7 +235,7 @@
 		newMsg.replace( regExp, QString::fromLatin1("<span\\1font-weight:600\\2>\033[1m\\3\033[x1m</span>" ) );
 		}
 	}
-	
+
 	// find and replace Underline-formattings
 	regExp.setPattern( "<span([^>]*)text-decoration:underline([^>]*)>(.*)</span>" );
 	pos = 0;
@@ -246,7 +246,7 @@
 		newMsg.replace( regExp, QString::fromLatin1("<span\\1text-decoration:underline\\2>\033[4m\\3\033[x4m</span>" ) );
 		}
 	}
-	
+
 	// find and replace Italic-formattings
 	regExp.setPattern( "<span([^>]*)font-style:italic([^>]*)>(.*)</span>" );
 	pos = 0;
@@ -257,7 +257,7 @@
 		newMsg.replace( regExp, QString::fromLatin1("<span\\1font-style:italic\\2>\033[2m\\3\033[x2m</span>" ) );
 		}
 	}
-	
+
 	// find and replace Color-formattings
 	regExp.setPattern( "<span([^>]*)color:#([0-9a-zA-Z]*)([^>]*)>(.*)</span>" );
 	pos = 0;
@@ -268,7 +268,7 @@
 			newMsg.replace( regExp, QString::fromLatin1("<span\\1\\3>\033[#\\2m\\4\033[#000000m</span>" ) );
 		}
 	}
-	
+
 	// find and replace Font-formattings
 	regExp.setPattern( "<span([^>]*)font-family:([^;\"]*)([^>]*)>(.*)</span>" );
 	pos = 0;
@@ -279,7 +279,7 @@
 			newMsg.replace( regExp, QString::fromLatin1("<span\\1\\3><font face=\"\\2\">\\4</span>" ) );
 		}
 	}
-	
+
 	// find and replace Size-formattings
 	regExp.setPattern( "<span([^>]*)font-size:([0-9]*)pt([^>]*)>(.*)</span>" );
 	pos = 0;
@@ -290,7 +290,7 @@
 			newMsg.replace( regExp, QString::fromLatin1("<span\\1\\3><font size=\"\\2\">\\4</span>" ) );
 		}
 	}
-	
+
 	// remove span-tags
 	regExp.setPattern( "<span([^>]*)>(.*)</span>" );
 	pos = 0;
@@ -301,7 +301,7 @@
 			newMsg.replace( regExp, QString::fromLatin1("\\2") );
 		}
 	}
-	
+
 	// convert escaped chars
 	newMsg.replace( QString::fromLatin1( "&gt;" ), QString::fromLatin1( ">" ) );
 	newMsg.replace( QString::fromLatin1( "&lt;" ), QString::fromLatin1( "<" ) );
@@ -310,19 +310,19 @@
 	newMsg.replace( QString::fromLatin1( "&amp;" ), QString::fromLatin1( "&" ) );
 	newMsg.replace( QString::fromLatin1( "<br />" ), QString::fromLatin1( "\r" ) );
 	newMsg.replace( QString::fromLatin1( "<br/>" ), QString::fromLatin1( "\r" ) );
-	
+
 	return newMsg;
 }
 
 void YahooContact::slotSendMessage( Kopete::Message &message )
 {
 	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	
+
 	QString messageText = message.escapedBody();
 	kdDebug(YAHOO_GEN_DEBUG) << "Original message: " << messageText << endl;
 	messageText = prepareMessage( messageText );
 	kdDebug(YAHOO_GEN_DEBUG) << "Converted message: " << messageText << endl;
-	
+
 	Kopete::ContactPtrList m_them = manager(Kopete::Contact::CanCreate)->members();
 	Kopete::Contact *target = m_them.first();
 
@@ -331,9 +331,9 @@
 		m_account->yahooSession()->setChatSessionState( m_userId, false );
 		m_sessionActive = true;
 	}
-	
+
 	m_account->yahooSession()->sendMessage( static_cast<YahooContact *>(target)->m_userId, messageText );
-	
+
 	// append message to window
 	manager(Kopete::Contact::CanCreate)->appendMessage(message);
 	manager(Kopete::Contact::CanCreate)->messageSucceeded();
@@ -341,7 +341,7 @@
 
 void YahooContact::sendFile( const KURL &sourceURL, const QString &fileName, uint fileSize )
 {
-	Kopete::TransferManager::transferManager()->sendFile( sourceURL, fileName, fileSize, 
+	Kopete::TransferManager::transferManager()->sendFile( sourceURL, fileName, fileSize,
 			false, this, SLOT(slotSendFile( const KURL & )) );
 }
 
@@ -374,7 +374,7 @@
 	else
 		m_webcamAction->setEnabled( false );
 	actionCollection->append( m_webcamAction );
-	
+
 	if( !m_inviteWebcamAction )
 	{
 		m_inviteWebcamAction = new KAction( i18n( "Invite to view your Webcam" ), "webcamsend", KShortcut(),
@@ -385,7 +385,7 @@
 	else
 		m_inviteWebcamAction->setEnabled( false );
 	actionCollection->append( m_inviteWebcamAction );
-	
+
 	if ( !m_buzzAction )
 	{
 		m_buzzAction = new KAction( i18n( "&Buzz Contact" ), "bell", KShortcut(), this, SLOT( buzzContact() ), this, "buzz_contact");
@@ -405,7 +405,7 @@
 	else
 		m_stealthAction->setEnabled( false );
 	actionCollection->append( m_stealthAction );
-	
+
 	if ( !m_inviteConferenceAction )
 	{
 		m_inviteConferenceAction = new KAction( i18n( "&Invite to Conference" ), "kontact_contacts", KShortcut(), this, SLOT( inviteConference() ), this, "invite_conference");
@@ -415,16 +415,16 @@
 	else
 		m_inviteConferenceAction->setEnabled( false );
 	actionCollection->append( m_inviteConferenceAction );
-	
+
 	if ( !m_profileAction )
 	{
 		m_profileAction = new KAction( i18n( "&View Yahoo Profile" ), "kontact_notes", KShortcut(), this, SLOT( slotUserProfile() ), this, "profile_contact");
 	}
 	m_profileAction->setEnabled( true );
 	actionCollection->append( m_profileAction );
-	
+
 	return actionCollection;
-	
+
 	//return 0L;
 }
 
@@ -435,7 +435,7 @@
 	{
 		readYABEntry();	// No YABEntry was set, so read the one from contactlist.xml
 	}
-	
+
 	YahooUserInfoDialog *dlg = new YahooUserInfoDialog( this, Kopete::UI::Global::mainWidget(), "yahoo userinfo" );
 	dlg->setData( *m_YABEntry );
 	dlg->setAccountConnected( m_account->isConnected() );
@@ -446,7 +446,7 @@
 void YahooContact::slotUserProfile()
 {
 	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	
+
 	QString profileSiteString = QString::fromLatin1("http://profiles.yahoo.com/") + userId();
 	KRun::runURL( KURL( profileSiteString ) , "text/html" );
 }
@@ -474,21 +474,21 @@
 	}
 	if( stealthed() )
 		stealthWidget->radioPermOffline->setChecked( true );
-		
-	
+
+
 	// Show dialog
 	if ( stealthSettingDialog->exec() == QDialog::Rejected )
-	{	
+	{
 		stealthSettingDialog->delayedDestruct();
 		return;
 	}
-	
+
 	// Apply permanent setting
 	if( stealthed() && !stealthWidget->radioPermOffline->isChecked() )
 		m_account->yahooSession()->stealthContact( m_userId, Yahoo::StealthPermOffline, Yahoo::StealthNotActive );
 	else if( !stealthed() && stealthWidget->radioPermOffline->isChecked() )
 		m_account->yahooSession()->stealthContact( m_userId, Yahoo::StealthPermOffline, Yahoo::StealthActive );
-	
+
 	// Apply temporary setting
 	if( m_account->myself()->onlineStatus() == YahooProtocol::protocol()->Invisible )
 	{
@@ -509,7 +509,7 @@
 {
 	Kopete::ContactPtrList m_them = manager(Kopete::Contact::CanCreate)->members();
 	Kopete::Contact *target = m_them.first();
-	
+
 	m_account->yahooSession()->sendBuzz( static_cast<YahooContact*>(target)->m_userId );
 
 	KopeteView *view = manager(Kopete::Contact::CannotCreate)->view(false);
@@ -526,8 +526,8 @@
 void YahooContact::sendBuddyIconChecksum( int checksum )
 {
 	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	m_account->yahooSession()->sendPictureChecksum( checksum, m_userId );
-	
+	m_account->yahooSession()->sendPictureChecksum( m_userId, checksum );
+
 }
 
 void YahooContact::sendBuddyIconInfo( const QString &url, int checksum )
@@ -539,25 +539,32 @@
 void YahooContact::sendBuddyIconUpdate( int type )
 {
 	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	m_account->yahooSession()->sendPictureStatusUpdate( m_userId, type );
+
+	// FIXME (same)
+	//m_account->yahooSession()->sendPictureStatusUpdate( m_userId, type );
 }
 
-void YahooContact::setDisplayPicture(KTempFile *f, int checksum)
+// new version
+void YahooContact::setDisplayPicture(const QByteArray &data, int checksum)
 {
-	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	if( !f )
-		return;
-	// stolen from msncontact.cpp ;)
-	QString newlocation=locateLocal( "appdata", "yahoopictures/"+ contactId().lower().replace(QRegExp("[./~]"),"-")  +".png"  ) ;
+	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << data.size() << endl;
+
+	QString newlocation = locateLocal( "appdata", "yahoopictures/"+ contactId().lower().replace(QRegExp("[./~]"),"-")  +".png"  ) ;
 	setProperty( YahooProtocol::protocol()->iconCheckSum, checksum );
-	
-	KIO::Job *j=KIO::file_move( KURL::fromPathOrURL( f->name() ) , KURL::fromPathOrURL( newlocation ) , -1, true /*overwrite*/ , false /*resume*/ , false /*showProgressInfo*/ );
-	
-	f->setAutoDelete(false);
-	delete f;
-	
-	//let the time to KIO to copy the file
-	connect(j, SIGNAL(result(KIO::Job *)) , this, SLOT(slotEmitDisplayPictureChanged() ));
+
+	QFile f( newlocation );
+	if (!f.open( IO_WriteOnly ))
+	{
+		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Saving of " << newlocation << " failed!" << endl;
+		return;
+	}
+	f.writeBlock(data.data(), data.size());
+	f.close();
+
+	setProperty( Kopete::Global::Properties::self()->photo(), QString() );
+	setProperty( Kopete::Global::Properties::self()->photo() , newlocation );
+
+	emit displayPictureChanged();
 }
 
 
@@ -566,10 +573,10 @@
 	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << userId() << endl;
 	if( m_YABEntry )
 		delete m_YABEntry;
-	
+
 	m_YABEntry = entry;
 	writeYABEntry();	// Store data in Contact
-	
+
 	if( show )
 		slotUserInfo();
 }
@@ -598,7 +605,7 @@
 {
 	if ( !KStandardDirs::findExe("jasper") )
 	{
-		KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Error, 
+		KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Error,
 			i18n("I cannot find the jasper image convert program.\njasper is required to render the yahoo webcam images."
 			"\nPlease see %1 for further information.").arg("http://wiki.kde.org/tiki-index.php?page=Kopete%20Webcam%20Support") );
 		return;
@@ -628,21 +635,21 @@
 void YahooContact::initWebcamViewer()
 {
 	//KImageIO::registerFormats();
-	
+
 	if ( !m_webcamDialog )
 	{
 		m_webcamDialog = new YahooWebcamDialog( userId(), Kopete::UI::Global::mainWidget() );
 // 		QObject::connect( m_webcamDialog, SIGNAL( closeClicked() ), this, SLOT( closeWebcamDialog() ) );
-	
+
 		QObject::connect( this, SIGNAL( signalWebcamClosed( int ) ),
 		                  m_webcamDialog, SLOT( webcamClosed( int ) ) );
-		
+
 		QObject::connect( this, SIGNAL( signalWebcamPaused() ),
 		                  m_webcamDialog, SLOT( webcamPaused() ) );
-		
+
 		QObject::connect( this, SIGNAL ( signalReceivedWebcamImage( const QPixmap& ) ),
 				m_webcamDialog, SLOT( newImage( const QPixmap& ) ) );
-		
+
 		QObject::connect( m_webcamDialog, SIGNAL ( closingWebcamDialog ( ) ),
 				this, SLOT ( closeWebcamDialog ( ) ) );
 	}
@@ -653,12 +660,12 @@
 {
 	if ( !KStandardDirs::findExe("jasper") )
 	{
-		KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Error, 
+		KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Error,
 			i18n("I cannot find the jasper image convert program.\njasper is required to render the yahoo webcam images."
 			"\nPlease see %1 for further information.").arg("http://wiki.kde.org/tiki-index.php?page=Kopete%20Webcam%20Support") );
 		return;
 	}
-	
+
 	if( !m_webcamDialog )
 		initWebcamViewer();
 	m_account->yahooSession()->requestWebcam( contactId() );
@@ -668,13 +675,13 @@
 {
 	QObject::disconnect( this, SIGNAL( signalWebcamClosed( int ) ),
 	                  m_webcamDialog, SLOT( webcamClosed( int ) ) );
-	
+
 	QObject::disconnect( this, SIGNAL( signalWebcamPaused() ),
 	                  m_webcamDialog, SLOT( webcamPaused( ) ) );
-	
+
 	QObject::disconnect( this, SIGNAL ( signalReceivedWebcamImage( const QPixmap& ) ),
 	                  m_webcamDialog, SLOT( newImage( const QPixmap& ) ) );
-	
+
 	QObject::disconnect( m_webcamDialog, SIGNAL ( closingWebcamDialog ( ) ),
 	                  this, SLOT ( closeWebcamDialog ( ) ) );
 	if( m_receivingWebcam )
@@ -686,10 +693,10 @@
 void YahooContact::deleteContact()
 {
 	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	
+
 	if( !m_account->isOnServer( contactId() ) )
 	{
-		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Contact does not exist on server-side. Not removing..." << endl;		
+		kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Contact does not exist on server-side. Not removing..." << endl;
 	}
 	else
 	{
@@ -699,7 +706,7 @@
 			readYABEntry();
 		if( m_YABEntry->YABId )
 			m_account->yahooSession()->deleteYABEntry( *m_YABEntry );
-		
+
 		// Now remove from the contactlist
 		m_account->yahooSession()->removeBuddy( contactId(), m_groupName );
 	}
@@ -709,19 +716,19 @@
 void YahooContact::writeYABEntry()
 {
 	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
-	
+
 	// Personal
 	setProperty( YahooProtocol::protocol()->propfirstName, m_YABEntry->firstName );
 	setProperty( YahooProtocol::protocol()->propSecondName, m_YABEntry->secondName );
 	setProperty( YahooProtocol::protocol()->propLastName, m_YABEntry->lastName );
 	setProperty( YahooProtocol::protocol()->propNickName, m_YABEntry->nickName );
 	setProperty( YahooProtocol::protocol()->propTitle, m_YABEntry->title );
-	
-	// Primary Information	
+
+	// Primary Information
 	setProperty( YahooProtocol::protocol()->propPhoneMobile, m_YABEntry->phoneMobile );
 	setProperty( YahooProtocol::protocol()->propEmail, m_YABEntry->email );
 	setProperty( YahooProtocol::protocol()->propYABId, m_YABEntry->YABId );
-	
+
 		// Additional Information
 	setProperty( YahooProtocol::protocol()->propPager, m_YABEntry->pager );
 	setProperty( YahooProtocol::protocol()->propFax, m_YABEntry->fax );
@@ -735,7 +742,7 @@
 	setProperty( YahooProtocol::protocol()->propImSkype, m_YABEntry->imSkype );
 	setProperty( YahooProtocol::protocol()->propImIRC, m_YABEntry->imIRC );
 	setProperty( YahooProtocol::protocol()->propImQQ, m_YABEntry->imQQ );
-	
+
 		// Private Information
 	setProperty( YahooProtocol::protocol()->propPrivateAddress, m_YABEntry->privateAdress );
 	setProperty( YahooProtocol::protocol()->propPrivateCity, m_YABEntry->privateCity );
@@ -744,7 +751,7 @@
 	setProperty( YahooProtocol::protocol()->propPrivateCountry, m_YABEntry->privateCountry );
 	setProperty( YahooProtocol::protocol()->propPrivatePhone, m_YABEntry->privatePhone );
 	setProperty( YahooProtocol::protocol()->propPrivateURL, m_YABEntry->privateURL );
-	
+
 		// Work Information
 	setProperty( YahooProtocol::protocol()->propCorporation, m_YABEntry->corporation );
 	setProperty( YahooProtocol::protocol()->propWorkAddress, m_YABEntry->workAdress );
@@ -754,7 +761,7 @@
 	setProperty( YahooProtocol::protocol()->propWorkCountry, m_YABEntry->workCountry );
 	setProperty( YahooProtocol::protocol()->propWorkPhone, m_YABEntry->workPhone );
 	setProperty( YahooProtocol::protocol()->propWorkURL, m_YABEntry->workURL );
-	
+
 		// Miscellanous
 	setProperty( YahooProtocol::protocol()->propBirthday, m_YABEntry->birthday.toString( Qt::ISODate ) );
 	setProperty( YahooProtocol::protocol()->propAnniversary, m_YABEntry->anniversary.toString( Qt::ISODate ) );
@@ -770,7 +777,7 @@
 	kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << endl;
 	if( m_YABEntry )
 		delete m_YABEntry;
-	
+
 	m_YABEntry = new YABEntry;
 	m_YABEntry->yahooId = userId();
 	// Personal
@@ -779,12 +786,12 @@
 	m_YABEntry->lastName = property( YahooProtocol::protocol()->propLastName ).value().toString();
 	m_YABEntry->nickName = property( YahooProtocol::protocol()->propNickName ).value().toString();
 	m_YABEntry->title = property( YahooProtocol::protocol()->propTitle ).value().toString();
-	
-	// Primary Information	
+
+	// Primary Information
 	m_YABEntry->phoneMobile = property( YahooProtocol::protocol()->propPhoneMobile ).value().toString();
 	m_YABEntry->email = property( YahooProtocol::protocol()->propEmail ).value().toString();
 	m_YABEntry->YABId = property( YahooProtocol::protocol()->propYABId ).value().toInt();
-	
+
 	// Additional Information
 	m_YABEntry->pager = property( YahooProtocol::protocol()->propPager ).value().toString();
 	m_YABEntry->fax = property( YahooProtocol::protocol()->propFax ).value().toString();
@@ -798,7 +805,7 @@
 	m_YABEntry->imSkype = property( YahooProtocol::protocol()->propImSkype ).value().toString();
 	m_YABEntry->imIRC = property( YahooProtocol::protocol()->propImIRC ).value().toString();
 	m_YABEntry->imQQ = property( YahooProtocol::protocol()->propImQQ ).value().toString();
-	
+
 	// Private Information
 	m_YABEntry->privateAdress = property( YahooProtocol::protocol()->propPrivateAddress ).value().toString();
 	m_YABEntry->privateCity = property( YahooProtocol::protocol()->propPrivateCity ).value().toString();
@@ -807,8 +814,8 @@
 	m_YABEntry->privateCountry = property( YahooProtocol::protocol()->propPrivateCountry ).value().toString();
 	m_YABEntry->privatePhone = property( YahooProtocol::protocol()->propPrivatePhone ).value().toString();
 	m_YABEntry->privateURL = property( YahooProtocol::protocol()->propPrivateURL ).value().toString();
-	
-	// Work Information 
+
+	// Work Information
 	m_YABEntry->corporation = property( YahooProtocol::protocol()->propCorporation ).value().toString();
 	m_YABEntry->workAdress = property( YahooProtocol::protocol()->propWorkAddress ).value().toString();
 	m_YABEntry->workCity = property( YahooProtocol::protocol()->propWorkCity ).value().toString();
diff -ruN kdenetwork-3.5.10.orig/kopete/protocols/yahoo/yahoocontact.h kdenetwork-3.5.10/kopete/protocols/yahoo/yahoocontact.h
--- kdenetwork-3.5.10.orig/kopete/protocols/yahoo/yahoocontact.h	2010-01-21 13:32:46.800488755 +0200
+++ kdenetwork-3.5.10/kopete/protocols/yahoo/yahoocontact.h	2010-01-19 04:36:22.000000000 +0200
@@ -68,7 +68,7 @@
 	void receivedWebcamImage( const QPixmap& );
 	void webcamClosed( int );
 	void webcamPaused();
-	
+
 	const YABEntry *yabEntry();
 
 	static QString prepareMessage( const QString &messageText );
@@ -83,7 +83,7 @@
 	void requestWebcam();
 	void inviteWebcam();
 	void buzzContact();
-	void setDisplayPicture(KTempFile *f, int checksum);
+	void setDisplayPicture(const QByteArray &data, int checksum);
 	void sendBuddyIconInfo( const QString &url, int checksum );
 	void sendBuddyIconUpdate( int type );
 	void sendBuddyIconChecksum( int checksum );
@@ -117,7 +117,7 @@
 	void readYABEntry();
 
 private:
-	QString m_userId; 
+	QString m_userId;
 	QString m_groupName;
 	YABEntry *m_YABEntry;
 	YahooChatSession *m_manager;
@@ -126,12 +126,12 @@
 	bool m_stealthed;
 	bool m_receivingWebcam;
 	bool m_sessionActive;
-	
+
 	KAction* m_stealthAction;
 	KAction* m_profileAction;
 	KAction* m_webcamAction;
 	KAction* m_inviteWebcamAction;
-	KAction* m_buzzAction;	
+	KAction* m_buzzAction;
 	KAction* m_inviteConferenceAction;
 };