summaryrefslogtreecommitdiff
path: root/src/jlib.erl
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2002-11-27 20:46:29 +0000
committerAlexey Shchepin <alexey@process-one.net>2002-11-27 20:46:29 +0000
commitb2229bffcc8e5f7c4a919d2d2410d63e7718467e (patch)
tree80052a996eed95652e8660cc4ca398817d2723a8 /src/jlib.erl
parent*** empty log message *** (diff)
*** empty log message ***
SVN Revision: 8
Diffstat (limited to '')
-rw-r--r--src/jlib.erl98
1 files changed, 95 insertions, 3 deletions
diff --git a/src/jlib.erl b/src/jlib.erl
index 17a194eb..0ee2ba74 100644
--- a/src/jlib.erl
+++ b/src/jlib.erl
@@ -10,10 +10,102 @@
-author('alexey@sevcom.net').
-vsn('$Revision$ ').
-%%-export([Function/Arity, ...]).
+-export([make_error_iq_reply/3, make_correct_from_to_attrs/3,
+ replace_from_to_attrs/3, string_to_jid/1, tolower/1]).
-send_iq(From, To, ID, SubTags) ->
- ok.
+%send_iq(From, To, ID, SubTags) ->
+% ok.
+make_error_iq_reply({xmlelement, Name, Attrs, SubTags}, Code, Desc)
+ when Name == "iq" ->
+ NewAttrs = make_error_iq_reply_attrs(Attrs),
+ {xmlelement, Name, NewAttrs, SubTags ++ [{xmlelement, "error",
+ [{"code", Code}],
+ [{xmlcdata, Desc}]}]}.
+
+make_error_iq_reply_attrs(Attrs) ->
+ To = xml:get_attr("to", Attrs),
+ From = xml:get_attr("from", Attrs),
+ Attrs1 = lists:keydelete("to", 1, Attrs),
+ Attrs2 = lists:keydelete("from", 1, Attrs1),
+ Attrs3 = case To of
+ {value, ToVal} ->
+ [{"from", ToVal} | Attrs2];
+ _ ->
+ Attrs2
+ end,
+ Attrs4 = case From of
+ {value, FromVal} ->
+ [{"to", FromVal} | Attrs3];
+ _ ->
+ Attrs3
+ end,
+ Attrs5 = lists:keydelete("type", 1, Attrs4),
+ Attrs6 = [{"type", "error"} | Attrs5],
+ Attrs6.
+
+make_correct_from_to_attrs(From, To, Attrs) ->
+ Attrs1 = lists:keydelete("from", 1, Attrs),
+ Attrs2 = case xml:get_attr("to", Attrs) of
+ {value, _} ->
+ Attrs1;
+ _ ->
+ [{"to", To} | Attrs1]
+ end,
+ Attrs3 = [{"from", From} | Attrs2],
+ Attrs3.
+
+
+replace_from_to_attrs(From,To,Attrs) ->
+ Attrs1 = lists:keydelete("to", 1, Attrs),
+ Attrs2 = lists:keydelete("from", 1, Attrs1),
+ Attrs3 = [{"to", To} | Attrs2],
+ Attrs4 = [{"from", From} | Attrs3],
+ Attrs4.
+
+
+string_to_jid(J) ->
+ string_to_jid1(J, "").
+
+string_to_jid1([$@ | J], "") ->
+ error;
+string_to_jid1([$@ | J], N) ->
+ string_to_jid2(J, lists:reverse(N), "");
+string_to_jid1([$/ | J], "") ->
+ error;
+string_to_jid1([$/ | J], N) ->
+ string_to_jid3(J, "", lists:reverse(N), "");
+string_to_jid1([C | J], N) ->
+ string_to_jid1(J, [C | N]);
+string_to_jid1([], "") ->
+ error;
+string_to_jid1([], N) ->
+ {"", lists:reverse(N), ""}.
+
+string_to_jid2([$/ | J], N, "") ->
+ error;
+string_to_jid2([$/ | J], N, S) ->
+ string_to_jid3(J, N, lists:reverse(S), "");
+string_to_jid2([C | J], N, S) ->
+ string_to_jid2(J, N, [C | S]);
+string_to_jid2([], N, "") ->
+ error;
+string_to_jid2([], N, S) ->
+ {N, lists:reverse(S), ""}.
+
+string_to_jid3([C | J], N, S, R) ->
+ string_to_jid3(J, N, S, [C | R]);
+string_to_jid3([], N, S, R) ->
+ {N, S, lists:reverse(R)}.
+
+
+% TODO: UNICODE support
+tolower_c(C) when C >= $A, C =< $Z ->
+ C + 32;
+tolower_c(C) ->
+ C.
+
+tolower(S) ->
+ lists:map(fun tolower_c/1, S).