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 }
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(); } }
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; }
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(); }
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(); }