[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/work/kopete/dev-0.12/kopete/protocols/yahoo
From:       Andre Duffeck <andre () duffeck ! de>
Date:       2005-11-30 18:11:15
Message-ID: 1133374275.407787.19356.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 484417 by duffeck:

fix webcam disconnects/crashes


 M  +51 -24    kyahoo.cpp  
 M  +4 -4      kyahoo.h  


--- branches/work/kopete/dev-0.12/kopete/protocols/yahoo/kyahoo.cpp #484416:484417
@@ -88,27 +88,26 @@
 {
 }
 
-void YahooConnectionManager::addConnection( KStreamSocket* socket )
+void YahooConnectionManager::addConnection( QPair< KStreamSocket*, void *> \
*connection )  {
-	kdDebug(14181) << k_funcinfo << "Adding socket with fd " << \
socket->socketDevice()->socket() << endl; +	kdDebug(14181) << k_funcinfo << "Adding \
socket with fd " << connection->first->socketDevice()->socket() << endl;  
-	m_connectionList.append( socket );
+	m_connectionList.append( connection );
 }
 
-KStreamSocket* YahooConnectionManager::connectionForFD( int fd )
+QPair< KStreamSocket*, void *> *YahooConnectionManager::connectionForFD( int fd )
 {
 	//kdDebug(14181) << k_funcinfo << "Looking for socket with fd " << fd << endl;
-	QValueList<KStreamSocket*>::const_iterator it, ycEnd = m_connectionList.constEnd();
+	QValueList< QPair< KStreamSocket*, void *> *>::const_iterator it, ycEnd = \
m_connectionList.constEnd();  KSocketDevice *dev;
 	
 	for ( it = m_connectionList.begin(); it != ycEnd; ++it )
 	{
-		dev = ( *it )->socketDevice();
+		dev = ( *it )->first->socketDevice();
 		if ( dev->socket() == fd )
 		{
 			//kdDebug(14181) << k_funcinfo << "Found socket" << endl;
-			KStreamSocket* socket = ( *it );
-			return socket;
+			return *it;
 		}
 	}
 	
@@ -117,11 +116,11 @@
 
 void YahooConnectionManager::remove( KStreamSocket* socket )
 {
-	QValueList<KStreamSocket*>::iterator it, ycEnd = m_connectionList.end();
+	QValueList< QPair< KStreamSocket*, void *> *>::iterator it, ycEnd = \
m_connectionList.end();  
 	for ( it = m_connectionList.begin(); it != ycEnd; it++ )
 	{
-		if ( ( *it ) == socket )
+		if ( ( *it )->first == socket )
 		{
 			socket->reset();
 			m_connectionList.remove( it );
@@ -133,11 +132,11 @@
 
 void YahooConnectionManager::reset()
 {
-	QValueList<KStreamSocket*>::iterator it, ycEnd = m_connectionList.end();
+	QValueList< QPair< KStreamSocket*, void *> *>::iterator it, ycEnd = \
m_connectionList.end();  
 	for ( it = m_connectionList.begin(); it != ycEnd; it++ )
 	{
-		KStreamSocket *socket = ( *it );
+		KStreamSocket *socket = ( *it )->first;
 		socket->reset();
 		it = m_connectionList.remove( it );
 		delete socket;
@@ -1072,7 +1071,11 @@
 
 void YahooSession::slotTransmitFile( int fd, YahooUploadData *uploadData )
 {
-	KStreamSocket* socket = m_connManager.connectionForFD( fd );
+	QPair< KStreamSocket*, void *> *connection =  m_connManager.connectionForFD( fd );
+	if( !connection )
+		return;
+		
+	KStreamSocket* socket = connection->first;
 	if( !socket )
 		return;
 	
@@ -1160,9 +1163,15 @@
 		KMessageBox::error(Kopete::UI::Global::mainWidget(), i18n( "An error occurred when \
trying to download the file." ), i18n("Error") );  return;
 	}
+	QPair< KStreamSocket*, void *> *connection =  m_connManager.connectionForFD( fd );
+	if( !connection )
+	{
+		kdDebug(14181) << k_funcinfo << "No connection found for fd." << endl;
+		return;
+	}
 	
-	KStreamSocket* socket = m_connManager.connectionForFD( fd );
-	if ( !socket )
+	KStreamSocket* socket = connection->first;
+	if( !socket )
 	{
 		kdDebug(14181) << k_funcinfo << "No existing socket for connection found. We're \
screwed" << endl;  return;
@@ -1423,21 +1432,23 @@
 {
 	//kdDebug(14181) << k_funcinfo << " " << m_connId << " Socket: " << fd << endl;
 
-	m_data = data;
 	if ( fd == -1 )
 	{
 		kdDebug(14181) << k_funcinfo << "why is fd -1?" << endl;
 		return -1;
 	}
 	
-	KStreamSocket* socket = m_connManager.connectionForFD( fd );
-	if ( !socket )
+	QPair< KStreamSocket*, void *> *connection = m_connManager.connectionForFD( fd );
+	if ( !connection )
 	{
 		kdDebug(14181) << k_funcinfo << "No existing socket for connection found. We're \
screwed"  << endl;
 		return -1;
 	}
 	
+	KStreamSocket *socket = connection->first;
+	connection->second = data;
+	
 	/* This works ONLY IF (YAHOO_INPUT_READ==1 && YAHOO_INPUT_WRITE==2) */
 	int tag = 0;
 	if ( cond == YAHOO_INPUT_READ )
@@ -1468,13 +1479,14 @@
 	if ( tag == 0 )
 		return;
 
-	KStreamSocket* socket = m_connManager.connectionForFD( (tag-1)/2 );
-	if ( !socket )
+	QPair< KStreamSocket*, void *> *connection = m_connManager.connectionForFD( \
(tag-1)/2 ); +	if ( !connection )
 	{
 		kdDebug(14181) << k_funcinfo << "No existing socket for connection found. We're \
screwed"  << endl;
 		return;
 	}
+	KStreamSocket *socket = connection->first;
 	/* This works ONLY IF (YAHOO_INPUT_READ==1 && YAHOO_INPUT_WRITE==2) */
 	if( tag % 2 == YAHOO_INPUT_READ ) {
 		//kdDebug(14181) << k_funcinfo << " read off" << endl;
@@ -1522,7 +1534,8 @@
 {
 	KStreamSocket* socket = const_cast<KStreamSocket*>( dynamic_cast<const \
KStreamSocket*>( sender() ) );  kdDebug(14181) << k_funcinfo << " Connected! fd "<< \
                socket->socketDevice()->socket() << endl;
-	m_connManager.addConnection( socket );
+	QPair< KStreamSocket*, void * > *connection = new QPair< KStreamSocket*, void * >( \
socket, 0L ); +	m_connManager.addConnection( connection );
 	
 	disconnect( socket, SIGNAL( connected( const KResolverEntry& ) ), this, SLOT( \
slotAsyncConnectSucceeded() ) );  disconnect( socket, SIGNAL( gotError(int) ), this, \
SLOT( slotAsyncConnectFailed(int) ) ); @@ -1623,7 +1636,14 @@
 	int fd = socket->socketDevice()->socket();
 	//kdDebug(14181) << k_funcinfo << "Socket FD: " << fd << endl;
 	
-	ret = yahoo_read_ready( m_connId , fd, m_data );
+	QPair< KStreamSocket*, void *> *connection = m_connManager.connectionForFD( fd );
+	if ( !connection )
+	{
+		kdDebug(14181) << k_funcinfo << "No connection found for socket!" << endl;
+		return;
+	}
+	
+	ret = yahoo_read_ready( m_connId , fd, connection->second );
 
 	if ( ret == -1 )
 		kdDebug(14181) << k_funcinfo << "Read Error (" << errno << ": " << strerror(errno) \
<< endl; @@ -1646,9 +1666,16 @@
 	
 	int fd = socket->socketDevice()->socket();
 	//kdDebug(14181) << k_funcinfo << "Socket FD: " << fd << endl;
+	
+	QPair< KStreamSocket*, void *> *connection = m_connManager.connectionForFD( fd );
+	if ( !connection )
+	{
+		kdDebug(14181) << k_funcinfo << "No connection found for socket!" << endl;
+		return;
+	}
+	
+	ret = yahoo_write_ready( m_connId , fd, connection->second );
 
-	ret = yahoo_write_ready( m_connId , fd, m_data );
-
 	if ( ret == -1 )
 		kdDebug(14181) << k_funcinfo << "Read Error (" << errno << ": " << strerror(errno) \
<< endl;  else if ( ret == 0 )
--- branches/work/kopete/dev-0.12/kopete/protocols/yahoo/kyahoo.h #484416:484417
@@ -25,6 +25,7 @@
 #include <qmap.h>
 #include <qpixmap.h>
 #include <qbuffer.h>
+#include <qpair.h>
 
 #include "libyahoo2/yahoo2.h"
 #include "libyahoo2/yahoo2_callbacks.h"
@@ -70,12 +71,12 @@
 	 * from the connection manager and a new connection of that type is expected
 	 * to be created.
 	 */
-	void addConnection( KStreamSocket* socket );
+	void addConnection( QPair< KStreamSocket*, void * > *connection );
 	
 	/**
 	 * Get the connection by its file descriptor
 	 */
-	KStreamSocket* connectionForFD( int fd );
+	QPair< KStreamSocket*, void *> *connectionForFD( int fd );
 	
 	/**
 	 * Remove a connection from the manager
@@ -89,7 +90,7 @@
 	void reset();
 	
 private:
-	QValueList<KStreamSocket*> m_connectionList;
+	QValueList< QPair< KStreamSocket*, void *> *> m_connectionList;
 };
 	
 	
@@ -339,7 +340,6 @@
 	struct connect_callback_data *m_ccd;
 	
 	YahooConnectionManager m_connManager;
-	void *m_data;
 	
 	Kopete::Contact* m_contact;
 	Kopete::Transfer* m_kopeteTransfer;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic