aboutsummaryrefslogtreecommitdiff
path: root/tools/xmpp_codec.erl
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2014-09-11 18:18:20 +0200
committerHolger Weiss <holger@zedat.fu-berlin.de>2014-09-11 18:18:20 +0200
commit1a320baad896b4f0d7ae6d5170f75d70a9b1020b (patch)
tree1dcf843f5750b2cd263d1da6c4e814f79fa1af77 /tools/xmpp_codec.erl
parentSupport XEP-0352: Client State Indication (diff)
Add tests for Client State Indication support
Diffstat (limited to 'tools/xmpp_codec.erl')
-rw-r--r--tools/xmpp_codec.erl192
1 files changed, 192 insertions, 0 deletions
diff --git a/tools/xmpp_codec.erl b/tools/xmpp_codec.erl
index 2b9372973..d106fa8f4 100644
--- a/tools/xmpp_codec.erl
+++ b/tools/xmpp_codec.erl
@@ -47,6 +47,14 @@ decode({xmlel, _name, _attrs, _} = _el, Opts) ->
decode_feature_sm(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
{<<"sm">>, <<"urn:xmpp:sm:3">>} ->
decode_feature_sm(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
+ {<<"inactive">>, <<"urn:xmpp:csi:0">>} ->
+ decode_csi_inactive(<<"urn:xmpp:csi:0">>, IgnoreEls,
+ _el);
+ {<<"active">>, <<"urn:xmpp:csi:0">>} ->
+ decode_csi_active(<<"urn:xmpp:csi:0">>, IgnoreEls, _el);
+ {<<"csi">>, <<"urn:xmpp:csi:0">>} ->
+ decode_feature_csi(<<"urn:xmpp:csi:0">>, IgnoreEls,
+ _el);
{<<"sent">>, <<"urn:xmpp:carbons:2">>} ->
decode_carbons_sent(<<"urn:xmpp:carbons:2">>, IgnoreEls,
_el);
@@ -163,6 +171,26 @@ decode({xmlel, _name, _attrs, _} = _el, Opts) ->
_el);
{<<"delay">>, <<"urn:xmpp:delay">>} ->
decode_delay(<<"urn:xmpp:delay">>, IgnoreEls, _el);
+ {<<"paused">>,
+ <<"http://jabber.org/protocol/chatstates">>} ->
+ decode_chatstate_paused(<<"http://jabber.org/protocol/chatstates">>,
+ IgnoreEls, _el);
+ {<<"inactive">>,
+ <<"http://jabber.org/protocol/chatstates">>} ->
+ decode_chatstate_inactive(<<"http://jabber.org/protocol/chatstates">>,
+ IgnoreEls, _el);
+ {<<"gone">>,
+ <<"http://jabber.org/protocol/chatstates">>} ->
+ decode_chatstate_gone(<<"http://jabber.org/protocol/chatstates">>,
+ IgnoreEls, _el);
+ {<<"composing">>,
+ <<"http://jabber.org/protocol/chatstates">>} ->
+ decode_chatstate_composing(<<"http://jabber.org/protocol/chatstates">>,
+ IgnoreEls, _el);
+ {<<"active">>,
+ <<"http://jabber.org/protocol/chatstates">>} ->
+ decode_chatstate_active(<<"http://jabber.org/protocol/chatstates">>,
+ IgnoreEls, _el);
{<<"headers">>,
<<"http://jabber.org/protocol/shim">>} ->
decode_shim_headers(<<"http://jabber.org/protocol/shim">>,
@@ -998,6 +1026,9 @@ is_known_tag({xmlel, _name, _attrs, _} = _el) ->
{<<"enable">>, <<"urn:xmpp:sm:3">>} -> true;
{<<"sm">>, <<"urn:xmpp:sm:2">>} -> true;
{<<"sm">>, <<"urn:xmpp:sm:3">>} -> true;
+ {<<"inactive">>, <<"urn:xmpp:csi:0">>} -> true;
+ {<<"active">>, <<"urn:xmpp:csi:0">>} -> true;
+ {<<"csi">>, <<"urn:xmpp:csi:0">>} -> true;
{<<"sent">>, <<"urn:xmpp:carbons:2">>} -> true;
{<<"received">>, <<"urn:xmpp:carbons:2">>} -> true;
{<<"private">>, <<"urn:xmpp:carbons:2">>} -> true;
@@ -1074,6 +1105,21 @@ is_known_tag({xmlel, _name, _attrs, _} = _el) ->
true;
{<<"x">>, <<"jabber:x:delay">>} -> true;
{<<"delay">>, <<"urn:xmpp:delay">>} -> true;
+ {<<"paused">>,
+ <<"http://jabber.org/protocol/chatstates">>} ->
+ true;
+ {<<"inactive">>,
+ <<"http://jabber.org/protocol/chatstates">>} ->
+ true;
+ {<<"gone">>,
+ <<"http://jabber.org/protocol/chatstates">>} ->
+ true;
+ {<<"composing">>,
+ <<"http://jabber.org/protocol/chatstates">>} ->
+ true;
+ {<<"active">>,
+ <<"http://jabber.org/protocol/chatstates">>} ->
+ true;
{<<"headers">>,
<<"http://jabber.org/protocol/shim">>} ->
true;
@@ -1856,6 +1902,26 @@ encode({pubsub, _, _, _, _, _, _, _, _} = Pubsub) ->
encode({shim, _} = Headers) ->
encode_shim_headers(Headers,
[{<<"xmlns">>, <<"http://jabber.org/protocol/shim">>}]);
+encode({chatstate_active} = Active) ->
+ encode_chatstate_active(Active,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/chatstates">>}]);
+encode({chatstate_composing} = Composing) ->
+ encode_chatstate_composing(Composing,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/chatstates">>}]);
+encode({chatstate_gone} = Gone) ->
+ encode_chatstate_gone(Gone,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/chatstates">>}]);
+encode({chatstate_inactive} = Inactive) ->
+ encode_chatstate_inactive(Inactive,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/chatstates">>}]);
+encode({chatstate_paused} = Paused) ->
+ encode_chatstate_paused(Paused,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/chatstates">>}]);
encode({delay, _, _} = Delay) ->
encode_delay(Delay,
[{<<"xmlns">>, <<"urn:xmpp:delay">>}]);
@@ -1926,6 +1992,14 @@ encode({carbons_received, _} = Received) ->
encode({carbons_sent, _} = Sent) ->
encode_carbons_sent(Sent,
[{<<"xmlns">>, <<"urn:xmpp:carbons:2">>}]);
+encode({feature_csi, _} = Csi) ->
+ encode_feature_csi(Csi, []);
+encode({csi_active} = Active) ->
+ encode_csi_active(Active,
+ [{<<"xmlns">>, <<"urn:xmpp:csi:0">>}]);
+encode({csi_inactive} = Inactive) ->
+ encode_csi_inactive(Inactive,
+ [{<<"xmlns">>, <<"urn:xmpp:csi:0">>}]);
encode({feature_sm, _} = Sm) ->
encode_feature_sm(Sm, []);
encode({sm_enable, _, _, _} = Enable) ->
@@ -2084,6 +2158,16 @@ get_ns({pubsub, _, _, _, _, _, _, _, _}) ->
<<"http://jabber.org/protocol/pubsub">>;
get_ns({shim, _}) ->
<<"http://jabber.org/protocol/shim">>;
+get_ns({chatstate_active}) ->
+ <<"http://jabber.org/protocol/chatstates">>;
+get_ns({chatstate_composing}) ->
+ <<"http://jabber.org/protocol/chatstates">>;
+get_ns({chatstate_gone}) ->
+ <<"http://jabber.org/protocol/chatstates">>;
+get_ns({chatstate_inactive}) ->
+ <<"http://jabber.org/protocol/chatstates">>;
+get_ns({chatstate_paused}) ->
+ <<"http://jabber.org/protocol/chatstates">>;
get_ns({delay, _, _}) -> <<"urn:xmpp:delay">>;
get_ns({legacy_delay, _, _}) -> <<"jabber:x:delay">>;
get_ns({streamhost, _, _, _}) ->
@@ -2115,6 +2199,9 @@ get_ns({carbons_private}) -> <<"urn:xmpp:carbons:2">>;
get_ns({carbons_received, _}) ->
<<"urn:xmpp:carbons:2">>;
get_ns({carbons_sent, _}) -> <<"urn:xmpp:carbons:2">>;
+get_ns({feature_csi, _}) -> <<"urn:xmpp:csi:0">>;
+get_ns({csi_active}) -> <<"urn:xmpp:csi:0">>;
+get_ns({csi_inactive}) -> <<"urn:xmpp:csi:0">>;
get_ns(_) -> <<>>.
dec_int(Val) -> dec_int(Val, infinity, infinity).
@@ -2272,6 +2359,11 @@ pp(pubsub, 8) ->
[subscriptions, affiliations, publish, subscribe,
unsubscribe, options, items, retract];
pp(shim, 1) -> [headers];
+pp(chatstate_active, 0) -> [];
+pp(chatstate_composing, 0) -> [];
+pp(chatstate_gone, 0) -> [];
+pp(chatstate_inactive, 0) -> [];
+pp(chatstate_paused, 0) -> [];
pp(delay, 2) -> [stamp, from];
pp(legacy_delay, 2) -> [stamp, from];
pp(streamhost, 3) -> [jid, host, port];
@@ -2298,6 +2390,9 @@ pp(carbons_enable, 0) -> [];
pp(carbons_private, 0) -> [];
pp(carbons_received, 1) -> [forwarded];
pp(carbons_sent, 1) -> [forwarded];
+pp(feature_csi, 1) -> [xmlns];
+pp(csi_active, 0) -> [];
+pp(csi_inactive, 0) -> [];
pp(feature_sm, 1) -> [xmlns];
pp(sm_enable, 3) -> [max, resume, xmlns];
pp(sm_enabled, 5) -> [id, location, max, resume, xmlns];
@@ -3268,6 +3363,54 @@ encode_feature_sm_attr_xmlns(undefined, _acc) -> _acc;
encode_feature_sm_attr_xmlns(_val, _acc) ->
[{<<"xmlns">>, _val} | _acc].
+decode_csi_inactive(__TopXMLNS, __IgnoreEls,
+ {xmlel, <<"inactive">>, _attrs, _els}) ->
+ {csi_inactive}.
+
+encode_csi_inactive({csi_inactive}, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"inactive">>, _attrs, _els}.
+
+decode_csi_active(__TopXMLNS, __IgnoreEls,
+ {xmlel, <<"active">>, _attrs, _els}) ->
+ {csi_active}.
+
+encode_csi_active({csi_active}, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"active">>, _attrs, _els}.
+
+decode_feature_csi(__TopXMLNS, __IgnoreEls,
+ {xmlel, <<"csi">>, _attrs, _els}) ->
+ Xmlns = decode_feature_csi_attrs(__TopXMLNS, _attrs,
+ undefined),
+ {feature_csi, Xmlns}.
+
+decode_feature_csi_attrs(__TopXMLNS,
+ [{<<"xmlns">>, _val} | _attrs], _Xmlns) ->
+ decode_feature_csi_attrs(__TopXMLNS, _attrs, _val);
+decode_feature_csi_attrs(__TopXMLNS, [_ | _attrs],
+ Xmlns) ->
+ decode_feature_csi_attrs(__TopXMLNS, _attrs, Xmlns);
+decode_feature_csi_attrs(__TopXMLNS, [], Xmlns) ->
+ decode_feature_csi_attr_xmlns(__TopXMLNS, Xmlns).
+
+encode_feature_csi({feature_csi, Xmlns},
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = encode_feature_csi_attr_xmlns(Xmlns,
+ _xmlns_attrs),
+ {xmlel, <<"csi">>, _attrs, _els}.
+
+decode_feature_csi_attr_xmlns(__TopXMLNS, undefined) ->
+ undefined;
+decode_feature_csi_attr_xmlns(__TopXMLNS, _val) -> _val.
+
+encode_feature_csi_attr_xmlns(undefined, _acc) -> _acc;
+encode_feature_csi_attr_xmlns(_val, _acc) ->
+ [{<<"xmlns">>, _val} | _acc].
+
decode_carbons_sent(__TopXMLNS, __IgnoreEls,
{xmlel, <<"sent">>, _attrs, _els}) ->
Forwarded = decode_carbons_sent_els(__TopXMLNS,
@@ -5355,6 +5498,55 @@ encode_delay_attr_from(undefined, _acc) -> _acc;
encode_delay_attr_from(_val, _acc) ->
[{<<"from">>, enc_jid(_val)} | _acc].
+decode_chatstate_paused(__TopXMLNS, __IgnoreEls,
+ {xmlel, <<"paused">>, _attrs, _els}) ->
+ {chatstate_paused}.
+
+encode_chatstate_paused({chatstate_paused},
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"paused">>, _attrs, _els}.
+
+decode_chatstate_inactive(__TopXMLNS, __IgnoreEls,
+ {xmlel, <<"inactive">>, _attrs, _els}) ->
+ {chatstate_inactive}.
+
+encode_chatstate_inactive({chatstate_inactive},
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"inactive">>, _attrs, _els}.
+
+decode_chatstate_gone(__TopXMLNS, __IgnoreEls,
+ {xmlel, <<"gone">>, _attrs, _els}) ->
+ {chatstate_gone}.
+
+encode_chatstate_gone({chatstate_gone}, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"gone">>, _attrs, _els}.
+
+decode_chatstate_composing(__TopXMLNS, __IgnoreEls,
+ {xmlel, <<"composing">>, _attrs, _els}) ->
+ {chatstate_composing}.
+
+encode_chatstate_composing({chatstate_composing},
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"composing">>, _attrs, _els}.
+
+decode_chatstate_active(__TopXMLNS, __IgnoreEls,
+ {xmlel, <<"active">>, _attrs, _els}) ->
+ {chatstate_active}.
+
+encode_chatstate_active({chatstate_active},
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"active">>, _attrs, _els}.
+
decode_shim_headers(__TopXMLNS, __IgnoreEls,
{xmlel, <<"headers">>, _attrs, _els}) ->
Headers = decode_shim_headers_els(__TopXMLNS,