aboutsummaryrefslogtreecommitdiff
path: root/src/jlib.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/jlib.erl')
-rw-r--r--src/jlib.erl43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/jlib.erl b/src/jlib.erl
index 6cafb9598..b2c798cb6 100644
--- a/src/jlib.erl
+++ b/src/jlib.erl
@@ -25,7 +25,8 @@
get_iq_namespace/1,
iq_query_info/1,
is_iq_request_type/1,
- iq_to_xml/1]).
+ iq_to_xml/1,
+ parse_xdata_submit/1]).
%send_iq(From, To, ID, SubTags) ->
@@ -248,3 +249,43 @@ iq_to_xml({iq, ID, Type, _, SubEl}) ->
end.
+parse_xdata_submit(El) ->
+ {xmlelement, Name, Attrs, Els} = El,
+ case xml:get_attr_s("type", Attrs) of
+ "submit" ->
+ lists:reverse(parse_xdata_fields(Els, []));
+ _ ->
+ invalid
+ end.
+
+parse_xdata_fields([], Res) ->
+ Res;
+parse_xdata_fields([{xmlelement, Name, Attrs, SubEls} | Els], Res) ->
+ case Name of
+ "field" ->
+ case xml:get_attr_s("var", Attrs) of
+ "" ->
+ parse_xdata_fields(Els, Res);
+ Var ->
+ Field =
+ {Var, lists:reverse(parse_xdata_values(SubEls, []))},
+ parse_xdata_fields(Els, [Field | Res])
+ end;
+ _ ->
+ parse_xdata_fields(Els, Res)
+ end;
+parse_xdata_fields([_ | Els], Res) ->
+ parse_xdata_fields(Els, Res).
+
+parse_xdata_values([], Res) ->
+ Res;
+parse_xdata_values([{xmlelement, Name, Attrs, SubEls} | Els], Res) ->
+ case Name of
+ "value" ->
+ Val = xml:get_cdata(SubEls),
+ parse_xdata_values(Els, [Val | Res]);
+ _ ->
+ parse_xdata_values(Els, Res)
+ end;
+parse_xdata_values([_ | Els], Res) ->
+ parse_xdata_values(Els, Res).