diff --git a/src/rpc/xmlrpc.cc b/src/rpc/xmlrpc.cc index b6754409..4347401b 100644 --- a/src/rpc/xmlrpc.cc +++ b/src/rpc/xmlrpc.cc @@ -436,6 +436,32 @@ object_to_xmlrpc(xmlrpc_env* env, const torrent::Object& object) { return result; } + case torrent::Object::TYPE_DICT_KEY: + { + xmlrpc_value* result = xmlrpc_array_new(env); + + xmlrpc_value* key_item = object_to_xmlrpc(env, object.as_dict_key()); + xmlrpc_array_append_item(env, result, key_item); + xmlrpc_DECREF(key_item); + + if (object.as_dict_obj().is_list()) { + for (torrent::Object::list_const_iterator + itr = object.as_dict_obj().as_list().begin(), + last = object.as_dict_obj().as_list().end(); + itr != last; itr++) { + xmlrpc_value* item = object_to_xmlrpc(env, *itr); + xmlrpc_array_append_item(env, result, item); + xmlrpc_DECREF(item); + } + } else { + xmlrpc_value* arg_item = object_to_xmlrpc(env, object.as_dict_obj()); + xmlrpc_array_append_item(env, result, arg_item); + xmlrpc_DECREF(arg_item); + } + + return result; + } + default: return xmlrpc_int_new(env, 0); }