std::string make_magnet_uri(torrent_info const& info) { std::string ret; sha1_hash const& ih = info.info_hash(); ret += "magnet:?xt=urn:btih:"; ret += to_hex(ih.to_string()); std::string const& name = info.name(); if (!name.empty()) { ret += "&dn="; ret += escape_string(name.c_str(), name.length()); } std::vector<announce_entry> const& tr = info.trackers(); for (std::vector<announce_entry>::const_iterator i = tr.begin(), end(tr.end()); i != end; ++i) { ret += "&tr="; ret += escape_string(i->url.c_str(), i->url.length()); } std::vector<web_seed_entry> const& seeds = info.web_seeds(); for (std::vector<web_seed_entry>::const_iterator i = seeds.begin() , end(seeds.end()); i != end; ++i) { if (i->type != web_seed_entry::url_seed) continue; ret += "&ws="; ret += escape_string(i->url.c_str(), i->url.length()); } return ret; }
openmagnet_info* TorrentManager::GetTorrentInfo(const torrent_handle& handle) { if (handle.is_valid()) { openmagnet_info* info = new openmagnet_info; #if LIBTORRENT_VERSION_NUM >= 10000 boost::intrusive_ptr<torrent_info const> ti = handle.torrent_file(); info->size = ti->total_size(); info->name = QString::fromUtf8(ti->name().c_str()); info->describtion = QString::fromUtf8(ti->comment().c_str()); info->files = ti->files(); info->infoHash = QString::fromStdString(to_hex(ti->info_hash().to_string())); #else const torrent_info ti = handle.get_torrent_info(); info->size = ti.total_size(); info->name = QString::fromUtf8(ti.name().c_str()); info->describtion = QString::fromUtf8(ti.comment().c_str()); info->files = ti.files(); info->infoHash = QString::fromStdString(to_hex(ti.info_hash().to_string())); #endif info->handle = handle; info->baseSuffix = StaticHelpers::GetBaseSuffix(info->files); return info; } return NULL; }
std::string make_magnet_uri(torrent_info const& info) { std::string ret; sha1_hash const& ih = info.info_hash(); ret += "magnet:?xt=urn:btih:"; ret += aux::to_hex(ih); std::string const& name = info.name(); if (!name.empty()) { ret += "&dn="; ret += escape_string(name); } for (auto const& tr : info.trackers()) { ret += "&tr="; ret += escape_string(tr.url); } for (auto const& s : info.web_seeds()) { if (s.type != web_seed_entry::url_seed) continue; ret += "&ws="; ret += escape_string(s.url); } return ret; }
std::string make_magnet_uri(torrent_info const& info) { std::stringstream ret; if (!info.is_valid()) return ret.str(); std::string name = info.name(); ret << "magnet:?xt=urn:btih:" << base32encode( std::string((char*)info.info_hash().begin(), 20)); if (!name.empty()) ret << "&dn=" << escape_string(name.c_str(), name.length()); std::vector<announce_entry> const& tr = info.trackers(); if (!tr.empty()) { ret << "&tr=" << escape_string(tr[0].url.c_str() , tr[0].url.length()); } return ret.str(); }
std::string make_magnet_uri(torrent_info const& info) { char ret[1024]; int num_chars = snprintf(ret, sizeof(ret), "magnet:?xt=urn:btih:%s" , base32encode(std::string((char*)info.info_hash().begin(), 20)).c_str()); std::string const& name = info.name(); if (!name.empty()) num_chars += snprintf(ret + num_chars, sizeof(ret) - num_chars, "&dn=%s" , escape_string(name.c_str(), name.length()).c_str()); std::vector<announce_entry> const& tr = info.trackers(); if (!tr.empty()) { num_chars += snprintf(ret + num_chars, sizeof(ret) - num_chars, "&tr=%s" , escape_string(tr[0].url.c_str(), tr[0].url.length()).c_str()); } return ret; }