Skip to content

Commit 9fdd435

Browse files
authored
Merge pull request processone#58 from lnjX/feature/roster-mix
Add MIX roster extension
2 parents ff3322f + a990170 commit 9fdd435

File tree

7 files changed

+528
-162
lines changed

7 files changed

+528
-162
lines changed

include/ns.hrl

+5
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,14 @@
175175
-define(NS_SIC_0, <<"urn:xmpp:sic:0">>).
176176
-define(NS_SIC_1, <<"urn:xmpp:sic:1">>).
177177
-define(NS_MIX_CORE_0, <<"urn:xmpp:mix:core:0">>).
178+
-define(NS_MIX_CORE_1, <<"urn:xmpp:mix:core:1">>).
178179
-define(NS_MIX_CORE_SEARCHABLE_0, <<"urn:xmpp:mix:core:0#searchable">>).
180+
-define(NS_MIX_CORE_SEARCHABLE_1, <<"urn:xmpp:mix:core:1#searchable">>).
179181
-define(NS_MIX_CORE_CREATE_CHANNEL_0, <<"urn:xmpp:mix:core:0#create-channel">>).
182+
-define(NS_MIX_CORE_CREATE_CHANNEL_1, <<"urn:xmpp:mix:core:1#create-channel">>).
180183
-define(NS_MIX_PAM_0, <<"urn:xmpp:mix:pam:0">>).
184+
-define(NS_MIX_PAM_2, <<"urn:xmpp:mix:pam:2">>).
185+
-define(NS_MIX_PAM_ARCHIVE_2, <<"urn:xmpp:mix:pam:2#archive">>).
181186
-define(NS_MIX_ROSTER_0, <<"urn:xmpp:mix:roster:0">>).
182187
-define(NS_MIX_NODES_MESSAGES, <<"urn:xmpp:mix:nodes:messages">>).
183188
-define(NS_MIX_NODES_PRESENCE, <<"urn:xmpp:mix:nodes:presence">>).

include/xmpp_codec.hrl

+21-11
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,9 @@
318318
-record(db_feature, {errors = false :: boolean()}).
319319
-type db_feature() :: #db_feature{}.
320320

321+
-record(mix_roster_annotate, {}).
322+
-type mix_roster_annotate() :: #mix_roster_annotate{}.
323+
321324
-record(x_conference, {jid :: jid:jid(),
322325
password = <<>> :: binary(),
323326
reason = <<>> :: binary(),
@@ -366,17 +369,6 @@
366369
-record(nick, {name = <<>> :: binary()}).
367370
-type nick() :: #nick{}.
368371

369-
-record(roster_item, {jid :: jid:jid(),
370-
name = <<>> :: binary(),
371-
groups = [] :: [binary()],
372-
subscription = none :: 'both' | 'from' | 'none' | 'remove' | 'to',
373-
ask :: 'subscribe' | 'undefined'}).
374-
-type roster_item() :: #roster_item{}.
375-
376-
-record(roster_query, {items = [] :: [#roster_item{}],
377-
ver :: 'undefined' | binary()}).
378-
-type roster_query() :: #roster_query{}.
379-
380372
-record(feature_sm, {xmlns = <<>> :: binary()}).
381373
-type feature_sm() :: #feature_sm{}.
382374

@@ -894,6 +886,22 @@
894886
-record(mix_setnick, {nick :: binary()}).
895887
-type mix_setnick() :: #mix_setnick{}.
896888

889+
-record(mix_roster_channel, {'participant-id' = <<>> :: binary()}).
890+
-type mix_roster_channel() :: #mix_roster_channel{}.
891+
892+
-record(roster_item, {jid :: jid:jid(),
893+
name = <<>> :: binary(),
894+
groups = [] :: [binary()],
895+
subscription = none :: 'both' | 'from' | 'none' | 'remove' | 'to',
896+
ask :: 'subscribe' | 'undefined',
897+
mix_channel :: 'undefined' | #mix_roster_channel{}}).
898+
-type roster_item() :: #roster_item{}.
899+
900+
-record(roster_query, {items = [] :: [#roster_item{}],
901+
ver :: 'undefined' | binary(),
902+
mix_annotate :: 'undefined' | #mix_roster_annotate{}}).
903+
-type roster_query() :: #roster_query{}.
904+
897905
-record(xmpp_session, {optional = false :: boolean()}).
898906
-type xmpp_session() :: #xmpp_session{}.
899907

@@ -1318,6 +1326,8 @@
13181326
mix_join() |
13191327
mix_leave() |
13201328
mix_participant() |
1329+
mix_roster_annotate() |
1330+
mix_roster_channel() |
13211331
mix_setnick() |
13221332
muc() |
13231333
muc_actor() |

specs/xmpp_codec.spec

+32-16
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
xmlns = <<"jabber:iq:roster">>,
7272
module = rfc6121,
7373
result = {roster_item, '$jid', '$name',
74-
'$groups', '$subscription', '$ask'},
74+
'$groups', '$subscription', '$ask', '$mix_channel'},
7575
attrs = [#attr{name = <<"jid">>,
7676
required = true,
7777
dec = {jid, decode, []},
@@ -85,15 +85,17 @@
8585
#attr{name = <<"ask">>,
8686
enc = {enc_enum, []},
8787
dec = {dec_enum, [[subscribe]]}}],
88-
refs = [#ref{name = roster_group, label = '$groups'}]}).
88+
refs = [#ref{name = roster_group, label = '$groups'},
89+
#ref{name = mix_roster_channel, label = '$mix_channel', min = 0, max = 1}]}).
8990

9091
-xml(roster_query,
9192
#elem{name = <<"query">>,
9293
xmlns = <<"jabber:iq:roster">>,
9394
module = rfc6121,
94-
result = {roster_query, '$items', '$ver'},
95+
result = {roster_query, '$items', '$ver', '$mix_annotate'},
9596
attrs = [#attr{name = <<"ver">>, default = undefined}],
96-
refs = [#ref{name = roster_item, label = '$items'}]}).
97+
refs = [#ref{name = roster_item, label = '$items'},
98+
#ref{name = mix_roster_annotate, label = '$mix_annotate', min = 0, max = 1}]}).
9799

98100
-xml(rosterver_feature,
99101
#elem{name = <<"ver">>,
@@ -3453,7 +3455,7 @@
34533455

34543456
-xml(mix_subscribe,
34553457
#elem{name = <<"subscribe">>,
3456-
xmlns = <<"urn:xmpp:mix:core:0">>,
3458+
xmlns = [<<"urn:xmpp:mix:core:0">>, <<"urn:xmpp:mix:core:1">>],
34573459
module = 'xep0369',
34583460
result = '$node',
34593461
attrs = [#attr{name = <<"node">>,
@@ -3462,14 +3464,14 @@
34623464

34633465
-xml(mix_nick,
34643466
#elem{name = <<"nick">>,
3465-
xmlns = <<"urn:xmpp:mix:core:0">>,
3467+
xmlns = [<<"urn:xmpp:mix:core:0">>, <<"urn:xmpp:mix:core:1">>],
34663468
module = 'xep0369',
34673469
result = '$cdata',
34683470
cdata = #cdata{required = true}}).
34693471

34703472
-xml(mix_jid,
34713473
#elem{name = <<"jid">>,
3472-
xmlns = <<"urn:xmpp:mix:core:0">>,
3474+
xmlns = [<<"urn:xmpp:mix:core:0">>, <<"urn:xmpp:mix:core:1">>],
34733475
module = 'xep0369',
34743476
result = '$cdata',
34753477
cdata = #cdata{required = true,
@@ -3485,15 +3487,15 @@
34853487

34863488
-xml(mix_setnick,
34873489
#elem{name = <<"setnick">>,
3488-
xmlns = <<"urn:xmpp:mix:core:0">>,
3490+
xmlns = [<<"urn:xmpp:mix:core:0">>, <<"urn:xmpp:mix:core:1">>],
34893491
module = 'xep0369',
34903492
result = {mix_setnick, '$nick'},
34913493
refs = [#ref{name = mix_nick, min = 1, max = 1,
34923494
label = '$nick'}]}).
34933495

34943496
-xml(mix_join,
34953497
#elem{name = <<"join">>,
3496-
xmlns = <<"urn:xmpp:mix:core:0">>,
3498+
xmlns = [<<"urn:xmpp:mix:core:0">>, <<"urn:xmpp:mix:core:1">>],
34973499
module = 'xep0369',
34983500
result = {mix_join, '$id', '$jid', '$nick', '$subscribe'},
34993501
attrs = [#attr{name = <<"id">>},
@@ -3509,7 +3511,7 @@
35093511

35103512
-xml(mix_client_join,
35113513
#elem{name = <<"client-join">>,
3512-
xmlns = <<"urn:xmpp:mix:pam:0">>,
3514+
xmlns = [<<"urn:xmpp:mix:pam:0">>, <<"urn:xmpp:mix:pam:2">>],
35133515
module = 'xep0405',
35143516
result = {mix_client_join, '$channel', '$join'},
35153517
attrs = [#attr{name = <<"channel">>,
@@ -3519,13 +3521,13 @@
35193521

35203522
-xml(mix_leave,
35213523
#elem{name = <<"leave">>,
3522-
xmlns = <<"urn:xmpp:mix:core:0">>,
3524+
xmlns = [<<"urn:xmpp:mix:core:0">>, <<"urn:xmpp:mix:core:1">>],
35233525
module = 'xep0369',
35243526
result = {mix_leave}}).
35253527

35263528
-xml(mix_client_leave,
35273529
#elem{name = <<"client-leave">>,
3528-
xmlns = <<"urn:xmpp:mix:pam:0">>,
3530+
xmlns = [<<"urn:xmpp:mix:pam:0">>, <<"urn:xmpp:mix:pam:2">>],
35293531
module = 'xep0405',
35303532
result = {mix_client_leave, '$channel', '$leave'},
35313533
attrs = [#attr{name = <<"channel">>,
@@ -3535,7 +3537,7 @@
35353537

35363538
-xml(mix_participant,
35373539
#elem{name = <<"participant">>,
3538-
xmlns = <<"urn:xmpp:mix:core:0">>,
3540+
xmlns = [<<"urn:xmpp:mix:core:0">>, <<"urn:xmpp:mix:core:1">>],
35393541
module = 'xep0369',
35403542
result = {mix_participant, '$jid', '$nick'},
35413543
attrs = [#attr{name = <<"jid">>,
@@ -3548,7 +3550,7 @@
35483550

35493551
-xml(mix_create,
35503552
#elem{name = <<"create">>,
3551-
xmlns = <<"urn:xmpp:mix:core:0">>,
3553+
xmlns = [<<"urn:xmpp:mix:core:0">>, <<"urn:xmpp:mix:core:1">>],
35523554
module = 'xep0369',
35533555
result = {mix_create, '$channel'},
35543556
attrs = [#attr{name = <<"channel">>,
@@ -3557,7 +3559,7 @@
35573559

35583560
-xml(mix_destroy,
35593561
#elem{name = <<"destroy">>,
3560-
xmlns = <<"urn:xmpp:mix:core:0">>,
3562+
xmlns = [<<"urn:xmpp:mix:core:0">>, <<"urn:xmpp:mix:core:1">>],
35613563
module = 'xep0369',
35623564
result = {mix_destroy, '$channel'},
35633565
attrs = [#attr{name = <<"channel">>,
@@ -3566,7 +3568,7 @@
35663568

35673569
-xml(mix,
35683570
#elem{name = <<"mix">>,
3569-
xmlns = <<"urn:xmpp:mix:core:0">>,
3571+
xmlns = [<<"urn:xmpp:mix:core:0">>, <<"urn:xmpp:mix:core:1">>],
35703572
module = 'xep0369',
35713573
result = {mix, '$submission_id', '$jid', '$nick'},
35723574
refs = [#ref{name = mix_submission_id, default = <<"">>,
@@ -3575,6 +3577,20 @@
35753577
#ref{name = mix_nick, min = 0, max = 1,
35763578
label = '$nick', default = <<"">>}]}).
35773579

3580+
-xml(mix_roster_channel,
3581+
#elem{name = <<"channel">>,
3582+
xmlns = <<"urn:xmpp:mix:roster:0">>,
3583+
module = 'xep0405',
3584+
result = {mix_roster_channel, '$participant-id'},
3585+
attrs = [#attr{name = <<"participant-id">>,
3586+
required = true}]}).
3587+
3588+
-xml(mix_roster_annotate,
3589+
#elem{name = <<"annotate">>,
3590+
xmlns = <<"urn:xmpp:mix:roster:0">>,
3591+
module = 'xep0405',
3592+
result = {mix_roster_annotate}}).
3593+
35783594
-record(hint, {type :: 'no-copy' | 'no-store' | 'no-storage' | 'store' |
35793595
'no-permanent-store' | 'no-permanent-storage'}).
35803596
-type hint() :: #hint{}.

0 commit comments

Comments
 (0)