/* */ #include "magnet.h" #include "util.h" namespace aria2 { namespace magnet { SharedHandle parse(const std::string& magnet) { SharedHandle dict; if(!util::startsWith(magnet, "magnet:?")) { return dict; } dict.reset(new Dict()); std::vector queries; util::split(std::string(magnet.begin()+8, magnet.end()), std::back_inserter(queries), "&"); for(std::vector::const_iterator i = queries.begin(), eoi = queries.end(); i != eoi; ++i) { std::pair kv; util::split(kv, *i, '='); std::string value = util::percentDecode(kv.second); List* l = asList(dict->get(kv.first)); if(l) { l->append(String::g(value)); } else { SharedHandle l = List::g(); l->append(String::g(value)); dict->put(kv.first, l); } } return dict; } } // namespace magnet } // namespace aria2