bool SSIModifyTask::take( Transfer* transfer )
{
	if ( forMe( transfer ) )
	{
		SnacTransfer* st = dynamic_cast<SnacTransfer*>( transfer );
		if ( st )
		{
			setTransfer( transfer );

			if ( st->snacSubtype() == 0x0008 )
				handleContactAdd();
			else if ( st->snacSubtype() == 0x0009 )
				handleContactUpdate();
			else if ( st->snacSubtype() == 0x000A )
				handleContactRemove();
			else if ( st->snacSubtype() == 0x000E )
				handleContactAck();

			setTransfer( 0 );
		}
		return true;
	}
	else
		return false;
}
bool OscarLoginTask::take( Transfer* transfer )
{
	if ( forMe( transfer ) )
	{
		SnacTransfer* st = dynamic_cast<SnacTransfer*>( transfer );
		if (!st)
			return false;

		Oscar::WORD subtype = st->snacSubtype();
		switch ( subtype )
		{
		case 0x0003:
			setTransfer( transfer );
			handleLoginResponse();
			setTransfer( 0 );
			return true;
			break;
		case 0x0007:
			setTransfer( transfer );
			processAuthStringReply();
			setTransfer( 0 );
			return true;
			break;
		default:
			return false;
			break;
		}

		return false;
	}
	return false;
}
Esempio n. 3
0
bool AimLoginTask::forMe( Transfer* transfer ) const
{
    SnacTransfer* st = dynamic_cast<SnacTransfer*>( transfer );

    if (!st)
        return false;

    if ( st && st->snacService() == 0x17 )
    {
        WORD subtype = st->snacSubtype();
        switch ( subtype )
        {
        case 0x0002:
        case 0x0003:
        case 0x0006:
        case 0x0007:
            return true;
            break;
        default:
            return false;
            break;
        }
    }
    return false;
}
bool ServerVersionsTask::take( Transfer* transfer )
{	
	SnacTransfer* st = dynamic_cast<SnacTransfer*> ( transfer );
	if (!st)
		return false;
	
	if ( forMe( transfer ) )
	{
		switch ( st->snacSubtype() )
		{
			case 0x03:
				setTransfer( transfer );
				handleFamilies();
				setTransfer( 0 );
				return true;
				break;
			case 0x18:
				setTransfer( transfer );
				kDebug(OSCAR_RAW_DEBUG) << "Ignoring server versions";
				setSuccess( 0, QString() );
				setTransfer( 0 );
				return true;
				break;
			default:
				return false;
		}
	}
	return false;
}
Esempio n. 5
0
bool SSIAuthTask::take( Transfer* t )
{
	if ( forMe( t ) )
	{
		setTransfer( t );
		SnacTransfer* st = dynamic_cast<SnacTransfer*> ( t );
		
		switch ( st->snacSubtype() )
		{
			case 0x0015: // Future authorization granted
				handleFutureAuthGranted();
				break;
			case 0x0019: // Authorization request
				handleAuthRequested();
				break;
			case 0x001b: // Authorization reply
				handleAuthReplied();
				break;
			case 0x001c: // "You were added" message
				handleAddedMessage();
				break;
		}
		setTransfer( 0 );
		return true;
	}
	return false;
}
bool OwnUserInfoTask::take( Transfer* transfer )
{
	if ( forMe( transfer ) )
	{
		SnacTransfer* st = dynamic_cast<SnacTransfer*>( transfer );
		if ( !st )
			return false;
		
		Buffer* b = transfer->buffer();
		if ( st->snacSubtype() == 0x0F )
		{
			UserDetails ud;
			ud.fill( b );
			m_details = ud;
			emit gotInfo();
			setSuccess( 0, QString() );
			return true;
		}
		else
		{
			bool needUpload = false;
			Oscar::WORD infoType = b->getWord();
			if ( infoType == 0x0000 || infoType == 0x0001 )
			{
				Oscar::BYTE flags = b->getByte();
				if ( flags == 0x41 )  //we need to do a buddy upload when bit 8 = 1
					needUpload = true;
				
				QByteArray qba;
				if ( b->bytesAvailable() != 0 )
				{ //buffer might be empty if flags bit 8 = 1
					Oscar::BYTE checksumLength = b->getByte();
					qba = b->getBlock( checksumLength );
					kDebug(OSCAR_RAW_DEBUG) << "Self icon checksum: " << qba.toHex();
				}
				
				if ( needUpload )
				{
					kDebug(OSCAR_RAW_DEBUG) << "Buddy icon upload requested";
					emit buddyIconUploadRequested();
				}
				else
				{
					kDebug(OSCAR_RAW_DEBUG) << "no item for hash found";
				}
			}
			
			if ( infoType == 0x0002 )
			{
				QString availableMsg( b->getBSTR() );
				kDebug(OSCAR_RAW_DEBUG) << "self available message: ";
			}
			
			setSuccess( 0, QString() );
			return true;
		}
		
	}

	return false;
}