std::string make_magnet_uri(torrent_handle const& handle) { if (!handle.is_valid()) return ""; std::string ret; sha1_hash const& ih = handle.info_hash(); ret += "magnet:?xt=urn:btih:"; ret += to_hex(ih.to_string()); torrent_status st = handle.status(torrent_handle::query_name); if (!st.name.empty()) { ret += "&dn="; ret += escape_string(st.name.c_str(), st.name.length()); } std::vector<announce_entry> const& tr = handle.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::set<std::string> seeds = handle.url_seeds(); for (std::set<std::string>::iterator i = seeds.begin() , end(seeds.end()); i != end; ++i) { ret += "&ws="; ret += escape_string(i->c_str(), i->length()); } return ret; }
std::string make_magnet_uri(torrent_handle const& handle) { if (!handle.is_valid()) return ""; std::string ret; sha1_hash const& ih = handle.info_hash(); ret += "magnet:?xt=urn:btih:"; ret += aux::to_hex(ih); torrent_status st = handle.status(torrent_handle::query_name); if (!st.name.empty()) { ret += "&dn="; ret += escape_string(st.name); } for (auto const& tr : handle.trackers()) { ret += "&tr="; ret += escape_string(tr.url); } for (auto const& s : handle.url_seeds()) { ret += "&ws="; ret += escape_string(s); } return ret; }