示例#1
0
int swift::Find(SwarmID& swarmid, bool activate)
{
    if (api_debug)
	fprintf(stderr,"swift::Find %s act %d\n", swarmid.hex().c_str(), (int)activate );

    if (swarmid.ttype() == FILE_TRANSFER)
    {
	SwarmData* swarm = SwarmManager::GetManager().FindSwarm(swarmid.roothash());
	if (swarm==NULL)
	    return -1;
	else
	{
	    if (activate)
		SwarmManager::GetManager().ActivateSwarm(swarm->RootHash());
	    return swarm->Id();
	}
    }
    else
    {
	//LIVE
	LiveTransfer *lt = LiveTransfer::FindBySwarmID(swarmid);
	if (lt == NULL)
	    return -1;
	else
	    return lt->td();
    }
}
示例#2
0
void swift::AddPeer(Address& addr, SwarmID& swarmid)
{
    if (api_debug)
	fprintf(stderr,"swift::AddPeer addr %s hash %s\n", addr.str().c_str(), swarmid.hex().c_str() );

    ContentTransfer *ct = NULL;
    if (swarmid.ttype() == FILE_TRANSFER)
    {
	SwarmData* swarm = SwarmManager::GetManager().FindSwarm(swarmid.roothash());
	if (swarm == NULL)
	    return;
	else
	{
	    if (!swarm->Touch()) {
		swarm = SwarmManager::GetManager().ActivateSwarm(swarmid.roothash());
		if (swarm == NULL)
		    return;
		if (!swarm->Touch())
		    return;
	    }
	    ct = (ContentTransfer *)swarm->GetTransfer();
	}
    }
    else
	ct = (ContentTransfer *)LiveTransfer::FindBySwarmID(swarmid);

    if (ct == NULL)
	return;
    else
	ct->AddPeer(addr);
    // FIXME: When cached addresses are supported in swapped-out swarms, add the peer to that cache instead
}
示例#3
0
int swift::Open( std::string filename, SwarmID& swarmid, std::string trackerurl, bool force_check_diskvshash, popt_cont_int_prot_t cipm, bool zerostate, bool activate, uint32_t chunk_size)
{
    if (api_debug)
	fprintf(stderr,"swift::Open %s id %s track %s cdisk %d cipm %u zs %d act %d cs %u\n", filename.c_str(), swarmid.hex().c_str(), trackerurl.c_str(), force_check_diskvshash, cipm, zerostate, activate, chunk_size );

    if (swarmid.ttype() != FILE_TRANSFER)
	return -1;

    SwarmData* swarm = SwarmManager::GetManager().AddSwarm( filename, swarmid.roothash(), trackerurl, force_check_diskvshash, cipm, zerostate, activate, chunk_size );
    if (swarm == NULL)
	return -1;
    else
	return swarm->Id();
}