mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-24 17:29:28 +01:00
Improve the XMPP codec, fix the test suite accordingly
This commit is contained in:
parent
0266207e9d
commit
c262c08513
@ -376,19 +376,22 @@ private(Config) ->
|
||||
<<"some.conference.org">>,
|
||||
<<>>)},
|
||||
Storage = #bookmark_storage{conference = [Conference]},
|
||||
StorageXMLOut = xmpp_codec:encode(Storage),
|
||||
#iq{type = error} =
|
||||
send_recv(Config, #iq{type = get, sub_els = [#private{}],
|
||||
to = server_jid(Config)}),
|
||||
#iq{type = result, sub_els = []} =
|
||||
send_recv(
|
||||
Config, #iq{type = set,
|
||||
sub_els = [#private{sub_els = [Storage]}]}),
|
||||
sub_els = [#private{xml_els = [StorageXMLOut]}]}),
|
||||
#iq{type = result,
|
||||
sub_els = [#private{sub_els = [Storage]}]} =
|
||||
sub_els = [#private{xml_els = [StorageXMLIn]}]} =
|
||||
send_recv(
|
||||
Config,
|
||||
#iq{type = get,
|
||||
sub_els = [#private{sub_els = [#bookmark_storage{}]}]}),
|
||||
sub_els = [#private{xml_els = [xmpp_codec:encode(
|
||||
#bookmark_storage{})]}]}),
|
||||
Storage = xmpp_codec:decode(StorageXMLIn),
|
||||
disconnect(Config).
|
||||
|
||||
last(Config) ->
|
||||
@ -548,7 +551,8 @@ pubsub(Config) ->
|
||||
%% Publish <presence/> element within node "presence"
|
||||
ItemID = randoms:get_string(),
|
||||
Node = <<"presence">>,
|
||||
Item = #pubsub_item{id = ItemID, sub_els = [#presence{}]},
|
||||
Item = #pubsub_item{id = ItemID,
|
||||
xml_els = [xmpp_codec:encode(#presence{})]},
|
||||
#iq{type = result,
|
||||
sub_els = [#pubsub{publish = #pubsub_publish{
|
||||
node = Node,
|
||||
|
@ -7,7 +7,8 @@
|
||||
[{dec_int, 3}, {dec_int, 1}, {dec_enum, 2},
|
||||
{enc_int, 1}, {enc_enum, 1}]}).
|
||||
|
||||
-export([pp/1, format_error/1, decode/1, encode/1]).
|
||||
-export([pp/1, format_error/1, decode/1, is_known_tag/1,
|
||||
encode/1]).
|
||||
|
||||
decode({xmlel, _name, _attrs, _} = _el) ->
|
||||
case {_name, get_attr(<<"xmlns">>, _attrs)} of
|
||||
@ -687,6 +688,555 @@ decode({xmlel, _name, _attrs, _} = _el) ->
|
||||
erlang:error({xmpp_codec, {unknown_tag, _name, _xmlns}})
|
||||
end.
|
||||
|
||||
is_known_tag({xmlel, _name, _attrs, _} = _el) ->
|
||||
case {_name, get_attr(<<"xmlns">>, _attrs)} of
|
||||
{<<"x">>, <<"http://jabber.org/protocol/muc">>} -> true;
|
||||
{<<"query">>,
|
||||
<<"http://jabber.org/protocol/muc#owner">>} ->
|
||||
true;
|
||||
{<<"destroy">>,
|
||||
<<"http://jabber.org/protocol/muc#owner">>} ->
|
||||
true;
|
||||
{<<"reason">>,
|
||||
<<"http://jabber.org/protocol/muc#owner">>} ->
|
||||
true;
|
||||
{<<"password">>,
|
||||
<<"http://jabber.org/protocol/muc#owner">>} ->
|
||||
true;
|
||||
{<<"x">>, <<"http://jabber.org/protocol/muc#user">>} ->
|
||||
true;
|
||||
{<<"item">>,
|
||||
<<"http://jabber.org/protocol/muc#user">>} ->
|
||||
true;
|
||||
{<<"status">>,
|
||||
<<"http://jabber.org/protocol/muc#user">>} ->
|
||||
true;
|
||||
{<<"continue">>,
|
||||
<<"http://jabber.org/protocol/muc#user">>} ->
|
||||
true;
|
||||
{<<"actor">>,
|
||||
<<"http://jabber.org/protocol/muc#user">>} ->
|
||||
true;
|
||||
{<<"invite">>,
|
||||
<<"http://jabber.org/protocol/muc#user">>} ->
|
||||
true;
|
||||
{<<"destroy">>,
|
||||
<<"http://jabber.org/protocol/muc#user">>} ->
|
||||
true;
|
||||
{<<"decline">>,
|
||||
<<"http://jabber.org/protocol/muc#user">>} ->
|
||||
true;
|
||||
{<<"reason">>,
|
||||
<<"http://jabber.org/protocol/muc#user">>} ->
|
||||
true;
|
||||
{<<"history">>, <<"http://jabber.org/protocol/muc">>} ->
|
||||
true;
|
||||
{<<"query">>,
|
||||
<<"http://jabber.org/protocol/bytestreams">>} ->
|
||||
true;
|
||||
{<<"activate">>,
|
||||
<<"http://jabber.org/protocol/bytestreams">>} ->
|
||||
true;
|
||||
{<<"streamhost-used">>,
|
||||
<<"http://jabber.org/protocol/bytestreams">>} ->
|
||||
true;
|
||||
{<<"streamhost">>,
|
||||
<<"http://jabber.org/protocol/bytestreams">>} ->
|
||||
true;
|
||||
{<<"x">>, <<"jabber:x:delay">>} -> true;
|
||||
{<<"delay">>, <<"urn:xmpp:delay">>} -> true;
|
||||
{<<"headers">>,
|
||||
<<"http://jabber.org/protocol/shim">>} ->
|
||||
true;
|
||||
{<<"header">>, <<"http://jabber.org/protocol/shim">>} ->
|
||||
true;
|
||||
{<<"pubsub">>,
|
||||
<<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"retract">>,
|
||||
<<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"options">>,
|
||||
<<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"publish">>,
|
||||
<<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"unsubscribe">>,
|
||||
<<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"subscribe">>,
|
||||
<<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"affiliations">>,
|
||||
<<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"subscriptions">>,
|
||||
<<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"event">>,
|
||||
<<"http://jabber.org/protocol/pubsub#event">>} ->
|
||||
true;
|
||||
{<<"items">>,
|
||||
<<"http://jabber.org/protocol/pubsub#event">>} ->
|
||||
true;
|
||||
{<<"item">>,
|
||||
<<"http://jabber.org/protocol/pubsub#event">>} ->
|
||||
true;
|
||||
{<<"retract">>,
|
||||
<<"http://jabber.org/protocol/pubsub#event">>} ->
|
||||
true;
|
||||
{<<"items">>,
|
||||
<<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"item">>, <<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"affiliation">>,
|
||||
<<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"subscription">>,
|
||||
<<"http://jabber.org/protocol/pubsub">>} ->
|
||||
true;
|
||||
{<<"x">>, <<"jabber:x:data">>} -> true;
|
||||
{<<"item">>, <<"jabber:x:data">>} -> true;
|
||||
{<<"reported">>, <<"jabber:x:data">>} -> true;
|
||||
{<<"title">>, <<"jabber:x:data">>} -> true;
|
||||
{<<"instructions">>, <<"jabber:x:data">>} -> true;
|
||||
{<<"field">>, <<"jabber:x:data">>} -> true;
|
||||
{<<"option">>, <<"jabber:x:data">>} -> true;
|
||||
{<<"value">>, <<"jabber:x:data">>} -> true;
|
||||
{<<"desc">>, <<"jabber:x:data">>} -> true;
|
||||
{<<"required">>, <<"jabber:x:data">>} -> true;
|
||||
{<<"vCard">>, <<"vcard-temp">>} -> true;
|
||||
{<<"CLASS">>, <<"vcard-temp">>} -> true;
|
||||
{<<"CATEGORIES">>, <<"vcard-temp">>} -> true;
|
||||
{<<"KEY">>, <<"vcard-temp">>} -> true;
|
||||
{<<"SOUND">>, <<"vcard-temp">>} -> true;
|
||||
{<<"ORG">>, <<"vcard-temp">>} -> true;
|
||||
{<<"PHOTO">>, <<"vcard-temp">>} -> true;
|
||||
{<<"LOGO">>, <<"vcard-temp">>} -> true;
|
||||
{<<"BINVAL">>, <<"vcard-temp">>} -> true;
|
||||
{<<"GEO">>, <<"vcard-temp">>} -> true;
|
||||
{<<"EMAIL">>, <<"vcard-temp">>} -> true;
|
||||
{<<"TEL">>, <<"vcard-temp">>} -> true;
|
||||
{<<"LABEL">>, <<"vcard-temp">>} -> true;
|
||||
{<<"ADR">>, <<"vcard-temp">>} -> true;
|
||||
{<<"N">>, <<"vcard-temp">>} -> true;
|
||||
{<<"CONFIDENTIAL">>, <<"vcard-temp">>} -> true;
|
||||
{<<"PRIVATE">>, <<"vcard-temp">>} -> true;
|
||||
{<<"PUBLIC">>, <<"vcard-temp">>} -> true;
|
||||
{<<"EXTVAL">>, <<"vcard-temp">>} -> true;
|
||||
{<<"TYPE">>, <<"vcard-temp">>} -> true;
|
||||
{<<"DESC">>, <<"vcard-temp">>} -> true;
|
||||
{<<"URL">>, <<"vcard-temp">>} -> true;
|
||||
{<<"UID">>, <<"vcard-temp">>} -> true;
|
||||
{<<"SORT-STRING">>, <<"vcard-temp">>} -> true;
|
||||
{<<"REV">>, <<"vcard-temp">>} -> true;
|
||||
{<<"PRODID">>, <<"vcard-temp">>} -> true;
|
||||
{<<"NOTE">>, <<"vcard-temp">>} -> true;
|
||||
{<<"KEYWORD">>, <<"vcard-temp">>} -> true;
|
||||
{<<"ROLE">>, <<"vcard-temp">>} -> true;
|
||||
{<<"TITLE">>, <<"vcard-temp">>} -> true;
|
||||
{<<"TZ">>, <<"vcard-temp">>} -> true;
|
||||
{<<"MAILER">>, <<"vcard-temp">>} -> true;
|
||||
{<<"JABBERID">>, <<"vcard-temp">>} -> true;
|
||||
{<<"BDAY">>, <<"vcard-temp">>} -> true;
|
||||
{<<"NICKNAME">>, <<"vcard-temp">>} -> true;
|
||||
{<<"FN">>, <<"vcard-temp">>} -> true;
|
||||
{<<"VERSION">>, <<"vcard-temp">>} -> true;
|
||||
{<<"CRED">>, <<"vcard-temp">>} -> true;
|
||||
{<<"PHONETIC">>, <<"vcard-temp">>} -> true;
|
||||
{<<"ORGUNIT">>, <<"vcard-temp">>} -> true;
|
||||
{<<"ORGNAME">>, <<"vcard-temp">>} -> true;
|
||||
{<<"LON">>, <<"vcard-temp">>} -> true;
|
||||
{<<"LAT">>, <<"vcard-temp">>} -> true;
|
||||
{<<"USERID">>, <<"vcard-temp">>} -> true;
|
||||
{<<"NUMBER">>, <<"vcard-temp">>} -> true;
|
||||
{<<"LINE">>, <<"vcard-temp">>} -> true;
|
||||
{<<"CTRY">>, <<"vcard-temp">>} -> true;
|
||||
{<<"PCODE">>, <<"vcard-temp">>} -> true;
|
||||
{<<"REGION">>, <<"vcard-temp">>} -> true;
|
||||
{<<"LOCALITY">>, <<"vcard-temp">>} -> true;
|
||||
{<<"STREET">>, <<"vcard-temp">>} -> true;
|
||||
{<<"EXTADD">>, <<"vcard-temp">>} -> true;
|
||||
{<<"POBOX">>, <<"vcard-temp">>} -> true;
|
||||
{<<"SUFFIX">>, <<"vcard-temp">>} -> true;
|
||||
{<<"PREFIX">>, <<"vcard-temp">>} -> true;
|
||||
{<<"MIDDLE">>, <<"vcard-temp">>} -> true;
|
||||
{<<"GIVEN">>, <<"vcard-temp">>} -> true;
|
||||
{<<"FAMILY">>, <<"vcard-temp">>} -> true;
|
||||
{<<"X400">>, <<"vcard-temp">>} -> true;
|
||||
{<<"INTERNET">>, <<"vcard-temp">>} -> true;
|
||||
{<<"PREF">>, <<"vcard-temp">>} -> true;
|
||||
{<<"INTL">>, <<"vcard-temp">>} -> true;
|
||||
{<<"DOM">>, <<"vcard-temp">>} -> true;
|
||||
{<<"PARCEL">>, <<"vcard-temp">>} -> true;
|
||||
{<<"POSTAL">>, <<"vcard-temp">>} -> true;
|
||||
{<<"PCS">>, <<"vcard-temp">>} -> true;
|
||||
{<<"ISDN">>, <<"vcard-temp">>} -> true;
|
||||
{<<"MODEM">>, <<"vcard-temp">>} -> true;
|
||||
{<<"BBS">>, <<"vcard-temp">>} -> true;
|
||||
{<<"VIDEO">>, <<"vcard-temp">>} -> true;
|
||||
{<<"CELL">>, <<"vcard-temp">>} -> true;
|
||||
{<<"MSG">>, <<"vcard-temp">>} -> true;
|
||||
{<<"PAGER">>, <<"vcard-temp">>} -> true;
|
||||
{<<"FAX">>, <<"vcard-temp">>} -> true;
|
||||
{<<"VOICE">>, <<"vcard-temp">>} -> true;
|
||||
{<<"WORK">>, <<"vcard-temp">>} -> true;
|
||||
{<<"HOME">>, <<"vcard-temp">>} -> true;
|
||||
{<<"stream:error">>,
|
||||
<<"http://etherx.jabber.org/streams">>} ->
|
||||
true;
|
||||
{<<"unsupported-version">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"unsupported-stanza-type">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"unsupported-encoding">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"undefined-condition">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"system-shutdown">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"see-other-host">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"restricted-xml">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"resource-constraint">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"reset">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"remote-connection-failed">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"policy-violation">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"not-well-formed">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"not-authorized">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"invalid-xml">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"invalid-namespace">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"invalid-id">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"invalid-from">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"internal-server-error">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"improper-addressing">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"host-unknown">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"host-gone">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"connection-timeout">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"conflict">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"bad-namespace-prefix">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"bad-format">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"text">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
|
||||
true;
|
||||
{<<"time">>, <<"urn:xmpp:time">>} -> true;
|
||||
{<<"tzo">>, <<"urn:xmpp:time">>} -> true;
|
||||
{<<"utc">>, <<"urn:xmpp:time">>} -> true;
|
||||
{<<"ping">>, <<"urn:xmpp:ping">>} -> true;
|
||||
{<<"session">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-session">>} ->
|
||||
true;
|
||||
{<<"query">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"key">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"text">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"misc">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"date">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"url">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"phone">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"zip">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"state">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"city">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"address">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"email">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"last">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"first">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"name">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"password">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"nick">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"username">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"instructions">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"remove">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"registered">>, <<"jabber:iq:register">>} -> true;
|
||||
{<<"register">>,
|
||||
<<"http://jabber.org/features/iq-register">>} ->
|
||||
true;
|
||||
{<<"c">>, <<"http://jabber.org/protocol/caps">>} ->
|
||||
true;
|
||||
{<<"ack">>, <<"p1:ack">>} -> true;
|
||||
{<<"rebind">>, <<"p1:rebind">>} -> true;
|
||||
{<<"push">>, <<"p1:push">>} -> true;
|
||||
{<<"stream:features">>,
|
||||
<<"http://etherx.jabber.org/streams">>} ->
|
||||
true;
|
||||
{<<"compression">>,
|
||||
<<"http://jabber.org/features/compress">>} ->
|
||||
true;
|
||||
{<<"method">>,
|
||||
<<"http://jabber.org/features/compress">>} ->
|
||||
true;
|
||||
{<<"compressed">>,
|
||||
<<"http://jabber.org/protocol/compress">>} ->
|
||||
true;
|
||||
{<<"compress">>,
|
||||
<<"http://jabber.org/protocol/compress">>} ->
|
||||
true;
|
||||
{<<"method">>,
|
||||
<<"http://jabber.org/protocol/compress">>} ->
|
||||
true;
|
||||
{<<"failure">>,
|
||||
<<"http://jabber.org/protocol/compress">>} ->
|
||||
true;
|
||||
{<<"unsupported-method">>,
|
||||
<<"http://jabber.org/protocol/compress">>} ->
|
||||
true;
|
||||
{<<"processing-failed">>,
|
||||
<<"http://jabber.org/protocol/compress">>} ->
|
||||
true;
|
||||
{<<"setup-failed">>,
|
||||
<<"http://jabber.org/protocol/compress">>} ->
|
||||
true;
|
||||
{<<"failure">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
|
||||
true;
|
||||
{<<"proceed">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
|
||||
true;
|
||||
{<<"starttls">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
|
||||
true;
|
||||
{<<"required">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
|
||||
true;
|
||||
{<<"mechanisms">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"mechanism">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"failure">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"temporary-auth-failure">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"not-authorized">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"mechanism-too-weak">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"malformed-request">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"invalid-mechanism">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"invalid-authzid">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"incorrect-encoding">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"encryption-required">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"credentials-expired">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"account-disabled">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"aborted">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"text">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"success">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"response">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"challenge">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"abort">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"auth">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
|
||||
true;
|
||||
{<<"bind">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
|
||||
true;
|
||||
{<<"resource">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
|
||||
true;
|
||||
{<<"jid">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
|
||||
true;
|
||||
{<<"error">>, <<"jabber:client">>} -> true;
|
||||
{<<"text">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"unexpected-request">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"undefined-condition">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"subscription-required">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"service-unavailable">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"resource-constraint">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"remote-server-timeout">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"remote-server-not-found">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"registration-required">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"redirect">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"recipient-unavailable">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"policy-violation">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"not-authorized">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"not-allowed">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"not-acceptable">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"jid-malformed">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"item-not-found">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"internal-server-error">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"gone">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"forbidden">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"feature-not-implemented">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"conflict">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"bad-request">>,
|
||||
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
|
||||
true;
|
||||
{<<"presence">>, <<"jabber:client">>} -> true;
|
||||
{<<"priority">>, <<"jabber:client">>} -> true;
|
||||
{<<"status">>, <<"jabber:client">>} -> true;
|
||||
{<<"show">>, <<"jabber:client">>} -> true;
|
||||
{<<"message">>, <<"jabber:client">>} -> true;
|
||||
{<<"thread">>, <<"jabber:client">>} -> true;
|
||||
{<<"body">>, <<"jabber:client">>} -> true;
|
||||
{<<"subject">>, <<"jabber:client">>} -> true;
|
||||
{<<"iq">>, <<"jabber:client">>} -> true;
|
||||
{<<"query">>, <<"http://jabber.org/protocol/stats">>} ->
|
||||
true;
|
||||
{<<"stat">>, <<"http://jabber.org/protocol/stats">>} ->
|
||||
true;
|
||||
{<<"error">>, <<"http://jabber.org/protocol/stats">>} ->
|
||||
true;
|
||||
{<<"storage">>, <<"storage:bookmarks">>} -> true;
|
||||
{<<"url">>, <<"storage:bookmarks">>} -> true;
|
||||
{<<"conference">>, <<"storage:bookmarks">>} -> true;
|
||||
{<<"password">>, <<"storage:bookmarks">>} -> true;
|
||||
{<<"nick">>, <<"storage:bookmarks">>} -> true;
|
||||
{<<"query">>, <<"jabber:iq:private">>} -> true;
|
||||
{<<"query">>,
|
||||
<<"http://jabber.org/protocol/disco#items">>} ->
|
||||
true;
|
||||
{<<"item">>,
|
||||
<<"http://jabber.org/protocol/disco#items">>} ->
|
||||
true;
|
||||
{<<"query">>,
|
||||
<<"http://jabber.org/protocol/disco#info">>} ->
|
||||
true;
|
||||
{<<"feature">>,
|
||||
<<"http://jabber.org/protocol/disco#info">>} ->
|
||||
true;
|
||||
{<<"identity">>,
|
||||
<<"http://jabber.org/protocol/disco#info">>} ->
|
||||
true;
|
||||
{<<"blocklist">>, <<"urn:xmpp:blocking">>} -> true;
|
||||
{<<"unblock">>, <<"urn:xmpp:blocking">>} -> true;
|
||||
{<<"block">>, <<"urn:xmpp:blocking">>} -> true;
|
||||
{<<"item">>, <<"urn:xmpp:blocking">>} -> true;
|
||||
{<<"query">>, <<"jabber:iq:privacy">>} -> true;
|
||||
{<<"active">>, <<"jabber:iq:privacy">>} -> true;
|
||||
{<<"default">>, <<"jabber:iq:privacy">>} -> true;
|
||||
{<<"list">>, <<"jabber:iq:privacy">>} -> true;
|
||||
{<<"item">>, <<"jabber:iq:privacy">>} -> true;
|
||||
{<<"presence-out">>, <<"jabber:iq:privacy">>} -> true;
|
||||
{<<"presence-in">>, <<"jabber:iq:privacy">>} -> true;
|
||||
{<<"iq">>, <<"jabber:iq:privacy">>} -> true;
|
||||
{<<"message">>, <<"jabber:iq:privacy">>} -> true;
|
||||
{<<"query">>, <<"jabber:iq:roster">>} -> true;
|
||||
{<<"item">>, <<"jabber:iq:roster">>} -> true;
|
||||
{<<"group">>, <<"jabber:iq:roster">>} -> true;
|
||||
{<<"query">>, <<"jabber:iq:version">>} -> true;
|
||||
{<<"os">>, <<"jabber:iq:version">>} -> true;
|
||||
{<<"version">>, <<"jabber:iq:version">>} -> true;
|
||||
{<<"name">>, <<"jabber:iq:version">>} -> true;
|
||||
{<<"query">>, <<"jabber:iq:last">>} -> true;
|
||||
_ -> false
|
||||
end.
|
||||
|
||||
encode({muc, _, _} = X) ->
|
||||
encode_muc(X,
|
||||
[{<<"xmlns">>, <<"http://jabber.org/protocol/muc">>}]);
|
||||
@ -1091,7 +1641,7 @@ pp(disco_info, 4) ->
|
||||
[node, identities, features, xdata];
|
||||
pp(disco_item, 3) -> [jid, name, node];
|
||||
pp(disco_items, 2) -> [node, items];
|
||||
pp(private, 1) -> [sub_els];
|
||||
pp(private, 1) -> [xml_els];
|
||||
pp(bookmark_conference, 5) ->
|
||||
[name, jid, autojoin, nick, password];
|
||||
pp(bookmark_url, 2) -> [name, url];
|
||||
@ -1168,7 +1718,7 @@ pp(xdata, 6) ->
|
||||
[type, instructions, title, reported, items, fields];
|
||||
pp(pubsub_subscription, 4) -> [jid, node, subid, type];
|
||||
pp(pubsub_affiliation, 2) -> [node, type];
|
||||
pp(pubsub_item, 2) -> [id, sub_els];
|
||||
pp(pubsub_item, 2) -> [id, xml_els];
|
||||
pp(pubsub_items, 4) -> [node, max_items, subid, items];
|
||||
pp(pubsub_event_item, 3) -> [id, node, publisher];
|
||||
pp(pubsub_event_items, 3) -> [node, retract, items];
|
||||
@ -3698,17 +4248,17 @@ encode_pubsub_items_attr_subid(_val, _acc) ->
|
||||
[{<<"subid">>, _val} | _acc].
|
||||
|
||||
decode_pubsub_item({xmlel, <<"item">>, _attrs, _els}) ->
|
||||
__Els = decode_pubsub_item_els(_els, []),
|
||||
__Xmls = decode_pubsub_item_els(_els, []),
|
||||
Id = decode_pubsub_item_attrs(_attrs, undefined),
|
||||
{pubsub_item, Id, __Els}.
|
||||
{pubsub_item, Id, __Xmls}.
|
||||
|
||||
decode_pubsub_item_els([], __Els) ->
|
||||
lists:reverse(__Els);
|
||||
decode_pubsub_item_els([], __Xmls) ->
|
||||
lists:reverse(__Xmls);
|
||||
decode_pubsub_item_els([{xmlel, _, _, _} = _el | _els],
|
||||
__Els) ->
|
||||
decode_pubsub_item_els(_els, [decode(_el) | __Els]);
|
||||
decode_pubsub_item_els([_ | _els], __Els) ->
|
||||
decode_pubsub_item_els(_els, __Els).
|
||||
__Xmls) ->
|
||||
decode_pubsub_item_els(_els, [_el | __Xmls]);
|
||||
decode_pubsub_item_els([_ | _els], __Xmls) ->
|
||||
decode_pubsub_item_els(_els, __Xmls).
|
||||
|
||||
decode_pubsub_item_attrs([{<<"id">>, _val} | _attrs],
|
||||
_Id) ->
|
||||
@ -3718,9 +4268,9 @@ decode_pubsub_item_attrs([_ | _attrs], Id) ->
|
||||
decode_pubsub_item_attrs([], Id) ->
|
||||
decode_pubsub_item_attr_id(Id).
|
||||
|
||||
encode_pubsub_item({pubsub_item, Id, __Els},
|
||||
encode_pubsub_item({pubsub_item, Id, __Xmls},
|
||||
_xmlns_attrs) ->
|
||||
_els = [encode(_el) || _el <- __Els],
|
||||
_els = __Xmls,
|
||||
_attrs = encode_pubsub_item_attr_id(Id, _xmlns_attrs),
|
||||
{xmlel, <<"item">>, _attrs, _els}.
|
||||
|
||||
@ -9898,7 +10448,11 @@ decode_stream_features_els([], __Els) ->
|
||||
decode_stream_features_els([{xmlel, _, _, _} = _el
|
||||
| _els],
|
||||
__Els) ->
|
||||
decode_stream_features_els(_els, [decode(_el) | __Els]);
|
||||
case is_known_tag(_el) of
|
||||
true ->
|
||||
decode_stream_features_els(_els, [decode(_el) | __Els]);
|
||||
false -> decode_stream_features_els(_els, __Els)
|
||||
end;
|
||||
decode_stream_features_els([_ | _els], __Els) ->
|
||||
decode_stream_features_els(_els, __Els).
|
||||
|
||||
@ -11740,8 +12294,14 @@ decode_presence_els([{xmlel, <<"priority">>, _attrs,
|
||||
end;
|
||||
decode_presence_els([{xmlel, _, _, _} = _el | _els],
|
||||
Error, Status, Show, Priority, __Els) ->
|
||||
decode_presence_els(_els, Error, Status, Show, Priority,
|
||||
[decode(_el) | __Els]);
|
||||
case is_known_tag(_el) of
|
||||
true ->
|
||||
decode_presence_els(_els, Error, Status, Show, Priority,
|
||||
[decode(_el) | __Els]);
|
||||
false ->
|
||||
decode_presence_els(_els, Error, Status, Show, Priority,
|
||||
__Els)
|
||||
end;
|
||||
decode_presence_els([_ | _els], Error, Status, Show,
|
||||
Priority, __Els) ->
|
||||
decode_presence_els(_els, Error, Status, Show, Priority,
|
||||
@ -12045,8 +12605,14 @@ decode_message_els([{xmlel, <<"body">>, _attrs, _} = _el
|
||||
end;
|
||||
decode_message_els([{xmlel, _, _, _} = _el | _els],
|
||||
Error, Thread, Subject, Body, __Els) ->
|
||||
decode_message_els(_els, Error, Thread, Subject, Body,
|
||||
[decode(_el) | __Els]);
|
||||
case is_known_tag(_el) of
|
||||
true ->
|
||||
decode_message_els(_els, Error, Thread, Subject, Body,
|
||||
[decode(_el) | __Els]);
|
||||
false ->
|
||||
decode_message_els(_els, Error, Thread, Subject, Body,
|
||||
__Els)
|
||||
end;
|
||||
decode_message_els([_ | _els], Error, Thread, Subject,
|
||||
Body, __Els) ->
|
||||
decode_message_els(_els, Error, Thread, Subject, Body,
|
||||
@ -12312,7 +12878,11 @@ decode_iq_els([{xmlel, <<"error">>, _attrs, _} = _el
|
||||
end;
|
||||
decode_iq_els([{xmlel, _, _, _} = _el | _els], Error,
|
||||
__Els) ->
|
||||
decode_iq_els(_els, Error, [decode(_el) | __Els]);
|
||||
case is_known_tag(_el) of
|
||||
true ->
|
||||
decode_iq_els(_els, Error, [decode(_el) | __Els]);
|
||||
false -> decode_iq_els(_els, Error, __Els)
|
||||
end;
|
||||
decode_iq_els([_ | _els], Error, __Els) ->
|
||||
decode_iq_els(_els, Error, __Els).
|
||||
|
||||
@ -12855,17 +13425,18 @@ encode_conference_nick_cdata(_val, _acc) ->
|
||||
[{xmlcdata, _val} | _acc].
|
||||
|
||||
decode_private({xmlel, <<"query">>, _attrs, _els}) ->
|
||||
__Els = decode_private_els(_els, []), {private, __Els}.
|
||||
__Xmls = decode_private_els(_els, []),
|
||||
{private, __Xmls}.
|
||||
|
||||
decode_private_els([], __Els) -> lists:reverse(__Els);
|
||||
decode_private_els([], __Xmls) -> lists:reverse(__Xmls);
|
||||
decode_private_els([{xmlel, _, _, _} = _el | _els],
|
||||
__Els) ->
|
||||
decode_private_els(_els, [decode(_el) | __Els]);
|
||||
decode_private_els([_ | _els], __Els) ->
|
||||
decode_private_els(_els, __Els).
|
||||
__Xmls) ->
|
||||
decode_private_els(_els, [_el | __Xmls]);
|
||||
decode_private_els([_ | _els], __Xmls) ->
|
||||
decode_private_els(_els, __Xmls).
|
||||
|
||||
encode_private({private, __Els}, _xmlns_attrs) ->
|
||||
_els = [encode(_el) || _el <- __Els],
|
||||
encode_private({private, __Xmls}, _xmlns_attrs) ->
|
||||
_els = __Xmls,
|
||||
_attrs = _xmlns_attrs,
|
||||
{xmlel, <<"query">>, _attrs, _els}.
|
||||
|
||||
|
@ -38,12 +38,12 @@
|
||||
|
||||
-record(gone, {uri :: binary()}).
|
||||
|
||||
-record(private, {sub_els = [] :: [any()]}).
|
||||
-record(private, {xml_els = [] :: [any()]}).
|
||||
|
||||
-record(p1_ack, {}).
|
||||
|
||||
-record(pubsub_item, {id :: binary(),
|
||||
sub_els = [] :: [any()]}).
|
||||
xml_els = [] :: [any()]}).
|
||||
|
||||
-record(pubsub_publish, {node :: binary(),
|
||||
items = [] :: [#pubsub_item{}]}).
|
||||
|
@ -226,7 +226,7 @@
|
||||
-xml(private,
|
||||
#elem{name = <<"query">>,
|
||||
xmlns = <<"jabber:iq:private">>,
|
||||
result = {private, '$_els'}}).
|
||||
result = {private, '$_xmls'}}).
|
||||
|
||||
-xml(conference_nick,
|
||||
#elem{name = <<"nick">>,
|
||||
@ -1608,7 +1608,7 @@
|
||||
-xml(pubsub_item,
|
||||
#elem{name = <<"item">>,
|
||||
xmlns = <<"http://jabber.org/protocol/pubsub">>,
|
||||
result = {pubsub_item, '$id', '$_els'},
|
||||
result = {pubsub_item, '$id', '$_xmls'},
|
||||
attrs = [#attr{name = <<"id">>}]}).
|
||||
|
||||
-xml(pubsub_items,
|
||||
|
Loading…
Reference in New Issue
Block a user