Packages
ejabberd
17.6.0
26.4.0
26.3.0
26.2.0
26.1.0
25.10.0
25.8.0
25.7.0
25.4.0
25.3.0
24.12.0
24.10.0
24.7.0
24.6.0
24.2.6
23.10.0
23.4.0
23.1.0
22.10.0
22.5.0
21.12.0
21.7.0
21.4.0
21.1.0
20.12.0
20.7.0
20.4.0
20.3.0
20.2.0
20.1.0
19.9.1
19.9.0
19.8.0
19.5.0
19.2.0
18.12.1
18.12.0
18.6.0
18.4.0
18.3.0
18.1.0
17.11.0
17.9.0
17.6.0
17.3.0
17.1.0
16.12.0-beta1
16.9.0
16.8.0
16.6.2
16.6.1
16.6.0
16.4.1
16.4.0
16.3.0
16.2.0
16.1.0-beta1
Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server)
Current section
Files
Jump to
Current section
Files
src/XmppAddr.erl
%% Generated by the Erlang ASN.1 BER_V2-compiler version, utilizing bit-syntax:4.0.1
%% Purpose: encoder and decoder to the types in mod XmppAddr
-module('XmppAddr').
-compile(nowarn_unused_vars).
-include("XmppAddr.hrl").
-asn1_info([{vsn,'4.0.1'},
{module,'XmppAddr'},
{options,[{i,"src"},{outdir,"src"},noobj,{i,"."},{i,"asn1"}]}]).
-export([encoding_rule/0,bit_string_format/0,
legacy_erlang_types/0]).
-export(['dialyzer-suppressions'/1]).
-export([
'enc_XmppAddr'/2
]).
-export([
'dec_XmppAddr'/2
]).
-export([
'id-on-xmppAddr'/0
]).
-export([info/0]).
-export([encode/2,decode/2]).
encoding_rule() -> ber.
bit_string_format() -> bitstring.
legacy_erlang_types() -> false.
encode(Type, Data) ->
try iolist_to_binary(element(1, encode_disp(Type, Data))) of
Bytes ->
{ok,Bytes}
catch
Class:Exception when Class =:= error; Class =:= exit ->
case Exception of
{error,Reason}=Error ->
Error;
Reason ->
{error,{asn1,Reason}}
end
end.
decode(Type,Data) ->
try decode_disp(Type, element(1, ber_decode_nif(Data))) of
Result ->
{ok,Result}
catch
Class:Exception when Class =:= error; Class =:= exit ->
case Exception of
{error,Reason}=Error ->
Error;
Reason ->
{error,{asn1,Reason}}
end
end.
encode_disp('XmppAddr',Data) -> 'enc_XmppAddr'(Data);
encode_disp(Type,_Data) -> exit({error,{asn1,{undefined_type,Type}}}).
decode_disp('XmppAddr',Data) -> 'dec_XmppAddr'(Data);
decode_disp(Type,_Data) -> exit({error,{asn1,{undefined_type,Type}}}).
info() ->
case ?MODULE:module_info(attributes) of
Attributes when is_list(Attributes) ->
case lists:keyfind(asn1_info, 1, Attributes) of
{_,Info} when is_list(Info) ->
Info;
_ ->
[]
end;
_ ->
[]
end.
%%================================
%% XmppAddr
%%================================
'enc_XmppAddr'(Val) ->
'enc_XmppAddr'(Val, [<<12>>]).
'enc_XmppAddr'(Val, TagIn) ->
encode_UTF8_string(Val, TagIn).
'dec_XmppAddr'(Tlv) ->
'dec_XmppAddr'(Tlv, [12]).
'dec_XmppAddr'(Tlv, TagIn) ->
decode_UTF8_string(Tlv, TagIn).
'id-on-xmppAddr'() ->
{1,3,6,1,5,5,7,8,5}.
%%%
%%% Run-time functions.
%%%
'dialyzer-suppressions'(Arg) ->
ok.
ber_decode_nif(B) ->
asn1rt_nif:decode_ber_tlv(B).
collect_parts(TlvList) ->
collect_parts(TlvList, []).
collect_parts([{_,L}|Rest], Acc) when is_list(L) ->
collect_parts(Rest, [collect_parts(L)|Acc]);
collect_parts([{3,<<Unused,Bits/binary>>}|Rest], _Acc) ->
collect_parts_bit(Rest, [Bits], Unused);
collect_parts([{_T,V}|Rest], Acc) ->
collect_parts(Rest, [V|Acc]);
collect_parts([], Acc) ->
list_to_binary(lists:reverse(Acc)).
collect_parts_bit([{3,<<Unused,Bits/binary>>}|Rest], Acc, Uacc) ->
collect_parts_bit(Rest, [Bits|Acc], Unused + Uacc);
collect_parts_bit([], Acc, Uacc) ->
list_to_binary([Uacc|lists:reverse(Acc)]).
decode_UTF8_string(Tlv, TagsIn) ->
Val = match_tags(Tlv, TagsIn),
case Val of
[_|_] = PartList ->
collect_parts(PartList);
Bin ->
Bin
end.
encode_UTF8_string(UTF8String, TagIn) when is_binary(UTF8String) ->
encode_tags(TagIn, UTF8String, byte_size(UTF8String));
encode_UTF8_string(UTF8String, TagIn) ->
encode_tags(TagIn, UTF8String, length(UTF8String)).
encode_length(L) when L =< 127 ->
{[L],1};
encode_length(L) ->
Oct = minimum_octets(L),
Len = length(Oct),
if
Len =< 126 ->
{[128 bor Len|Oct],Len + 1};
true ->
exit({error,{asn1,too_long_length_oct,Len}})
end.
encode_tags([Tag|Trest], BytesSoFar, LenSoFar) ->
{Bytes2,L2} = encode_length(LenSoFar),
encode_tags(Trest,
[Tag,Bytes2|BytesSoFar],
LenSoFar + byte_size(Tag) + L2);
encode_tags([], BytesSoFar, LenSoFar) ->
{BytesSoFar,LenSoFar}.
match_tags({T,V}, [T]) ->
V;
match_tags({T,V}, [T|Tt]) ->
match_tags(V, Tt);
match_tags([{T,V}], [T|Tt]) ->
match_tags(V, Tt);
match_tags([{T,_V}|_] = Vlist, [T]) ->
Vlist;
match_tags(Tlv, []) ->
Tlv;
match_tags({Tag,_V} = Tlv, [T|_Tt]) ->
exit({error,{asn1,{wrong_tag,{{expected,T},{got,Tag,Tlv}}}}}).
minimum_octets(0, Acc) ->
Acc;
minimum_octets(Val, Acc) ->
minimum_octets(Val bsr 8, [Val band 255|Acc]).
minimum_octets(Val) ->
minimum_octets(Val, []).