• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

processone / ejabberd / 1296

19 Jan 2026 11:25AM UTC coverage: 33.562% (+0.09%) from 33.468%
1296

push

github

badlop
mod_conversejs: Cosmetic change: sort paths alphabetically

0 of 4 new or added lines in 1 file covered. (0.0%)

11245 existing lines in 174 files now uncovered.

15580 of 46421 relevant lines covered (33.56%)

1074.56 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.19
/src/xml_compress.erl
1
-module(xml_compress).
2
-export([encode/3, decode/3]).
3

4
% This file was generated by xml_compress_gen
5
%
6
% Rules used:
7
%
8
%  [{<<"eu.siacs.conversations.axolotl">>,<<"key">>,
9
%    [{<<"prekey">>,[<<"true">>]},{<<"rid">>,[]}],
10
%    []},
11
%   {<<"jabber:client">>,<<"message">>,
12
%    [{<<"from">>,[j2,{j1}]},
13
%     {<<"id">>,[]},
14
%     {<<"to">>,[j1,j2,{j1}]},
15
%     {<<"type">>,[<<"chat">>,<<"groupchat">>,<<"normal">>]},
16
%     {<<"xml:lang">>,[<<"en">>]}],
17
%    []},
18
%   {<<"urn:xmpp:hints">>,<<"store">>,[],[]},
19
%   {<<"jabber:client">>,<<"body">>,[],
20
%    [<<73,32,115,101,110,116,32,121,111,117,32,97,110,32,79,77,69,77,79,32,101,
21
%       110,99,114,121,112,116,101,100,32,109,101,115,115,97,103,101,32,98,117,
22
%       116,32,121,111,117,114,32,99,108,105,101,110,116,32,100,111,101,115,110,
23
%       226,128,153,116,32,115,101,101,109,32,116,111,32,115,117,112,112,111,
24
%       114,116,32,116,104,97,116,46,32,70,105,110,100,32,109,111,114,101,32,
25
%       105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,116,116,
26
%       112,115,58,47,47,99,111,110,118,101,114,115,97,116,105,111,110,115,46,
27
%       105,109,47,111,109,101,109,111>>]},
28
%   {<<"urn:xmpp:sid:0">>,<<"origin-id">>,[{<<"id">>,[]}],[]},
29
%   {<<"urn:xmpp:chat-markers:0">>,<<"markable">>,[],[]},
30
%   {<<"eu.siacs.conversations.axolotl">>,<<"encrypted">>,[],[]},
31
%   {<<"eu.siacs.conversations.axolotl">>,<<"header">>,[{<<"sid">>,[]}],[]},
32
%   {<<"eu.siacs.conversations.axolotl">>,<<"iv">>,[],[]},
33
%   {<<"eu.siacs.conversations.axolotl">>,<<"payload">>,[],[]},
34
%   {<<"urn:xmpp:eme:0">>,<<"encryption">>,
35
%    [{<<"name">>,[<<"OMEMO">>]},
36
%     {<<"namespace">>,[<<"eu.siacs.conversations.axolotl">>]}],
37
%    []},
38
%   {<<"urn:xmpp:delay">>,<<"delay">>,[{<<"from">>,[j1]},{<<"stamp">>,[]}],[]},
39
%   {<<"http://jabber.org/protocol/address">>,<<"address">>,
40
%    [{<<"jid">>,[{j1}]},{<<"type">>,[<<"ofrom">>]}],
41
%    []},
42
%   {<<"http://jabber.org/protocol/address">>,<<"addresses">>,[],[]},
43
%   {<<"urn:xmpp:chat-markers:0">>,<<"displayed">>,
44
%    [{<<"id">>,[]},{<<"sender">>,[{j1},{j2}]}],
45
%    []},
46
%   {<<"urn:xmpp:mam:tmp">>,<<"archived">>,[{<<"by">>,[]},{<<"id">>,[]}],[]},
47
%   {<<"urn:xmpp:sid:0">>,<<"stanza-id">>,[{<<"by">>,[]},{<<"id">>,[]}],[]},
48
%   {<<"urn:xmpp:receipts">>,<<"request">>,[],[]},
49
%   {<<"urn:xmpp:chat-markers:0">>,<<"received">>,[{<<"id">>,[]}],[]},
50
%   {<<"urn:xmpp:receipts">>,<<"received">>,[{<<"id">>,[]}],[]},
51
%   {<<"http://jabber.org/protocol/chatstates">>,<<"active">>,[],[]},
52
%   {<<"http://jabber.org/protocol/muc#user">>,<<"invite">>,
53
%    [{<<"from">>,[{j1}]}],
54
%    []},
55
%   {<<"http://jabber.org/protocol/muc#user">>,<<"reason">>,[],[]},
56
%   {<<"http://jabber.org/protocol/muc#user">>,<<"x">>,[],[]},
57
%   {<<"jabber:x:conference">>,<<"x">>,[{<<"jid">>,[j2]}],[]},
58
%   {<<"jabber:client">>,<<"subject">>,[],[]},
59
%   {<<"jabber:client">>,<<"thread">>,[],[]},
60
%   {<<"http://jabber.org/protocol/pubsub#event">>,<<"event">>,[],[]},
61
%   {<<"http://jabber.org/protocol/pubsub#event">>,<<"item">>,[{<<"id">>,[]}],[]},
62
%   {<<"http://jabber.org/protocol/pubsub#event">>,<<"items">>,
63
%    [{<<"node">>,[<<"urn:xmpp:mucsub:nodes:messages">>]}],
64
%    []},
65
%   {<<"p1:push:custom">>,<<"x">>,[{<<"key">>,[]},{<<"value">>,[]}],[]},
66
%   {<<"p1:pushed">>,<<"x">>,[],[]},
67
%   {<<"urn:xmpp:message-correct:0">>,<<"replace">>,[{<<"id">>,[]}],[]},
68
%   {<<"http://jabber.org/protocol/chatstates">>,<<"composing">>,[],[]}]
69

70
encode(El, J1, J2) ->
71
  encode_child(El, <<"jabber:client">>,
×
72
    J1, J2, byte_size(J1), byte_size(J2), <<1:8>>).
73

74
encode_attr({<<"xmlns">>, _}, Acc) ->
75
  Acc;
×
76
encode_attr({N, V}, Acc) ->
77
  <<Acc/binary, 1:8, (encode_string(N))/binary,
×
78
    (encode_string(V))/binary>>.
79

80
encode_attrs(Attrs, Acc) ->
81
  lists:foldl(fun encode_attr/2, Acc, Attrs).
×
82

83
encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
84
  E1 = if
×
85
    PNs == Ns -> encode_attrs(Attrs, <<Pfx/binary, 2:8, (encode_string(Name))/binary>>);
×
86
    true -> encode_attrs(Attrs, <<Pfx/binary, 3:8, (encode_string(Ns))/binary, (encode_string(Name))/binary>>)
×
87
  end,
88
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E1/binary, 2:8>>),
×
89
  <<E2/binary, 4:8>>.
×
90

91
encode_child({xmlel, Name, Attrs, Children}, PNs, J1, J2, J1L, J2L, Pfx) ->
92
  case lists:keyfind(<<"xmlns">>, 1, Attrs) of
×
93
    false ->
94
      encode(PNs, PNs, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx);
×
95
    {_, Ns} ->
96
      encode(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
97
  end;
98
encode_child({xmlcdata, Data}, _PNs, _J1, _J2, _J1L, _J2L, Pfx) ->
99
  <<Pfx/binary, 1:8, (encode_string(Data))/binary>>.
×
100

101
encode_children(Children, PNs, J1, J2, J1L, J2L, Pfx) ->
102
  lists:foldl(
×
103
    fun(Child, Acc) ->
104
      encode_child(Child, PNs, J1, J2, J1L, J2L, Acc)
×
105
    end, Pfx, Children).
106

107
encode_string(Data) ->
108
  <<V1:4, V2:6, V3:6>> = <<(byte_size(Data)):16/unsigned-big-integer>>,
×
109
  case {V1, V2, V3} of
×
110
    {0, 0, V3} ->
111
      <<V3:8, Data/binary>>;
×
112
    {0, V2, V3} ->
113
      <<(V3 bor 64):8, V2:8, Data/binary>>;
×
114
    _ ->
115
      <<(V3 bor 64):8, (V2 bor 64):8, V1:8, Data/binary>>
×
116
  end.
117

118
encode(PNs, <<"eu.siacs.conversations.axolotl">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
119
  case Name of
×
120
    <<"key">> ->
121
      E = lists:foldl(fun
×
122
        ({<<"prekey">>, AVal}, Acc) ->
123
          case AVal of
×
124
            <<"true">> -> <<Acc/binary, 3:8>>;
×
125
            _ -> <<Acc/binary, 4:8, (encode_string(AVal))/binary>>
×
126
          end;
127
        ({<<"rid">>, AVal}, Acc) ->
128
          <<Acc/binary, 5:8, (encode_string(AVal))/binary>>;
×
129
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
130
  end, <<Pfx/binary, 5:8>>, Attrs),
131
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
132
  <<E2/binary, 4:8>>;
×
133
    <<"encrypted">> ->
134
      E = encode_attrs(Attrs, <<Pfx/binary, 12:8>>),
×
135
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
136
  <<E2/binary, 4:8>>;
×
137
    <<"header">> ->
138
      E = lists:foldl(fun
×
139
        ({<<"sid">>, AVal}, Acc) ->
140
          <<Acc/binary, 3:8, (encode_string(AVal))/binary>>;
×
141
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
142
  end, <<Pfx/binary, 13:8>>, Attrs),
143
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
144
  <<E2/binary, 4:8>>;
×
145
    <<"iv">> ->
146
      E = encode_attrs(Attrs, <<Pfx/binary, 14:8>>),
×
147
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
148
  <<E2/binary, 4:8>>;
×
149
    <<"payload">> ->
150
      E = encode_attrs(Attrs, <<Pfx/binary, 15:8>>),
×
151
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
152
  <<E2/binary, 4:8>>;
×
153
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
154
end;
155
encode(PNs, <<"jabber:client">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
156
  case Name of
×
157
    <<"message">> ->
158
      E = lists:foldl(fun
×
159
        ({<<"from">>, AVal}, Acc) ->
160
          case AVal of
×
161
            J2 -> <<Acc/binary, 3:8>>;
×
162
            <<J1:J1L/binary, Rest/binary>> -> <<Acc/binary, 4:8, (encode_string(Rest))/binary>>;
×
163
            _ -> <<Acc/binary, 5:8, (encode_string(AVal))/binary>>
×
164
          end;
165
        ({<<"id">>, AVal}, Acc) ->
166
          <<Acc/binary, 6:8, (encode_string(AVal))/binary>>;
×
167
        ({<<"to">>, AVal}, Acc) ->
168
          case AVal of
×
169
            J1 -> <<Acc/binary, 7:8>>;
×
170
            J2 -> <<Acc/binary, 8:8>>;
×
171
            <<J1:J1L/binary, Rest/binary>> -> <<Acc/binary, 9:8, (encode_string(Rest))/binary>>;
×
172
            _ -> <<Acc/binary, 10:8, (encode_string(AVal))/binary>>
×
173
          end;
174
        ({<<"type">>, AVal}, Acc) ->
175
          case AVal of
×
176
            <<"chat">> -> <<Acc/binary, 11:8>>;
×
177
            <<"groupchat">> -> <<Acc/binary, 12:8>>;
×
178
            <<"normal">> -> <<Acc/binary, 13:8>>;
×
179
            _ -> <<Acc/binary, 14:8, (encode_string(AVal))/binary>>
×
180
          end;
181
        ({<<"xml:lang">>, AVal}, Acc) ->
182
          case AVal of
×
183
            <<"en">> -> <<Acc/binary, 15:8>>;
×
184
            _ -> <<Acc/binary, 16:8, (encode_string(AVal))/binary>>
×
185
          end;
186
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
187
  end, <<Pfx/binary, 6:8>>, Attrs),
188
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
189
  <<E2/binary, 4:8>>;
×
190
    <<"body">> ->
191
      E = encode_attrs(Attrs, <<Pfx/binary, 8:8>>),
×
192
  E2 = lists:foldl(fun
×
193
    ({xmlcdata, <<73,32,115,101,110,116,32,121,111,117,32,97,110,32,79,77,69,
194
                  77,79,32,101,110,99,114,121,112,116,101,100,32,109,101,115,
195
                  115,97,103,101,32,98,117,116,32,121,111,117,114,32,99,108,
196
                  105,101,110,116,32,100,111,101,115,110,226,128,153,116,32,
197
                  115,101,101,109,32,116,111,32,115,117,112,112,111,114,116,32,
198
                  116,104,97,116,46,32,70,105,110,100,32,109,111,114,101,32,
199
                  105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,
200
                  116,116,112,115,58,47,47,99,111,110,118,101,114,115,97,116,
201
                  105,111,110,115,46,105,109,47,111,109,101,109,111>>}, Acc) -> <<Acc/binary, 9:8>>;
×
202
    (El, Acc) -> encode_child(El, Ns, J1, J2, J1L, J2L, Acc)
×
203
  end, <<E/binary, 2:8>>, Children),
204
  <<E2/binary, 4:8>>;
×
205
    <<"subject">> ->
206
      E = encode_attrs(Attrs, <<Pfx/binary, 31:8>>),
×
207
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
208
  <<E2/binary, 4:8>>;
×
209
    <<"thread">> ->
210
      E = encode_attrs(Attrs, <<Pfx/binary, 32:8>>),
×
211
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
212
  <<E2/binary, 4:8>>;
×
213
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
214
end;
215
encode(PNs, <<"urn:xmpp:hints">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
216
  case Name of
×
217
    <<"store">> ->
218
      E = encode_attrs(Attrs, <<Pfx/binary, 7:8>>),
×
219
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
220
  <<E2/binary, 4:8>>;
×
221
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
222
end;
223
encode(PNs, <<"urn:xmpp:sid:0">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
224
  case Name of
×
225
    <<"origin-id">> ->
226
      E = lists:foldl(fun
×
227
        ({<<"id">>, AVal}, Acc) ->
228
          <<Acc/binary, 3:8, (encode_string(AVal))/binary>>;
×
229
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
230
  end, <<Pfx/binary, 10:8>>, Attrs),
231
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
232
  <<E2/binary, 4:8>>;
×
233
    <<"stanza-id">> ->
234
      E = lists:foldl(fun
×
235
        ({<<"by">>, AVal}, Acc) ->
236
          <<Acc/binary, 3:8, (encode_string(AVal))/binary>>;
×
237
        ({<<"id">>, AVal}, Acc) ->
238
          <<Acc/binary, 4:8, (encode_string(AVal))/binary>>;
×
239
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
240
  end, <<Pfx/binary, 22:8>>, Attrs),
241
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
242
  <<E2/binary, 4:8>>;
×
243
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
244
end;
245
encode(PNs, <<"urn:xmpp:chat-markers:0">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
246
  case Name of
×
247
    <<"markable">> ->
248
      E = encode_attrs(Attrs, <<Pfx/binary, 11:8>>),
×
249
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
250
  <<E2/binary, 4:8>>;
×
251
    <<"displayed">> ->
252
      E = lists:foldl(fun
×
253
        ({<<"id">>, AVal}, Acc) ->
254
          <<Acc/binary, 3:8, (encode_string(AVal))/binary>>;
×
255
        ({<<"sender">>, AVal}, Acc) ->
256
          case AVal of
×
257
            <<J1:J1L/binary, Rest/binary>> -> <<Acc/binary, 4:8, (encode_string(Rest))/binary>>;
×
258
            <<J2:J2L/binary, Rest/binary>> -> <<Acc/binary, 5:8, (encode_string(Rest))/binary>>;
×
259
            _ -> <<Acc/binary, 6:8, (encode_string(AVal))/binary>>
×
260
          end;
261
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
262
  end, <<Pfx/binary, 20:8>>, Attrs),
263
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
264
  <<E2/binary, 4:8>>;
×
265
    <<"received">> ->
266
      E = lists:foldl(fun
×
267
        ({<<"id">>, AVal}, Acc) ->
268
          <<Acc/binary, 3:8, (encode_string(AVal))/binary>>;
×
269
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
270
  end, <<Pfx/binary, 24:8>>, Attrs),
271
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
272
  <<E2/binary, 4:8>>;
×
273
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
274
end;
275
encode(PNs, <<"urn:xmpp:eme:0">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
276
  case Name of
×
277
    <<"encryption">> ->
278
      E = lists:foldl(fun
×
279
        ({<<"name">>, AVal}, Acc) ->
280
          case AVal of
×
281
            <<"OMEMO">> -> <<Acc/binary, 3:8>>;
×
282
            _ -> <<Acc/binary, 4:8, (encode_string(AVal))/binary>>
×
283
          end;
284
        ({<<"namespace">>, AVal}, Acc) ->
285
          case AVal of
×
286
            <<"eu.siacs.conversations.axolotl">> -> <<Acc/binary, 5:8>>;
×
287
            _ -> <<Acc/binary, 6:8, (encode_string(AVal))/binary>>
×
288
          end;
289
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
290
  end, <<Pfx/binary, 16:8>>, Attrs),
291
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
292
  <<E2/binary, 4:8>>;
×
293
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
294
end;
295
encode(PNs, <<"urn:xmpp:delay">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
296
  case Name of
×
297
    <<"delay">> ->
298
      E = lists:foldl(fun
×
299
        ({<<"from">>, AVal}, Acc) ->
300
          case AVal of
×
301
            J1 -> <<Acc/binary, 3:8>>;
×
302
            _ -> <<Acc/binary, 4:8, (encode_string(AVal))/binary>>
×
303
          end;
304
        ({<<"stamp">>, AVal}, Acc) ->
305
          <<Acc/binary, 5:8, (encode_string(AVal))/binary>>;
×
306
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
307
  end, <<Pfx/binary, 17:8>>, Attrs),
308
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
309
  <<E2/binary, 4:8>>;
×
310
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
311
end;
312
encode(PNs, <<"http://jabber.org/protocol/address">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
313
  case Name of
×
314
    <<"address">> ->
315
      E = lists:foldl(fun
×
316
        ({<<"jid">>, AVal}, Acc) ->
317
          case AVal of
×
318
            <<J1:J1L/binary, Rest/binary>> -> <<Acc/binary, 3:8, (encode_string(Rest))/binary>>;
×
319
            _ -> <<Acc/binary, 4:8, (encode_string(AVal))/binary>>
×
320
          end;
321
        ({<<"type">>, AVal}, Acc) ->
322
          case AVal of
×
323
            <<"ofrom">> -> <<Acc/binary, 5:8>>;
×
324
            _ -> <<Acc/binary, 6:8, (encode_string(AVal))/binary>>
×
325
          end;
326
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
327
  end, <<Pfx/binary, 18:8>>, Attrs),
328
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
329
  <<E2/binary, 4:8>>;
×
330
    <<"addresses">> ->
331
      E = encode_attrs(Attrs, <<Pfx/binary, 19:8>>),
×
332
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
333
  <<E2/binary, 4:8>>;
×
334
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
335
end;
336
encode(PNs, <<"urn:xmpp:mam:tmp">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
337
  case Name of
×
338
    <<"archived">> ->
339
      E = lists:foldl(fun
×
340
        ({<<"by">>, AVal}, Acc) ->
341
          <<Acc/binary, 3:8, (encode_string(AVal))/binary>>;
×
342
        ({<<"id">>, AVal}, Acc) ->
343
          <<Acc/binary, 4:8, (encode_string(AVal))/binary>>;
×
344
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
345
  end, <<Pfx/binary, 21:8>>, Attrs),
346
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
347
  <<E2/binary, 4:8>>;
×
348
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
349
end;
350
encode(PNs, <<"urn:xmpp:receipts">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
351
  case Name of
×
352
    <<"request">> ->
353
      E = encode_attrs(Attrs, <<Pfx/binary, 23:8>>),
×
354
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
355
  <<E2/binary, 4:8>>;
×
356
    <<"received">> ->
357
      E = lists:foldl(fun
×
358
        ({<<"id">>, AVal}, Acc) ->
359
          <<Acc/binary, 3:8, (encode_string(AVal))/binary>>;
×
360
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
361
  end, <<Pfx/binary, 25:8>>, Attrs),
362
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
363
  <<E2/binary, 4:8>>;
×
364
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
365
end;
366
encode(PNs, <<"http://jabber.org/protocol/chatstates">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
367
  case Name of
×
368
    <<"active">> ->
369
      E = encode_attrs(Attrs, <<Pfx/binary, 26:8>>),
×
370
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
371
  <<E2/binary, 4:8>>;
×
372
    <<"composing">> ->
373
      E = encode_attrs(Attrs, <<Pfx/binary, 39:8>>),
×
374
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
375
  <<E2/binary, 4:8>>;
×
376
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
377
end;
378
encode(PNs, <<"http://jabber.org/protocol/muc#user">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
379
  case Name of
×
380
    <<"invite">> ->
381
      E = lists:foldl(fun
×
382
        ({<<"from">>, AVal}, Acc) ->
383
          case AVal of
×
384
            <<J1:J1L/binary, Rest/binary>> -> <<Acc/binary, 3:8, (encode_string(Rest))/binary>>;
×
385
            _ -> <<Acc/binary, 4:8, (encode_string(AVal))/binary>>
×
386
          end;
387
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
388
  end, <<Pfx/binary, 27:8>>, Attrs),
389
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
390
  <<E2/binary, 4:8>>;
×
391
    <<"reason">> ->
392
      E = encode_attrs(Attrs, <<Pfx/binary, 28:8>>),
×
393
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
394
  <<E2/binary, 4:8>>;
×
395
    <<"x">> ->
396
      E = encode_attrs(Attrs, <<Pfx/binary, 29:8>>),
×
397
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
398
  <<E2/binary, 4:8>>;
×
399
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
400
end;
401
encode(PNs, <<"jabber:x:conference">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
402
  case Name of
×
403
    <<"x">> ->
404
      E = lists:foldl(fun
×
405
        ({<<"jid">>, AVal}, Acc) ->
406
          case AVal of
×
407
            J2 -> <<Acc/binary, 3:8>>;
×
408
            _ -> <<Acc/binary, 4:8, (encode_string(AVal))/binary>>
×
409
          end;
410
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
411
  end, <<Pfx/binary, 30:8>>, Attrs),
412
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
413
  <<E2/binary, 4:8>>;
×
414
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
415
end;
416
encode(PNs, <<"http://jabber.org/protocol/pubsub#event">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
417
  case Name of
×
418
    <<"event">> ->
419
      E = encode_attrs(Attrs, <<Pfx/binary, 33:8>>),
×
420
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
421
  <<E2/binary, 4:8>>;
×
422
    <<"item">> ->
423
      E = lists:foldl(fun
×
424
        ({<<"id">>, AVal}, Acc) ->
425
          <<Acc/binary, 3:8, (encode_string(AVal))/binary>>;
×
426
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
427
  end, <<Pfx/binary, 34:8>>, Attrs),
428
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
429
  <<E2/binary, 4:8>>;
×
430
    <<"items">> ->
431
      E = lists:foldl(fun
×
432
        ({<<"node">>, AVal}, Acc) ->
433
          case AVal of
×
434
            <<"urn:xmpp:mucsub:nodes:messages">> -> <<Acc/binary, 3:8>>;
×
435
            _ -> <<Acc/binary, 4:8, (encode_string(AVal))/binary>>
×
436
          end;
437
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
438
  end, <<Pfx/binary, 35:8>>, Attrs),
439
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
440
  <<E2/binary, 4:8>>;
×
441
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
442
end;
443
encode(PNs, <<"p1:push:custom">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
444
  case Name of
×
445
    <<"x">> ->
446
      E = lists:foldl(fun
×
447
        ({<<"key">>, AVal}, Acc) ->
448
          <<Acc/binary, 3:8, (encode_string(AVal))/binary>>;
×
449
        ({<<"value">>, AVal}, Acc) ->
450
          <<Acc/binary, 4:8, (encode_string(AVal))/binary>>;
×
451
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
452
  end, <<Pfx/binary, 36:8>>, Attrs),
453
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
454
  <<E2/binary, 4:8>>;
×
455
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
456
end;
457
encode(PNs, <<"p1:pushed">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
458
  case Name of
×
459
    <<"x">> ->
460
      E = encode_attrs(Attrs, <<Pfx/binary, 37:8>>),
×
461
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
462
  <<E2/binary, 4:8>>;
×
463
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
464
end;
465
encode(PNs, <<"urn:xmpp:message-correct:0">> = Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
466
  case Name of
×
467
    <<"replace">> ->
468
      E = lists:foldl(fun
×
469
        ({<<"id">>, AVal}, Acc) ->
470
          <<Acc/binary, 3:8, (encode_string(AVal))/binary>>;
×
471
    (Attr, Acc) -> encode_attr(Attr, Acc)
×
472
  end, <<Pfx/binary, 38:8>>, Attrs),
473
  E2 = encode_children(Children, Ns, J1, J2, J1L, J2L, <<E/binary, 2:8>>),
×
474
  <<E2/binary, 4:8>>;
×
475
  _ -> encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx)
×
476
end;
477
encode(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx) ->
478
  encode_el(PNs, Ns, Name, Attrs, Children, J1, J2, J1L, J2L, Pfx).
×
479

480
decode(<<$<, _/binary>> = Data, _J1, _J2) ->
UNCOV
481
  fxml_stream:parse_element(Data);
4,458✔
482
decode(<<1:8, Rest/binary>>, J1, J2) ->
483
  try decode(Rest, <<"jabber:client">>, J1, J2, false) of
×
484
    {El, _} -> El
×
485
  catch throw:loop_detected ->
486
    {error, {loop_detected, <<"Compressed data corrupted">>}}
×
487
  end.
488

489
decode_string(Data) ->
490
  case Data of
×
491
    <<0:2, L:6, Str:L/binary, Rest/binary>> ->
492
      {Str, Rest};
×
493
    <<1:2, L1:6, 0:2, L2:6, Rest/binary>> ->
494
      L = L2*64 + L1,
×
495
      <<Str:L/binary, Rest2/binary>> = Rest,
×
496
      {Str, Rest2};
×
497
    <<1:2, L1:6, 1:2, L2:6, L3:8, Rest/binary>> ->
498
      L = (L3*64 + L2)*64 + L1,
×
499
      <<Str:L/binary, Rest2/binary>> = Rest,
×
500
      {Str, Rest2}
×
501
  end.
502

503
decode_child(<<1:8, Rest/binary>>, _PNs, _J1, _J2, _) ->
504
  {Text, Rest2} = decode_string(Rest),
×
505
  {{xmlcdata, Text}, Rest2};
×
506
decode_child(<<2:8, Rest/binary>>, PNs, J1, J2, _) ->
507
  {Name, Rest2} = decode_string(Rest),
×
508
  {Attrs, Rest3} = decode_attrs(Rest2),
×
509
  {Children, Rest4} = decode_children(Rest3, PNs, J1, J2),
×
510
  {{xmlel, Name, Attrs, Children}, Rest4};
×
511
decode_child(<<3:8, Rest/binary>>, PNs, J1, J2, _) ->
512
  {Ns, Rest2} = decode_string(Rest),
×
513
  {Name, Rest3} = decode_string(Rest2),
×
514
  {Attrs, Rest4} = decode_attrs(Rest3),
×
515
  {Children, Rest5} = decode_children(Rest4, Ns, J1, J2),
×
516
  {{xmlel, Name, add_ns(PNs, Ns, Attrs), Children}, Rest5};
×
517
decode_child(<<4:8, Rest/binary>>, _PNs, _J1, _J2, _) ->
518
  {stop, Rest};
×
519
decode_child(_Other, _PNs, _J1, _J2, true) ->
520
  throw(loop_detected);
×
521
decode_child(Other, PNs, J1, J2, _) ->
522
  decode(Other, PNs, J1, J2, true).
×
523

524
decode_children(Data, PNs, J1, J2) ->
525
  prefix_map(fun(Data2) -> decode(Data2, PNs, J1, J2, false) end, Data).
×
526

527
decode_attr(<<1:8, Rest/binary>>) ->
528
  {Name, Rest2} = decode_string(Rest),
×
529
  {Val, Rest3} = decode_string(Rest2),
×
530
  {{Name, Val}, Rest3};
×
531
decode_attr(<<2:8, Rest/binary>>) ->
532
  {stop, Rest}.
×
533

534
decode_attrs(Data) ->
535
  prefix_map(fun decode_attr/1, Data).
×
536

537
prefix_map(F, Data) ->
538
  prefix_map(F, Data, []).
×
539

540
prefix_map(F, Data, Acc) ->
541
  case F(Data) of
×
542
    {stop, Rest} ->
543
      {lists:reverse(Acc), Rest};
×
544
    {Val, Rest} ->
545
      prefix_map(F, Rest, [Val | Acc])
×
546
  end.
547

548
add_ns(Ns, Ns, Attrs) ->
549
  Attrs;
×
550
add_ns(_, Ns, Attrs) ->
551
  [{<<"xmlns">>, Ns} | Attrs].
×
552

553
decode(<<5:8, Rest/binary>>, PNs, J1, J2, _) ->
554
  Ns = <<"eu.siacs.conversations.axolotl">>,
×
555
  {Attrs, Rest2} = prefix_map(fun
×
556
    (<<3:8, Rest3/binary>>) ->
557
      {{<<"prekey">>, <<"true">>}, Rest3};
×
558
    (<<4:8, Rest3/binary>>) ->
559
      {AVal, Rest4} = decode_string(Rest3),
×
560
      {{<<"prekey">>, AVal}, Rest4};
×
561
    (<<5:8, Rest3/binary>>) ->
562
      {AVal, Rest4} = decode_string(Rest3),
×
563
      {{<<"rid">>, AVal}, Rest4};
×
564
    (<<2:8, Rest3/binary>>) ->
565
      {stop, Rest3};
×
566
    (Data) ->
567
      decode_attr(Data)
×
568
  end, Rest),
569
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
570
  {{xmlel, <<"key">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
571
decode(<<12:8, Rest/binary>>, PNs, J1, J2, _) ->
572
  Ns = <<"eu.siacs.conversations.axolotl">>,
×
573
  {Attrs, Rest2} = decode_attrs(Rest),
×
574
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
575
  {{xmlel, <<"encrypted">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
576
decode(<<13:8, Rest/binary>>, PNs, J1, J2, _) ->
577
  Ns = <<"eu.siacs.conversations.axolotl">>,
×
578
  {Attrs, Rest2} = prefix_map(fun
×
579
    (<<3:8, Rest3/binary>>) ->
580
      {AVal, Rest4} = decode_string(Rest3),
×
581
      {{<<"sid">>, AVal}, Rest4};
×
582
    (<<2:8, Rest3/binary>>) ->
583
      {stop, Rest3};
×
584
    (Data) ->
585
      decode_attr(Data)
×
586
  end, Rest),
587
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
588
  {{xmlel, <<"header">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
589
decode(<<14:8, Rest/binary>>, PNs, J1, J2, _) ->
590
  Ns = <<"eu.siacs.conversations.axolotl">>,
×
591
  {Attrs, Rest2} = decode_attrs(Rest),
×
592
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
593
  {{xmlel, <<"iv">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
594
decode(<<15:8, Rest/binary>>, PNs, J1, J2, _) ->
595
  Ns = <<"eu.siacs.conversations.axolotl">>,
×
596
  {Attrs, Rest2} = decode_attrs(Rest),
×
597
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
598
  {{xmlel, <<"payload">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
599
decode(<<6:8, Rest/binary>>, PNs, J1, J2, _) ->
600
  Ns = <<"jabber:client">>,
×
601
  {Attrs, Rest2} = prefix_map(fun
×
602
    (<<3:8, Rest3/binary>>) ->
603
      {{<<"from">>, J2}, Rest3};
×
604
    (<<4:8, Rest3/binary>>) ->
605
      {AVal, Rest4} = decode_string(Rest3),
×
606
      {{<<"from">>, <<J1/binary, AVal/binary>>}, Rest4};
×
607
    (<<5:8, Rest3/binary>>) ->
608
      {AVal, Rest4} = decode_string(Rest3),
×
609
      {{<<"from">>, AVal}, Rest4};
×
610
    (<<6:8, Rest3/binary>>) ->
611
      {AVal, Rest4} = decode_string(Rest3),
×
612
      {{<<"id">>, AVal}, Rest4};
×
613
    (<<7:8, Rest3/binary>>) ->
614
      {{<<"to">>, J1}, Rest3};
×
615
    (<<8:8, Rest3/binary>>) ->
616
      {{<<"to">>, J2}, Rest3};
×
617
    (<<9:8, Rest3/binary>>) ->
618
      {AVal, Rest4} = decode_string(Rest3),
×
619
      {{<<"to">>, <<J1/binary, AVal/binary>>}, Rest4};
×
620
    (<<10:8, Rest3/binary>>) ->
621
      {AVal, Rest4} = decode_string(Rest3),
×
622
      {{<<"to">>, AVal}, Rest4};
×
623
    (<<11:8, Rest3/binary>>) ->
624
      {{<<"type">>, <<"chat">>}, Rest3};
×
625
    (<<12:8, Rest3/binary>>) ->
626
      {{<<"type">>, <<"groupchat">>}, Rest3};
×
627
    (<<13:8, Rest3/binary>>) ->
628
      {{<<"type">>, <<"normal">>}, Rest3};
×
629
    (<<14:8, Rest3/binary>>) ->
630
      {AVal, Rest4} = decode_string(Rest3),
×
631
      {{<<"type">>, AVal}, Rest4};
×
632
    (<<15:8, Rest3/binary>>) ->
633
      {{<<"xml:lang">>, <<"en">>}, Rest3};
×
634
    (<<16:8, Rest3/binary>>) ->
635
      {AVal, Rest4} = decode_string(Rest3),
×
636
      {{<<"xml:lang">>, AVal}, Rest4};
×
637
    (<<2:8, Rest3/binary>>) ->
638
      {stop, Rest3};
×
639
    (Data) ->
640
      decode_attr(Data)
×
641
  end, Rest),
642
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
643
  {{xmlel, <<"message">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
644
decode(<<8:8, Rest/binary>>, PNs, J1, J2, _) ->
645
  Ns = <<"jabber:client">>,
×
646
  {Attrs, Rest2} = decode_attrs(Rest),
×
647
  {Children, Rest6} = prefix_map(fun    (<<9:8, Rest5/binary>>) ->
×
648
      {{xmlcdata, <<73,32,115,101,110,116,32,121,111,117,32,97,110,32,79,77,69,
×
649
                    77,79,32,101,110,99,114,121,112,116,101,100,32,109,101,115,
650
                    115,97,103,101,32,98,117,116,32,121,111,117,114,32,99,108,
651
                    105,101,110,116,32,100,111,101,115,110,226,128,153,116,32,
652
                    115,101,101,109,32,116,111,32,115,117,112,112,111,114,116,
653
                    32,116,104,97,116,46,32,70,105,110,100,32,109,111,114,101,
654
                    32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,
655
                    32,104,116,116,112,115,58,47,47,99,111,110,118,101,114,115,
656
                    97,116,105,111,110,115,46,105,109,47,111,109,101,109,111>>}, Rest5};
657
    (Other) ->
658
      decode_child(Other, Ns, J1, J2, false)
×
659
  end, Rest2),
660
  {{xmlel, <<"body">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
661
decode(<<31:8, Rest/binary>>, PNs, J1, J2, _) ->
662
  Ns = <<"jabber:client">>,
×
663
  {Attrs, Rest2} = decode_attrs(Rest),
×
664
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
665
  {{xmlel, <<"subject">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
666
decode(<<32:8, Rest/binary>>, PNs, J1, J2, _) ->
667
  Ns = <<"jabber:client">>,
×
668
  {Attrs, Rest2} = decode_attrs(Rest),
×
669
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
670
  {{xmlel, <<"thread">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
671
decode(<<7:8, Rest/binary>>, PNs, J1, J2, _) ->
672
  Ns = <<"urn:xmpp:hints">>,
×
673
  {Attrs, Rest2} = decode_attrs(Rest),
×
674
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
675
  {{xmlel, <<"store">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
676
decode(<<10:8, Rest/binary>>, PNs, J1, J2, _) ->
677
  Ns = <<"urn:xmpp:sid:0">>,
×
678
  {Attrs, Rest2} = prefix_map(fun
×
679
    (<<3:8, Rest3/binary>>) ->
680
      {AVal, Rest4} = decode_string(Rest3),
×
681
      {{<<"id">>, AVal}, Rest4};
×
682
    (<<2:8, Rest3/binary>>) ->
683
      {stop, Rest3};
×
684
    (Data) ->
685
      decode_attr(Data)
×
686
  end, Rest),
687
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
688
  {{xmlel, <<"origin-id">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
689
decode(<<22:8, Rest/binary>>, PNs, J1, J2, _) ->
690
  Ns = <<"urn:xmpp:sid:0">>,
×
691
  {Attrs, Rest2} = prefix_map(fun
×
692
    (<<3:8, Rest3/binary>>) ->
693
      {AVal, Rest4} = decode_string(Rest3),
×
694
      {{<<"by">>, AVal}, Rest4};
×
695
    (<<4:8, Rest3/binary>>) ->
696
      {AVal, Rest4} = decode_string(Rest3),
×
697
      {{<<"id">>, AVal}, Rest4};
×
698
    (<<2:8, Rest3/binary>>) ->
699
      {stop, Rest3};
×
700
    (Data) ->
701
      decode_attr(Data)
×
702
  end, Rest),
703
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
704
  {{xmlel, <<"stanza-id">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
705
decode(<<11:8, Rest/binary>>, PNs, J1, J2, _) ->
706
  Ns = <<"urn:xmpp:chat-markers:0">>,
×
707
  {Attrs, Rest2} = decode_attrs(Rest),
×
708
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
709
  {{xmlel, <<"markable">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
710
decode(<<20:8, Rest/binary>>, PNs, J1, J2, _) ->
711
  Ns = <<"urn:xmpp:chat-markers:0">>,
×
712
  {Attrs, Rest2} = prefix_map(fun
×
713
    (<<3:8, Rest3/binary>>) ->
714
      {AVal, Rest4} = decode_string(Rest3),
×
715
      {{<<"id">>, AVal}, Rest4};
×
716
    (<<4:8, Rest3/binary>>) ->
717
      {AVal, Rest4} = decode_string(Rest3),
×
718
      {{<<"sender">>, <<J1/binary, AVal/binary>>}, Rest4};
×
719
    (<<5:8, Rest3/binary>>) ->
720
      {AVal, Rest4} = decode_string(Rest3),
×
721
      {{<<"sender">>, <<J2/binary, AVal/binary>>}, Rest4};
×
722
    (<<6:8, Rest3/binary>>) ->
723
      {AVal, Rest4} = decode_string(Rest3),
×
724
      {{<<"sender">>, AVal}, Rest4};
×
725
    (<<2:8, Rest3/binary>>) ->
726
      {stop, Rest3};
×
727
    (Data) ->
728
      decode_attr(Data)
×
729
  end, Rest),
730
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
731
  {{xmlel, <<"displayed">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
732
decode(<<24:8, Rest/binary>>, PNs, J1, J2, _) ->
733
  Ns = <<"urn:xmpp:chat-markers:0">>,
×
734
  {Attrs, Rest2} = prefix_map(fun
×
735
    (<<3:8, Rest3/binary>>) ->
736
      {AVal, Rest4} = decode_string(Rest3),
×
737
      {{<<"id">>, AVal}, Rest4};
×
738
    (<<2:8, Rest3/binary>>) ->
739
      {stop, Rest3};
×
740
    (Data) ->
741
      decode_attr(Data)
×
742
  end, Rest),
743
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
744
  {{xmlel, <<"received">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
745
decode(<<16:8, Rest/binary>>, PNs, J1, J2, _) ->
746
  Ns = <<"urn:xmpp:eme:0">>,
×
747
  {Attrs, Rest2} = prefix_map(fun
×
748
    (<<3:8, Rest3/binary>>) ->
749
      {{<<"name">>, <<"OMEMO">>}, Rest3};
×
750
    (<<4:8, Rest3/binary>>) ->
751
      {AVal, Rest4} = decode_string(Rest3),
×
752
      {{<<"name">>, AVal}, Rest4};
×
753
    (<<5:8, Rest3/binary>>) ->
754
      {{<<"namespace">>, <<"eu.siacs.conversations.axolotl">>}, Rest3};
×
755
    (<<6:8, Rest3/binary>>) ->
756
      {AVal, Rest4} = decode_string(Rest3),
×
757
      {{<<"namespace">>, AVal}, Rest4};
×
758
    (<<2:8, Rest3/binary>>) ->
759
      {stop, Rest3};
×
760
    (Data) ->
761
      decode_attr(Data)
×
762
  end, Rest),
763
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
764
  {{xmlel, <<"encryption">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
765
decode(<<17:8, Rest/binary>>, PNs, J1, J2, _) ->
766
  Ns = <<"urn:xmpp:delay">>,
×
767
  {Attrs, Rest2} = prefix_map(fun
×
768
    (<<3:8, Rest3/binary>>) ->
769
      {{<<"from">>, J1}, Rest3};
×
770
    (<<4:8, Rest3/binary>>) ->
771
      {AVal, Rest4} = decode_string(Rest3),
×
772
      {{<<"from">>, AVal}, Rest4};
×
773
    (<<5:8, Rest3/binary>>) ->
774
      {AVal, Rest4} = decode_string(Rest3),
×
775
      {{<<"stamp">>, AVal}, Rest4};
×
776
    (<<2:8, Rest3/binary>>) ->
777
      {stop, Rest3};
×
778
    (Data) ->
779
      decode_attr(Data)
×
780
  end, Rest),
781
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
782
  {{xmlel, <<"delay">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
783
decode(<<18:8, Rest/binary>>, PNs, J1, J2, _) ->
784
  Ns = <<"http://jabber.org/protocol/address">>,
×
785
  {Attrs, Rest2} = prefix_map(fun
×
786
    (<<3:8, Rest3/binary>>) ->
787
      {AVal, Rest4} = decode_string(Rest3),
×
788
      {{<<"jid">>, <<J1/binary, AVal/binary>>}, Rest4};
×
789
    (<<4:8, Rest3/binary>>) ->
790
      {AVal, Rest4} = decode_string(Rest3),
×
791
      {{<<"jid">>, AVal}, Rest4};
×
792
    (<<5:8, Rest3/binary>>) ->
793
      {{<<"type">>, <<"ofrom">>}, Rest3};
×
794
    (<<6:8, Rest3/binary>>) ->
795
      {AVal, Rest4} = decode_string(Rest3),
×
796
      {{<<"type">>, AVal}, Rest4};
×
797
    (<<2:8, Rest3/binary>>) ->
798
      {stop, Rest3};
×
799
    (Data) ->
800
      decode_attr(Data)
×
801
  end, Rest),
802
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
803
  {{xmlel, <<"address">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
804
decode(<<19:8, Rest/binary>>, PNs, J1, J2, _) ->
805
  Ns = <<"http://jabber.org/protocol/address">>,
×
806
  {Attrs, Rest2} = decode_attrs(Rest),
×
807
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
808
  {{xmlel, <<"addresses">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
809
decode(<<21:8, Rest/binary>>, PNs, J1, J2, _) ->
810
  Ns = <<"urn:xmpp:mam:tmp">>,
×
811
  {Attrs, Rest2} = prefix_map(fun
×
812
    (<<3:8, Rest3/binary>>) ->
813
      {AVal, Rest4} = decode_string(Rest3),
×
814
      {{<<"by">>, AVal}, Rest4};
×
815
    (<<4:8, Rest3/binary>>) ->
816
      {AVal, Rest4} = decode_string(Rest3),
×
817
      {{<<"id">>, AVal}, Rest4};
×
818
    (<<2:8, Rest3/binary>>) ->
819
      {stop, Rest3};
×
820
    (Data) ->
821
      decode_attr(Data)
×
822
  end, Rest),
823
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
824
  {{xmlel, <<"archived">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
825
decode(<<23:8, Rest/binary>>, PNs, J1, J2, _) ->
826
  Ns = <<"urn:xmpp:receipts">>,
×
827
  {Attrs, Rest2} = decode_attrs(Rest),
×
828
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
829
  {{xmlel, <<"request">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
830
decode(<<25:8, Rest/binary>>, PNs, J1, J2, _) ->
831
  Ns = <<"urn:xmpp:receipts">>,
×
832
  {Attrs, Rest2} = prefix_map(fun
×
833
    (<<3:8, Rest3/binary>>) ->
834
      {AVal, Rest4} = decode_string(Rest3),
×
835
      {{<<"id">>, AVal}, Rest4};
×
836
    (<<2:8, Rest3/binary>>) ->
837
      {stop, Rest3};
×
838
    (Data) ->
839
      decode_attr(Data)
×
840
  end, Rest),
841
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
842
  {{xmlel, <<"received">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
843
decode(<<26:8, Rest/binary>>, PNs, J1, J2, _) ->
844
  Ns = <<"http://jabber.org/protocol/chatstates">>,
×
845
  {Attrs, Rest2} = decode_attrs(Rest),
×
846
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
847
  {{xmlel, <<"active">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
848
decode(<<39:8, Rest/binary>>, PNs, J1, J2, _) ->
849
  Ns = <<"http://jabber.org/protocol/chatstates">>,
×
850
  {Attrs, Rest2} = decode_attrs(Rest),
×
851
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
852
  {{xmlel, <<"composing">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
853
decode(<<27:8, Rest/binary>>, PNs, J1, J2, _) ->
854
  Ns = <<"http://jabber.org/protocol/muc#user">>,
×
855
  {Attrs, Rest2} = prefix_map(fun
×
856
    (<<3:8, Rest3/binary>>) ->
857
      {AVal, Rest4} = decode_string(Rest3),
×
858
      {{<<"from">>, <<J1/binary, AVal/binary>>}, Rest4};
×
859
    (<<4:8, Rest3/binary>>) ->
860
      {AVal, Rest4} = decode_string(Rest3),
×
861
      {{<<"from">>, AVal}, Rest4};
×
862
    (<<2:8, Rest3/binary>>) ->
863
      {stop, Rest3};
×
864
    (Data) ->
865
      decode_attr(Data)
×
866
  end, Rest),
867
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
868
  {{xmlel, <<"invite">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
869
decode(<<28:8, Rest/binary>>, PNs, J1, J2, _) ->
870
  Ns = <<"http://jabber.org/protocol/muc#user">>,
×
871
  {Attrs, Rest2} = decode_attrs(Rest),
×
872
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
873
  {{xmlel, <<"reason">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
874
decode(<<29:8, Rest/binary>>, PNs, J1, J2, _) ->
875
  Ns = <<"http://jabber.org/protocol/muc#user">>,
×
876
  {Attrs, Rest2} = decode_attrs(Rest),
×
877
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
878
  {{xmlel, <<"x">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
879
decode(<<30:8, Rest/binary>>, PNs, J1, J2, _) ->
880
  Ns = <<"jabber:x:conference">>,
×
881
  {Attrs, Rest2} = prefix_map(fun
×
882
    (<<3:8, Rest3/binary>>) ->
883
      {{<<"jid">>, J2}, Rest3};
×
884
    (<<4:8, Rest3/binary>>) ->
885
      {AVal, Rest4} = decode_string(Rest3),
×
886
      {{<<"jid">>, AVal}, Rest4};
×
887
    (<<2:8, Rest3/binary>>) ->
888
      {stop, Rest3};
×
889
    (Data) ->
890
      decode_attr(Data)
×
891
  end, Rest),
892
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
893
  {{xmlel, <<"x">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
894
decode(<<33:8, Rest/binary>>, PNs, J1, J2, _) ->
895
  Ns = <<"http://jabber.org/protocol/pubsub#event">>,
×
896
  {Attrs, Rest2} = decode_attrs(Rest),
×
897
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
898
  {{xmlel, <<"event">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
899
decode(<<34:8, Rest/binary>>, PNs, J1, J2, _) ->
900
  Ns = <<"http://jabber.org/protocol/pubsub#event">>,
×
901
  {Attrs, Rest2} = prefix_map(fun
×
902
    (<<3:8, Rest3/binary>>) ->
903
      {AVal, Rest4} = decode_string(Rest3),
×
904
      {{<<"id">>, AVal}, Rest4};
×
905
    (<<2:8, Rest3/binary>>) ->
906
      {stop, Rest3};
×
907
    (Data) ->
908
      decode_attr(Data)
×
909
  end, Rest),
910
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
911
  {{xmlel, <<"item">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
912
decode(<<35:8, Rest/binary>>, PNs, J1, J2, _) ->
913
  Ns = <<"http://jabber.org/protocol/pubsub#event">>,
×
914
  {Attrs, Rest2} = prefix_map(fun
×
915
    (<<3:8, Rest3/binary>>) ->
916
      {{<<"node">>, <<"urn:xmpp:mucsub:nodes:messages">>}, Rest3};
×
917
    (<<4:8, Rest3/binary>>) ->
918
      {AVal, Rest4} = decode_string(Rest3),
×
919
      {{<<"node">>, AVal}, Rest4};
×
920
    (<<2:8, Rest3/binary>>) ->
921
      {stop, Rest3};
×
922
    (Data) ->
923
      decode_attr(Data)
×
924
  end, Rest),
925
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
926
  {{xmlel, <<"items">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
927
decode(<<36:8, Rest/binary>>, PNs, J1, J2, _) ->
928
  Ns = <<"p1:push:custom">>,
×
929
  {Attrs, Rest2} = prefix_map(fun
×
930
    (<<3:8, Rest3/binary>>) ->
931
      {AVal, Rest4} = decode_string(Rest3),
×
932
      {{<<"key">>, AVal}, Rest4};
×
933
    (<<4:8, Rest3/binary>>) ->
934
      {AVal, Rest4} = decode_string(Rest3),
×
935
      {{<<"value">>, AVal}, Rest4};
×
936
    (<<2:8, Rest3/binary>>) ->
937
      {stop, Rest3};
×
938
    (Data) ->
939
      decode_attr(Data)
×
940
  end, Rest),
941
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
942
  {{xmlel, <<"x">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
943
decode(<<37:8, Rest/binary>>, PNs, J1, J2, _) ->
944
  Ns = <<"p1:pushed">>,
×
945
  {Attrs, Rest2} = decode_attrs(Rest),
×
946
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
947
  {{xmlel, <<"x">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
948
decode(<<38:8, Rest/binary>>, PNs, J1, J2, _) ->
949
  Ns = <<"urn:xmpp:message-correct:0">>,
×
950
  {Attrs, Rest2} = prefix_map(fun
×
951
    (<<3:8, Rest3/binary>>) ->
952
      {AVal, Rest4} = decode_string(Rest3),
×
953
      {{<<"id">>, AVal}, Rest4};
×
954
    (<<2:8, Rest3/binary>>) ->
955
      {stop, Rest3};
×
956
    (Data) ->
957
      decode_attr(Data)
×
958
  end, Rest),
959
  {Children, Rest6} = decode_children(Rest2, Ns, J1, J2),
×
960
  {{xmlel, <<"replace">>, add_ns(PNs, Ns, Attrs), Children}, Rest6};
×
961
decode(Other, PNs, J1, J2, Loop) ->
962
  decode_child(Other, PNs, J1, J2, Loop).
×
963

STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc