示例#1
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
}
示例#2
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();
    }
}
示例#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();
}
示例#4
0
JNIEXPORT jint JNICALL Java_com_tudelft_triblerdroid_swift_NativeLib_asyncOpen( JNIEnv * env, jobject obj, jstring jswarmid, jstring jtracker, jstring jfilename)
{
    dprintf("NativeLib::Open called\n");

    if (!enginestarted)
	return -1; // "Engine not yet initialized"

    jboolean blnIsCopy;

    const char *swarmidcstr = (env)->GetStringUTFChars(jswarmid, &blnIsCopy);
    const char *trackercstr = (env)->GetStringUTFChars(jtracker, &blnIsCopy);
    const char *filenamecstr = (env)->GetStringUTFChars(jfilename, &blnIsCopy);

    SwarmID swarmid = SwarmID(std::string(swarmidcstr));
    std::string dest = "";

    // If no filename, use roothash-in-hex as default
    if (!(swarmid == SwarmID::NOSWARMID) && filenamecstr == "")
	dest = swarmid.hex();
    else
	dest = filenamecstr;

    if (dest == "")
	return -1; // "No destination could be determined"

    std::string trackerurl(trackercstr);
    AsyncParams *aptr = new AsyncParams(&LibeventOpenCallback,swarmid,trackerurl,dest);

    // Register callback
    int callid = AsyncRegisterCallback(aptr);

    (env)->ReleaseStringUTFChars(jswarmid, swarmidcstr); // release jstring
    (env)->ReleaseStringUTFChars(jtracker, trackercstr); // release jstring
    (env)->ReleaseStringUTFChars(jfilename, filenamecstr); // release jstring

    return callid;
}
示例#5
0
int swift::LiveOpen(std::string filename, SwarmID &swarmid, std::string trackerurl, Address &srcaddr, popt_cont_int_prot_t cipm, uint64_t disc_wnd, uint32_t chunk_size)
{
    if (api_debug)
	fprintf(stderr,"swift::LiveOpen %s hash %s track %s src %s cipm %u ldw %llu cs %u\n", filename.c_str(), swarmid.hex().c_str(), trackerurl.c_str(), srcaddr.str().c_str(), cipm, disc_wnd, chunk_size );

    // Help user
    if (cipm == POPT_CONT_INT_PROT_MERKLE)
	cipm = POPT_CONT_INT_PROT_UNIFIED_MERKLE;

    LiveTransfer *lt = new LiveTransfer(filename,swarmid,srcaddr,cipm,disc_wnd,chunk_size);

    // initiate tracker connections
    // SWIFTPROC
    lt->SetTracker(trackerurl);
    fprintf(stderr,"swift::LiveOpen: ConnectToTracker\n");
    lt->ConnectToTracker();
    return lt->td();
}