/* */ #include "magnet.h" #include "util.h" namespace aria2 { namespace magnet { BDE parse(const std::string& magnet) { BDE result; if(!util::startsWith(magnet, "magnet:?")) { return result; } std::vector queries; util::split(std::string(magnet.begin()+8, magnet.end()), std::back_inserter(queries), "&"); BDE dict = BDE::dict(); 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::urldecode(kv.second); if(dict.containsKey(kv.first)) { dict[kv.first] << value; } else { BDE list = BDE::list(); list << value; dict[kv.first] = list; } } result = dict; return result; } } // namespace magnet } // namespace aria2