diff --git a/world/net/jabber/common.c b/world/net/jabber/common.c index 4b558c9..85319fa 100644 --- a/world/net/jabber/common.c +++ b/world/net/jabber/common.c @@ -448,10 +448,11 @@ certificate_check_jabbername(name, cert) { } #endif -/* get first child of a node - * used for +/* get first child of a node used for + * "first" is actually inaccurate, since there is no defined order in mappings, + * so we select the child, that is not an error */ -getfirstchild(node) { +getiqchild(node) { mixed res; foreach(mixed key, mixed val : node) { unless(stringp(key) && key[0] == '/') continue; diff --git a/world/net/jabber/mixin_parse.c b/world/net/jabber/mixin_parse.c index f868613..8ff4984 100644 --- a/world/net/jabber/mixin_parse.c +++ b/world/net/jabber/mixin_parse.c @@ -716,8 +716,8 @@ jabberMsg(XMLNode node, mixed origin, mixed *su, array(mixed) tu) { break; case "iq": { - mixed firstchild = getfirstchild(node); - string xmlns = firstchild ? firstchild["@xmlns"] : 0; + mixed iqchild = getiqchild(node); + string xmlns = iqchild ? iqchild["@xmlns"] : 0; // TODO: maybe this should be handled by several functions // iq_get, iq_set, iq_result, iq_error t = node["@type"]; @@ -790,8 +790,8 @@ jabberMsg(XMLNode node, mixed origin, mixed *su, array(mixed) tu) { break; } case "http://jabber.org/protocol/disco#info": - if (firstchild["@node"]) - vars["_target_fragment"] = firstchild["@node"]; + if (iqchild["@node"]) + vars["_target_fragment"] = iqchild["@node"]; if (tu[UUser]) o = FIND_OBJECT(tu[UUser]); else @@ -807,8 +807,8 @@ jabberMsg(XMLNode node, mixed origin, mixed *su, array(mixed) tu) { } break; case "http://jabber.org/protocol/disco#items": - if (firstchild["@node"]) - vars["_target_fragment"] = firstchild["@node"]; + if (iqchild["@node"]) + vars["_target_fragment"] = iqchild["@node"]; if (tu[UUser]) o = FIND_OBJECT(tu[UUser]); else diff --git a/world/net/jabber/user.c b/world/net/jabber/user.c index 055d51d..c482bed 100644 --- a/world/net/jabber/user.c +++ b/world/net/jabber/user.c @@ -558,7 +558,7 @@ iq(XMLNode node) { string target; string friend; XMLNode helper; - XMLNode firstchild; + XMLNode iqchild; string t; string packet; string template; @@ -570,8 +570,8 @@ iq(XMLNode node) { isplacemsg = stringp(target) && strlen(target) && ISPLACEMSG(target); P0(("+++ %O IQ node %O\n", ME, node)) - firstchild = getfirstchild(node); - unless(firstchild) switch(node["@type"]) { + iqchild = getiqchild(node); + unless(iqchild) switch(node["@type"]) { case "get": case "set": case "result": @@ -581,9 +581,9 @@ iq(XMLNode node) { P1(("%O got invalid iq %O\n", ME, node)) return; } - helper = firstchild; + helper = iqchild; - switch(firstchild["@xmlns"]) { + switch(iqchild["@xmlns"]) { case "jabber:iq:version": switch(node["@type"]) { case "get": @@ -978,16 +978,16 @@ iq(XMLNode node) { packet += ""; break; case "set": - if (firstchild["/item"] && !nodelistp(firstchild["/item"])) - firstchild["/item"] = ({ firstchild["/item"] }); - unless(firstchild["/item"]) { /* clear the blocklist */ + if (iqchild["/item"] && !nodelistp(iqchild["/item"])) + iqchild["/item"] = ({ iqchild["/item"] }); + unless(iqchild["/item"]) { /* clear the blocklist */ foreach(mixed p, mixed val : ppl) { if (val[PPL_DISPLAY] == PPL_DISPLAY_NONE) sPerson(p, PPL_DISPLAY, PPL_DISPLAY_DEFAULT); } } else { - int block = firstchild[Tag] == "block"; - foreach (helper : firstchild["/item"]) { + int block = iqchild[Tag] == "block"; + foreach (helper : iqchild["/item"]) { /* add/remove each item to/from the blocklist */ if (block) { /* TODO: