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

processone / ejabberd / 1058

05 Jul 2025 01:19PM UTC coverage: 33.387% (-0.2%) from 33.621%
1058

Pull #4408

github

web-flow
Merge 75fa1fdea into 6b47d3eb0
Pull Request #4408: mod_pubsub_serverinfo

0 of 327 new or added lines in 3 files covered. (0.0%)

97 existing lines in 1 file now uncovered.

15137 of 45338 relevant lines covered (33.39%)

632.74 hits per line

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

0.0
/src/pubsub_serverinfo_codec.erl
1
%% Created automatically by XML generator (fxml_gen.erl)
2
%% Source: pubsub_serverinfo_codec.spec
3

4
-module(pubsub_serverinfo_codec).
5

6
-compile(export_all).
7

NEW
8
decode(El) -> decode(El, <<>>, []).
×
9

NEW
10
decode(El, Opts) -> decode(El, <<>>, Opts).
×
11

12
decode({xmlel, Name, Attrs, _} = El, TopXMLNS, Opts) ->
NEW
13
    XMLNS = get_attr(<<"xmlns">>, Attrs, TopXMLNS),
×
NEW
14
    case get_mod(Name, XMLNS) of
×
15
        undefined when XMLNS == <<>> ->
NEW
16
            erlang:error({pubsub_serverinfo_codec,
×
17
                          {missing_tag_xmlns, Name}});
18
        undefined ->
NEW
19
            erlang:error({pubsub_serverinfo_codec,
×
20
                          {unknown_tag, Name, XMLNS}});
NEW
21
        Mod -> Mod:do_decode(Name, XMLNS, El, Opts)
×
22
    end.
23

NEW
24
encode(El) -> encode(El, <<>>).
×
25

NEW
26
encode({xmlel, _, _, _} = El, _) -> El;
×
NEW
27
encode({xmlcdata, _} = CData, _) -> CData;
×
28
encode(El, TopXMLNS) ->
NEW
29
    Mod = get_mod(El),
×
NEW
30
    Mod:do_encode(El, TopXMLNS).
×
31

32

33
get_name(El) ->
NEW
34
    Mod = get_mod(El),
×
NEW
35
    Mod:do_get_name(El).
×
36

37
get_ns(El) ->
NEW
38
    Mod = get_mod(El),
×
NEW
39
    Mod:do_get_ns(El).
×
40

41
is_known_tag({xmlel, Name, Attrs, _}, TopXMLNS) ->
NEW
42
    XMLNS = get_attr(<<"xmlns">>, Attrs, TopXMLNS),
×
NEW
43
    get_mod(Name, XMLNS) /= undefined.
×
44

45
get_els(Term) ->
NEW
46
    Mod = get_mod(Term),
×
NEW
47
    Mod:get_els(Term).
×
48

49
set_els(Term, Els) ->
NEW
50
    Mod = get_mod(Term),
×
NEW
51
    Mod:set_els(Term, Els).
×
52

53
do_decode(<<"connection">>, <<"urn:xmpp:serverinfo:0">>,
54
          El, Opts) ->
NEW
55
    decode_pubsub_serverinfo_connection(<<"urn:xmpp:serverinfo:0">>,
×
56
                                        Opts,
57
                                        El);
58
do_decode(<<"remote-domain">>,
59
          <<"urn:xmpp:serverinfo:0">>, El, Opts) ->
NEW
60
    decode_pubsub_serverinfo_remote_domain(<<"urn:xmpp:serverinfo:0">>,
×
61
                                           Opts,
62
                                           El);
63
do_decode(<<"federation">>, <<"urn:xmpp:serverinfo:0">>,
64
          El, Opts) ->
NEW
65
    decode_pubsub_serverinfo_federation(<<"urn:xmpp:serverinfo:0">>,
×
66
                                        Opts,
67
                                        El);
68
do_decode(<<"domain">>, <<"urn:xmpp:serverinfo:0">>, El,
69
          Opts) ->
NEW
70
    decode_pubsub_serverinfo_domain(<<"urn:xmpp:serverinfo:0">>,
×
71
                                    Opts,
72
                                    El);
73
do_decode(<<"serverinfo">>, <<"urn:xmpp:serverinfo:0">>,
74
          El, Opts) ->
NEW
75
    decode_pubsub_serverinfo(<<"urn:xmpp:serverinfo:0">>,
×
76
                             Opts,
77
                             El);
78
do_decode(Name, <<>>, _, _) ->
NEW
79
    erlang:error({pubsub_serverinfo_codec,
×
80
                  {missing_tag_xmlns, Name}});
81
do_decode(Name, XMLNS, _, _) ->
NEW
82
    erlang:error({pubsub_serverinfo_codec,
×
83
                  {unknown_tag, Name, XMLNS}}).
84

85
tags() ->
NEW
86
    [{<<"connection">>, <<"urn:xmpp:serverinfo:0">>},
×
87
     {<<"remote-domain">>, <<"urn:xmpp:serverinfo:0">>},
88
     {<<"federation">>, <<"urn:xmpp:serverinfo:0">>},
89
     {<<"domain">>, <<"urn:xmpp:serverinfo:0">>},
90
     {<<"serverinfo">>, <<"urn:xmpp:serverinfo:0">>}].
91

92
do_encode({pubsub_serverinfo, _} = Serverinfo,
93
          TopXMLNS) ->
NEW
94
    encode_pubsub_serverinfo(Serverinfo, TopXMLNS);
×
95
do_encode({pubsub_serverinfo_domain, _, _} = Domain,
96
          TopXMLNS) ->
NEW
97
    encode_pubsub_serverinfo_domain(Domain, TopXMLNS);
×
98
do_encode({pubsub_serverinfo_remote_domain, _, _} =
99
              Remote_domain,
100
          TopXMLNS) ->
NEW
101
    encode_pubsub_serverinfo_remote_domain(Remote_domain,
×
102
                                           TopXMLNS).
103

NEW
104
do_get_name({pubsub_serverinfo, _}) -> <<"serverinfo">>;
×
105
do_get_name({pubsub_serverinfo_domain, _, _}) ->
NEW
106
    <<"domain">>;
×
107
do_get_name({pubsub_serverinfo_remote_domain, _, _}) ->
NEW
108
    <<"remote-domain">>.
×
109

110
do_get_ns({pubsub_serverinfo, _}) ->
NEW
111
    <<"urn:xmpp:serverinfo:0">>;
×
112
do_get_ns({pubsub_serverinfo_domain, _, _}) ->
NEW
113
    <<"urn:xmpp:serverinfo:0">>;
×
114
do_get_ns({pubsub_serverinfo_remote_domain, _, _}) ->
NEW
115
    <<"urn:xmpp:serverinfo:0">>.
×
116

117
register_module(Mod) ->
NEW
118
    register_module(Mod, pubsub_serverinfo_codec_external).
×
119

120
unregister_module(Mod) ->
NEW
121
    unregister_module(Mod,
×
122
                      pubsub_serverinfo_codec_external).
123

124
format_error({bad_attr_value, Attr, Tag, XMLNS}) ->
NEW
125
    <<"Bad value of attribute '", Attr/binary, "' in tag <",
×
126
      Tag/binary, "/> qualified by namespace '", XMLNS/binary,
127
      "'">>;
128
format_error({bad_cdata_value, <<>>, Tag, XMLNS}) ->
NEW
129
    <<"Bad value of cdata in tag <", Tag/binary,
×
130
      "/> qualified by namespace '", XMLNS/binary, "'">>;
131
format_error({missing_tag, Tag, XMLNS}) ->
NEW
132
    <<"Missing tag <", Tag/binary,
×
133
      "/> qualified by namespace '", XMLNS/binary, "'">>;
134
format_error({missing_attr, Attr, Tag, XMLNS}) ->
NEW
135
    <<"Missing attribute '", Attr/binary, "' in tag <",
×
136
      Tag/binary, "/> qualified by namespace '", XMLNS/binary,
137
      "'">>;
138
format_error({missing_cdata, <<>>, Tag, XMLNS}) ->
NEW
139
    <<"Missing cdata in tag <", Tag/binary,
×
140
      "/> qualified by namespace '", XMLNS/binary, "'">>;
141
format_error({unknown_tag, Tag, XMLNS}) ->
NEW
142
    <<"Unknown tag <", Tag/binary,
×
143
      "/> qualified by namespace '", XMLNS/binary, "'">>;
144
format_error({missing_tag_xmlns, Tag}) ->
NEW
145
    <<"Missing namespace for tag <", Tag/binary, "/>">>.
×
146

147
io_format_error({bad_attr_value, Attr, Tag, XMLNS}) ->
NEW
148
    {<<"Bad value of attribute '~s' in tag <~s/> "
×
149
       "qualified by namespace '~s'">>,
150
     [Attr, Tag, XMLNS]};
151
io_format_error({bad_cdata_value, <<>>, Tag, XMLNS}) ->
NEW
152
    {<<"Bad value of cdata in tag <~s/> qualified "
×
153
       "by namespace '~s'">>,
154
     [Tag, XMLNS]};
155
io_format_error({missing_tag, Tag, XMLNS}) ->
NEW
156
    {<<"Missing tag <~s/> qualified by namespace "
×
157
       "'~s'">>,
158
     [Tag, XMLNS]};
159
io_format_error({missing_attr, Attr, Tag, XMLNS}) ->
NEW
160
    {<<"Missing attribute '~s' in tag <~s/> "
×
161
       "qualified by namespace '~s'">>,
162
     [Attr, Tag, XMLNS]};
163
io_format_error({missing_cdata, <<>>, Tag, XMLNS}) ->
NEW
164
    {<<"Missing cdata in tag <~s/> qualified "
×
165
       "by namespace '~s'">>,
166
     [Tag, XMLNS]};
167
io_format_error({unknown_tag, Tag, XMLNS}) ->
NEW
168
    {<<"Unknown tag <~s/> qualified by namespace "
×
169
       "'~s'">>,
170
     [Tag, XMLNS]};
171
io_format_error({missing_tag_xmlns, Tag}) ->
NEW
172
    {<<"Missing namespace for tag <~s/>">>, [Tag]}.
×
173

174
get_attr(Attr, Attrs, Default) ->
NEW
175
    case lists:keyfind(Attr, 1, Attrs) of
×
NEW
176
        {_, Val} -> Val;
×
NEW
177
        false -> Default
×
178
    end.
179

NEW
180
enc_xmlns_attrs(XMLNS, XMLNS) -> [];
×
NEW
181
enc_xmlns_attrs(XMLNS, _) -> [{<<"xmlns">>, XMLNS}].
×
182

183
choose_top_xmlns(<<>>, NSList, TopXMLNS) ->
NEW
184
    case lists:member(TopXMLNS, NSList) of
×
NEW
185
        true -> TopXMLNS;
×
NEW
186
        false -> hd(NSList)
×
187
    end;
NEW
188
choose_top_xmlns(XMLNS, _, _) -> XMLNS.
×
189

190
register_module(Mod, ResolverMod) ->
NEW
191
    MD5Sum = try Mod:module_info(md5) of
×
NEW
192
                 Val -> Val
×
193
             catch
194
                 error:badarg ->
NEW
195
                     {ok, {Mod, Val}} = beam_lib:md5(code:which(Mod)),
×
NEW
196
                     Val
×
197
             end,
NEW
198
    case orddict:find(Mod, ResolverMod:modules()) of
×
NEW
199
        {ok, MD5Sum} -> ok;
×
200
        _ ->
NEW
201
            Mods = orddict:store(Mod,
×
202
                                 MD5Sum,
203
                                 ResolverMod:modules()),
NEW
204
            recompile_resolver(Mods, ResolverMod)
×
205
    end.
206

207
unregister_module(Mod, ResolverMod) ->
NEW
208
    case orddict:find(Mod, ResolverMod:modules()) of
×
209
        {ok, _} ->
NEW
210
            Mods = orddict:erase(Mod, ResolverMod:modules()),
×
NEW
211
            recompile_resolver(Mods, ResolverMod);
×
NEW
212
        error -> ok
×
213
    end.
214

215
recompile_resolver(Mods, ResolverMod) ->
NEW
216
    Tags = lists:flatmap(fun (M) ->
×
NEW
217
                                 [{Name, XMLNS, M} || {Name, XMLNS} <- M:tags()]
×
218
                         end,
219
                         orddict:fetch_keys(Mods)),
NEW
220
    Records = lists:flatmap(fun (M) ->
×
NEW
221
                                    [{RecName, RecSize, M}
×
NEW
222
                                     || {RecName, RecSize} <- M:records()]
×
223
                            end,
224
                            orddict:fetch_keys(Mods)),
NEW
225
    Lookup1 = string:join(lists:map(fun ({RecName,
×
226
                                          RecSize,
227
                                          M}) ->
NEW
228
                                            io_lib:format("lookup({~s}) -> '~s'",
×
229
                                                          [string:join([io_lib:format("'~s'",
230
                                                                                      [RecName])
NEW
231
                                                                        | ["_"
×
232
                                                                           || _
NEW
233
                                                                                  <- lists:seq(1,
×
234
                                                                                               RecSize)]],
235
                                                                       ","),
236
                                                           M])
237
                                    end,
238
                                    Records)
239
                              ++
240
                              ["lookup(Term) -> erlang:error(badarg, "
241
                               "[Term])."],
242
                          ";" ++ io_lib:nl()),
NEW
243
    Lookup2 = string:join(lists:map(fun ({Name,
×
244
                                          XMLNS,
245
                                          M}) ->
NEW
246
                                            io_lib:format("lookup(~w, ~w) -> '~s'",
×
247
                                                          [Name, XMLNS, M])
248
                                    end,
249
                                    Tags)
250
                              ++ ["lookup(_, _) -> undefined."],
251
                          ";" ++ io_lib:nl()),
NEW
252
    Modules = io_lib:format("modules() -> [~s].",
×
NEW
253
                            [string:join([io_lib:format("{'~s', ~w}", [M, S])
×
NEW
254
                                          || {M, S} <- Mods],
×
255
                                         ",")]),
NEW
256
    Module = io_lib:format("-module(~s).", [ResolverMod]),
×
NEW
257
    Compile = "-compile(export_all).",
×
NEW
258
    Forms = lists:map(fun (Expr) ->
×
NEW
259
                              {ok, Tokens, _} =
×
260
                                  erl_scan:string(lists:flatten(Expr)),
NEW
261
                              {ok, Form} = erl_parse:parse_form(Tokens),
×
NEW
262
                              Form
×
263
                      end,
264
                      [Module, Compile, Modules, Lookup1, Lookup2]),
NEW
265
    {ok, Code} = case compile:forms(Forms, []) of
×
NEW
266
                     {ok, ResolverMod, Bin} -> {ok, Bin};
×
NEW
267
                     {ok, ResolverMod, Bin, _Warnings} -> {ok, Bin};
×
NEW
268
                     Error -> Error
×
269
                 end,
NEW
270
    {module, ResolverMod} = code:load_binary(ResolverMod,
×
271
                                             "nofile",
272
                                             Code),
NEW
273
    ok.
×
274

275
dec_enum(Val, Enums) ->
NEW
276
    AtomVal = erlang:binary_to_existing_atom(Val, utf8),
×
NEW
277
    case lists:member(AtomVal, Enums) of
×
NEW
278
        true -> AtomVal
×
279
    end.
280

NEW
281
enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
×
282

NEW
283
pp(pubsub_serverinfo, 1) -> [domain];
×
284
pp(pubsub_serverinfo_domain, 2) ->
NEW
285
    [name, remote_domain];
×
NEW
286
pp(pubsub_serverinfo_remote_domain, 2) -> [name, type];
×
NEW
287
pp(xmlel, 3) -> [name, attrs, children];
×
288
pp(Name, Arity) ->
NEW
289
    try get_mod(erlang:make_tuple(Arity + 1,
×
290
                                  undefined,
291
                                  [{1, Name}]))
292
    of
NEW
293
        Mod -> Mod:pp(Name, Arity)
×
294
    catch
NEW
295
        error:badarg -> no
×
296
    end.
297

298
records() ->
NEW
299
    [{pubsub_serverinfo, 1},
×
300
     {pubsub_serverinfo_domain, 2},
301
     {pubsub_serverinfo_remote_domain, 2}].
302

303
get_mod(<<"serverinfo">>,
304
        <<"urn:xmpp:serverinfo:0">>) ->
NEW
305
    pubsub_serverinfo_codec;
×
306
get_mod(<<"remote-domain">>,
307
        <<"urn:xmpp:serverinfo:0">>) ->
NEW
308
    pubsub_serverinfo_codec;
×
309
get_mod(<<"federation">>,
310
        <<"urn:xmpp:serverinfo:0">>) ->
NEW
311
    pubsub_serverinfo_codec;
×
312
get_mod(<<"domain">>, <<"urn:xmpp:serverinfo:0">>) ->
NEW
313
    pubsub_serverinfo_codec;
×
314
get_mod(<<"connection">>,
315
        <<"urn:xmpp:serverinfo:0">>) ->
NEW
316
    pubsub_serverinfo_codec;
×
317
get_mod(Name, XMLNS) ->
NEW
318
    pubsub_serverinfo_codec_external:lookup(Name, XMLNS).
×
319

320
get_mod({pubsub_serverinfo, _}) ->
NEW
321
    pubsub_serverinfo_codec;
×
322
get_mod({pubsub_serverinfo_domain, _, _}) ->
NEW
323
    pubsub_serverinfo_codec;
×
324
get_mod({pubsub_serverinfo_remote_domain, _, _}) ->
NEW
325
    pubsub_serverinfo_codec;
×
326
get_mod(Record) ->
NEW
327
    pubsub_serverinfo_codec_external:lookup(Record).
×
328

329
decode_pubsub_serverinfo_connection(__TopXMLNS, __Opts,
330
                                    {xmlel, <<"connection">>, _attrs, _els}) ->
NEW
331
    Type =
×
332
        decode_pubsub_serverinfo_connection_attrs(__TopXMLNS,
333
                                                  _attrs,
334
                                                  undefined),
NEW
335
    Type.
×
336

337
decode_pubsub_serverinfo_connection_attrs(__TopXMLNS,
338
                                          [{<<"type">>, _val} | _attrs],
339
                                          _Type) ->
NEW
340
    decode_pubsub_serverinfo_connection_attrs(__TopXMLNS,
×
341
                                              _attrs,
342
                                              _val);
343
decode_pubsub_serverinfo_connection_attrs(__TopXMLNS,
344
                                          [_ | _attrs], Type) ->
NEW
345
    decode_pubsub_serverinfo_connection_attrs(__TopXMLNS,
×
346
                                              _attrs,
347
                                              Type);
348
decode_pubsub_serverinfo_connection_attrs(__TopXMLNS,
349
                                          [], Type) ->
NEW
350
    decode_pubsub_serverinfo_connection_attr_type(__TopXMLNS,
×
351
                                                  Type).
352

353
encode_pubsub_serverinfo_connection(Type, __TopXMLNS) ->
NEW
354
    __NewTopXMLNS =
×
355
        pubsub_serverinfo_codec:choose_top_xmlns(<<"urn:xmpp:serverinfo:0">>,
356
                                                 [],
357
                                                 __TopXMLNS),
NEW
358
    _els = [],
×
NEW
359
    _attrs =
×
360
        encode_pubsub_serverinfo_connection_attr_type(Type,
361
                                                      pubsub_serverinfo_codec:enc_xmlns_attrs(__NewTopXMLNS,
362
                                                                                              __TopXMLNS)),
NEW
363
    {xmlel, <<"connection">>, _attrs, _els}.
×
364

365
decode_pubsub_serverinfo_connection_attr_type(__TopXMLNS,
366
                                              undefined) ->
NEW
367
    erlang:error({pubsub_serverinfo_codec,
×
368
                  {missing_attr,
369
                   <<"type">>,
370
                   <<"connection">>,
371
                   __TopXMLNS}});
372
decode_pubsub_serverinfo_connection_attr_type(__TopXMLNS,
373
                                              _val) ->
NEW
374
    case catch dec_enum(_val, [incoming, outgoing, bidi]) of
×
375
        {'EXIT', _} ->
NEW
376
            erlang:error({pubsub_serverinfo_codec,
×
377
                          {bad_attr_value,
378
                           <<"type">>,
379
                           <<"connection">>,
380
                           __TopXMLNS}});
NEW
381
        _res -> _res
×
382
    end.
383

384
encode_pubsub_serverinfo_connection_attr_type(_val,
385
                                              _acc) ->
NEW
386
    [{<<"type">>, enc_enum(_val)} | _acc].
×
387

388
decode_pubsub_serverinfo_remote_domain(__TopXMLNS,
389
                                       __Opts,
390
                                       {xmlel,
391
                                        <<"remote-domain">>,
392
                                        _attrs,
393
                                        _els}) ->
NEW
394
    Type =
×
395
        decode_pubsub_serverinfo_remote_domain_els(__TopXMLNS,
396
                                                   __Opts,
397
                                                   _els,
398
                                                   []),
NEW
399
    Name =
×
400
        decode_pubsub_serverinfo_remote_domain_attrs(__TopXMLNS,
401
                                                     _attrs,
402
                                                     undefined),
NEW
403
    {pubsub_serverinfo_remote_domain, Name, Type}.
×
404

405
decode_pubsub_serverinfo_remote_domain_els(__TopXMLNS,
406
                                           __Opts, [], Type) ->
NEW
407
    lists:reverse(Type);
×
408
decode_pubsub_serverinfo_remote_domain_els(__TopXMLNS,
409
                                           __Opts,
410
                                           [{xmlel,
411
                                             <<"connection">>,
412
                                             _attrs,
413
                                             _} =
414
                                                _el
415
                                            | _els],
416
                                           Type) ->
NEW
417
    case pubsub_serverinfo_codec:get_attr(<<"xmlns">>,
×
418
                                          _attrs,
419
                                          __TopXMLNS)
420
        of
421
        <<"urn:xmpp:serverinfo:0">> ->
NEW
422
            decode_pubsub_serverinfo_remote_domain_els(__TopXMLNS,
×
423
                                                       __Opts,
424
                                                       _els,
425
                                                       [decode_pubsub_serverinfo_connection(<<"urn:xmpp:serverinfo:0">>,
426
                                                                                            __Opts,
427
                                                                                            _el)
428
                                                        | Type]);
429
        _ ->
NEW
430
            decode_pubsub_serverinfo_remote_domain_els(__TopXMLNS,
×
431
                                                       __Opts,
432
                                                       _els,
433
                                                       Type)
434
    end;
435
decode_pubsub_serverinfo_remote_domain_els(__TopXMLNS,
436
                                           __Opts, [_ | _els], Type) ->
NEW
437
    decode_pubsub_serverinfo_remote_domain_els(__TopXMLNS,
×
438
                                               __Opts,
439
                                               _els,
440
                                               Type).
441

442
decode_pubsub_serverinfo_remote_domain_attrs(__TopXMLNS,
443
                                             [{<<"name">>, _val} | _attrs],
444
                                             _Name) ->
NEW
445
    decode_pubsub_serverinfo_remote_domain_attrs(__TopXMLNS,
×
446
                                                 _attrs,
447
                                                 _val);
448
decode_pubsub_serverinfo_remote_domain_attrs(__TopXMLNS,
449
                                             [_ | _attrs], Name) ->
NEW
450
    decode_pubsub_serverinfo_remote_domain_attrs(__TopXMLNS,
×
451
                                                 _attrs,
452
                                                 Name);
453
decode_pubsub_serverinfo_remote_domain_attrs(__TopXMLNS,
454
                                             [], Name) ->
NEW
455
    decode_pubsub_serverinfo_remote_domain_attr_name(__TopXMLNS,
×
456
                                                     Name).
457

458
encode_pubsub_serverinfo_remote_domain({pubsub_serverinfo_remote_domain,
459
                                        Name,
460
                                        Type},
461
                                       __TopXMLNS) ->
NEW
462
    __NewTopXMLNS =
×
463
        pubsub_serverinfo_codec:choose_top_xmlns(<<"urn:xmpp:serverinfo:0">>,
464
                                                 [],
465
                                                 __TopXMLNS),
NEW
466
    _els =
×
467
        lists:reverse('encode_pubsub_serverinfo_remote_domain_$type'(Type,
468
                                                                     __NewTopXMLNS,
469
                                                                     [])),
NEW
470
    _attrs =
×
471
        encode_pubsub_serverinfo_remote_domain_attr_name(Name,
472
                                                         pubsub_serverinfo_codec:enc_xmlns_attrs(__NewTopXMLNS,
473
                                                                                                 __TopXMLNS)),
NEW
474
    {xmlel, <<"remote-domain">>, _attrs, _els}.
×
475

476
'encode_pubsub_serverinfo_remote_domain_$type'([],
477
                                               __TopXMLNS, _acc) ->
NEW
478
    _acc;
×
479
'encode_pubsub_serverinfo_remote_domain_$type'([Type
480
                                                | _els],
481
                                               __TopXMLNS, _acc) ->
NEW
482
    'encode_pubsub_serverinfo_remote_domain_$type'(_els,
×
483
                                                   __TopXMLNS,
484
                                                   [encode_pubsub_serverinfo_connection(Type,
485
                                                                                        __TopXMLNS)
486
                                                    | _acc]).
487

488
decode_pubsub_serverinfo_remote_domain_attr_name(__TopXMLNS,
489
                                                 undefined) ->
NEW
490
    erlang:error({pubsub_serverinfo_codec,
×
491
                  {missing_attr,
492
                   <<"name">>,
493
                   <<"remote-domain">>,
494
                   __TopXMLNS}});
495
decode_pubsub_serverinfo_remote_domain_attr_name(__TopXMLNS,
496
                                                 _val) ->
NEW
497
    _val.
×
498

499
encode_pubsub_serverinfo_remote_domain_attr_name(_val,
500
                                                 _acc) ->
NEW
501
    [{<<"name">>, _val} | _acc].
×
502

503
decode_pubsub_serverinfo_federation(__TopXMLNS, __Opts,
504
                                    {xmlel, <<"federation">>, _attrs, _els}) ->
NEW
505
    Remote_domain =
×
506
        decode_pubsub_serverinfo_federation_els(__TopXMLNS,
507
                                                __Opts,
508
                                                _els,
509
                                                []),
NEW
510
    Remote_domain.
×
511

512
decode_pubsub_serverinfo_federation_els(__TopXMLNS,
513
                                        __Opts, [], Remote_domain) ->
NEW
514
    lists:reverse(Remote_domain);
×
515
decode_pubsub_serverinfo_federation_els(__TopXMLNS,
516
                                        __Opts,
517
                                        [{xmlel,
518
                                          <<"remote-domain">>,
519
                                          _attrs,
520
                                          _} =
521
                                             _el
522
                                         | _els],
523
                                        Remote_domain) ->
NEW
524
    case pubsub_serverinfo_codec:get_attr(<<"xmlns">>,
×
525
                                          _attrs,
526
                                          __TopXMLNS)
527
        of
528
        <<"urn:xmpp:serverinfo:0">> ->
NEW
529
            decode_pubsub_serverinfo_federation_els(__TopXMLNS,
×
530
                                                    __Opts,
531
                                                    _els,
532
                                                    [decode_pubsub_serverinfo_remote_domain(<<"urn:xmpp:serverinfo:0">>,
533
                                                                                            __Opts,
534
                                                                                            _el)
535
                                                     | Remote_domain]);
536
        _ ->
NEW
537
            decode_pubsub_serverinfo_federation_els(__TopXMLNS,
×
538
                                                    __Opts,
539
                                                    _els,
540
                                                    Remote_domain)
541
    end;
542
decode_pubsub_serverinfo_federation_els(__TopXMLNS,
543
                                        __Opts, [_ | _els], Remote_domain) ->
NEW
544
    decode_pubsub_serverinfo_federation_els(__TopXMLNS,
×
545
                                            __Opts,
546
                                            _els,
547
                                            Remote_domain).
548

549
encode_pubsub_serverinfo_federation(Remote_domain,
550
                                    __TopXMLNS) ->
NEW
551
    __NewTopXMLNS =
×
552
        pubsub_serverinfo_codec:choose_top_xmlns(<<"urn:xmpp:serverinfo:0">>,
553
                                                 [],
554
                                                 __TopXMLNS),
NEW
555
    _els =
×
556
        lists:reverse('encode_pubsub_serverinfo_federation_$remote_domain'(Remote_domain,
557
                                                                           __NewTopXMLNS,
558
                                                                           [])),
NEW
559
    _attrs =
×
560
        pubsub_serverinfo_codec:enc_xmlns_attrs(__NewTopXMLNS,
561
                                                __TopXMLNS),
NEW
562
    {xmlel, <<"federation">>, _attrs, _els}.
×
563

564
'encode_pubsub_serverinfo_federation_$remote_domain'([],
565
                                                     __TopXMLNS, _acc) ->
NEW
566
    _acc;
×
567
'encode_pubsub_serverinfo_federation_$remote_domain'([Remote_domain
568
                                                      | _els],
569
                                                     __TopXMLNS, _acc) ->
NEW
570
    'encode_pubsub_serverinfo_federation_$remote_domain'(_els,
×
571
                                                         __TopXMLNS,
572
                                                         [encode_pubsub_serverinfo_remote_domain(Remote_domain,
573
                                                                                                 __TopXMLNS)
574
                                                          | _acc]).
575

576
decode_pubsub_serverinfo_domain(__TopXMLNS, __Opts,
577
                                {xmlel, <<"domain">>, _attrs, _els}) ->
NEW
578
    Remote_domain =
×
579
        decode_pubsub_serverinfo_domain_els(__TopXMLNS,
580
                                            __Opts,
581
                                            _els,
582
                                            undefined),
NEW
583
    Name = decode_pubsub_serverinfo_domain_attrs(__TopXMLNS,
×
584
                                                 _attrs,
585
                                                 undefined),
NEW
586
    {pubsub_serverinfo_domain, Name, Remote_domain}.
×
587

588
decode_pubsub_serverinfo_domain_els(__TopXMLNS, __Opts,
589
                                    [], Remote_domain) ->
NEW
590
    Remote_domain;
×
591
decode_pubsub_serverinfo_domain_els(__TopXMLNS, __Opts,
592
                                    [{xmlel, <<"federation">>, _attrs, _} = _el
593
                                     | _els],
594
                                    Remote_domain) ->
NEW
595
    case pubsub_serverinfo_codec:get_attr(<<"xmlns">>,
×
596
                                          _attrs,
597
                                          __TopXMLNS)
598
        of
599
        <<"urn:xmpp:serverinfo:0">> ->
NEW
600
            decode_pubsub_serverinfo_domain_els(__TopXMLNS,
×
601
                                                __Opts,
602
                                                _els,
603
                                                decode_pubsub_serverinfo_federation(<<"urn:xmpp:serverinfo:0">>,
604
                                                                                    __Opts,
605
                                                                                    _el));
606
        _ ->
NEW
607
            decode_pubsub_serverinfo_domain_els(__TopXMLNS,
×
608
                                                __Opts,
609
                                                _els,
610
                                                Remote_domain)
611
    end;
612
decode_pubsub_serverinfo_domain_els(__TopXMLNS, __Opts,
613
                                    [_ | _els], Remote_domain) ->
NEW
614
    decode_pubsub_serverinfo_domain_els(__TopXMLNS,
×
615
                                        __Opts,
616
                                        _els,
617
                                        Remote_domain).
618

619
decode_pubsub_serverinfo_domain_attrs(__TopXMLNS,
620
                                      [{<<"name">>, _val} | _attrs], _Name) ->
NEW
621
    decode_pubsub_serverinfo_domain_attrs(__TopXMLNS,
×
622
                                          _attrs,
623
                                          _val);
624
decode_pubsub_serverinfo_domain_attrs(__TopXMLNS,
625
                                      [_ | _attrs], Name) ->
NEW
626
    decode_pubsub_serverinfo_domain_attrs(__TopXMLNS,
×
627
                                          _attrs,
628
                                          Name);
629
decode_pubsub_serverinfo_domain_attrs(__TopXMLNS, [],
630
                                      Name) ->
NEW
631
    decode_pubsub_serverinfo_domain_attr_name(__TopXMLNS,
×
632
                                              Name).
633

634
encode_pubsub_serverinfo_domain({pubsub_serverinfo_domain,
635
                                 Name,
636
                                 Remote_domain},
637
                                __TopXMLNS) ->
NEW
638
    __NewTopXMLNS =
×
639
        pubsub_serverinfo_codec:choose_top_xmlns(<<"urn:xmpp:serverinfo:0">>,
640
                                                 [],
641
                                                 __TopXMLNS),
NEW
642
    _els =
×
643
        lists:reverse('encode_pubsub_serverinfo_domain_$remote_domain'(Remote_domain,
644
                                                                       __NewTopXMLNS,
645
                                                                       [])),
NEW
646
    _attrs = encode_pubsub_serverinfo_domain_attr_name(Name,
×
647
                                                       pubsub_serverinfo_codec:enc_xmlns_attrs(__NewTopXMLNS,
648
                                                                                               __TopXMLNS)),
NEW
649
    {xmlel, <<"domain">>, _attrs, _els}.
×
650

651
'encode_pubsub_serverinfo_domain_$remote_domain'(undefined,
652
                                                 __TopXMLNS, _acc) ->
NEW
653
    _acc;
×
654
'encode_pubsub_serverinfo_domain_$remote_domain'(Remote_domain,
655
                                                 __TopXMLNS, _acc) ->
NEW
656
    [encode_pubsub_serverinfo_federation(Remote_domain,
×
657
                                         __TopXMLNS)
658
     | _acc].
659

660
decode_pubsub_serverinfo_domain_attr_name(__TopXMLNS,
661
                                          undefined) ->
NEW
662
    erlang:error({pubsub_serverinfo_codec,
×
663
                  {missing_attr, <<"name">>, <<"domain">>, __TopXMLNS}});
664
decode_pubsub_serverinfo_domain_attr_name(__TopXMLNS,
665
                                          _val) ->
NEW
666
    _val.
×
667

668
encode_pubsub_serverinfo_domain_attr_name(_val, _acc) ->
NEW
669
    [{<<"name">>, _val} | _acc].
×
670

671
decode_pubsub_serverinfo(__TopXMLNS, __Opts,
672
                         {xmlel, <<"serverinfo">>, _attrs, _els}) ->
NEW
673
    Domain = decode_pubsub_serverinfo_els(__TopXMLNS,
×
674
                                          __Opts,
675
                                          _els,
676
                                          []),
NEW
677
    {pubsub_serverinfo, Domain}.
×
678

679
decode_pubsub_serverinfo_els(__TopXMLNS, __Opts, [],
680
                             Domain) ->
NEW
681
    lists:reverse(Domain);
×
682
decode_pubsub_serverinfo_els(__TopXMLNS, __Opts,
683
                             [{xmlel, <<"domain">>, _attrs, _} = _el | _els],
684
                             Domain) ->
NEW
685
    case pubsub_serverinfo_codec:get_attr(<<"xmlns">>,
×
686
                                          _attrs,
687
                                          __TopXMLNS)
688
        of
689
        <<"urn:xmpp:serverinfo:0">> ->
NEW
690
            decode_pubsub_serverinfo_els(__TopXMLNS,
×
691
                                         __Opts,
692
                                         _els,
693
                                         [decode_pubsub_serverinfo_domain(<<"urn:xmpp:serverinfo:0">>,
694
                                                                          __Opts,
695
                                                                          _el)
696
                                          | Domain]);
697
        _ ->
NEW
698
            decode_pubsub_serverinfo_els(__TopXMLNS,
×
699
                                         __Opts,
700
                                         _els,
701
                                         Domain)
702
    end;
703
decode_pubsub_serverinfo_els(__TopXMLNS, __Opts,
704
                             [_ | _els], Domain) ->
NEW
705
    decode_pubsub_serverinfo_els(__TopXMLNS,
×
706
                                 __Opts,
707
                                 _els,
708
                                 Domain).
709

710
encode_pubsub_serverinfo({pubsub_serverinfo, Domain},
711
                         __TopXMLNS) ->
NEW
712
    __NewTopXMLNS =
×
713
        pubsub_serverinfo_codec:choose_top_xmlns(<<"urn:xmpp:serverinfo:0">>,
714
                                                 [],
715
                                                 __TopXMLNS),
NEW
716
    _els =
×
717
        lists:reverse('encode_pubsub_serverinfo_$domain'(Domain,
718
                                                         __NewTopXMLNS,
719
                                                         [])),
NEW
720
    _attrs =
×
721
        pubsub_serverinfo_codec:enc_xmlns_attrs(__NewTopXMLNS,
722
                                                __TopXMLNS),
NEW
723
    {xmlel, <<"serverinfo">>, _attrs, _els}.
×
724

725
'encode_pubsub_serverinfo_$domain'([], __TopXMLNS,
726
                                   _acc) ->
NEW
727
    _acc;
×
728
'encode_pubsub_serverinfo_$domain'([Domain | _els],
729
                                   __TopXMLNS, _acc) ->
NEW
730
    'encode_pubsub_serverinfo_$domain'(_els,
×
731
                                       __TopXMLNS,
732
                                       [encode_pubsub_serverinfo_domain(Domain,
733
                                                                        __TopXMLNS)
734
                                        | _acc]).
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