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