diff options
Diffstat (limited to '')
-rw-r--r-- | src/jlib.erl | 85 |
1 files changed, 84 insertions, 1 deletions
diff --git a/src/jlib.erl b/src/jlib.erl index b1262e0ef..c4c510f4d 100644 --- a/src/jlib.erl +++ b/src/jlib.erl @@ -14,9 +14,15 @@ make_error_reply/3, make_correct_from_to_attrs/3, replace_from_to_attrs/3, + replace_from_to/3, + remove_attr/2, string_to_jid/1, jid_to_string/1, - tolower/1]). + tolower/1, + get_iq_namespace/1, + iq_query_info/1, + iq_to_xml/1, + get_subtag/2]). %send_iq(From, To, ID, SubTags) -> @@ -93,6 +99,16 @@ replace_from_to_attrs(From, To, Attrs) -> Attrs4 = [{"from", From} | Attrs3], Attrs4. +replace_from_to(From, To, {xmlelement, Name, Attrs, Els}) -> + NewAttrs = replace_from_to_attrs(jlib:jid_to_string(From), + jlib:jid_to_string(To), + Attrs), + {xmlelement, Name, NewAttrs, Els}. + + +remove_attr(Attr, {xmlelement, Name, Attrs, Els}) -> + NewAttrs = lists:keydelete(Attr, 1, Attrs), + {xmlelement, Name, NewAttrs, Els}. string_to_jid(J) -> string_to_jid1(J, ""). @@ -155,3 +171,70 @@ tolower_c(C) -> tolower(S) -> lists:map(fun tolower_c/1, S). + + +get_iq_namespace({xmlelement, Name, Attrs, Els}) when Name == "iq" -> + case xml:remove_cdata(Els) of + [{xmlelement, Name2, Attrs2, Els2}] -> + xml:get_attr_s("xmlns", Attrs2); + _ -> + "" + end; +get_iq_namespace(_) -> + "". + +iq_query_info({xmlelement, Name, Attrs, Els}) when Name == "iq" -> + ID = xml:get_attr_s("id", Attrs), + Type = xml:get_attr_s("type", Attrs), + case xml:remove_cdata(Els) of + [{xmlelement, Name2, Attrs2, Els2}] -> + XMLNS = xml:get_attr_s("xmlns", Attrs2), + Type1 = case Type of + "set" -> set; + "get" -> get; + _ -> invalid + end, + if + (Type1 /= invalid) and (XMLNS /= "") -> + {iq, ID, Type1, XMLNS, {xmlelement, Name2, Attrs2, Els2}}; + true -> + invalid + end; + _ -> + invalid + end; +iq_query_info(_) -> + not_iq. + +iq_type_to_string(set) -> "set"; +iq_type_to_string(get) -> "get"; +iq_type_to_string(result) -> "result"; +iq_type_to_string(error) -> "error"; +iq_type_to_string(_) -> invalid. + + +iq_to_xml({iq, ID, Type, _, SubEl}) -> + if + ID /= "" -> + {xmlelement, "iq", + [{"id", ID}, {"type", iq_type_to_string(Type)}], SubEl}; + true -> + {xmlelement, "iq", + [{"type", iq_type_to_string(Type)}], SubEl} + end. + + +get_subtag({xmlelement, _, _, Els}, Name) -> + get_subtag1(Els, Name). + +get_subtag1([El | Els], Name) -> + case El of + {xmlelement, Name, _, _} -> + El; + _ -> + get_subtag1(Els, Name) + end; +get_subtag1([], _) -> + false. + + |