summaryrefslogtreecommitdiff
path: root/lib/megaco
diff options
context:
space:
mode:
authorMicael Karlberg <bmk@erlang.org>2020-03-19 17:20:00 +0100
committerMicael Karlberg <bmk@erlang.org>2020-06-09 15:51:01 +0200
commitb724ce9b297afc6682b2fe1773943016505a0800 (patch)
tree183aa2ffdbb3afb2cdda853cb0db515a2f8b3b73 /lib/megaco
parent5a165804f490d855a42da411d6b72867c72c9d0d (diff)
downloaderlang-b724ce9b297afc6682b2fe1773943016505a0800.tar.gz
[megaco] Removed all (deprecated) prev3 text codec(s)
OTP-16560
Diffstat (limited to 'lib/megaco')
-rw-r--r--lib/megaco/src/text/Makefile4
-rw-r--r--lib/megaco/src/text/depend.mk81
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder.erl210
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_prev3a.erl303
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_prev3b.erl438
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_prev3c.erl461
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_v1.erl4
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_v2.erl4
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_v3.erl2
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder.erl226
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder_prev3a.erl309
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder_prev3b.erl443
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder_prev3c.erl489
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder_v1.erl4
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder_v2.erl4
-rw-r--r--lib/megaco/src/text/megaco_text_gen_prev3a.hrl2943
-rw-r--r--lib/megaco/src/text/megaco_text_gen_prev3b.hrl2964
-rw-r--r--lib/megaco/src/text/megaco_text_gen_prev3c.hrl3441
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3a.hrl1678
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3a.yrl1597
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3b.hrl1725
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3b.yrl1607
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3c.hrl1988
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3c.yrl1679
-rw-r--r--lib/megaco/src/text/megaco_text_parser_v1.hrl4
-rw-r--r--lib/megaco/src/text/megaco_text_parser_v2.hrl4
-rw-r--r--lib/megaco/src/text/megaco_text_scanner.erl4
-rw-r--r--lib/megaco/src/text/megaco_text_tokens.hrl20
-rw-r--r--lib/megaco/src/text/modules.mk36
29 files changed, 23 insertions, 22649 deletions
diff --git a/lib/megaco/src/text/Makefile b/lib/megaco/src/text/Makefile
index 3dd24b1df7..bb5f80403b 100644
--- a/lib/megaco/src/text/Makefile
+++ b/lib/megaco/src/text/Makefile
@@ -113,12 +113,14 @@ info:
# Special Build Targets
# ----------------------------------------------------
-parser: parser_v1 parser_v2
+parser: parser_v1 parser_v2 parser_v3
parser_v1: megaco_text_parser_v1.$(EMULATOR)
parser_v2: megaco_text_parser_v2.$(EMULATOR)
+parser_v3: megaco_text_parser_v3.$(EMULATOR)
+
# ----------------------------------------------------
# Release Target
diff --git a/lib/megaco/src/text/depend.mk b/lib/megaco/src/text/depend.mk
index 39c68fc8a9..3e4ef9fdfd 100644
--- a/lib/megaco/src/text/depend.mk
+++ b/lib/megaco/src/text/depend.mk
@@ -28,18 +28,6 @@ megaco_text_parser_v3.erl: \
megaco_text_parser_v3.yrl \
megaco_text_parser_v3.hrl
-# <DEPRECATED>
-megaco_text_parser_prev3a.erl: \
- megaco_text_parser_prev3a.yrl \
- megaco_text_parser_prev3a.hrl
-megaco_text_parser_prev3b.erl: \
- megaco_text_parser_prev3b.yrl \
- megaco_text_parser_prev3b.hrl
-megaco_text_parser_prev3c.erl: \
- megaco_text_parser_prev3c.yrl \
- megaco_text_parser_prev3c.hrl
-# </DEPRECATED>
-
megaco_text_mini_parser.erl: \
megaco_text_mini_parser.yrl \
megaco_text_mini_parser.hrl
@@ -71,29 +59,6 @@ $(EBIN)/megaco_compact_text_encoder_v3.$(EMULATOR): \
megaco_text_tokens.hrl \
megaco_text_gen_v3.hrl
-# <DEPRECATED>
-$(EBIN)/megaco_compact_text_encoder_prev3a.$(EMULATOR): \
- megaco_compact_text_encoder_prev3a.erl \
- $(MEGACO_INCLUDEDIR)/megaco.hrl \
- $(MEGACO_INCLUDEDIR)/megaco_message_prev3a.hrl \
- megaco_text_tokens.hrl \
- megaco_text_gen_prev3a.hrl
-
-$(EBIN)/megaco_compact_text_encoder_prev3b.$(EMULATOR): \
- megaco_compact_text_encoder_prev3b.erl \
- $(MEGACO_INCLUDEDIR)/megaco.hrl \
- $(MEGACO_INCLUDEDIR)/megaco_message_prev3b.hrl \
- megaco_text_tokens.hrl \
- megaco_text_gen_prev3b.hrl
-
-$(EBIN)/megaco_compact_text_encoder_prev3c.$(EMULATOR): \
- megaco_compact_text_encoder_prev3c.erl \
- $(MEGACO_INCLUDEDIR)/megaco.hrl \
- $(MEGACO_INCLUDEDIR)/megaco_message_prev3c.hrl \
- megaco_text_tokens.hrl \
- megaco_text_gen_prev3c.hrl
-# </DEPRECATED>
-
$(EBIN)/megaco_pretty_text_encoder.$(EMULATOR): \
megaco_pretty_text_encoder.erl
@@ -118,29 +83,6 @@ $(EBIN)/megaco_pretty_text_encoder_v3.$(EMULATOR): \
megaco_text_tokens.hrl \
megaco_text_gen_v3.hrl
-# <DEPRECATED>
-$(EBIN)/megaco_pretty_text_encoder_prev3a.$(EMULATOR): \
- megaco_pretty_text_encoder_prev3a.erl \
- $(MEGACO_INCLUDEDIR)/megaco.hrl \
- $(MEGACO_INCLUDEDIR)/megaco_message_prev3a.hrl \
- megaco_text_tokens.hrl \
- megaco_text_gen_prev3a.hrl
-
-$(EBIN)/megaco_pretty_text_encoder_prev3b.$(EMULATOR): \
- megaco_pretty_text_encoder_prev3b.erl \
- $(MEGACO_INCLUDEDIR)/megaco.hrl \
- $(MEGACO_INCLUDEDIR)/megaco_message_prev3b.hrl \
- megaco_text_tokens.hrl \
- megaco_text_gen_prev3b.hrl
-
-$(EBIN)/megaco_pretty_text_encoder_prev3c.$(EMULATOR): \
- megaco_pretty_text_encoder_prev3c.erl \
- $(MEGACO_INCLUDEDIR)/megaco.hrl \
- $(MEGACO_INCLUDEDIR)/megaco_message_prev3c.hrl \
- megaco_text_tokens.hrl \
- megaco_text_gen_prev3c.hrl
-# </DEPRECATED>
-
$(EBIN)/megaco_text_parser_v1.$(EMULATOR): \
megaco_text_parser_v1.erl \
$(MEGACO_INCLUDEDIR)/megaco.hrl \
@@ -162,29 +104,6 @@ $(EBIN)/megaco_text_parser_v3.$(EMULATOR): \
megaco_text_tokens.hrl \
megaco_text_parser_v3.hrl
-# <DEPRECATED>
-$(EBIN)/megaco_text_parser_prev3a.$(EMULATOR): \
- megaco_text_parser_prev3a.erl \
- $(MEGACO_INCLUDEDIR)/megaco.hrl \
- $(MEGACO_INCLUDEDIR)/megaco_message_prev3a.hrl \
- megaco_text_tokens.hrl \
- megaco_text_parser_prev3a.hrl
-
-$(EBIN)/megaco_text_parser_prev3b.$(EMULATOR): \
- megaco_text_parser_prev3b.erl \
- $(MEGACO_INCLUDEDIR)/megaco.hrl \
- $(MEGACO_INCLUDEDIR)/megaco_message_prev3b.hrl \
- megaco_text_tokens.hrl \
- megaco_text_parser_prev3b.hrl
-
-$(EBIN)/megaco_text_parser_prev3c.$(EMULATOR): \
- megaco_text_parser_prev3c.erl \
- $(MEGACO_INCLUDEDIR)/megaco.hrl \
- $(MEGACO_INCLUDEDIR)/megaco_message_prev3c.hrl \
- megaco_text_tokens.hrl \
- megaco_text_parser_prev3c.hrl
-# </DEPRECATED>
-
$(EBIN)/megaco_text_scanner.$(EMULATOR): megaco_text_scanner.erl \
$(MEGACO_INCLUDEDIR)/megaco.hrl \
../engine/megaco_message_internal.hrl \
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder.erl b/lib/megaco/src/text/megaco_compact_text_encoder.erl
index ca1b9362fb..9abc041416 100644
--- a/lib/megaco/src/text/megaco_compact_text_encoder.erl
+++ b/lib/megaco/src/text/megaco_compact_text_encoder.erl
@@ -49,9 +49,6 @@
-define(V1_PARSE_MOD, megaco_text_parser_v1).
-define(V2_PARSE_MOD, megaco_text_parser_v2).
-define(V3_PARSE_MOD, megaco_text_parser_v3).
--define(PREV3A_PARSE_MOD, megaco_text_parser_prev3a).
--define(PREV3B_PARSE_MOD, megaco_text_parser_prev3b).
--define(PREV3C_PARSE_MOD, megaco_text_parser_prev3c).
%%----------------------------------------------------------------------
@@ -79,15 +76,6 @@ encode_message([{version3,_}|EC], 2, MegaMsg) ->
encode_message(EC, 2, MegaMsg) ->
megaco_compact_text_encoder_v2:encode_message(EC, MegaMsg);
-%% <DEPRECATED>
-encode_message([{version3,prev3c}|EC], 3, MegaMsg) ->
- megaco_compact_text_encoder_prev3c:encode_message(EC, MegaMsg);
-encode_message([{version3,prev3b}|EC], 3, MegaMsg) ->
- megaco_compact_text_encoder_prev3b:encode_message(EC, MegaMsg);
-encode_message([{version3,prev3a}|EC], 3, MegaMsg) ->
- megaco_compact_text_encoder_prev3a:encode_message(EC, MegaMsg);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_message([{version3,v3}|EC], 3, MegaMsg) ->
megaco_compact_text_encoder_v3:encode_message(EC, MegaMsg);
@@ -139,72 +127,6 @@ decode_message([], _, Bin) when is_binary(Bin) ->
scan_error(Reason, Line, Bin) %% OTP-4007
end;
-%% <DEPRECATED>
-decode_message([{version3,prev3c}], _, Bin) when is_binary(Bin) ->
- %% d("decode_message(prev3c) -> entry"),
- case megaco_text_scanner:scan(Bin) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3C_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- {error, Reason, Tokens, Line} ->
- scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} -> %% OTP-4007
- scan_error(Reason, Line, Bin) %% OTP-4007
- end;
-decode_message([{version3,prev3b}], _, Bin) when is_binary(Bin) ->
- %% d("decode_message(prev3b) -> entry"),
- case megaco_text_scanner:scan(Bin) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3B_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- {error, Reason, Tokens, Line} ->
- scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} -> %% OTP-4007
- scan_error(Reason, Line, Bin) %% OTP-4007
- end;
-decode_message([{version3,prev3a}], _, Bin) when is_binary(Bin) ->
- %% d("decode_message(prev3a) -> entry"),
- case megaco_text_scanner:scan(Bin) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3A_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- {error, Reason, Tokens, Line} ->
- scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} -> %% OTP-4007
- scan_error(Reason, Line, Bin) %% OTP-4007
- end;
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
decode_message([{version3,v3}], _, Bin) when is_binary(Bin) ->
%% d("decode_message(v3) -> entry"),
@@ -251,72 +173,6 @@ decode_message([{flex, Port}], _, Bin) when is_binary(Bin) ->
scan_error(Reason, Line, Bin) %% OTP-4007
end;
-%% <DEPRECATED>
-decode_message([{version3,prev3c},{flex, Port}], _, Bin) when is_binary(Bin) ->
- %% d("decode_message(prev3c,flex) -> entry"),
- case megaco_flex_scanner:scan(Bin, Port) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3C_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- %% {error, Reason, Tokens, Line} ->
- %% scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} ->
- scan_error(Reason, Line, Bin)
- end;
-decode_message([{version3,prev3b},{flex, Port}], _, Bin) when is_binary(Bin) ->
- %% d("decode_message(prev3b,flex) -> entry"),
- case megaco_flex_scanner:scan(Bin, Port) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3B_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- %% {error, Reason, Tokens, Line} ->
- %% scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} -> %% OTP-4007
- scan_error(Reason, Line, Bin) %% OTP-4007
- end;
-decode_message([{version3,prev3a},{flex, Port}], _, Bin) when is_binary(Bin) ->
- %% d("decode_message(prev3a,flex) -> entry"),
- case megaco_flex_scanner:scan(Bin, Port) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3A_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- %% {error, Reason, Tokens, Line} ->
- %% scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} -> %% OTP-4007
- scan_error(Reason, Line, Bin) %% OTP-4007
- end;
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
decode_message([{version3,v3},{flex, Port}], _, Bin) when is_binary(Bin) ->
%% d("decode_message(v3,flex) -> entry"),
@@ -432,15 +288,6 @@ encode_transaction([{version3,_}|EC], 2, Trans) ->
encode_transaction(EC, 2, Trans) ->
megaco_compact_text_encoder_v2:encode_transaction(EC, Trans);
-%% <DEPRECATED>
-encode_transaction([{version3,prev3c}|EC], 3, Trans) ->
- megaco_compact_text_encoder_prev3c:encode_transaction(EC, Trans);
-encode_transaction([{version3,prev3b}|EC], 3, Trans) ->
- megaco_compact_text_encoder_prev3b:encode_transaction(EC, Trans);
-encode_transaction([{version3,prev3a}|EC], 3, Trans) ->
- megaco_compact_text_encoder_prev3a:encode_transaction(EC, Trans);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_transaction([{version3,v3}|EC], 3, Trans) ->
megaco_compact_text_encoder_v3:encode_transaction(EC, Trans);
@@ -475,18 +322,6 @@ encode_action_requests([{version3,_}|EC], 2, ActReqs)
encode_action_requests(EC, 2, ActReqs) when is_list(ActReqs) ->
megaco_compact_text_encoder_v2:encode_action_requests(EC, ActReqs);
-%% <DEPRECATED>
-encode_action_requests([{version3,prev3c}|EC], 3, ActReqs)
- when is_list(ActReqs) ->
- megaco_compact_text_encoder_prev3c:encode_action_requests(EC, ActReqs);
-encode_action_requests([{version3,prev3b}|EC], 3, ActReqs)
- when is_list(ActReqs) ->
- megaco_compact_text_encoder_prev3b:encode_action_requests(EC, ActReqs);
-encode_action_requests([{version3,prev3a}|EC], 3, ActReqs)
- when is_list(ActReqs) ->
- megaco_compact_text_encoder_prev3a:encode_action_requests(EC, ActReqs);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_action_requests([{version3,v3}|EC], 3, ActReqs)
when is_list(ActReqs) ->
@@ -520,15 +355,6 @@ encode_action_request([{version3,_}|EC], 2, ActReq) ->
encode_action_request(EC, 2, ActReq) ->
megaco_compact_text_encoder_v2:encode_action_request(EC, ActReq);
-%% <DEPRECATED>
-encode_action_request([{version3,prev3c}|EC], 3, ActReq) ->
- megaco_compact_text_encoder_prev3c:encode_action_request(EC, ActReq);
-encode_action_request([{version3,prev3b}|EC], 3, ActReq) ->
- megaco_compact_text_encoder_prev3b:encode_action_request(EC, ActReq);
-encode_action_request([{version3,prev3a}|EC], 3, ActReq) ->
- megaco_compact_text_encoder_prev3a:encode_action_request(EC, ActReq);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_action_request([{version3,v3}|EC], 3, ActReq) ->
megaco_compact_text_encoder_v3:encode_action_request(EC, ActReq);
@@ -561,15 +387,6 @@ encode_command_request([{version3,_}|EC], 2, CmdReq) ->
encode_command_request(EC, 2, CmdReq) ->
megaco_compact_text_encoder_v2:encode_command_request(EC, CmdReq);
-%% <DEPRECATED>
-encode_command_request([{version3,prev3c}|EC], 3, CmdReq) ->
- megaco_compact_text_encoder_prev3c:encode_command_request(EC, CmdReq);
-encode_command_request([{version3,prev3b}|EC], 3, CmdReq) ->
- megaco_compact_text_encoder_prev3b:encode_command_request(EC, CmdReq);
-encode_command_request([{version3,prev3a}|EC], 3, CmdReq) ->
- megaco_compact_text_encoder_prev3a:encode_command_request(EC, CmdReq);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_command_request([{version3,v3}|EC], 3, CmdReq) ->
megaco_compact_text_encoder_v3:encode_command_request(EC, CmdReq);
@@ -602,15 +419,6 @@ encode_action_reply([{version3,_}|EC], 2, ActRep) ->
encode_action_reply(EC, 2, ActRep) ->
megaco_compact_text_encoder_v2:encode_action_reply(EC, ActRep);
-%% <DEPRECATED>
-encode_action_reply([{version3,prev3c}|EC], 3, ActRep) ->
- megaco_compact_text_encoder_prev3c:encode_action_reply(EC, ActRep);
-encode_action_reply([{version3,prev3b}|EC], 3, ActRep) ->
- megaco_compact_text_encoder_prev3b:encode_action_reply(EC, ActRep);
-encode_action_reply([{version3,prev3a}|EC], 3, ActRep) ->
- megaco_compact_text_encoder_prev3a:encode_action_reply(EC, ActRep);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_action_reply([{version3,v3}|EC], 3, ActRep) ->
megaco_compact_text_encoder_v3:encode_action_reply(EC, ActRep);
@@ -645,24 +453,6 @@ token_tag2string(Tag, 3) ->
token_tag2string(Tag, v3) ->
megaco_compact_text_encoder_v3:token_tag2string(Tag);
-%% <DEPRECATED>
-token_tag2string(Tag, prev3b) ->
- megaco_compact_text_encoder_prev3b:token_tag2string(Tag);
-token_tag2string(Tag, prev3c) ->
- megaco_compact_text_encoder_prev3c:token_tag2string(Tag);
-%% </DEPRECATED>
-
token_tag2string(Tag, _Vsn) ->
token_tag2string(Tag, ?TT2S_BEST_VERSION).
-
-%% d(F) ->
-%% d(F, []).
-
-%% d(F, A) ->
-%% d(get(dbg), F, A).
-
-%% d(true, F, A) ->
-%% io:format("~p:" ++ F ++ "~n", [?MODULE|A]);
-%% d(_, _, _) ->
-%% ok.
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_prev3a.erl b/lib/megaco/src/text/megaco_compact_text_encoder_prev3a.erl
deleted file mode 100644
index 50e2a65409..0000000000
--- a/lib/megaco/src/text/megaco_compact_text_encoder_prev3a.erl
+++ /dev/null
@@ -1,303 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Encode COMPACT Megaco/H.248 text messages from internal form
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
--module(megaco_compact_text_encoder_prev3a).
-
--export([encode_message/2,
- encode_transaction/2,
- encode_action_requests/2,
- encode_action_request/2,
- encode_command_request/2,
- encode_action_reply/2]).
-
-
--include_lib("megaco/include/megaco.hrl").
--include_lib("megaco/include/megaco_message_prev3a.hrl").
--define(encoder_version_pre_prev3c,true).
--include("megaco_text_tokens.hrl").
-
-
-%%----------------------------------------------------------------------
-%% Convert a 'MegacoMessage' record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-
-encode_message(EC, MegaMsg)
- when is_list(EC) andalso is_record(MegaMsg, 'MegacoMessage') ->
- case (catch enc_MegacoMessage(MegaMsg)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end;
-encode_message(EncodingConfig, MegaMsg)
- when is_record(MegaMsg, 'MegacoMessage') ->
- {error, {bad_encoding_config, EncodingConfig}};
-encode_message(_EncodingConfig, _MegaMsg) ->
- {error, bad_megaco_message}.
-
-
-%%----------------------------------------------------------------------
-%% Convert a transaction record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_transaction(_EC, Trans) ->
- case (catch enc_Transaction(Trans)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-
-%%----------------------------------------------------------------------
-%% Convert a list of ActionRequest record's into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_requests(_EC, ActReqs) ->
- case (catch enc_ActionRequests(ActReqs)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a ActionRequest record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_request(_EC, ActReq)
- when is_record(ActReq, 'ActionRequest') ->
- case (catch enc_ActionRequest(ActReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-
-%%----------------------------------------------------------------------
-%% Convert a CommandRequest record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_command_request(_EC, CmdReq)
- when is_record(CmdReq, 'CommandRequest') ->
- case (catch enc_CommandRequest(CmdReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-
-%%----------------------------------------------------------------------
-%% Convert a action reply into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_reply(_EC, ActRep)
- when is_record(ActRep, 'ActionReply') ->
- case (catch enc_ActionReply(ActRep)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-
-%%----------------------------------------------------------------------
-%% Define various macros used by the actual generator code
-%%----------------------------------------------------------------------
-
--define(EQUAL, [?EqualToken]).
--define(COLON, [?ColonToken]).
--define(LBRKT, [?LbrktToken]).
--define(RBRKT, [?RbrktToken]).
--define(LSBRKT, [?LsbrktToken]).
--define(RSBRKT, [?RsbrktToken]).
--define(COMMA, [?CommaToken]).
--define(DOT, [?DotToken]).
--define(SLASH, [?SlashToken]).
--define(DQUOTE, [?DoubleQuoteToken]).
--define(SP, [?SpToken]).
--define(HTAB, [?HtabToken]).
--define(CR, [?CrToken]).
--define(LF, [?LfToken]).
--define(LWSP, []).
--define(EOL, ?LF).
--define(WSP, ?SP).
--define(SEP, ?WSP).
-
--define(INIT_INDENT, []).
--define(INC_INDENT(State), State).
--define(INDENT(State), State).
--define(LBRKT_INDENT(_State), [?LbrktToken]).
--define(RBRKT_INDENT(_State), [?RbrktToken]).
--define(LSBRKT_INDENT(_State), [?LsbrktToken]).
--define(RSBRKT_INDENT(_State), [?RsbrktToken]).
--define(COMMA_INDENT(_State), [?CommaToken]).
--define(SEP_INDENT(_State), [?LfToken]).
-
-%%----------------------------------------------------------------------
-%% Define token macros
-%%----------------------------------------------------------------------
-
--define(AddToken , ?CompactAddToken).
--define(AuditToken , ?CompactAuditToken).
--define(AuditCapToken , ?CompactAuditCapToken).
--define(AuditValueToken , ?CompactAuditValueToken).
--define(AuthToken , ?CompactAuthToken).
--define(BothToken , ?CompactBothToken).
--define(BothwayToken , ?CompactBothwayToken).
--define(BriefToken , ?CompactBriefToken).
--define(BufferToken , ?CompactBufferToken).
--define(CtxToken , ?CompactCtxToken).
--define(ContextAuditToken , ?CompactContextAuditToken).
--define(ContextAttrToken , ?CompactContextAttrToken).
--define(DigitMapToken , ?CompactDigitMapToken).
--define(DirectionToken , ?CompactDirectionToken).
--define(DiscardToken , ?CompactDiscardToken).
--define(DisconnectedToken , ?CompactDisconnectedToken).
--define(DelayToken , ?CompactDelayToken).
--define(DeleteToken , ?CompactDeleteToken).
--define(DurationToken , ?CompactDurationToken).
--define(EmbedToken , ?CompactEmbedToken).
--define(EmergencyToken , ?CompactEmergencyToken).
--define(EmergencyOffToken , ?CompactEmergencyOffToken).
--define(ErrorToken , ?CompactErrorToken).
--define(EventBufferToken , ?CompactEventBufferToken).
--define(EventsToken , ?CompactEventsToken).
--define(ExternalToken , ?CompactExternalToken).
--define(FailoverToken , ?CompactFailoverToken).
--define(ForcedToken , ?CompactForcedToken).
--define(GracefulToken , ?CompactGracefulToken).
--define(H221Token , ?CompactH221Token).
--define(H223Token , ?CompactH223Token).
--define(H226Token , ?CompactH226Token).
--define(HandOffToken , ?CompactHandOffToken).
--define(IEPSToken , ?CompactIEPSToken).
--define(ImmAckRequiredToken , ?CompactImmAckRequiredToken).
--define(InactiveToken , ?CompactInactiveToken).
--define(InternalToken , ?CompactInternalToken).
--define(InterruptByEventToken , ?CompactInterruptByEventToken).
--define(InterruptByNewSignalsDescrToken, ?CompactInterruptByNewSignalsDescrToken).
--define(IsolateToken , ?CompactIsolateToken).
--define(InSvcToken , ?CompactInSvcToken).
--define(KeepActiveToken , ?CompactKeepActiveToken).
--define(LocalToken , ?CompactLocalToken).
--define(LocalControlToken , ?CompactLocalControlToken).
--define(LockStepToken , ?CompactLockStepToken).
--define(LoopbackToken , ?CompactLoopbackToken).
--define(MediaToken , ?CompactMediaToken).
--define(MegacopToken , ?CompactMegacopToken).
--define(MethodToken , ?CompactMethodToken).
--define(MgcIdToken , ?CompactMgcIdToken).
--define(ModeToken , ?CompactModeToken).
--define(ModifyToken , ?CompactModifyToken).
--define(ModemToken , ?CompactModemToken).
--define(MoveToken , ?CompactMoveToken).
--define(MtpToken , ?CompactMtpToken).
--define(MuxToken , ?CompactMuxToken).
--define(NotifyToken , ?CompactNotifyToken).
--define(NotifyCompletionToken , ?CompactNotifyCompletionToken).
--define(Nx64kToken , ?CompactNx64kToken).
--define(ObservedEventsToken , ?CompactObservedEventsToken).
--define(OffToken , ?CompactOffToken).
--define(OnewayToken , ?CompactOnewayToken).
--define(OnOffToken , ?CompactOnOffToken).
--define(OnToken , ?CompactOnToken).
--define(OtherReasonToken , ?CompactOtherReasonToken).
--define(OutOfSvcToken , ?CompactOutOfSvcToken).
--define(PackagesToken , ?CompactPackagesToken).
--define(PendingToken , ?CompactPendingToken).
--define(PriorityToken , ?CompactPriorityToken).
--define(ProfileToken , ?CompactProfileToken).
--define(ReasonToken , ?CompactReasonToken).
--define(RecvonlyToken , ?CompactRecvonlyToken).
--define(ReplyToken , ?CompactReplyToken).
--define(ResponseAckToken , ?CompactResponseAckToken).
--define(RestartToken , ?CompactRestartToken).
--define(RemoteToken , ?CompactRemoteToken).
--define(RequestIDToken , ?CompactRequestIDToken).
--define(ReservedGroupToken , ?CompactReservedGroupToken).
--define(ReservedValueToken , ?CompactReservedValueToken).
--define(SendonlyToken , ?CompactSendonlyToken).
--define(SendrecvToken , ?CompactSendrecvToken).
--define(ServicesToken , ?CompactServicesToken).
--define(ServiceStatesToken , ?CompactServiceStatesToken).
--define(ServiceChangeToken , ?CompactServiceChangeToken).
--define(ServiceChangeAddressToken , ?CompactServiceChangeAddressToken).
--define(ServiceChangeIncompleteToken , ?CompactServiceChangeIncompleteToken).
--define(SignalListToken , ?CompactSignalListToken).
--define(SignalsToken , ?CompactSignalsToken).
--define(SignalTypeToken , ?CompactSignalTypeToken).
--define(StatsToken , ?CompactStatsToken).
--define(StreamToken , ?CompactStreamToken).
--define(SubtractToken , ?CompactSubtractToken).
--define(SynchISDNToken , ?CompactSynchISDNToken).
--define(TerminationStateToken , ?CompactTerminationStateToken).
--define(TestToken , ?CompactTestToken).
--define(TimeOutToken , ?CompactTimeOutToken).
--define(TopologyToken , ?CompactTopologyToken).
--define(TransToken , ?CompactTransToken).
--define(V18Token , ?CompactV18Token).
--define(V22Token , ?CompactV22Token).
--define(V22bisToken , ?CompactV22bisToken).
--define(V32Token , ?CompactV32Token).
--define(V32bisToken , ?CompactV32bisToken).
--define(V34Token , ?CompactV34Token).
--define(V76Token , ?CompactV76Token).
--define(V90Token , ?CompactV90Token).
--define(V91Token , ?CompactV91Token).
--define(VersionToken , ?CompactVersionToken).
-
-%%----------------------------------------------------------------------
-%% Include the generator code
-%%----------------------------------------------------------------------
-
--include("megaco_text_gen_prev3a.hrl").
-
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_prev3b.erl b/lib/megaco/src/text/megaco_compact_text_encoder_prev3b.erl
deleted file mode 100644
index d581d2fb16..0000000000
--- a/lib/megaco/src/text/megaco_compact_text_encoder_prev3b.erl
+++ /dev/null
@@ -1,438 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Encode COMPACT Megaco/H.248 text messages from internal form
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
--module(megaco_compact_text_encoder_prev3b).
-
--export([encode_message/2,
- encode_transaction/2,
- encode_action_requests/2,
- encode_action_request/2,
- encode_command_request/2,
- encode_action_reply/2]).
-
--export([token_tag2string/1]).
-
--include_lib("megaco/include/megaco.hrl").
--include_lib("megaco/include/megaco_message_prev3b.hrl").
--define(encoder_version_pre_prev3c,true).
--include("megaco_text_tokens.hrl").
-
-
-%%----------------------------------------------------------------------
-%% Convert a 'MegacoMessage' record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-
-encode_message(EC, MegaMsg)
- when is_list(EC) andalso is_record(MegaMsg, 'MegacoMessage') ->
- case (catch enc_MegacoMessage(MegaMsg)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end;
-encode_message(EncodingConfig, MegaMsg)
- when is_record(MegaMsg, 'MegacoMessage') ->
- {error, {bad_encoding_config, EncodingConfig}};
-encode_message(_EncodingConfig, _MegaMsg) ->
- {error, bad_megaco_message}.
-
-
-
-
-%%----------------------------------------------------------------------
-%% Convert a transaction record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_transaction(_EC, Trans) ->
- case (catch enc_Transaction(Trans)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-
-%%----------------------------------------------------------------------
-%% Convert a list of ActionRequest record's into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_requests(_EC, ActReqs) ->
- case (catch enc_ActionRequests(ActReqs)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a ActionRequest record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_request(_EC, ActReq)
- when is_record(ActReq, 'ActionRequest') ->
- case (catch enc_ActionRequest(ActReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a CommandRequest record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_command_request(_EC, CmdReq)
- when is_record(CmdReq, 'CommandRequest') ->
- case (catch enc_CommandRequest(CmdReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a action reply into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_reply(_EC, ActRep)
- when is_record(ActRep, 'ActionReply') ->
- case (catch enc_ActionReply(ActRep)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-
-%%----------------------------------------------------------------------
-%% A utility function to pretty print the tags found in a megaco message
-%%----------------------------------------------------------------------
-
-token_tag2string(addReq) -> ?CompactAddToken;
-token_tag2string(addReply) -> ?CompactAddToken;
-token_tag2string(auditDescriptor) -> ?CompactAuditToken;
-token_tag2string(auditCapRequest) -> ?CompactAuditCapToken;
-token_tag2string(auditCapReply) -> ?CompactAuditCapToken;
-token_tag2string(auditValueRequest) -> ?CompactAuditValueToken;
-token_tag2string(auditValueReply) -> ?CompactAuditValueToken;
-%% token_tag2string(X) -> ?CompactAuthToken;
-token_tag2string(both) -> ?CompactBothToken;
-token_tag2string(bothway) -> ?CompactBothwayToken;
-token_tag2string(brief) -> ?CompactBriefToken;
-%% token_tag2string(X) -> ?CompactBufferToken;
-%% token_tag2string(X) -> ?CompactCtxToken;
-%% token_tag2string(X) -> ?CompactContextAttrToken;
-%% token_tag2string(X) -> ?CompactContextAuditToken;
-%% token_tag2string(X) -> ?CompactContextListToken;
-token_tag2string(digitMapDescriptor) -> ?CompactDigitMapToken;
-token_tag2string(digitMapToken) -> ?CompactDigitMapToken;
-%% token_tag2string(X) -> ?CompactDirectionToken;
-%% token_tag2string(X) -> ?CompactDiscardToken;
-%% token_tag2string(X) -> ?CompactDisconnectedToken;
-%% token_tag2string(X) -> ?CompactDelayToken;
-token_tag2string(duration) -> ?CompactDurationToken;
-%% token_tag2string(X) -> ?CompactEmbedToken;
-token_tag2string(emergencyAudit) -> ?CompactEmergencyToken;
-%% token_tag2string(X) -> ?CompactEmergencyOffToken;
-token_tag2string(errorDescriptor) -> ?CompactErrorToken;
-token_tag2string(eventBufferDescriptor) -> ?CompactEventBufferToken;
-token_tag2string(eventBufferToken) -> ?CompactEventBufferToken;
-token_tag2string(eventsDescriptor) -> ?CompactEventsToken;
-token_tag2string(eventsToken) -> ?CompactEventsToken;
-token_tag2string(external) -> ?CompactExternalToken;
-%% token_tag2string(X) -> ?CompactFailoverToken;
-%% token_tag2string(X) -> ?CompactForcedToken;
-%% token_tag2string(X) -> ?CompactGracefulToken;
-%% token_tag2string(X) -> ?CompactH221Token;
-%% token_tag2string(X) -> ?CompactH223Token;
-%% token_tag2string(X) -> ?CompactH226Token;
-%% token_tag2string(X) -> ?CompactHandOffToken;
-token_tag2string(iepsCallind) -> ?CompactIEPSToken;
-%% token_tag2string(X) -> ?CompactImmAckRequiredToken;
-token_tag2string(inactive) -> ?CompactInactiveToken;
-token_tag2string(internal) -> ?CompactInternalToken;
-token_tag2string(onInterruptByEvent) -> ?CompactInterruptByEventToken;
-token_tag2string(onInterruptByNewSignalDescr) -> ?CompactInterruptByNewSignalsDescrToken;
-token_tag2string(isolate) -> ?CompactIsolateToken;
-token_tag2string(inSvc) -> ?CompactInSvcToken;
-token_tag2string(keepActive) -> ?CompactKeepActiveToken;
-token_tag2string(localDescriptor) -> ?CompactLocalToken;
-token_tag2string(localControlDescriptor) -> ?CompactLocalControlToken;
-token_tag2string(lockStep) -> ?CompactLockStepToken;
-token_tag2string(loopBack) -> ?CompactLoopbackToken;
-token_tag2string(mediaDescriptor) -> ?CompactMediaToken;
-token_tag2string(mediaToken) -> ?CompactMediaToken;
-%% token_tag2string(X) -> ?CompactMegacopToken;
-%% token_tag2string(X) -> ?CompactMethodToken;
-%% token_tag2string(X) -> ?CompactMgcIdToken;
-%% token_tag2string(X) -> ?CompactModeToken;
-token_tag2string(modReq) -> ?CompactModifyToken;
-token_tag2string(modReply) -> ?CompactModifyToken;
-token_tag2string(modemDescriptor) -> ?CompactModemToken;
-token_tag2string(modemToken) -> ?CompactModemToken;
-token_tag2string(moveReq) -> ?CompactMoveToken;
-token_tag2string(moveReply) -> ?CompactMoveToken;
-%% token_tag2string(X) -> ?CompactMtpToken;
-token_tag2string(muxDescriptor) -> ?CompactMuxToken;
-token_tag2string(muxToken) -> ?CompactMuxToken;
-token_tag2string(notifyReq) -> ?CompactNotifyToken;
-%% token_tag2string(X) -> ?CompactNotifyCompletionToken;
-%% token_tag2string(X) -> ?CompactNx64kToken;
-token_tag2string(observedEventsDescriptor) -> ?CompactObservedEventsToken;
-token_tag2string(observedEventsToken) -> ?CompactObservedEventsToken;
-token_tag2string(false) -> ?CompactOffToken;
-token_tag2string(off) -> ?CompactOffToken;
-token_tag2string(oneway) -> ?CompactOnewayToken;
-token_tag2string(onOff) -> ?CompactOnOffToken;
-token_tag2string(true) -> ?CompactOnToken;
-token_tag2string(otherReason) -> ?CompactOtherReasonToken;
-token_tag2string(outOfSvc) -> ?CompactOutOfSvcToken;
-token_tag2string(packagesDescriptor) -> ?CompactPackagesToken;
-token_tag2string(packagesToken) -> ?CompactPackagesToken;
-%% token_tag2string(X) -> ?CompactPendingToken;
-token_tag2string(priorityAudit) -> ?CompactPriorityToken;
-%% token_tag2string(X) -> ?CompactProfileToken;
-%% token_tag2string(X) -> ?CompactReasonToken;
-token_tag2string(recvOnly) -> ?CompactRecvonlyToken;
-%% token_tag2string(X) -> ?CompactReplyToken;
-%% token_tag2string(X) -> ?CompactRequestIDToken;
-%% token_tag2string(X) -> ?CompactResponseAckToken;
-%% token_tag2string(X) -> ?CompactRestartToken;
-token_tag2string(remoteDescriptor) -> ?CompactRemoteToken;
-%% token_tag2string(X) -> ?CompactReservedGroupToken;
-%% token_tag2string(X) -> ?CompactReservedValueToken;
-token_tag2string(sendOnly) -> ?CompactSendonlyToken;
-token_tag2string(sendRecv) -> ?CompactSendrecvToken;
-%% token_tag2string(X) -> ?CompactServicesToken;
-%% token_tag2string(X) -> ?CompactServiceStatesToken;
-token_tag2string(serviceChangeReq) -> ?CompactServiceChangeToken;
-%% token_tag2string(X) -> ?CompactServiceChangeAddressToken;
-token_tag2string(incomplete) -> ?CompactServiceChangeIncompleteToken;
-%% token_tag2string(X) -> ?CompactSignalListToken;
-token_tag2string(signalsDescriptor) -> ?CompactSignalsToken;
-token_tag2string(signalsToken) -> ?CompactSignalsToken;
-%% token_tag2string(X) -> ?CompactSignalTypeToken;
-token_tag2string(statisticsDescriptor) -> ?CompactStatsToken;
-token_tag2string(statsToken) -> ?CompactStatsToken;
-%% token_tag2string(X) -> ?CompactStreamToken;
-token_tag2string(subtractReq) -> ?CompactSubtractToken;
-token_tag2string(subtractReply) -> ?CompactSubtractToken;
-%% token_tag2string(X) -> ?CompactSynchISDNToken;
-%% token_tag2string(X) -> ?CompactTerminationStateToken;
-token_tag2string(test) -> ?CompactTestToken;
-token_tag2string(timeOut) -> ?CompactTimeOutToken;
-token_tag2string(onTimeOut) -> ?CompactTimeOutToken;
-token_tag2string(topologyAudit) -> ?CompactTopologyToken;
-%% token_tag2string(X) -> ?CompactTransToken;
-%% token_tag2string(X) -> ?CompactV18Token;
-%% token_tag2string(X) -> ?CompactV22Token;
-%% token_tag2string(X) -> ?CompactV22bisToken;
-%% token_tag2string(X) -> ?CompactV32Token;
-%% token_tag2string(X) -> ?CompactV32bisToken;
-%% token_tag2string(X) -> ?CompactV34Token;
-%% token_tag2string(X) -> ?CompactV76Token;
-%% token_tag2string(X) -> ?CompactV90Token;
-%% token_tag2string(X) -> ?CompactV91Token;
-%% token_tag2string(X) -> ?CompactVersionToken;
-token_tag2string(_) -> [].
-
-
-
-%%----------------------------------------------------------------------
-%% Define various macros used by the actual generator code
-%%----------------------------------------------------------------------
-
--define(EQUAL, [?EqualToken]).
--define(COLON, [?ColonToken]).
--define(LBRKT, [?LbrktToken]).
--define(RBRKT, [?RbrktToken]).
--define(LSBRKT, [?LsbrktToken]).
--define(RSBRKT, [?RsbrktToken]).
--define(COMMA, [?CommaToken]).
--define(DOT, [?DotToken]).
--define(SLASH, [?SlashToken]).
--define(DQUOTE, [?DoubleQuoteToken]).
--define(SP, [?SpToken]).
--define(HTAB, [?HtabToken]).
--define(CR, [?CrToken]).
--define(LF, [?LfToken]).
--define(LWSP, []).
--define(EOL, ?LF).
--define(WSP, ?SP).
--define(SEP, ?WSP).
-
--define(INIT_INDENT, []).
--define(INC_INDENT(State), State).
--define(INDENT(State), State).
--define(LBRKT_INDENT(_State), [?LbrktToken]).
--define(RBRKT_INDENT(_State), [?RbrktToken]).
--define(LSBRKT_INDENT(_State), [?LsbrktToken]).
--define(RSBRKT_INDENT(_State), [?RsbrktToken]).
--define(COMMA_INDENT(_State), [?CommaToken]).
--define(SEP_INDENT(_State), [?LfToken]).
-
-%%----------------------------------------------------------------------
-%% Define token macros
-%%----------------------------------------------------------------------
-
--define(AddToken , ?CompactAddToken).
--define(AuditToken , ?CompactAuditToken).
--define(AuditCapToken , ?CompactAuditCapToken).
--define(AuditValueToken , ?CompactAuditValueToken).
--define(AuthToken , ?CompactAuthToken).
--define(BothToken , ?CompactBothToken).
--define(BothwayToken , ?CompactBothwayToken).
--define(BriefToken , ?CompactBriefToken).
--define(BufferToken , ?CompactBufferToken).
--define(CtxToken , ?CompactCtxToken).
--define(ContextAuditToken , ?CompactContextAuditToken).
--define(ContextAttrToken , ?CompactContextAttrToken).
--define(DigitMapToken , ?CompactDigitMapToken).
--define(DirectionToken , ?CompactDirectionToken).
--define(DiscardToken , ?CompactDiscardToken).
--define(DisconnectedToken , ?CompactDisconnectedToken).
--define(DelayToken , ?CompactDelayToken).
--define(DeleteToken , ?CompactDeleteToken).
--define(DurationToken , ?CompactDurationToken).
--define(EmbedToken , ?CompactEmbedToken).
--define(EmergencyToken , ?CompactEmergencyToken).
--define(EmergencyOffToken , ?CompactEmergencyOffToken).
--define(ErrorToken , ?CompactErrorToken).
--define(EventBufferToken , ?CompactEventBufferToken).
--define(EventsToken , ?CompactEventsToken).
--define(ExternalToken , ?CompactExternalToken).
--define(FailoverToken , ?CompactFailoverToken).
--define(ForcedToken , ?CompactForcedToken).
--define(GracefulToken , ?CompactGracefulToken).
--define(H221Token , ?CompactH221Token).
--define(H223Token , ?CompactH223Token).
--define(H226Token , ?CompactH226Token).
--define(HandOffToken , ?CompactHandOffToken).
--define(IEPSToken , ?CompactIEPSToken).
--define(ImmAckRequiredToken , ?CompactImmAckRequiredToken).
--define(InactiveToken , ?CompactInactiveToken).
--define(InternalToken , ?CompactInternalToken).
--define(InterruptByEventToken , ?CompactInterruptByEventToken).
--define(InterruptByNewSignalsDescrToken, ?CompactInterruptByNewSignalsDescrToken).
--define(IsolateToken , ?CompactIsolateToken).
--define(InSvcToken , ?CompactInSvcToken).
--define(KeepActiveToken , ?CompactKeepActiveToken).
--define(LocalToken , ?CompactLocalToken).
--define(LocalControlToken , ?CompactLocalControlToken).
--define(LockStepToken , ?CompactLockStepToken).
--define(LoopbackToken , ?CompactLoopbackToken).
--define(MediaToken , ?CompactMediaToken).
--define(MegacopToken , ?CompactMegacopToken).
--define(MethodToken , ?CompactMethodToken).
--define(MgcIdToken , ?CompactMgcIdToken).
--define(ModeToken , ?CompactModeToken).
--define(ModifyToken , ?CompactModifyToken).
--define(ModemToken , ?CompactModemToken).
--define(MoveToken , ?CompactMoveToken).
--define(MtpToken , ?CompactMtpToken).
--define(MuxToken , ?CompactMuxToken).
--define(NotifyToken , ?CompactNotifyToken).
--define(NotifyCompletionToken , ?CompactNotifyCompletionToken).
--define(Nx64kToken , ?CompactNx64kToken).
--define(ObservedEventsToken , ?CompactObservedEventsToken).
--define(OffToken , ?CompactOffToken).
--define(OnewayToken , ?CompactOnewayToken).
--define(OnOffToken , ?CompactOnOffToken).
--define(OnToken , ?CompactOnToken).
--define(OtherReasonToken , ?CompactOtherReasonToken).
--define(OutOfSvcToken , ?CompactOutOfSvcToken).
--define(PackagesToken , ?CompactPackagesToken).
--define(PendingToken , ?CompactPendingToken).
--define(PriorityToken , ?CompactPriorityToken).
--define(ProfileToken , ?CompactProfileToken).
--define(ReasonToken , ?CompactReasonToken).
--define(RecvonlyToken , ?CompactRecvonlyToken).
--define(ReplyToken , ?CompactReplyToken).
--define(ResponseAckToken , ?CompactResponseAckToken).
--define(RestartToken , ?CompactRestartToken).
--define(RemoteToken , ?CompactRemoteToken).
--define(RequestIDToken , ?CompactRequestIDToken).
--define(ReservedGroupToken , ?CompactReservedGroupToken).
--define(ReservedValueToken , ?CompactReservedValueToken).
--define(SendonlyToken , ?CompactSendonlyToken).
--define(SendrecvToken , ?CompactSendrecvToken).
--define(ServicesToken , ?CompactServicesToken).
--define(ServiceStatesToken , ?CompactServiceStatesToken).
--define(ServiceChangeToken , ?CompactServiceChangeToken).
--define(ServiceChangeAddressToken , ?CompactServiceChangeAddressToken).
--define(ServiceChangeIncompleteToken , ?CompactServiceChangeIncompleteToken).
--define(SignalListToken , ?CompactSignalListToken).
--define(SignalsToken , ?CompactSignalsToken).
--define(SignalTypeToken , ?CompactSignalTypeToken).
--define(StatsToken , ?CompactStatsToken).
--define(StreamToken , ?CompactStreamToken).
--define(SubtractToken , ?CompactSubtractToken).
--define(SynchISDNToken , ?CompactSynchISDNToken).
--define(TerminationStateToken , ?CompactTerminationStateToken).
--define(TestToken , ?CompactTestToken).
--define(TimeOutToken , ?CompactTimeOutToken).
--define(TopologyToken , ?CompactTopologyToken).
--define(TransToken , ?CompactTransToken).
--define(V18Token , ?CompactV18Token).
--define(V22Token , ?CompactV22Token).
--define(V22bisToken , ?CompactV22bisToken).
--define(V32Token , ?CompactV32Token).
--define(V32bisToken , ?CompactV32bisToken).
--define(V34Token , ?CompactV34Token).
--define(V76Token , ?CompactV76Token).
--define(V90Token , ?CompactV90Token).
--define(V91Token , ?CompactV91Token).
--define(VersionToken , ?CompactVersionToken).
-
-%%----------------------------------------------------------------------
-%% Include the generator code
-%%----------------------------------------------------------------------
-
--include("megaco_text_gen_prev3b.hrl").
-
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_prev3c.erl b/lib/megaco/src/text/megaco_compact_text_encoder_prev3c.erl
deleted file mode 100644
index 95e244a696..0000000000
--- a/lib/megaco/src/text/megaco_compact_text_encoder_prev3c.erl
+++ /dev/null
@@ -1,461 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Encode COMPACT Megaco/H.248 text messages from internal form
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
--module(megaco_compact_text_encoder_prev3c).
-
--export([encode_message/2,
- encode_transaction/2,
- encode_action_requests/2,
- encode_action_request/2,
- encode_command_request/2,
- encode_action_reply/2]).
-
--export([token_tag2string/1]).
-
--include_lib("megaco/include/megaco.hrl").
--include_lib("megaco/include/megaco_message_prev3c.hrl").
--include("megaco_text_tokens.hrl").
-
-
-%%----------------------------------------------------------------------
-%% Convert a 'MegacoMessage' record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-
-encode_message(EC, MegaMsg)
- when is_list(EC) andalso is_record(MegaMsg, 'MegacoMessage') ->
- case (catch enc_MegacoMessage(MegaMsg)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end;
-encode_message(EncodingConfig, MegaMsg)
- when is_record(MegaMsg, 'MegacoMessage') ->
- {error, {bad_encoding_config, EncodingConfig}};
-encode_message(_EncodingConfig, _MegaMsg) ->
- {error, bad_megaco_message}.
-
-
-
-
-%%----------------------------------------------------------------------
-%% Convert a transaction record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_transaction(_EC, Trans) ->
- case (catch enc_Transaction(Trans)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-
-%%----------------------------------------------------------------------
-%% Convert a list of ActionRequest record's into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_requests(_EC, ActReqs) when is_list(ActReqs) ->
- case (catch enc_ActionRequests(ActReqs)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a ActionRequest record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_request(_EC, ActReq)
- when is_record(ActReq, 'ActionRequest') ->
- case (catch enc_ActionRequest(ActReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a CommandRequest record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_command_request(_EC, CmdReq)
- when is_record(CmdReq, 'CommandRequest') ->
- case (catch enc_CommandRequest(CmdReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a action reply into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_reply(_EC, ActRep)
- when is_record(ActRep, 'ActionReply') ->
- case (catch enc_ActionReply(ActRep)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-
-%%----------------------------------------------------------------------
-%% A utility function to pretty print the tags found in a megaco message
-%%----------------------------------------------------------------------
-
-token_tag2string(addReq) -> ?CompactAddToken;
-token_tag2string(addReply) -> ?CompactAddToken;
-%% token_tag2string(X) -> ?CompactAndAUDITSelectToken;
-token_tag2string(auditDescriptor) -> ?CompactAuditToken;
-token_tag2string(auditCapRequest) -> ?CompactAuditCapToken;
-token_tag2string(auditCapReply) -> ?CompactAuditCapToken;
-token_tag2string(auditValueRequest) -> ?CompactAuditValueToken;
-token_tag2string(auditValueReply) -> ?CompactAuditValueToken;
-%% token_tag2string(X) -> ?CompactAuthToken;
-token_tag2string(both) -> ?CompactBothToken;
-token_tag2string(bothway) -> ?CompactBothwayToken;
-token_tag2string(brief) -> ?CompactBriefToken;
-%% token_tag2string(X) -> ?CompactBufferToken;
-%% token_tag2string(X) -> ?CompactCtxToken;
-%% token_tag2string(X) -> ?CompactContextAuditToken;
-%% token_tag2string(X) -> ?CompactContextAttrToken;
-%% token_tag2string(X) -> ?CompactContextListToken;
-token_tag2string(digitMapDescriptor) -> ?CompactDigitMapToken;
-token_tag2string(digitMapToken) -> ?CompactDigitMapToken;
-%% token_tag2string(X) -> ?CompactDirectionToken;
-%% token_tag2string(X) -> ?CompactDiscardToken;
-%% token_tag2string(X) -> ?CompactDisconnectedToken;
-%% token_tag2string(X) -> ?CompactDelayToken;
-token_tag2string(duration) -> ?CompactDurationToken;
-%% token_tag2string(X) -> ?CompactEmbedToken;
-token_tag2string(emergencyAudit) -> ?CompactEmergencyToken;
-%% token_tag2string(X) -> ?CompactEmergencyOffToken;
-%% token_tag2string(X) -> ?CompactEmergencyValueToken;
-token_tag2string(errorDescriptor) -> ?CompactErrorToken;
-token_tag2string(eventBufferDescriptor) -> ?CompactEventBufferToken;
-token_tag2string(eventBufferToken) -> ?CompactEventBufferToken;
-token_tag2string(eventsDescriptor) -> ?CompactEventsToken;
-token_tag2string(eventsToken) -> ?CompactEventsToken;
-token_tag2string(external) -> ?CompactExternalToken;
-%% token_tag2string(X) -> ?CompactFailoverToken;
-%% token_tag2string(X) -> ?CompactForcedToken;
-%% token_tag2string(X) -> ?CompactGracefulToken;
-%% token_tag2string(X) -> ?CompactH221Token;
-%% token_tag2string(X) -> ?CompactH223Token;
-%% token_tag2string(X) -> ?CompactH226Token;
-%% token_tag2string(X) -> ?CompactHandOffToken;
-token_tag2string(iepsCallind) -> ?CompactIEPSToken;
-%% token_tag2string(X) -> ?CompactImmAckRequiredToken;
-token_tag2string(inactive) -> ?CompactInactiveToken;
-token_tag2string(internal) -> ?CompactInternalToken;
-%% token_tag2string(X) -> ?CompactIntsigDelayToken;
-token_tag2string(onInterruptByEvent) -> ?CompactInterruptByEventToken;
-token_tag2string(onInterruptByNewSignalDescr) -> ?CompactInterruptByNewSignalsDescrToken;
-token_tag2string(isolate) -> ?CompactIsolateToken;
-token_tag2string(inSvc) -> ?CompactInSvcToken;
-token_tag2string(iteration) -> ?CompactIterationToken;
-token_tag2string(keepActive) -> ?CompactKeepActiveToken;
-token_tag2string(localDescriptor) -> ?CompactLocalToken;
-token_tag2string(localControlDescriptor) -> ?CompactLocalControlToken;
-token_tag2string(lockStep) -> ?CompactLockStepToken;
-token_tag2string(loopBack) -> ?CompactLoopbackToken;
-token_tag2string(mediaDescriptor) -> ?CompactMediaToken;
-token_tag2string(mediaToken) -> ?CompactMediaToken;
-%% token_tag2string(X) -> ?CompactMegacopToken;
-%% token_tag2string(X) -> ?CompactMethodToken;
-%% token_tag2string(X) -> ?CompactMgcIdToken;
-%% token_tag2string(X) -> ?CompactModeToken;
-token_tag2string(modReq) -> ?CompactModifyToken;
-token_tag2string(modReply) -> ?CompactModifyToken;
-token_tag2string(modemDescriptor) -> ?CompactModemToken;
-token_tag2string(modemToken) -> ?CompactModemToken;
-token_tag2string(moveReq) -> ?CompactMoveToken;
-token_tag2string(moveReply) -> ?CompactMoveToken;
-%% token_tag2string(X) -> ?CompactMtpToken;
-token_tag2string(muxDescriptor) -> ?CompactMuxToken;
-token_tag2string(muxToken) -> ?CompactMuxToken;
-%% token_tag2string(X) -> ?CompactNeverNotifyToken;
-token_tag2string(notifyReq) -> ?CompactNotifyToken;
-%% token_tag2string(X) -> ?CompactNotifyCompletionToken;
-%% token_tag2string(X) -> ?CompactNotifyImmediateToken;
-%% token_tag2string(X) -> ?CompactNotifyRegulatedToken;
-%% token_tag2string(X) -> ?CompactNx64kToken;
-token_tag2string(observedEventsDescriptor) -> ?CompactObservedEventsToken;
-token_tag2string(observedEventsToken) -> ?CompactObservedEventsToken;
-token_tag2string(false) -> ?CompactOffToken;
-token_tag2string(off) -> ?CompactOffToken;
-token_tag2string(oneway) -> ?CompactOnewayToken;
-token_tag2string(onewayboth) -> ?CompactOnewayBothToken;
-token_tag2string(onewayexternal) -> ?CompactOnewayExternalToken;
-token_tag2string(onOff) -> ?CompactOnOffToken;
-%% token_tag2string(X) -> ?CompactOrAUDITselectToken;
-token_tag2string(true) -> ?CompactOnToken;
-token_tag2string(otherReason) -> ?CompactOtherReasonToken;
-token_tag2string(outOfSvc) -> ?CompactOutOfSvcToken;
-token_tag2string(packagesDescriptor) -> ?CompactPackagesToken;
-token_tag2string(packagesToken) -> ?CompactPackagesToken;
-%% token_tag2string(X) -> ?CompactPendingToken;
-token_tag2string(priorityAudit) -> ?CompactPriorityToken;
-%% token_tag2string(X) -> ?CompactProfileToken;
-%% token_tag2string(X) -> ?CompactReasonToken;
-token_tag2string(recvOnly) -> ?CompactRecvonlyToken;
-%% token_tag2string(X) -> ?CompactReplyToken;
-token_tag2string(resetEventsDescriptor) -> ?CompactResetEventsDescriptorToken;
-%% token_tag2string(X) -> ?CompactRequestIDToken;
-%% token_tag2string(X) -> ?CompactResponseAckToken;
-%% token_tag2string(X) -> ?CompactRestartToken;
-token_tag2string(remoteDescriptor) -> ?CompactRemoteToken;
-%% token_tag2string(X) -> ?CompactReservedGroupToken;
-%% token_tag2string(X) -> ?CompactReservedValueToken;
-token_tag2string(sendOnly) -> ?CompactSendonlyToken;
-token_tag2string(sendRecv) -> ?CompactSendrecvToken;
-%% token_tag2string(X) -> ?CompactServicesToken;
-%% token_tag2string(X) -> ?CompactServiceStatesToken;
-token_tag2string(serviceChangeReq) -> ?CompactServiceChangeToken;
-%% token_tag2string(X) -> ?CompactServiceChangeAddressToken;
-token_tag2string(incomplete) -> ?CompactServiceChangeIncompleteToken;
-%% token_tag2string(X) -> ?CompactSignalListToken;
-token_tag2string(signalsDescriptor) -> ?CompactSignalsToken;
-token_tag2string(signalsToken) -> ?CompactSignalsToken;
-%% token_tag2string(X) -> ?CompactSignalTypeToken;
-token_tag2string(statisticsDescriptor) -> ?CompactStatsToken;
-token_tag2string(statsToken) -> ?CompactStatsToken;
-%% token_tag2string(X) -> ?CompactStreamToken;
-token_tag2string(subtractReq) -> ?CompactSubtractToken;
-token_tag2string(subtractReply) -> ?CompactSubtractToken;
-%% token_tag2string(X) -> ?CompactSynchISDNToken;
-%% token_tag2string(X) -> ?CompactTerminationStateToken;
-token_tag2string(test) -> ?CompactTestToken;
-token_tag2string(timeOut) -> ?CompactTimeOutToken;
-token_tag2string(onTimeOut) -> ?CompactTimeOutToken;
-token_tag2string(topologyAudit) -> ?CompactTopologyToken;
-%% token_tag2string(X) -> ?CompactTransToken;
-%% token_tag2string(X) -> ?CompactV18Token;
-%% token_tag2string(X) -> ?CompactV22Token;
-%% token_tag2string(X) -> ?CompactV22bisToken;
-%% token_tag2string(X) -> ?CompactV32Token;
-%% token_tag2string(X) -> ?CompactV32bisToken;
-%% token_tag2string(X) -> ?CompactV34Token;
-%% token_tag2string(X) -> ?CompactV76Token;
-%% token_tag2string(X) -> ?CompactV90Token;
-%% token_tag2string(X) -> ?CompactV91Token;
-%% token_tag2string(X) -> ?CompactVersionToken;
-token_tag2string(_) -> [].
-
-
-%%----------------------------------------------------------------------
-%% Define various macros used by the actual generator code
-%%----------------------------------------------------------------------
-
--define(EQUAL, [?EqualToken]).
--define(COLON, [?ColonToken]).
--define(LBRKT, [?LbrktToken]).
--define(RBRKT, [?RbrktToken]).
--define(LSBRKT, [?LsbrktToken]).
--define(RSBRKT, [?RsbrktToken]).
--define(COMMA, [?CommaToken]).
--define(DOT, [?DotToken]).
--define(SLASH, [?SlashToken]).
--define(DQUOTE, [?DoubleQuoteToken]).
--define(SP, [?SpToken]).
--define(HTAB, [?HtabToken]).
--define(CR, [?CrToken]).
--define(LF, [?LfToken]).
--define(LWSP, []).
--define(EOL, ?LF).
--define(WSP, ?SP).
--define(SEP, ?WSP).
-
--define(INIT_INDENT, []).
--define(INC_INDENT(State), State).
--define(INDENT(State), State).
--define(LBRKT_INDENT(_State), [?LbrktToken]).
--define(RBRKT_INDENT(_State), [?RbrktToken]).
--define(LSBRKT_INDENT(_State), [?LsbrktToken]).
--define(RSBRKT_INDENT(_State), [?RsbrktToken]).
--define(COMMA_INDENT(_State), [?CommaToken]).
--define(SEP_INDENT(_State), [?LfToken]).
-
-%%----------------------------------------------------------------------
-%% Define token macros
-%%----------------------------------------------------------------------
-
--define(AddToken , ?CompactAddToken).
--define(AndAUDITSelectToken , ?CompactAndAUDITSelectToken).
--define(AuditToken , ?CompactAuditToken).
--define(AuditCapToken , ?CompactAuditCapToken).
--define(AuditValueToken , ?CompactAuditValueToken).
--define(AuthToken , ?CompactAuthToken).
--define(BothToken , ?CompactBothToken).
--define(BothwayToken , ?CompactBothwayToken).
--define(BriefToken , ?CompactBriefToken).
--define(BufferToken , ?CompactBufferToken).
--define(CtxToken , ?CompactCtxToken).
--define(ContextAuditToken , ?CompactContextAuditToken).
--define(ContextAttrToken , ?CompactContextAttrToken).
--define(ContextListToken , ?CompactContextListToken).
--define(DigitMapToken , ?CompactDigitMapToken).
--define(DirectionToken , ?CompactDirectionToken).
--define(DiscardToken , ?CompactDiscardToken).
--define(DisconnectedToken , ?CompactDisconnectedToken).
--define(DelayToken , ?CompactDelayToken).
--define(DeleteToken , ?CompactDeleteToken).
--define(DurationToken , ?CompactDurationToken).
--define(EmbedToken , ?CompactEmbedToken).
--define(EmergencyToken , ?CompactEmergencyToken).
--define(EmergencyOffToken , ?CompactEmergencyOffToken).
--define(EmergencyValueToken , ?CompactEmergencyValueToken).
--define(ErrorToken , ?CompactErrorToken).
--define(EventBufferToken , ?CompactEventBufferToken).
--define(EventsToken , ?CompactEventsToken).
--define(ExternalToken , ?CompactExternalToken).
--define(FailoverToken , ?CompactFailoverToken).
--define(ForcedToken , ?CompactForcedToken).
--define(GracefulToken , ?CompactGracefulToken).
--define(H221Token , ?CompactH221Token).
--define(H223Token , ?CompactH223Token).
--define(H226Token , ?CompactH226Token).
--define(HandOffToken , ?CompactHandOffToken).
--define(IEPSToken , ?CompactIEPSToken).
--define(ImmAckRequiredToken , ?CompactImmAckRequiredToken).
--define(InactiveToken , ?CompactInactiveToken).
--define(InternalToken , ?CompactInternalToken).
--define(IntsigDelayToken , ?CompactIntsigDelayToken).
--define(IsolateToken , ?CompactIsolateToken).
--define(InSvcToken , ?CompactInSvcToken).
--define(InterruptByEventToken , ?CompactInterruptByEventToken).
--define(InterruptByNewSignalsDescrToken, ?CompactInterruptByNewSignalsDescrToken).
--define(IterationToken , ?CompactIterationToken).
--define(KeepActiveToken , ?CompactKeepActiveToken).
--define(LocalToken , ?CompactLocalToken).
--define(LocalControlToken , ?CompactLocalControlToken).
--define(LockStepToken , ?CompactLockStepToken).
--define(LoopbackToken , ?CompactLoopbackToken).
--define(MediaToken , ?CompactMediaToken).
--define(MegacopToken , ?CompactMegacopToken).
-%% -define(MessageSegmentToken , ?CompactMessageSegmentToken).
--define(MethodToken , ?CompactMethodToken).
--define(MgcIdToken , ?CompactMgcIdToken).
--define(ModeToken , ?CompactModeToken).
--define(ModifyToken , ?CompactModifyToken).
--define(ModemToken , ?CompactModemToken).
--define(MoveToken , ?CompactMoveToken).
--define(MtpToken , ?CompactMtpToken).
--define(MuxToken , ?CompactMuxToken).
--define(NeverNotifyToken , ?CompactNeverNotifyToken).
--define(NotifyToken , ?CompactNotifyToken).
--define(NotifyCompletionToken , ?CompactNotifyCompletionToken).
--define(NotifyImmediateToken , ?CompactNotifyImmediateToken).
--define(NotifyRegulatedToken , ?CompactNotifyRegulatedToken).
--define(Nx64kToken , ?CompactNx64kToken).
--define(ObservedEventsToken , ?CompactObservedEventsToken).
--define(OffToken , ?CompactOffToken).
--define(OnewayToken , ?CompactOnewayToken).
--define(OnewayBothToken , ?CompactOnewayBothToken).
--define(OnewayExternalToken , ?CompactOnewayExternalToken).
--define(OnOffToken , ?CompactOnOffToken).
--define(OnToken , ?CompactOnToken).
--define(OrAUDITselectToken , ?CompactOrAUDITselectToken).
--define(OtherReasonToken , ?CompactOtherReasonToken).
--define(OutOfSvcToken , ?CompactOutOfSvcToken).
--define(PackagesToken , ?CompactPackagesToken).
--define(PendingToken , ?CompactPendingToken).
--define(PriorityToken , ?CompactPriorityToken).
--define(ProfileToken , ?CompactProfileToken).
--define(ReasonToken , ?CompactReasonToken).
--define(RecvonlyToken , ?CompactRecvonlyToken).
--define(ReplyToken , ?CompactReplyToken).
--define(ResetEventsDescriptorToken , ?CompactResetEventsDescriptorToken).
--define(ResponseAckToken , ?CompactResponseAckToken).
--define(RestartToken , ?CompactRestartToken).
--define(RemoteToken , ?CompactRemoteToken).
--define(RequestIDToken , ?CompactRequestIDToken).
--define(ReservedGroupToken , ?CompactReservedGroupToken).
--define(ReservedValueToken , ?CompactReservedValueToken).
-%% -define(SegmentationCompleteToken , ?CompactSegmentationCompleteToken).
--define(SendonlyToken , ?CompactSendonlyToken).
--define(SendrecvToken , ?CompactSendrecvToken).
--define(ServicesToken , ?CompactServicesToken).
--define(ServiceStatesToken , ?CompactServiceStatesToken).
--define(ServiceChangeToken , ?CompactServiceChangeToken).
--define(ServiceChangeAddressToken , ?CompactServiceChangeAddressToken).
--define(ServiceChangeIncompleteToken , ?CompactServiceChangeIncompleteToken).
--define(SignalListToken , ?CompactSignalListToken).
--define(SignalsToken , ?CompactSignalsToken).
--define(SignalTypeToken , ?CompactSignalTypeToken).
--define(StatsToken , ?CompactStatsToken).
--define(StreamToken , ?CompactStreamToken).
--define(SubtractToken , ?CompactSubtractToken).
--define(SynchISDNToken , ?CompactSynchISDNToken).
--define(TerminationStateToken , ?CompactTerminationStateToken).
--define(TestToken , ?CompactTestToken).
--define(TimeOutToken , ?CompactTimeOutToken).
--define(TopologyToken , ?CompactTopologyToken).
--define(TransToken , ?CompactTransToken).
--define(V18Token , ?CompactV18Token).
--define(V22Token , ?CompactV22Token).
--define(V22bisToken , ?CompactV22bisToken).
--define(V32Token , ?CompactV32Token).
--define(V32bisToken , ?CompactV32bisToken).
--define(V34Token , ?CompactV34Token).
--define(V76Token , ?CompactV76Token).
--define(V90Token , ?CompactV90Token).
--define(V91Token , ?CompactV91Token).
--define(VersionToken , ?CompactVersionToken).
-
-%%----------------------------------------------------------------------
-%% Include the generator code
-%%----------------------------------------------------------------------
-
--include("megaco_text_gen_prev3c.hrl").
-
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_v1.erl b/lib/megaco/src/text/megaco_compact_text_encoder_v1.erl
index fb6e9ee513..7b84e5f20a 100644
--- a/lib/megaco/src/text/megaco_compact_text_encoder_v1.erl
+++ b/lib/megaco/src/text/megaco_compact_text_encoder_v1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2020. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@
-include_lib("megaco/include/megaco.hrl").
-include_lib("megaco/include/megaco_message_v1.hrl").
--define(encoder_version_pre_prev3c,true).
+-define(encoder_pre_version_3,true). % version 1 or 2
-include("megaco_text_tokens.hrl").
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_v2.erl b/lib/megaco/src/text/megaco_compact_text_encoder_v2.erl
index 459bf07190..169c59909a 100644
--- a/lib/megaco/src/text/megaco_compact_text_encoder_v2.erl
+++ b/lib/megaco/src/text/megaco_compact_text_encoder_v2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2020. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@
-include_lib("megaco/include/megaco.hrl").
-include_lib("megaco/include/megaco_message_v2.hrl").
--define(encoder_version_pre_prev3c,true).
+-define(encoder_pre_version_3,true). % version 1 or 2
-include("megaco_text_tokens.hrl").
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_v3.erl b/lib/megaco/src/text/megaco_compact_text_encoder_v3.erl
index 4f6f16d44b..691bd47130 100644
--- a/lib/megaco/src/text/megaco_compact_text_encoder_v3.erl
+++ b/lib/megaco/src/text/megaco_compact_text_encoder_v3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2020. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder.erl b/lib/megaco/src/text/megaco_pretty_text_encoder.erl
index 56e47a5f24..cf9b1594a3 100644
--- a/lib/megaco/src/text/megaco_pretty_text_encoder.erl
+++ b/lib/megaco/src/text/megaco_pretty_text_encoder.erl
@@ -59,9 +59,6 @@
-define(V1_PARSE_MOD, megaco_text_parser_v1).
-define(V2_PARSE_MOD, megaco_text_parser_v2).
-define(V3_PARSE_MOD, megaco_text_parser_v3).
--define(PREV3A_PARSE_MOD, megaco_text_parser_prev3a).
--define(PREV3B_PARSE_MOD, megaco_text_parser_prev3b).
--define(PREV3C_PARSE_MOD, megaco_text_parser_prev3c).
%%----------------------------------------------------------------------
@@ -90,15 +87,6 @@ encode_message([{version3,_}|EC], 2, MegaMsg) ->
encode_message(EC, 2, MegaMsg) ->
megaco_pretty_text_encoder_v2:encode_message(EC, MegaMsg);
-%% <DEPRECATED>
-encode_message([{version3,prev3c}|EC], 3, MegaMsg) ->
- megaco_pretty_text_encoder_prev3c:encode_message(EC, MegaMsg);
-encode_message([{version3,prev3b}|EC], 3, MegaMsg) ->
- megaco_pretty_text_encoder_prev3b:encode_message(EC, MegaMsg);
-encode_message([{version3,prev3a}|EC], 3, MegaMsg) ->
- megaco_pretty_text_encoder_prev3a:encode_message(EC, MegaMsg);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_message([{version3,v3}|EC], 3, MegaMsg) ->
megaco_pretty_text_encoder_v3:encode_message(EC, MegaMsg);
@@ -148,69 +136,6 @@ decode_message([], _, Bin) when is_binary(Bin) ->
scan_error(Reason, Line, Bin) %% OTP-4007
end;
-%% <DEPRECATED>
-decode_message([{version3,prev3c}], _, Bin) when is_binary(Bin) ->
- case megaco_text_scanner:scan(Bin) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3C_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- {error, Reason, Tokens, Line} ->
- scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} ->
- scan_error(Reason, Line, Bin)
- end;
-decode_message([{version3,prev3b}], _, Bin) when is_binary(Bin) ->
- case megaco_text_scanner:scan(Bin) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3B_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- {error, Reason, Tokens, Line} ->
- scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} -> %% OTP-4007
- scan_error(Reason, Line, Bin) %% OTP-4007
- end;
-decode_message([{version3,prev3a}], _, Bin) when is_binary(Bin) ->
- case megaco_text_scanner:scan(Bin) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3A_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- {error, Reason, Tokens, Line} ->
- scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} -> %% OTP-4007
- scan_error(Reason, Line, Bin) %% OTP-4007
- end;
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
decode_message([{version3,v3}], _, Bin) when is_binary(Bin) ->
case megaco_text_scanner:scan(Bin) of
@@ -255,69 +180,6 @@ decode_message([{flex, Port}], _, Bin) when is_binary(Bin) ->
scan_error(Reason, Line, Bin) %% OTP-4007
end;
-%% <DEPRECATED>
-decode_message([{version3,prev3c},{flex, Port}], _, Bin) when is_binary(Bin) ->
- case megaco_flex_scanner:scan(Bin, Port) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3C_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- %% {error, Reason, Tokens, Line} ->
- %% scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} -> %% OTP-4007
- scan_error(Reason, Line, Bin) %% OTP-4007
- end;
-decode_message([{version3,prev3b},{flex, Port}], _, Bin) when is_binary(Bin) ->
- case megaco_flex_scanner:scan(Bin, Port) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3B_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- %% {error, Reason, Tokens, Line} ->
- %% scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} -> %% OTP-4007
- scan_error(Reason, Line, Bin) %% OTP-4007
- end;
-decode_message([{version3,prev3a},{flex, Port}], _, Bin) when is_binary(Bin) ->
- case megaco_flex_scanner:scan(Bin, Port) of
- {ok, Tokens, 1, _LastLine} ->
- do_decode_message(?V1_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 2, _LastLine} ->
- do_decode_message(?V2_PARSE_MOD, Tokens, Bin);
-
- {ok, Tokens, 3, _LastLine} ->
- do_decode_message(?PREV3A_PARSE_MOD, Tokens, Bin);
-
- {ok, _Tokens, V, _LastLine} ->
- {error, {unsupported_version, V}};
-
- %% {error, Reason, Tokens, Line} ->
- %% scan_error(Reason, Line, Tokens, Bin);
-
- {error, Reason, Line} -> %% OTP-4007
- scan_error(Reason, Line, Bin) %% OTP-4007
- end;
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
decode_message([{version3,v3},{flex, Port}], _, Bin) when is_binary(Bin) ->
case megaco_flex_scanner:scan(Bin, Port) of
@@ -430,15 +292,6 @@ encode_transaction([{version3,_}|EC], 2, Trans) ->
encode_transaction(EC, 2, Trans) ->
megaco_pretty_text_encoder_v2:encode_transaction(EC, Trans);
-%% <DEPRECATED>
-encode_transaction([{version3,prev3c}|EC], 3, Trans) ->
- megaco_pretty_text_encoder_prev3c:encode_transaction(EC, Trans);
-encode_transaction([{version3,prev3b}|EC], 3, Trans) ->
- megaco_pretty_text_encoder_prev3b:encode_transaction(EC, Trans);
-encode_transaction([{version3,prev3a}|EC], 3, Trans) ->
- megaco_pretty_text_encoder_prev3a:encode_transaction(EC, Trans);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_transaction([{version3,v3}|EC], 3, Trans) ->
megaco_pretty_text_encoder_v3:encode_transaction(EC, Trans);
@@ -471,18 +324,6 @@ encode_action_requests([{version3,_}|EC], 2, ActReqs) when is_list(ActReqs) ->
encode_action_requests(EC, 2, ActReqs) when is_list(ActReqs) ->
megaco_pretty_text_encoder_v2:encode_action_requests(EC, ActReqs);
-%% <DEPRECATED>
-encode_action_requests([{version3,prev3c}|EC], 3, ActReqs)
- when is_list(ActReqs) ->
- megaco_pretty_text_encoder_prev3c:encode_action_requests(EC, ActReqs);
-encode_action_requests([{version3,prev3b}|EC], 3, ActReqs)
- when is_list(ActReqs) ->
- megaco_pretty_text_encoder_prev3b:encode_action_requests(EC, ActReqs);
-encode_action_requests([{version3,prev3a}|EC], 3, ActReqs)
- when is_list(ActReqs) ->
- megaco_pretty_text_encoder_prev3a:encode_action_requests(EC, ActReqs);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_action_requests([{version3,v3}|EC], 3, ActReqs)
when is_list(ActReqs) ->
@@ -516,15 +357,6 @@ encode_action_request([{version3,_}|EC], 2, ActReq) ->
encode_action_request(EC, 2, ActReq) ->
megaco_pretty_text_encoder_v2:encode_action_request(EC, ActReq);
-%% <DEPRECATED>
-encode_action_request([{version3,prev3c}|EC], 3, ActReq) ->
- megaco_pretty_text_encoder_prev3c:encode_action_request(EC, ActReq);
-encode_action_request([{version3,prev3b}|EC], 3, ActReq) ->
- megaco_pretty_text_encoder_prev3b:encode_action_request(EC, ActReq);
-encode_action_request([{version3,prev3a}|EC], 3, ActReq) ->
- megaco_pretty_text_encoder_prev3a:encode_action_request(EC, ActReq);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_action_request([{version3,v3}|EC], 3, ActReq) ->
megaco_pretty_text_encoder_v3:encode_action_request(EC, ActReq);
@@ -559,15 +391,6 @@ encode_command_request([{version3,_}|EC], 2, CmdReq) ->
encode_command_request(EC, 2, CmdReq) ->
megaco_pretty_text_encoder_v2:encode_command_request(EC, CmdReq);
-%% <DEPRECATED>
-encode_command_request([{version3,prev3c}|EC], 3, CmdReq) ->
- megaco_pretty_text_encoder_prev3c:encode_command_request(EC, CmdReq);
-encode_command_request([{version3,prev3b}|EC], 3, CmdReq) ->
- megaco_pretty_text_encoder_prev3b:encode_command_request(EC, CmdReq);
-encode_command_request([{version3,prev3a}|EC], 3, CmdReq) ->
- megaco_pretty_text_encoder_prev3a:encode_command_request(EC, CmdReq);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_command_request([{version3,v3}|EC], 3, CmdReq) ->
megaco_pretty_text_encoder_v3:encode_command_request(EC, CmdReq);
@@ -605,15 +428,6 @@ encode_action_reply([{version3,_}|EC], 2, ActRep) ->
encode_action_reply(EC, 2, ActRep) ->
megaco_pretty_text_encoder_v2:encode_action_reply(EC, ActRep);
-%% <DEPRECATED>
-encode_action_reply([{version3,prev3c}|EC], 3, ActRep) ->
- megaco_pretty_text_encoder_prev3c:encode_action_reply(EC, ActRep);
-encode_action_reply([{version3,prev3b}|EC], 3, ActRep) ->
- megaco_pretty_text_encoder_prev3b:encode_action_reply(EC, ActRep);
-encode_action_reply([{version3,prev3a}|EC], 3, ActRep) ->
- megaco_pretty_text_encoder_prev3a:encode_action_reply(EC, ActRep);
-%% </DEPRECATED>
-
%% <BACKWARD-COMPAT-CLAUSE>
encode_action_reply([{version3,v3}|EC], 3, ActRep) ->
megaco_pretty_text_encoder_v3:encode_action_reply(EC, ActRep);
@@ -673,46 +487,6 @@ token_tag2string(Tag, 3) ->
token_tag2string(Tag, v3) ->
megaco_pretty_text_encoder_v3:token_tag2string(Tag);
-%% <DEPRECATED>
-token_tag2string(Tag, prev3b) ->
- megaco_pretty_text_encoder_prev3b:token_tag2string(Tag);
-token_tag2string(Tag, prev3c) ->
- megaco_pretty_text_encoder_prev3c:token_tag2string(Tag);
-%% </DEPRECATED>
-
token_tag2string(Tag, _Vsn) ->
token_tag2string(Tag, ?TT2S_BEST_VERSION).
-
-
-%% d(F) ->
-%% d(F, []).
-
-%% d(F, A) ->
-%% %% d(get(dbg), F, A).
-%% d(true, F, A).
-
-%% d(true, F, A) ->
-%% io:format("~p:" ++ F ++ "~n", [?MODULE|A]);
-%% d(_, _, _) ->
-%% ok.
-
-%% p(F, A) ->
-%% io:format("*** [~s] ***"
-%% "~n " ++ F ++ "~n", [formated_timestamp() | A]),
-%% sleep(5000),
-%% ok.
-
-%% sleep(X) -> receive after X -> ok end.
-
-%% formated_timestamp() ->
-%% format_timestamp(now()).
-
-%% format_timestamp({_N1, _N2, N3} = Now) ->
-%% {Date, Time} = calendar:now_to_datetime(Now),
-%% {YYYY,MM,DD} = Date,
-%% {Hour,Min,Sec} = Time,
-%% FormatDate =
-%% io_lib:format("~.4w:~.2.0w:~.2.0w ~.2.0w:~.2.0w:~.2.0w 4~w",
-%% [YYYY,MM,DD,Hour,Min,Sec,round(N3/1000)]),
-%% lists:flatten(FormatDate).
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3a.erl b/lib/megaco/src/text/megaco_pretty_text_encoder_prev3a.erl
deleted file mode 100644
index dd9c43c7ea..0000000000
--- a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3a.erl
+++ /dev/null
@@ -1,309 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Encode PRETTY Megaco/H.248 text messages from internal form
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
--module(megaco_pretty_text_encoder_prev3a).
-
--export([encode_message/2,
- encode_transaction/2,
- encode_action_requests/2,
- encode_action_request/2,
- encode_command_request/2,
- encode_action_reply/2]).
-
-
--include_lib("megaco/include/megaco.hrl").
--include_lib("megaco/include/megaco_message_prev3a.hrl").
--define(encoder_version_pre_prev3c,true).
--include("megaco_text_tokens.hrl").
-
-
-%%----------------------------------------------------------------------
-%% Convert a 'MegacoMessage' record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-
-encode_message(EC, MegaMsg)
- when is_list(EC) andalso is_record(MegaMsg, 'MegacoMessage') ->
- case (catch enc_MegacoMessage(MegaMsg)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end;
-encode_message(EncodingConfig, MegaMsg)
- when is_record(MegaMsg, 'MegacoMessage') ->
- {error, {bad_encoding_config, EncodingConfig}};
-encode_message(_EncodingConfig, _MegaMsg) ->
- {error, bad_megaco_message}.
-
-
-%%----------------------------------------------------------------------
-%% Convert a binary into a 'MegacoMessage' record
-%% Return {ok, MegacoMessageRecord} | {error, Reason}
-%%
-%% See megaco_pretty_text_encoder:decode_message/2
-%%
-%%----------------------------------------------------------------------
-
-
-%%----------------------------------------------------------------------
-%% Convert a transaction record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_transaction(_EC, Trans) ->
- case (catch enc_Transaction(Trans)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a list of ActionRequest record's into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_requests(_EC, ActReqs) when is_list(ActReqs) ->
- case (catch enc_ActionRequests(ActReqs)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a ActionRequest record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_request(_EC, ActReq)
- when is_record(ActReq, 'ActionRequest') ->
- case (catch enc_ActionRequest(ActReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a CommandRequest record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_command_request(_EC, CmdReq)
- when is_record(CmdReq, 'CommandRequest') ->
- case (catch enc_CommandRequest(CmdReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a action reply into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_reply(_EC, ActRep)
- when is_record(ActRep, 'ActionReply') ->
- case (catch enc_ActionReply(ActRep)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-
-%%----------------------------------------------------------------------
-%% Define various macros used by the actual generator code
-%%----------------------------------------------------------------------
-
--define(EQUAL, [?SpToken, ?EqualToken, ?SpToken]).
--define(COLON, [?ColonToken]).
--define(LBRKT, [?SpToken, ?LbrktToken, ?SpToken]).
--define(RBRKT, [?SpToken, ?RbrktToken, ?SpToken]).
--define(LSBRKT, [?SpToken, ?LsbrktToken, ?SpToken]).
--define(RSBRKT, [?SpToken, ?RsbrktToken, ?SpToken]).
--define(COMMA, [?CommaToken, ?SpToken]).
--define(DOT, [?DotToken]).
--define(SLASH, [?SlashToken]).
--define(DQUOTE, [?DoubleQuoteToken]).
--define(SP, [?SpToken]).
--define(HTAB, [?HtabToken]).
--define(CR, [?CrToken]).
--define(LF, [?LfToken]).
--define(LWSP, []).
--define(EOL, ?LF).
--define(WSP, ?SP).
--define(SEP, ?WSP).
-
--define(INIT_INDENT, []).
--define(INC_INDENT(State), [?HtabToken | State]).
--define(INDENT(State), [?LfToken | State]).
--define(LBRKT_INDENT(State), [?SpToken, ?LbrktToken, ?INDENT(?INC_INDENT(State))]).
--define(RBRKT_INDENT(State), [?INDENT(State), ?RbrktToken]).
--define(LSBRKT_INDENT(State), [?SpToken, ?LsbrktToken, ?INDENT(?INC_INDENT(State))]).
--define(RSBRKT_INDENT(State), [?INDENT(State), ?RsbrktToken]).
--define(COMMA_INDENT(State), [?CommaToken, ?INDENT(State)]).
--define(SEP_INDENT(_State), [?LfToken]).
-
-%%----------------------------------------------------------------------
-%% Define token macros
-%%----------------------------------------------------------------------
-
--define(AddToken , ?PrettyAddToken).
--define(AuditToken , ?PrettyAuditToken).
--define(AuditCapToken , ?PrettyAuditCapToken).
--define(AuditValueToken , ?PrettyAuditValueToken).
--define(AuthToken , ?PrettyAuthToken).
--define(BothToken , ?PrettyBothToken).
--define(BothwayToken , ?PrettyBothwayToken).
--define(BriefToken , ?PrettyBriefToken).
--define(BufferToken , ?PrettyBufferToken).
--define(CtxToken , ?PrettyCtxToken).
--define(ContextAuditToken , ?PrettyContextAuditToken).
--define(ContextAttrToken , ?PrettyContextAttrToken).
--define(DigitMapToken , ?PrettyDigitMapToken).
--define(DirectionToken , ?PrettyDirectionToken).
--define(DiscardToken , ?PrettyDiscardToken).
--define(DisconnectedToken , ?PrettyDisconnectedToken).
--define(DelayToken , ?PrettyDelayToken).
--define(DeleteToken , ?PrettyDeleteToken).
--define(DurationToken , ?PrettyDurationToken).
--define(EmbedToken , ?PrettyEmbedToken).
--define(EmergencyToken , ?PrettyEmergencyToken).
--define(EmergencyOffToken , ?PrettyEmergencyOffToken).
--define(ErrorToken , ?PrettyErrorToken).
--define(EventBufferToken , ?PrettyEventBufferToken).
--define(EventsToken , ?PrettyEventsToken).
--define(ExternalToken , ?PrettyExternalToken).
--define(FailoverToken , ?PrettyFailoverToken).
--define(ForcedToken , ?PrettyForcedToken).
--define(GracefulToken , ?PrettyGracefulToken).
--define(H221Token , ?PrettyH221Token).
--define(H223Token , ?PrettyH223Token).
--define(H226Token , ?PrettyH226Token).
--define(HandOffToken , ?PrettyHandOffToken).
--define(IEPSToken , ?PrettyIEPSToken).
--define(ImmAckRequiredToken , ?PrettyImmAckRequiredToken).
--define(InactiveToken , ?PrettyInactiveToken).
--define(InternalToken , ?PrettyInternalToken).
--define(IsolateToken , ?PrettyIsolateToken).
--define(InSvcToken , ?PrettyInSvcToken).
--define(InterruptByEventToken , ?PrettyInterruptByEventToken).
--define(InterruptByNewSignalsDescrToken, ?PrettyInterruptByNewSignalsDescrToken).
--define(KeepActiveToken , ?PrettyKeepActiveToken).
--define(LocalToken , ?PrettyLocalToken).
--define(LocalControlToken , ?PrettyLocalControlToken).
--define(LockStepToken , ?PrettyLockStepToken).
--define(LoopbackToken , ?PrettyLoopbackToken).
--define(MediaToken , ?PrettyMediaToken).
--define(MegacopToken , ?PrettyMegacopToken).
--define(MethodToken , ?PrettyMethodToken).
--define(MgcIdToken , ?PrettyMgcIdToken).
--define(ModeToken , ?PrettyModeToken).
--define(ModifyToken , ?PrettyModifyToken).
--define(ModemToken , ?PrettyModemToken).
--define(MoveToken , ?PrettyMoveToken).
--define(MtpToken , ?PrettyMtpToken).
--define(MuxToken , ?PrettyMuxToken).
--define(NotifyToken , ?PrettyNotifyToken).
--define(NotifyCompletionToken , ?PrettyNotifyCompletionToken).
--define(Nx64kToken , ?PrettyNx64kToken).
--define(ObservedEventsToken , ?PrettyObservedEventsToken).
--define(OffToken , ?PrettyOffToken).
--define(OnewayToken , ?PrettyOnewayToken).
--define(OnOffToken , ?PrettyOnOffToken).
--define(OnToken , ?PrettyOnToken).
--define(OtherReasonToken , ?PrettyOtherReasonToken).
--define(OutOfSvcToken , ?PrettyOutOfSvcToken).
--define(PackagesToken , ?PrettyPackagesToken).
--define(PendingToken , ?PrettyPendingToken).
--define(PriorityToken , ?PrettyPriorityToken).
--define(ProfileToken , ?PrettyProfileToken).
--define(ReasonToken , ?PrettyReasonToken).
--define(RecvonlyToken , ?PrettyRecvonlyToken).
--define(ReplyToken , ?PrettyReplyToken).
--define(RequestIDToken , ?PrettyRequestIDToken).
--define(ResponseAckToken , ?PrettyResponseAckToken).
--define(RestartToken , ?PrettyRestartToken).
--define(RemoteToken , ?PrettyRemoteToken).
--define(ReservedGroupToken , ?PrettyReservedGroupToken).
--define(ReservedValueToken , ?PrettyReservedValueToken).
--define(SendonlyToken , ?PrettySendonlyToken).
--define(SendrecvToken , ?PrettySendrecvToken).
--define(ServicesToken , ?PrettyServicesToken).
--define(ServiceStatesToken , ?PrettyServiceStatesToken).
--define(ServiceChangeToken , ?PrettyServiceChangeToken).
--define(ServiceChangeAddressToken , ?PrettyServiceChangeAddressToken).
--define(ServiceChangeIncompleteToken , ?PrettyServiceChangeIncompleteToken).
--define(SignalListToken , ?PrettySignalListToken).
--define(SignalsToken , ?PrettySignalsToken).
--define(SignalTypeToken , ?PrettySignalTypeToken).
--define(StatsToken , ?PrettyStatsToken).
--define(StreamToken , ?PrettyStreamToken).
--define(SubtractToken , ?PrettySubtractToken).
--define(SynchISDNToken , ?PrettySynchISDNToken).
--define(TerminationStateToken , ?PrettyTerminationStateToken).
--define(TestToken , ?PrettyTestToken).
--define(TimeOutToken , ?PrettyTimeOutToken).
--define(TopologyToken , ?PrettyTopologyToken).
--define(TransToken , ?PrettyTransToken).
--define(V18Token , ?PrettyV18Token).
--define(V22Token , ?PrettyV22Token).
--define(V22bisToken , ?PrettyV22bisToken).
--define(V32Token , ?PrettyV32Token).
--define(V32bisToken , ?PrettyV32bisToken).
--define(V34Token , ?PrettyV34Token).
--define(V76Token , ?PrettyV76Token).
--define(V90Token , ?PrettyV90Token).
--define(V91Token , ?PrettyV91Token).
--define(VersionToken , ?PrettyVersionToken).
-
-%%----------------------------------------------------------------------
-%% Include the generator code
-%%----------------------------------------------------------------------
-
--include("megaco_text_gen_prev3a.hrl").
-
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3b.erl b/lib/megaco/src/text/megaco_pretty_text_encoder_prev3b.erl
deleted file mode 100644
index 3df83b2160..0000000000
--- a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3b.erl
+++ /dev/null
@@ -1,443 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Encode PRETTY Megaco/H.248 text messages from internal form
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
--module(megaco_pretty_text_encoder_prev3b).
-
--export([encode_message/2,
- encode_transaction/2,
- encode_action_requests/2,
- encode_action_request/2,
- encode_command_request/2,
- encode_action_reply/2]).
-
--export([token_tag2string/1]).
-
--include_lib("megaco/include/megaco.hrl").
--include_lib("megaco/include/megaco_message_prev3b.hrl").
--define(encoder_version_pre_prev3c,true).
--include("megaco_text_tokens.hrl").
-
-
-%%----------------------------------------------------------------------
-%% Convert a 'MegacoMessage' record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-
-encode_message(EC, MegaMsg)
- when is_list(EC) andalso is_record(MegaMsg, 'MegacoMessage') ->
- case (catch enc_MegacoMessage(MegaMsg)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end;
-encode_message(EncodingConfig, MegaMsg)
- when is_record(MegaMsg, 'MegacoMessage') ->
- {error, {bad_encoding_config, EncodingConfig}};
-encode_message(_EncodingConfig, _MegaMsg) ->
- {error, bad_megaco_message}.
-
-
-%%----------------------------------------------------------------------
-%% Convert a binary into a 'MegacoMessage' record
-%% Return {ok, MegacoMessageRecord} | {error, Reason}
-%%
-%% See megaco_pretty_text_encoder:decode_message/2
-%%
-%%----------------------------------------------------------------------
-
-
-%%----------------------------------------------------------------------
-%% Convert a transaction record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_transaction(_EC, Trans) ->
- case (catch enc_Transaction(Trans)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a list of ActionRequest record's into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_requests(_EC, ActReqs) when is_list(ActReqs) ->
- case (catch enc_ActionRequests(ActReqs)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a ActionRequest record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_request(_EC, ActReq)
- when is_record(ActReq, 'ActionRequest') ->
- case (catch enc_ActionRequest(ActReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a CommandRequest record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_command_request(_EC, CmdReq)
- when is_record(CmdReq, 'CommandRequest') ->
- case (catch enc_CommandRequest(CmdReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a action reply into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_reply(_EC, ActRep)
- when is_record(ActRep, 'ActionReply') ->
- case (catch enc_ActionReply(ActRep)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-
-%%----------------------------------------------------------------------
-%% A utility function to pretty print the tags found in a megaco message
-%%----------------------------------------------------------------------
-
-token_tag2string(addReq) -> ?PrettyAddToken;
-token_tag2string(addReply) -> ?PrettyAddToken;
-token_tag2string(auditDescriptor) -> ?PrettyAuditToken;
-token_tag2string(auditCapRequest) -> ?PrettyAuditCapToken;
-token_tag2string(auditCapReply) -> ?PrettyAuditCapToken;
-token_tag2string(auditValueRequest) -> ?PrettyAuditValueToken;
-token_tag2string(auditValueReply) -> ?PrettyAuditValueToken;
-%% token_tag2string(X) -> ?PrettyAuthToken;
-token_tag2string(both) -> ?PrettyBothToken;
-token_tag2string(bothway) -> ?PrettyBothwayToken;
-token_tag2string(brief) -> ?PrettyBriefToken;
-%% token_tag2string(X) -> ?PrettyBufferToken;
-%% token_tag2string(X) -> ?PrettyCtxToken;
-%% token_tag2string(X) -> ?PrettyContextAttrToken;
-%% token_tag2string(X) -> ?PrettyContextAuditToken;
-%% token_tag2string(X) -> ?PrettyContextListToken;
-token_tag2string(digitMapDescriptor) -> ?PrettyDigitMapToken;
-token_tag2string(digitMapToken) -> ?PrettyDigitMapToken;
-%% token_tag2string(X) -> ?PrettyDirectionToken;
-%% token_tag2string(X) -> ?PrettyDiscardToken;
-%% token_tag2string(X) -> ?PrettyDisconnectedToken;
-%% token_tag2string(X) -> ?PrettyDelayToken;
-token_tag2string(duration) -> ?PrettyDurationToken;
-%% token_tag2string(X) -> ?PrettyEmbedToken;
-token_tag2string(emergencyAudit) -> ?PrettyEmergencyToken;
-%% token_tag2string(X) -> ?PrettyEmergencyOffToken;
-token_tag2string(errorDescriptor) -> ?PrettyErrorToken;
-token_tag2string(eventBufferDescriptor) -> ?PrettyEventBufferToken;
-token_tag2string(eventBufferToken) -> ?PrettyEventBufferToken;
-token_tag2string(eventsDescriptor) -> ?PrettyEventsToken;
-token_tag2string(eventsToken) -> ?PrettyEventsToken;
-token_tag2string(external) -> ?PrettyExternalToken;
-%% token_tag2string(X) -> ?PrettyFailoverToken;
-%% token_tag2string(X) -> ?PrettyForcedToken;
-%% token_tag2string(X) -> ?PrettyGracefulToken;
-%% token_tag2string(X) -> ?PrettyH221Token;
-%% token_tag2string(X) -> ?PrettyH223Token;
-%% token_tag2string(X) -> ?PrettyH226Token;
-%% token_tag2string(X) -> ?PrettyHandOffToken;
-token_tag2string(iepsCallind) -> ?PrettyIEPSToken;
-%% token_tag2string(X) -> ?PrettyImmAckRequiredToken;
-token_tag2string(inactive) -> ?PrettyInactiveToken;
-token_tag2string(internal) -> ?PrettyInternalToken;
-token_tag2string(onInterruptByEvent) -> ?PrettyInterruptByEventToken;
-token_tag2string(onInterruptByNewSignalDescr) -> ?PrettyInterruptByNewSignalsDescrToken;
-token_tag2string(isolate) -> ?PrettyIsolateToken;
-token_tag2string(inSvc) -> ?PrettyInSvcToken;
-token_tag2string(keepActive) -> ?PrettyKeepActiveToken;
-token_tag2string(localDescriptor) -> ?PrettyLocalToken;
-token_tag2string(localControlDescriptor) -> ?PrettyLocalControlToken;
-token_tag2string(lockStep) -> ?PrettyLockStepToken;
-token_tag2string(loopBack) -> ?PrettyLoopbackToken;
-token_tag2string(mediaDescriptor) -> ?PrettyMediaToken;
-token_tag2string(mediaToken) -> ?PrettyMediaToken;
-%% token_tag2string(X) -> ?PrettyMegacopToken;
-%% token_tag2string(X) -> ?PrettyMethodToken;
-%% token_tag2string(X) -> ?PrettyMgcIdToken;
-%% token_tag2string(X) -> ?PrettyModeToken;
-token_tag2string(modReq) -> ?PrettyModifyToken;
-token_tag2string(modReply) -> ?PrettyModifyToken;
-token_tag2string(modemDescriptor) -> ?PrettyModemToken;
-token_tag2string(modemToken) -> ?PrettyModemToken;
-token_tag2string(moveReq) -> ?PrettyMoveToken;
-token_tag2string(moveReply) -> ?PrettyMoveToken;
-%% token_tag2string(X) -> ?PrettyMtpToken;
-token_tag2string(muxDescriptor) -> ?PrettyMuxToken;
-token_tag2string(muxToken) -> ?PrettyMuxToken;
-token_tag2string(notifyReq) -> ?PrettyNotifyToken;
-%% token_tag2string(X) -> ?PrettyNotifyCompletionToken;
-%% token_tag2string(X) -> ?PrettyNx64kToken;
-token_tag2string(observedEventsDescriptor) -> ?PrettyObservedEventsToken;
-token_tag2string(observedEventsToken) -> ?PrettyObservedEventsToken;
-token_tag2string(false) -> ?PrettyOffToken;
-token_tag2string(off) -> ?PrettyOffToken;
-token_tag2string(oneway) -> ?PrettyOnewayToken;
-token_tag2string(onOff) -> ?PrettyOnOffToken;
-token_tag2string(true) -> ?PrettyOnToken;
-token_tag2string(otherReason) -> ?PrettyOtherReasonToken;
-token_tag2string(outOfSvc) -> ?PrettyOutOfSvcToken;
-token_tag2string(packagesDescriptor) -> ?PrettyPackagesToken;
-token_tag2string(packagesToken) -> ?PrettyPackagesToken;
-%% token_tag2string(X) -> ?PrettyPendingToken;
-token_tag2string(priorityAudit) -> ?PrettyPriorityToken;
-%% token_tag2string(X) -> ?PrettyProfileToken;
-%% token_tag2string(X) -> ?PrettyReasonToken;
-token_tag2string(recvOnly) -> ?PrettyRecvonlyToken;
-%% token_tag2string(X) -> ?PrettyReplyToken;
-%% token_tag2string(X) -> ?PrettyRequestIDToken;
-%% token_tag2string(X) -> ?PrettyResponseAckToken;
-%% token_tag2string(X) -> ?PrettyRestartToken;
-token_tag2string(remoteDescriptor) -> ?PrettyRemoteToken;
-%% token_tag2string(X) -> ?PrettyReservedGroupToken;
-%% token_tag2string(X) -> ?PrettyReservedValueToken;
-token_tag2string(sendOnly) -> ?PrettySendonlyToken;
-token_tag2string(sendRecv) -> ?PrettySendrecvToken;
-%% token_tag2string(X) -> ?PrettyServicesToken;
-%% token_tag2string(X) -> ?PrettyServiceStatesToken;
-token_tag2string(serviceChangeReq) -> ?PrettyServiceChangeToken;
-%% token_tag2string(X) -> ?PrettyServiceChangeAddressToken;
-token_tag2string(incomplete) -> ?PrettyServiceChangeIncompleteToken;
-%% token_tag2string(X) -> ?PrettySignalListToken;
-token_tag2string(signalsDescriptor) -> ?PrettySignalsToken;
-token_tag2string(signalsToken) -> ?PrettySignalsToken;
-%% token_tag2string(X) -> ?PrettySignalTypeToken;
-token_tag2string(statisticsDescriptor) -> ?PrettyStatsToken;
-token_tag2string(statsToken) -> ?PrettyStatsToken;
-%% token_tag2string(X) -> ?PrettyStreamToken;
-token_tag2string(subtractReq) -> ?PrettySubtractToken;
-token_tag2string(subtractReply) -> ?PrettySubtractToken;
-%% token_tag2string(X) -> ?PrettySynchISDNToken;
-%% token_tag2string(X) -> ?PrettyTerminationStateToken;
-token_tag2string(test) -> ?PrettyTestToken;
-token_tag2string(timeOut) -> ?PrettyTimeOutToken;
-token_tag2string(onTimeOut) -> ?PrettyTimeOutToken;
-token_tag2string(topologyAudit) -> ?PrettyTopologyToken;
-%% token_tag2string(X) -> ?PrettyTransToken;
-%% token_tag2string(X) -> ?PrettyV18Token;
-%% token_tag2string(X) -> ?PrettyV22Token;
-%% token_tag2string(X) -> ?PrettyV22bisToken;
-%% token_tag2string(X) -> ?PrettyV32Token;
-%% token_tag2string(X) -> ?PrettyV32bisToken;
-%% token_tag2string(X) -> ?PrettyV34Token;
-%% token_tag2string(X) -> ?PrettyV76Token;
-%% token_tag2string(X) -> ?PrettyV90Token;
-%% token_tag2string(X) -> ?PrettyV91Token;
-%% token_tag2string(X) -> ?PrettyVersionToken;
-token_tag2string(_) -> [].
-
-
-%%----------------------------------------------------------------------
-%% Define various macros used by the actual generator code
-%%----------------------------------------------------------------------
-
--define(EQUAL, [?SpToken, ?EqualToken, ?SpToken]).
--define(COLON, [?ColonToken]).
--define(LBRKT, [?SpToken, ?LbrktToken, ?SpToken]).
--define(RBRKT, [?SpToken, ?RbrktToken, ?SpToken]).
--define(LSBRKT, [?SpToken, ?LsbrktToken, ?SpToken]).
--define(RSBRKT, [?SpToken, ?RsbrktToken, ?SpToken]).
--define(COMMA, [?CommaToken, ?SpToken]).
--define(DOT, [?DotToken]).
--define(SLASH, [?SlashToken]).
--define(DQUOTE, [?DoubleQuoteToken]).
--define(SP, [?SpToken]).
--define(HTAB, [?HtabToken]).
--define(CR, [?CrToken]).
--define(LF, [?LfToken]).
--define(LWSP, []).
--define(EOL, ?LF).
--define(WSP, ?SP).
--define(SEP, ?WSP).
-
--define(INIT_INDENT, []).
--define(INC_INDENT(State), [?HtabToken | State]).
--define(INDENT(State), [?LfToken | State]).
--define(LBRKT_INDENT(State), [?SpToken, ?LbrktToken, ?INDENT(?INC_INDENT(State))]).
--define(RBRKT_INDENT(State), [?INDENT(State), ?RbrktToken]).
--define(LSBRKT_INDENT(State), [?SpToken, ?LsbrktToken, ?INDENT(?INC_INDENT(State))]).
--define(RSBRKT_INDENT(State), [?INDENT(State), ?RsbrktToken]).
--define(COMMA_INDENT(State), [?CommaToken, ?INDENT(State)]).
--define(SEP_INDENT(_State), [?LfToken]).
-
-%%----------------------------------------------------------------------
-%% Define token macros
-%%----------------------------------------------------------------------
-
--define(AddToken , ?PrettyAddToken).
--define(AuditToken , ?PrettyAuditToken).
--define(AuditCapToken , ?PrettyAuditCapToken).
--define(AuditValueToken , ?PrettyAuditValueToken).
--define(AuthToken , ?PrettyAuthToken).
--define(BothToken , ?PrettyBothToken).
--define(BothwayToken , ?PrettyBothwayToken).
--define(BriefToken , ?PrettyBriefToken).
--define(BufferToken , ?PrettyBufferToken).
--define(CtxToken , ?PrettyCtxToken).
--define(ContextAuditToken , ?PrettyContextAuditToken).
--define(ContextAttrToken , ?PrettyContextAttrToken).
--define(DigitMapToken , ?PrettyDigitMapToken).
--define(DirectionToken , ?PrettyDirectionToken).
--define(DiscardToken , ?PrettyDiscardToken).
--define(DisconnectedToken , ?PrettyDisconnectedToken).
--define(DelayToken , ?PrettyDelayToken).
--define(DeleteToken , ?PrettyDeleteToken).
--define(DurationToken , ?PrettyDurationToken).
--define(EmbedToken , ?PrettyEmbedToken).
--define(EmergencyToken , ?PrettyEmergencyToken).
--define(EmergencyOffToken , ?PrettyEmergencyOffToken).
--define(ErrorToken , ?PrettyErrorToken).
--define(EventBufferToken , ?PrettyEventBufferToken).
--define(EventsToken , ?PrettyEventsToken).
--define(ExternalToken , ?PrettyExternalToken).
--define(FailoverToken , ?PrettyFailoverToken).
--define(ForcedToken , ?PrettyForcedToken).
--define(GracefulToken , ?PrettyGracefulToken).
--define(H221Token , ?PrettyH221Token).
--define(H223Token , ?PrettyH223Token).
--define(H226Token , ?PrettyH226Token).
--define(HandOffToken , ?PrettyHandOffToken).
--define(IEPSToken , ?PrettyIEPSToken).
--define(ImmAckRequiredToken , ?PrettyImmAckRequiredToken).
--define(InactiveToken , ?PrettyInactiveToken).
--define(InternalToken , ?PrettyInternalToken).
--define(IsolateToken , ?PrettyIsolateToken).
--define(InSvcToken , ?PrettyInSvcToken).
--define(InterruptByEventToken , ?PrettyInterruptByEventToken).
--define(InterruptByNewSignalsDescrToken, ?PrettyInterruptByNewSignalsDescrToken).
--define(KeepActiveToken , ?PrettyKeepActiveToken).
--define(LocalToken , ?PrettyLocalToken).
--define(LocalControlToken , ?PrettyLocalControlToken).
--define(LockStepToken , ?PrettyLockStepToken).
--define(LoopbackToken , ?PrettyLoopbackToken).
--define(MediaToken , ?PrettyMediaToken).
--define(MegacopToken , ?PrettyMegacopToken).
--define(MethodToken , ?PrettyMethodToken).
--define(MgcIdToken , ?PrettyMgcIdToken).
--define(ModeToken , ?PrettyModeToken).
--define(ModifyToken , ?PrettyModifyToken).
--define(ModemToken , ?PrettyModemToken).
--define(MoveToken , ?PrettyMoveToken).
--define(MtpToken , ?PrettyMtpToken).
--define(MuxToken , ?PrettyMuxToken).
--define(NotifyToken , ?PrettyNotifyToken).
--define(NotifyCompletionToken , ?PrettyNotifyCompletionToken).
--define(Nx64kToken , ?PrettyNx64kToken).
--define(ObservedEventsToken , ?PrettyObservedEventsToken).
--define(OffToken , ?PrettyOffToken).
--define(OnewayToken , ?PrettyOnewayToken).
--define(OnOffToken , ?PrettyOnOffToken).
--define(OnToken , ?PrettyOnToken).
--define(OtherReasonToken , ?PrettyOtherReasonToken).
--define(OutOfSvcToken , ?PrettyOutOfSvcToken).
--define(PackagesToken , ?PrettyPackagesToken).
--define(PendingToken , ?PrettyPendingToken).
--define(PriorityToken , ?PrettyPriorityToken).
--define(ProfileToken , ?PrettyProfileToken).
--define(ReasonToken , ?PrettyReasonToken).
--define(RecvonlyToken , ?PrettyRecvonlyToken).
--define(ReplyToken , ?PrettyReplyToken).
--define(RequestIDToken , ?PrettyRequestIDToken).
--define(ResponseAckToken , ?PrettyResponseAckToken).
--define(RestartToken , ?PrettyRestartToken).
--define(RemoteToken , ?PrettyRemoteToken).
--define(ReservedGroupToken , ?PrettyReservedGroupToken).
--define(ReservedValueToken , ?PrettyReservedValueToken).
--define(SendonlyToken , ?PrettySendonlyToken).
--define(SendrecvToken , ?PrettySendrecvToken).
--define(ServicesToken , ?PrettyServicesToken).
--define(ServiceStatesToken , ?PrettyServiceStatesToken).
--define(ServiceChangeToken , ?PrettyServiceChangeToken).
--define(ServiceChangeAddressToken , ?PrettyServiceChangeAddressToken).
--define(ServiceChangeIncompleteToken , ?PrettyServiceChangeIncompleteToken).
--define(SignalListToken , ?PrettySignalListToken).
--define(SignalsToken , ?PrettySignalsToken).
--define(SignalTypeToken , ?PrettySignalTypeToken).
--define(StatsToken , ?PrettyStatsToken).
--define(StreamToken , ?PrettyStreamToken).
--define(SubtractToken , ?PrettySubtractToken).
--define(SynchISDNToken , ?PrettySynchISDNToken).
--define(TerminationStateToken , ?PrettyTerminationStateToken).
--define(TestToken , ?PrettyTestToken).
--define(TimeOutToken , ?PrettyTimeOutToken).
--define(TopologyToken , ?PrettyTopologyToken).
--define(TransToken , ?PrettyTransToken).
--define(V18Token , ?PrettyV18Token).
--define(V22Token , ?PrettyV22Token).
--define(V22bisToken , ?PrettyV22bisToken).
--define(V32Token , ?PrettyV32Token).
--define(V32bisToken , ?PrettyV32bisToken).
--define(V34Token , ?PrettyV34Token).
--define(V76Token , ?PrettyV76Token).
--define(V90Token , ?PrettyV90Token).
--define(V91Token , ?PrettyV91Token).
--define(VersionToken , ?PrettyVersionToken).
-
-%%----------------------------------------------------------------------
-%% Include the generator code
-%%----------------------------------------------------------------------
-
--include("megaco_text_gen_prev3b.hrl").
-
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3c.erl b/lib/megaco/src/text/megaco_pretty_text_encoder_prev3c.erl
deleted file mode 100644
index c0228bef14..0000000000
--- a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3c.erl
+++ /dev/null
@@ -1,489 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Encode PRETTY Megaco/H.248 text messages from internal form
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
--module(megaco_pretty_text_encoder_prev3c).
-
--export([encode_message/2,
- encode_transaction/2,
- encode_action_requests/2,
- encode_action_request/2,
- encode_command_request/2,
- encode_action_reply/2]).
-
--export([token_tag2string/1]).
-
--export([test/1]).
-
--include_lib("megaco/include/megaco.hrl").
--include_lib("megaco/include/megaco_message_prev3c.hrl").
--include("megaco_text_tokens.hrl").
-
-
-
-%%----------------------------------------------------------------------
-%% Convert a 'MegacoMessage' record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-
-encode_message(EC, MegaMsg)
- when is_list(EC) andalso is_record(MegaMsg, 'MegacoMessage') ->
- case (catch enc_MegacoMessage(MegaMsg)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end;
-encode_message(EncodingConfig, MegaMsg)
- when is_record(MegaMsg, 'MegacoMessage') ->
- {error, {bad_encoding_config, EncodingConfig}};
-encode_message(_EncodingConfig, _MegaMsg) ->
- {error, bad_megaco_message}.
-
-
-%%----------------------------------------------------------------------
-%% Convert a binary into a 'MegacoMessage' record
-%% Return {ok, MegacoMessageRecord} | {error, Reason}
-%%
-%% See megaco_pretty_text_encoder:decode_message/2
-%%
-%%----------------------------------------------------------------------
-
-
-%%----------------------------------------------------------------------
-%% Convert a transaction record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_transaction(_EC, Trans) ->
- case (catch enc_Transaction(Trans)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a list of ActionRequest record's into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_requests(_EC, ActReqs) when is_list(ActReqs) ->
- case (catch enc_ActionRequests(ActReqs)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a ActionRequest record into a binary
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_request(_EC, ActReq)
- when is_record(ActReq, 'ActionRequest') ->
- case (catch enc_ActionRequest(ActReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a CommandRequest record into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_command_request(_EC, CmdReq)
- when is_record(CmdReq, 'CommandRequest') ->
- case (catch enc_CommandRequest(CmdReq)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-%%----------------------------------------------------------------------
-%% Convert a action reply into a deep io list
-%% Return {ok, DeepIoList} | {error, Reason}
-%%----------------------------------------------------------------------
-encode_action_reply(_EC, ActRep)
- when is_record(ActRep, 'ActionReply') ->
- case (catch enc_ActionReply(ActRep)) of
- {'EXIT', Reason} ->
- {error, Reason};
- Bin when is_binary(Bin) ->
- {ok, Bin};
- DeepIoList ->
- Bin = erlang:list_to_binary(DeepIoList),
- {ok, Bin}
- end.
-
-
-%%----------------------------------------------------------------------
-%% A utility function to pretty print the tags found in a megaco message
-%%----------------------------------------------------------------------
-
-token_tag2string(addReq) -> ?PrettyAddToken;
-token_tag2string(addReply) -> ?PrettyAddToken;
-%% token_tag2string(X) -> ?PrettyAndAUDITSelectToken;
-token_tag2string(auditDescriptor) -> ?PrettyAuditToken;
-token_tag2string(auditCapRequest) -> ?PrettyAuditCapToken;
-token_tag2string(auditCapReply) -> ?PrettyAuditCapToken;
-token_tag2string(auditValueRequest) -> ?PrettyAuditValueToken;
-token_tag2string(auditValueReply) -> ?PrettyAuditValueToken;
-%% token_tag2string(X) -> ?PrettyAuthToken;
-token_tag2string(both) -> ?PrettyBothToken;
-token_tag2string(bothway) -> ?PrettyBothwayToken;
-token_tag2string(brief) -> ?PrettyBriefToken;
-%% token_tag2string(X) -> ?PrettyBufferToken;
-%% token_tag2string(X) -> ?PrettyCtxToken;
-%% token_tag2string(X) -> ?PrettyContextAuditToken;
-%% token_tag2string(X) -> ?PrettyContextAttrToken;
-%% token_tag2string(X) -> ?PrettyContextListToken;
-token_tag2string(digitMapDescriptor) -> ?PrettyDigitMapToken;
-token_tag2string(digitMapToken) -> ?PrettyDigitMapToken;
-%% token_tag2string(X) -> ?PrettyDirectionToken;
-%% token_tag2string(X) -> ?PrettyDiscardToken;
-%% token_tag2string(X) -> ?PrettyDisconnectedToken;
-%% token_tag2string(X) -> ?PrettyDelayToken;
-token_tag2string(duration) -> ?PrettyDurationToken;
-%% token_tag2string(X) -> ?PrettyEmbedToken;
-token_tag2string(emergencyAudit) -> ?PrettyEmergencyToken;
-%% token_tag2string(X) -> ?PrettyEmergencyOffToken;
-%% token_tag2string(X) -> ?PrettyEmergencyValueToken;
-token_tag2string(errorDescriptor) -> ?PrettyErrorToken;
-token_tag2string(eventBufferDescriptor) -> ?PrettyEventBufferToken;
-token_tag2string(eventBufferToken) -> ?PrettyEventBufferToken;
-token_tag2string(eventsDescriptor) -> ?PrettyEventsToken;
-token_tag2string(eventsToken) -> ?PrettyEventsToken;
-token_tag2string(external) -> ?PrettyExternalToken;
-%% token_tag2string(X) -> ?PrettyFailoverToken;
-%% token_tag2string(X) -> ?PrettyForcedToken;
-%% token_tag2string(X) -> ?PrettyGracefulToken;
-%% token_tag2string(X) -> ?PrettyH221Token;
-%% token_tag2string(X) -> ?PrettyH223Token;
-%% token_tag2string(X) -> ?PrettyH226Token;
-%% token_tag2string(X) -> ?PrettyHandOffToken;
-token_tag2string(iepsCallind) -> ?PrettyIEPSToken;
-%% token_tag2string(X) -> ?PrettyImmAckRequiredToken;
-token_tag2string(inactive) -> ?PrettyInactiveToken;
-token_tag2string(internal) -> ?PrettyInternalToken;
-%% token_tag2string(X) -> ?PrettyIntsigDelayToken;
-token_tag2string(onInterruptByEvent) -> ?PrettyInterruptByEventToken;
-token_tag2string(onInterruptByNewSignalDescr) -> ?PrettyInterruptByNewSignalsDescrToken;
-token_tag2string(isolate) -> ?PrettyIsolateToken;
-token_tag2string(inSvc) -> ?PrettyInSvcToken;
-token_tag2string(iteration) -> ?PrettyIterationToken;
-token_tag2string(keepActive) -> ?PrettyKeepActiveToken;
-token_tag2string(localDescriptor) -> ?PrettyLocalToken;
-token_tag2string(localControlDescriptor) -> ?PrettyLocalControlToken;
-token_tag2string(lockStep) -> ?PrettyLockStepToken;
-token_tag2string(loopBack) -> ?PrettyLoopbackToken;
-token_tag2string(mediaDescriptor) -> ?PrettyMediaToken;
-token_tag2string(mediaToken) -> ?PrettyMediaToken;
-%% token_tag2string(X) -> ?PrettyMegacopToken;
-%% token_tag2string(X) -> ?PrettyMethodToken;
-%% token_tag2string(X) -> ?PrettyMgcIdToken;
-%% token_tag2string(X) -> ?PrettyModeToken;
-token_tag2string(modReq) -> ?PrettyModifyToken;
-token_tag2string(modReply) -> ?PrettyModifyToken;
-token_tag2string(modemDescriptor) -> ?PrettyModemToken;
-token_tag2string(modemToken) -> ?PrettyModemToken;
-token_tag2string(moveReq) -> ?PrettyMoveToken;
-token_tag2string(moveReply) -> ?PrettyMoveToken;
-%% token_tag2string(X) -> ?PrettyMtpToken;
-token_tag2string(muxDescriptor) -> ?PrettyMuxToken;
-token_tag2string(muxToken) -> ?PrettyMuxToken;
-%% token_tag2string(X) -> ?PrettyNeverNotifyToken;
-token_tag2string(notifyReq) -> ?PrettyNotifyToken;
-%% token_tag2string(X) -> ?PrettyNotifyCompletionToken;
-%% token_tag2string(X) -> ?PrettyNotifyImmediateToken;
-%% token_tag2string(X) -> ?PrettyNotifyRegulatedToken;
-%% token_tag2string(X) -> ?PrettyNx64kToken;
-token_tag2string(observedEventsDescriptor) -> ?PrettyObservedEventsToken;
-token_tag2string(observedEventsToken) -> ?PrettyObservedEventsToken;
-token_tag2string(false) -> ?PrettyOffToken;
-token_tag2string(off) -> ?PrettyOffToken;
-token_tag2string(oneway) -> ?PrettyOnewayToken;
-token_tag2string(onewayboth) -> ?PrettyOnewayBothToken;
-token_tag2string(onewayexternal) -> ?PrettyOnewayExternalToken;
-token_tag2string(onOff) -> ?PrettyOnOffToken;
-%% token_tag2string(X) -> ?PrettyOrAUDITselectToken;
-token_tag2string(true) -> ?PrettyOnToken;
-token_tag2string(otherReason) -> ?PrettyOtherReasonToken;
-token_tag2string(outOfSvc) -> ?PrettyOutOfSvcToken;
-token_tag2string(packagesDescriptor) -> ?PrettyPackagesToken;
-token_tag2string(packagesToken) -> ?PrettyPackagesToken;
-%% token_tag2string(X) -> ?PrettyPendingToken;
-token_tag2string(priorityAudit) -> ?PrettyPriorityToken;
-%% token_tag2string(X) -> ?PrettyProfileToken;
-%% token_tag2string(X) -> ?PrettyReasonToken;
-token_tag2string(recvOnly) -> ?PrettyRecvonlyToken;
-%% token_tag2string(X) -> ?PrettyReplyToken;
-token_tag2string(resetEventsDescriptor) -> ?PrettyResetEventsDescriptorToken;
-%% token_tag2string(X) -> ?PrettyRequestIDToken;
-%% token_tag2string(X) -> ?PrettyResponseAckToken;
-%% token_tag2string(X) -> ?PrettyRestartToken;
-token_tag2string(remoteDescriptor) -> ?PrettyRemoteToken;
-%% token_tag2string(X) -> ?PrettyReservedGroupToken;
-%% token_tag2string(X) -> ?PrettyReservedValueToken;
-token_tag2string(sendOnly) -> ?PrettySendonlyToken;
-token_tag2string(sendRecv) -> ?PrettySendrecvToken;
-%% token_tag2string(X) -> ?PrettyServicesToken;
-%% token_tag2string(X) -> ?PrettyServiceStatesToken;
-token_tag2string(serviceChangeReq) -> ?PrettyServiceChangeToken;
-%% token_tag2string(X) -> ?PrettyServiceChangeAddressToken;
-token_tag2string(incomplete) -> ?PrettyServiceChangeIncompleteToken;
-%% token_tag2string(X) -> ?PrettySignalListToken;
-token_tag2string(signalsDescriptor) -> ?PrettySignalsToken;
-token_tag2string(signalsToken) -> ?PrettySignalsToken;
-%% token_tag2string(X) -> ?PrettySignalTypeToken;
-token_tag2string(statisticsDescriptor) -> ?PrettyStatsToken;
-token_tag2string(statsToken) -> ?PrettyStatsToken;
-%% token_tag2string(X) -> ?PrettyStreamToken;
-token_tag2string(subtractReq) -> ?PrettySubtractToken;
-token_tag2string(subtractReply) -> ?PrettySubtractToken;
-%% token_tag2string(X) -> ?PrettySynchISDNToken;
-%% token_tag2string(X) -> ?PrettyTerminationStateToken;
-token_tag2string(test) -> ?PrettyTestToken;
-token_tag2string(timeOut) -> ?PrettyTimeOutToken;
-token_tag2string(onTimeOut) -> ?PrettyTimeOutToken;
-token_tag2string(topologyAudit) -> ?PrettyTopologyToken;
-%% token_tag2string(X) -> ?PrettyTransToken;
-%% token_tag2string(X) -> ?PrettyV18Token;
-%% token_tag2string(X) -> ?PrettyV22Token;
-%% token_tag2string(X) -> ?PrettyV22bisToken;
-%% token_tag2string(X) -> ?PrettyV32Token;
-%% token_tag2string(X) -> ?PrettyV32bisToken;
-%% token_tag2string(X) -> ?PrettyV34Token;
-%% token_tag2string(X) -> ?PrettyV76Token;
-%% token_tag2string(X) -> ?PrettyV90Token;
-%% token_tag2string(X) -> ?PrettyV91Token;
-%% token_tag2string(X) -> ?PrettyVersionToken;
-token_tag2string(_) -> [].
-
-
-%%----------------------------------------------------------------------
-%% Define various macros used by the actual generator code
-%%----------------------------------------------------------------------
-
--define(EQUAL, [?SpToken, ?EqualToken, ?SpToken]).
--define(COLON, [?ColonToken]).
--define(LBRKT, [?SpToken, ?LbrktToken, ?SpToken]).
--define(RBRKT, [?SpToken, ?RbrktToken, ?SpToken]).
--define(LSBRKT, [?SpToken, ?LsbrktToken, ?SpToken]).
--define(RSBRKT, [?SpToken, ?RsbrktToken, ?SpToken]).
--define(COMMA, [?CommaToken, ?SpToken]).
--define(DOT, [?DotToken]).
--define(SLASH, [?SlashToken]).
--define(DQUOTE, [?DoubleQuoteToken]).
--define(SP, [?SpToken]).
--define(HTAB, [?HtabToken]).
--define(CR, [?CrToken]).
--define(LF, [?LfToken]).
--define(LWSP, []).
--define(EOL, ?LF).
--define(WSP, ?SP).
--define(SEP, ?WSP).
-
--define(INIT_INDENT, []).
--define(INC_INDENT(State), [?HtabToken | State]).
--define(INDENT(State), [?LfToken | State]).
--define(LBRKT_INDENT(State), [?SpToken, ?LbrktToken, ?INDENT(?INC_INDENT(State))]).
--define(RBRKT_INDENT(State), [?INDENT(State), ?RbrktToken]).
--define(LSBRKT_INDENT(State), [?SpToken, ?LsbrktToken, ?INDENT(?INC_INDENT(State))]).
--define(RSBRKT_INDENT(State), [?INDENT(State), ?RsbrktToken]).
--define(COMMA_INDENT(State), [?CommaToken, ?INDENT(State)]).
--define(SEP_INDENT(_State), [?LfToken]).
-
-%%----------------------------------------------------------------------
-%% Define token macros
-%%----------------------------------------------------------------------
-
--define(AddToken , ?PrettyAddToken).
--define(AndAUDITSelectToken , ?PrettytAndAUDITSelectToken).
--define(AuditToken , ?PrettyAuditToken).
--define(AuditCapToken , ?PrettyAuditCapToken).
--define(AuditValueToken , ?PrettyAuditValueToken).
--define(AuthToken , ?PrettyAuthToken).
--define(BothToken , ?PrettyBothToken).
--define(BothwayToken , ?PrettyBothwayToken).
--define(BriefToken , ?PrettyBriefToken).
--define(BufferToken , ?PrettyBufferToken).
--define(CtxToken , ?PrettyCtxToken).
--define(ContextAuditToken , ?PrettyContextAuditToken).
--define(ContextAttrToken , ?PrettyContextAttrToken).
--define(ContextListToken , ?PrettyContextListToken).
--define(DigitMapToken , ?PrettyDigitMapToken).
--define(DirectionToken , ?PrettyDirectionToken).
--define(DiscardToken , ?PrettyDiscardToken).
--define(DisconnectedToken , ?PrettyDisconnectedToken).
--define(DelayToken , ?PrettyDelayToken).
--define(DeleteToken , ?PrettyDeleteToken).
--define(DurationToken , ?PrettyDurationToken).
--define(EmbedToken , ?PrettyEmbedToken).
--define(EmergencyToken , ?PrettyEmergencyToken).
--define(EmergencyOffToken , ?PrettyEmergencyOffToken).
--define(EmergencyValueToken , ?PrettyEmergencyValueToken).
--define(ErrorToken , ?PrettyErrorToken).
--define(EventBufferToken , ?PrettyEventBufferToken).
--define(EventsToken , ?PrettyEventsToken).
--define(ExternalToken , ?PrettyExternalToken).
--define(FailoverToken , ?PrettyFailoverToken).
--define(ForcedToken , ?PrettyForcedToken).
--define(GracefulToken , ?PrettyGracefulToken).
--define(H221Token , ?PrettyH221Token).
--define(H223Token , ?PrettyH223Token).
--define(H226Token , ?PrettyH226Token).
--define(HandOffToken , ?PrettyHandOffToken).
--define(IEPSToken , ?PrettyIEPSToken).
--define(ImmAckRequiredToken , ?PrettyImmAckRequiredToken).
--define(InactiveToken , ?PrettyInactiveToken).
--define(InternalToken , ?PrettyInternalToken).
--define(IntsigDelayToken , ?PrettyIntsigDelayToken).
--define(IsolateToken , ?PrettyIsolateToken).
--define(InSvcToken , ?PrettyInSvcToken).
--define(InterruptByEventToken , ?PrettyInterruptByEventToken).
--define(InterruptByNewSignalsDescrToken, ?PrettyInterruptByNewSignalsDescrToken).
--define(IterationToken , ?PrettyIterationToken).
--define(KeepActiveToken , ?PrettyKeepActiveToken).
--define(LocalToken , ?PrettyLocalToken).
--define(LocalControlToken , ?PrettyLocalControlToken).
--define(LockStepToken , ?PrettyLockStepToken).
--define(LoopbackToken , ?PrettyLoopbackToken).
--define(MediaToken , ?PrettyMediaToken).
--define(MegacopToken , ?PrettyMegacopToken).
-%% -define(MessageSegmentToken , ?PrettyMessageSegmentToken).
--define(MethodToken , ?PrettyMethodToken).
--define(MgcIdToken , ?PrettyMgcIdToken).
--define(ModeToken , ?PrettyModeToken).
--define(ModifyToken , ?PrettyModifyToken).
--define(ModemToken , ?PrettyModemToken).
--define(MoveToken , ?PrettyMoveToken).
--define(MtpToken , ?PrettyMtpToken).
--define(MuxToken , ?PrettyMuxToken).
--define(NeverNotifyToken , ?PrettyNeverNotifyToken).
--define(NotifyToken , ?PrettyNotifyToken).
--define(NotifyCompletionToken , ?PrettyNotifyCompletionToken).
--define(NotifyImmediateToken , ?PrettyNotifyImmediateToken).
--define(NotifyRegulatedToken , ?PrettyNotifyRegulatedToken).
--define(Nx64kToken , ?PrettyNx64kToken).
--define(ObservedEventsToken , ?PrettyObservedEventsToken).
--define(OffToken , ?PrettyOffToken).
--define(OnewayToken , ?PrettyOnewayToken).
--define(OnewayBothToken , ?PrettyOnewayBothToken).
--define(OnewayExternalToken , ?PrettyOnewayExternalToken).
--define(OnOffToken , ?PrettyOnOffToken).
--define(OnToken , ?PrettyOnToken).
--define(OrAUDITselectToken , ?PrettyOrAUDITselectToken).
--define(OtherReasonToken , ?PrettyOtherReasonToken).
--define(OutOfSvcToken , ?PrettyOutOfSvcToken).
--define(PackagesToken , ?PrettyPackagesToken).
--define(PendingToken , ?PrettyPendingToken).
--define(PriorityToken , ?PrettyPriorityToken).
--define(ProfileToken , ?PrettyProfileToken).
--define(ReasonToken , ?PrettyReasonToken).
--define(RecvonlyToken , ?PrettyRecvonlyToken).
--define(ReplyToken , ?PrettyReplyToken).
--define(ResetEventsDescriptorToken , ?PrettyResetEventsDescriptorToken).
--define(ResponseAckToken , ?PrettyResponseAckToken).
--define(RestartToken , ?PrettyRestartToken).
--define(RemoteToken , ?PrettyRemoteToken).
--define(RequestIDToken , ?PrettyRequestIDToken).
--define(ReservedGroupToken , ?PrettyReservedGroupToken).
--define(ReservedValueToken , ?PrettyReservedValueToken).
-%% -define(SegmentationCompleteToken , ?PrettySegmentationCompleteToken).
--define(SendonlyToken , ?PrettySendonlyToken).
--define(SendrecvToken , ?PrettySendrecvToken).
--define(ServicesToken , ?PrettyServicesToken).
--define(ServiceStatesToken , ?PrettyServiceStatesToken).
--define(ServiceChangeToken , ?PrettyServiceChangeToken).
--define(ServiceChangeAddressToken , ?PrettyServiceChangeAddressToken).
--define(ServiceChangeIncompleteToken , ?PrettyServiceChangeIncompleteToken).
--define(SignalListToken , ?PrettySignalListToken).
--define(SignalsToken , ?PrettySignalsToken).
--define(SignalTypeToken , ?PrettySignalTypeToken).
--define(StatsToken , ?PrettyStatsToken).
--define(StreamToken , ?PrettyStreamToken).
--define(SubtractToken , ?PrettySubtractToken).
--define(SynchISDNToken , ?PrettySynchISDNToken).
--define(TerminationStateToken , ?PrettyTerminationStateToken).
--define(TestToken , ?PrettyTestToken).
--define(TimeOutToken , ?PrettyTimeOutToken).
--define(TopologyToken , ?PrettyTopologyToken).
--define(TransToken , ?PrettyTransToken).
--define(V18Token , ?PrettyV18Token).
--define(V22Token , ?PrettyV22Token).
--define(V22bisToken , ?PrettyV22bisToken).
--define(V32Token , ?PrettyV32Token).
--define(V32bisToken , ?PrettyV32bisToken).
--define(V34Token , ?PrettyV34Token).
--define(V76Token , ?PrettyV76Token).
--define(V90Token , ?PrettyV90Token).
--define(V91Token , ?PrettyV91Token).
--define(VersionToken , ?PrettyVersionToken).
-
-%%----------------------------------------------------------------------
-%% Include the generator code
-%%----------------------------------------------------------------------
-
--include("megaco_text_gen_prev3c.hrl").
-
-%% start() ->
-%% Fun = fun() ->
-%% Val = lists:flatten([$", $e, $r, $i, $c, $s, $s, $o, $n, $"]),
-%% %% Val = [$e, $r, $i, $c, $s, $s, $o, $n],
-%% PP = {'PropertyParm',"ipdc/realm",[Val],asn1_NOVALUE},
-%% enc_PropertyParm(PP, [])
-%% end,
-%% test(Fun).
-
-%% start() ->
-%% Fun = fun() ->
-%% PP = {'PropertyParm',"ipdc/realm",["ericsson"],asn1_NOVALUE},
-%% enc_PropertyParm(PP, [])
-%% end,
-%% test(Fun).
-
-test(Fun) when is_function(Fun) ->
- Fun().
-
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder_v1.erl b/lib/megaco/src/text/megaco_pretty_text_encoder_v1.erl
index 03ffc31b1e..476300a463 100644
--- a/lib/megaco/src/text/megaco_pretty_text_encoder_v1.erl
+++ b/lib/megaco/src/text/megaco_pretty_text_encoder_v1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2020. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@
-include_lib("megaco/include/megaco.hrl").
-include_lib("megaco/include/megaco_message_v1.hrl").
--define(encoder_version_pre_prev3c,true).
+-define(encoder_pre_version_3,true). % version 1 or 2
-include("megaco_text_tokens.hrl").
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder_v2.erl b/lib/megaco/src/text/megaco_pretty_text_encoder_v2.erl
index fb260ac31b..abeb58da70 100644
--- a/lib/megaco/src/text/megaco_pretty_text_encoder_v2.erl
+++ b/lib/megaco/src/text/megaco_pretty_text_encoder_v2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2020. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -38,7 +38,7 @@
-include_lib("megaco/include/megaco.hrl").
-include_lib("megaco/include/megaco_message_v2.hrl").
--define(encoder_version_pre_prev3c,true).
+-define(encoder_pre_version_3,true). % version 1 or 2
-include("megaco_text_tokens.hrl").
diff --git a/lib/megaco/src/text/megaco_text_gen_prev3a.hrl b/lib/megaco/src/text/megaco_text_gen_prev3a.hrl
deleted file mode 100644
index 4f3c83c6c5..0000000000
--- a/lib/megaco/src/text/megaco_text_gen_prev3a.hrl
+++ /dev/null
@@ -1,2943 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2019. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Encode V2 Megaco/H.248 text messages from internal form
-%% The following was changed:
-%% - MuxType (Nx64kToken)
-%% - auditItem (terminationAudit)
-%% - serviceChangeParm (auditItem)
-%%
-%% The following was added:
-%% - All IndAud stuff
-%%----------------------------------------------------------------------
-
-%% -define(d(F,A), io:format("~w:" ++ F ++ "~n", [?MODULE|A])).
-
--define(META_ENC(Type, Item), Item) .
-%% -define(META_ENC(Type, Item), megaco_meta_package:encode(text, Type, Item)).
-%% -define(META_DEC(Type, Item), megaco_meta_package:decode(text, Type, Item)).
-
-enc_MegacoMessage(Val) ->
- State = ?INIT_INDENT,
- enc_MegacoMessage(Val, State).
-
-enc_MegacoMessage(#'MegacoMessage'{authHeader = asn1_NOVALUE,
- mess = Mess}, State) ->
- [
- ?LWSP,
- enc_Message(Mess, State)
- ];
-enc_MegacoMessage(#'MegacoMessage'{authHeader = Auth,
- mess = Mess}, State) ->
- [
- ?LWSP,
- enc_AuthenticationHeader(Auth, State),
- enc_Message(Mess, State)
- ].
-
-%% Note that encoding the transaction this way
-%% make the message look a bit strange.
-enc_Transaction(Val) ->
- State = ?INIT_INDENT,
- enc_Transaction(Val, State).
-
-%% Note that encoding the action request's this way
-%% make the message look a bit strange.
-enc_ActionRequests(Val) ->
- State = ?INIT_INDENT,
- enc_TransactionRequest_actions(Val, State).
-
-%% Note that encoding the action request this way
-%% make the message look a bit strange.
-enc_ActionRequest(Val) ->
- State = ?INIT_INDENT,
- enc_ActionRequest(Val, State).
-
-enc_CommandRequest(Val) ->
- State = ?INIT_INDENT,
- enc_CommandRequest(Val, State).
-
-enc_ActionReply(Val) ->
- State = ?INIT_INDENT,
- enc_ActionReply(Val, State).
-
-enc_AuthenticationHeader(asn1_NOVALUE, _State) ->
- [];
-enc_AuthenticationHeader(Val, State)
- when is_record(Val, 'AuthenticationHeader') ->
- [
- ?AuthToken,
- ?EQUAL,
- enc_SecurityParmIndex(Val#'AuthenticationHeader'.secParmIndex, State),
- ?COLON,
- enc_SequenceNum(Val#'AuthenticationHeader'.seqNum, State),
- ?COLON,
- enc_AuthData(Val#'AuthenticationHeader'.ad, State),
- ?SEP_INDENT(State)
- ].
-
-enc_SecurityParmIndex({'SecurityParmIndex',Val}, State) ->
- enc_SecurityParmIndex(Val, State);
-enc_SecurityParmIndex(Val, State) ->
- [
- "0x",
- enc_HEXDIG(Val, State, 8, 8)
- ].
-
-enc_SequenceNum({'SequenceNum',Val}, State) ->
- enc_SequenceNum(Val, State);
-enc_SequenceNum(Val, State) ->
- [
- "0x",
- enc_HEXDIG(Val, State, 8, 8)
- ].
-
-enc_AuthData({'AuthData',Val}, State) ->
- enc_AuthData(Val, State);
-enc_AuthData(Val, State) ->
- [
- "0x",
- enc_HEXDIG(Val, State, 24, 64) %% OTP-4710
- ].
-
-enc_Message(Val, State)
- when is_record(Val, 'Message') ->
- [
- ?MegacopToken,
- ?SLASH,
- enc_version(Val#'Message'.version, State),
- ?SEP,
- enc_MId(Val#'Message'.mId, State),
- ?SEP_INDENT(State),
- enc_Message_messageBody(Val#'Message'.messageBody, State)
- ].
-
-enc_version(Val, State) when is_integer(Val) andalso (Val >= 0) ->
- enc_DIGIT(Val, State, 0, 99).
-
-enc_Message_messageBody({'Message_messageBody',Val}, State) ->
- enc_Message_messageBody(Val, State);
-enc_Message_messageBody({Tag, Val}, State) ->
- case Tag of
- messageError ->
- enc_ErrorDescriptor(Val, State);
- transactions ->
- enc_Message_messageBody_transactions(Val, State);
- _ ->
- error({invalid_messageBody_tag, Tag})
- end.
-
-enc_Message_messageBody_transactions({'Message_messageBody_transactions',Val},
- State) ->
- enc_Message_messageBody_transactions(Val, State);
-enc_Message_messageBody_transactions(Val, State)
- when is_list(Val) andalso (Val =/= []) ->
- [enc_Transaction(T, State) || T <- Val].
-
-enc_MId({'MId',Val}, State) ->
- enc_MId(Val, State);
-enc_MId({Tag, Val}, State) ->
- case Tag of
- ip4Address ->
- enc_IP4Address(Val, State);
- ip6Address ->
- enc_IP6Address(Val, State);
- domainName ->
- enc_DomainName(Val, State);
- deviceName ->
- enc_PathName(Val, State);
- mtpAddress ->
- enc_mtpAddress(Val, State);
- _ ->
- error({invalid_MId_tag, Tag})
- end.
-
-enc_mtpAddress(Val, State) ->
- [
- ?MtpToken,
- ?LBRKT,
- enc_OCTET_STRING(Val, State, 2, 4),
- ?RBRKT
- ].
-
-enc_DomainName(#'DomainName'{portNumber = asn1_NOVALUE,
- name = Name}, State) ->
- [
- $<,
- %% BUGBUG: (ALPHA / DIGIT) *63(ALPHA / DIGIT / "-" / ".")
- enc_STRING(Name, State, 1, 64),
- $>
- ];
-enc_DomainName(#'DomainName'{portNumber = PortNumber,
- name = Name}, State) ->
- [
- $<,
- %% BUGBUG: (ALPHA / DIGIT) *63(ALPHA / DIGIT / "-" / ".")
- enc_STRING(Name, State, 1, 64),
- $>,
- $:,
- enc_portNumber(PortNumber, State)
- ].
-
-enc_IP4Address(#'IP4Address'{portNumber = asn1_NOVALUE,
- address = [A1, A2, A3, A4]}, State) ->
- [
- $[,
- enc_V4hex(A1, State),
- ?DOT,
- enc_V4hex(A2, State),
- ?DOT,
- enc_V4hex(A3, State),
- ?DOT,
- enc_V4hex(A4, State),
- $]
- ];
-enc_IP4Address(#'IP4Address'{portNumber = PortNumber,
- address = [A1, A2, A3, A4]}, State) ->
- [
- $[,
- enc_V4hex(A1, State),
- ?DOT,
- enc_V4hex(A2, State),
- ?DOT,
- enc_V4hex(A3, State),
- ?DOT,
- enc_V4hex(A4, State),
- $],
- $:,
- enc_portNumber(PortNumber, State)
- ].
-
-enc_V4hex(Val, State) ->
- enc_DIGIT(Val, State, 0, 255).
-
-enc_IP6Address(#'IP6Address'{portNumber = asn1_NOVALUE,
- address = Addr}, State)
- when is_list(Addr) andalso (length(Addr) =:= 16) ->
- [
- $[,
- enc_IP6Address_address(Addr, State),
- $]
- ];
-enc_IP6Address(#'IP6Address'{portNumber = PortNumber,
- address = Addr}, State)
- when is_list(Addr) andalso (length(Addr) =:= 16) ->
- [
- $[,
- enc_IP6Address_address(Addr, State),
- $],
- $:,
- enc_portNumber(PortNumber, State)
- ].
-
-enc_IP6Address_address([0, 0|Addr], State) ->
- enc_IP6Address_address2(Addr, 1, false, true, State);
-enc_IP6Address_address(Addr, State) ->
- enc_IP6Address_address2(Addr, 0, false, false, State).
-
-enc_IP6Address_address2([0,0], 0, _Padding, _First, _State) ->
- [$0];
-enc_IP6Address_address2([0,0], PadN, false, true, _State) when PadN > 0 ->
- [$:, $:]; % Padding from the beginning (all zero's)
-enc_IP6Address_address2([0,0], PadN, false, false, _State) when PadN > 0 ->
- [$:]; % Padding in the middle or end
-enc_IP6Address_address2([0,0], _, true, _First, _State) ->
- [$0];
-enc_IP6Address_address2([N1,N2], 0, _Padding, _First, State) ->
- [enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], 1, _Padding, _First, State) ->
- [$0, $:, enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], PadN, false, true, State) when PadN > 1 ->
- [$:, $:, enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], PadN, false, false, State) when PadN > 1 ->
- [$:, enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], _PadN, true, _First, State) ->
- [enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([0, 0|Ns], PadN, false, First, State) ->
- enc_IP6Address_address2(Ns, PadN+1, false, First, State);
-enc_IP6Address_address2([0, 0|Ns], _PadN, true, _First, State) ->
- [
- $0,
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], 0, Padded, _First, State) ->
- [
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, Padded, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], 1, Padded, _First, State) ->
- [
- $0,
- $:,
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, Padded, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], PadN, false, true, State) when PadN > 1 ->
- %% Padding from the beginning
- [
- $:,
- $:,
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], PadN, false, false, State)
- when PadN > 1 ->
- [
- $:, %% The other ':' has already added
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], _PadN, true, _First, State) ->
- [
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ].
-
-
-enc_hex4([0,0], _State) ->
- $0;
-enc_hex4([0,N], _State) ->
- hex(N);
-enc_hex4([N1, N2], _State) when N2 =< 15 ->
- [hex(N1), $0, hex(N2)];
-enc_hex4([N1, N2], _State) ->
- [hex(N1), hex(N2)].
-
-enc_PathName({'PathName',Val}, State) ->
- enc_PathName(Val, State);
-enc_PathName(Val, State) ->
- %% BUGBUG: ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
- %% BUGBUG: ["@" pathDomainName ]
- enc_STRING(Val, State, 1, 64).
-
-enc_Transaction(Bin, _State) when is_binary(Bin) ->
- [Bin]; %% Already encoded...
-enc_Transaction({'Transaction',Val}, State) ->
- enc_Transaction(Val, State);
-enc_Transaction({Tag, Val}, State) ->
- case Tag of
- transactionRequest ->
- enc_TransactionRequest(Val, State);
- transactionPending ->
- enc_TransactionPending(Val, State);
- transactionReply ->
- enc_TransactionReply(Val, State);
- transactionResponseAck ->
- enc_TransactionResponseAck(Val, State);
- _ ->
- error({invalid_Transaction_tag, Tag})
- end.
-
-enc_TransactionResponseAck([Mand], State) ->
- [
- ?ResponseAckToken,
- ?LBRKT_INDENT(State),
- [enc_TransactionAck(Mand, State)],
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionResponseAck([Mand | Opt], State) ->
- [
- ?ResponseAckToken,
- ?LBRKT_INDENT(State),
- [enc_TransactionAck(Mand, State) |
- [[?COMMA_INDENT(State), enc_TransactionAck(Val, State)] || Val <- Opt]],
- ?RBRKT_INDENT(State)
- ].
-
-enc_TransactionAck(Val, State)
- when is_record(Val, 'TransactionAck') ->
- [
- enc_TransactionId(Val#'TransactionAck'.firstAck, ?INC_INDENT(State)),
- case Val#'TransactionAck'.lastAck of
- asn1_NOVALUE ->
- [];
- LastAck ->
- ["-",enc_TransactionId(LastAck, State)]
- end
- ].
-
-enc_TransactionId({'TransactionId',Val}, State) ->
- enc_TransactionId(Val, State);
-enc_TransactionId(Val, State) ->
- enc_UINT32(Val, State).
-
-enc_TransactionRequest(#'TransactionRequest'{transactionId = Tid,
- actions = Acts}, State) ->
- [
- ?TransToken,
- ?EQUAL,
- enc_TransactionId(Tid, State),
- ?LBRKT_INDENT(State),
- enc_TransactionRequest_actions(Acts, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionRequest(Bin, _State) when is_binary(Bin) ->
- [Bin].
-
-enc_TransactionRequest_actions(Bin, _State) when is_binary(Bin) ->
- [Bin]; %% Already encoded...
-enc_TransactionRequest_actions({'TransactionRequest_actions',Val}, State) ->
- enc_TransactionRequest_actions(Val, State);
-enc_TransactionRequest_actions([Mand], State) ->
- [enc_ActionRequest(Mand, State)];
-enc_TransactionRequest_actions([Mand | Opt], State) ->
- [enc_ActionRequest(Mand, State) |
- [[?COMMA_INDENT(State), enc_ActionRequest(Val, State)] || Val <- Opt]].
-
-enc_TransactionPending(#'TransactionPending'{transactionId = Tid}, State) ->
- [?PendingToken,
- ?EQUAL,
- enc_TransactionId(Tid, State),
- ?LBRKT_INDENT(State),
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionPending(Bin, _State) when is_binary(Bin) ->
- [Bin].
-
-enc_TransactionReply(#'TransactionReply'{transactionId = Tid,
- immAckRequired = Req,
- transactionResult = Res,
- %% These fields are actually not
- %% supported in this implementation,
- %% but because the messenger module
- %% cannot see any diff between the
- %% various v3 implementations...
- segmentNumber = asn1_NOVALUE,
- segmentationComplete = asn1_NOVALUE},
- State) ->
- [
- ?ReplyToken,
- ?EQUAL,
- enc_TransactionId(Tid, State),
- ?LBRKT_INDENT(State),
- enc_immAckRequired(Req, State),
- enc_TransactionReply_transactionResult(Res, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionReply(Bin, _State) when is_binary(Bin) ->
- [Bin].
-
-enc_immAckRequired(Val, _State) ->
- case Val of
- asn1_NOVALUE ->
- [];
- 'NULL' ->
- [?ImmAckRequiredToken, ?COMMA_INDENT(?INC_INDENT(_State))]
- end.
-
-enc_TransactionReply_transactionResult({'TransactionReply_transactionResult',
- Val}, State) ->
- enc_TransactionReply_transactionResult(Val, State);
-enc_TransactionReply_transactionResult({Tag, Val}, State) ->
- case Tag of
- transactionError ->
- enc_ErrorDescriptor(Val, State);
- actionReplies ->
- enc_TransactionReply_transactionResult_actionReplies(Val, State);
- _ ->
- error({invalid_TransactionReply_transactionResult_tag, Tag})
- end.
-
-enc_TransactionReply_transactionResult_actionReplies({'TransactionReply_transactionResult_actionReplies',Val}, State) ->
- enc_TransactionReply_transactionResult_actionReplies(Val, State);
-enc_TransactionReply_transactionResult_actionReplies([Mand], State) ->
- [enc_ActionReply(Mand, State)];
-enc_TransactionReply_transactionResult_actionReplies([Mand | Opt], State) ->
- [enc_ActionReply(Mand, State),
- [[?COMMA_INDENT(State), enc_ActionReply(Val, State)] || Val <- Opt]].
-
-enc_ErrorDescriptor(#'ErrorDescriptor'{errorText = asn1_NOVALUE,
- errorCode = Code}, State) ->
- [
- ?ErrorToken,
- ?EQUAL,
- enc_ErrorCode(Code, State),
- ?LBRKT,
- ?RBRKT
- ];
-enc_ErrorDescriptor(#'ErrorDescriptor'{errorText = Text,
- errorCode = Code}, State) ->
- [
- ?ErrorToken,
- ?EQUAL,
- enc_ErrorCode(Code, State),
- ?LBRKT,
- enc_ErrorText(Text, State),
- ?RBRKT
- ].
-
-enc_ErrorCode({'ErrorCode',Val}, State)->
- enc_ErrorCode(Val, State);
-enc_ErrorCode(Val, State) ->
- enc_DIGIT(Val, State, 0, 999).
-
-enc_ErrorText({'ErrorText',Val}, State) ->
- enc_ErrorText(Val, State);
-enc_ErrorText(Val, State) ->
- enc_QUOTED_STRING(Val, State).
-
-enc_ContextID({'ContextID',Val}, State) ->
- enc_ContextID(Val, State);
-enc_ContextID(Val, State) ->
- case Val of
- ?megaco_all_context_id -> $*;
- ?megaco_null_context_id -> $-;
- ?megaco_choose_context_id -> $$;
- Int when is_integer(Int) -> enc_UINT32(Int, State)
- end.
-
-enc_ActionRequest(Bin, _State) when is_binary(Bin) ->
- [Bin]; %% Already encoded...
-enc_ActionRequest(#'ActionRequest'{contextId = CID,
- contextRequest = asn1_NOVALUE,
- contextAttrAuditReq = asn1_NOVALUE,
- commandRequests = CmdReqs}, State) ->
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(CID, State),
- ?LBRKT_INDENT(State),
- enc_list([{CmdReqs, fun enc_CommandRequest/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_ActionRequest(#'ActionRequest'{contextId = CID,
- contextRequest = CtxReq,
- contextAttrAuditReq = asn1_NOVALUE,
- commandRequests = CmdReqs}, State) ->
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(CID, State),
- ?LBRKT_INDENT(State),
- enc_list([{[CtxReq], fun enc_ContextRequest/2},
- {CmdReqs, fun enc_CommandRequest/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_ActionRequest(#'ActionRequest'{contextId = CID,
- contextRequest = CtxReq,
- contextAttrAuditReq = CtxAAR,
- commandRequests = CmdReqs}, State) ->
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(CID, State),
- ?LBRKT_INDENT(State),
- enc_list([{[CtxReq], fun enc_ContextRequest/2},
- {[CtxAAR], fun enc_ContextAttrAuditRequest/2},
- {CmdReqs, fun enc_CommandRequest/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-%% OTP-5085
-enc_ActionReply(#'ActionReply'{contextId = Id,
- errorDescriptor = ED,
- contextReply = CtxRep,
- commandReply = CmdRep},
- State) ->
-% d("enc_ActionReply -> entry with"
-% "~n Id: ~p"
-% "~n ED: ~p"
-% "~n CtxRep: ~p"
-% "~n CmdRep: ~p", [Id, ED, CtxRep, CmdRep]),
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(Id, State),
- ?LBRKT_INDENT(State),
- do_enc_ActionReply(ED, CtxRep, CmdRep, State),
- ?RBRKT_INDENT(State)
- ].
-
-do_enc_ActionReply(asn1_NOVALUE, CtxRep, [], State)
- when CtxRep =/= asn1_NOVALUE ->
-% d("do_enc_ActionReply -> entry with"
-% "~n CtxRep: ~p", [CtxRep]),
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State))
- ];
-do_enc_ActionReply(asn1_NOVALUE, CtxRep, CmdRep, State)
- when CtxRep =/= asn1_NOVALUE, CmdRep =/= [] ->
-% d("do_enc_ActionReply -> entry with"
-% "~n CtxRep: ~p"
-% "~n CmdRep: ~p", [CtxRep, CmdRep]),
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_list([{CmdRep, fun enc_CommandReply/2}],
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(asn1_NOVALUE, asn1_NOVALUE, CmdRep, State)
- when CmdRep =/= [] ->
-% d("do_enc_ActionReply -> entry with"
-% "~n CmdRep: ~p", [CmdRep]),
- [
- enc_list([{CmdRep, fun enc_CommandReply/2}],
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, CtxRep, [], State)
- when (ED =/= asn1_NOVALUE) andalso (CtxRep =/= asn1_NOVALUE) ->
-% d("do_enc_ActionReply -> entry with"
-% "~n ED: ~p"
-% "~n CtxRep: ~p", [ED, CtxRep]),
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_list([{[ED], fun enc_ErrorDescriptor/2}], % Indention cosmetics
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, asn1_NOVALUE, CmdRep, State)
- when (ED =/= asn1_NOVALUE) andalso (CmdRep =/= []) ->
-% d("do_enc_ActionReply -> entry with"
-% "~n ED: ~p"
-% "~n CmdRep: ~p", [ED, CmdRep]),
- [
- enc_list([{CmdRep, fun enc_CommandReply/2},
- {[ED], fun enc_ErrorDescriptor/2}], % Indention cosmetics
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, CtxRep, CmdRep, State)
- when (ED =/= asn1_NOVALUE) andalso
- (CtxRep =/= asn1_NOVALUE) andalso
- (CmdRep =/= []) ->
-% d("do_enc_ActionReply -> entry with"
-% "~n ED: ~p"
-% "~n CtxRep: ~p"
-% "~n CmdRep: ~p", [ED, CtxRep, CmdRep]),
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_list([{CmdRep, fun enc_CommandReply/2},
- {[ED], fun enc_ErrorDescriptor/2}], % Indention cosmetics
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, asn1_NOVALUE, [], State)
- when ED =/= asn1_NOVALUE ->
-% d("do_enc_ActionReply -> entry with"
-% "~n ED: ~p", [ED]),
- [
- enc_ErrorDescriptor(ED, ?INC_INDENT(State))
- ].
-
-
-enc_ContextRequest_priority(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_priority(Val, _State) ->
- {[Val], fun(X,S) -> [?PriorityToken,?EQUAL,enc_UINT16(X, S)] end}.
-
-enc_ContextRequest_emergency(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_emergency(true, _State) ->
- {[?EmergencyToken], fun(Elem, _) -> Elem end};
-enc_ContextRequest_emergency(false, _State) ->
- {[?EmergencyOffToken], fun(Elem, _) -> Elem end}.
-
-enc_ContextRequest_topologyReq(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_topologyReq({'ContextRequest_topologyReq',
- asn1_NOVALUE}, _State) ->
- {[], dummy};
-enc_ContextRequest_topologyReq({'ContextRequest_topologyReq',
- List}, _State) ->
- {List, fun enc_TopologyRequest/2};
-enc_ContextRequest_topologyReq(List, _State) ->
- {[List], fun enc_TopologyRequest/2}.
-
-enc_ContextRequest_iepsCallind(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_iepsCallind(false, _State) ->
- {[], dummy};
-% enc_ContextRequest_iepsCallind(false, _State) ->
-% {[?IEPS_XXXX_Token], fun(Elem, _) -> Elem end};
-enc_ContextRequest_iepsCallind(true, _State) ->
- {[?IEPSToken], fun(Elem, _) -> Elem end}.
-
-enc_ContextRequest_contextProp(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_contextProp([], _State) ->
- {[], dummy};
-enc_ContextRequest_contextProp([PP], _State) ->
- {[PP], fun enc_PropertyParm/2};
-enc_ContextRequest_contextProp(PPs, _State) when is_list(PPs) ->
- error({at_most_one_contextProp, PPs}).
-
-enc_ContextRequest(asn1_NOVALUE, _State) ->
- [];
-enc_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = asn1_NOVALUE,
- iepsCallind = asn1_NOVALUE,
- contextProp = asn1_NOVALUE}, _State) ->
- [];
-enc_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = [],
- iepsCallind = asn1_NOVALUE,
- contextProp = []}, _State) ->
- [];
-enc_ContextRequest(#'ContextRequest'{priority = Prio,
- emergency = Em,
- topologyReq = TR,
- iepsCallind = Ieps,
- contextProp = CP}, State) ->
- [
- ?ContextAttrToken,
- ?LBRKT_INDENT(State),
- enc_list([enc_ContextRequest_priority(Prio, State),
- enc_ContextRequest_emergency(Em, State),
- enc_ContextRequest_topologyReq(TR, State),
- enc_ContextRequest_iepsCallind(Ieps, State),
- enc_ContextRequest_contextProp(CP, State)],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{topology = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- priority = asn1_NOVALUE,
- iepsCallind = asn1_NOVALUE,
- contextPropAud = asn1_NOVALUE}, _State) ->
- [];
-enc_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{topology = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- priority = asn1_NOVALUE,
- iepsCallind = asn1_NOVALUE,
- contextPropAud = []}, _State) ->
- [];
-enc_ContextAttrAuditRequest(CAAR, State) ->
- [
- ?ContextAuditToken,
- ?LBRKT_INDENT(State),
- enc_IndAudContextAttrDescriptor(CAAR, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudContextAttrDescriptor(
- #'ContextAttrAuditRequest'{topology = Top,
- emergency = Em,
- priority = Prio,
- iepsCallind = Ieps,
- contextPropAud = CPA}, State) ->
- [
- ?ContextAttrToken,
- ?LBRKT_INDENT(State),
- enc_list([{[Top], fun('NULL', _) -> ?TopologyToken end},
- {[Em], fun('NULL', _) -> ?EmergencyToken end},
- {[Prio], fun('NULL', _) -> ?PriorityToken end},
- {[Ieps], fun('NULL', _) -> ?IEPSToken end},
- {CPA, fun enc_IndAudPropertyParm/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_CommandRequest(#'CommandRequest'{optional = asn1_NOVALUE,
- wildcardReturn = asn1_NOVALUE,
- command = Cmd}, State) ->
- [
- enc_Command(Cmd, State)
- ];
-enc_CommandRequest(#'CommandRequest'{optional = 'NULL',
- wildcardReturn = asn1_NOVALUE,
- command = Cmd}, State) ->
- [
- "O-",
- enc_Command(Cmd, State)
- ];
-enc_CommandRequest(#'CommandRequest'{optional = asn1_NOVALUE,
- wildcardReturn = 'NULL',
- command = Cmd}, State) ->
- [
- "W-",
- enc_Command(Cmd, State)
- ];
-enc_CommandRequest(#'CommandRequest'{optional = 'NULL',
- wildcardReturn = 'NULL',
- command = Cmd}, State) ->
- [
- "O-",
- "W-",
- enc_Command(Cmd, State)
- ].
-
-enc_Command({'Command',Val}, State) ->
- enc_Command(Val, State);
-enc_Command({Tag, Val}, State) ->
-% d("enc_Command -> entry with"
-% "~n Tag: ~p"
-% "~n Val: ~p", [Tag, Val]),
- case Tag of
- addReq ->
- [?AddToken, enc_AmmRequest(Val, State)];
- moveReq ->
- [?MoveToken, enc_AmmRequest(Val, State)];
- modReq ->
- [?ModifyToken, enc_AmmRequest(Val, State)];
- subtractReq ->
- [?SubtractToken, enc_SubtractRequest(Val, State)];
- auditCapRequest ->
- [?AuditCapToken, enc_AuditRequest(Val, State)];
- auditValueRequest ->
- [?AuditValueToken, enc_AuditRequest(Val, State)];
- notifyReq ->
- [?NotifyToken, enc_NotifyRequest(Val, State)];
- serviceChangeReq ->
- [?ServiceChangeToken, enc_ServiceChangeRequest(Val, State)];
- _ ->
- error({invalid_Command_tag, Tag})
- end.
-
-enc_CommandReply({'CommandReply',Val}, State) ->
- enc_CommandReply(Val, State);
-enc_CommandReply({Tag, Val}, State) ->
-% d("enc_CommandReply -> entry with"
-% "~n Tag: ~p"
-% "~n Val: ~p", [Tag, Val]),
- case Tag of
- addReply ->
- [?AddToken, enc_AmmsReply(Val, State)];
- moveReply ->
- [?MoveToken, enc_AmmsReply(Val, State)];
- modReply ->
- [?ModifyToken, enc_AmmsReply(Val, State)];
- subtractReply ->
- [?SubtractToken, enc_AmmsReply(Val, State)];
- auditCapReply ->
- [?AuditCapToken, enc_AuditReply(Val, State)];
- auditValueReply ->
- [?AuditValueToken, enc_AuditReply(Val, State)];
- notifyReply ->
- [?NotifyToken, enc_NotifyReply(Val, State)];
- serviceChangeReply ->
- [?ServiceChangeToken, enc_ServiceChangeReply(Val, State)];
- _ ->
- error({invalid_CommandReply_tag, Tag})
- end.
-
-enc_TopologyRequest(Val, State)
- when is_list(Val) ->
- [
- ?TopologyToken,
- ?LBRKT_INDENT(State),
- enc_list([{Val, fun enc_TopologyRequest1/2}],?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_TopologyRequest1(#'TopologyRequest'{terminationFrom = From,
- terminationTo = To,
- topologyDirection = Dir}, State) ->
- [
- enc_TerminationID(From, State),
- ?COMMA_INDENT(State),
- enc_TerminationID(To, State),
- ?COMMA_INDENT(State),
- enc_TopologyDirection(Dir, State)
- ].
-
-enc_TopologyDirection(bothway, _State) ->
- ?BothwayToken;
-enc_TopologyDirection(isolate, _State) ->
- ?IsolateToken;
-enc_TopologyDirection(oneway, _State) ->
- ?OnewayToken;
-enc_TopologyDirection(Top, _State) ->
- error({illegal_TopologyDirection, Top}).
-
-enc_AmmRequest(Val, State)
- when is_record(Val, 'AmmRequest') ->
-% d("enc_AmmRequest -> entry with"
-% "~n Val: ~p", [Val]),
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1(Val#'AmmRequest'.terminationID, State),
- enc_opt_brackets(
- enc_list([{Val#'AmmRequest'.descriptors, fun enc_ammDescriptor/2}],
- ?INC_INDENT(State)),
- State)
- ].
-
-enc_ammDescriptor({Tag, Desc}, State) ->
-% d("enc_ammDescriptor -> entry with"
-% "~n Tag: ~p"
-% "~n Desc: ~p", [Tag, Desc]),
- case Tag of
- mediaDescriptor -> enc_MediaDescriptor(Desc, State);
- modemDescriptor -> enc_ModemDescriptor(Desc, State);
- muxDescriptor -> enc_MuxDescriptor(Desc, State);
- eventsDescriptor -> enc_EventsDescriptor(Desc, State);
- eventBufferDescriptor -> enc_EventBufferDescriptor(Desc, State);
- signalsDescriptor -> enc_SignalsDescriptor(Desc, State);
- digitMapDescriptor -> enc_DigitMapDescriptor(Desc, State);
- auditDescriptor -> enc_AuditDescriptor(Desc, State);
- statisticsDescriptor -> enc_StatisticsDescriptor(Desc, State);
- _ ->
- error({invalid_ammDescriptor_tag, Tag})
- end.
-
-enc_AmmsReply(#'AmmsReply'{terminationID = ID,
- terminationAudit = asn1_NOVALUE}, State) ->
-% d("enc_AmmsReply(asn1_NOVALUE) -> entry with"
-% "~n ID: ~p", [ID]),
- [
- ?EQUAL,
- enc_TerminationIDList1(ID, State)
- ];
-enc_AmmsReply(#'AmmsReply'{terminationID = ID,
- terminationAudit = []}, State) ->
-% d("enc_AmmsReply([]) -> entry with"
-% "~n ID: ~p", [ID]),
- [
- ?EQUAL,
- enc_TerminationIDList1(ID, State)
- ];
-enc_AmmsReply(#'AmmsReply'{terminationID = ID,
- terminationAudit = Res}, State) ->
-% d("enc_AmmsReply -> entry with"
-% "~n ID: ~p"
-% "~n Res: ~p", [ID, Res]),
- [
- ?EQUAL,
- enc_TerminationIDList1(ID, State),
- case lists:flatten(enc_TerminationAudit(Res, ?INC_INDENT(State))) of
- [] ->
- [];
- L ->
- [
- ?LBRKT_INDENT(State),
- L,
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-enc_SubtractRequest(Val, State)
- when is_record(Val, 'SubtractRequest') ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1(Val#'SubtractRequest'.terminationID, State),
- case Val#'SubtractRequest'.auditDescriptor of
- asn1_NOVALUE ->
- [];
- AuditDescr ->
- [
- ?LBRKT_INDENT(State) ,
- enc_AuditDescriptor(AuditDescr, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-enc_AuditRequest(Val, State)
- when is_record(Val, 'AuditRequest') ->
-% d("enc_AuditRequest -> entry with"
-% "~n Val: ~p", [Val]),
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1([Val#'AuditRequest'.terminationID], State),
- case Val#'AuditRequest'.auditDescriptor of
- asn1_NOVALUE ->
- [];
- AuditDescr ->
- [
- ?LBRKT_INDENT(State) ,
- enc_AuditDescriptor(AuditDescr, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-%% auditReply = (AuditValueToken / AuditCapToken )
-%% ( contextTerminationAudit / auditOther)
-%% auditOther = EQUAL TerminationID LBRKT
-%% terminationAudit RBRKT
-%% terminationAudit = auditReturnParameter *(COMMA auditReturnParameter)
-%%
-%% contextTerminationAudit = EQUAL CtxToken ( terminationIDList /
-%% LBRKT errorDescriptor RBRKT )
-enc_AuditReply({Tag, Val}, State) ->
- case Tag of
- contextAuditResult ->
- [
- ?EQUAL,
- ?CtxToken,
- enc_TerminationIDListN(Val, State)
- ];
- error ->
- [
- ?EQUAL,
- ?CtxToken,
- ?LBRKT_INDENT(State),
- enc_ErrorDescriptor(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
- auditResult when is_record(Val, 'AuditResult') ->
- enc_auditOther(Val, State);
- auditResult ->
- error({invalid_auditResult, Val});
- _ ->
- error({invalid_AuditReply_tag, Tag})
- end.
-
-enc_auditOther(#'AuditResult'{terminationID = ID,
- terminationAuditResult = asn1_NOVALUE}, State) ->
- [
- ?EQUAL,
- enc_TerminationID(ID, State)
- ];
-enc_auditOther(#'AuditResult'{terminationID = ID,
- terminationAuditResult = []}, State) ->
- [
- ?EQUAL,
- enc_TerminationID(ID, State)
- ];
-enc_auditOther(#'AuditResult'{terminationID = ID,
- terminationAuditResult = Res}, State) ->
- [
- ?EQUAL,
- enc_TerminationID(ID, State),
- case lists:flatten(enc_TerminationAudit(Res, ?INC_INDENT(State))) of
- [] ->
- [];
- L ->
- [
- ?LBRKT_INDENT(State),
- L,
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = asn1_NOVALUE,
- auditPropertyToken = asn1_NOVALUE},
- _State) ->
-% d("enc_AuditDescriptor(asn1_NOVALUE) -> entry"),
- [
- ?AuditToken,
- [?LBRKT, ?RBRKT]
- ];
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = [],
- auditPropertyToken = asn1_NOVALUE},
- _State) ->
-% d("enc_AuditDescriptor([]) -> entry"),
- [
- ?AuditToken,
- [?LBRKT, ?RBRKT]
- ];
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = List,
- auditPropertyToken = asn1_NOVALUE},
- State) ->
-% d("enc_AuditDescriptor -> entry with",
-% "~n List: ~p", [List]),
- [
- ?AuditToken,
- [
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_auditItem/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- ];
-%% - v2 -
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = asn1_NOVALUE,
- auditPropertyToken = Prop},
- State) ->
-% d("enc_AuditDescriptor -> entry with",
-% "~n Prop: ~p", [Prop]),
- [
- ?AuditToken,
- [
- ?LBRKT_INDENT(State),
- enc_auditPropertyToken(Prop, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- ];
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = List,
- auditPropertyToken = Prop},
- State) ->
-% d("enc_AuditDescriptor -> entry with",
-% "~n List: ~p"
-% "~n Prop: ~p", [List, Prop]),
- [
- ?AuditToken,
- [
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_auditItem/2}], ?INC_INDENT(State)),
- ?COMMA_INDENT(State),
- enc_auditPropertyToken(Prop, ?INC_INDENT(State)), % v2
- ?RBRKT_INDENT(State)
- ]
- ].
-
-enc_auditItem(signalsToken, _State) ->
- ?SignalsToken;
-enc_auditItem(eventBufferToken, _State) ->
- ?EventBufferToken;
-enc_auditItem(eventsToken, _State) ->
- ?EventsToken;
-enc_auditItem(Val, State) ->
- enc_auditReturnItem(Val, State).
-
-
-enc_auditReturnItem(muxToken, _State) ->
- ?MuxToken;
-enc_auditReturnItem(modemToken, _State) ->
- ?ModemToken;
-enc_auditReturnItem(mediaToken, _State) ->
- ?MediaToken;
-enc_auditReturnItem(digitMapToken, _State) ->
- ?DigitMapToken;
-enc_auditReturnItem(statsToken, _State) ->
- ?StatsToken;
-enc_auditReturnItem(observedEventsToken, _State) ->
- ?ObservedEventsToken;
-enc_auditReturnItem(packagesToken, _State) ->
- ?PackagesToken.
-
-
-%% - v2 begin -
-
-enc_auditPropertyToken([], _State) ->
- [];
-enc_auditPropertyToken([Param | Params], State) ->
-% d("enc_auditPropertyToken -> entry with",
-% "~n Param: ~p", [Param]),
- [enc_IndAudauditReturnParameter(Param, State),
- [[?COMMA_INDENT(State),
- enc_IndAudauditReturnParameter(P, State)] || P <- Params]].
-
-
-enc_IndAudauditReturnParameter({Tag, Val}, State) ->
- case Tag of
- indAudMediaDescriptor ->
- enc_IndAudMediaDescriptor(Val, State);
- indAudEventsDescriptor ->
- enc_IndAudEventsDescriptor(Val, State);
- indAudSignalsDescriptor ->
- enc_IndAudSignalsDescriptor(Val, State);
- indAudDigitMapDescriptor ->
- enc_IndAudDigitMapDescriptor(Val, State);
- indAudEventBufferDescriptor ->
- enc_IndAudEventBufferDescriptor(Val, State);
- indAudStatisticsDescriptor ->
- enc_IndAudStatisticsDescriptor(Val, State);
- indAudPackagesDescriptor ->
- enc_IndAudPackagesDescriptor(Val, State);
- _ ->
- error({invalid_IndAudauditReturnParameter_tag, Tag})
- end.
-
-%% The ASN.1 does not limit to just one of termStateDescr or streams,
-%% but the ABNF seams to do that...
-enc_IndAudMediaDescriptor(
- #'IndAudMediaDescriptor'{termStateDescr = asn1_NOVALUE,
- streams = Streams}, State) ->
-% d("enc_IndAudMediaDescriptor -> entry with",
-% "~n Streams: ~p", [Streams]),
- [
- ?MediaToken,
- ?LBRKT_INDENT(State),
- enc_IndAudMediaDescriptor_streams(Streams, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_IndAudMediaDescriptor(#'IndAudMediaDescriptor'{termStateDescr = TSD,
- streams = asn1_NOVALUE},
- State) ->
-% d("enc_IndAudMediaDescriptor -> entry with",
-% "~n TSD: ~p", [TSD]),
- [
- ?MediaToken,
- ?LBRKT_INDENT(State),
- enc_IndAudTerminationStateDescriptor(TSD, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudMediaDescriptor_streams({Tag, Val}, State) ->
-% d("enc_IndAudMediaDescriptor_streams -> entry with",
-% "~n Tag: ~p"
-% "~n Val: ~p", [Tag, Val]),
- case Tag of
- oneStream ->
- enc_IndAudStreamParms(Val, State);
- multiStream ->
- enc_IndAudMediaDescriptor_multiStream(Val, State);
- _ ->
- error({invalid_IndAudMediaDescriptor_streams_tag, Tag})
- end.
-
-enc_IndAudTerminationStateDescriptor(
- #'IndAudTerminationStateDescriptor'{propertyParms = [],
- eventBufferControl = asn1_NOVALUE,
- serviceState = 'NULL'}, _State) ->
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(_State),
- ?ServiceStatesToken,
- ?RBRKT_INDENT(_State)
- ];
-enc_IndAudTerminationStateDescriptor(
- #'IndAudTerminationStateDescriptor'{propertyParms = [],
- eventBufferControl = 'NULL',
- serviceState = asn1_NOVALUE}, _State) ->
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(_State),
- ?BufferToken,
- ?RBRKT_INDENT(_State)
- ];
-enc_IndAudTerminationStateDescriptor(
- #'IndAudTerminationStateDescriptor'{propertyParms = [Parms],
- eventBufferControl = asn1_NOVALUE,
- serviceState = asn1_NOVALUE}, State) ->
- #'IndAudPropertyParm'{name = Name} = Parms,
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(State),
- enc_PkgdName(Name, State),
- ?RBRKT_INDENT(State)
- ].
-
-%% In text, localDescriptor and remoteDescriptor are not allowed!!
-enc_IndAudStreamParms(
- #'IndAudStreamParms'{localControlDescriptor = LCD,
- localDescriptor = asn1_NOVALUE,
- remoteDescriptor = asn1_NOVALUE,
- statisticsDescriptor = SD}, State) ->
-% d("enc_IndAudStreamParms -> entry with"
-% "~n LCD: ~p"
-% "~n SD: ~p", [LCD, SD]),
- [
- enc_list([{[LCD], fun enc_IndAudLocalControlDescriptor/2},
- {[SD], fun enc_IndAudStatisticsDescriptor/2}],
- ?INC_INDENT(State))
- ].
-
-enc_IndAudLocalControlDescriptor(Val, State)
- when is_record(Val, 'IndAudLocalControlDescriptor') ->
- [
- ?LocalControlToken,
- ?LBRKT_INDENT(State),
- enc_list([{[Val#'IndAudLocalControlDescriptor'.streamMode],
- fun('NULL', _) -> ?ModeToken end},
- {[Val#'IndAudLocalControlDescriptor'.reserveValue],
- fun('NULL', _) -> ?ReservedValueToken end},
- {[Val#'IndAudLocalControlDescriptor'.reserveGroup],
- fun('NULL', _) -> ?ReservedGroupToken end},
- {Val#'IndAudLocalControlDescriptor'.propertyParms,
- fun enc_IndAudPropertyParm/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudPropertyParm(#'IndAudPropertyParm'{name = PkgdName}, State) ->
- enc_PkgdName(PkgdName, State).
-
-enc_IndAudMediaDescriptor_multiStream([Val], State) ->
-% d("enc_IndAudMediaDescriptor_multiStream -> entry with"
-% "~n Val: ~p", [Val]),
- [
- enc_IndAudStreamDescriptor(Val, ?INC_INDENT(State))
- ];
-enc_IndAudMediaDescriptor_multiStream(Vals, _State) when is_list(Vals) ->
- error({invalid_IndAudMediaDescriptor_multiStream_length, Vals});
-enc_IndAudMediaDescriptor_multiStream(Val, _State) ->
- error({invalid_IndAudMediaDescriptor_multiStream, Val}).
-
-enc_IndAudStreamDescriptor(#'IndAudStreamDescriptor'{streamID = SID,
- streamParms = Parms},
- State) ->
-% d("enc_IndAudStreamDescriptor -> entry with"
-% "~n SID: ~p"
-% "~n Parms: ~p", [SID, Parms]),
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(SID, State),
- ?LBRKT_INDENT(State),
- enc_IndAudStreamParms(Parms, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudEventBufferDescriptor(Val, State)
- when is_record(Val, 'IndAudEventBufferDescriptor') ->
- #'IndAudEventBufferDescriptor'{eventName = EvName,
- streamID = ID} = Val,
- [
- ?EventBufferToken,
- ?LBRKT_INDENT(State),
- enc_PkgdName(EvName, State),
- enc_IndAudEventBufferDescriptor_eventSpec(ID, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudEventBufferDescriptor_eventSpec(asn1_NOVALUE, _State) ->
- [
- ];
-enc_IndAudEventBufferDescriptor_eventSpec({eventParameterName, ParamName},
- State) ->
- [
- ?LBRKT_INDENT(State),
- enc_Name(ParamName, State),
- ?RBRKT_INDENT(State)
- ];
-enc_IndAudEventBufferDescriptor_eventSpec(ID, State) ->
- [
- ?LBRKT_INDENT(State),
- enc_eventStream(ID, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudEventsDescriptor(Val, State)
- when is_record(Val, 'IndAudEventsDescriptor') ->
- #'IndAudEventsDescriptor'{requestID = ReqID,
- pkgdName = Name,
- streamID = asn1_NOVALUE} = Val,
- [
- ?EventsToken,
- ?EQUAL,
- enc_RequestID(ReqID, State),
- ?LBRKT_INDENT(State),
- enc_PkgdName(Name, State),
- ?RBRKT_INDENT(State)
- ].
-
-
-enc_IndAudSignalsDescriptor(Val, State) ->
- [
- ?SignalsToken,
- ?LBRKT_INDENT(State),
- enc_IndAudSignalsDescriptor_value(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudSignalsDescriptor_value({signal, Val}, State) ->
- enc_IndAudSignal(Val, State);
-enc_IndAudSignalsDescriptor_value({seqSigList, Val}, State) ->
- enc_IndAudSeqSigList(Val, State).
-
-enc_IndAudSignal(#'IndAudSignal'{signalName = SignalName,
- streamID = asn1_NOVALUE}, State) ->
- [
- enc_SignalName(SignalName, State)
- ].
-
-enc_IndAudSeqSigList(#'IndAudSeqSigList'{id = ID,
- signalList = Parm},
- State) ->
- [
- ?SignalListToken,
- ?EQUAL,
- enc_UINT16(ID, State),
- ?LBRKT_INDENT(State),
- enc_IndAudSignal(Parm, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudDigitMapDescriptor(#'IndAudDigitMapDescriptor'{digitMapName = Name},
- State) ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State)
- ].
-
-enc_IndAudStatisticsDescriptor(#'IndAudStatisticsDescriptor'{statName = Name},
- State) ->
-% d("enc_IndAudStatisticsDescriptor -> entry with"
-% "~n Name: ~p", [Name]),
- [
- ?StatsToken,
- ?LBRKT_INDENT(State),
- enc_PkgdName(Name, State),
- ?RBRKT_INDENT(State)
- ].
-
-
-enc_IndAudPackagesDescriptor(#'IndAudPackagesDescriptor'{packageName = N,
- packageVersion = V},
- State) ->
- [
- ?PackagesToken,
- ?LBRKT_INDENT(State),
- enc_Name(N, State),
- "-",
- enc_UINT16(V, State),
- ?RBRKT_INDENT(State)
- ].
-
-
-%% - v2 end -
-
-
-enc_TerminationAudit({'TerminationAudit',Val}, State) ->
- enc_TerminationAudit(Val, State);
-enc_TerminationAudit([], _State) ->
- [];
-enc_TerminationAudit([Mand | Opt], State) ->
-% d("enc_TerminationAudit -> entry with"
-% "~n Mand: ~p", [Mand]),
- [enc_AuditReturnParameter(Mand, State),
- [[?COMMA_INDENT(State), enc_AuditReturnParameter(Val, State)] || Val <- Opt]].
-
-enc_AuditReturnParameter({'AuditReturnParameter',Val}, State) ->
- enc_AuditReturnParameter(Val, State);
-enc_AuditReturnParameter({Tag, Val}, State) ->
-% d("enc_AuditReturnParameter -> entry with"
-% "~n Tag: ~p"
-% "~n Val: ~p", [Tag, Val]),
- case Tag of
- mediaDescriptor ->
- enc_MediaDescriptor(Val, State);
- modemDescriptor ->
- enc_ModemDescriptor(Val, State);
- muxDescriptor ->
- enc_MuxDescriptor(Val, State);
- eventsDescriptor ->
- enc_EventsDescriptor(Val, State);
- signalsDescriptor ->
- enc_SignalsDescriptor(Val, State);
- digitMapDescriptor ->
- enc_DigitMapDescriptor(Val, State);
- observedEventsDescriptor ->
- enc_ObservedEventsDescriptor(Val, State);
- eventBufferDescriptor ->
- enc_EventBufferDescriptor(Val, State);
- statisticsDescriptor ->
- enc_StatisticsDescriptor(Val, State);
- packagesDescriptor ->
- enc_PackagesDescriptor(Val, State);
- errorDescriptor ->
- enc_ErrorDescriptor(Val, State);
- emptyDescriptors ->
- enc_EmptyDescriptors(Val, State);
- _ ->
- error({invalid_AuditReturnParameter_tag, Tag})
- end.
-
-enc_EmptyDescriptors(#'AuditDescriptor'{auditToken = asn1_NOVALUE}, _State) ->
- [];
-enc_EmptyDescriptors(#'AuditDescriptor'{auditToken = []}, _State) ->
- [];
-enc_EmptyDescriptors(#'AuditDescriptor'{auditToken = List}, State) ->
- enc_list([{List, fun enc_auditReturnItem/2}], ?INC_INDENT(State)).
-
-
-enc_NotifyRequest(Val, State)
- when is_record(Val, 'NotifyRequest') ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1(Val#'NotifyRequest'.terminationID, State),
- ?LBRKT_INDENT(State),
- %% BUGBUG: Mismatch between ASN.1 and ABNF
- %% BUGBUG: The following ought to be a 'choice'
- case Val#'NotifyRequest'.errorDescriptor of
- asn1_NOVALUE ->
- OED = Val#'NotifyRequest'.observedEventsDescriptor,
- enc_ObservedEventsDescriptor(OED, ?INC_INDENT(State));
- ErrorDescr ->
- enc_ErrorDescriptor(ErrorDescr, ?INC_INDENT(State))
- end,
- ?RBRKT_INDENT(State)
- ].
-
-enc_NotifyReply(Val, State)
- when is_record(Val, 'NotifyReply') ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- case Val#'NotifyReply'.terminationID of
- asn1_NOVALUE ->
- error(asn1_not_compliant_with_abnf);
- TermId ->
- enc_TerminationIDList1(TermId, State)
- end,
- case Val#'NotifyReply'.errorDescriptor of
- asn1_NOVALUE ->
- [];
- ErrorDescr ->
- [
- ?LBRKT_INDENT(State),
- enc_ErrorDescriptor(ErrorDescr, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-enc_ObservedEventsDescriptor(Val, State)
- when is_record(Val, 'ObservedEventsDescriptor') ->
- [
- ?ObservedEventsToken,
- ?EQUAL,
- enc_RequestID(Val#'ObservedEventsDescriptor'.requestId, State),
- ?LBRKT_INDENT(State),
- enc_observedEventsDescriptors(Val#'ObservedEventsDescriptor'.observedEventLst, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_observedEventsDescriptors([Mand | Opt], State) ->
- [enc_ObservedEvent(Mand, State),
- [[?COMMA_INDENT(State), enc_ObservedEvent(Val, State)] || Val <- Opt]].
-
-%% ;time per event, because it might be buffered
-%% observedEvent = [ TimeStamp LWSP COLON] LWSP
-%% pkgdName [ LBRKT observedEventParameter
-%% *(COMMA observedEventParameter) RBRKT ]
-%%
-%% ;at-most-once eventStream, every eventParameterName at most once
-%% observedEventParameter = eventStream / eventOther
-enc_ObservedEvent(Val, State)
- when is_record(Val, 'ObservedEvent') ->
- [
- case Val#'ObservedEvent'.timeNotation of
- asn1_NOVALUE ->
- [];
- TimeStamp ->
- [
- enc_TimeNotation(TimeStamp, State),
- ?LWSP,
- ?COLON
- ]
- end,
- ?LWSP,
- enc_EventName(Val#'ObservedEvent'.eventName, State),
- enc_opt_brackets(
- enc_list([{[Val#'ObservedEvent'.streamID], fun enc_eventStream/2},
- {Val#'ObservedEvent'.eventParList, fun enc_eventOther/2}],
- ?INC_INDENT(State)),
- State)
- ].
-
-enc_EventName({'EventName',Val}, State) ->
- enc_EventName(Val, State);
-enc_EventName(Val, State) ->
- PkgdName = ?META_ENC(event, Val),
- enc_PkgdName(PkgdName, State).
-
-enc_eventStream(Val, State) ->
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(Val, State)
- ].
-
-%% The value is already encoded
-enc_eventOther(#megaco_event_parameter{name = Name,
- value = Value}, State)
- when is_list(Value) ->
- [
- enc_Name(Name, State),
- ?EqualToken,
- Value
- ];
-%% Special treatment of the ds parameter of the dd/ce event
-enc_eventOther(#'EventParameter'{eventParameterName = "ds" = Name,
- value = [DigitString],
- extraInfo = asn1_NOVALUE}, State) ->
- [
- enc_Name(Name, State),
- ?EqualToken,
- enc_DigitString(DigitString, State)
- ];
-enc_eventOther(#'EventParameter'{eventParameterName = Name,
- value = Value,
- extraInfo = Extra}, State) ->
- [
- enc_Name(Name, State),
- enc_propertyParmValues(Value, Extra, State)
- ].
-
-enc_ServiceChangeRequest(Val, State)
- when is_record(Val, 'ServiceChangeRequest') ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1(Val#'ServiceChangeRequest'.terminationID, State),
- ?LBRKT_INDENT(State),
- enc_ServiceChangeParm(Val#'ServiceChangeRequest'.serviceChangeParms,
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-%% serviceChangeReply = ServiceChangeToken EQUAL TerminationID
-%% [LBRKT (errorDescriptor /
-%% serviceChangeReplyDescriptor) RBRKT]
-%% serviceChangeReplyDescriptor = ServicesToken LBRKT
-%% servChgReplyParm *(COMMA servChgReplyParm) RBRKT
-%%
-%% ;at-most-once. Version is REQUIRED on first ServiceChange response
-%% servChgReplyParm = (serviceChangeAddress / serviceChangeMgcId /
-%% serviceChangeProfile / serviceChangeVersion )
-enc_ServiceChangeReply(Val, State)
- when is_record(Val, 'ServiceChangeReply') ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1(Val#'ServiceChangeReply'.terminationID, State),
- enc_ServiceChangeResult(Val#'ServiceChangeReply'.serviceChangeResult, State)
- ].
-
-enc_ServiceChangeResult({'ServiceChangeResult',Val}, State) ->
- enc_ServiceChangeResult(Val, State);
-enc_ServiceChangeResult({Tag, Val}, State) ->
- case Tag of
- errorDescriptor ->
- [
- ?LBRKT_INDENT(State),
- enc_ErrorDescriptor(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
- serviceChangeResParms ->
- case enc_ServiceChangeResParm(Val, ?INC_INDENT(?INC_INDENT(State))) of
- [] ->
- [];
- ResParms ->
- [
- ?LBRKT_INDENT(State),
- ?ServicesToken,
- fun(_S) ->
- [
- ?LBRKT_INDENT(_S),
- ResParms,
- ?RBRKT_INDENT(_S)
- ]
- end(?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end;
- _ ->
- error({invalid_ServiceChangeResult_tag, Tag})
- end.
-
-%% Required length of termination ID list is 1
-enc_TerminationIDList1({'TerminationIDList',Val}, State) ->
- enc_TerminationIDList1(Val, State);
-enc_TerminationIDList1([Singleton], State) ->
- enc_TerminationID(Singleton, State).
-
-%% No required length of termination ID list
-enc_TerminationIDListN({'TerminationIDList',Val}, State) ->
- enc_TerminationIDListN(Val, State);
-enc_TerminationIDListN([TID], State) ->
- [
- ?LBRKT_INDENT(State),
- enc_TerminationID(TID, State),
- ?RBRKT_INDENT(State)
- ];
-enc_TerminationIDListN(TIDs, State) ->
- [
- ?LBRKT_INDENT(State),
- enc_list([{TIDs, fun enc_TerminationID/2}], State),
- ?RBRKT_INDENT(State)
- ].
-
-%% TerminationID = "ROOT" / pathNAME / "$" / "*"
-%% ; Total length of pathNAME must not exceed 64 chars.
-%% pathNAME = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
-%% ["@" pathDomainName ]
-enc_TerminationID(Tid, State)
- when is_record(Tid, megaco_term_id) ->
- List = [{Tid#megaco_term_id.id, fun enc_tid_component/2 }],
- enc_list(List, State, fun(_S) -> ?SLASH end, false).
-
-enc_tid_component(Component, State) when is_list(Component) ->
- [enc_tid_sub_component(Sub, State) || Sub <- Component];
-enc_tid_component(Invalid, _State) ->
- error({invalid_id_list_component, Invalid}).
-
-enc_tid_sub_component(all = _Sub, _State) ->
- ?megaco_all;
-enc_tid_sub_component(choose = _Sub, _State) ->
- ?megaco_choose;
-enc_tid_sub_component(Char, _State) when is_integer(Char) ->
- Char;
-enc_tid_sub_component(Invalid, _State) ->
- error({invalid_id_list_sub_component, Invalid}).
-
-%% enc_tid_sub_component(Sub, _State) ->
-%% case Sub of
-%% all -> ?megaco_all;
-%% choose -> ?megaco_choose;
-%% Char when is_integer(Char) -> Char
-%% end.
-
-%% mediaDescriptor = MediaToken LBRKT mediaParm *(COMMA mediaParm) RBRKT
-%% ; at-most-once per item
-%% ; and either streamParm or streamDescriptor but not both
-%% mediaParm = (streamParm / streamDescriptor /
-%% terminationStateDescriptor)
-%% ; at-most-once
-%% streamParm = ( localDescriptor / remoteDescriptor /
-%% localControlDescriptor )
-%% streamDescriptor = StreamToken EQUAL StreamID LBRKT streamParm
-%% *(COMMA streamParm) RBRKT
-enc_MediaDescriptor(Val, State)
- when is_record(Val, 'MediaDescriptor') ->
- [
- ?MediaToken,
- ?LBRKT_INDENT(State),
- enc_list([{[Val#'MediaDescriptor'.termStateDescr],
- fun enc_TerminationStateDescriptor/2} |
- decompose_streams(Val#'MediaDescriptor'.streams)],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-decompose_streams(asn1_NOVALUE) ->
- [];
-decompose_streams({'MediaDescriptor_streams',Val}) ->
- decompose_streams(Val);
-decompose_streams({Tag, Val}) ->
- case Tag of
- oneStream ->
- decompose_StreamParms(Val);
- multiStream ->
- [{Val, fun enc_StreamDescriptor/2}];
- _ ->
- error({invalid_streams_tag, Tag})
- end.
-
-decompose_StreamParms(Val)
- when is_record(Val, 'StreamParms') ->
- [
- {[Val#'StreamParms'.localControlDescriptor],
- fun enc_LocalControlDescriptor/2},
- {[Val#'StreamParms'.localDescriptor],
- fun enc_localDescriptor/2},
- {[Val#'StreamParms'.remoteDescriptor],
- fun enc_remoteDescriptor/2},
- {[Val#'StreamParms'.statisticsDescriptor],
- fun enc_StatisticsDescriptor/2}
- ].
-
-enc_StreamDescriptor(Val, State)
- when is_record(Val, 'StreamDescriptor') ->
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(Val#'StreamDescriptor'.streamID, State),
- ?LBRKT_INDENT(State),
- enc_list(decompose_StreamParms(Val#'StreamDescriptor'.streamParms),
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-%% localControlDescriptor = LocalControlToken LBRKT localParm
-%% *(COMMA localParm) RBRKT
-%%
-%% ; at-most-once per item
-%% localParm = ( streamMode / propertyParm /
-%% reservedValueMode / reservedGroupMode )
-%% reservedValueMode = ReservedValueToken EQUAL ( "ON" / "OFF" )
-%% reservedGroupMode = ReservedGroupToken EQUAL ( "ON" / "OFF" )
-%%
-%% reservedMode = ReservedToken EQUAL ( "ON" / "OFF" )
-%%
-%% streamMode = ModeToken EQUAL streamModes
-enc_LocalControlDescriptor(
- #'LocalControlDescriptor'{streamMode = asn1_NOVALUE,
- reserveValue = asn1_NOVALUE,
- reserveGroup = asn1_NOVALUE,
- propertyParms = []}, _State) ->
- error({invalid_LocalControlDescriptor, empty});
-enc_LocalControlDescriptor(
- #'LocalControlDescriptor'{streamMode = SM,
- reserveValue = RV,
- reserveGroup = RG,
- propertyParms = PPs}, State) ->
- [
- ?LocalControlToken,
- ?LBRKT_INDENT(State),
- enc_list([{[SM], fun enc_StreamMode/2},
- {[RG], fun enc_reservedGroupMode/2},
- {[RV], fun enc_reservedValueMode/2},
- {PPs, fun enc_PropertyParm/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_reservedGroupMode(Val, _State) ->
- [
- ?ReservedGroupToken,
- ?EQUAL,
- case Val of
- false -> ?OffToken;
- true -> ?OnToken
- end
- ].
-
-enc_reservedValueMode(Val, _State) ->
- [
- ?ReservedValueToken,
- ?EQUAL,
- case Val of
- false -> ?OffToken;
- true -> ?OnToken
- end
- ].
-
-enc_StreamMode({'StreamMode',Val}, State) ->
- enc_StreamMode(Val, State);
-enc_StreamMode(Val, _State) ->
- [
- ?ModeToken,
- ?EQUAL,
- case Val of
- sendOnly -> ?SendonlyToken;
- recvOnly -> ?RecvonlyToken;
- sendRecv -> ?SendrecvToken;
- inactive -> ?InactiveToken;
- loopBack -> ?LoopbackToken
- end
- ].
-
-enc_Name({'Name',Val}, State) ->
- enc_Name(Val, State);
-enc_Name(Val, State) ->
- %% BUGBUG: NAME = ALPHA *63(ALPHA / DIGIT / "_" )
- enc_STRING(Val, State, 1, 64).
-
-enc_PkgdName({'PkgdName', Val}, State) ->
- enc_PkgdName(Val, State);
-enc_PkgdName(Val, _State) ->
- %% BUGBUG: pkgdName = (NAME / "*") SLASH (ItemID / "*" )
- %% enc_OCTET_STRING(Val, _State, 1, 64).
- if
- is_list(Val) ->
- Length = length(Val),
- if
- (Length >= 1) ->
- if
- (Length =< 64) ->
- Val;
- true ->
- error({pkgdName_toolong, Length, 64})
- end;
- true ->
- error({pkgdName_tooshort, Length, 1})
- end;
- true ->
- error({invalid_PkgdName, Val})
- end.
-
-enc_localDescriptor(Val, State)
- when is_record(Val, 'LocalRemoteDescriptor') ->
- [
- ?LocalToken,
- ?LBRKT,
- enc_LocalRemoteDescriptor(Val, State),
- ?RBRKT_INDENT(State)
- ].
-
-enc_remoteDescriptor(Val, State)
- when is_record(Val, 'LocalRemoteDescriptor') ->
- [
- ?RemoteToken,
- ?LBRKT,
- enc_LocalRemoteDescriptor(Val, State),
- ?RBRKT_INDENT(State)
- ].
-
-%% When text encoding the protocol, the descriptors consist of session
-%% descriptions as defined in SDP (RFC2327), except that the "s=", "t="
-%% and "o=" lines are optional. When multiple session descriptions are
-%% provided in one descriptor, the "v=" lines are required as delimiters;
-%% otherwise they are optional. Implementations shall accept session
-%% descriptions that are fully conformant to RFC2327. When binary
-%% encoding the protocol the descriptor consists of groups of properties
-%% (tag-value pairs) as specified in Annex C. Each such group may
-%% contain the parameters of a session description.
-enc_LocalRemoteDescriptor(Val, State)
- when is_record(Val, 'LocalRemoteDescriptor') ->
- case Val#'LocalRemoteDescriptor'.propGrps of
- [] ->
- [];
- [OptV | MandV] ->
- [?LfToken,
- enc_PropertyGroup(OptV, opt_v, State) |
- [enc_PropertyGroup(M, mand_v, State) || M <- MandV]]
- end.
-
-enc_PropertyGroup({'PropertyGroup',Val}, RequiresV, State) ->
- enc_PropertyGroup(Val, RequiresV, State);
-enc_PropertyGroup([H | _T] = List, mand_v, State)
- when is_record(H, 'PropertyParm') andalso (H#'PropertyParm'.name == "v") ->
- enc_PropertyGroup(List, opt_v, State);
-enc_PropertyGroup(PG, opt_v, State) ->
- [
- [[enc_PropertyGroupParm(PP, State), ?CrToken, ?LfToken] || PP <- PG]
- ].
-
-enc_PropertyGroupParm(Val, State)
- when is_record(Val, 'PropertyParm') ->
- [OctetString] = Val#'PropertyParm'.value,
- [
- enc_PkgdName(Val#'PropertyParm'.name, State),
- ?EqualToken,
- enc_OCTET_STRING(OctetString, State, 0, infinity)
- ].
-
-%% propertyParm = pkgdName parmValue
-%% parmValue = (EQUAL alternativeValue/ INEQUAL VALUE)
-%% alternativeValue = ( VALUE / LSBRKT VALUE *(COMMA VALUE) RSBRKT /
-%% LSBRKT VALUE DOT DOT VALUE RSBRKT )
-enc_PropertyParm(Val, State)
- when is_record(Val, 'PropertyParm') ->
- PkgdName = ?META_ENC(property, Val#'PropertyParm'.name),
- [
- enc_PkgdName(PkgdName, State),
- enc_propertyParmValues(Val#'PropertyParm'.value,
- Val#'PropertyParm'.extraInfo,
- State)
- ].
-
-enc_propertyParmValues([Single], asn1_NOVALUE, State) ->
- [
- ?EqualToken,
- enc_Value(Single, State)
- ];
-enc_propertyParmValues([Single], {relation, Rel}, State) ->
- case Rel of
- greaterThan -> [$>, enc_Value(Single, State)];
- smallerThan -> [$<, enc_Value(Single, State)];
- unequalTo -> [$#, enc_Value(Single, State)]
- end;
-enc_propertyParmValues([Low, High], {range, true}, State)->
- %% Exact two values
- [
- ?EQUAL,
- ?LSBRKT,
- enc_Value(Low, State),
- ?COLON,
- enc_Value(High, State),
- ?RSBRKT
- ];
-enc_propertyParmValues(Values, {sublist, true}, State)->
- %% sublist (i.e. A AND B AND ...)
- [
- ?EQUAL,
- ?LSBRKT_INDENT(State),
- enc_list([{Values, fun enc_Value/2}], ?INC_INDENT(State)),
- ?RSBRKT_INDENT(State)
- ];
-enc_propertyParmValues(Values, {sublist, false}, State) ->
- %% alternatives (i.e. A OR B OR ...)
- [
- ?EQUAL,
- ?LBRKT_INDENT(State),
- enc_list([{Values, fun enc_Value/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_propertyParmValues(V, EI, _State) ->
- error({invalid_property_parm_values, V, EI}).
-
-enc_TerminationStateDescriptor(Val, State)
- when is_record(Val, 'TerminationStateDescriptor') ->
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(State),
- enc_list([{Val#'TerminationStateDescriptor'.propertyParms,
- fun enc_PropertyParm/2},
- {[Val#'TerminationStateDescriptor'.eventBufferControl],
- fun enc_eventBufferControl/2},
- {[Val#'TerminationStateDescriptor'.serviceState],
- fun enc_serviceState/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_eventBufferControl(Val, _State) ->
- [
-
- ?BufferToken,
- ?EQUAL,
- case Val of
- off -> ?OffToken;
- lockStep -> ?LockStepToken
- end
- ].
-
-enc_serviceState({'ServiceState',Val}, State) ->
- enc_serviceState(Val, State);
-enc_serviceState(Val, _State) ->
- [
- ?ServiceStatesToken,
- ?EQUAL,
- case Val of
- test -> ?TestToken;
- outOfSvc -> ?OutOfSvcToken;
- inSvc -> ?InSvcToken
- end
- ].
-
-enc_MuxDescriptor(Val, State)
- when is_record(Val, 'MuxDescriptor') ->
- [
- ?MuxToken,
- ?EQUAL,
- enc_MuxType(Val#'MuxDescriptor'.muxType, State),
- enc_TerminationIDListN(Val#'MuxDescriptor'.termList, State)
- ].
-
-enc_MuxType({'MuxType',Val}, State) ->
- enc_MuxType(Val, State);
-enc_MuxType(Val, _State) ->
- case Val of
- h221 -> ?H221Token;
- h223 -> ?H223Token;
- h226 -> ?H226Token;
- v76 -> ?V76Token;
- %% extensionParameter
- nx64k -> ?Nx64kToken % v2
- end.
-
-enc_StreamID({'StreamID',Val}, State) ->
- enc_StreamID(Val, State);
-enc_StreamID(Val, State) ->
- enc_UINT16(Val, State).
-
-enc_EventsDescriptor(Val, State)
- when is_record(Val, 'EventsDescriptor') ->
- #'EventsDescriptor'{requestID = RequestId,
- eventList = Events} = Val,
- if
- RequestId == asn1_NOVALUE, Events == [] ->
- [
- ?EventsToken
- ];
-
- RequestId /= asn1_NOVALUE, Events /= [] ->
- [
- ?EventsToken,
- ?EQUAL,
- enc_RequestID(RequestId, State),
- ?LBRKT_INDENT(State),
- enc_list([{Events, fun enc_RequestedEvent/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end.
-
-enc_RequestedEvent(Val, State)
- when is_record(Val, 'RequestedEvent') ->
- PkgdName = ?META_ENC(event, Val#'RequestedEvent'.pkgdName),
- [
- enc_PkgdName(PkgdName, State),
- enc_opt_brackets(
- enc_list([{[Val#'RequestedEvent'.streamID], fun enc_eventStream/2},
- {Val#'RequestedEvent'.evParList, fun enc_eventOther/2} |
- decompose_requestedActions(Val#'RequestedEvent'.eventAction)],
- ?INC_INDENT(State)),
- State)
- ].
-
-decompose_requestedActions(asn1_NOVALUE) ->
- [];
-
-%%
-%% This in the ABNF:
-%% at-most-once each of KeepActiveToken , eventDM and eventStream
-%% at most one of either embedWithSig or embedNoSig but not both
-%% KeepActiveToken and embedWithSig must not both be present
-%%
-
-%% embedWithSig
-decompose_requestedActions(#'RequestedActions'{keepActive = KA,
- eventDM = EDM,
- secondEvent = SE,
- signalsDescriptor = SD})
- when (KA =/= true) andalso
- (SD =/= asn1_NOVALUE) andalso
- (SD =/= []) ->
- [
- {[EDM], fun enc_EventDM/2},
- {[{SE, SD}], fun enc_embedWithSig/2}
- ];
-
-%% embedNoSig
-decompose_requestedActions(#'RequestedActions'{keepActive = KA,
- eventDM = EDM,
- secondEvent = SE,
- signalsDescriptor = SD})
- when (SD =:= asn1_NOVALUE) orelse (SD =:= []) ->
- [
- {[KA], fun enc_keepActive/2},
- {[EDM], fun enc_EventDM/2},
- {[SE], fun enc_embedNoSig/2}
- ];
-
-%% Fallback, if everything else failes....
-decompose_requestedActions(#'RequestedActions'{keepActive = KA,
- eventDM = EDM,
- secondEvent = SE,
- signalsDescriptor = SD}) ->
- [
- {[KA], fun enc_keepActive/2},
- {[EDM], fun enc_EventDM/2},
- {[{SE, SD}], fun enc_embedWithSig/2}
- ].
-
-enc_embedNoSig(#'SecondEventsDescriptor'{requestID = RID,
- eventList = Evs}, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_embedFirst(RID, Evs, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_embedWithSig({asn1_NOVALUE, SD}, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_SignalsDescriptor(SD, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_embedWithSig({#'SecondEventsDescriptor'{requestID = RID,
- eventList = Evs}, SD}, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_SignalsDescriptor(SD, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_embedFirst(RID, Evs, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_keepActive(Val, _State) ->
- case Val of
- true -> [?KeepActiveToken];
- false -> []
- end.
-
-enc_EventDM({'EventDM',Val}, State) ->
- enc_EventDM(Val, State);
-enc_EventDM({Tag, Val}, State) ->
- case Tag of
- digitMapName ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Val, State)
- ];
- digitMapValue ->
- [
- ?DigitMapToken,
- ?LBRKT_INDENT(State),
- enc_DigitMapValue(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
- _ ->
- error({invalid_EventDM_tag, Tag})
- end.
-
-
-enc_embedFirst(RID, Evs, State)
- when (RID =/= asn1_NOVALUE) andalso is_list(Evs) andalso (Evs =/= []) ->
- %% d("enc_embedFirst -> entry with"
- %% "~n RID: ~p"
- %% "~n Evs: ~p", [RID, Evs]),
- [
- ?EventsToken,
- ?EQUAL,
- enc_RequestID(RID, State),
- ?LBRKT_INDENT(State),
- enc_list([{Evs, fun enc_SecondRequestedEvent/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_embedFirst(_RID, _Evs, _State) ->
- %% d("enc_embedFirst -> entry"),
- [
- ?EventsToken
- ].
-
-
-enc_SecondRequestedEvent(#'SecondRequestedEvent'{pkgdName = N,
- streamID = SID,
- evParList = EPL,
- eventAction = EA}, State) ->
- PkgdName = ?META_ENC(event, N),
- [
- enc_PkgdName(PkgdName, State),
- enc_opt_brackets(
- enc_list(
- [{[SID], fun enc_eventStream/2},
- {EPL, fun enc_eventOther/2} |
- decompose_secondRequestedActions(EA)],
- ?INC_INDENT(State)),
- State)
- ].
-
-decompose_secondRequestedActions(asn1_NOVALUE) ->
- [];
-decompose_secondRequestedActions(Val)
- when is_record(Val, 'SecondRequestedActions') ->
- [
- {[Val#'SecondRequestedActions'.keepActive],
- fun enc_keepActive/2},
- {[Val#'SecondRequestedActions'.eventDM],
- fun enc_EventDM/2},
- {[Val#'SecondRequestedActions'.signalsDescriptor],
- fun enc_embeddedSignalsDescriptor/2}
- ].
-
-enc_embeddedSignalsDescriptor(Val, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_SignalsDescriptor(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_EventBufferDescriptor({'EventBufferDescriptor',Val}, State) ->
- enc_EventBufferDescriptor(Val, State);
-enc_EventBufferDescriptor([], _State) ->
- [
- ?EventBufferToken
- ];
-enc_EventBufferDescriptor(EventSpecs, State)
- when is_list(EventSpecs) andalso (length(EventSpecs) >= 1) ->
- [
- ?EventBufferToken,
- ?LBRKT_INDENT(State),
- enc_eventSpecs(EventSpecs, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_EventBufferDescriptor(EventSpecs, _State) ->
- error({bad_eventSpecs, EventSpecs}).
-
-enc_eventSpecs([Mand | Opt], State) ->
- [enc_eventSpec(Mand, State),
- [[?COMMA_INDENT(State), enc_eventSpec(Val, State)] || Val <- Opt]].
-
-enc_eventSpec(#'EventSpec'{eventName = Name,
- streamID = SID,
- eventParList = EPL}, State) ->
- [
- enc_EventName(Name, State),
- enc_opt_brackets(
- enc_list([{[SID], fun enc_eventStream/2},
- {EPL, fun enc_eventOther/2}],
- ?INC_INDENT(State)),
- State)
- ].
-
-enc_SignalsDescriptor({'SignalsDescriptor',Val}, State) ->
- enc_SignalsDescriptor(Val, State);
-enc_SignalsDescriptor([], _State) ->
- [
- ?SignalsToken
- ];
-enc_SignalsDescriptor(List, State) when is_list(List) ->
- [
- ?SignalsToken,
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_SignalRequest/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_SignalRequest({'SignalRequest',Val}, State) ->
- enc_SignalRequest(Val, State);
-enc_SignalRequest({Tag, Val}, State) ->
- case Tag of
- signal ->
- enc_Signal(Val, State);
- seqSigList ->
- enc_SeqSigList(Val, State);
- _ ->
- error({invalid_SignalRequest_tag, Tag})
- end.
-
-
-enc_SeqSigList(Val, State)
- when is_record(Val, 'SeqSigList') ->
- [
- ?SignalListToken,
- ?EQUAL,
- enc_UINT16(Val#'SeqSigList'.id, State),
- ?LBRKT_INDENT(State),
- enc_list([{Val#'SeqSigList'.signalList, fun enc_Signal/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_Signal(Val, State)
- when is_record(Val, 'Signal') ->
- [
- enc_SignalName(Val#'Signal'.signalName, State),
- enc_opt_brackets(
- enc_list([{[Val#'Signal'.streamID], fun enc_sigStream/2},
- {[Val#'Signal'.sigType], fun enc_sigSignalType/2},
- {[Val#'Signal'.duration], fun enc_sigDuration/2},
- {[Val#'Signal'.notifyCompletion], fun enc_notifyCompletion/2},
- {[Val#'Signal'.keepActive], fun enc_keepActive/2},
- {Val#'Signal'.sigParList, fun enc_sigOther/2},
- {[Val#'Signal'.direction], fun enc_SignalDirection/2},
- {[Val#'Signal'.requestID], fun enc_sigRequestID/2}],
- ?INC_INDENT(State)),
- State)
- ].
-
-enc_sigStream(Val, State) ->
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(Val, State)
- ].
-
-enc_sigSignalType(Val, State) ->
- [
- ?SignalTypeToken,
- ?EQUAL,
- enc_SignalType(Val, State)
- ].
-
-enc_sigDuration(Val, State) ->
- [
- ?DurationToken,
- ?EQUAL,
- enc_UINT16(Val, State)
- ].
-
-enc_notifyCompletion(List, State) when is_list(List) ->
- [
- ?NotifyCompletionToken,
- ?EQUAL,
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_notifyCompletionItem/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_notifyCompletionItem(Val, _State) ->
- case Val of
- onTimeOut -> ?TimeOutToken;
- onInterruptByEvent -> ?InterruptByEventToken;
- onInterruptByNewSignalDescr -> ?InterruptByNewSignalsDescrToken;
- otherReason -> ?OtherReasonToken
- end.
-
-enc_SignalType({'SignalType',Val}, State) ->
- enc_SignalType(Val, State);
-enc_SignalType(Val, _State) ->
- case Val of
- brief -> ?BriefToken;
- onOff -> ?OnOffToken;
- timeOut -> ?TimeOutToken
- end.
-
-enc_SignalName({'SignalName',Val}, State)->
- enc_SignalName(Val, State);
-enc_SignalName(Val, State) ->
- PkgdName = ?META_ENC(signal, Val),
- enc_PkgdName(PkgdName, State).
-
-enc_sigOther(Val, State)
- when is_record(Val, 'SigParameter') ->
- [
- enc_Name(Val#'SigParameter'.sigParameterName, State),
- enc_propertyParmValues(Val#'SigParameter'.value,
- Val#'SigParameter'.extraInfo,
- State)
- ].
-
-enc_SignalDirection({'SignalDirection', Val}, State) ->
- enc_SignalDirection(Val, State);
-enc_SignalDirection(Val, _State) ->
- [
- ?DirectionToken,
- ?EQUAL,
- case Val of
- internal -> ?InternalToken;
- external -> ?ExternalToken;
- both -> ?BothToken
- end
- ].
-
-enc_sigRequestID(Val, State) ->
- [
- ?RequestIDToken,
- ?EQUAL,
- enc_RequestID(Val, State)
- ].
-
-enc_RequestID({'RequestID',Val}, State) ->
- enc_RequestID(Val, State);
-enc_RequestID(Val, _State) when (Val =:= ?megaco_all_request_id) ->
- "*";
-enc_RequestID(Val, State) ->
- enc_UINT32(Val, State).
-
-enc_ModemDescriptor(MD, _State) ->
- error({deprecated, MD}).
-
-%% Corr1:
-%% As of corr 1 ModemDescriptor has been deprecated.
-%% 7.1.2: ...shall not be included as part of a transmitted content and,
-%% if received, shall either be ignored or processed at the option
-%% of the implementation. ...
-%% enc_ModemDescriptor(#'ModemDescriptor'{mtl = [Val],
-%% mpl = [],
-%% nonStandardData = asn1_NOVALUE},
-%% State) ->
-%% [
-%% ?ModemToken,
-%% ?EQUAL,
-%% enc_ModemType(Val, State)
-%% ];
-%% enc_ModemDescriptor(Val, State)
-%% when is_record(Val, 'ModemDescriptor') ->
-%% [
-%% ?ModemToken,
-%% ?LSBRKT,
-%% enc_list([{Val#'ModemDescriptor'.mtl, fun enc_ModemType/2}], State),
-%% ?RSBRKT,
-%% enc_opt_brackets(
-%% enc_list([{Val#'ModemDescriptor'.mpl, fun enc_PropertyParm/2}],
-%% ?INC_INDENT(State)),
-%% State)
-%% %% BUGBUG: Is PropertyParm == NAME parmValue?
-%% ].
-
-%% enc_ModemDescriptor(Val, State)
-%% when is_record(Val, 'ModemDescriptor') ->
-%% [
-%% ?ModemToken,
-%% %% BUGBUG: Does never generate: EQUAL modemType
-%% ?LSBRKT,
-%% enc_list([{Val#'ModemDescriptor'.mtl, fun enc_ModemType/2}], State),
-%% ?RSBRKT,
-%% enc_opt_brackets(
-%% enc_list([{Val#'ModemDescriptor'.mpl, fun enc_PropertyParm/2}],
-%% ?INC_INDENT(State)),
-%% State)
-%% %% BUGBUG: Is PropertyParm == NAME parmValue?
-%% ].
-
-%% Corr1: See ModemDescriptor above
-%% enc_ModemType({'ModemType',Val}, State)->
-%% enc_ModemType(Val, State);
-%% enc_ModemType(Val, _State) ->
-%% %% BUGBUG: Does not handle extensionParameter
-%% case Val of
-%% v18 -> ?V18Token;
-%% v22 -> ?V22Token;
-%% v22bis -> ?V22bisToken;
-%% v32 -> ?V32Token;
-%% v32bis -> ?V32bisToken;
-%% v34 -> ?V34Token;
-%% v90 -> ?V90Token;
-%% v91 -> ?V91Token;
-%% synchISDN -> ?SynchISDNToken
-%% end.
-
-enc_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = asn1_NOVALUE,
- digitMapValue = Value} = Val,
- State)
- when (Value =/= asn1_NOVALUE) ->
- case is_empty_DigitMapValue(Value) of
- true ->
- error({invalid_DigitMapDescriptor, Val});
- false ->
- [
- ?DigitMapToken,
- ?EQUAL,
- ?LBRKT_INDENT(State),
- enc_DigitMapValue(Value, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end;
-enc_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name,
- digitMapValue = asn1_NOVALUE},
- State)
- when (Name =/= asn1_NOVALUE) ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State)
- ];
-enc_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name,
- digitMapValue = Value},
- State)
- when (Name =/= asn1_NOVALUE) andalso (Value =/= asn1_NOVALUE) ->
- case is_empty_DigitMapValue(Value) of
- true ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State)
- ];
- false ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State),
- ?LBRKT_INDENT(State),
- enc_DigitMapValue(Value, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end;
-enc_DigitMapDescriptor(BadVal, _State) ->
- error({invalid_DigitMapDescriptor, BadVal}).
-
-enc_DigitMapName({'DigitMapName',Val}, State) ->
- enc_DigitMapName(Val, State);
-enc_DigitMapName(Val, State) ->
- enc_Name(Val, State).
-
-is_empty_DigitMapValue(#'DigitMapValue'{startTimer = asn1_NOVALUE,
- shortTimer = asn1_NOVALUE,
- longTimer = asn1_NOVALUE,
- digitMapBody = [],
- durationTimer = asn1_NOVALUE}) ->
- true;
-is_empty_DigitMapValue(#'DigitMapValue'{}) ->
- false.
-
-enc_DigitMapValue(Val, State)
- when is_record(Val, 'DigitMapValue') ->
- [
- enc_timer(Val#'DigitMapValue'.startTimer, $T, State),
- enc_timer(Val#'DigitMapValue'.shortTimer, $S, State),
- enc_timer(Val#'DigitMapValue'.longTimer, $L, State),
- enc_timer(Val#'DigitMapValue'.durationTimer, $Z, State),
- %% BUGBUG: digitMapBody not handled at all
- enc_STRING(Val#'DigitMapValue'.digitMapBody, State, 0, infinity)
- ].
-
-enc_timer(asn1_NOVALUE, _Prefix, _State) ->
- [];
-enc_timer(Timer, Prefix, State) ->
- [
- Prefix,
- ?COLON,
- enc_DIGIT(Timer, State, 0, 99),
- ?COMMA_INDENT(State)
- ].
-
-enc_ServiceChangeParm(Val, State)
- when is_record(Val, 'ServiceChangeParm') ->
- [
- ?ServicesToken,
- ?LBRKT_INDENT(State),
- enc_list([{[Val#'ServiceChangeParm'.serviceChangeMethod],
- fun enc_ServiceChangeMethod/2},
- {[Val#'ServiceChangeParm'.serviceChangeAddress],
- fun enc_ServiceChangeAddress/2},
- {[Val#'ServiceChangeParm'.serviceChangeVersion],
- fun enc_serviceChangeVersion/2},
- {[Val#'ServiceChangeParm'.serviceChangeProfile],
- fun enc_ServiceChangeProfile/2},
- {[{reason, Val#'ServiceChangeParm'.serviceChangeReason}],
- fun enc_serviceChangeReason/2},
- {[Val#'ServiceChangeParm'.serviceChangeDelay],
- fun enc_serviceChangeDelay/2},
- {[Val#'ServiceChangeParm'.serviceChangeMgcId],
- fun enc_serviceChangeMgcId/2},
- {[Val#'ServiceChangeParm'.timeStamp],
- fun enc_TimeNotation/2},
- {Val#'ServiceChangeParm'.serviceChangeInfo,
- fun enc_AuditDescriptor/2},
- {[Val#'ServiceChangeParm'.serviceChangeIncompleteFlag],
- fun('NULL', _) -> ?ServiceChangeIncompleteToken end}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-
-enc_ServiceChangeMethod({'ServiceChangeMethod',Val}, State) ->
- enc_ServiceChangeMethod(Val, State);
-enc_ServiceChangeMethod(Val, _State) ->
- [
- ?MethodToken,
- ?EQUAL,
- case Val of
- failover -> ?FailoverToken;
- forced -> ?ForcedToken;
- graceful -> ?GracefulToken;
- restart -> ?RestartToken;
- disconnected -> ?DisconnectedToken;
- handOff -> ?HandOffToken
- end
- %% BUGBUG: extension
- ].
-
-enc_ServiceChangeAddress({'ServiceChangeAddress',Val}, State) ->
- enc_ServiceChangeAddress(Val, State);
-enc_ServiceChangeAddress({Tag, Val}, State) ->
- [
- ?ServiceChangeAddressToken,
- ?EQUAL,
- case Tag of
- portNumber ->
- enc_portNumber(Val, State);
- ip4Address ->
- enc_IP4Address(Val, State);
- ip6Address ->
- enc_IP6Address(Val, State);
- domainName ->
- enc_DomainName(Val, State);
- deviceName ->
- enc_PathName(Val, State);
- mtpAddress ->
- enc_mtpAddress(Val, State);
- _ ->
- error({invalid_ServiceChangeAddress_tag, Tag})
- end
- ].
-
-enc_serviceChangeVersion(Val, State) ->
- [
- ?VersionToken,
- ?EQUAL,
- enc_version(Val, State)
- ].
-
-enc_ServiceChangeProfile(#'ServiceChangeProfile'{profileName = Name,
- version = Version},
- State) ->
- [
- ?ProfileToken,
- ?EQUAL,
- enc_Name(Name, State),
- ?SLASH,
- enc_version(Version, State)
- ].
-
-enc_serviceChangeReason({reason, Val}, State) ->
- case Val of
- asn1_NOVALUE ->
- [];
- [List] when is_list(List) ->
- [
- ?ReasonToken,
- ?EQUAL,
- enc_QUOTED_STRING(List,State) % OTP-4632 enc_Value(List, State)
- ]
- end.
-
-enc_serviceChangeDelay(Val, State) ->
- [
- ?DelayToken,
- ?EQUAL,
- enc_UINT32(Val, State)
- ].
-
-enc_serviceChangeMgcId(Val, State) ->
- [
- ?MgcIdToken,
- ?EQUAL,
- enc_MId(Val, State)
- ].
-
-enc_portNumber(Val, State) when is_integer(Val) andalso (Val >= 0) ->
- enc_UINT16(Val, State).
-
-enc_ServiceChangeResParm(Val, State)
- when is_record(Val, 'ServiceChangeResParm') ->
- enc_list([{[Val#'ServiceChangeResParm'.serviceChangeAddress],
- fun enc_ServiceChangeAddress/2},
- {[Val#'ServiceChangeResParm'.serviceChangeVersion],
- fun enc_serviceChangeVersion/2},
- {[Val#'ServiceChangeResParm'.serviceChangeProfile],
- fun enc_ServiceChangeProfile/2},
- {[Val#'ServiceChangeResParm'.serviceChangeMgcId],
- fun enc_serviceChangeMgcId/2},
- {[Val#'ServiceChangeResParm'.timeStamp],
- fun enc_TimeNotation/2}],
- State).
-
-enc_PackagesDescriptor({'PackagesDescriptor',Val}, State) ->
- enc_PackagesDescriptor(Val, State);
-enc_PackagesDescriptor(Val, State) ->
- [
- ?PackagesToken,
- ?LBRKT_INDENT(State),
- enc_list([{Val, fun enc_PackagesItem/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_PackagesItem(Val, State)
- when is_record(Val, 'PackagesItem') ->
- PkgdName = ?META_ENC(package, Val#'PackagesItem'.packageName),
- [
- enc_Name(PkgdName, State),
- "-",
- enc_UINT16(Val#'PackagesItem'.packageVersion, State)
- ].
-
-enc_StatisticsDescriptor({'StatisticsDescriptor',Val}, State) ->
- enc_StatisticsDescriptor(Val, State);
-enc_StatisticsDescriptor(List, State) when is_list(List) ->
- [
- ?StatsToken,
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_StatisticsParameter/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_StatisticsParameter(Val, State)
- when is_record(Val, 'StatisticsParameter') ->
- PkgdName = ?META_ENC(statistics, Val#'StatisticsParameter'.statName),
- case Val#'StatisticsParameter'.statValue of
- asn1_NOVALUE ->
- [
- enc_PkgdName(PkgdName, State)
- ];
- [StatVal] when is_list(StatVal) ->
- [
- enc_PkgdName(PkgdName, State),
- ?EQUAL,
- enc_Value(StatVal, State)
- ]
- end.
-
-enc_TimeNotation(Val, State)
- when is_record(Val, 'TimeNotation') ->
- [
- enc_STRING(Val#'TimeNotation'.date, State, 8, 8), % "yyyymmdd"
- "T",
- enc_STRING(Val#'TimeNotation'.time, State, 8, 8) % "hhmmssss"
- ].
-
-%% BUGBUG: Does not verify that string must contain at least one char
-%% BUGBUG: This violation of the is required in order to comply with
-%% BUGBUG: the dd/ce ds parameter that may possibly be empty.
-enc_Value({'Value',Val}, State) ->
- enc_Value(Val, State);
-enc_Value(String, _State) ->
- case quoted_string_count(String, 0, true, false) of
- {_, 0, _} ->
- [?DQUOTE, String, ?DQUOTE];
- {false, _, _} ->
- [?DQUOTE, String, ?DQUOTE];
- {true, _, _} ->
- [String]
- end.
-
-quoted_string_count([?DoubleQuoteToken | T], 0 = Count, _IsSafe, _MaybeQuoted) ->
- %% Already a quoted string. Make sure it ends
- quoted_string_count(T, Count + 1, true, true);
-quoted_string_count([?DoubleQuoteToken], Count, IsSafe, true = MaybeQuoted) ->
- %% An explicitly quoted string
- {IsSafe, Count, MaybeQuoted};
-quoted_string_count([H | T], Count, IsSafe, MaybeQuoted) ->
- case ?classify_char(H) of
- safe_char_upper -> quoted_string_count(T, Count + 1, IsSafe, MaybeQuoted);
- safe_char -> quoted_string_count(T, Count + 1, IsSafe, MaybeQuoted);
- rest_char -> quoted_string_count(T, Count + 1, false, MaybeQuoted);
- white_space -> quoted_string_count(T, Count + 1, false, MaybeQuoted);
- _ -> error({illegal_char, H})
- end;
-quoted_string_count([], _Count, _IsSafe, true = _MaybeQuoted) ->
- error({illegal_char, ?DoubleQuoteToken});
-quoted_string_count([], Count, IsSafe, MaybeQuoted) ->
- {IsSafe, Count, MaybeQuoted}.
-
-enc_DigitString(String, _State) when is_list(String) ->
- [?DQUOTE, String, ?DQUOTE].
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% Encode an octet string, escape } by \ if necessary
-enc_OCTET_STRING(List, State, Min, Max) ->
- do_enc_OCTET_STRING(List, State, Min, Max, 0).
-
-do_enc_OCTET_STRING([H | T], State, Min, Max, Count) ->
- case H of
- $} ->
- [$\\, H | do_enc_OCTET_STRING(T, State, Min, Max, Count + 1)];
- _ ->
- [H | do_enc_OCTET_STRING(T, State, Min, Max, Count + 1)]
- end;
-do_enc_OCTET_STRING([], _State, Min, Max, Count) ->
- verify_count(Count, Min, Max),
- [].
-
-enc_QUOTED_STRING(String, _State) when is_list(String) ->
- case quoted_string_count(String, 0, true, false) of
- {_IsSafe, Count, false = _QuotedString} ->
- verify_count(Count, 1, infinity),
- [?DQUOTE, String, ?DQUOTE];
- {_IsSafe, Count, true = _QuotedString} ->
- verify_count(Count, 3, infinity), % quotes not included in the count
- [String]
- end.
-
-%% The internal format of hex digits is a list of octets
-%% Min and Max means #hexDigits
-%% Leading zeros are prepended in order to fulfill Min
-enc_HEXDIG(Octets, State, Min, Max) when is_list(Octets) ->
- do_enc_HEXDIG(Octets, State, Min, Max, 0, []).
-
-do_enc_HEXDIG([Octet | Rest], State, Min, Max, Count, Acc)
- when (Octet >= 0) andalso (Octet =< 255) ->
- Hex = hex(Octet), % OTP-4921
- if
- Octet =< 15 ->
- Acc2 = [[$0|Hex]|Acc], % OTP-4921
- do_enc_HEXDIG(Rest, State, Min, Max, Count + 2, ["0" | Acc2]);
- true ->
- Acc2 = [Hex|Acc], % OTP-4921
- do_enc_HEXDIG(Rest, State, Min, Max, Count + 2, Acc2)
- end;
-do_enc_HEXDIG([], State, Min, Max, Count, Acc)
- when is_integer(Min) andalso (Count < Min) ->
- do_enc_HEXDIG([0], State, Min, Max, Count, Acc);
-do_enc_HEXDIG([], _State, Min, Max, Count, Acc) -> %% OTP-4710
- verify_count(Count, Min, Max),
- lists:reverse(Acc).
-
-enc_DIGIT(Val, State, Min, Max) ->
- enc_integer(Val, State, Min, Max).
-
-enc_STRING(String, _State, Min, Max) when is_list(String) ->
- verify_count(length(String), Min, Max),
- String.
-
-enc_UINT16(Val, State) ->
- enc_integer(Val, State, 0, 65535).
-
-enc_UINT32(Val, State) ->
- enc_integer(Val, State, 0, 4294967295).
-
-enc_integer(Val, _State, Min, Max) ->
- verify_count(Val, Min, Max),
- integer_to_list(Val).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Encodes a list of elements with separator tokens between
-%% the elements. Optional asn1_NOVALUE values are ignored.
-
-enc_list(List, State) ->
- enc_list(List, State, fun(_S) -> ?COMMA_INDENT(_S) end, false).
-
--dialyzer({nowarn_function, enc_list/4}). % Future compat
-enc_list([], _State, _SepEncoder, _NeedsSep) ->
- [];
-enc_list([{Elems, ElemEncoder} | Tail], State, SepEncoder, NeedsSep) ->
- case do_enc_list(Elems, State, ElemEncoder, SepEncoder, NeedsSep) of
- [] ->
- enc_list(Tail, State, SepEncoder, NeedsSep);
- List ->
- [List,
- enc_list(Tail, State, SepEncoder, true)]
- end;
-enc_list(A, B, C, D) ->
- error({invalid_list, A, B, C, D}).
-
-do_enc_list(asn1_NOVALUE, _State, _ElemEncoder, _SepEncoder, _NeedsSep) ->
- [];
-do_enc_list([], _State, _ElemEncoder, _SepEncoder, _NeedsSep) ->
- [];
-do_enc_list([asn1_NOVALUE | T], State, ElemEncoder, SepEncoder, NeedsSep) ->
- do_enc_list(T, State, ElemEncoder, SepEncoder, NeedsSep);
-do_enc_list([H | T], State, ElemEncoder, SepEncoder, NeedsSep)
- when is_function(ElemEncoder) andalso is_function(SepEncoder) ->
- case ElemEncoder(H, State) of
- [] ->
- do_enc_list(T, State, ElemEncoder, SepEncoder, NeedsSep);
- List when NeedsSep =:= true ->
- [SepEncoder(State),
- List, do_enc_list(T, State, ElemEncoder, SepEncoder, true)];
- List when NeedsSep =:= false ->
- [List,
- do_enc_list(T, State, ElemEncoder, SepEncoder, true)]
- end.
-
-%% Add brackets if list is non-empty
-enc_opt_brackets([], _State) ->
- [];
-enc_opt_brackets(List, _State) when is_list(List) ->
- [?LBRKT_INDENT(_State), List, ?RBRKT_INDENT(_State)].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% Int -> list of hex chars
-hex(Int) ->
- hexi(get_lo_bits(Int, 4), []).
-
-hexi({0, Lo}, Ack) ->
- [hex4(Lo) | Ack];
-hexi({Hi, Lo} , Ack) ->
- hexi(get_lo_bits(Hi, 4), [hex4(Lo) | Ack]).
-
-hex4(Int) when Int < 10 ->
- Int + $0;
-hex4(Int) ->
- ($A - 10) + Int.
-
-get_lo_bits(Int, Size) ->
- Lo = Int band ones_mask(Size),
- Hi = Int bsr Size,
- {Hi, Lo}.
-
-ones_mask(Ones) ->
- (1 bsl Ones) - 1.
-
-%% Verify that Count is within the range of Min and Max
-verify_count(Count, Min, Max) ->
- if
- is_integer(Count) ->
- if
- is_integer(Min) andalso (Count >= Min) ->
- if
- is_integer(Max) andalso (Count =< Max) ->
- Count;
- Max =:= infinity ->
- Count;
- true ->
- error({count_too_large, Count, Max})
- end;
- true ->
- error({count_too_small, Count, Min})
- end;
- true ->
- error({count_not_an_integer, Count})
- end.
-
-
-
-
-%% -------------------------------------------------------------------
-
-%% d(F) ->
-%% d(F,[]).
-%% d(F, A) ->
-%% d(get(dbg), F, A).
-
-%% d(true, F, A) ->
-%% io:format("~p:" ++ F ++ "~n", [?MODULE | A]);
-%% d(_, _, _) ->
-%% ok.
-
-
diff --git a/lib/megaco/src/text/megaco_text_gen_prev3b.hrl b/lib/megaco/src/text/megaco_text_gen_prev3b.hrl
deleted file mode 100644
index de64f8bbdf..0000000000
--- a/lib/megaco/src/text/megaco_text_gen_prev3b.hrl
+++ /dev/null
@@ -1,2964 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2019. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Encode V2 Megaco/H.248 text messages from internal form
-%% The following was changed:
-%% - MuxType (Nx64kToken)
-%% - auditItem (terminationAudit)
-%% - serviceChangeParm (auditItem)
-%%
-%% The following was added:
-%% - All IndAud stuff
-%%----------------------------------------------------------------------
-
-%% -define(d(F,A), io:format("~w:" ++ F ++ "~n", [?MODULE|A])).
-
--define(META_ENC(Type, Item), Item) .
-%% -define(META_ENC(Type, Item), megaco_meta_package:encode(text, Type, Item)).
-%% -define(META_DEC(Type, Item), megaco_meta_package:decode(text, Type, Item)).
-
-enc_MegacoMessage(Val) ->
- State = ?INIT_INDENT,
- enc_MegacoMessage(Val, State).
-
-enc_MegacoMessage(#'MegacoMessage'{authHeader = asn1_NOVALUE,
- mess = Mess}, State) ->
- [
- ?LWSP,
- enc_Message(Mess, State)
- ];
-enc_MegacoMessage(#'MegacoMessage'{authHeader = Auth,
- mess = Mess}, State) ->
- [
- ?LWSP,
- enc_AuthenticationHeader(Auth, State),
- enc_Message(Mess, State)
- ].
-
-%% Note that encoding the transaction this way
-%% make the message look a bit strange.
-enc_Transaction(Val) ->
- State = ?INIT_INDENT,
- enc_Transaction(Val, State).
-
-%% Note that encoding the action request's this way
-%% make the message look a bit strange.
-enc_ActionRequests(Val) ->
- State = ?INIT_INDENT,
- enc_TransactionRequest_actions(Val, State).
-
-%% Note that encoding the action request this way
-%% make the message look a bit strange.
-enc_ActionRequest(Val) ->
- State = ?INIT_INDENT,
- enc_ActionRequest(Val, State).
-
-enc_CommandRequest(Val) ->
- State = ?INIT_INDENT,
- enc_CommandRequest(Val, State).
-
-enc_ActionReply(Val) ->
- State = ?INIT_INDENT,
- enc_ActionReply(Val, State).
-
-enc_AuthenticationHeader(asn1_NOVALUE, _State) ->
- [];
-enc_AuthenticationHeader(Val, State)
- when is_record(Val, 'AuthenticationHeader') ->
- [
- ?AuthToken,
- ?EQUAL,
- enc_SecurityParmIndex(Val#'AuthenticationHeader'.secParmIndex, State),
- ?COLON,
- enc_SequenceNum(Val#'AuthenticationHeader'.seqNum, State),
- ?COLON,
- enc_AuthData(Val#'AuthenticationHeader'.ad, State),
- ?SEP_INDENT(State)
- ].
-
-enc_SecurityParmIndex({'SecurityParmIndex',Val}, State) ->
- enc_SecurityParmIndex(Val, State);
-enc_SecurityParmIndex(Val, State) ->
- [
- "0x",
- enc_HEXDIG(Val, State, 8, 8)
- ].
-
-enc_SequenceNum({'SequenceNum',Val}, State) ->
- enc_SequenceNum(Val, State);
-enc_SequenceNum(Val, State) ->
- [
- "0x",
- enc_HEXDIG(Val, State, 8, 8)
- ].
-
-enc_AuthData({'AuthData',Val}, State) ->
- enc_AuthData(Val, State);
-enc_AuthData(Val, State) ->
- [
- "0x",
- enc_HEXDIG(Val, State, 24, 64) %% OTP-4710
- ].
-
-enc_Message(Val, State)
- when is_record(Val, 'Message') ->
- [
- ?MegacopToken,
- ?SLASH,
- enc_version(Val#'Message'.version, State),
- ?SEP,
- enc_MId(Val#'Message'.mId, State),
- ?SEP_INDENT(State),
- enc_Message_messageBody(Val#'Message'.messageBody, State)
- ].
-
-enc_version(Val, State) when is_integer(Val) andalso (Val >= 0) ->
- enc_DIGIT(Val, State, 0, 99).
-
-enc_Message_messageBody({'Message_messageBody',Val}, State) ->
- enc_Message_messageBody(Val, State);
-enc_Message_messageBody({Tag, Val}, State) ->
- case Tag of
- messageError ->
- enc_ErrorDescriptor(Val, State);
- transactions ->
- enc_Message_messageBody_transactions(Val, State);
- _ ->
- error({invalid_messageBody_tag, Tag})
- end.
-
-enc_Message_messageBody_transactions({'Message_messageBody_transactions',Val},
- State) ->
- enc_Message_messageBody_transactions(Val, State);
-enc_Message_messageBody_transactions(Val, State)
- when is_list(Val) andalso (Val =/= []) ->
- [enc_Transaction(T, State) || T <- Val].
-
-enc_MId({'MId',Val}, State) ->
- enc_MId(Val, State);
-enc_MId({Tag, Val}, State) ->
- case Tag of
- ip4Address ->
- enc_IP4Address(Val, State);
- ip6Address ->
- enc_IP6Address(Val, State);
- domainName ->
- enc_DomainName(Val, State);
- deviceName ->
- enc_PathName(Val, State);
- mtpAddress ->
- enc_mtpAddress(Val, State);
- _ ->
- error({invalid_MId_tag, Tag})
- end.
-
-enc_mtpAddress(Val, State) ->
- [
- ?MtpToken,
- ?LBRKT,
- enc_OCTET_STRING(Val, State, 2, 4),
- ?RBRKT
- ].
-
-enc_DomainName(#'DomainName'{portNumber = asn1_NOVALUE,
- name = Name}, State) ->
- [
- $<,
- %% BUGBUG: (ALPHA / DIGIT) *63(ALPHA / DIGIT / "-" / ".")
- enc_STRING(Name, State, 1, 64),
- $>
- ];
-enc_DomainName(#'DomainName'{portNumber = PortNumber,
- name = Name}, State) ->
- [
- $<,
- %% BUGBUG: (ALPHA / DIGIT) *63(ALPHA / DIGIT / "-" / ".")
- enc_STRING(Name, State, 1, 64),
- $>,
- $:,
- enc_portNumber(PortNumber, State)
- ].
-
-enc_IP4Address(#'IP4Address'{portNumber = asn1_NOVALUE,
- address = [A1, A2, A3, A4]}, State) ->
- [
- $[,
- enc_V4hex(A1, State),
- ?DOT,
- enc_V4hex(A2, State),
- ?DOT,
- enc_V4hex(A3, State),
- ?DOT,
- enc_V4hex(A4, State),
- $]
- ];
-enc_IP4Address(#'IP4Address'{portNumber = PortNumber,
- address = [A1, A2, A3, A4]}, State) ->
- [
- $[,
- enc_V4hex(A1, State),
- ?DOT,
- enc_V4hex(A2, State),
- ?DOT,
- enc_V4hex(A3, State),
- ?DOT,
- enc_V4hex(A4, State),
- $],
- $:,
- enc_portNumber(PortNumber, State)
- ].
-
-enc_V4hex(Val, State) ->
- enc_DIGIT(Val, State, 0, 255).
-
-enc_IP6Address(#'IP6Address'{portNumber = asn1_NOVALUE,
- address = Addr}, State)
- when is_list(Addr) andalso (length(Addr) =:= 16) ->
- [
- $[,
- enc_IP6Address_address(Addr, State),
- $]
- ];
-enc_IP6Address(#'IP6Address'{portNumber = PortNumber,
- address = Addr}, State)
- when is_list(Addr) andalso (length(Addr) =:= 16) ->
- [
- $[,
- enc_IP6Address_address(Addr, State),
- $],
- $:,
- enc_portNumber(PortNumber, State)
- ].
-
-enc_IP6Address_address([0, 0|Addr], State) ->
- enc_IP6Address_address2(Addr, 1, false, true, State);
-enc_IP6Address_address(Addr, State) ->
- enc_IP6Address_address2(Addr, 0, false, false, State).
-
-enc_IP6Address_address2([0,0], 0, _Padding, _First, _State) ->
- [$0];
-enc_IP6Address_address2([0,0], PadN, false, true, _State) when PadN > 0 ->
- [$:, $:]; % Padding from the beginning (all zero's)
-enc_IP6Address_address2([0,0], PadN, false, false, _State) when PadN > 0 ->
- [$:]; % Padding in the middle or end
-enc_IP6Address_address2([0,0], _, true, _First, _State) ->
- [$0];
-enc_IP6Address_address2([N1,N2], 0, _Padding, _First, State) ->
- [enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], 1, _Padding, _First, State) ->
- [$0, $:, enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], PadN, false, true, State) when PadN > 1 ->
- [$:, $:, enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], PadN, false, false, State) when PadN > 1 ->
- [$:, enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], _PadN, true, _First, State) ->
- [enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([0, 0|Ns], PadN, false, First, State) ->
- enc_IP6Address_address2(Ns, PadN+1, false, First, State);
-enc_IP6Address_address2([0, 0|Ns], _PadN, true, _First, State) ->
- [
- $0,
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], 0, Padded, _First, State) ->
- [
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, Padded, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], 1, Padded, _First, State) ->
- [
- $0,
- $:,
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, Padded, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], PadN, false, true, State) when PadN > 1 ->
- %% Padding from the beginning
- [
- $:,
- $:,
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], PadN, false, false, State)
- when PadN > 1 ->
- [
- $:, %% The other ':' has already added
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], _PadN, true, _First, State) ->
- [
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ].
-
-
-enc_hex4([0,0], _State) ->
- $0;
-enc_hex4([0,N], _State) ->
- hex(N);
-enc_hex4([N1, N2], _State) when N2 =< 15 ->
- [hex(N1), $0, hex(N2)];
-enc_hex4([N1, N2], _State) ->
- [hex(N1), hex(N2)].
-
-enc_PathName({'PathName',Val}, State) ->
- enc_PathName(Val, State);
-enc_PathName(Val, State) ->
- %% BUGBUG: ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
- %% BUGBUG: ["@" pathDomainName ]
- enc_STRING(Val, State, 1, 64).
-
-enc_Transaction(Bin, _State) when is_binary(Bin) ->
- [Bin]; %% Already encoded...
-enc_Transaction({'Transaction',Val}, State) ->
- enc_Transaction(Val, State);
-enc_Transaction({Tag, Val}, State) ->
- case Tag of
- transactionRequest ->
- enc_TransactionRequest(Val, State);
- transactionPending ->
- enc_TransactionPending(Val, State);
- transactionReply ->
- enc_TransactionReply(Val, State);
- transactionResponseAck ->
- enc_TransactionResponseAck(Val, State);
- _ ->
- error({invalid_Transaction_tag, Tag})
- end.
-
-enc_TransactionResponseAck([Mand], State) ->
- [
- ?ResponseAckToken,
- ?LBRKT_INDENT(State),
- [enc_TransactionAck(Mand, State)],
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionResponseAck([Mand | Opt], State) ->
- [
- ?ResponseAckToken,
- ?LBRKT_INDENT(State),
- [enc_TransactionAck(Mand, State) |
- [[?COMMA_INDENT(State), enc_TransactionAck(Val, State)] || Val <- Opt]],
- ?RBRKT_INDENT(State)
- ].
-
-enc_TransactionAck(Val, State)
- when is_record(Val, 'TransactionAck') ->
- [
- enc_TransactionId(Val#'TransactionAck'.firstAck, ?INC_INDENT(State)),
- case Val#'TransactionAck'.lastAck of
- asn1_NOVALUE ->
- [];
- LastAck ->
- ["-",enc_TransactionId(LastAck, State)]
- end
- ].
-
-enc_TransactionId({'TransactionId',Val}, State) ->
- enc_TransactionId(Val, State);
-enc_TransactionId(Val, State) ->
- enc_UINT32(Val, State).
-
-enc_TransactionRequest(#'TransactionRequest'{transactionId = Tid,
- actions = Acts}, State) ->
- [
- ?TransToken,
- ?EQUAL,
- enc_TransactionId(Tid, State),
- ?LBRKT_INDENT(State),
- enc_TransactionRequest_actions(Acts, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionRequest(Bin, _State) when is_binary(Bin) ->
- [Bin].
-
-enc_TransactionRequest_actions(Bin, _State) when is_binary(Bin) ->
- [Bin]; %% Already encoded...
-enc_TransactionRequest_actions({'TransactionRequest_actions',Val}, State) ->
- enc_TransactionRequest_actions(Val, State);
-enc_TransactionRequest_actions([Mand], State) ->
- [enc_ActionRequest(Mand, State)];
-enc_TransactionRequest_actions([Mand | Opt], State) ->
- [enc_ActionRequest(Mand, State) |
- [[?COMMA_INDENT(State), enc_ActionRequest(Val, State)] || Val <- Opt]].
-
-enc_TransactionPending(#'TransactionPending'{transactionId = Tid}, State) ->
- [?PendingToken,
- ?EQUAL,
- enc_TransactionId(Tid, State),
- ?LBRKT_INDENT(State),
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionPending(Bin, _State) when is_binary(Bin) ->
- [Bin].
-
-enc_TransactionReply(#'TransactionReply'{transactionId = Tid,
- immAckRequired = Req,
- transactionResult = Res,
- %% These fields are actually not
- %% supported in this implementation,
- %% but because the messenger module
- %% cannot see any diff between the
- %% various v3 implementations...
- segmentNumber = asn1_NOVALUE,
- segmentationComplete = asn1_NOVALUE},
- State) ->
- [
- ?ReplyToken,
- ?EQUAL,
- enc_TransactionId(Tid, State),
- ?LBRKT_INDENT(State),
- enc_immAckRequired(Req, State),
- enc_TransactionReply_transactionResult(Res, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionReply(Bin, _State) when is_binary(Bin) ->
- [Bin].
-
-enc_immAckRequired(Val, _State) ->
- case Val of
- asn1_NOVALUE ->
- [];
- 'NULL' ->
- [?ImmAckRequiredToken, ?COMMA_INDENT(?INC_INDENT(_State))]
- end.
-
-enc_TransactionReply_transactionResult({'TransactionReply_transactionResult',
- Val}, State) ->
- enc_TransactionReply_transactionResult(Val, State);
-enc_TransactionReply_transactionResult({Tag, Val}, State) ->
- case Tag of
- transactionError ->
- enc_ErrorDescriptor(Val, State);
- actionReplies ->
- enc_TransactionReply_transactionResult_actionReplies(Val, State);
- _ ->
- error({invalid_TransactionReply_transactionResult_tag, Tag})
- end.
-
-enc_TransactionReply_transactionResult_actionReplies({'TransactionReply_transactionResult_actionReplies',Val}, State) ->
- enc_TransactionReply_transactionResult_actionReplies(Val, State);
-enc_TransactionReply_transactionResult_actionReplies([Mand], State) ->
- [enc_ActionReply(Mand, State)];
-enc_TransactionReply_transactionResult_actionReplies([Mand | Opt], State) ->
- [enc_ActionReply(Mand, State),
- [[?COMMA_INDENT(State), enc_ActionReply(Val, State)] || Val <- Opt]].
-
-enc_ErrorDescriptor(#'ErrorDescriptor'{errorText = asn1_NOVALUE,
- errorCode = Code}, State) ->
- [
- ?ErrorToken,
- ?EQUAL,
- enc_ErrorCode(Code, State),
- ?LBRKT,
- ?RBRKT
- ];
-enc_ErrorDescriptor(#'ErrorDescriptor'{errorText = Text,
- errorCode = Code}, State) ->
- [
- ?ErrorToken,
- ?EQUAL,
- enc_ErrorCode(Code, State),
- ?LBRKT,
- enc_ErrorText(Text, State),
- ?RBRKT
- ].
-
-enc_ErrorCode({'ErrorCode',Val}, State)->
- enc_ErrorCode(Val, State);
-enc_ErrorCode(Val, State) ->
- enc_DIGIT(Val, State, 0, 999).
-
-enc_ErrorText({'ErrorText',Val}, State) ->
- enc_ErrorText(Val, State);
-enc_ErrorText(Val, State) ->
- enc_QUOTED_STRING(Val, State).
-
-enc_ContextID({'ContextID',Val}, State) ->
- enc_ContextID(Val, State);
-enc_ContextID(Val, State) ->
- case Val of
- ?megaco_all_context_id -> $*;
- ?megaco_null_context_id -> $-;
- ?megaco_choose_context_id -> $$;
- Int when is_integer(Int) -> enc_UINT32(Int, State)
- end.
-
-enc_ActionRequest(Bin, _State) when is_binary(Bin) ->
- [Bin]; %% Already encoded...
-enc_ActionRequest(#'ActionRequest'{contextId = CID,
- contextRequest = asn1_NOVALUE,
- contextAttrAuditReq = asn1_NOVALUE,
- commandRequests = CmdReqs}, State) ->
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(CID, State),
- ?LBRKT_INDENT(State),
- enc_list([{CmdReqs, fun enc_CommandRequest/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_ActionRequest(#'ActionRequest'{contextId = CID,
- contextRequest = CtxReq,
- contextAttrAuditReq = asn1_NOVALUE,
- commandRequests = CmdReqs}, State) ->
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(CID, State),
- ?LBRKT_INDENT(State),
- enc_list([{[CtxReq], fun enc_ContextRequest/2},
- {CmdReqs, fun enc_CommandRequest/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_ActionRequest(#'ActionRequest'{contextId = CID,
- contextRequest = CtxReq,
- contextAttrAuditReq = CtxAAR,
- commandRequests = CmdReqs}, State) ->
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(CID, State),
- ?LBRKT_INDENT(State),
- enc_list([{[CtxReq], fun enc_ContextRequest/2},
- {[CtxAAR], fun enc_ContextAttrAuditRequest/2},
- {CmdReqs, fun enc_CommandRequest/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-%% OTP-5085
-enc_ActionReply(#'ActionReply'{contextId = Id,
- errorDescriptor = ED,
- contextReply = CtxRep,
- commandReply = CmdRep},
- State) ->
-%% d("enc_ActionReply -> entry with"
-%% "~n Id: ~p"
-%% "~n ED: ~p"
-%% "~n CtxRep: ~p"
-%% "~n CmdRep: ~p", [Id, ED, CtxRep, CmdRep]),
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(Id, State),
- ?LBRKT_INDENT(State),
- do_enc_ActionReply(ED, CtxRep, CmdRep, State),
- ?RBRKT_INDENT(State)
- ].
-
-do_enc_ActionReply(asn1_NOVALUE, CtxRep, [], State)
- when (CtxRep =/= asn1_NOVALUE) ->
-%% d("do_enc_ActionReply -> entry with"
-%% "~n CtxRep: ~p", [CtxRep]),
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State))
- ];
-do_enc_ActionReply(asn1_NOVALUE, CtxRep, CmdRep, State)
- when (CtxRep =/= asn1_NOVALUE) andalso (CmdRep =/= []) ->
-%% d("do_enc_ActionReply -> entry with"
-%% "~n CtxRep: ~p"
-%% "~n CmdRep: ~p", [CtxRep, CmdRep]),
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_list([{CmdRep, fun enc_CommandReply/2}],
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(asn1_NOVALUE, asn1_NOVALUE, CmdRep, State)
- when (CmdRep =/= []) ->
-%% d("do_enc_ActionReply -> entry with"
-%% "~n CmdRep: ~p", [CmdRep]),
- [
- enc_list([{CmdRep, fun enc_CommandReply/2}],
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, CtxRep, [], State)
- when (ED =/= asn1_NOVALUE) andalso (CtxRep =/= asn1_NOVALUE) ->
-%% d("do_enc_ActionReply -> entry with"
-%% "~n ED: ~p"
-%% "~n CtxRep: ~p", [ED, CtxRep]),
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_list([{[ED], fun enc_ErrorDescriptor/2}], % Indention cosmetics
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, asn1_NOVALUE, CmdRep, State)
- when (ED =/= asn1_NOVALUE) andalso (CmdRep =/= []) ->
-%% d("do_enc_ActionReply -> entry with"
-%% "~n ED: ~p"
-%% "~n CmdRep: ~p", [ED, CmdRep]),
- [
- enc_list([{CmdRep, fun enc_CommandReply/2},
- {[ED], fun enc_ErrorDescriptor/2}], % Indention cosmetics
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, CtxRep, CmdRep, State)
- when (ED =/= asn1_NOVALUE) andalso
- (CtxRep =/= asn1_NOVALUE) andalso
- (CmdRep =/= []) ->
-%% d("do_enc_ActionReply -> entry with"
-%% "~n ED: ~p"
-%% "~n CtxRep: ~p"
-%% "~n CmdRep: ~p", [ED, CtxRep, CmdRep]),
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_list([{CmdRep, fun enc_CommandReply/2},
- {[ED], fun enc_ErrorDescriptor/2}], % Indention cosmetics
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, asn1_NOVALUE, [], State)
- when ED =/= asn1_NOVALUE ->
-%% d("do_enc_ActionReply -> entry with"
-%% "~n ED: ~p", [ED]),
- [
- enc_ErrorDescriptor(ED, ?INC_INDENT(State))
- ].
-
-
-enc_ContextRequest_priority(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_priority(Val, _State) ->
- {[Val], fun(X,S) -> [?PriorityToken,?EQUAL,enc_UINT16(X, S)] end}.
-
-enc_ContextRequest_emergency(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_emergency(true, _State) ->
- {[?EmergencyToken], fun(Elem, _) -> Elem end};
-enc_ContextRequest_emergency(false, _State) ->
- {[?EmergencyOffToken], fun(Elem, _) -> Elem end}.
-
-enc_ContextRequest_topologyReq(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_topologyReq({'ContextRequest_topologyReq',
- asn1_NOVALUE}, _State) ->
- {[], dummy};
-enc_ContextRequest_topologyReq({'ContextRequest_topologyReq',
- List}, _State) ->
- {List, fun enc_TopologyRequest/2};
-enc_ContextRequest_topologyReq(List, _State) ->
- {[List], fun enc_TopologyRequest/2}.
-
-enc_ContextRequest_iepscallind(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_iepscallind(Bool, _State) ->
- {[Bool], fun enc_iepsValue/2}.
-
-enc_ContextRequest_contextProp(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_contextProp([], _State) ->
- {[], dummy};
-enc_ContextRequest_contextProp(Props, _State) ->
- {[Props], fun(Elem, S) -> enc_contextAttrDescriptor(Elem, contextProps, S) end}.
-
-enc_contextAttrDescriptor([Mand|Opt], contextProps, State) ->
- [
- ?ContextAttrToken,
- ?LBRKT_INDENT(State),
- [enc_PropertyParm(Mand, State) |
- [[?COMMA_INDENT(State), enc_PropertyParm(Val, State)] || Val <- Opt]],
- ?RBRKT_INDENT(State)
- ].
-
-enc_ContextRequest(asn1_NOVALUE, _State) ->
- [];
-enc_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextProp = asn1_NOVALUE}, _State) ->
- [];
-enc_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = [],
- iepscallind = asn1_NOVALUE,
- contextProp = []}, _State) ->
- [];
-enc_ContextRequest(#'ContextRequest'{priority = Prio,
- emergency = Em,
- topologyReq = TR,
- iepscallind = Ieps,
- contextProp = CP}, State) ->
- [
- enc_list([enc_ContextRequest_priority(Prio, State),
- enc_ContextRequest_emergency(Em, State),
- enc_ContextRequest_topologyReq(TR, State),
- enc_ContextRequest_iepscallind(Ieps, State),
- enc_ContextRequest_contextProp(CP, State)],
- State)
- ].
-
-enc_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{topology = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- priority = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextPropAud = asn1_NOVALUE}, _State) ->
- [];
-enc_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{topology = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- priority = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextPropAud = []}, _State) ->
- [];
-enc_ContextAttrAuditRequest(CAAR, State) ->
- [
- ?ContextAuditToken,
- ?LBRKT_INDENT(State),
- enc_IndAudContextAttrDescriptor(CAAR, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudContextAttrDescriptor(
- #'ContextAttrAuditRequest'{topology = Top,
- emergency = Em,
- priority = Prio,
- iepscallind = Ieps,
- contextPropAud = CPA}, State) ->
- [
- ?ContextAttrToken,
- ?LBRKT_INDENT(State),
- enc_list([{[Top], fun('NULL', _) -> ?TopologyToken end},
- {[Em], fun('NULL', _) -> ?EmergencyToken end},
- {[Prio], fun('NULL', _) -> ?PriorityToken end},
- {[Ieps], fun('NULL', _) -> ?IEPSToken end},
- {CPA, fun enc_IndAudPropertyParm/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_CommandRequest(#'CommandRequest'{optional = asn1_NOVALUE,
- wildcardReturn = asn1_NOVALUE,
- command = Cmd}, State) ->
- [
- enc_Command(Cmd, State)
- ];
-enc_CommandRequest(#'CommandRequest'{optional = 'NULL',
- wildcardReturn = asn1_NOVALUE,
- command = Cmd}, State) ->
- [
- "O-",
- enc_Command(Cmd, State)
- ];
-enc_CommandRequest(#'CommandRequest'{optional = asn1_NOVALUE,
- wildcardReturn = 'NULL',
- command = Cmd}, State) ->
- [
- "W-",
- enc_Command(Cmd, State)
- ];
-enc_CommandRequest(#'CommandRequest'{optional = 'NULL',
- wildcardReturn = 'NULL',
- command = Cmd}, State) ->
- [
- "O-",
- "W-",
- enc_Command(Cmd, State)
- ].
-
-enc_Command({'Command',Val}, State) ->
- enc_Command(Val, State);
-enc_Command({Tag, Val}, State) ->
-% d("enc_Command -> entry with"
-% "~n Tag: ~p"
-% "~n Val: ~p", [Tag, Val]),
- case Tag of
- addReq ->
- [?AddToken, enc_AmmRequest(Val, State)];
- moveReq ->
- [?MoveToken, enc_AmmRequest(Val, State)];
- modReq ->
- [?ModifyToken, enc_AmmRequest(Val, State)];
- subtractReq ->
- [?SubtractToken, enc_SubtractRequest(Val, State)];
- auditCapRequest ->
- [?AuditCapToken, enc_AuditRequest(Val, State)];
- auditValueRequest ->
- [?AuditValueToken, enc_AuditRequest(Val, State)];
- notifyReq ->
- [?NotifyToken, enc_NotifyRequest(Val, State)];
- serviceChangeReq ->
- [?ServiceChangeToken, enc_ServiceChangeRequest(Val, State)];
- _ ->
- error({invalid_Command_tag, Tag})
- end.
-
-enc_CommandReply({'CommandReply',Val}, State) ->
- enc_CommandReply(Val, State);
-enc_CommandReply({Tag, Val}, State) ->
-%% d("enc_CommandReply -> entry with"
-%% "~n Tag: ~p"
-%% "~n Val: ~p", [Tag, Val]),
- case Tag of
- addReply ->
- [?AddToken, enc_AmmsReply(Val, State)];
- moveReply ->
- [?MoveToken, enc_AmmsReply(Val, State)];
- modReply ->
- [?ModifyToken, enc_AmmsReply(Val, State)];
- subtractReply ->
- [?SubtractToken, enc_AmmsReply(Val, State)];
- auditCapReply ->
- [?AuditCapToken, enc_AuditReply(Val, State)];
- auditValueReply ->
- [?AuditValueToken, enc_AuditReply(Val, State)];
- notifyReply ->
- [?NotifyToken, enc_NotifyReply(Val, State)];
- serviceChangeReply ->
- [?ServiceChangeToken, enc_ServiceChangeReply(Val, State)];
- _ ->
- error({invalid_CommandReply_tag, Tag})
- end.
-
-enc_TopologyRequest(Val, State)
- when is_list(Val) ->
- [
- ?TopologyToken,
- ?LBRKT_INDENT(State),
- enc_list([{Val, fun enc_TopologyRequest1/2}],?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_TopologyRequest1(#'TopologyRequest'{terminationFrom = From,
- terminationTo = To,
- topologyDirection = Dir}, State) ->
- [
- enc_TerminationID(From, State),
- ?COMMA_INDENT(State),
- enc_TerminationID(To, State),
- ?COMMA_INDENT(State),
- enc_TopologyDirection(Dir, State)
- ].
-
-enc_TopologyDirection(bothway, _State) ->
- ?BothwayToken;
-enc_TopologyDirection(isolate, _State) ->
- ?IsolateToken;
-enc_TopologyDirection(oneway, _State) ->
- ?OnewayToken;
-enc_TopologyDirection(Top, _State) ->
- error({illegal_TopologyDirection, Top}).
-
-enc_iepsValue(Val, _State) ->
- [
- ?IEPSToken,
- ?EQUAL,
- case Val of
- false -> ?OffToken;
- true -> ?OnToken
- end
- ].
-
-
-
-enc_AmmRequest(Val, State)
- when is_record(Val, 'AmmRequest') ->
-% d("enc_AmmRequest -> entry with"
-% "~n Val: ~p", [Val]),
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1(Val#'AmmRequest'.terminationID, State),
- enc_opt_brackets(
- enc_list([{Val#'AmmRequest'.descriptors, fun enc_ammDescriptor/2}],
- ?INC_INDENT(State)),
- State)
- ].
-
-enc_ammDescriptor({Tag, Desc}, State) ->
-% d("enc_ammDescriptor -> entry with"
-% "~n Tag: ~p"
-% "~n Desc: ~p", [Tag, Desc]),
- case Tag of
- mediaDescriptor -> enc_MediaDescriptor(Desc, State);
- modemDescriptor -> enc_ModemDescriptor(Desc, State);
- muxDescriptor -> enc_MuxDescriptor(Desc, State);
- eventsDescriptor -> enc_EventsDescriptor(Desc, State);
- eventBufferDescriptor -> enc_EventBufferDescriptor(Desc, State);
- signalsDescriptor -> enc_SignalsDescriptor(Desc, State);
- digitMapDescriptor -> enc_DigitMapDescriptor(Desc, State);
- auditDescriptor -> enc_AuditDescriptor(Desc, State);
- statisticsDescriptor -> enc_StatisticsDescriptor(Desc, State);
- _ ->
- error({invalid_ammDescriptor_tag, Tag})
- end.
-
-enc_AmmsReply(#'AmmsReply'{terminationID = ID,
- terminationAudit = asn1_NOVALUE}, State) ->
-% d("enc_AmmsReply(asn1_NOVALUE) -> entry with"
-% "~n ID: ~p", [ID]),
- [
- ?EQUAL,
- enc_TerminationIDList1(ID, State)
- ];
-enc_AmmsReply(#'AmmsReply'{terminationID = ID,
- terminationAudit = []}, State) ->
-% d("enc_AmmsReply([]) -> entry with"
-% "~n ID: ~p", [ID]),
- [
- ?EQUAL,
- enc_TerminationIDList1(ID, State)
- ];
-enc_AmmsReply(#'AmmsReply'{terminationID = ID,
- terminationAudit = Res}, State) ->
-% d("enc_AmmsReply -> entry with"
-% "~n ID: ~p"
-% "~n Res: ~p", [ID, Res]),
- [
- ?EQUAL,
- enc_TerminationIDList1(ID, State),
- case lists:flatten(enc_TerminationAudit(Res, ?INC_INDENT(State))) of
- [] ->
- [];
- L ->
- [
- ?LBRKT_INDENT(State),
- L,
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-enc_SubtractRequest(Val, State)
- when is_record(Val, 'SubtractRequest') ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1(Val#'SubtractRequest'.terminationID, State),
- case Val#'SubtractRequest'.auditDescriptor of
- asn1_NOVALUE ->
- [];
- AuditDescr ->
- [
- ?LBRKT_INDENT(State) ,
- enc_AuditDescriptor(AuditDescr, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-enc_AuditRequest(Val, State)
- when is_record(Val, 'AuditRequest') ->
- %% d("enc_AuditRequest -> entry with"
- %% "~n Val: ~p", [Val]),
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1([Val#'AuditRequest'.terminationID], State),
- case Val#'AuditRequest'.auditDescriptor of
- asn1_NOVALUE ->
- [];
- AuditDescr ->
- [
- ?LBRKT_INDENT(State) ,
- enc_AuditDescriptor(AuditDescr, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-%% auditReply = (AuditValueToken / AuditCapToken )
-%% ( contextTerminationAudit / auditOther)
-%% auditOther = EQUAL TerminationID LBRKT
-%% terminationAudit RBRKT
-%% terminationAudit = auditReturnParameter *(COMMA auditReturnParameter)
-%%
-%% contextTerminationAudit = EQUAL CtxToken ( terminationIDList /
-%% LBRKT errorDescriptor RBRKT )
-enc_AuditReply({Tag, Val}, State) ->
-%% d("enc_AuditReply -> entry with"
-%% "~n Tag: ~p"
-%% "~n Val: ~p", [Tag, Val]),
- case Tag of
- contextAuditResult ->
- %% d("enc_AuditReply -> contextAuditResult"),
- [
- ?EQUAL,
- ?CtxToken,
- enc_TerminationIDListN(Val, State)
- ];
- error ->
- %% d("enc_AuditReply -> error"),
- [
- ?EQUAL,
- ?CtxToken,
- ?LBRKT_INDENT(State),
- enc_ErrorDescriptor(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
- auditResult when is_record(Val, 'AuditResult') ->
- %% d("enc_AuditReply -> auditResult"),
- enc_auditOther(Val, State);
- auditResult ->
- error({invalid_auditResult, Val});
- _ ->
- error({invalid_AuditReply_tag, Tag})
- end.
-
-enc_auditOther(#'AuditResult'{terminationID = ID,
- terminationAuditResult = asn1_NOVALUE}, State) ->
- [
- ?EQUAL,
- enc_TerminationID(ID, State)
- ];
-enc_auditOther(#'AuditResult'{terminationID = ID,
- terminationAuditResult = []}, State) ->
- [
- ?EQUAL,
- enc_TerminationID(ID, State)
- ];
-enc_auditOther(#'AuditResult'{terminationID = ID,
- terminationAuditResult = Res}, State) ->
- [
- ?EQUAL,
- enc_TerminationID(ID, State),
- case lists:flatten(enc_TerminationAudit(Res, ?INC_INDENT(State))) of
- [] ->
- [];
- L ->
- [
- ?LBRKT_INDENT(State),
- L,
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = asn1_NOVALUE,
- auditPropertyToken = asn1_NOVALUE},
- _State) ->
-% d("enc_AuditDescriptor(asn1_NOVALUE) -> entry"),
- [
- ?AuditToken,
- [?LBRKT, ?RBRKT]
- ];
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = [],
- auditPropertyToken = asn1_NOVALUE},
- _State) ->
-% d("enc_AuditDescriptor([]) -> entry"),
- [
- ?AuditToken,
- [?LBRKT, ?RBRKT]
- ];
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = List,
- auditPropertyToken = asn1_NOVALUE},
- State) ->
-% d("enc_AuditDescriptor -> entry with",
-% "~n List: ~p", [List]),
- [
- ?AuditToken,
- [
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_auditItem/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- ];
-%% - v2 -
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = asn1_NOVALUE,
- auditPropertyToken = Prop},
- State) ->
-% d("enc_AuditDescriptor -> entry with",
-% "~n Prop: ~p", [Prop]),
- [
- ?AuditToken,
- [
- ?LBRKT_INDENT(State),
- enc_auditPropertyToken(Prop, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- ];
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = List,
- auditPropertyToken = Prop},
- State) ->
-% d("enc_AuditDescriptor -> entry with",
-% "~n List: ~p"
-% "~n Prop: ~p", [List, Prop]),
- [
- ?AuditToken,
- [
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_auditItem/2}], ?INC_INDENT(State)),
- ?COMMA_INDENT(State),
- enc_auditPropertyToken(Prop, ?INC_INDENT(State)), % v2
- ?RBRKT_INDENT(State)
- ]
- ].
-
-enc_auditItem(signalsToken, _State) ->
- ?SignalsToken;
-enc_auditItem(eventBufferToken, _State) ->
- ?EventBufferToken;
-enc_auditItem(eventsToken, _State) ->
- ?EventsToken;
-enc_auditItem(Val, State) ->
- enc_auditReturnItem(Val, State).
-
-
-enc_auditReturnItem(muxToken, _State) ->
- ?MuxToken;
-enc_auditReturnItem(modemToken, _State) ->
- ?ModemToken;
-enc_auditReturnItem(mediaToken, _State) ->
- ?MediaToken;
-enc_auditReturnItem(digitMapToken, _State) ->
- ?DigitMapToken;
-enc_auditReturnItem(statsToken, _State) ->
- ?StatsToken;
-enc_auditReturnItem(observedEventsToken, _State) ->
- ?ObservedEventsToken;
-enc_auditReturnItem(packagesToken, _State) ->
- ?PackagesToken.
-
-
-%% - v2 begin -
-
-enc_auditPropertyToken([], _State) ->
- [];
-enc_auditPropertyToken([Param | Params], State) ->
-% d("enc_auditPropertyToken -> entry with",
-% "~n Param: ~p", [Param]),
- [enc_IndAudauditReturnParameter(Param, State),
- [[?COMMA_INDENT(State),
- enc_IndAudauditReturnParameter(P, State)] || P <- Params]].
-
-
-enc_IndAudauditReturnParameter({Tag, Val}, State) ->
- case Tag of
- indAudMediaDescriptor ->
- enc_IndAudMediaDescriptor(Val, State);
- indAudEventsDescriptor ->
- enc_IndAudEventsDescriptor(Val, State);
- indAudSignalsDescriptor ->
- enc_IndAudSignalsDescriptor(Val, State);
- indAudDigitMapDescriptor ->
- enc_IndAudDigitMapDescriptor(Val, State);
- indAudEventBufferDescriptor ->
- enc_IndAudEventBufferDescriptor(Val, State);
- indAudStatisticsDescriptor ->
- enc_IndAudStatisticsDescriptor(Val, State);
- indAudPackagesDescriptor ->
- enc_IndAudPackagesDescriptor(Val, State);
- _ ->
- error({invalid_IndAudauditReturnParameter_tag, Tag})
- end.
-
-%% The ASN.1 does not limit to just one of termStateDescr or streams,
-%% but the ABNF seams to do that...
-enc_IndAudMediaDescriptor(
- #'IndAudMediaDescriptor'{termStateDescr = asn1_NOVALUE,
- streams = Streams}, State) ->
-% d("enc_IndAudMediaDescriptor -> entry with",
-% "~n Streams: ~p", [Streams]),
- [
- ?MediaToken,
- ?LBRKT_INDENT(State),
- enc_IndAudMediaDescriptor_streams(Streams, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_IndAudMediaDescriptor(#'IndAudMediaDescriptor'{termStateDescr = TSD,
- streams = asn1_NOVALUE},
- State) ->
-% d("enc_IndAudMediaDescriptor -> entry with",
-% "~n TSD: ~p", [TSD]),
- [
- ?MediaToken,
- ?LBRKT_INDENT(State),
- enc_IndAudTerminationStateDescriptor(TSD, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudMediaDescriptor_streams({Tag, Val}, State) ->
-% d("enc_IndAudMediaDescriptor_streams -> entry with",
-% "~n Tag: ~p"
-% "~n Val: ~p", [Tag, Val]),
- case Tag of
- oneStream ->
- enc_IndAudStreamParms(Val, State);
- multiStream ->
- enc_IndAudMediaDescriptor_multiStream(Val, State);
- _ ->
- error({invalid_IndAudMediaDescriptor_streams_tag, Tag})
- end.
-
-enc_IndAudTerminationStateDescriptor(
- #'IndAudTerminationStateDescriptor'{propertyParms = [],
- eventBufferControl = asn1_NOVALUE,
- serviceState = 'NULL'}, _State) ->
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(_State),
- ?ServiceStatesToken,
- ?RBRKT_INDENT(_State)
- ];
-enc_IndAudTerminationStateDescriptor(
- #'IndAudTerminationStateDescriptor'{propertyParms = [],
- eventBufferControl = 'NULL',
- serviceState = asn1_NOVALUE}, _State) ->
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(_State),
- ?BufferToken,
- ?RBRKT_INDENT(_State)
- ];
-enc_IndAudTerminationStateDescriptor(
- #'IndAudTerminationStateDescriptor'{propertyParms = [Parms],
- eventBufferControl = asn1_NOVALUE,
- serviceState = asn1_NOVALUE}, State) ->
- #'IndAudPropertyParm'{name = Name} = Parms,
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(State),
- enc_PkgdName(Name, State),
- ?RBRKT_INDENT(State)
- ].
-
-%% In text, localDescriptor and remoteDescriptor are not allowed!!
-enc_IndAudStreamParms(
- #'IndAudStreamParms'{localControlDescriptor = LCD,
- localDescriptor = asn1_NOVALUE,
- remoteDescriptor = asn1_NOVALUE,
- statisticsDescriptor = SD}, State) ->
-% d("enc_IndAudStreamParms -> entry with"
-% "~n LCD: ~p"
-% "~n SD: ~p", [LCD, SD]),
- [
- enc_list([{[LCD], fun enc_IndAudLocalControlDescriptor/2},
- {[SD], fun enc_IndAudStatisticsDescriptor/2}],
- ?INC_INDENT(State))
- ].
-
-enc_IndAudLocalControlDescriptor(Val, State)
- when is_record(Val, 'IndAudLocalControlDescriptor') ->
- [
- ?LocalControlToken,
- ?LBRKT_INDENT(State),
- enc_list([{[Val#'IndAudLocalControlDescriptor'.streamMode],
- fun('NULL', _) -> ?ModeToken end},
- {[Val#'IndAudLocalControlDescriptor'.reserveValue],
- fun('NULL', _) -> ?ReservedValueToken end},
- {[Val#'IndAudLocalControlDescriptor'.reserveGroup],
- fun('NULL', _) -> ?ReservedGroupToken end},
- {Val#'IndAudLocalControlDescriptor'.propertyParms,
- fun enc_IndAudPropertyParm/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudPropertyParm(#'IndAudPropertyParm'{name = PkgdName}, State) ->
- enc_PkgdName(PkgdName, State).
-
-enc_IndAudMediaDescriptor_multiStream([Val], State) ->
- %% d("enc_IndAudMediaDescriptor_multiStream -> entry with"
- %% "~n Val: ~p", [Val]),
- [
- enc_IndAudStreamDescriptor(Val, ?INC_INDENT(State))
- ];
-enc_IndAudMediaDescriptor_multiStream(Vals, State) when is_list(Vals) ->
-%% d("enc_IndAudMediaDescriptor_multiStream -> entry with"
-%% "~n Vals: ~p", [Vals]),
- [
- enc_list([{Vals, fun enc_IndAudStreamDescriptor/2}], State)
- ];
-enc_IndAudMediaDescriptor_multiStream(Val, _State) ->
- error({invalid_IndAudMediaDescriptor_multiStream, Val}).
-
-enc_IndAudStreamDescriptor(#'IndAudStreamDescriptor'{streamID = SID,
- streamParms = Parms},
- State) ->
-%% d("enc_IndAudStreamDescriptor -> entry with"
-%% "~n SID: ~p"
-%% "~n Parms: ~p", [SID, Parms]),
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(SID, State),
- ?LBRKT_INDENT(State),
- enc_IndAudStreamParms(Parms, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudEventBufferDescriptor(Val, State)
- when is_record(Val, 'IndAudEventBufferDescriptor') ->
- #'IndAudEventBufferDescriptor'{eventName = EvName,
- streamID = ID} = Val,
- [
- ?EventBufferToken,
- ?LBRKT_INDENT(State),
- enc_PkgdName(EvName, State),
- enc_IndAudEventBufferDescriptor_eventSpec(ID, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudEventBufferDescriptor_eventSpec(asn1_NOVALUE, _State) ->
- [
- ];
-enc_IndAudEventBufferDescriptor_eventSpec({eventParameterName, ParamName},
- State) ->
- [
- ?LBRKT_INDENT(State),
- enc_Name(ParamName, State),
- ?RBRKT_INDENT(State)
- ];
-enc_IndAudEventBufferDescriptor_eventSpec(ID, State) ->
- [
- ?LBRKT_INDENT(State),
- enc_eventStream(ID, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudEventsDescriptor(Val, State)
- when is_record(Val, 'IndAudEventsDescriptor') ->
- #'IndAudEventsDescriptor'{requestID = ReqID,
- pkgdName = Name,
- streamID = asn1_NOVALUE} = Val,
- [
- ?EventsToken,
- ?EQUAL,
- enc_RequestID(ReqID, State),
- ?LBRKT_INDENT(State),
- enc_PkgdName(Name, State),
- ?RBRKT_INDENT(State)
- ].
-
-
-enc_IndAudSignalsDescriptor(Val, State) ->
- [
- ?SignalsToken,
- ?LBRKT_INDENT(State),
- enc_IndAudSignalsDescriptor_value(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudSignalsDescriptor_value({signal, Val}, State) ->
- enc_IndAudSignal(Val, State);
-enc_IndAudSignalsDescriptor_value({seqSigList, Val}, State) ->
- enc_IndAudSeqSigList(Val, State).
-
-enc_IndAudSignal(#'IndAudSignal'{signalName = SignalName,
- streamID = asn1_NOVALUE}, State) ->
- [
- enc_SignalName(SignalName, State)
- ].
-
-enc_IndAudSeqSigList(#'IndAudSeqSigList'{id = ID,
- signalList = Parm},
- State) ->
- [
- ?SignalListToken,
- ?EQUAL,
- enc_UINT16(ID, State),
- ?LBRKT_INDENT(State),
- enc_IndAudSignal(Parm, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudDigitMapDescriptor(#'IndAudDigitMapDescriptor'{digitMapName = Name},
- State) ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State)
- ].
-
-enc_IndAudStatisticsDescriptor(#'IndAudStatisticsDescriptor'{statName = Name},
- State) ->
-% d("enc_IndAudStatisticsDescriptor -> entry with"
-% "~n Name: ~p", [Name]),
- [
- ?StatsToken,
- ?LBRKT_INDENT(State),
- enc_PkgdName(Name, State),
- ?RBRKT_INDENT(State)
- ].
-
-
-enc_IndAudPackagesDescriptor(#'IndAudPackagesDescriptor'{packageName = N,
- packageVersion = V},
- State) ->
- [
- ?PackagesToken,
- ?LBRKT_INDENT(State),
- enc_Name(N, State),
- "-",
- enc_UINT16(V, State),
- ?RBRKT_INDENT(State)
- ].
-
-
-%% - v2 end -
-
-
-enc_TerminationAudit({'TerminationAudit',Val}, State) ->
- enc_TerminationAudit(Val, State);
-enc_TerminationAudit([], _State) ->
- [];
-enc_TerminationAudit([Mand | Opt], State) ->
-% d("enc_TerminationAudit -> entry with"
-% "~n Mand: ~p", [Mand]),
- [enc_AuditReturnParameter(Mand, State),
- [[?COMMA_INDENT(State), enc_AuditReturnParameter(Val, State)] || Val <- Opt]].
-
-enc_AuditReturnParameter({'AuditReturnParameter',Val}, State) ->
- enc_AuditReturnParameter(Val, State);
-enc_AuditReturnParameter({Tag, Val}, State) ->
-% d("enc_AuditReturnParameter -> entry with"
-% "~n Tag: ~p"
-% "~n Val: ~p", [Tag, Val]),
- case Tag of
- mediaDescriptor ->
- enc_MediaDescriptor(Val, State);
- modemDescriptor ->
- enc_ModemDescriptor(Val, State);
- muxDescriptor ->
- enc_MuxDescriptor(Val, State);
- eventsDescriptor ->
- enc_EventsDescriptor(Val, State);
- signalsDescriptor ->
- enc_SignalsDescriptor(Val, State);
- digitMapDescriptor ->
- enc_DigitMapDescriptor(Val, State);
- observedEventsDescriptor ->
- enc_ObservedEventsDescriptor(Val, State);
- eventBufferDescriptor ->
- enc_EventBufferDescriptor(Val, State);
- statisticsDescriptor ->
- enc_StatisticsDescriptor(Val, State);
- packagesDescriptor ->
- enc_PackagesDescriptor(Val, State);
- errorDescriptor ->
- enc_ErrorDescriptor(Val, State);
- emptyDescriptors ->
- enc_EmptyDescriptors(Val, State);
- _ ->
- error({invalid_AuditReturnParameter_tag, Tag})
- end.
-
-enc_EmptyDescriptors(#'AuditDescriptor'{auditToken = asn1_NOVALUE}, _State) ->
- [];
-enc_EmptyDescriptors(#'AuditDescriptor'{auditToken = []}, _State) ->
- [];
-enc_EmptyDescriptors(#'AuditDescriptor'{auditToken = List}, State) ->
- enc_list([{List, fun enc_auditReturnItem/2}], ?INC_INDENT(State)).
-
-
-enc_NotifyRequest(Val, State)
- when is_record(Val, 'NotifyRequest') ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1(Val#'NotifyRequest'.terminationID, State),
- ?LBRKT_INDENT(State),
- %% BUGBUG: Mismatch between ASN.1 and ABNF
- %% BUGBUG: The following ought to be a 'choice'
- case Val#'NotifyRequest'.errorDescriptor of
- asn1_NOVALUE ->
- OED = Val#'NotifyRequest'.observedEventsDescriptor,
- enc_ObservedEventsDescriptor(OED, ?INC_INDENT(State));
- ErrorDescr ->
- enc_ErrorDescriptor(ErrorDescr, ?INC_INDENT(State))
- end,
- ?RBRKT_INDENT(State)
- ].
-
-enc_NotifyReply(Val, State)
- when is_record(Val, 'NotifyReply') ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- case Val#'NotifyReply'.terminationID of
- asn1_NOVALUE ->
- error(asn1_not_compliant_with_abnf);
- TermId ->
- enc_TerminationIDList1(TermId, State)
- end,
- case Val#'NotifyReply'.errorDescriptor of
- asn1_NOVALUE ->
- [];
- ErrorDescr ->
- [
- ?LBRKT_INDENT(State),
- enc_ErrorDescriptor(ErrorDescr, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-enc_ObservedEventsDescriptor(Val, State)
- when is_record(Val, 'ObservedEventsDescriptor') ->
- [
- ?ObservedEventsToken,
- ?EQUAL,
- enc_RequestID(Val#'ObservedEventsDescriptor'.requestId, State),
- ?LBRKT_INDENT(State),
- enc_observedEventsDescriptors(Val#'ObservedEventsDescriptor'.observedEventLst, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_observedEventsDescriptors([Mand | Opt], State) ->
- [enc_ObservedEvent(Mand, State),
- [[?COMMA_INDENT(State), enc_ObservedEvent(Val, State)] || Val <- Opt]].
-
-%% ;time per event, because it might be buffered
-%% observedEvent = [ TimeStamp LWSP COLON] LWSP
-%% pkgdName [ LBRKT observedEventParameter
-%% *(COMMA observedEventParameter) RBRKT ]
-%%
-%% ;at-most-once eventStream, every eventParameterName at most once
-%% observedEventParameter = eventStream / eventOther
-enc_ObservedEvent(Val, State)
- when is_record(Val, 'ObservedEvent') ->
- [
- case Val#'ObservedEvent'.timeNotation of
- asn1_NOVALUE ->
- [];
- TimeStamp ->
- [
- enc_TimeNotation(TimeStamp, State),
- ?LWSP,
- ?COLON
- ]
- end,
- ?LWSP,
- enc_EventName(Val#'ObservedEvent'.eventName, State),
- enc_opt_brackets(
- enc_list([{[Val#'ObservedEvent'.streamID], fun enc_eventStream/2},
- {Val#'ObservedEvent'.eventParList, fun enc_eventOther/2}],
- ?INC_INDENT(State)),
- State)
- ].
-
-enc_EventName({'EventName',Val}, State) ->
- enc_EventName(Val, State);
-enc_EventName(Val, State) ->
- PkgdName = ?META_ENC(event, Val),
- enc_PkgdName(PkgdName, State).
-
-enc_eventStream(Val, State) ->
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(Val, State)
- ].
-
-%% The value is already encoded
-enc_eventOther(#megaco_event_parameter{name = Name,
- value = Value}, State)
- when is_list(Value) ->
- [
- enc_Name(Name, State),
- ?EqualToken,
- Value
- ];
-%% Special treatment of the ds parameter of the dd/ce event
-enc_eventOther(#'EventParameter'{eventParameterName = "ds" = Name,
- value = [DigitString],
- extraInfo = asn1_NOVALUE}, State) ->
- [
- enc_Name(Name, State),
- ?EqualToken,
- enc_DigitString(DigitString, State)
- ];
-enc_eventOther(#'EventParameter'{eventParameterName = Name,
- value = Value,
- extraInfo = Extra}, State) ->
- [
- enc_Name(Name, State),
- enc_propertyParmValues(Value, Extra, State)
- ].
-
-enc_ServiceChangeRequest(Val, State)
- when is_record(Val, 'ServiceChangeRequest') ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1(Val#'ServiceChangeRequest'.terminationID, State),
- ?LBRKT_INDENT(State),
- enc_ServiceChangeParm(Val#'ServiceChangeRequest'.serviceChangeParms,
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-%% serviceChangeReply = ServiceChangeToken EQUAL TerminationID
-%% [LBRKT (errorDescriptor /
-%% serviceChangeReplyDescriptor) RBRKT]
-%% serviceChangeReplyDescriptor = ServicesToken LBRKT
-%% servChgReplyParm *(COMMA servChgReplyParm) RBRKT
-%%
-%% ;at-most-once. Version is REQUIRED on first ServiceChange response
-%% servChgReplyParm = (serviceChangeAddress / serviceChangeMgcId /
-%% serviceChangeProfile / serviceChangeVersion )
-enc_ServiceChangeReply(Val, State)
- when is_record(Val, 'ServiceChangeReply') ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_TerminationIDList1(Val#'ServiceChangeReply'.terminationID, State),
- enc_ServiceChangeResult(Val#'ServiceChangeReply'.serviceChangeResult, State)
- ].
-
-enc_ServiceChangeResult({'ServiceChangeResult',Val}, State) ->
- enc_ServiceChangeResult(Val, State);
-enc_ServiceChangeResult({Tag, Val}, State) ->
- case Tag of
- errorDescriptor ->
- [
- ?LBRKT_INDENT(State),
- enc_ErrorDescriptor(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
- serviceChangeResParms ->
- case enc_ServiceChangeResParm(Val, ?INC_INDENT(?INC_INDENT(State))) of
- [] ->
- [];
- ResParms ->
- [
- ?LBRKT_INDENT(State),
- ?ServicesToken,
- fun(_S) ->
- [
- ?LBRKT_INDENT(_S),
- ResParms,
- ?RBRKT_INDENT(_S)
- ]
- end(?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end;
- _ ->
- error({invalid_ServiceChangeResult_tag, Tag})
- end.
-
-%% Required length of termination ID list is 1
-enc_TerminationIDList1({'TerminationIDList',Val}, State) ->
- enc_TerminationIDList1(Val, State);
-enc_TerminationIDList1([Singleton], State) ->
- enc_TerminationID(Singleton, State).
-
-%% No required length of termination ID list
-enc_TerminationIDListN({'TerminationIDList',Val}, State) ->
- enc_TerminationIDListN(Val, State);
-enc_TerminationIDListN([TID], State) ->
- [
- ?LBRKT_INDENT(State),
- enc_TerminationID(TID, State),
- ?RBRKT_INDENT(State)
- ];
-enc_TerminationIDListN(TIDs, State) ->
- [
- ?LBRKT_INDENT(State),
- enc_list([{TIDs, fun enc_TerminationID/2}], State),
- ?RBRKT_INDENT(State)
- ].
-
-%% TerminationID = "ROOT" / pathNAME / "$" / "*"
-%% ; Total length of pathNAME must not exceed 64 chars.
-%% pathNAME = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
-%% ["@" pathDomainName ]
-enc_TerminationID(Tid, State)
- when is_record(Tid, megaco_term_id) ->
- List = [{Tid#megaco_term_id.id, fun enc_tid_component/2 }],
- enc_list(List, State, fun(_S) -> ?SLASH end, false).
-
-enc_tid_component(Component, State) when is_list(Component) ->
- [enc_tid_sub_component(Sub, State) || Sub <- Component];
-enc_tid_component(Invalid, _State) ->
- error({invalid_id_list_component, Invalid}).
-
-enc_tid_sub_component(all = _Sub, _State) ->
- ?megaco_all;
-enc_tid_sub_component(choose = _Sub, _State) ->
- ?megaco_choose;
-enc_tid_sub_component(Char, _State) when is_integer(Char) ->
- Char;
-enc_tid_sub_component(Invalid, _State) ->
- error({invalid_id_list_sub_component, Invalid}).
-
-%% enc_tid_sub_component(Sub, _State) ->
-%% case Sub of
-%% all -> ?megaco_all;
-%% choose -> ?megaco_choose;
-%% Char when is_integer(Char) -> Char
-%% end.
-
-%% mediaDescriptor = MediaToken LBRKT mediaParm *(COMMA mediaParm) RBRKT
-%% ; at-most-once per item
-%% ; and either streamParm or streamDescriptor but not both
-%% mediaParm = (streamParm / streamDescriptor /
-%% terminationStateDescriptor)
-%% ; at-most-once
-%% streamParm = ( localDescriptor / remoteDescriptor /
-%% localControlDescriptor )
-%% streamDescriptor = StreamToken EQUAL StreamID LBRKT streamParm
-%% *(COMMA streamParm) RBRKT
-enc_MediaDescriptor(Val, State)
- when is_record(Val, 'MediaDescriptor') ->
- [
- ?MediaToken,
- ?LBRKT_INDENT(State),
- enc_list([{[Val#'MediaDescriptor'.termStateDescr],
- fun enc_TerminationStateDescriptor/2} |
- decompose_streams(Val#'MediaDescriptor'.streams)],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-decompose_streams(asn1_NOVALUE) ->
- [];
-decompose_streams({'MediaDescriptor_streams',Val}) ->
- decompose_streams(Val);
-decompose_streams({Tag, Val}) ->
- case Tag of
- oneStream ->
- decompose_StreamParms(Val);
- multiStream ->
- [{Val, fun enc_StreamDescriptor/2}];
- _ ->
- error({invalid_streams_tag, Tag})
- end.
-
-decompose_StreamParms(Val)
- when is_record(Val, 'StreamParms') ->
- [
- {[Val#'StreamParms'.localControlDescriptor],
- fun enc_LocalControlDescriptor/2},
- {[Val#'StreamParms'.localDescriptor],
- fun enc_localDescriptor/2},
- {[Val#'StreamParms'.remoteDescriptor],
- fun enc_remoteDescriptor/2},
- {[Val#'StreamParms'.statisticsDescriptor],
- fun enc_StatisticsDescriptor/2}
- ].
-
-enc_StreamDescriptor(Val, State)
- when is_record(Val, 'StreamDescriptor') ->
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(Val#'StreamDescriptor'.streamID, State),
- ?LBRKT_INDENT(State),
- enc_list(decompose_StreamParms(Val#'StreamDescriptor'.streamParms),
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-%% localControlDescriptor = LocalControlToken LBRKT localParm
-%% *(COMMA localParm) RBRKT
-%%
-%% ; at-most-once per item
-%% localParm = ( streamMode / propertyParm /
-%% reservedValueMode / reservedGroupMode )
-%% reservedValueMode = ReservedValueToken EQUAL ( "ON" / "OFF" )
-%% reservedGroupMode = ReservedGroupToken EQUAL ( "ON" / "OFF" )
-%%
-%% reservedMode = ReservedToken EQUAL ( "ON" / "OFF" )
-%%
-%% streamMode = ModeToken EQUAL streamModes
-enc_LocalControlDescriptor(
- #'LocalControlDescriptor'{streamMode = asn1_NOVALUE,
- reserveValue = asn1_NOVALUE,
- reserveGroup = asn1_NOVALUE,
- propertyParms = []}, _State) ->
- error({invalid_LocalControlDescriptor, empty});
-enc_LocalControlDescriptor(
- #'LocalControlDescriptor'{streamMode = SM,
- reserveValue = RV,
- reserveGroup = RG,
- propertyParms = PPs}, State) ->
- [
- ?LocalControlToken,
- ?LBRKT_INDENT(State),
- enc_list([{[SM], fun enc_StreamMode/2},
- {[RG], fun enc_reservedGroupMode/2},
- {[RV], fun enc_reservedValueMode/2},
- {PPs, fun enc_PropertyParm/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_reservedGroupMode(Val, _State) ->
- [
- ?ReservedGroupToken,
- ?EQUAL,
- case Val of
- false -> ?OffToken;
- true -> ?OnToken
- end
- ].
-
-enc_reservedValueMode(Val, _State) ->
- [
- ?ReservedValueToken,
- ?EQUAL,
- case Val of
- false -> ?OffToken;
- true -> ?OnToken
- end
- ].
-
-enc_StreamMode({'StreamMode',Val}, State) ->
- enc_StreamMode(Val, State);
-enc_StreamMode(Val, _State) ->
- [
- ?ModeToken,
- ?EQUAL,
- case Val of
- sendOnly -> ?SendonlyToken;
- recvOnly -> ?RecvonlyToken;
- sendRecv -> ?SendrecvToken;
- inactive -> ?InactiveToken;
- loopBack -> ?LoopbackToken
- end
- ].
-
-enc_Name({'Name',Val}, State) ->
- enc_Name(Val, State);
-enc_Name(Val, State) ->
- %% BUGBUG: NAME = ALPHA *63(ALPHA / DIGIT / "_" )
- enc_STRING(Val, State, 1, 64).
-
-enc_PkgdName({'PkgdName', Val}, State) ->
- enc_PkgdName(Val, State);
-enc_PkgdName(Val, _State) ->
- %% BUGBUG: pkgdName = (NAME / "*") SLASH (ItemID / "*" )
- %% enc_OCTET_STRING(Val, _State, 1, 64).
- if
- is_list(Val) ->
- Length = length(Val),
- if
- (Length >= 1) ->
- if
- (Length =< 64) ->
- Val;
- true ->
- error({pkgdName_toolong, Length, 64})
- end;
- true ->
- error({pkgdName_tooshort, Length, 1})
- end;
- true ->
- error({invalid_PkgdName, Val})
- end.
-
-enc_localDescriptor(Val, State)
- when is_record(Val, 'LocalRemoteDescriptor') ->
- [
- ?LocalToken,
- ?LBRKT,
- enc_LocalRemoteDescriptor(Val, State),
- ?RBRKT_INDENT(State)
- ].
-
-enc_remoteDescriptor(Val, State)
- when is_record(Val, 'LocalRemoteDescriptor') ->
- [
- ?RemoteToken,
- ?LBRKT,
- enc_LocalRemoteDescriptor(Val, State),
- ?RBRKT_INDENT(State)
- ].
-
-%% When text encoding the protocol, the descriptors consist of session
-%% descriptions as defined in SDP (RFC2327), except that the "s=", "t="
-%% and "o=" lines are optional. When multiple session descriptions are
-%% provided in one descriptor, the "v=" lines are required as delimiters;
-%% otherwise they are optional. Implementations shall accept session
-%% descriptions that are fully conformant to RFC2327. When binary
-%% encoding the protocol the descriptor consists of groups of properties
-%% (tag-value pairs) as specified in Annex C. Each such group may
-%% contain the parameters of a session description.
-enc_LocalRemoteDescriptor(Val, State)
- when is_record(Val, 'LocalRemoteDescriptor') ->
- case Val#'LocalRemoteDescriptor'.propGrps of
- [] ->
- [];
- [OptV | MandV] ->
- [?LfToken,
- enc_PropertyGroup(OptV, opt_v, State) |
- [enc_PropertyGroup(M, mand_v, State) || M <- MandV]]
- end.
-
-enc_PropertyGroup({'PropertyGroup',Val}, RequiresV, State) ->
- enc_PropertyGroup(Val, RequiresV, State);
-enc_PropertyGroup([H | _T] = List, mand_v, State)
- when is_record(H, 'PropertyParm') andalso (H#'PropertyParm'.name =:= "v") ->
- enc_PropertyGroup(List, opt_v, State);
-enc_PropertyGroup(PG, opt_v, State) ->
- [
- [[enc_PropertyGroupParm(PP, State), ?CrToken, ?LfToken] || PP <- PG]
- ].
-
-enc_PropertyGroupParm(Val, State)
- when is_record(Val, 'PropertyParm') ->
- [OctetString] = Val#'PropertyParm'.value,
- [
- enc_PkgdName(Val#'PropertyParm'.name, State),
- ?EqualToken,
- enc_OCTET_STRING(OctetString, State, 0, infinity)
- ].
-
-%% propertyParm = pkgdName parmValue
-%% parmValue = (EQUAL alternativeValue/ INEQUAL VALUE)
-%% alternativeValue = ( VALUE / LSBRKT VALUE *(COMMA VALUE) RSBRKT /
-%% LSBRKT VALUE DOT DOT VALUE RSBRKT )
-enc_PropertyParm(Val, State)
- when is_record(Val, 'PropertyParm') ->
- PkgdName = ?META_ENC(property, Val#'PropertyParm'.name),
- [
- enc_PkgdName(PkgdName, State),
- enc_propertyParmValues(Val#'PropertyParm'.value,
- Val#'PropertyParm'.extraInfo,
- State)
- ].
-
-enc_propertyParmValues([Single], asn1_NOVALUE, State) ->
- [
- ?EqualToken,
- enc_Value(Single, State)
- ];
-enc_propertyParmValues([Single], {relation, Rel}, State) ->
- case Rel of
- greaterThan -> [$>, enc_Value(Single, State)];
- smallerThan -> [$<, enc_Value(Single, State)];
- unequalTo -> [$#, enc_Value(Single, State)]
- end;
-enc_propertyParmValues([Low, High], {range, true}, State)->
- %% Exact two values
- [
- ?EQUAL,
- ?LSBRKT,
- enc_Value(Low, State),
- ?COLON,
- enc_Value(High, State),
- ?RSBRKT
- ];
-enc_propertyParmValues(Values, {sublist, true}, State)->
- %% sublist (i.e. A AND B AND ...)
- [
- ?EQUAL,
- ?LSBRKT_INDENT(State),
- enc_list([{Values, fun enc_Value/2}], ?INC_INDENT(State)),
- ?RSBRKT_INDENT(State)
- ];
-enc_propertyParmValues(Values, {sublist, false}, State) ->
- %% alternatives (i.e. A OR B OR ...)
- [
- ?EQUAL,
- ?LBRKT_INDENT(State),
- enc_list([{Values, fun enc_Value/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_propertyParmValues(V, EI, _State) ->
- error({invalid_property_parm_values, V, EI}).
-
-enc_TerminationStateDescriptor(Val, State)
- when is_record(Val, 'TerminationStateDescriptor') ->
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(State),
- enc_list([{Val#'TerminationStateDescriptor'.propertyParms,
- fun enc_PropertyParm/2},
- {[Val#'TerminationStateDescriptor'.eventBufferControl],
- fun enc_eventBufferControl/2},
- {[Val#'TerminationStateDescriptor'.serviceState],
- fun enc_serviceState/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_eventBufferControl(Val, _State) ->
- [
-
- ?BufferToken,
- ?EQUAL,
- case Val of
- off -> ?OffToken;
- lockStep -> ?LockStepToken
- end
- ].
-
-enc_serviceState({'ServiceState',Val}, State) ->
- enc_serviceState(Val, State);
-enc_serviceState(Val, _State) ->
- [
- ?ServiceStatesToken,
- ?EQUAL,
- case Val of
- test -> ?TestToken;
- outOfSvc -> ?OutOfSvcToken;
- inSvc -> ?InSvcToken
- end
- ].
-
-enc_MuxDescriptor(Val, State)
- when is_record(Val, 'MuxDescriptor') ->
- [
- ?MuxToken,
- ?EQUAL,
- enc_MuxType(Val#'MuxDescriptor'.muxType, State),
- enc_TerminationIDListN(Val#'MuxDescriptor'.termList, State)
- ].
-
-enc_MuxType({'MuxType',Val}, State) ->
- enc_MuxType(Val, State);
-enc_MuxType(Val, _State) ->
- case Val of
- h221 -> ?H221Token;
- h223 -> ?H223Token;
- h226 -> ?H226Token;
- v76 -> ?V76Token;
- %% extensionParameter
- nx64k -> ?Nx64kToken % v2
- end.
-
-enc_StreamID({'StreamID',Val}, State) ->
- enc_StreamID(Val, State);
-enc_StreamID(Val, State) ->
- enc_UINT16(Val, State).
-
-enc_EventsDescriptor(Val, State)
- when is_record(Val, 'EventsDescriptor') ->
- #'EventsDescriptor'{requestID = RequestId,
- eventList = Events} = Val,
- if
- RequestId == asn1_NOVALUE, Events == [] ->
- [
- ?EventsToken
- ];
-
- RequestId /= asn1_NOVALUE, Events /= [] ->
- [
- ?EventsToken,
- ?EQUAL,
- enc_RequestID(RequestId, State),
- ?LBRKT_INDENT(State),
- enc_list([{Events, fun enc_RequestedEvent/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end.
-
-enc_RequestedEvent(Val, State)
- when is_record(Val, 'RequestedEvent') ->
- PkgdName = ?META_ENC(event, Val#'RequestedEvent'.pkgdName),
- [
- enc_PkgdName(PkgdName, State),
- enc_opt_brackets(
- enc_list([{[Val#'RequestedEvent'.streamID], fun enc_eventStream/2},
- {Val#'RequestedEvent'.evParList, fun enc_eventOther/2} |
- decompose_requestedActions(Val#'RequestedEvent'.eventAction)],
- ?INC_INDENT(State)),
- State)
- ].
-
-decompose_requestedActions(asn1_NOVALUE) ->
- [];
-
-%%
-%% This in the ABNF:
-%% at-most-once each of KeepActiveToken , eventDM and eventStream
-%% at most one of either embedWithSig or embedNoSig but not both
-%% KeepActiveToken and embedWithSig must not both be present
-%%
-
-%% embedWithSig
-decompose_requestedActions(#'RequestedActions'{keepActive = KA,
- eventDM = EDM,
- secondEvent = SE,
- signalsDescriptor = SD})
- when (KA =/= true) andalso
- (SD =/= asn1_NOVALUE) andalso
- (SD =/= []) ->
- [
- {[EDM], fun enc_EventDM/2},
- {[{SE, SD}], fun enc_embedWithSig/2}
- ];
-
-%% embedNoSig
-decompose_requestedActions(#'RequestedActions'{keepActive = KA,
- eventDM = EDM,
- secondEvent = SE,
- signalsDescriptor = SD})
- when (SD =:= asn1_NOVALUE) orelse (SD =:= []) ->
- [
- {[KA], fun enc_keepActive/2},
- {[EDM], fun enc_EventDM/2},
- {[SE], fun enc_embedNoSig/2}
- ];
-
-%% Fallback, if everything else failes....
-decompose_requestedActions(#'RequestedActions'{keepActive = KA,
- eventDM = EDM,
- secondEvent = SE,
- signalsDescriptor = SD}) ->
- [
- {[KA], fun enc_keepActive/2},
- {[EDM], fun enc_EventDM/2},
- {[{SE, SD}], fun enc_embedWithSig/2}
- ].
-
-enc_embedNoSig(#'SecondEventsDescriptor'{requestID = RID,
- eventList = Evs}, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_embedFirst(RID, Evs, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_embedWithSig({asn1_NOVALUE, SD}, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_SignalsDescriptor(SD, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_embedWithSig({#'SecondEventsDescriptor'{requestID = RID,
- eventList = Evs}, SD}, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_SignalsDescriptor(SD, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_embedFirst(RID, Evs, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_keepActive(Val, _State) ->
- case Val of
- true -> [?KeepActiveToken];
- false -> []
- end.
-
-enc_EventDM({'EventDM',Val}, State) ->
- enc_EventDM(Val, State);
-enc_EventDM({Tag, Val}, State) ->
- case Tag of
- digitMapName ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Val, State)
- ];
- digitMapValue ->
- [
- ?DigitMapToken,
- ?LBRKT_INDENT(State),
- enc_DigitMapValue(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
- _ ->
- error({invalid_EventDM_tag, Tag})
- end.
-
-
-enc_embedFirst(RID, Evs, State)
- when (RID =/= asn1_NOVALUE) andalso is_list(Evs) andalso (Evs =/= []) ->
- %% d("enc_embedFirst -> entry with"
- %% "~n RID: ~p"
- %% "~n Evs: ~p", [RID, Evs]),
- [
- ?EventsToken,
- ?EQUAL,
- enc_RequestID(RID, State),
- ?LBRKT_INDENT(State),
- enc_list([{Evs, fun enc_SecondRequestedEvent/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_embedFirst(_RID, _Evs, _State) ->
- %% d("enc_embedFirst -> entry"),
- [
- ?EventsToken
- ].
-
-
-enc_SecondRequestedEvent(#'SecondRequestedEvent'{pkgdName = N,
- streamID = SID,
- evParList = EPL,
- eventAction = EA}, State) ->
- PkgdName = ?META_ENC(event, N),
- [
- enc_PkgdName(PkgdName, State),
- enc_opt_brackets(
- enc_list(
- [{[SID], fun enc_eventStream/2},
- {EPL, fun enc_eventOther/2} |
- decompose_secondRequestedActions(EA)],
- ?INC_INDENT(State)),
- State)
- ].
-
-decompose_secondRequestedActions(asn1_NOVALUE) ->
- [];
-decompose_secondRequestedActions(Val)
- when is_record(Val, 'SecondRequestedActions') ->
- [
- {[Val#'SecondRequestedActions'.keepActive],
- fun enc_keepActive/2},
- {[Val#'SecondRequestedActions'.eventDM],
- fun enc_EventDM/2},
- {[Val#'SecondRequestedActions'.signalsDescriptor],
- fun enc_embeddedSignalsDescriptor/2}
- ].
-
-enc_embeddedSignalsDescriptor(Val, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_SignalsDescriptor(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_EventBufferDescriptor({'EventBufferDescriptor',Val}, State) ->
- enc_EventBufferDescriptor(Val, State);
-enc_EventBufferDescriptor([], _State) ->
- [
- ?EventBufferToken
- ];
-enc_EventBufferDescriptor(EventSpecs, State)
- when is_list(EventSpecs) andalso (length(EventSpecs) >= 1) ->
- [
- ?EventBufferToken,
- ?LBRKT_INDENT(State),
- enc_eventSpecs(EventSpecs, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_eventSpecs([Mand | Opt], State) ->
- [enc_eventSpec(Mand, State),
- [[?COMMA_INDENT(State), enc_eventSpec(Val, State)] || Val <- Opt]].
-
-enc_eventSpec(#'EventSpec'{eventName = Name,
- streamID = SID,
- eventParList = EPL}, State) ->
- [
- enc_EventName(Name, State),
- enc_opt_brackets(
- enc_list([{[SID], fun enc_eventStream/2},
- {EPL, fun enc_eventOther/2}],
- ?INC_INDENT(State)),
- State)
- ].
-
-enc_SignalsDescriptor({'SignalsDescriptor',Val}, State) ->
- enc_SignalsDescriptor(Val, State);
-enc_SignalsDescriptor([], _State) ->
- [
- ?SignalsToken
- ];
-enc_SignalsDescriptor(List, State) when is_list(List) ->
- [
- ?SignalsToken,
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_SignalRequest/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_SignalRequest({'SignalRequest',Val}, State) ->
- enc_SignalRequest(Val, State);
-enc_SignalRequest({Tag, Val}, State) ->
- case Tag of
- signal ->
- enc_Signal(Val, State);
- seqSigList ->
- enc_SeqSigList(Val, State);
- _ ->
- error({invalid_SignalRequest_tag, Tag})
- end.
-
-
-enc_SeqSigList(Val, State)
- when is_record(Val, 'SeqSigList') ->
- [
- ?SignalListToken,
- ?EQUAL,
- enc_UINT16(Val#'SeqSigList'.id, State),
- ?LBRKT_INDENT(State),
- enc_list([{Val#'SeqSigList'.signalList, fun enc_Signal/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_Signal(Val, State)
- when is_record(Val, 'Signal') ->
- [
- enc_SignalName(Val#'Signal'.signalName, State),
- enc_opt_brackets(
- enc_list([{[Val#'Signal'.streamID], fun enc_sigStream/2},
- {[Val#'Signal'.sigType], fun enc_sigSignalType/2},
- {[Val#'Signal'.duration], fun enc_sigDuration/2},
- {[Val#'Signal'.notifyCompletion], fun enc_notifyCompletion/2},
- {[Val#'Signal'.keepActive], fun enc_keepActive/2},
- {Val#'Signal'.sigParList, fun enc_sigOther/2},
- {[Val#'Signal'.direction], fun enc_SignalDirection/2},
- {[Val#'Signal'.requestID], fun enc_sigRequestID/2}],
- ?INC_INDENT(State)),
- State)
- ].
-
-enc_sigStream(Val, State) ->
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(Val, State)
- ].
-
-enc_sigSignalType(Val, State) ->
- [
- ?SignalTypeToken,
- ?EQUAL,
- enc_SignalType(Val, State)
- ].
-
-enc_sigDuration(Val, State) ->
- [
- ?DurationToken,
- ?EQUAL,
- enc_UINT16(Val, State)
- ].
-
-enc_notifyCompletion(List, State) when is_list(List) ->
- [
- ?NotifyCompletionToken,
- ?EQUAL,
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_notifyCompletionItem/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_notifyCompletionItem(Val, _State) ->
- case Val of
- onTimeOut -> ?TimeOutToken;
- onInterruptByEvent -> ?InterruptByEventToken;
- onInterruptByNewSignalDescr -> ?InterruptByNewSignalsDescrToken;
- otherReason -> ?OtherReasonToken
- end.
-
-enc_SignalType({'SignalType',Val}, State) ->
- enc_SignalType(Val, State);
-enc_SignalType(Val, _State) ->
- case Val of
- brief -> ?BriefToken;
- onOff -> ?OnOffToken;
- timeOut -> ?TimeOutToken
- end.
-
-enc_SignalName({'SignalName',Val}, State)->
- enc_SignalName(Val, State);
-enc_SignalName(Val, State) ->
- PkgdName = ?META_ENC(signal, Val),
- enc_PkgdName(PkgdName, State).
-
-enc_sigOther(Val, State)
- when is_record(Val, 'SigParameter') ->
- [
- enc_Name(Val#'SigParameter'.sigParameterName, State),
- enc_propertyParmValues(Val#'SigParameter'.value,
- Val#'SigParameter'.extraInfo,
- State)
- ].
-
-enc_SignalDirection({'SignalDirection', Val}, State) ->
- enc_SignalDirection(Val, State);
-enc_SignalDirection(Val, _State) ->
- [
- ?DirectionToken,
- ?EQUAL,
- case Val of
- internal -> ?InternalToken;
- external -> ?ExternalToken;
- both -> ?BothToken
- end
- ].
-
-enc_sigRequestID(Val, State) ->
- [
- ?RequestIDToken,
- ?EQUAL,
- enc_RequestID(Val, State)
- ].
-
-enc_RequestID({'RequestID',Val}, State) ->
- enc_RequestID(Val, State);
-enc_RequestID(Val, _State) when (Val =:= ?megaco_all_request_id) ->
- "*";
-enc_RequestID(Val, State) ->
- enc_UINT32(Val, State).
-
-enc_ModemDescriptor(MD, _State) ->
- error({deprecated, MD}).
-
-%% Corr1:
-%% As of corr 1 ModemDescriptor has been deprecated.
-%% 7.1.2: ...shall not be included as part of a transmitted content and,
-%% if received, shall either be ignored or processed at the option
-%% of the implementation. ...
-%% enc_ModemDescriptor(#'ModemDescriptor'{mtl = [Val],
-%% mpl = [],
-%% nonStandardData = asn1_NOVALUE},
-%% State) ->
-%% [
-%% ?ModemToken,
-%% ?EQUAL,
-%% enc_ModemType(Val, State)
-%% ];
-%% enc_ModemDescriptor(Val, State)
-%% when is_record(Val, 'ModemDescriptor') ->
-%% [
-%% ?ModemToken,
-%% ?LSBRKT,
-%% enc_list([{Val#'ModemDescriptor'.mtl, fun enc_ModemType/2}], State),
-%% ?RSBRKT,
-%% enc_opt_brackets(
-%% enc_list([{Val#'ModemDescriptor'.mpl, fun enc_PropertyParm/2}],
-%% ?INC_INDENT(State)),
-%% State)
-%% %% BUGBUG: Is PropertyParm == NAME parmValue?
-%% ].
-
-%% enc_ModemDescriptor(Val, State)
-%% when is_record(Val, 'ModemDescriptor') ->
-%% [
-%% ?ModemToken,
-%% %% BUGBUG: Does never generate: EQUAL modemType
-%% ?LSBRKT,
-%% enc_list([{Val#'ModemDescriptor'.mtl, fun enc_ModemType/2}], State),
-%% ?RSBRKT,
-%% enc_opt_brackets(
-%% enc_list([{Val#'ModemDescriptor'.mpl, fun enc_PropertyParm/2}],
-%% ?INC_INDENT(State)),
-%% State)
-%% %% BUGBUG: Is PropertyParm == NAME parmValue?
-%% ].
-
-%% Corr1: See ModemDescriptor above
-%% enc_ModemType({'ModemType',Val}, State)->
-%% enc_ModemType(Val, State);
-%% enc_ModemType(Val, _State) ->
-%% %% BUGBUG: Does not handle extensionParameter
-%% case Val of
-%% v18 -> ?V18Token;
-%% v22 -> ?V22Token;
-%% v22bis -> ?V22bisToken;
-%% v32 -> ?V32Token;
-%% v32bis -> ?V32bisToken;
-%% v34 -> ?V34Token;
-%% v90 -> ?V90Token;
-%% v91 -> ?V91Token;
-%% synchISDN -> ?SynchISDNToken
-%% end.
-
-enc_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = asn1_NOVALUE,
- digitMapValue = Value} = Val,
- State)
- when (Value =/= asn1_NOVALUE) ->
- case is_empty_DigitMapValue(Value) of
- true ->
- error({invalid_DigitMapDescriptor, Val});
- false ->
- [
- ?DigitMapToken,
- ?EQUAL,
- ?LBRKT_INDENT(State),
- enc_DigitMapValue(Value, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end;
-enc_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name,
- digitMapValue = asn1_NOVALUE},
- State)
- when (Name =/= asn1_NOVALUE) ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State)
- ];
-enc_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name,
- digitMapValue = Value},
- State)
- when (Name =/= asn1_NOVALUE) andalso (Value =/= asn1_NOVALUE) ->
- case is_empty_DigitMapValue(Value) of
- true ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State)
- ];
- false ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State),
- ?LBRKT_INDENT(State),
- enc_DigitMapValue(Value, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end;
-enc_DigitMapDescriptor(BadVal, _State) ->
- error({invalid_DigitMapDescriptor, BadVal}).
-
-enc_DigitMapName({'DigitMapName',Val}, State) ->
- enc_DigitMapName(Val, State);
-enc_DigitMapName(Val, State) ->
- enc_Name(Val, State).
-
-is_empty_DigitMapValue(#'DigitMapValue'{startTimer = asn1_NOVALUE,
- shortTimer = asn1_NOVALUE,
- longTimer = asn1_NOVALUE,
- digitMapBody = [],
- durationTimer = asn1_NOVALUE}) ->
- true;
-is_empty_DigitMapValue(#'DigitMapValue'{}) ->
- false.
-
-enc_DigitMapValue(Val, State)
- when is_record(Val, 'DigitMapValue') ->
- [
- enc_timer(Val#'DigitMapValue'.startTimer, $T, State),
- enc_timer(Val#'DigitMapValue'.shortTimer, $S, State),
- enc_timer(Val#'DigitMapValue'.longTimer, $L, State),
- enc_timer(Val#'DigitMapValue'.durationTimer, $Z, State),
- %% BUGBUG: digitMapBody not handled at all
- enc_STRING(Val#'DigitMapValue'.digitMapBody, State, 0, infinity)
- ].
-
-enc_timer(asn1_NOVALUE, _Prefix, _State) ->
- [];
-enc_timer(Timer, Prefix, State) ->
- [
- Prefix,
- ?COLON,
- enc_DIGIT(Timer, State, 0, 99),
- ?COMMA_INDENT(State)
- ].
-
-enc_ServiceChangeParm(Val, State)
- when is_record(Val, 'ServiceChangeParm') ->
- [
- ?ServicesToken,
- ?LBRKT_INDENT(State),
- enc_list([{[Val#'ServiceChangeParm'.serviceChangeMethod],
- fun enc_ServiceChangeMethod/2},
- {[Val#'ServiceChangeParm'.serviceChangeAddress],
- fun enc_ServiceChangeAddress/2},
- {[Val#'ServiceChangeParm'.serviceChangeVersion],
- fun enc_serviceChangeVersion/2},
- {[Val#'ServiceChangeParm'.serviceChangeProfile],
- fun enc_ServiceChangeProfile/2},
- {[{reason, Val#'ServiceChangeParm'.serviceChangeReason}],
- fun enc_serviceChangeReason/2},
- {[Val#'ServiceChangeParm'.serviceChangeDelay],
- fun enc_serviceChangeDelay/2},
- {[Val#'ServiceChangeParm'.serviceChangeMgcId],
- fun enc_serviceChangeMgcId/2},
- {[Val#'ServiceChangeParm'.timeStamp],
- fun enc_TimeNotation/2},
- {Val#'ServiceChangeParm'.serviceChangeInfo,
- fun enc_AuditDescriptor/2},
- {[Val#'ServiceChangeParm'.serviceChangeIncompleteFlag],
- fun('NULL', _) -> ?ServiceChangeIncompleteToken end}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-
-enc_ServiceChangeMethod({'ServiceChangeMethod',Val}, State) ->
- enc_ServiceChangeMethod(Val, State);
-enc_ServiceChangeMethod(Val, _State) ->
- [
- ?MethodToken,
- ?EQUAL,
- case Val of
- failover -> ?FailoverToken;
- forced -> ?ForcedToken;
- graceful -> ?GracefulToken;
- restart -> ?RestartToken;
- disconnected -> ?DisconnectedToken;
- handOff -> ?HandOffToken
- end
- %% BUGBUG: extension
- ].
-
-enc_ServiceChangeAddress({'ServiceChangeAddress',Val}, State) ->
- enc_ServiceChangeAddress(Val, State);
-enc_ServiceChangeAddress({Tag, Val}, State) ->
- [
- ?ServiceChangeAddressToken,
- ?EQUAL,
- case Tag of
- portNumber ->
- enc_portNumber(Val, State);
- ip4Address ->
- enc_IP4Address(Val, State);
- ip6Address ->
- enc_IP6Address(Val, State);
- domainName ->
- enc_DomainName(Val, State);
- deviceName ->
- enc_PathName(Val, State);
- mtpAddress ->
- enc_mtpAddress(Val, State);
- _ ->
- error({invalid_ServiceChangeAddress_tag, Tag})
- end
- ].
-
-enc_serviceChangeVersion(Val, State) ->
- [
- ?VersionToken,
- ?EQUAL,
- enc_version(Val, State)
- ].
-
-enc_ServiceChangeProfile(#'ServiceChangeProfile'{profileName = Name,
- version = Version},
- State) ->
- [
- ?ProfileToken,
- ?EQUAL,
- enc_Name(Name, State),
- ?SLASH,
- enc_version(Version, State)
- ].
-
-enc_serviceChangeReason({reason, Val}, State) ->
- case Val of
- asn1_NOVALUE ->
- [];
- [List] when is_list(List) ->
- [
- ?ReasonToken,
- ?EQUAL,
- enc_QUOTED_STRING(List,State) % OTP-4632 enc_Value(List, State)
- ]
- end.
-
-enc_serviceChangeDelay(Val, State) ->
- [
- ?DelayToken,
- ?EQUAL,
- enc_UINT32(Val, State)
- ].
-
-enc_serviceChangeMgcId(Val, State) ->
- [
- ?MgcIdToken,
- ?EQUAL,
- enc_MId(Val, State)
- ].
-
-enc_portNumber(Val, State) when is_integer(Val) andalso (Val >= 0) ->
- enc_UINT16(Val, State).
-
-enc_ServiceChangeResParm(Val, State)
- when is_record(Val, 'ServiceChangeResParm') ->
- enc_list([{[Val#'ServiceChangeResParm'.serviceChangeAddress],
- fun enc_ServiceChangeAddress/2},
- {[Val#'ServiceChangeResParm'.serviceChangeVersion],
- fun enc_serviceChangeVersion/2},
- {[Val#'ServiceChangeResParm'.serviceChangeProfile],
- fun enc_ServiceChangeProfile/2},
- {[Val#'ServiceChangeResParm'.serviceChangeMgcId],
- fun enc_serviceChangeMgcId/2},
- {[Val#'ServiceChangeResParm'.timeStamp],
- fun enc_TimeNotation/2}],
- State).
-
-enc_PackagesDescriptor({'PackagesDescriptor',Val}, State) ->
- enc_PackagesDescriptor(Val, State);
-enc_PackagesDescriptor(Val, State) ->
- [
- ?PackagesToken,
- ?LBRKT_INDENT(State),
- enc_list([{Val, fun enc_PackagesItem/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_PackagesItem(Val, State)
- when is_record(Val, 'PackagesItem') ->
- PkgdName = ?META_ENC(package, Val#'PackagesItem'.packageName),
- [
- enc_Name(PkgdName, State),
- "-",
- enc_UINT16(Val#'PackagesItem'.packageVersion, State)
- ].
-
-enc_StatisticsDescriptor({'StatisticsDescriptor',Val}, State) ->
- enc_StatisticsDescriptor(Val, State);
-enc_StatisticsDescriptor(List, State) when is_list(List) ->
- [
- ?StatsToken,
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_StatisticsParameter/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_StatisticsParameter(Val, State)
- when is_record(Val, 'StatisticsParameter') ->
- PkgdName = ?META_ENC(statistics, Val#'StatisticsParameter'.statName),
- case Val#'StatisticsParameter'.statValue of
- asn1_NOVALUE ->
- [
- enc_PkgdName(PkgdName, State)
- ];
- [StatVal] when is_list(StatVal) ->
- [
- enc_PkgdName(PkgdName, State),
- ?EQUAL,
- enc_Value(StatVal, State)
- ]
- end.
-
-enc_TimeNotation(Val, State)
- when is_record(Val, 'TimeNotation') ->
- [
- enc_STRING(Val#'TimeNotation'.date, State, 8, 8), % "yyyymmdd"
- "T",
- enc_STRING(Val#'TimeNotation'.time, State, 8, 8) % "hhmmssss"
- ].
-
-%% BUGBUG: Does not verify that string must contain at least one char
-%% BUGBUG: This violation of the is required in order to comply with
-%% BUGBUG: the dd/ce ds parameter that may possibly be empty.
-enc_Value({'Value',Val}, State) ->
- enc_Value(Val, State);
-enc_Value(String, _State) ->
- case quoted_string_count(String, 0, true, false) of
- {_, 0, _} ->
- [?DQUOTE, String, ?DQUOTE];
- {false, _, _} ->
- [?DQUOTE, String, ?DQUOTE];
- {true, _, _} ->
- [String]
- end.
-
-quoted_string_count([?DoubleQuoteToken | T], 0 = Count, _IsSafe, _MaybeQuoted) ->
- %% Already a quoted string. Make sure it ends
- quoted_string_count(T, Count + 1, true, true);
-quoted_string_count([?DoubleQuoteToken], Count, IsSafe, true = MaybeQuoted) ->
- %% An explicitly quoted string
- {IsSafe, Count, MaybeQuoted};
-quoted_string_count([H | T], Count, IsSafe, MaybeQuoted) ->
- case ?classify_char(H) of
- safe_char_upper -> quoted_string_count(T, Count + 1, IsSafe, MaybeQuoted);
- safe_char -> quoted_string_count(T, Count + 1, IsSafe, MaybeQuoted);
- rest_char -> quoted_string_count(T, Count + 1, false, MaybeQuoted);
- white_space -> quoted_string_count(T, Count + 1, false, MaybeQuoted);
- _ -> error({illegal_char, H})
- end;
-quoted_string_count([], _Count, _IsSafe, true = _MaybeQuoted) ->
- error({illegal_char, ?DoubleQuoteToken});
-quoted_string_count([], Count, IsSafe, MaybeQuoted) ->
- {IsSafe, Count, MaybeQuoted}.
-
-enc_DigitString(String, _State) when is_list(String) ->
- [?DQUOTE, String, ?DQUOTE].
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% Encode an octet string, escape } by \ if necessary
-enc_OCTET_STRING(List, State, Min, Max) ->
- do_enc_OCTET_STRING(List, State, Min, Max, 0).
-
-do_enc_OCTET_STRING([H | T], State, Min, Max, Count) ->
- case H of
- $} ->
- [$\\, H | do_enc_OCTET_STRING(T, State, Min, Max, Count + 1)];
- _ ->
- [H | do_enc_OCTET_STRING(T, State, Min, Max, Count + 1)]
- end;
-do_enc_OCTET_STRING([], _State, Min, Max, Count) ->
- verify_count(Count, Min, Max),
- [].
-
-enc_QUOTED_STRING(String, _State) when is_list(String) ->
- case quoted_string_count(String, 0, true, false) of
- {_IsSafe, Count, false = _QuotedString} ->
- verify_count(Count, 1, infinity),
- [?DQUOTE, String, ?DQUOTE];
- {_IsSafe, Count, true = _QuotedString} ->
- verify_count(Count, 3, infinity), % quotes not included in the count
- [String]
- end.
-
-%% The internal format of hex digits is a list of octets
-%% Min and Max means #hexDigits
-%% Leading zeros are prepended in order to fulfill Min
-enc_HEXDIG(Octets, State, Min, Max) when is_list(Octets) ->
- do_enc_HEXDIG(Octets, State, Min, Max, 0, []).
-
-do_enc_HEXDIG([Octet | Rest], State, Min, Max, Count, Acc)
- when (Octet >= 0) andalso (Octet =< 255) ->
- Hex = hex(Octet), % OTP-4921
- if
- Octet =< 15 ->
- Acc2 = [[$0|Hex]|Acc], % OTP-4921
- do_enc_HEXDIG(Rest, State, Min, Max, Count + 2, ["0" | Acc2]);
- true ->
- Acc2 = [Hex|Acc], % OTP-4921
- do_enc_HEXDIG(Rest, State, Min, Max, Count + 2, Acc2)
- end;
-do_enc_HEXDIG([], State, Min, Max, Count, Acc)
- when is_integer(Min) andalso (Count < Min) ->
- do_enc_HEXDIG([0], State, Min, Max, Count, Acc);
-do_enc_HEXDIG([], _State, Min, Max, Count, Acc) -> %% OTP-4710
- verify_count(Count, Min, Max),
- lists:reverse(Acc).
-
-enc_DIGIT(Val, State, Min, Max) ->
- enc_integer(Val, State, Min, Max).
-
-enc_STRING(String, _State, Min, Max) when is_list(String) ->
- verify_count(length(String), Min, Max),
- String.
-
-enc_UINT16(Val, State) ->
- enc_integer(Val, State, 0, 65535).
-
-enc_UINT32(Val, State) ->
- enc_integer(Val, State, 0, 4294967295).
-
-enc_integer(Val, _State, Min, Max) ->
- verify_count(Val, Min, Max),
- integer_to_list(Val).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Encodes a list of elements with separator tokens between
-%% the elements. Optional asn1_NOVALUE values are ignored.
-
-enc_list(List, State) ->
- enc_list(List, State, fun(_S) -> ?COMMA_INDENT(_S) end, false).
-
--dialyzer({nowarn_function, enc_list/4}). % Future compat
-enc_list([], _State, _SepEncoder, _NeedsSep) ->
- [];
-enc_list([{Elems, ElemEncoder} | Tail], State, SepEncoder, NeedsSep) ->
- case do_enc_list(Elems, State, ElemEncoder, SepEncoder, NeedsSep) of
- [] ->
- enc_list(Tail, State, SepEncoder, NeedsSep);
- List ->
- [List,
- enc_list(Tail, State, SepEncoder, true)]
- end;
-enc_list(A, B, C, D) ->
- error({invalid_list, A, B, C, D}).
-
-do_enc_list(asn1_NOVALUE, _State, _ElemEncoder, _SepEncoder, _NeedsSep) ->
- [];
-do_enc_list([], _State, _ElemEncoder, _SepEncoder, _NeedsSep) ->
- [];
-do_enc_list([asn1_NOVALUE | T], State, ElemEncoder, SepEncoder, NeedsSep) ->
- do_enc_list(T, State, ElemEncoder, SepEncoder, NeedsSep);
-do_enc_list([H | T], State, ElemEncoder, SepEncoder, NeedsSep)
- when is_function(ElemEncoder) andalso is_function(SepEncoder) ->
- case ElemEncoder(H, State) of
- [] ->
- do_enc_list(T, State, ElemEncoder, SepEncoder, NeedsSep);
- List when NeedsSep =:= true ->
- [SepEncoder(State),
- List, do_enc_list(T, State, ElemEncoder, SepEncoder, true)];
- List when NeedsSep =:= false ->
- [List,
- do_enc_list(T, State, ElemEncoder, SepEncoder, true)]
- end.
-
-%% Add brackets if list is non-empty
-enc_opt_brackets([], _State) ->
- [];
-enc_opt_brackets(List, _State) when is_list(List) ->
- [?LBRKT_INDENT(_State), List, ?RBRKT_INDENT(_State)].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% Int -> list of hex chars
-hex(Int) ->
- hexi(get_lo_bits(Int, 4), []).
-
-hexi({0, Lo}, Ack) ->
- [hex4(Lo) | Ack];
-hexi({Hi, Lo} , Ack) ->
- hexi(get_lo_bits(Hi, 4), [hex4(Lo) | Ack]).
-
-hex4(Int) when Int < 10 ->
- Int + $0;
-hex4(Int) ->
- ($A - 10) + Int.
-
-get_lo_bits(Int, Size) ->
- Lo = Int band ones_mask(Size),
- Hi = Int bsr Size,
- {Hi, Lo}.
-
-ones_mask(Ones) ->
- (1 bsl Ones) - 1.
-
-%% Verify that Count is within the range of Min and Max
-verify_count(Count, Min, Max) ->
- if
- is_integer(Count) ->
- if
- is_integer(Min) andalso (Count >= Min) ->
- if
- is_integer(Max) andalso (Count =< Max) ->
- Count;
- Max =:= infinity ->
- Count;
- true ->
- error({count_too_large, Count, Max})
- end;
- true ->
- error({count_too_small, Count, Min})
- end;
- true ->
- error({count_not_an_integer, Count})
- end.
-
-
-
-
-%% -------------------------------------------------------------------
-
-%% d(F) ->
-%% d(F,[]).
-%% d(F, A) ->
-%% d(get(dbg), F, A).
-%%
-%% d(true, F, A) ->
-%% io:format("~p:" ++ F ++ "~n", [?MODULE | A]);
-%% d(_, _, _) ->
-%% ok.
-%%
-
diff --git a/lib/megaco/src/text/megaco_text_gen_prev3c.hrl b/lib/megaco/src/text/megaco_text_gen_prev3c.hrl
deleted file mode 100644
index f73318161f..0000000000
--- a/lib/megaco/src/text/megaco_text_gen_prev3c.hrl
+++ /dev/null
@@ -1,3441 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2019. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Encode V3 Megaco/H.248 text messages from internal form
-%%----------------------------------------------------------------------
-
-%% -define(d(F,A), io:format("~w:" ++ F ++ "~n", [?MODULE|A])).
-
--define(META_ENC(Type, Item), Item) .
-%% -define(META_ENC(Type, Item), megaco_meta_package:encode(text, Type, Item)).
-%% -define(META_DEC(Type, Item), megaco_meta_package:decode(text, Type, Item)).
-
-enc_MegacoMessage(Val) ->
- State = ?INIT_INDENT,
- enc_MegacoMessage(Val, State).
-
-enc_MegacoMessage(#'MegacoMessage'{authHeader = asn1_NOVALUE,
- mess = Mess}, State) ->
- [
- ?LWSP,
- enc_Message(Mess, State)
- ];
-enc_MegacoMessage(#'MegacoMessage'{authHeader = Auth,
- mess = Mess}, State) ->
- [
- ?LWSP,
- enc_AuthenticationHeader(Auth, State),
- enc_Message(Mess, State)
- ].
-
-%% Note that encoding the transaction this way
-%% make the message look a bit strange.
-enc_Transaction(Val) ->
- State = ?INIT_INDENT,
- enc_Transaction(Val, State).
-
-%% Note that encoding the action request's this way
-%% make the message look a bit strange.
-enc_ActionRequests(Val) ->
- State = ?INIT_INDENT,
- enc_TransactionRequest_actions(Val, State).
-
-%% Note that encoding the action request this way
-%% make the message look a bit strange.
-enc_ActionRequest(Val) ->
- State = ?INIT_INDENT,
- enc_ActionRequest(Val, State).
-
-enc_CommandRequest(Val) ->
- State = ?INIT_INDENT,
- enc_CommandRequest(Val, State).
-
-enc_ActionReply(Val) ->
- State = ?INIT_INDENT,
- enc_ActionReply(Val, State).
-
-enc_AuthenticationHeader(asn1_NOVALUE, _State) ->
- [];
-enc_AuthenticationHeader(Val, State)
- when is_record(Val, 'AuthenticationHeader') ->
- [
- ?AuthToken,
- ?EQUAL,
- enc_SecurityParmIndex(Val#'AuthenticationHeader'.secParmIndex, State),
- ?COLON,
- enc_SequenceNum(Val#'AuthenticationHeader'.seqNum, State),
- ?COLON,
- enc_AuthData(Val#'AuthenticationHeader'.ad, State),
- ?SEP_INDENT(State)
- ].
-
-enc_SecurityParmIndex({'SecurityParmIndex',Val}, State) ->
- enc_SecurityParmIndex(Val, State);
-enc_SecurityParmIndex(Val, State) ->
- [
- "0x",
- enc_HEXDIG(Val, State, 8, 8)
- ].
-
-enc_SequenceNum({'SequenceNum',Val}, State) ->
- enc_SequenceNum(Val, State);
-enc_SequenceNum(Val, State) ->
- [
- "0x",
- enc_HEXDIG(Val, State, 8, 8)
- ].
-
-enc_AuthData({'AuthData',Val}, State) ->
- enc_AuthData(Val, State);
-enc_AuthData(Val, State) ->
- [
- "0x",
- enc_HEXDIG(Val, State, 24, 64) %% OTP-4710
- ].
-
-enc_Message(Val, State)
- when is_record(Val, 'Message') ->
- [
- ?MegacopToken,
- ?SLASH,
- enc_version(Val#'Message'.version, State),
- ?SEP,
- enc_MId(Val#'Message'.mId, State),
- ?SEP_INDENT(State),
- enc_Message_messageBody(Val#'Message'.messageBody, State)
- ].
-
-enc_version(Val, State) when is_integer(Val) andalso (Val >= 0) ->
- enc_DIGIT(Val, State, 0, 99).
-
-enc_Message_messageBody({'Message_messageBody',Val}, State) ->
- enc_Message_messageBody(Val, State);
-enc_Message_messageBody({Tag, Val}, State) ->
- case Tag of
- messageError ->
- enc_ErrorDescriptor(Val, State);
- transactions ->
- enc_Message_messageBody_transactions(Val, State);
- _ ->
- error({invalid_messageBody_tag, Tag})
- end.
-
-enc_Message_messageBody_transactions({'Message_messageBody_transactions',Val},
- State) ->
- enc_Message_messageBody_transactions(Val, State);
-enc_Message_messageBody_transactions(Val, State)
- when is_list(Val) andalso (Val =/= []) ->
- [enc_Transaction(T, State) || T <- Val].
-
-enc_MId({'MId',Val}, State) ->
- enc_MId(Val, State);
-enc_MId({Tag, Val}, State) ->
- case Tag of
- ip4Address ->
- enc_IP4Address(Val, State);
- ip6Address ->
- enc_IP6Address(Val, State);
- domainName ->
- enc_DomainName(Val, State);
- deviceName ->
- enc_PathName(Val, State);
- mtpAddress ->
- enc_mtpAddress(Val, State);
- _ ->
- error({invalid_MId_tag, Tag})
- end.
-
-enc_mtpAddress(Val, State) ->
- [
- ?MtpToken,
- ?LBRKT,
- enc_OCTET_STRING(Val, State, 2, 4),
- ?RBRKT
- ].
-
-enc_DomainName(#'DomainName'{portNumber = asn1_NOVALUE,
- name = Name}, State) ->
- [
- $<,
- %% BUGBUG: (ALPHA / DIGIT) *63(ALPHA / DIGIT / "-" / ".")
- enc_STRING(Name, State, 1, 64),
- $>
- ];
-enc_DomainName(#'DomainName'{portNumber = PortNumber,
- name = Name}, State) ->
- [
- $<,
- %% BUGBUG: (ALPHA / DIGIT) *63(ALPHA / DIGIT / "-" / ".")
- enc_STRING(Name, State, 1, 64),
- $>,
- $:,
- enc_portNumber(PortNumber, State)
- ].
-
-enc_IP4Address(#'IP4Address'{portNumber = asn1_NOVALUE,
- address = [A1, A2, A3, A4]}, State) ->
- [
- $[,
- enc_V4hex(A1, State),
- ?DOT,
- enc_V4hex(A2, State),
- ?DOT,
- enc_V4hex(A3, State),
- ?DOT,
- enc_V4hex(A4, State),
- $]
- ];
-enc_IP4Address(#'IP4Address'{portNumber = PortNumber,
- address = [A1, A2, A3, A4]}, State) ->
- [
- $[,
- enc_V4hex(A1, State),
- ?DOT,
- enc_V4hex(A2, State),
- ?DOT,
- enc_V4hex(A3, State),
- ?DOT,
- enc_V4hex(A4, State),
- $],
- $:,
- enc_portNumber(PortNumber, State)
- ].
-
-enc_V4hex(Val, State) ->
- enc_DIGIT(Val, State, 0, 255).
-
-enc_IP6Address(#'IP6Address'{portNumber = asn1_NOVALUE,
- address = Addr}, State)
- when is_list(Addr) andalso (length(Addr) =:= 16) ->
- [
- $[,
- enc_IP6Address_address(Addr, State),
- $]
- ];
-enc_IP6Address(#'IP6Address'{portNumber = PortNumber,
- address = Addr}, State)
- when is_list(Addr) andalso (length(Addr) =:= 16) ->
- [
- $[,
- enc_IP6Address_address(Addr, State),
- $],
- $:,
- enc_portNumber(PortNumber, State)
- ].
-
-enc_IP6Address_address([0, 0|Addr], State) ->
- enc_IP6Address_address2(Addr, 1, false, true, State);
-enc_IP6Address_address(Addr, State) ->
- enc_IP6Address_address2(Addr, 0, false, false, State).
-
-enc_IP6Address_address2([0,0], 0, _Padding, _First, _State) ->
- [$0];
-enc_IP6Address_address2([0,0], PadN, false, true, _State) when PadN > 0 ->
- [$:, $:]; % Padding from the beginning (all zero's)
-enc_IP6Address_address2([0,0], PadN, false, false, _State) when PadN > 0 ->
- [$:]; % Padding in the middle or end
-enc_IP6Address_address2([0,0], _, true, _First, _State) ->
- [$0];
-enc_IP6Address_address2([N1,N2], 0, _Padding, _First, State) ->
- [enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], 1, _Padding, _First, State) ->
- [$0, $:, enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], PadN, false, true, State) when PadN > 1 ->
- [$:, $:, enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], PadN, false, false, State) when PadN > 1 ->
- [$:, enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([N1,N2], _PadN, true, _First, State) ->
- [enc_hex4([N1, N2], State)];
-enc_IP6Address_address2([0, 0|Ns], PadN, false, First, State) ->
- enc_IP6Address_address2(Ns, PadN+1, false, First, State);
-enc_IP6Address_address2([0, 0|Ns], _PadN, true, _First, State) ->
- [
- $0,
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], 0, Padded, _First, State) ->
- [
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, Padded, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], 1, Padded, _First, State) ->
- [
- $0,
- $:,
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, Padded, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], PadN, false, true, State) when PadN > 1 ->
- %% Padding from the beginning
- [
- $:,
- $:,
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], PadN, false, false, State)
- when PadN > 1 ->
- [
- $:, %% The other ':' has already added
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ];
-enc_IP6Address_address2([N1, N2|Ns], _PadN, true, _First, State) ->
- [
- enc_hex4([N1, N2], State),
- $:,
- enc_IP6Address_address2(Ns, 0, true, false, State)
- ].
-
-
-enc_hex4([0,0], _State) ->
- $0;
-enc_hex4([0,N], _State) ->
- hex(N);
-enc_hex4([N1, N2], _State) when N2 =< 15 ->
- [hex(N1), $0, hex(N2)];
-enc_hex4([N1, N2], _State) ->
- [hex(N1), hex(N2)].
-
-enc_PathName({'PathName',Val}, State) ->
- enc_PathName(Val, State);
-enc_PathName(Val, State) ->
- %% BUGBUG: ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
- %% BUGBUG: ["@" pathDomainName ]
- enc_STRING(Val, State, 1, 64).
-
-enc_Transaction(Bin, _State) when is_binary(Bin) ->
- [Bin]; %% Already encoded...
-enc_Transaction({'Transaction',Val}, State) ->
- enc_Transaction(Val, State);
-enc_Transaction({Tag, Val}, State) ->
- case Tag of
- transactionRequest ->
- enc_TransactionRequest(Val, State);
- transactionPending ->
- enc_TransactionPending(Val, State);
- transactionReply ->
- enc_TransactionReply(Val, State);
- transactionResponseAck ->
- enc_TransactionResponseAck(Val, State);
-%% segmentReply ->
-%% enc_SegmentReply(Val, State);
- _ ->
- error({invalid_Transaction_tag, Tag})
- end.
-
-enc_TransactionResponseAck([Mand], State) ->
- [
- ?ResponseAckToken,
- ?LBRKT_INDENT(State),
- [enc_TransactionAck(Mand, State)],
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionResponseAck([Mand | Opt], State) ->
- [
- ?ResponseAckToken,
- ?LBRKT_INDENT(State),
- [enc_TransactionAck(Mand, State) |
- [[?COMMA_INDENT(State), enc_TransactionAck(Val, State)] || Val <- Opt]],
- ?RBRKT_INDENT(State)
- ].
-
-enc_TransactionAck(Val, State)
- when is_record(Val, 'TransactionAck') ->
- [
- enc_TransactionId(Val#'TransactionAck'.firstAck, ?INC_INDENT(State)),
- case Val#'TransactionAck'.lastAck of
- asn1_NOVALUE ->
- [];
- LastAck ->
- ["-",enc_TransactionId(LastAck, State)]
- end
- ].
-
-enc_TransactionId({'TransactionId',Val}, State) ->
- enc_TransactionId(Val, State);
-enc_TransactionId(Val, State) ->
- enc_UINT32(Val, State).
-
-enc_TransactionRequest(#'TransactionRequest'{transactionId = Tid,
- actions = Acts}, State) ->
- [
- ?TransToken,
- ?EQUAL,
- enc_TransactionId(Tid, State),
- ?LBRKT_INDENT(State),
- enc_TransactionRequest_actions(Acts, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionRequest(Bin, _State) when is_binary(Bin) ->
- [Bin].
-
-enc_TransactionRequest_actions(Bin, _State) when is_binary(Bin) ->
- [Bin]; %% Already encoded...
-enc_TransactionRequest_actions({'TransactionRequest_actions',Val}, State) ->
- enc_TransactionRequest_actions(Val, State);
-enc_TransactionRequest_actions([Mand], State) ->
- [enc_ActionRequest(Mand, State)];
-enc_TransactionRequest_actions([Mand | Opt], State) ->
- [enc_ActionRequest(Mand, State) |
- [[?COMMA_INDENT(State), enc_ActionRequest(Val, State)] || Val <- Opt]].
-
-enc_TransactionPending(#'TransactionPending'{transactionId = Tid}, State) ->
- [?PendingToken,
- ?EQUAL,
- enc_TransactionId(Tid, State),
- ?LBRKT_INDENT(State),
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionPending(Bin, _State) when is_binary(Bin) ->
- [Bin].
-
-enc_TransactionReply(#'TransactionReply'{transactionId = Tid,
- immAckRequired = asn1_NOVALUE,
- transactionResult = Res%% ,
-%% segmentationNumber = SegNo,
-%% segmentationComplete = SegCompl
- },
- State) ->
- [
- ?ReplyToken,
- ?EQUAL,
- enc_TransactionId(Tid, State),
- ?LBRKT_INDENT(State),
- enc_TransactionReply_transactionResult(Res, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionReply(#'TransactionReply'{transactionId = Tid,
- immAckRequired = Req,
- transactionResult = Res,
- %% These fields are actually not
- %% supported in this implementation,
- %% but because the messenger module
- %% cannot see any diff between the
- %% various v3 implementations...
- segmentNumber = asn1_NOVALUE,
- segmentationComplete = asn1_NOVALUE
- },
- State) ->
- [
- ?ReplyToken,
- ?EQUAL,
- enc_TransactionId(Tid, State),
- ?LBRKT_INDENT(State),
- enc_immAckRequired(Req, State),
- enc_TransactionReply_transactionResult(Res, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_TransactionReply(Bin, _State) when is_binary(Bin) ->
- [Bin].
-
-enc_immAckRequired(Val, _State) ->
- case Val of
- asn1_NOVALUE ->
- [];
- 'NULL' ->
- [?ImmAckRequiredToken, ?COMMA_INDENT(?INC_INDENT(_State))]
- end.
-
-enc_TransactionReply_transactionResult({'TransactionReply_transactionResult',
- Val}, State) ->
- enc_TransactionReply_transactionResult(Val, State);
-enc_TransactionReply_transactionResult({Tag, Val}, State) ->
- case Tag of
- transactionError ->
- enc_ErrorDescriptor(Val, State);
- actionReplies ->
- enc_TransactionReply_transactionResult_actionReplies(Val, State);
- _ ->
- error({invalid_TransactionReply_transactionResult_tag, Tag})
- end.
-
-enc_TransactionReply_transactionResult_actionReplies({'TransactionReply_transactionResult_actionReplies',Val}, State) ->
- enc_TransactionReply_transactionResult_actionReplies(Val, State);
-enc_TransactionReply_transactionResult_actionReplies([Mand], State) ->
- [enc_ActionReply(Mand, State)];
-enc_TransactionReply_transactionResult_actionReplies([Mand | Opt], State) ->
- [enc_ActionReply(Mand, State),
- [[?COMMA_INDENT(State), enc_ActionReply(Val, State)] || Val <- Opt]].
-
-enc_ErrorDescriptor(#'ErrorDescriptor'{errorText = asn1_NOVALUE,
- errorCode = Code}, State) ->
- [
- ?ErrorToken,
- ?EQUAL,
- enc_ErrorCode(Code, State),
- ?LBRKT,
- ?RBRKT
- ];
-enc_ErrorDescriptor(#'ErrorDescriptor'{errorText = Text,
- errorCode = Code}, State) ->
- [
- ?ErrorToken,
- ?EQUAL,
- enc_ErrorCode(Code, State),
- ?LBRKT,
- enc_ErrorText(Text, State),
- ?RBRKT
- ].
-
-enc_ErrorCode({'ErrorCode',Val}, State)->
- enc_ErrorCode(Val, State);
-enc_ErrorCode(Val, State) ->
- enc_DIGIT(Val, State, 0, 999).
-
-enc_ErrorText({'ErrorText',Val}, State) ->
- enc_ErrorText(Val, State);
-enc_ErrorText(Val, State) ->
- enc_QUOTED_STRING(Val, State).
-
-enc_ContextID({'ContextID',Val}, State) ->
- enc_ContextID(Val, State);
-enc_ContextID(Val, State) ->
- case Val of
- ?megaco_all_context_id -> $*;
- ?megaco_null_context_id -> $-;
- ?megaco_choose_context_id -> $$;
- Int when is_integer(Int) -> enc_UINT32(Int, State)
- end.
-
-enc_ActionRequest(Bin, _State) when is_binary(Bin) ->
- [Bin]; %% Already encoded...
-enc_ActionRequest(#'ActionRequest'{contextId = CID,
- contextRequest = asn1_NOVALUE,
- contextAttrAuditReq = asn1_NOVALUE,
- commandRequests = CmdReqs}, State) ->
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(CID, State),
- ?LBRKT_INDENT(State),
- enc_list([{CmdReqs, fun enc_CommandRequest/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_ActionRequest(#'ActionRequest'{contextId = CID,
- contextRequest = CtxReq,
- contextAttrAuditReq = asn1_NOVALUE,
- commandRequests = CmdReqs}, State) ->
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(CID, State),
- ?LBRKT_INDENT(State),
- enc_list([{[CtxReq], fun enc_ContextRequest/2},
- {CmdReqs, fun enc_CommandRequest/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_ActionRequest(#'ActionRequest'{contextId = CID,
- contextRequest = CtxReq,
- contextAttrAuditReq = CtxAAR,
- commandRequests = CmdReqs}, State) ->
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(CID, State),
- ?LBRKT_INDENT(State),
- enc_list([{[CtxReq], fun enc_ContextRequest/2},
- {[CtxAAR], fun enc_ContextAttrAuditRequest/2},
- {CmdReqs, fun enc_CommandRequest/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-%% OTP-5085
-enc_ActionReply(#'ActionReply'{contextId = Id,
- errorDescriptor = asn1_NOVALUE,
- contextReply = asn1_NOVALUE,
- commandReply = []},
- State) ->
-%% d("enc_ActionReply -> entry with"
-%% "~n Id: ~p", [Id]),
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(Id, State)
- ];
-enc_ActionReply(#'ActionReply'{contextId = Id,
- errorDescriptor = ED,
- contextReply = CtxRep,
- commandReply = CmdRep},
- State) ->
-%% d("enc_ActionReply -> entry with"
-%% "~n Id: ~p"
-%% "~n ED: ~p"
-%% "~n CtxRep: ~p"
-%% "~n CmdRep: ~p", [Id, ED, CtxRep, CmdRep]),
- [
- ?CtxToken,
- ?EQUAL,
- enc_ContextID(Id, State),
- ?LBRKT_INDENT(State),
- do_enc_ActionReply(ED, CtxRep, CmdRep, State),
- ?RBRKT_INDENT(State)
- ].
-
-do_enc_ActionReply(asn1_NOVALUE, CtxRep, [], State)
- when (CtxRep =/= asn1_NOVALUE) ->
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State))
- ];
-do_enc_ActionReply(asn1_NOVALUE, CtxRep, CmdRep, State)
- when (CtxRep =/= asn1_NOVALUE) andalso (CmdRep =/= []) ->
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_list([{CmdRep, fun enc_CommandReply/2}],
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(asn1_NOVALUE, asn1_NOVALUE, CmdRep, State)
- when (CmdRep =/= []) ->
- [
- enc_list([{CmdRep, fun enc_CommandReply/2}],
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, CtxRep, [], State)
- when (ED =/= asn1_NOVALUE) andalso (CtxRep =/= asn1_NOVALUE) ->
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_list([{[ED], fun enc_ErrorDescriptor/2}], % Indention cosmetics
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, asn1_NOVALUE, CmdRep, State)
- when (ED =/= asn1_NOVALUE) andalso (CmdRep =/= []) ->
- [
- enc_list([{CmdRep, fun enc_CommandReply/2},
- {[ED], fun enc_ErrorDescriptor/2}], % Indention cosmetics
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, CtxRep, CmdRep, State)
- when (ED =/= asn1_NOVALUE) andalso
- (CtxRep =/= asn1_NOVALUE) andalso
- (CmdRep =/= []) ->
- [
- enc_ContextRequest(CtxRep, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_list([{CmdRep, fun enc_CommandReply/2},
- {[ED], fun enc_ErrorDescriptor/2}], % Indention cosmetics
- ?INC_INDENT(State))
- ];
-do_enc_ActionReply(ED, asn1_NOVALUE, [], State)
- when (ED =/= asn1_NOVALUE) ->
- [
- enc_ErrorDescriptor(ED, ?INC_INDENT(State))
- ].
-
-
-enc_ContextRequest_priority(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_priority(Val, _State) ->
- {[Val], fun(X,S) -> [?PriorityToken,?EQUAL,enc_UINT16(X, S)] end}.
-
-enc_ContextRequest_emergency(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_emergency(true, _State) ->
- {[?EmergencyToken], fun(Elem, _) -> Elem end};
-enc_ContextRequest_emergency(false, _State) ->
- {[?EmergencyOffToken], fun(Elem, _) -> Elem end}.
-
-enc_ContextRequest_topologyReq(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_topologyReq({'ContextRequest_topologyReq',
- asn1_NOVALUE}, _State) ->
- {[], dummy};
-enc_ContextRequest_topologyReq({'ContextRequest_topologyReq',
- List}, _State) ->
- {List, fun enc_TopologyRequest/2};
-enc_ContextRequest_topologyReq(List, _State) ->
- {[List], fun enc_TopologyRequest/2}.
-
-enc_ContextRequest_iepscallind(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_iepscallind(Bool, _State) ->
- {[Bool], fun enc_iepsValue/2}.
-
-enc_ContextRequest_contextProp(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_contextProp([], _State) ->
- {[], dummy};
-enc_ContextRequest_contextProp(Props, _State) ->
- {[Props], fun(Elem, S) -> enc_contextAttrDescriptor(Elem, contextProps, S) end}.
-
-enc_ContextRequest_contextList(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextRequest_contextList([], _State) ->
- {[], dummy};
-enc_ContextRequest_contextList(Props, _State) ->
- {[Props], fun(Elem, S) ->
- enc_contextAttrDescriptor(Elem, contextList, S)
- end}.
-
-enc_contextAttrDescriptor([Mand|Opt], contextProps, State) ->
- [
- ?ContextAttrToken,
- ?LBRKT_INDENT(State),
- [enc_PropertyParm(Mand, State) |
- [[?COMMA_INDENT(State), enc_PropertyParm(Val, State)] || Val <- Opt]],
- ?RBRKT_INDENT(State)
- ];
-enc_contextAttrDescriptor(CtxIdList, contextList, State) ->
- [
- ?ContextAttrToken,
- ?LBRKT_INDENT(State),
- enc_contextIdList(CtxIdList, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_contextIdList([Mand|Opt], State) ->
- State2 = ?INC_INDENT(State),
- [
- ?ContextListToken,
- ?EQUAL,
- ?LBRKT_INDENT(State),
- [enc_ContextID(Mand, State2) |
- [[?COMMA_INDENT(State2), enc_ContextID(Val, State2)] || Val <- Opt]],
- ?RBRKT_INDENT(State)
- ].
-
-enc_ContextRequest(asn1_NOVALUE, _State) ->
- [];
-enc_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextProp = asn1_NOVALUE,
- contextList = asn1_NOVALUE}, _State) ->
- [];
-enc_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = [],
- iepscallind = asn1_NOVALUE,
- contextProp = [],
- contextList = []}, _State) ->
- [];
-enc_ContextRequest(#'ContextRequest'{priority = Prio,
- emergency = Em,
- topologyReq = TR,
- iepscallind = Ieps,
- contextProp = CP,
- contextList = CL}, State) ->
- [
- enc_list([enc_ContextRequest_priority(Prio, State),
- enc_ContextRequest_emergency(Em, State),
- enc_ContextRequest_topologyReq(TR, State),
- enc_ContextRequest_iepscallind(Ieps, State),
- enc_ContextRequest_contextProp(CP, State),
- enc_ContextRequest_contextList(CL, State)],
- State)
- ].
-
-
-%% -- contextAudit --
-%% contextAudit = ContextAuditToken LBRKT
-%% (contextAuditProperties *(COMMA contextAuditProperties)) /
-%% indAudcontextAttrDesscriptor
-%% RBRKT
-%% contextAuditProperties =
-%% (TopologyToken / EmergencyToken / PriorityToken /
-%% IEPSToken / pkgdName / contextAuditSelect)
-%% contextAuditSelect =
-%% priority / emergencyValue / iepsValue /
-%% contextAttrDescriptor / auditSelectLogic
-%% indAudcontextAttrDesscriptor =
-%% ContextAttrToken LBRKT
-%% (contextAuditProperties *(COMMA contextAuditProperties))
-%% RBRKT
-%%
-%% This could actually either be
-%% a) a list of contextAuditProperties:
-%% contextAuditProperties *(COMMA contextAuditProperties)
-%% b) a indAudcontextAttrDescriptor
-%% But since b) actually has the same content as a) with
-%% the extra ContextAttrToken, there does not seem to be any
-%% reason for using it.
-enc_ContextAttrAuditRequest(asn1_NOVALUE, _State) ->
- [];
-enc_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{topology = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- priority = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextPropAud = asn1_NOVALUE,
- selectpriority = asn1_NOVALUE,
- selectemergency = asn1_NOVALUE,
- selectiepscallind = asn1_NOVALUE,
- selectLogic = asn1_NOVALUE}, _State) ->
- [];
-enc_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{topology = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- priority = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextPropAud = [],
- selectpriority = asn1_NOVALUE,
- selectemergency = asn1_NOVALUE,
- selectiepscallind = asn1_NOVALUE,
- selectLogic = asn1_NOVALUE}, _State) ->
- [];
-enc_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{topology = Top,
- emergency = Em,
- priority = Prio,
- iepscallind = Ieps,
- contextPropAud = CPA,
- selectpriority = SPrio,
- selectemergency = SEm,
- selectiepscallind = SIeps,
- selectLogic = SL}, State) ->
- [
- ?ContextAuditToken,
- ?LBRKT_INDENT(State),
- enc_list([{[Top], fun('NULL', _) -> ?TopologyToken end},
- {[Em], fun('NULL', _) -> ?EmergencyToken end},
- {[Prio], fun('NULL', _) -> ?PriorityToken end},
- {[Ieps], fun('NULL', _) -> ?IEPSToken end},
- {CPA, fun enc_IndAudPropertyParm/2},
- enc_ContextAttrAuditRequest_selectpriority(SPrio, State),
- enc_ContextAttrAuditRequest_selectemergency(SEm, State),
- enc_ContextAttrAuditRequest_selectiepscallind(SIeps, State),
- enc_ContextAttrAuditRequest_selectLogic(SL, State)],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_ContextAttrAuditRequest_selectpriority(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextAttrAuditRequest_selectpriority(SPrio, _State) ->
- {[SPrio], fun(X,S) -> [?PriorityToken,?EQUAL,enc_UINT16(X, S)] end}.
-
-enc_ContextAttrAuditRequest_selectemergency(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextAttrAuditRequest_selectemergency(SEm, _State) ->
- {[SEm], fun(X,S) -> enc_emergencyValue(X, S) end}.
-
-enc_ContextAttrAuditRequest_selectiepscallind(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextAttrAuditRequest_selectiepscallind(SEm, _State) ->
- {[SEm], fun(X,S) -> enc_iepsValue(X, S) end}.
-
-enc_ContextAttrAuditRequest_selectLogic(asn1_NOVALUE, _State) ->
- {[], dummy};
-enc_ContextAttrAuditRequest_selectLogic({andAUDITSelect, 'NULL'}, _State) ->
- {[], dummy}; % This is default so, there is no reason to add it
-enc_ContextAttrAuditRequest_selectLogic({orAUDITSelect, 'NULL'}, _State) ->
- {[?OrAUDITselectToken], fun(Elem, _) -> Elem end}.
-
-enc_emergencyValue(true, _) ->
- [?EmergencyValueToken,?EQUAL,?EmergencyToken];
-enc_emergencyValue(_, _) ->
- [?EmergencyValueToken,?EQUAL,?EmergencyOffToken].
-
-
-%% enc_IndAudContextAttrDescriptor(
-%% #'ContextAttrAuditRequest'{topology = Top,
-%% emergency = Em,
-%% priority = Prio,
-%% iepscallind = Ieps,
-%% contextPropAud = CPA,
-%% selectpriority = SelPrio,
-%% selectemergency = SelEm,
-%% selectiepscallind = SelIeps,
-%% selectLogic = SelLog}, State) ->
-%% [
-%% ?ContextAttrToken,
-%% ?LBRKT_INDENT(State),
-%% enc_list([{[Top], fun('NULL', _) -> ?TopologyToken end},
-%% {[Em], fun('NULL', _) -> ?EmergencyToken end},
-%% {[Prio], fun('NULL', _) -> ?PriorityToken end},
-%% {[Ieps], fun('NULL', _) -> ?IEPSToken end},
-%% {CPA, fun enc_IndAudPropertyParm/2}],
-%% ?INC_INDENT(State)),
-%% ?RBRKT_INDENT(State)
-%% ].
-
-enc_CommandRequest(#'CommandRequest'{optional = asn1_NOVALUE,
- wildcardReturn = asn1_NOVALUE,
- command = Cmd}, State) ->
- [
- enc_Command(Cmd, State)
- ];
-enc_CommandRequest(#'CommandRequest'{optional = 'NULL',
- wildcardReturn = asn1_NOVALUE,
- command = Cmd}, State) ->
- [
- "O-",
- enc_Command(Cmd, State)
- ];
-enc_CommandRequest(#'CommandRequest'{optional = asn1_NOVALUE,
- wildcardReturn = 'NULL',
- command = Cmd}, State) ->
- [
- "W-",
- enc_Command(Cmd, State)
- ];
-enc_CommandRequest(#'CommandRequest'{optional = 'NULL',
- wildcardReturn = 'NULL',
- command = Cmd}, State) ->
- [
- "O-",
- "W-",
- enc_Command(Cmd, State)
- ].
-
-enc_Command({'Command',Val}, State) ->
- enc_Command(Val, State);
-enc_Command({Tag, Val}, State) ->
-%% d("enc_Command -> entry with"
-%% "~n Tag: ~p"
-%% "~n Val: ~p", [Tag, Val]),
- case Tag of
- addReq ->
- [?AddToken, enc_AmmRequest(Val, State)];
- moveReq ->
- [?MoveToken, enc_AmmRequest(Val, State)];
- modReq ->
- [?ModifyToken, enc_AmmRequest(Val, State)];
- subtractReq ->
- [?SubtractToken, enc_SubtractRequest(Val, State)];
- auditCapRequest ->
- [?AuditCapToken, enc_AuditRequest(Val, State)];
- auditValueRequest ->
- [?AuditValueToken, enc_AuditRequest(Val, State)];
- notifyReq ->
- [?NotifyToken, enc_NotifyRequest(Val, State)];
- serviceChangeReq ->
- [?ServiceChangeToken, enc_ServiceChangeRequest(Val, State)];
- _ ->
- error({invalid_Command_tag, Tag})
- end.
-
-enc_CommandReply({'CommandReply',Val}, State) ->
- enc_CommandReply(Val, State);
-enc_CommandReply({Tag, Val}, State) ->
-%% d("enc_CommandReply -> entry with"
-%% "~n Tag: ~p"
-%% "~n Val: ~p", [Tag, Val]),
- case Tag of
- addReply ->
- [?AddToken, enc_AmmsReply(Val, State)];
- moveReply ->
- [?MoveToken, enc_AmmsReply(Val, State)];
- modReply ->
- [?ModifyToken, enc_AmmsReply(Val, State)];
- subtractReply ->
- [?SubtractToken, enc_AmmsReply(Val, State)];
- auditCapReply ->
- [?AuditCapToken, enc_AuditReply(Val, State)];
- auditValueReply ->
- [?AuditValueToken, enc_AuditReply(Val, State)];
- notifyReply ->
- [?NotifyToken, enc_NotifyReply(Val, State)];
- serviceChangeReply ->
- [?ServiceChangeToken, enc_ServiceChangeReply(Val, State)];
- _ ->
- error({invalid_CommandReply_tag, Tag})
- end.
-
-enc_TopologyRequest(Val, State)
- when is_list(Val) ->
- [
- ?TopologyToken,
- ?LBRKT_INDENT(State),
- enc_list([{Val, fun enc_TopologyRequest1/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_TopologyRequest1(
- #'TopologyRequest'{terminationFrom = From,
- terminationTo = To,
- topologyDirection = TD,
- streamID = asn1_NOVALUE, % OPTIONAL
- topologyDirectionExtension = asn1_NOVALUE % OPTIONAL
- }, State) ->
- [
- enc_TerminationID(From, State),
- ?COMMA_INDENT(State),
- enc_TerminationID(To, State),
- ?COMMA_INDENT(State),
- enc_TopologyDirection(TD, State)
- ];
-enc_TopologyRequest1(
- #'TopologyRequest'{terminationFrom = From,
- terminationTo = To,
- topologyDirection = TD,
- streamID = SID, % OPTIONAL
- topologyDirectionExtension = asn1_NOVALUE}, % OPTIONAL
- State) when (SID =/= asn1_NOVALUE) ->
- [
- enc_TerminationID(From, State),
- ?COMMA_INDENT(State),
- enc_TerminationID(To, State),
- ?COMMA_INDENT(State),
- enc_TopologyDirection(TD, State),
- ?COMMA_INDENT(State),
- enc_StreamID(SID, State)
- ];
-enc_TopologyRequest1(
- #'TopologyRequest'{terminationFrom = From,
- terminationTo = To,
- topologyDirection = TD,
- streamID = asn1_NOVALUE, % OPTIONAL
- topologyDirectionExtension = TDE}, % OPTIONAL
- State) when (TDE =/= asn1_NOVALUE) ->
- [
- enc_TerminationID(From, State),
- ?COMMA_INDENT(State),
- enc_TerminationID(To, State),
- ?COMMA_INDENT(State),
- enc_TopologyDirection(TD, State),
- ?COMMA_INDENT(State),
- enc_TopologyDirectionExtension(TDE, State)
- ];
-enc_TopologyRequest1(
- #'TopologyRequest'{terminationFrom = From,
- terminationTo = To,
- topologyDirection = TD,
- streamID = SID, % OPTIONAL
- topologyDirectionExtension = TDE}, % OPTIONAL
- State) when (SID =/= asn1_NOVALUE) andalso (TDE =/= asn1_NOVALUE) ->
- [
- enc_TerminationID(From, State),
- ?COMMA_INDENT(State),
- enc_TerminationID(To, State),
- ?COMMA_INDENT(State),
- enc_TopologyDirection(TD, State),
- ?COMMA_INDENT(State),
- enc_StreamID(SID, State),
- ?COMMA_INDENT(State),
- enc_TopologyDirectionExtension(TDE, State)
- ].
-
-enc_TopologyDirection(bothway, _State) ->
- ?BothwayToken;
-enc_TopologyDirection(isolate, _State) ->
- ?IsolateToken;
-enc_TopologyDirection(oneway, _State) ->
- ?OnewayToken.
-
-enc_TopologyDirectionExtension(onewayexternal, _State) ->
- ?OnewayExternalToken;
-enc_TopologyDirectionExtension(onewayboth, _State) ->
- ?OnewayBothToken.
-
-enc_iepsValue(Val, _State) ->
- [
- ?IEPSToken,
- ?EQUAL,
- case Val of
- false -> ?OffToken;
- true -> ?OnToken
- end
- ].
-
-
-
-enc_AmmRequest(#'AmmRequest'{terminationID = TIDs,
- descriptors = Ds}, State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList(TIDs, State),
- enc_opt_brackets(
- enc_list([{Ds, fun enc_ammDescriptor/2}], ?INC_INDENT(State)),
- State)
- ].
-
-enc_ammDescriptor({Tag, Desc}, State) ->
- case Tag of
- mediaDescriptor -> enc_MediaDescriptor(Desc, State);
- modemDescriptor -> enc_ModemDescriptor(Desc, State);
- muxDescriptor -> enc_MuxDescriptor(Desc, State);
- eventsDescriptor -> enc_EventsDescriptor(Desc, State);
- eventBufferDescriptor -> enc_EventBufferDescriptor(Desc, State);
- signalsDescriptor -> enc_SignalsDescriptor(Desc, State);
- digitMapDescriptor -> enc_DigitMapDescriptor(Desc, State);
- auditDescriptor -> enc_AuditDescriptor(Desc, State);
- statisticsDescriptor -> enc_StatisticsDescriptor(Desc, State);
- _ ->
- error({invalid_ammDescriptor_tag, Tag})
- end.
-
-enc_AmmsReply(#'AmmsReply'{terminationID = TIDs,
- terminationAudit = asn1_NOVALUE}, State) ->
- [
- ?EQUAL,
- enc_termIDList(TIDs, State)
- ];
-enc_AmmsReply(#'AmmsReply'{terminationID = TIDs,
- terminationAudit = []}, State) ->
- [
- ?EQUAL,
- enc_termIDList(TIDs, State)
- ];
-enc_AmmsReply(#'AmmsReply'{terminationID = TIDs,
- terminationAudit = Res}, State) ->
- [
- ?EQUAL,
- enc_termIDList(TIDs, State),
- case lists:flatten(enc_TerminationAudit(Res, ?INC_INDENT(State))) of
- [] ->
- [];
- L ->
- [
- ?LBRKT_INDENT(State),
- L,
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-enc_SubtractRequest(#'SubtractRequest'{terminationID = TIDs,
- auditDescriptor = asn1_NOVALUE},
- State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList(TIDs, State)
- ];
-enc_SubtractRequest(#'SubtractRequest'{terminationID = TIDs,
- auditDescriptor = AD},
- State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList(TIDs, State),
- ?LBRKT_INDENT(State),
- enc_AuditDescriptor(AD, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_AuditRequest(#'AuditRequest'{terminationID = TID,
- auditDescriptor = asn1_NOVALUE,
- terminationIDList = asn1_NOVALUE}, State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList([TID], State)
- ];
-enc_AuditRequest(#'AuditRequest'{terminationID = TID,
- auditDescriptor = asn1_NOVALUE,
- terminationIDList = [TID|_] = TIDList},
- State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList(TIDList, State)
- ];
-enc_AuditRequest(#'AuditRequest'{terminationID = TID,
- auditDescriptor = asn1_NOVALUE,
- terminationIDList = TIDList},
- _State) ->
- error({invalid_terminationID, TID, TIDList});
-enc_AuditRequest(#'AuditRequest'{terminationID = TID,
- auditDescriptor = AD,
- terminationIDList = asn1_NOVALUE}, State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList([TID], State),
- ?LBRKT_INDENT(State),
- enc_AuditDescriptor(AD, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_AuditRequest(#'AuditRequest'{terminationID = TID,
- auditDescriptor = AD,
- terminationIDList = [TID|_] = TIDList},
- State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList(TIDList, State),
- ?LBRKT_INDENT(State),
- enc_AuditDescriptor(AD, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_AuditRequest(#'AuditRequest'{terminationID = TID,
- auditDescriptor = _AD,
- terminationIDList = TIDList},
- _State) ->
- error({invalid_terminationID, TID, TIDList}).
-
-%% auditReply = (AuditValueToken / AuditCapToken )
-%% ( contextTerminationAudit / auditOther)
-%% auditOther = EQUAL TerminationID LBRKT
-%% terminationAudit RBRKT
-%% terminationAudit = auditReturnParameter *(COMMA auditReturnParameter)
-%%
-%% contextTerminationAudit = EQUAL CtxToken ( terminationIDList /
-%% LBRKT errorDescriptor RBRKT )
-enc_AuditReply({Tag, Val}, State) ->
-%% d("enc_AuditReply -> entry with"
-%% "~n Tag: ~p"
-%% "~n Val: ~p", [Tag, Val]),
- case Tag of
- contextAuditResult ->
- [
- ?EQUAL,
- ?CtxToken,
- enc_TerminationIDList(Val, State)
- ];
- error ->
- [
- ?EQUAL,
- ?CtxToken,
- ?LBRKT_INDENT(State),
- enc_ErrorDescriptor(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
- auditResult when is_record(Val, 'AuditResult') ->
- enc_auditOther(Val, State);
- auditResult ->
- error({invalid_auditResult, Val});
- auditResultTermList ->
- enc_TermListAuditResult(Val, State);
- _ ->
- error({invalid_AuditReply_tag, Tag})
- end.
-
-%% This is actually the same as AuditResult with the exception
-%% that instead of terminationID we have terminationIDList.
-enc_TermListAuditResult(
- #'TermListAuditResult'{terminationIDList = TIDList,
- terminationAuditResult = asn1_NOVALUE}, State) ->
-%% d("enc_TermListAuditResult -> entry with"
-%% "~n TIDList: ~p", [TIDList]),
- [
- ?EQUAL,
- enc_termIDList(TIDList, State)
- ];
-enc_TermListAuditResult(
- #'TermListAuditResult'{terminationIDList = TIDList,
- terminationAuditResult = []}, State) ->
-%% d("enc_TermListAuditResult -> entry with"
-%% "~n TIDList: ~p", [TIDList]),
- [
- ?EQUAL,
- enc_termIDList(TIDList, State)
- ];
-enc_TermListAuditResult(
- #'TermListAuditResult'{terminationIDList = TIDList,
- terminationAuditResult = TAR}, State) ->
-%% d("enc_TermListAuditResult -> entry with"
-%% "~n TIDList: ~p"
-%% "~n TAR: ~p", [TIDList, TAR]),
- [
- ?EQUAL,
- enc_termIDList(TIDList, State),
- case lists:flatten(enc_TerminationAudit(TAR, ?INC_INDENT(State))) of
- [] ->
- [];
- L ->
- [
- ?LBRKT_INDENT(State),
- L,
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-enc_auditOther(#'AuditResult'{terminationID = TID,
- terminationAuditResult = asn1_NOVALUE}, State) ->
- [
- ?EQUAL,
- enc_termIDList([TID], State)
- ];
-enc_auditOther(#'AuditResult'{terminationID = TID,
- terminationAuditResult = []}, State) ->
- [
- ?EQUAL,
- enc_termIDList([TID], State)
- ];
-enc_auditOther(#'AuditResult'{terminationID = TID,
- terminationAuditResult = Res}, State) ->
- [
- ?EQUAL,
- enc_termIDList([TID], State),
- case lists:flatten(enc_TerminationAudit(Res, ?INC_INDENT(State))) of
- [] ->
- [];
- L ->
- [
- ?LBRKT_INDENT(State),
- L,
- ?RBRKT_INDENT(State)
- ]
- end
- ].
-
-
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = asn1_NOVALUE,
- auditPropertyToken = asn1_NOVALUE},
- _State) ->
-% d("enc_AuditDescriptor(asn1_NOVALUE) -> entry"),
- [
- ?AuditToken,
- [?LBRKT, ?RBRKT]
- ];
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = [],
- auditPropertyToken = asn1_NOVALUE},
- _State) ->
-% d("enc_AuditDescriptor([]) -> entry"),
- [
- ?AuditToken,
- [?LBRKT, ?RBRKT]
- ];
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = List,
- auditPropertyToken = asn1_NOVALUE},
- State) ->
- [
- ?AuditToken,
- [
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_auditItem/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- ];
-%% - v2 -
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = asn1_NOVALUE,
- auditPropertyToken = Prop},
- State) ->
- [
- ?AuditToken,
- [
- ?LBRKT_INDENT(State),
- enc_auditPropertyToken(Prop, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- ];
-enc_AuditDescriptor(#'AuditDescriptor'{auditToken = List,
- auditPropertyToken = Prop},
- State) ->
- [
- ?AuditToken,
- [
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_auditItem/2}], ?INC_INDENT(State)),
- ?COMMA_INDENT(State),
- enc_auditPropertyToken(Prop, ?INC_INDENT(State)), % v2
- ?RBRKT_INDENT(State)
- ]
- ].
-
-enc_auditItem(signalsToken, _State) ->
- ?SignalsToken;
-enc_auditItem(eventBufferToken, _State) ->
- ?EventBufferToken;
-enc_auditItem(eventsToken, _State) ->
- ?EventsToken;
-enc_auditItem(Val, State) ->
- enc_auditReturnItem(Val, State).
-
-
-enc_auditReturnItem(muxToken, _State) ->
- ?MuxToken;
-enc_auditReturnItem(modemToken, _State) ->
- ?ModemToken;
-enc_auditReturnItem(mediaToken, _State) ->
- ?MediaToken;
-enc_auditReturnItem(digitMapToken, _State) ->
- ?DigitMapToken;
-enc_auditReturnItem(statsToken, _State) ->
- ?StatsToken;
-enc_auditReturnItem(observedEventsToken, _State) ->
- ?ObservedEventsToken;
-enc_auditReturnItem(packagesToken, _State) ->
- ?PackagesToken.
-
-
-%% - v2 begin -
-
-enc_auditPropertyToken([], _State) ->
- [];
-enc_auditPropertyToken([Param | Params], State) ->
- [enc_IndAudauditReturnParameter(Param, State),
- [[?COMMA_INDENT(State),
- enc_IndAudauditReturnParameter(P, State)] || P <- Params]].
-
-
-enc_IndAudauditReturnParameter({Tag, Val}, State) ->
- case Tag of
- indAudMediaDescriptor ->
- enc_IndAudMediaDescriptor(Val, State);
- indAudEventsDescriptor ->
- enc_IndAudEventsDescriptor(Val, State);
- indAudSignalsDescriptor ->
- enc_IndAudSignalsDescriptor(Val, State);
- indAudDigitMapDescriptor ->
- enc_IndAudDigitMapDescriptor(Val, State);
- indAudEventBufferDescriptor ->
- enc_IndAudEventBufferDescriptor(Val, State);
- indAudStatisticsDescriptor ->
- enc_IndAudStatisticsDescriptor(Val, State);
- indAudPackagesDescriptor ->
- enc_IndAudPackagesDescriptor(Val, State);
- _ ->
- error({invalid_IndAudauditReturnParameter_tag, Tag})
- end.
-
-enc_IndAudMediaDescriptor(
- #'IndAudMediaDescriptor'{termStateDescr = asn1_NOVALUE,
- streams = Streams}, State) ->
- [
- ?MediaToken,
- ?LBRKT_INDENT(State),
- enc_IndAudMediaDescriptor_streams(Streams, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_IndAudMediaDescriptor(
- #'IndAudMediaDescriptor'{termStateDescr = TSD,
- streams = asn1_NOVALUE}, State) ->
- [
- ?MediaToken,
- ?LBRKT_INDENT(State),
- enc_IndAudTerminationStateDescriptor(TSD, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_IndAudMediaDescriptor(
- #'IndAudMediaDescriptor'{termStateDescr = TSD,
- streams = Streams}, State) ->
- [
- ?MediaToken,
- ?LBRKT_INDENT(State),
- enc_IndAudTerminationStateDescriptor(TSD, ?INC_INDENT(State)),
- ?COMMA_INDENT(State),
- enc_IndAudMediaDescriptor_streams(Streams, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudMediaDescriptor_streams({oneStream, Val}, State) ->
- enc_IndAudStreamParms(Val, State);
-enc_IndAudMediaDescriptor_streams({multiStream, Val}, State) ->
- enc_IndAudMediaDescriptor_multiStream(Val, State);
-enc_IndAudMediaDescriptor_streams({Tag, _Val}, _State) ->
- error({invalid_IndAudMediaDescriptor_streams_tag, Tag}).
-
-enc_IndAudTerminationStateDescriptor(
- #'IndAudTerminationStateDescriptor'{propertyParms = [],
- eventBufferControl = asn1_NOVALUE,
- serviceState = 'NULL',
- serviceStateSel = asn1_NOVALUE},
- _State) ->
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(_State),
- ?ServiceStatesToken,
- ?RBRKT_INDENT(_State)
- ];
-enc_IndAudTerminationStateDescriptor(
- #'IndAudTerminationStateDescriptor'{propertyParms = [],
- eventBufferControl = asn1_NOVALUE,
- serviceState = asn1_NOVALUE,
- serviceStateSel = SSS},
- State) when (SSS =/= asn1_NOVALUE) ->
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(State),
- enc_serviceState(SSS, State),
- ?RBRKT_INDENT(State)
- ];
-enc_IndAudTerminationStateDescriptor(
- #'IndAudTerminationStateDescriptor'{propertyParms = [],
- eventBufferControl = 'NULL',
- serviceState = asn1_NOVALUE,
- serviceStateSel = asn1_NOVALUE},
- _State) ->
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(_State),
- ?BufferToken,
- ?RBRKT_INDENT(_State)
- ];
-enc_IndAudTerminationStateDescriptor(
- #'IndAudTerminationStateDescriptor'{propertyParms = [Parms],
- eventBufferControl = asn1_NOVALUE,
- serviceState = asn1_NOVALUE,
- serviceStateSel = asn1_NOVALUE},
- State) ->
- #'IndAudPropertyParm'{name = Name} = Parms,
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(State),
- enc_PkgdName(Name, State),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudStreamParms(
- #'IndAudStreamParms'{localControlDescriptor = LCD,
- localDescriptor = LD,
- remoteDescriptor = RD,
- statisticsDescriptor = SD}, State) ->
- [
- enc_list([{[LCD], fun enc_IndAudLocalControlDescriptor/2},
- {[LD], fun enc_remoteDescriptor/2},
- {[RD], fun enc_localDescriptor/2},
- {[SD], fun enc_IndAudStatisticsDescriptor/2}],
- ?INC_INDENT(State))
- ].
-
-enc_IndAudLocalControlDescriptor(
- #'IndAudLocalControlDescriptor'{streamMode = SM,
- reserveValue = RV,
- reserveGroup = RG,
- propertyParms = PP,
- streamModeSel = asn1_NOVALUE}, State) ->
- [
- ?LocalControlToken,
- ?LBRKT_INDENT(State),
- enc_list([{[SM], fun('NULL', _) -> ?ModeToken end},
- {[RV], fun('NULL', _) -> ?ReservedValueToken end},
- {[RG], fun('NULL', _) -> ?ReservedGroupToken end},
- {PP, fun enc_IndAudPropertyParm/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_IndAudLocalControlDescriptor(
- #'IndAudLocalControlDescriptor'{streamMode = asn1_NOVALUE,
- reserveValue = RV,
- reserveGroup = RG,
- propertyParms = PP,
- streamModeSel = SMS}, State) ->
- [
- ?LocalControlToken,
- ?LBRKT_INDENT(State),
- enc_list([{[RV], fun('NULL', _) -> ?ReservedValueToken end},
- {[RG], fun('NULL', _) -> ?ReservedGroupToken end},
- { PP, fun enc_IndAudPropertyParm/2},
- {[SMS], fun enc_StreamMode/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudPropertyParm(#'IndAudPropertyParm'{name = Name, propertyParms = PP},
- State) ->
- [
- enc_list([{[Name], fun enc_PkgdName/2},
- {[PP], fun enc_PropertyParm/2}], State)
- ].
-
-enc_IndAudMediaDescriptor_multiStream(Val, State) when is_list(Val) ->
- [
- enc_list([{Val, fun enc_IndAudStreamDescriptor/2}], State)
- ];
-enc_IndAudMediaDescriptor_multiStream(Val, _State) ->
- error({invalid_IndAudMediaDescriptor_multiStream, Val}).
-
-enc_IndAudStreamDescriptor(#'IndAudStreamDescriptor'{streamID = SID,
- streamParms = Parms},
- State) ->
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(SID, State),
- ?LBRKT_INDENT(State),
- enc_IndAudStreamParms(Parms, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudEventBufferDescriptor(
- #'IndAudEventBufferDescriptor'{eventName = EvName,
- streamID = ID}, State) ->
- [
- ?EventBufferToken,
- ?LBRKT_INDENT(State),
- enc_PkgdName(EvName, State),
- enc_IndAudEventBufferDescriptor_eventSpec(ID, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudEventBufferDescriptor_eventSpec(asn1_NOVALUE, _State) ->
- [
- ];
-enc_IndAudEventBufferDescriptor_eventSpec({eventParameterName, ParamName},
- State) ->
- [
- ?LBRKT_INDENT(State),
- enc_Name(ParamName, State),
- ?RBRKT_INDENT(State)
- ];
-enc_IndAudEventBufferDescriptor_eventSpec({eventStream, ID}, State) ->
- [
- ?LBRKT_INDENT(State),
- enc_eventStream(ID, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_IndAudEventBufferDescriptor_eventSpec(ID, State) ->
- [
- ?LBRKT_INDENT(State),
- enc_eventStream(ID, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudEventsDescriptor(
- #'IndAudEventsDescriptor'{requestID = asn1_NOVALUE,
- pkgdName = Name,
- streamID = asn1_NOVALUE}, State) ->
- [
- ?EventsToken,
- ?LBRKT_INDENT(State),
- enc_PkgdName(Name, State),
- ?RBRKT_INDENT(State)
- ];
-enc_IndAudEventsDescriptor(
- #'IndAudEventsDescriptor'{requestID = RID,
- pkgdName = Name,
- streamID = asn1_NOVALUE}, State) ->
- [
- ?EventsToken,
- ?EQUAL,
- enc_RequestID(RID, State),
- ?LBRKT_INDENT(State),
- enc_PkgdName(Name, State),
- ?RBRKT_INDENT(State)
- ].
-
-
-enc_IndAudSignalsDescriptor(asn1_NOVALUE, _State) ->
- [
- ?SignalsToken,
- ?LBRKT_INDENT(_State),
- ?RBRKT_INDENT(_State)
- ];
-enc_IndAudSignalsDescriptor(Val, State) ->
- [
- ?SignalsToken,
- ?LBRKT_INDENT(State),
- enc_IndAudSignalsDescriptor_value(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudSignalsDescriptor_value({signal, Val}, State) ->
- enc_IndAudSignal(Val, State);
-enc_IndAudSignalsDescriptor_value({seqSigList, Val}, State) ->
- enc_IndAudSeqSigList(Val, State).
-
-enc_IndAudSignal(#'IndAudSignal'{signalName = SignalName,
- streamID = asn1_NOVALUE,
- signalRequestID = asn1_NOVALUE}, State) ->
- [
- enc_SignalName(SignalName, State)
- ];
-enc_IndAudSignal(#'IndAudSignal'{signalName = SignalName,
- streamID = SID,
- signalRequestID = SRID}, State) ->
- [
- enc_SignalName(SignalName, State),
- ?LBRKT_INDENT(State),
- enc_list([{[SID], fun enc_StreamID/2},
- {[SRID], fun enc_sigRequestID/2}],
- State),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudSeqSigList(#'IndAudSeqSigList'{id = ID,
- signalList = asn1_NOVALUE},
- State) ->
- [
- ?SignalListToken,
- ?EQUAL,
- enc_UINT16(ID, State)
- ];
-enc_IndAudSeqSigList(#'IndAudSeqSigList'{id = ID,
- signalList = SL},
- State) ->
- [
- ?SignalListToken,
- ?EQUAL,
- enc_UINT16(ID, State),
- ?LBRKT_INDENT(State),
- enc_IndAudSignal(SL, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_IndAudDigitMapDescriptor(#'IndAudDigitMapDescriptor'{digitMapName = Name},
- State) ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State)
- ].
-
-enc_IndAudStatisticsDescriptor(#'IndAudStatisticsDescriptor'{statName = Name},
- State) ->
- [
- ?StatsToken,
- ?LBRKT_INDENT(State),
- enc_PkgdName(Name, State),
- ?RBRKT_INDENT(State)
- ].
-
-
-enc_IndAudPackagesDescriptor(#'IndAudPackagesDescriptor'{packageName = N,
- packageVersion = V},
- State) ->
- [
- ?PackagesToken,
- ?LBRKT_INDENT(State),
- enc_Name(N, State),
- "-",
- enc_UINT16(V, State),
- ?RBRKT_INDENT(State)
- ].
-
-
-%% - v2 end -
-
-
-enc_TerminationAudit({'TerminationAudit', Val}, State) ->
- enc_TerminationAudit(Val, State);
-enc_TerminationAudit([Mand | Opt], State) ->
- [enc_AuditReturnParameter(Mand, State),
- [[?COMMA_INDENT(State), enc_AuditReturnParameter(Val, State)] || Val <- Opt]].
-
-enc_AuditReturnParameter({'AuditReturnParameter',Val}, State) ->
- enc_AuditReturnParameter(Val, State);
-enc_AuditReturnParameter({Tag, Val}, State) ->
-%% d("enc_AuditReturnParameter -> entry with"
-%% "~n Tag: ~p"
-%% "~n Val: ~p", [Tag, Val]),
- case Tag of
- mediaDescriptor ->
- enc_MediaDescriptor(Val, State);
- modemDescriptor ->
- enc_ModemDescriptor(Val, State);
- muxDescriptor ->
- enc_MuxDescriptor(Val, State);
- eventsDescriptor ->
- enc_EventsDescriptor(Val, State);
- signalsDescriptor ->
- enc_SignalsDescriptor(Val, State);
- digitMapDescriptor ->
- enc_DigitMapDescriptor(Val, State);
- observedEventsDescriptor ->
- enc_ObservedEventsDescriptor(Val, State);
- eventBufferDescriptor ->
- enc_EventBufferDescriptor(Val, State);
- statisticsDescriptor ->
- enc_StatisticsDescriptor(Val, State);
- packagesDescriptor ->
- enc_PackagesDescriptor(Val, State);
- errorDescriptor ->
- enc_ErrorDescriptor(Val, State);
- emptyDescriptors ->
- enc_EmptyDescriptors(Val, State);
- _ ->
- error({invalid_AuditReturnParameter_tag, Tag})
- end.
-
-enc_EmptyDescriptors(#'AuditDescriptor'{auditToken = asn1_NOVALUE}, _State) ->
- [];
-enc_EmptyDescriptors(#'AuditDescriptor'{auditToken = []}, _State) ->
- [];
-enc_EmptyDescriptors(#'AuditDescriptor'{auditToken = List}, State) ->
-%% d("enc_AuditReturnParameter -> entry with"
-%% "~n List: ~p", [List]),
- enc_list([{List, fun enc_auditReturnItem/2}], State).
-
-
-enc_NotifyRequest(#'NotifyRequest'{terminationID = TIDs,
- observedEventsDescriptor = OED,
- errorDescriptor = asn1_NOVALUE},
- State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList(TIDs, State),
- ?LBRKT_INDENT(State),
- enc_ObservedEventsDescriptor(OED, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_NotifyRequest(#'NotifyRequest'{terminationID = TIDs,
- observedEventsDescriptor = OED,
- errorDescriptor = ED}, State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList(TIDs, State),
- ?LBRKT_INDENT(State),
- enc_ObservedEventsDescriptor(OED, ?INC_INDENT(State)),
- ?COMMA,
- enc_ErrorDescriptor(ED, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_NotifyReply(#'NotifyReply'{terminationID = TIDs,
- errorDescriptor = asn1_NOVALUE}, State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList(TIDs, State)
- ];
-enc_NotifyReply(#'NotifyReply'{terminationID = TIDs,
- errorDescriptor = ED}, State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList(TIDs, State),
- ?LBRKT_INDENT(State),
- enc_ErrorDescriptor(ED, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_ObservedEventsDescriptor(
- #'ObservedEventsDescriptor'{requestId = RID,
- observedEventLst = OEL}, State) ->
- [
- ?ObservedEventsToken,
- ?EQUAL,
- enc_RequestID(RID, State),
- ?LBRKT_INDENT(State),
- enc_observedEvents(OEL, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_observedEvents([Mand | Opt], State) ->
- [enc_ObservedEvent(Mand, State),
- [[?COMMA_INDENT(State), enc_ObservedEvent(Val, State)] || Val <- Opt]].
-
-%% ;time per event, because it might be buffered
-%% observedEvent = [ TimeStamp LWSP COLON] LWSP
-%% pkgdName [ LBRKT observedEventParameter
-%% *(COMMA observedEventParameter) RBRKT ]
-%%
-%% ;at-most-once eventStream, every eventParameterName at most once
-%% observedEventParameter = eventStream / eventOther
-enc_ObservedEvent(#'ObservedEvent'{eventName = EN,
- streamID = SID,
- eventParList = EPL,
- timeNotation = asn1_NOVALUE}, State) ->
- [
- ?LWSP,
- enc_EventName(EN, State),
- enc_opt_brackets(
- enc_list([{[SID], fun enc_eventStream/2},
- { EPL, fun enc_eventOther/2}],
- ?INC_INDENT(State)),
- State)
- ];
-enc_ObservedEvent(#'ObservedEvent'{eventName = EN,
- streamID = SID,
- eventParList = EPL,
- timeNotation = TN}, State) ->
- [
- enc_TimeNotation(TN, State),
- ?LWSP,
- ?COLON,
- ?LWSP,
- enc_EventName(EN, State),
- enc_opt_brackets(
- enc_list([{[SID], fun enc_eventStream/2},
- {EPL, fun enc_eventOther/2}],
- ?INC_INDENT(State)),
- State)
- ].
-
-enc_EventName({'EventName', Val}, State) ->
- enc_EventName(Val, State);
-enc_EventName(Val, State) ->
- PkgdName = ?META_ENC(event, Val),
- enc_PkgdName(PkgdName, State).
-
-enc_eventStream(Val, State) ->
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(Val, State)
- ].
-
-%% The value is already encoded
-enc_eventOther(#megaco_event_parameter{name = Name,
- value = Value}, State)
- when is_list(Value) ->
- [
- enc_Name(Name, State),
- ?EqualToken,
- Value
- ];
-%% Special treatment of the ds parameter of the dd/ce event
-enc_eventOther(#'EventParameter'{eventParameterName = "ds" = Name,
- value = [DigitString],
- extraInfo = asn1_NOVALUE}, State) ->
- [
- enc_Name(Name, State),
- ?EqualToken,
- enc_DigitString(DigitString, State)
- ];
-enc_eventOther(#'EventParameter'{eventParameterName = Name,
- value = Value,
- extraInfo = Extra}, State) ->
- [
- enc_Name(Name, State),
- enc_propertyParmValues(Value, Extra, State)
- ].
-
-enc_ServiceChangeRequest(
- #'ServiceChangeRequest'{terminationID = TIDs,
- serviceChangeParms = Parms}, State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList(TIDs, State),
- ?LBRKT_INDENT(State),
- enc_ServiceChangeParm(Parms, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-%% serviceChangeReply = ServiceChangeToken EQUAL TerminationID
-%% [LBRKT (errorDescriptor /
-%% serviceChangeReplyDescriptor) RBRKT]
-%% serviceChangeReplyDescriptor = ServicesToken LBRKT
-%% servChgReplyParm *(COMMA servChgReplyParm) RBRKT
-%%
-%% ;at-most-once. Version is REQUIRED on first ServiceChange response
-%% servChgReplyParm = (serviceChangeAddress / serviceChangeMgcId /
-%% serviceChangeProfile / serviceChangeVersion )
-enc_ServiceChangeReply(
- #'ServiceChangeReply'{terminationID = TIDs,
- serviceChangeResult = Res}, State) ->
- [
- %% Assume that Token is added elsewhere
- ?EQUAL,
- enc_termIDList(TIDs, State),
- enc_ServiceChangeResult(Res, State)
- ].
-
-enc_ServiceChangeResult({'ServiceChangeResult', Val}, State) ->
- enc_ServiceChangeResult(Val, State);
-enc_ServiceChangeResult({errorDescriptor, Val}, State) ->
- [
- ?LBRKT_INDENT(State),
- enc_ErrorDescriptor(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_ServiceChangeResult({serviceChangeResParms, Val}, State) ->
- case enc_ServiceChangeResParm(Val, ?INC_INDENT(?INC_INDENT(State))) of
- [] ->
- [];
- ResParms ->
- [
- ?LBRKT_INDENT(State),
- ?ServicesToken,
- fun(_S) ->
- [
- ?LBRKT_INDENT(_S),
- ResParms,
- ?RBRKT_INDENT(_S)
- ]
- end(?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end;
-enc_ServiceChangeResult({Tag, _}, _State) ->
- error({invalid_ServiceChangeResult_tag, Tag}).
-
-%% %% Required length of termination ID list is 1
-%% enc_TerminationIDList1({'TerminationIDList',Val}, State) ->
-%% enc_TerminationIDList1(Val, State);
-%% enc_TerminationIDList1([Singleton], State) ->
-%% enc_TerminationID(Singleton, State).
-
-%% No required length of termination ID list
-enc_TerminationIDList({'TerminationIDList',Val}, State) ->
- enc_TerminationIDList(Val, State);
-enc_TerminationIDList([TID], State) ->
- [
- ?LBRKT_INDENT(State),
- enc_TerminationID(TID, State),
- ?RBRKT_INDENT(State)
- ];
-enc_TerminationIDList(TIDs, State) ->
- [
- ?LBRKT_INDENT(State),
- enc_list([{TIDs, fun enc_TerminationID/2}], State),
- ?RBRKT_INDENT(State)
- ].
-
-enc_termIDList({'TerminationIDList',Val}, State) ->
- enc_termIDList(Val, State);
-enc_termIDList([Singleton], State) ->
- enc_TerminationID(Singleton, State);
-enc_termIDList(TidList, State)
- when is_list(TidList) andalso (length(TidList) > 1) ->
-%% d("enc_termIDList -> entry with"
-%% "~n TidList: ~p", [TidList]),
- State2 = ?INC_INDENT(State),
- [
- ?LSBRKT_INDENT(State),
- enc_list([{TidList, fun enc_TerminationID/2}], State2),
- ?RSBRKT_INDENT(State)
- ].
-
-%% TerminationID = "ROOT" / pathNAME / "$" / "*"
-%% ; Total length of pathNAME must not exceed 64 chars.
-%% pathNAME = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
-%% ["@" pathDomainName ]
-enc_TerminationID(Tid, State)
- when is_record(Tid, megaco_term_id) ->
- List = [{Tid#megaco_term_id.id, fun enc_tid_component/2 }],
- enc_list(List, State, fun(_S) -> ?SLASH end, false).
-
-enc_tid_component(Component, State) when is_list(Component) ->
- [enc_tid_sub_component(Sub, State) || Sub <- Component];
-enc_tid_component(Invalid, _State) ->
- error({invalid_id_list_component, Invalid}).
-
-enc_tid_sub_component(all = _Sub, _State) ->
- ?megaco_all;
-enc_tid_sub_component(choose = _Sub, _State) ->
- ?megaco_choose;
-enc_tid_sub_component(Char, _State) when is_integer(Char) ->
- Char;
-enc_tid_sub_component(Invalid, _State) ->
- error({invalid_id_list_sub_component, Invalid}).
-
-%% enc_tid_sub_component(Sub, _State) ->
-%% case Sub of
-%% all -> ?megaco_all;
-%% choose -> ?megaco_choose;
-%% Char when is_integer(Char) -> Char
-%% end.
-
-%% mediaDescriptor = MediaToken LBRKT mediaParm *(COMMA mediaParm) RBRKT
-%% ; at-most-once per item
-%% ; and either streamParm or streamDescriptor but not both
-%% mediaParm = (streamParm / streamDescriptor /
-%% terminationStateDescriptor)
-%% ; at-most-once
-%% streamParm = ( localDescriptor / remoteDescriptor /
-%% localControlDescriptor )
-%% streamDescriptor = StreamToken EQUAL StreamID LBRKT streamParm
-%% *(COMMA streamParm) RBRKT
-enc_MediaDescriptor(#'MediaDescriptor'{termStateDescr = TSD,
- streams = Streams}, State) ->
- [
- ?MediaToken,
- ?LBRKT_INDENT(State),
- enc_list([{[TSD], fun enc_TerminationStateDescriptor/2} |
- decompose_streams(Streams)],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-decompose_streams(asn1_NOVALUE) ->
- [];
-decompose_streams({'MediaDescriptor_streams',Val}) ->
- decompose_streams(Val);
-decompose_streams({Tag, Val}) ->
- case Tag of
- oneStream ->
- decompose_StreamParms(Val);
- multiStream ->
- [{Val, fun enc_StreamDescriptor/2}];
- _ ->
- error({invalid_streams_tag, Tag})
- end.
-
-decompose_StreamParms(Val)
- when is_record(Val, 'StreamParms') ->
- [
- {[Val#'StreamParms'.localControlDescriptor],
- fun enc_LocalControlDescriptor/2},
- {[Val#'StreamParms'.localDescriptor],
- fun enc_localDescriptor/2},
- {[Val#'StreamParms'.remoteDescriptor],
- fun enc_remoteDescriptor/2},
- {[Val#'StreamParms'.statisticsDescriptor],
- fun enc_StatisticsDescriptor/2}
- ].
-
-enc_StreamDescriptor(Val, State)
- when is_record(Val, 'StreamDescriptor') ->
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(Val#'StreamDescriptor'.streamID, State),
- ?LBRKT_INDENT(State),
- enc_list(decompose_StreamParms(Val#'StreamDescriptor'.streamParms),
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-%% localControlDescriptor = LocalControlToken LBRKT localParm
-%% *(COMMA localParm) RBRKT
-%%
-%% ; at-most-once per item
-%% localParm = ( streamMode / propertyParm /
-%% reservedValueMode / reservedGroupMode )
-%% reservedValueMode = ReservedValueToken EQUAL ( "ON" / "OFF" )
-%% reservedGroupMode = ReservedGroupToken EQUAL ( "ON" / "OFF" )
-%%
-%% reservedMode = ReservedToken EQUAL ( "ON" / "OFF" )
-%%
-%% streamMode = ModeToken EQUAL streamModes
-enc_LocalControlDescriptor(
- #'LocalControlDescriptor'{streamMode = asn1_NOVALUE,
- reserveValue = asn1_NOVALUE,
- reserveGroup = asn1_NOVALUE,
- propertyParms = []}, _State) ->
- error({invalid_LocalControlDescriptor, empty});
-enc_LocalControlDescriptor(
- #'LocalControlDescriptor'{streamMode = SM,
- reserveValue = RV,
- reserveGroup = RG,
- propertyParms = PPs}, State) ->
- [
- ?LocalControlToken,
- ?LBRKT_INDENT(State),
- enc_list([{[SM], fun enc_StreamMode/2},
- {[RG], fun enc_reservedGroupMode/2},
- {[RV], fun enc_reservedValueMode/2},
- {PPs, fun enc_PropertyParm/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_reservedGroupMode(Val, _State) ->
- [
- ?ReservedGroupToken,
- ?EQUAL,
- case Val of
- false -> ?OffToken;
- true -> ?OnToken
- end
- ].
-
-enc_reservedValueMode(Val, _State) ->
- [
- ?ReservedValueToken,
- ?EQUAL,
- case Val of
- false -> ?OffToken;
- true -> ?OnToken
- end
- ].
-
-enc_StreamMode({'StreamMode',Val}, State) ->
- enc_StreamMode(Val, State);
-enc_StreamMode(Val, _State) ->
- [
- ?ModeToken,
- ?EQUAL,
- case Val of
- sendOnly -> ?SendonlyToken;
- recvOnly -> ?RecvonlyToken;
- sendRecv -> ?SendrecvToken;
- inactive -> ?InactiveToken;
- loopBack -> ?LoopbackToken
- end
- ].
-
-enc_Name({'Name',Val}, State) ->
- enc_Name(Val, State);
-enc_Name(Val, State) ->
- %% BUGBUG: NAME = ALPHA *63(ALPHA / DIGIT / "_" )
- enc_STRING(Val, State, 1, 64).
-
-enc_PkgdName({'PkgdName', Val}, State) ->
- enc_PkgdName(Val, State);
-enc_PkgdName(Val, _State) ->
- %% BUGBUG: pkgdName = (NAME / "*") SLASH (ItemID / "*" )
- %% enc_OCTET_STRING(Val, _State, 1, 64).
- if
- is_list(Val) ->
- Length = length(Val),
- if
- (Length >= 1) ->
- if
- (Length =< 64) ->
- Val;
- true ->
- error({pkgdName_toolong, Length, 64})
- end;
- true ->
- error({pkgdName_tooshort, Length, 1})
- end;
- true ->
- error({invalid_PkgdName, Val})
- end.
-
-enc_localDescriptor(Val, State)
- when is_record(Val, 'LocalRemoteDescriptor') ->
- [
- ?LocalToken,
- ?LBRKT,
- enc_LocalRemoteDescriptor(Val, State),
- ?RBRKT_INDENT(State)
- ].
-
-enc_remoteDescriptor(Val, State)
- when is_record(Val, 'LocalRemoteDescriptor') ->
- [
- ?RemoteToken,
- ?LBRKT,
- enc_LocalRemoteDescriptor(Val, State),
- ?RBRKT_INDENT(State)
- ].
-
-%% When text encoding the protocol, the descriptors consist of session
-%% descriptions as defined in SDP (RFC2327), except that the "s=", "t="
-%% and "o=" lines are optional. When multiple session descriptions are
-%% provided in one descriptor, the "v=" lines are required as delimiters;
-%% otherwise they are optional. Implementations shall accept session
-%% descriptions that are fully conformant to RFC2327. When binary
-%% encoding the protocol the descriptor consists of groups of properties
-%% (tag-value pairs) as specified in Annex C. Each such group may
-%% contain the parameters of a session description.
-enc_LocalRemoteDescriptor(Val, State)
- when is_record(Val, 'LocalRemoteDescriptor') ->
- case Val#'LocalRemoteDescriptor'.propGrps of
- [] ->
- [];
- [OptV | MandV] ->
- [?LfToken,
- enc_PropertyGroup(OptV, opt_v, State) |
- [enc_PropertyGroup(M, mand_v, State) || M <- MandV]]
- end.
-
-enc_PropertyGroup({'PropertyGroup',Val}, RequiresV, State) ->
- enc_PropertyGroup(Val, RequiresV, State);
-enc_PropertyGroup([H | _T] = List, mand_v, State)
- when is_record(H, 'PropertyParm') andalso (H#'PropertyParm'.name =:= "v") ->
- enc_PropertyGroup(List, opt_v, State);
-enc_PropertyGroup(PG, opt_v, State) ->
- [
- [[enc_PropertyGroupParm(PP, State), ?CrToken, ?LfToken] || PP <- PG]
- ].
-
-enc_PropertyGroupParm(Val, State)
- when is_record(Val, 'PropertyParm') ->
- [OctetString] = Val#'PropertyParm'.value,
- [
- enc_PkgdName(Val#'PropertyParm'.name, State),
- ?EqualToken,
- enc_OCTET_STRING(OctetString, State, 0, infinity)
- ].
-
-%% propertyParm = pkgdName parmValue
-%% parmValue = (EQUAL alternativeValue/ INEQUAL VALUE)
-%% alternativeValue = ( VALUE / LSBRKT VALUE *(COMMA VALUE) RSBRKT /
-%% LSBRKT VALUE DOT DOT VALUE RSBRKT )
-enc_PropertyParm(Val, State)
- when is_record(Val, 'PropertyParm') ->
-%% d("enc_PropertyParm -> entry with"
-%% "~n Val: ~p", [Val]),
- PkgdName = ?META_ENC(property, Val#'PropertyParm'.name),
- [
- enc_PkgdName(PkgdName, State),
- enc_propertyParmValues(Val#'PropertyParm'.value,
- Val#'PropertyParm'.extraInfo,
- State)
- ].
-
-enc_propertyParmValues([Single], asn1_NOVALUE, State) ->
-%% d("enc_PropertyParmValues -> entry with"
-%% "~n Single: ~p", [Single]),
- [
- ?EqualToken,
- enc_Value(Single, State)
- ];
-enc_propertyParmValues([Single], {relation, Rel}, State) ->
-%% d("enc_PropertyParmValues -> entry with"
-%% "~n Single: ~p"
-%% "~n Rel: ~p", [Single, Rel]),
- case Rel of
- greaterThan -> [$>, enc_Value(Single, State)];
- smallerThan -> [$<, enc_Value(Single, State)];
- unequalTo -> [$#, enc_Value(Single, State)]
- end;
-enc_propertyParmValues([Low, High], {range, true}, State)->
- %% Exact two values
- [
- ?EQUAL,
- ?LSBRKT,
- enc_Value(Low, State),
- ?COLON,
- enc_Value(High, State),
- ?RSBRKT
- ];
-enc_propertyParmValues(Values, {sublist, true}, State)->
- %% sublist (i.e. A AND B AND ...)
- [
- ?EQUAL,
- ?LSBRKT_INDENT(State),
- enc_list([{Values, fun enc_Value/2}], ?INC_INDENT(State)),
- ?RSBRKT_INDENT(State)
- ];
-enc_propertyParmValues(Values, {sublist, false}, State) ->
- %% alternatives (i.e. A OR B OR ...)
- [
- ?EQUAL,
- ?LBRKT_INDENT(State),
- enc_list([{Values, fun enc_Value/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_propertyParmValues(V, EI, _State) ->
- error({invalid_property_parm_values, V, EI}).
-
-enc_TerminationStateDescriptor(Val, State)
- when is_record(Val, 'TerminationStateDescriptor') ->
- [
- ?TerminationStateToken,
- ?LBRKT_INDENT(State),
- enc_list([{Val#'TerminationStateDescriptor'.propertyParms,
- fun enc_PropertyParm/2},
- {[Val#'TerminationStateDescriptor'.eventBufferControl],
- fun enc_eventBufferControl/2},
- {[Val#'TerminationStateDescriptor'.serviceState],
- fun enc_serviceState/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_eventBufferControl(Val, _State) ->
- [
-
- ?BufferToken,
- ?EQUAL,
- case Val of
- off -> ?OffToken;
- lockStep -> ?LockStepToken
- end
- ].
-
-enc_serviceState({'ServiceState',Val}, State) ->
- enc_serviceState(Val, State);
-enc_serviceState(Val, _State) ->
- [
- ?ServiceStatesToken,
- ?EQUAL,
- case Val of
- test -> ?TestToken;
- outOfSvc -> ?OutOfSvcToken;
- inSvc -> ?InSvcToken
- end
- ].
-
-enc_MuxDescriptor(Val, State)
- when is_record(Val, 'MuxDescriptor') ->
- [
- ?MuxToken,
- ?EQUAL,
- enc_MuxType(Val#'MuxDescriptor'.muxType, State),
- enc_TerminationIDList(Val#'MuxDescriptor'.termList, State)
- ].
-
-enc_MuxType({'MuxType',Val}, State) ->
- enc_MuxType(Val, State);
-enc_MuxType(Val, _State) ->
- case Val of
- h221 -> ?H221Token;
- h223 -> ?H223Token;
- h226 -> ?H226Token;
- v76 -> ?V76Token;
- %% extensionParameter
- nx64k -> ?Nx64kToken % v2
- end.
-
-enc_StreamID({'StreamID',Val}, State) ->
- enc_StreamID(Val, State);
-enc_StreamID(Val, State) ->
- enc_UINT16(Val, State).
-
-enc_EventsDescriptor(#'EventsDescriptor'{requestID = asn1_NOVALUE,
- eventList = []}, _State) ->
- [
- ?EventsToken
- ];
-enc_EventsDescriptor(#'EventsDescriptor'{requestID = RID,
- eventList = Evs}, State)
- when (RID =/= asn1_NOVALUE) andalso (Evs =/= []) ->
- [
- ?EventsToken,
- ?EQUAL,
- enc_RequestID(RID, State),
- ?LBRKT_INDENT(State),
- enc_list([{Evs, fun enc_RequestedEvent/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_EventsDescriptor(#'EventsDescriptor'{requestID = RID,
- eventList = Evs}, _State) ->
- error({invalid_EventsDescriptor, RID, Evs}).
-
-enc_RequestedEvent(#'RequestedEvent'{pkgdName = N,
- streamID = asn1_NOVALUE,
- eventAction = asn1_NOVALUE,
- evParList = []}, State) ->
- PkgdName = ?META_ENC(event, N),
- [
- enc_PkgdName(PkgdName, State)
- ];
-enc_RequestedEvent(#'RequestedEvent'{pkgdName = N,
- streamID = SID,
- eventAction = EA,
- evParList = EPL}, State) ->
- PkgdName = ?META_ENC(event, N),
- [
- enc_PkgdName(PkgdName, State),
- ?LBRKT_INDENT(State),
- enc_list([{[SID], fun enc_eventStream/2},
- {EPL, fun enc_eventOther/2} |
- decompose_requestedActions(EA)],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-decompose_requestedActions(asn1_NOVALUE) ->
- [];
-decompose_requestedActions(
- #'RequestedActions'{keepActive = asn1_NOVALUE,
- eventDM = asn1_NOVALUE,
- secondEvent = asn1_NOVALUE,
- signalsDescriptor = asn1_NOVALUE,
- notifyBehaviour = asn1_NOVALUE,
- resetEventsDescriptor = asn1_NOVALUE}) ->
- [];
-
-%%
-%% This in the ABNF:
-%% at-most-once each of
-%% - KeepActiveToken
-%% - notifyBehaviour
-%% - eventDM
-%% - ResetEventsDescriptor
-%% - eventStream
-%% at most one of either embedWithSig or embedNoSig but not both
-%% KeepActiveToken and embedWithSig must not both be present
-%%
-
-%% embedWithSig
-decompose_requestedActions(#'RequestedActions'{keepActive = KA,
- eventDM = EDM,
- secondEvent = SE,
- signalsDescriptor = SD,
- notifyBehaviour = NB,
- resetEventsDescriptor = RED})
- when (KA =/= true) andalso ((SD =/= asn1_NOVALUE) andalso (SD =/= [])) ->
- [
- {[EDM], fun enc_EventDM/2},
- {[{SE, SD}], fun enc_embedWithSig/2},
- {[NB], fun enc_notifyBehaviour/2},
- {[RED], fun('NULL', _) -> ?ResetEventsDescriptorToken end}
- ];
-
-%% embedNoSig
-decompose_requestedActions(#'RequestedActions'{keepActive = KA,
- eventDM = EDM,
- secondEvent = SE,
- signalsDescriptor = SD,
- notifyBehaviour = NB,
- resetEventsDescriptor = RED})
- when (SD =:= asn1_NOVALUE) orelse (SD =:= []) ->
- [
- {[KA], fun enc_keepActive/2},
- {[EDM], fun enc_EventDM/2},
- {[SE], fun enc_embedNoSig/2},
- {[NB], fun enc_notifyBehaviour/2},
- {[RED], fun('NULL', _) -> ?ResetEventsDescriptorToken end}
- ];
-
-%% Fallback, if everything else failes....
-decompose_requestedActions(#'RequestedActions'{keepActive = KA,
- eventDM = EDM,
- secondEvent = SE,
- signalsDescriptor = SD,
- notifyBehaviour = NB,
- resetEventsDescriptor = RED}) ->
- [
- {[KA], fun enc_keepActive/2},
- {[EDM], fun enc_EventDM/2},
- {[{SE, SD}], fun enc_embedWithSig/2},
- {[NB], fun enc_notifyBehaviour/2},
- {[RED], fun('NULL', _) -> ?ResetEventsDescriptorToken end}
- ].
-
-
-enc_embedNoSig(#'SecondEventsDescriptor'{requestID = RID,
- eventList = Evs}, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_embedFirst(RID, Evs, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_embedWithSig({asn1_NOVALUE, SD}, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_SignalsDescriptor(SD, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_embedWithSig({#'SecondEventsDescriptor'{requestID = RID,
- eventList = Evs}, SD}, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_SignalsDescriptor(SD, ?INC_INDENT(State)),
- ?COMMA_INDENT(?INC_INDENT(State)),
- enc_embedFirst(RID, Evs, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_keepActive(Val, _State) ->
- case Val of
- true -> [?KeepActiveToken];
- false -> []
- end.
-
-enc_EventDM({'EventDM',Val}, State) ->
- enc_EventDM(Val, State);
-enc_EventDM({Tag, Val}, State) ->
- case Tag of
- digitMapName ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Val, State)
- ];
- digitMapValue ->
- [
- ?DigitMapToken,
- ?LBRKT_INDENT(State),
- enc_DigitMapValue(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
- _ ->
- error({invalid_EventDM_tag, Tag})
- end.
-
-
-enc_embedFirst(RID, Evs, State)
- when (RID =/= asn1_NOVALUE) andalso (is_list(Evs) andalso (Evs =/= [])) ->
- %% d("enc_embedFirst -> entry with"
- %% "~n RID: ~p"
- %% "~n Evs: ~p", [RID, Evs]),
- [
- ?EventsToken,
- ?EQUAL,
- enc_RequestID(RID, State),
- ?LBRKT_INDENT(State),
- enc_list([{Evs, fun enc_SecondRequestedEvent/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_embedFirst(_RID, _Evs, _State) ->
- %% d("enc_embedFirst -> entry"),
- [
- ?EventsToken
- ].
-
-enc_notifyBehaviour({notifyImmediate, 'NULL'}, _State) ->
- [?NotifyImmediateToken];
-enc_notifyBehaviour({notifyRegulated, Val}, State) ->
- enc_RegulatedEmbeddedDescriptor(Val, State);
-enc_notifyBehaviour({neverNotify, 'NULL'}, _State) ->
- [?NeverNotifyToken];
-enc_notifyBehaviour({Tag, Val}, _State) ->
- error({invalid_notifyBehaviour, Tag, Val}).
-
-enc_RegulatedEmbeddedDescriptor(
- #'RegulatedEmbeddedDescriptor'{secondEvent = asn1_NOVALUE,
- signalsDescriptor = asn1_NOVALUE}, _State) ->
- [
- ?NotifyRegulatedToken
- ];
-enc_RegulatedEmbeddedDescriptor(
- #'RegulatedEmbeddedDescriptor'{secondEvent = SE,
- signalsDescriptor = asn1_NOVALUE}, State) ->
- [
- ?NotifyRegulatedToken,
- ?LBRKT_INDENT(State),
- enc_embedNoSig(SE, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_RegulatedEmbeddedDescriptor(
- #'RegulatedEmbeddedDescriptor'{secondEvent = SE,
- signalsDescriptor = SD}, State) ->
- [
- ?NotifyRegulatedToken,
- ?LBRKT_INDENT(State),
- enc_embedWithSig({SE, SD}, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_RegulatedEmbeddedDescriptor(Val, _State) ->
- error({invalid_RegulatedEmbeddedDescriptor, Val}).
-
-enc_SecondRequestedEvent(#'SecondRequestedEvent'{pkgdName = N,
- streamID = asn1_NOVALUE,
- eventAction = asn1_NOVALUE,
- evParList = []}, State) ->
- PkgdName = ?META_ENC(event, N),
- [
- enc_PkgdName(PkgdName, State)
- ];
-enc_SecondRequestedEvent(#'SecondRequestedEvent'{pkgdName = N,
- streamID = SID,
- eventAction = EA,
- evParList = EPL}, State) ->
- PkgdName = ?META_ENC(event, N),
- [
- enc_PkgdName(PkgdName, State),
- ?LBRKT_INDENT(State),
- enc_list([{[SID], fun enc_eventStream/2},
- {EPL, fun enc_eventOther/2} |
- decompose_secondRequestedActions(EA)],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-%%
-%% This in the ABNF:
-%% at-most-once each of
-%% - KeepActiveToken
-%% - notifyBehaviour
-%% - eventDM
-%% - ResetEventsDescriptor
-%% - eventStream
-%% KeepActiveToken and embedWithSig must not both be present
-%%
-decompose_secondRequestedActions(asn1_NOVALUE) ->
- [];
-decompose_secondRequestedActions(
- #'SecondRequestedActions'{keepActive = asn1_NOVALUE,
- eventDM = asn1_NOVALUE,
- signalsDescriptor = asn1_NOVALUE,
- notifyBehaviour = asn1_NOVALUE,
- resetEventsDescriptor = asn1_NOVALUE}) ->
- [];
-
-decompose_secondRequestedActions(
- #'SecondRequestedActions'{keepActive = KA,
- eventDM = EDM,
- signalsDescriptor = SD,
- notifyBehaviour = NB,
- resetEventsDescriptor = RED})
- when (KA =/= true) andalso ((SD =/= asn1_NOVALUE) andalso (SD =/= [])) ->
- [
- {[EDM], fun enc_EventDM/2},
- {[SD], fun enc_embedSig/2},
- {[NB], fun enc_notifyBehaviour/2},
- {[RED], fun('NULL', _) -> ?ResetEventsDescriptorToken end}
- ];
-decompose_secondRequestedActions(
- #'SecondRequestedActions'{keepActive = KA,
- eventDM = EDM,
- signalsDescriptor = SD,
- notifyBehaviour = NB,
- resetEventsDescriptor = RED})
- when (SD =:= asn1_NOVALUE) orelse (SD =:= []) ->
- [
- {[KA], fun enc_keepActive/2},
- {[EDM], fun enc_EventDM/2},
- {[NB], fun enc_notifyBehaviour/2},
- {[RED], fun('NULL', _) -> ?ResetEventsDescriptorToken end}
- ];
-decompose_secondRequestedActions(SRA) ->
- error({invalid_SecondRequestedActions, SRA}).
-
-enc_embedSig(Val, State) ->
- [
- ?EmbedToken,
- ?LBRKT_INDENT(State),
- enc_SignalsDescriptor(Val, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_EventBufferDescriptor({'EventBufferDescriptor',Val}, State) ->
- enc_EventBufferDescriptor(Val, State);
-enc_EventBufferDescriptor([], _State) ->
- [
- ?EventBufferToken
- ];
-enc_EventBufferDescriptor(EvSpecs, State)
- when is_list(EvSpecs) andalso (length(EvSpecs) >= 1) ->
- [
- ?EventBufferToken,
- ?LBRKT_INDENT(State),
- enc_eventSpecs(EvSpecs, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ];
-enc_EventBufferDescriptor(EvSpecs, _State) ->
- error({bad_eventSpecs, EvSpecs}).
-
-enc_eventSpecs([Mand | Opt], State) ->
- [enc_eventSpec(Mand, State),
- [[?COMMA_INDENT(State), enc_eventSpec(Val, State)] || Val <- Opt]].
-
-enc_eventSpec(#'EventSpec'{eventName = N,
- streamID = asn1_NOVALUE,
- eventParList = []}, State) ->
- [
- enc_EventName(N, State)
- ];
-enc_eventSpec(#'EventSpec'{eventName = N,
- streamID = SID,
- eventParList = EPL}, State) ->
- [
- enc_EventName(N, State),
- ?LBRKT_INDENT(State),
- enc_list([{[SID], fun enc_eventStream/2}, {EPL, fun enc_eventOther/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_SignalsDescriptor({'SignalsDescriptor',Val}, State) ->
- enc_SignalsDescriptor(Val, State);
-enc_SignalsDescriptor([], _State) ->
- [
- ?SignalsToken
- ];
-enc_SignalsDescriptor(SigRequests, State) when is_list(SigRequests) ->
- [
- ?SignalsToken,
- ?LBRKT_INDENT(State),
- enc_list([{SigRequests, fun enc_SignalRequest/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_SignalRequest({'SignalRequest',Val}, State) ->
- enc_SignalRequest(Val, State);
-enc_SignalRequest({Tag, Val}, State) ->
- case Tag of
- signal ->
- enc_Signal(Val, State);
- seqSigList ->
- enc_SeqSigList(Val, State);
- _ ->
- error({invalid_SignalRequest_tag, Tag})
- end.
-
-
-enc_SeqSigList(Val, State)
- when is_record(Val, 'SeqSigList') ->
- [
- ?SignalListToken,
- ?EQUAL,
- enc_UINT16(Val#'SeqSigList'.id, State),
- ?LBRKT_INDENT(State),
- enc_list([{Val#'SeqSigList'.signalList, fun enc_Signal/2}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_Signal(#'Signal'{signalName = SN,
- streamID = SID,
- sigType = ST,
- duration = Du,
- notifyCompletion = NC,
- keepActive = KA,
- sigParList = SPL,
- direction = Di,
- requestID = RID,
- intersigDelay = ISD}, State) ->
- [
- enc_SignalName(SN, State),
- enc_opt_brackets(
- enc_list([{[SID], fun enc_sigStream/2},
- {[ST], fun enc_sigSignalType/2},
- {[Du], fun enc_sigDuration/2},
- {[NC], fun enc_notifyCompletion/2},
- {[KA], fun enc_keepActive/2},
- {SPL, fun enc_sigOther/2},
- {[Di], fun enc_SignalDirection/2},
- {[RID], fun enc_sigRequestID/2},
- {[ISD], fun enc_sigIntsigDelay/2}],
- ?INC_INDENT(State)),
- State)
- ].
-
-enc_sigStream(Val, State) ->
- [
- ?StreamToken,
- ?EQUAL,
- enc_StreamID(Val, State)
- ].
-
-enc_sigSignalType(Val, State) ->
- [
- ?SignalTypeToken,
- ?EQUAL,
- enc_SignalType(Val, State)
- ].
-
-enc_sigDuration(Val, State) ->
- [
- ?DurationToken,
- ?EQUAL,
- enc_UINT16(Val, State)
- ].
-
-enc_notifyCompletion(List, State) when is_list(List) ->
- [
- ?NotifyCompletionToken,
- ?EQUAL,
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_notifyCompletionItem/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_notifyCompletionItem(Val, _State) ->
- case Val of
- onTimeOut -> ?TimeOutToken;
- onInterruptByEvent -> ?InterruptByEventToken;
- onInterruptByNewSignalDescr -> ?InterruptByNewSignalsDescrToken;
- otherReason -> ?OtherReasonToken;
- onIteration -> ?IterationToken
- end.
-
-enc_SignalType({'SignalType',Val}, State) ->
- enc_SignalType(Val, State);
-enc_SignalType(Val, _State) ->
- case Val of
- brief -> ?BriefToken;
- onOff -> ?OnOffToken;
- timeOut -> ?TimeOutToken
- end.
-
-enc_SignalName({'SignalName',Val}, State)->
- enc_SignalName(Val, State);
-enc_SignalName(Val, State) ->
- PkgdName = ?META_ENC(signal, Val),
- enc_PkgdName(PkgdName, State).
-
-enc_sigOther(Val, State)
- when is_record(Val, 'SigParameter') ->
- [
- enc_Name(Val#'SigParameter'.sigParameterName, State),
- enc_propertyParmValues(Val#'SigParameter'.value,
- Val#'SigParameter'.extraInfo,
- State)
- ].
-
-enc_SignalDirection({'SignalDirection', Val}, State) ->
- enc_SignalDirection(Val, State);
-enc_SignalDirection(Val, _State) ->
- [
- ?DirectionToken,
- ?EQUAL,
- case Val of
- internal -> ?InternalToken;
- external -> ?ExternalToken;
- both -> ?BothToken
- end
- ].
-
-enc_sigRequestID(Val, State) ->
- [
- ?RequestIDToken,
- ?EQUAL,
- enc_RequestID(Val, State)
- ].
-
-enc_RequestID({'RequestID',Val}, State) ->
- enc_RequestID(Val, State);
-enc_RequestID(Val, _State) when (Val =:= ?megaco_all_request_id) ->
- "*";
-enc_RequestID(Val, State) ->
- enc_UINT32(Val, State).
-
-enc_sigIntsigDelay(Val, State) ->
- [
- ?IntsigDelayToken,
- ?EQUAL,
- enc_UINT16(Val, State)
- ].
-
-enc_ModemDescriptor(MD, _State) ->
- error({deprecated, MD}).
-
-%% Corr1:
-%% As of corr 1 ModemDescriptor has been deprecated.
-%% 7.1.2: ...shall not be included as part of a transmitted content and,
-%% if received, shall either be ignored or processed at the option
-%% of the implementation. ...
-%% enc_ModemDescriptor(#'ModemDescriptor'{mtl = [Val],
-%% mpl = [],
-%% nonStandardData = asn1_NOVALUE},
-%% State) ->
-%% [
-%% ?ModemToken,
-%% ?EQUAL,
-%% enc_ModemType(Val, State)
-%% ];
-%% enc_ModemDescriptor(Val, State)
-%% when is_record(Val, 'ModemDescriptor') ->
-%% [
-%% ?ModemToken,
-%% ?LSBRKT,
-%% enc_list([{Val#'ModemDescriptor'.mtl, fun enc_ModemType/2}], State),
-%% ?RSBRKT,
-%% enc_opt_brackets(
-%% enc_list([{Val#'ModemDescriptor'.mpl, fun enc_PropertyParm/2}],
-%% ?INC_INDENT(State)),
-%% State)
-%% %% BUGBUG: Is PropertyParm == NAME parmValue?
-%% ].
-
-%% enc_ModemDescriptor(Val, State)
-%% when is_record(Val, 'ModemDescriptor') ->
-%% [
-%% ?ModemToken,
-%% %% BUGBUG: Does never generate: EQUAL modemType
-%% ?LSBRKT,
-%% enc_list([{Val#'ModemDescriptor'.mtl, fun enc_ModemType/2}], State),
-%% ?RSBRKT,
-%% enc_opt_brackets(
-%% enc_list([{Val#'ModemDescriptor'.mpl, fun enc_PropertyParm/2}],
-%% ?INC_INDENT(State)),
-%% State)
-%% %% BUGBUG: Is PropertyParm == NAME parmValue?
-%% ].
-
-%% Corr1: See ModemDescriptor above
-%% enc_ModemType({'ModemType',Val}, State)->
-%% enc_ModemType(Val, State);
-%% enc_ModemType(Val, _State) ->
-%% %% BUGBUG: Does not handle extensionParameter
-%% case Val of
-%% v18 -> ?V18Token;
-%% v22 -> ?V22Token;
-%% v22bis -> ?V22bisToken;
-%% v32 -> ?V32Token;
-%% v32bis -> ?V32bisToken;
-%% v34 -> ?V34Token;
-%% v90 -> ?V90Token;
-%% v91 -> ?V91Token;
-%% synchISDN -> ?SynchISDNToken
-%% end.
-
-enc_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = asn1_NOVALUE,
- digitMapValue = Value} = Val,
- State)
- when (Value =/= asn1_NOVALUE) ->
- case is_empty_DigitMapValue(Value) of
- true ->
- error({invalid_DigitMapDescriptor, Val});
- false ->
- [
- ?DigitMapToken,
- ?EQUAL,
- ?LBRKT_INDENT(State),
- enc_DigitMapValue(Value, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end;
-enc_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name,
- digitMapValue = asn1_NOVALUE},
- State)
- when (Name =/= asn1_NOVALUE) ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State)
- ];
-enc_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name,
- digitMapValue = Value},
- State)
- when (Name =/= asn1_NOVALUE) andalso (Value =/= asn1_NOVALUE) ->
- case is_empty_DigitMapValue(Value) of
- true ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State)
- ];
- false ->
- [
- ?DigitMapToken,
- ?EQUAL,
- enc_DigitMapName(Name, State),
- ?LBRKT_INDENT(State),
- enc_DigitMapValue(Value, ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ]
- end;
-enc_DigitMapDescriptor(BadVal, _State) ->
- error({invalid_DigitMapDescriptor, BadVal}).
-
-enc_DigitMapName({'DigitMapName',Val}, State) ->
- enc_DigitMapName(Val, State);
-enc_DigitMapName(Val, State) ->
- enc_Name(Val, State).
-
-is_empty_DigitMapValue(#'DigitMapValue'{startTimer = asn1_NOVALUE,
- shortTimer = asn1_NOVALUE,
- longTimer = asn1_NOVALUE,
- digitMapBody = [],
- durationTimer = asn1_NOVALUE}) ->
- true;
-is_empty_DigitMapValue(#'DigitMapValue'{}) ->
- false.
-
-enc_DigitMapValue(Val, State)
- when is_record(Val, 'DigitMapValue') ->
- [
- enc_timer(Val#'DigitMapValue'.startTimer, $T, State),
- enc_timer(Val#'DigitMapValue'.shortTimer, $S, State),
- enc_timer(Val#'DigitMapValue'.longTimer, $L, State),
- enc_timer(Val#'DigitMapValue'.durationTimer, $Z, State),
- %% BUGBUG: digitMapBody not handled at all
- enc_STRING(Val#'DigitMapValue'.digitMapBody, State, 0, infinity)
- ].
-
-enc_timer(asn1_NOVALUE, _Prefix, _State) ->
- [];
-enc_timer(Timer, Prefix, State) ->
- [
- Prefix,
- ?COLON,
- enc_DIGIT(Timer, State, 0, 99),
- ?COMMA_INDENT(State)
- ].
-
-enc_ServiceChangeParm(Val, State)
- when is_record(Val, 'ServiceChangeParm') ->
- [
- ?ServicesToken,
- ?LBRKT_INDENT(State),
- enc_list([{[Val#'ServiceChangeParm'.serviceChangeMethod],
- fun enc_ServiceChangeMethod/2},
- {[Val#'ServiceChangeParm'.serviceChangeAddress],
- fun enc_ServiceChangeAddress/2},
- {[Val#'ServiceChangeParm'.serviceChangeVersion],
- fun enc_serviceChangeVersion/2},
- {[Val#'ServiceChangeParm'.serviceChangeProfile],
- fun enc_ServiceChangeProfile/2},
- {[{reason, Val#'ServiceChangeParm'.serviceChangeReason}],
- fun enc_serviceChangeReason/2},
- {[Val#'ServiceChangeParm'.serviceChangeDelay],
- fun enc_serviceChangeDelay/2},
- {[Val#'ServiceChangeParm'.serviceChangeMgcId],
- fun enc_serviceChangeMgcId/2},
- {[Val#'ServiceChangeParm'.timeStamp],
- fun enc_TimeNotation/2},
- {Val#'ServiceChangeParm'.serviceChangeInfo,
- fun enc_AuditDescriptor/2},
- {[Val#'ServiceChangeParm'.serviceChangeIncompleteFlag],
- fun('NULL', _) -> ?ServiceChangeIncompleteToken end}],
- ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-
-enc_ServiceChangeMethod({'ServiceChangeMethod',Val}, State) ->
- enc_ServiceChangeMethod(Val, State);
-enc_ServiceChangeMethod(Val, _State) ->
- [
- ?MethodToken,
- ?EQUAL,
- case Val of
- failover -> ?FailoverToken;
- forced -> ?ForcedToken;
- graceful -> ?GracefulToken;
- restart -> ?RestartToken;
- disconnected -> ?DisconnectedToken;
- handOff -> ?HandOffToken;
- _ ->
- error({invalid_ServiceChangeMethod, Val})
-
- end
- ].
-
-enc_ServiceChangeAddress({'ServiceChangeAddress',Val}, State) ->
- enc_ServiceChangeAddress(Val, State);
-enc_ServiceChangeAddress({Tag, Val}, State) ->
- [
- ?ServiceChangeAddressToken,
- ?EQUAL,
- case Tag of
- portNumber ->
- enc_portNumber(Val, State);
- ip4Address ->
- enc_IP4Address(Val, State);
- ip6Address ->
- enc_IP6Address(Val, State);
- domainName ->
- enc_DomainName(Val, State);
- deviceName ->
- enc_PathName(Val, State);
- mtpAddress ->
- enc_mtpAddress(Val, State);
- _ ->
- error({invalid_ServiceChangeAddress_tag, Tag})
- end
- ].
-
-enc_serviceChangeVersion(Val, State) ->
- [
- ?VersionToken,
- ?EQUAL,
- enc_version(Val, State)
- ].
-
-enc_ServiceChangeProfile(#'ServiceChangeProfile'{profileName = Name,
- version = Version},
- State) ->
- [
- ?ProfileToken,
- ?EQUAL,
- enc_Name(Name, State),
- ?SLASH,
- enc_version(Version, State)
- ].
-
-enc_serviceChangeReason({reason, Val}, State) ->
- case Val of
- asn1_NOVALUE ->
- [];
- [List] when is_list(List) ->
- [
- ?ReasonToken,
- ?EQUAL,
- enc_QUOTED_STRING(List,State) % OTP-4632 enc_Value(List, State)
- ]
- end.
-
-enc_serviceChangeDelay(Val, State) ->
- [
- ?DelayToken,
- ?EQUAL,
- enc_UINT32(Val, State)
- ].
-
-enc_serviceChangeMgcId(Val, State) ->
- [
- ?MgcIdToken,
- ?EQUAL,
- enc_MId(Val, State)
- ].
-
-enc_portNumber(Val, State) when is_integer(Val) andalso (Val >= 0) ->
- enc_UINT16(Val, State).
-
-enc_ServiceChangeResParm(Val, State)
- when is_record(Val, 'ServiceChangeResParm') ->
- enc_list([{[Val#'ServiceChangeResParm'.serviceChangeAddress],
- fun enc_ServiceChangeAddress/2},
- {[Val#'ServiceChangeResParm'.serviceChangeVersion],
- fun enc_serviceChangeVersion/2},
- {[Val#'ServiceChangeResParm'.serviceChangeProfile],
- fun enc_ServiceChangeProfile/2},
- {[Val#'ServiceChangeResParm'.serviceChangeMgcId],
- fun enc_serviceChangeMgcId/2},
- {[Val#'ServiceChangeResParm'.timeStamp],
- fun enc_TimeNotation/2}],
- State).
-
-enc_PackagesDescriptor({'PackagesDescriptor',Val}, State) ->
- enc_PackagesDescriptor(Val, State);
-enc_PackagesDescriptor(Val, State) ->
- [
- ?PackagesToken,
- ?LBRKT_INDENT(State),
- enc_list([{Val, fun enc_PackagesItem/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_PackagesItem(Val, State)
- when is_record(Val, 'PackagesItem') ->
- PkgdName = ?META_ENC(package, Val#'PackagesItem'.packageName),
- [
- enc_Name(PkgdName, State),
- "-",
- enc_UINT16(Val#'PackagesItem'.packageVersion, State)
- ].
-
-enc_StatisticsDescriptor({'StatisticsDescriptor',Val}, State) ->
- enc_StatisticsDescriptor(Val, State);
-enc_StatisticsDescriptor(List, State) when is_list(List) ->
- [
- ?StatsToken,
- ?LBRKT_INDENT(State),
- enc_list([{List, fun enc_StatisticsParameter/2}], ?INC_INDENT(State)),
- ?RBRKT_INDENT(State)
- ].
-
-enc_StatisticsParameter(Val, State)
- when is_record(Val, 'StatisticsParameter') ->
- PkgdName = ?META_ENC(statistics, Val#'StatisticsParameter'.statName),
- case Val#'StatisticsParameter'.statValue of
- asn1_NOVALUE ->
- [
- enc_PkgdName(PkgdName, State)
- ];
- [StatVal] when is_list(StatVal) ->
- [
- enc_PkgdName(PkgdName, State),
- ?EQUAL,
- enc_Value(StatVal, State)
- ]
- end.
-
-enc_TimeNotation(Val, State)
- when is_record(Val, 'TimeNotation') ->
- [
- enc_STRING(Val#'TimeNotation'.date, State, 8, 8), % "yyyymmdd"
- "T",
- enc_STRING(Val#'TimeNotation'.time, State, 8, 8) % "hhmmssss"
- ].
-
-%% BUGBUG: Does not verify that the string must contain at least one
-%% BUGBUG: char. This violation of is required in order to comply with
-%% BUGBUG: the dd/ce ds parameter that may possibly be empty.
-enc_Value({'Value',Val}, State) ->
- enc_Value(Val, State);
-enc_Value(String, _State) ->
-%% d("enc_Value -> entry with"
-%% "~n String: ~p", [String]),
- case quoted_string_count(String, 0, true, false) of
- {_, 0, _} ->
-%% d("enc_Value -> 0"),
- [?DQUOTE, String, ?DQUOTE];
- {false, _, _} ->
-%% d("enc_Value -> false"),
- [?DQUOTE, String, ?DQUOTE];
- {true, _, _} ->
-%% d("enc_Value -> true"),
- [String]
- end.
-
-%% needs_quoting(String) ->
-%% case quoted_string_count(String, 0, true) of
-%% {_, 0} ->
-%% true;
-%% {false, _} ->
-%% true;
-%% {true, _} ->
-%% false
-%% end.
-
-quoted_string_count([?DoubleQuoteToken | T], 0 = Count, _IsSafe, _MaybeQuoted) ->
- %% Already a quoted string. Make sure it ends
- quoted_string_count(T, Count + 1, true, true);
-quoted_string_count([?DoubleQuoteToken], Count, IsSafe, true = MaybeQuoted) ->
- %% An explicitly quoted string
- {IsSafe, Count, MaybeQuoted};
-quoted_string_count([H | T], Count, IsSafe, MaybeQuoted) ->
-%% d("quoted_string_count -> entry with"
-%% "~n H: ~p"
-%% "~n Classified H: ~p"
-%% "~n Count: ~p"
-%% "~n IsSafe: ~p", [H, ?classify_char(H), Count, IsSafe]),
- case ?classify_char(H) of
- safe_char_upper -> quoted_string_count(T, Count + 1, IsSafe, MaybeQuoted);
- safe_char -> quoted_string_count(T, Count + 1, IsSafe, MaybeQuoted);
- rest_char -> quoted_string_count(T, Count + 1, false, MaybeQuoted);
- white_space -> quoted_string_count(T, Count + 1, false, MaybeQuoted);
- _ -> error({illegal_char, H})
- end;
-quoted_string_count([], _Count, _IsSafe, true = _MaybeQuoted) ->
- error({illegal_char, ?DoubleQuoteToken});
-quoted_string_count([], Count, IsSafe, MaybeQuoted) ->
- {IsSafe, Count, MaybeQuoted}.
-
-enc_DigitString(String, _State) when is_list(String) ->
- [?DQUOTE, String, ?DQUOTE].
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% Encode an octet string, escape } by \ if necessary
-enc_OCTET_STRING(List, State, Min, Max) ->
- do_enc_OCTET_STRING(List, State, Min, Max, 0).
-
-do_enc_OCTET_STRING([H | T], State, Min, Max, Count) ->
- case H of
- $} ->
- [$\\, H | do_enc_OCTET_STRING(T, State, Min, Max, Count + 1)];
- _ ->
- [H | do_enc_OCTET_STRING(T, State, Min, Max, Count + 1)]
- end;
-do_enc_OCTET_STRING([], _State, Min, Max, Count) ->
- verify_count(Count, Min, Max),
- [].
-
-enc_QUOTED_STRING(String, _State) when is_list(String) ->
- case quoted_string_count(String, 0, true, false) of
- {_IsSafe, Count, false = _QuotedString} ->
- verify_count(Count, 1, infinity),
- [?DQUOTE, String, ?DQUOTE];
- {_IsSafe, Count, true = _QuotedString} ->
- verify_count(Count, 3, infinity), % quotes not included in the count
- [String]
- end.
-
-%% The internal format of hex digits is a list of octets
-%% Min and Max means #hexDigits
-%% Leading zeros are prepended in order to fulfill Min
-enc_HEXDIG(Octets, State, Min, Max) when is_list(Octets) ->
- do_enc_HEXDIG(Octets, State, Min, Max, 0, []).
-
-do_enc_HEXDIG([Octet | Rest], State, Min, Max, Count, Acc)
- when (Octet >= 0) andalso (Octet =< 255) ->
- Hex = hex(Octet), % OTP-4921
- if
- Octet =< 15 ->
- Acc2 = [[$0|Hex]|Acc], % OTP-4921
- do_enc_HEXDIG(Rest, State, Min, Max, Count + 2, ["0" | Acc2]);
- true ->
- Acc2 = [Hex|Acc], % OTP-4921
- do_enc_HEXDIG(Rest, State, Min, Max, Count + 2, Acc2)
- end;
-do_enc_HEXDIG([], State, Min, Max, Count, Acc)
- when is_integer(Min) andalso (Count < Min) ->
- do_enc_HEXDIG([0], State, Min, Max, Count, Acc);
-do_enc_HEXDIG([], _State, Min, Max, Count, Acc) -> %% OTP-4710
- verify_count(Count, Min, Max),
- lists:reverse(Acc).
-
-enc_DIGIT(Val, State, Min, Max) ->
- enc_integer(Val, State, Min, Max).
-
-enc_STRING(String, _State, Min, Max) when is_list(String) ->
- verify_count(length(String), Min, Max),
- String.
-
-enc_UINT16(Val, State) ->
- enc_integer(Val, State, 0, 65535).
-
-enc_UINT32(Val, State) ->
- enc_integer(Val, State, 0, 4294967295).
-
-enc_integer(Val, _State, Min, Max) ->
- verify_count(Val, Min, Max),
- integer_to_list(Val).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Encodes a list of elements with separator tokens between
-%% the elements. Optional asn1_NOVALUE values are ignored.
-
-%% enc_list(asn1_NOVALUE, _State) ->
-%% [];
-%% enc_list([], _State) ->
-%% [];
-enc_list(List, State) ->
- enc_list(List, State, fun(_S) -> ?COMMA_INDENT(_S) end, false).
-
--dialyzer({nowarn_function, enc_list/4}). % Future compat
-enc_list([], _State, _SepEncoder, _NeedsSep) ->
- [];
-enc_list([{Elems, ElemEncoder} | Tail], State, SepEncoder, NeedsSep) ->
- case do_enc_list(Elems, State, ElemEncoder, SepEncoder, NeedsSep) of
- [] ->
- enc_list(Tail, State, SepEncoder, NeedsSep);
- List ->
- [List,
- enc_list(Tail, State, SepEncoder, true)]
- end;
-enc_list(A, B, C, D) ->
- error({invalid_list, A, B, C, D}).
-
-do_enc_list(asn1_NOVALUE, _State, _ElemEncoder, _SepEncoder, _NeedsSep) ->
- [];
-do_enc_list([], _State, _ElemEncoder, _SepEncoder, _NeedsSep) ->
- [];
-do_enc_list([asn1_NOVALUE | T], State, ElemEncoder, SepEncoder, NeedsSep) ->
- do_enc_list(T, State, ElemEncoder, SepEncoder, NeedsSep);
-do_enc_list([H | T], State, ElemEncoder, SepEncoder, NeedsSep)
- when is_function(ElemEncoder) andalso is_function(SepEncoder) ->
- case ElemEncoder(H, State) of
- [] ->
- do_enc_list(T, State, ElemEncoder, SepEncoder, NeedsSep);
- List when NeedsSep =:= true ->
- [SepEncoder(State),
- List, do_enc_list(T, State, ElemEncoder, SepEncoder, true)];
- List when NeedsSep =:= false ->
- [List,
- do_enc_list(T, State, ElemEncoder, SepEncoder, true)]
- end.
-
-%% Add brackets if list is non-empty
-enc_opt_brackets([], _State) ->
- [];
-enc_opt_brackets(List, _State) when is_list(List) ->
- [?LBRKT_INDENT(_State), List, ?RBRKT_INDENT(_State)].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% Int -> list of hex chars
-hex(Int) ->
- hexi(get_lo_bits(Int, 4), []).
-
-hexi({0, Lo}, Ack) ->
- [hex4(Lo) | Ack];
-hexi({Hi, Lo} , Ack) ->
- hexi(get_lo_bits(Hi, 4), [hex4(Lo) | Ack]).
-
-hex4(Int) when Int < 10 ->
- Int + $0;
-hex4(Int) ->
- ($A - 10) + Int.
-
-get_lo_bits(Int, Size) ->
- Lo = Int band ones_mask(Size),
- Hi = Int bsr Size,
- {Hi, Lo}.
-
-ones_mask(Ones) ->
- (1 bsl Ones) - 1.
-
-%% Verify that Count is within the range of Min and Max
-verify_count(Count, Min, Max) ->
- if
- is_integer(Count) ->
- if
- is_integer(Min) andalso (Count >= Min) ->
- if
- is_integer(Max) andalso (Count =< Max) ->
- Count;
- Max =:= infinity ->
- Count;
- true ->
- error({count_too_large, Count, Max})
- end;
- true ->
- error({count_too_small, Count, Min})
- end;
- true ->
- error({count_not_an_integer, Count})
- end.
-
-
-
-
-%% -------------------------------------------------------------------
-
-%% d(F) ->
-%% d(F,[]).
-%% d(F, A) ->
-%% %% d(get(dbg), F, A).
-%% d(true, F, A).
-
-%% d(true, F, A) ->
-%% io:format("~p:" ++ F ++ "~n", [?MODULE | A]);
-%% d(_, _, _) ->
-%% ok.
-
-
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3a.hrl b/lib/megaco/src/text/megaco_text_parser_prev3a.hrl
deleted file mode 100644
index 138b4cd728..0000000000
--- a/lib/megaco/src/text/megaco_text_parser_prev3a.hrl
+++ /dev/null
@@ -1,1678 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose : Define semantic text parser actions
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
-
--include_lib("megaco/include/megaco.hrl").
--include_lib("megaco/include/megaco_message_prev3a.hrl").
--define(encoder_version_pre_prev3c,true).
--include("megaco_text_tokens.hrl").
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{make_safe_token,1}]}).
--endif.
-make_safe_token(Token) ->
- {_TokenTag, Line, Text} = Token,
- {safeToken, Line, Text}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_value,1}]}).
--endif.
-ensure_value(Token) ->
- case Token of
- {safeToken, _Line, Text} when is_list(Text) ->
- Text; % We really should ensure length
- {'QuotedChars', _Line, Text} when is_list(Text) ->
- Text; % We really should ensure length
- Text when is_list(Text) ->
- Text % We really should ensure length
- end.
-
-%% NAME = ALPHA *63(ALPHA / DIGIT / "_" )
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_NAME,1}]}).
--endif.
-ensure_NAME(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Text. % We really should ensure length and chars
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_requestID,1}]}).
--endif.
-ensure_requestID(Token) ->
- case Token of
- {safeToken, _Line, "*"} ->
- ?megaco_all_request_id;
- _ ->
- ensure_uint32(Token)
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_streamID,1}]}).
--endif.
-ensure_streamID(StreamId) ->
- ensure_uint16(StreamId).
-
-ensure_auth_header(SpiToken, SnToken, AdToken) ->
- Spi = ensure_hex(SpiToken, 8, 8),
- Sn = ensure_hex(SnToken, 8, 8),
- Ad = ensure_hex(AdToken, 24, 64),
- #'AuthenticationHeader'{secParmIndex = Spi, seqNum = Sn, ad = Ad}.
-
-%% The values 0x0, 0xFFFFFFFE and 0xFFFFFFFF are reserved.
-%% ContextID = (UINT32 / "*" / "-" / "$")
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_contextID,1}]}).
--endif.
-ensure_contextID(Token) ->
- {_TokenTag, Line, Text} = Token,
- case Text of
- "*" -> ?megaco_all_context_id;
- "-" -> ?megaco_null_context_id;
- "\$" -> ?megaco_choose_context_id;
- Int ->
- CID = ensure_uint32(Int),
- if
- (CID =/= 0) andalso
- (CID =/= 16#FFFFFFFE) andalso
- (CID =/= 16#FFFFFFFF) ->
- CID;
- true ->
- return_error(Line, {bad_ContextID, CID})
- end
- end.
-
-ensure_domainAddress([{_T, _L, _A} = Addr0], Port) ->
- Addr = ensure_ip4addr(Addr0),
- {ip4Address, #'IP4Address'{address = Addr, portNumber = Port}};
-ensure_domainAddress([colon,colon], Port) ->
- Addr = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
- {ip6Address, #'IP6Address'{address = Addr, portNumber = Port}};
-ensure_domainAddress(Addr0, Port) ->
- Addr = ensure_ip6addr(Addr0),
- {ip6Address, #'IP6Address'{address = Addr, portNumber = Port}}.
-
-
-ensure_ip4addr(Token) ->
- {_TokenTag, Line, Addr} = Token,
-%% case string:tokens(Addr, [$.]) of
-%% [T1, T2, T3, T4] ->
- case split_ip4addr_text(Addr, []) of
- [T1, T2, T3, T4] ->
- %% We optimize by sending only the text part (Addr) of
- %% the token to the function.
- %% If something is wrong, then we do not get a proper
- %% position and therefor we catch and issue the
- %% the error again (with the proper line number).
- case (catch [
- ensure_uint(T1, 0, 255),
- ensure_uint(T2, 0, 255),
- ensure_uint(T3, 0, 255),
- ensure_uint(T4, 0, 255)
- ]) of
- A when is_list(A) ->
- A;
- _ ->
- return_error(Line, {bad_IP4address, Addr})
- end;
- _ ->
- return_error(Line, {bad_IP4address, Addr})
- end.
-
-split_ip4addr_text([], Acc) ->
- [ lists:reverse(Acc) ];
-split_ip4addr_text([$. | Rest], Acc) ->
- [ lists:reverse(Acc) | split_ip4addr_text(Rest, []) ];
-split_ip4addr_text([H | T], Acc) ->
- split_ip4addr_text(T, [H | Acc]).
-
-
-ensure_ip6addr([colon,colon|T]) ->
- [H1|T1] = lists:reverse(T),
- case do_ensure_ip6addr(T1, true, [ensure_hex4_or_ip4addr(H1)], 1) of
- {true, A} when length(A) == 16 ->
- A;
- {true, B} when length(B) < 16 ->
- lists:duplicate(16 - length(B), 0) ++ B;
- {true, C} ->
- throw({error, {?MODULE, {bad_mid_ip6addr_length, C}}})
- end;
-ensure_ip6addr(L) ->
- case lists:reverse(L) of
- [colon, colon| T] ->
- case do_ensure_ip6addr(T, true, [], 1) of
- {true, A} when length(A) == 16 ->
- A;
- {true, B} when length(B) < 16 ->
- B ++ lists:duplicate(16 - length(B), 0);
- {true, C} ->
- throw({error, {?MODULE, {bad_mid_ip6addr_length, C}}})
- end;
- [H|L1] -> % A (last element) could be an ip4 address
- case do_ensure_ip6addr(L1,false,[ensure_hex4_or_ip4addr(H)],1) of
- {false, A} when length(A) == 16 ->
- A;
- %% allow a pad even if the address is full (i.e. 16)
- {true, B} when length(B) =< 17 ->
- do_ensure_ip6addr_padding(B, 0);
- {Pad, C} ->
- throw({error, {?MODULE, {bad_mid_ip6addr_length, Pad, C}}})
- end
-
- end.
-
-
-do_ensure_ip6addr([], Pad, Acc, _) ->
- {Pad, lists:flatten(Acc)};
-do_ensure_ip6addr([colon,colon|T], false, Acc, Line) ->
- do_ensure_ip6addr(T, true, [pad|Acc], Line);
-do_ensure_ip6addr([colon,colon|T], true, Acc, Line) ->
- return_error(Line, {bad_mid_duplicate_padding, T, Acc});
-do_ensure_ip6addr([colon|T], Pad, Acc, Line) ->
- do_ensure_ip6addr(T, Pad, Acc, Line);
-do_ensure_ip6addr([{_, Line, _} = A|T], Pad, Acc, _) ->
- do_ensure_ip6addr(T, Pad, [ensure_hex4(A)|Acc], Line).
-
-do_ensure_ip6addr_padding([], _) ->
- [];
-do_ensure_ip6addr_padding([pad|T], N) ->
- lists:duplicate(16 - (N + length(T)), 0) ++ T;
-do_ensure_ip6addr_padding([H|T], N) ->
- [H|do_ensure_ip6addr_padding(T, N+1)].
-
-ensure_hex4_or_ip4addr({TokenTag, Line, Addr} = V) ->
- case string:tokens(Addr, [$.]) of
- [T1, T2, T3, T4] ->
- A1 = ensure_uint({TokenTag, Line, T1}, 0, 255),
- A2 = ensure_uint({TokenTag, Line, T2}, 0, 255),
- A3 = ensure_uint({TokenTag, Line, T3}, 0, 255),
- A4 = ensure_uint({TokenTag, Line, T4}, 0, 255),
- [A1, A2, A3, A4];
- _ ->
- ensure_hex4(V)
- %% %% BMK BMK BMK
- %% %% Here we should test for hexseq
- %% return_error(Line, {bad_IP4address, Addr})
- end.
-
-ensure_hex4({_TokenTag, Line, Hex4})
- when length(Hex4) =< 4, length(Hex4) > 0 ->
- case (catch do_ensure_hex4(Hex4)) of
- IL when is_list(IL) andalso (length(IL) =:= 2) ->
- IL;
- Error ->
- return_error(Line, {bad_hex4, Hex4, Error})
- end.
-
-do_ensure_hex4([_H1, _H2, _H3, _H4] = H) ->
- hex_to_int(H, []);
-do_ensure_hex4([H2, H3, H4]) ->
- hex_to_int([$0, H2, H3, H4], []);
-do_ensure_hex4([H3, H4]) ->
- hex_to_int([$0, $0, H3, H4], []);
-do_ensure_hex4([H4]) ->
- hex_to_int([$0, $0, $0, H4], []).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_domainName,2}]}).
--endif.
-ensure_domainName(Token, Port) ->
- {_TokenTag, _Line, Name} = Token,
- %% BUGBUG: validate name
- {domainName, #'DomainName'{name = Name, portNumber = Port}}.
-
-%% extensionParameter= "X" ("-" / "+") 1*6(ALPHA / DIGIT)
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_extensionParameter,1}]}).
--endif.
-ensure_extensionParameter(Token) ->
- {_TokenTag, Line, Text} = Token,
- case Text of
- [X, S | _Chars] ->
- if
- X /= $X, X /= $x,
- S /= $+, S /= $- ->
- return_error(Line, {bad_extension_parameter, Text});
- true ->
- {extension_parameter, Text}
- end;
- _ ->
- return_error(Line, {bad_extension_parameter, Text})
- end.
-
-ensure_message(MegacopToken, MID, Body) ->
-%% #'ServiceChangeProfile'{profileName = Name,
-%% version = Version} =
-%% ensure_profile(MegacopToken),
-%% case Name of
-%% "megaco" ->
-%% #'Message'{version = Version, mId = MID, messageBody = Body};
-%% [$!] ->
-%% #'Message'{version = Version, mId = MID, messageBody = Body}
-%% end.
- {_TokenTag, Line, Text} = MegacopToken,
- case split_Megacop(Text, []) of
- {Name, Version} ->
- Version2 = ensure_version(Version),
- case Name of
- "megaco" ->
- #'Message'{version = Version2,
- mId = MID,
- messageBody = Body};
- [$!] ->
- #'Message'{version = Version2,
- mId = MID,
- messageBody = Body}
- end;
- _ ->
- return_error(Line, {bad_name_or_version, Text})
- end.
-
-split_Megacop([], _) ->
- error;
-split_Megacop([$/ | Version], Acc) ->
- {lists:reverse(Acc), Version};
-split_Megacop([H | T], Acc) ->
- split_Megacop(T, [H | Acc]).
-
-
-%% Corr1:
-%% As of corr 1 ModemDescriptor has been deprecated.
-%% and since this functon is only used when creating
-%% a ModemDescriptor, iit is removed.
-%% modemType = (V32bisToken / V22bisToken / V18Token /
-%% V22Token / V32Token / V34Token / V90Token /
-%% V91Token / SynchISDNToken / extensionParameter)
-%% ensure_modemType({_TokenTag, _Line, Text} = Token) ->
-%% case Text of
-%% "v32b" -> v32bis;
-%% "v22b" -> v22bis;
-%% "v18" -> v18;
-%% "v22" -> v22;
-%% "v32" -> v32;
-%% "v34" -> v34;
-%% "v90" -> v90;
-%% "v91" -> v91;
-%% "synchisdn" -> synchISDN;
-%% "sn" -> synchISDN;
-%% [$x | _] -> ensure_extensionParameter(Token)
-%% end.
-
-%% An mtp address is five octets long
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_mtpAddress,1}]}).
--endif.
-ensure_mtpAddress(Token) ->
- {_TokenTag, _Line, Addr} = Token,
- %% BUGBUG: validate address
- {mtpAddress, Addr}.
-
-%% MuxType = ( H221Token / H223Token / H226Token / V76Token / extensionParameter )
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_muxType,1}]}).
--endif.
-ensure_muxType(Token) ->
- {_TokenTag, _Line, Text} = Token,
- case Text of
- "h221" -> h221;
- "h223" -> h223;
- "h226" -> h226;
- "v76" -> v76;
- "nx64k" -> nx64k; % v2
- [$x | _] -> ensure_extensionParameter(Token)
- end.
-
-%% packagesItem = NAME "-" UINT16
-%% NAME = ALPHA *63(ALPHA / DIGIT / "_" )
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_packagesItem,1}]}).
--endif.
-ensure_packagesItem(Token) ->
- {_TokenTag, Line, Text} = Token,
- case split_packagesItem(Text, []) of
- {Name, Version} ->
- %% As we don't ensure length of the names, there is no point
- %% in doing the ensure_NAME thing...
- #'PackagesItem'{packageName = Name,
- packageVersion = ensure_uint(Version, 0, 99)};
- _ ->
- return_error(Line, {bad_PackagesItem, Text})
- end.
-
-split_packagesItem([], _) ->
- error;
-split_packagesItem([$- | Version], Acc) ->
- {lists:reverse(Acc), Version};
-split_packagesItem([H|T], Acc) ->
- split_packagesItem(T, [H|Acc]).
-
-
-%% pkgdName = (PackageName / "*") SLASH (ItemID / "*" )
-%% PackageName = NAME
-%% ItemID = NAME
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_pkgdName,1}]}).
--endif.
-ensure_pkgdName(Token) ->
- {_TokenTag, Line, Text} = Token,
- case ensure_pkgdName(Text, []) of
- ok ->
- %% As we don't really do any checks on the strings
- %% (length or content) there is really no point in
- %% "ensuring" the name and item part of the
- %% package name
- %% ensure_name_or_star(Name),
- %% ensure_name_or_star(Item),
- Text;
- _ ->
- return_error(Line, {bad_pkgdName, Text})
- end.
-
-ensure_pkgdName([], _) ->
- error;
-ensure_pkgdName([$/ | T], Acc)
- when ((length(T) > 0) andalso (length(Acc) > 0)) ->
- ok;
-ensure_pkgdName([H | T], Acc) ->
- ensure_pkgdName(T, [H | Acc]).
-
-
-%% -compile({inline,[{ensure_name_or_star,1}]}).
-%% ensure_name_or_star(Val) ->
-%% %% case Token of
-%% %% {_, _, Name} when Name =:= "*" ->
-%% %% Name;
-%% %% _ ->
-%% %% ensure_NAME(Token)
-%% %% end.
-%% if
-%% Val =:= "*" ->
-%% Val;
-%% true ->
-%% %% as we don't really validate the text part of the token(s),
-%% %% we can just return the value assuming it to be correct...
-%% Val
-%% end.
-
-
-%% v2 - start
-
-merge_indAudMediaDescriptor({termStateDescr, Val}) ->
- #'IndAudMediaDescriptor'{termStateDescr = Val};
-merge_indAudMediaDescriptor({streamParm, Val}) ->
- #'IndAudMediaDescriptor'{streams = {oneStream, Val}};
-merge_indAudMediaDescriptor({streamDescr, Val}) ->
- #'IndAudMediaDescriptor'{streams = {multiStream, [Val]}}.
-
--ifdef(megaco_parser_inline).
--compile({inline, [{merge_indAudLocalControlDescriptor,1}]}).
--endif.
-merge_indAudLocalControlDescriptor(Parms) ->
- do_merge_indAudLocalControlDescriptor(Parms,
- #'IndAudLocalControlDescriptor'{}).
-
-do_merge_indAudLocalControlDescriptor([Parm | Parms], Desc) ->
- case Parm of
- modeToken when Desc#'IndAudLocalControlDescriptor'.streamMode =:= asn1_NOVALUE ->
- Desc2 = Desc#'IndAudLocalControlDescriptor'{streamMode = 'NULL'},
- do_merge_indAudLocalControlDescriptor(Parms, Desc2);
- reservedGroupToken when Desc#'IndAudLocalControlDescriptor'.reserveGroup =:= asn1_NOVALUE ->
- Desc2 = Desc#'IndAudLocalControlDescriptor'{reserveGroup = 'NULL'},
- do_merge_indAudLocalControlDescriptor(Parms, Desc2);
- reservedValueToken when Desc#'IndAudLocalControlDescriptor'.reserveValue =:= asn1_NOVALUE ->
- Desc2 = Desc#'IndAudLocalControlDescriptor'{reserveValue = 'NULL'},
- do_merge_indAudLocalControlDescriptor(Parms, Desc2);
- {pkgdName, Val} when Desc#'IndAudLocalControlDescriptor'.propertyParms =:= asn1_NOVALUE ->
- PropParms = [#'IndAudPropertyParm'{name = Val}],
- Desc2 = Desc#'IndAudLocalControlDescriptor'{propertyParms = PropParms},
- do_merge_indAudLocalControlDescriptor(Parms, Desc2);
- {pkgdName, Val} when is_list(Desc#'IndAudLocalControlDescriptor'.propertyParms) ->
- PropParms = Desc#'IndAudLocalControlDescriptor'.propertyParms,
- PropParms2 = [#'IndAudPropertyParm'{name = Val} | PropParms],
- Desc2 = Desc#'IndAudLocalControlDescriptor'{propertyParms = PropParms2},
- do_merge_indAudLocalControlDescriptor(Parms, Desc2)
- end;
-do_merge_indAudLocalControlDescriptor([], Desc) ->
- case Desc#'IndAudLocalControlDescriptor'.propertyParms of
- [_ | _] = PropParms -> % List has more then one element
- PropParms2= lists:reverse(PropParms),
- Desc#'IndAudLocalControlDescriptor'{propertyParms = PropParms2};
- _ ->
- Desc
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_indAudLocalParm,1}]}).
--endif.
-ensure_indAudLocalParm(Token) ->
- case Token of
- {safeToken, _Line, "mode"} -> modeToken;
- {safeToken, _Line, "mo"} -> modeToken;
- {safeToken, _Line, "reservedgroup"} -> reservedGroupToken;
- {safeToken, _Line, "rg"} -> reservedGroupToken;
- {safeToken, _Line, "reservedvalue"} -> reservedValueToken;
- {safeToken, _Line, "rv"} -> reservedValueToken;
- PkgdName -> {pkgdName,
- ensure_pkgdName(PkgdName)}
- end.
-
-merge_indAudTerminationStateDescriptor({pkgdName, Val}) ->
- PropParm = #'IndAudPropertyParm'{name = Val},
- #'IndAudTerminationStateDescriptor'{propertyParms = [PropParm]};
-merge_indAudTerminationStateDescriptor(serviceStatesToken) ->
- #'IndAudTerminationStateDescriptor'{serviceState = 'NULL'};
-merge_indAudTerminationStateDescriptor(bufferToken) ->
- #'IndAudTerminationStateDescriptor'{eventBufferControl = 'NULL'}.
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_indAudEventBufferDescriptor,2}]}).
--endif.
-merge_indAudEventBufferDescriptor(EventName, SpecParams) ->
- IAEBD = #'IndAudEventBufferDescriptor'{eventName = EventName},
- do_merge_indAudEventBufferDescriptor(SpecParams, IAEBD).
-
-do_merge_indAudEventBufferDescriptor(asn1_NOVALUE, IAEBD) ->
- IAEBD;
-do_merge_indAudEventBufferDescriptor({streamID, StreamID}, IAEBD) ->
- IAEBD#'IndAudEventBufferDescriptor'{streamID = StreamID};
-do_merge_indAudEventBufferDescriptor({eventParameterName, _Name} = EPN,
- IAEBD) ->
- %% BUGBUG BUGBUG BUGBUG
- %% This is an ugly hack to allow the eventParamName which only
- %% exists in the text encoding...
- IAEBD#'IndAudEventBufferDescriptor'{streamID = EPN}.
-
-
-ensure_indAudSignalListParm(SIG) when is_record(SIG, 'Signal') ->
- ensure_indAudSignal(SIG).
-
-ensure_indAudSignal(#'Signal'{signalName = SignalName,
- streamID = asn1_NOVALUE,
- sigType = asn1_NOVALUE,
- duration = asn1_NOVALUE,
- notifyCompletion = asn1_NOVALUE,
- keepActive = asn1_NOVALUE,
- sigParList = []}) ->
- #'IndAudSignal'{signalName = SignalName}.
-
-
-ensure_IADMD({_TokenTag, _Line,
- #'DigitMapDescriptor'{digitMapName = Name,
- digitMapValue = asn1_NOVALUE}}) ->
- #'IndAudDigitMapDescriptor'{digitMapName = Name}.
-
-
-merge_indAudPackagesDescriptor(#'PackagesItem'{packageName = N,
- packageVersion = V}) ->
- #'IndAudPackagesDescriptor'{packageName = N,
- packageVersion = V}.
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_indAudTerminationStateParm,1}]}).
--endif.
-ensure_indAudTerminationStateParm(Token) ->
- case Token of
- {safeToken, _Line, "servicestates"} -> serviceStatesToken;
- {safeToken, _Line, "si"} -> serviceStatesToken;
- {safeToken, _Line, "buffer"} -> bufferToken;
- {safeToken, _Line, "bf"} -> bufferToken;
- PkgdName -> {pkgdName,
- ensure_pkgdName(PkgdName)}
- end.
-
-
-%% Types modified by v2:
-
-merge_auditDescriptor([]) ->
- #'AuditDescriptor'{};
-merge_auditDescriptor(Tokens) when is_list(Tokens) ->
- case lists:keysearch(terminationAudit, 1, Tokens) of
- {value, {terminationAudit, TA}} ->
- case lists:keydelete(terminationAudit, 1, Tokens) of
- [] ->
- #'AuditDescriptor'{auditPropertyToken = TA};
- AuditTokens ->
- #'AuditDescriptor'{auditToken = AuditTokens,
- auditPropertyToken = TA}
- end;
- false ->
- #'AuditDescriptor'{auditToken = Tokens}
- end;
-merge_auditDescriptor(_) ->
- #'AuditDescriptor'{}.
-
-
-%% v2 - end
-
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_ServiceChangeParm,1}]}).
--endif.
-merge_ServiceChangeParm(Parms) ->
- Required = [serviceChangeReason, serviceChangeMethod],
- merge_ServiceChangeParm(Parms, #'ServiceChangeParm'{}, Required).
-
-merge_ServiceChangeParm([], SCP, []) ->
- SCP;
-
-merge_ServiceChangeParm([], _SCP, Required) ->
- exit({missing_required_serviceChangeParm, Required});
-
-merge_ServiceChangeParm([{address, Val}|Parms], SCP0, Req)
- when (SCP0#'ServiceChangeParm'.serviceChangeAddress == asn1_NOVALUE) andalso
- (SCP0#'ServiceChangeParm'.serviceChangeMgcId == asn1_NOVALUE) ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeAddress = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{address, Val}|_Parms], SCP0, _Req)
- when SCP0#'ServiceChangeParm'.serviceChangeAddress == asn1_NOVALUE ->
- MgcId = SCP0#'ServiceChangeParm'.serviceChangeMgcId,
- exit({not_both_address_mgcid_serviceChangeParm, Val, MgcId});
-
-merge_ServiceChangeParm([{mgc_id, Val}|Parms], SCP0, Req)
- when (SCP0#'ServiceChangeParm'.serviceChangeMgcId == asn1_NOVALUE) andalso
- (SCP0#'ServiceChangeParm'.serviceChangeAddress == asn1_NOVALUE) ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeMgcId = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{mgc_id, Val}|_Parms], SCP0, _Req)
- when SCP0#'ServiceChangeParm'.serviceChangeMgcId == asn1_NOVALUE ->
- Addr = SCP0#'ServiceChangeParm'.serviceChangeAddress,
- exit({not_both_address_mgcid_serviceChangeParm, Val, Addr});
-
-merge_ServiceChangeParm([{profile, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeProfile == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeProfile = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{version, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeVersion == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeVersion = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-%% REQUIRED (i.e. no default value)
-merge_ServiceChangeParm([{reason, Val}|Parms], SCP0, Req0)
- when SCP0#'ServiceChangeParm'.serviceChangeReason == undefined ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeReason = Val},
- Req = lists:delete(serviceChangeReason, Req0),
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{delay, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeDelay == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeDelay = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-%% REQUIRED (i.e. no default value)
-merge_ServiceChangeParm([{method, Val}|Parms], SCP0, Req0)
- when SCP0#'ServiceChangeParm'.serviceChangeMethod == undefined ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeMethod = Val},
- Req = lists:delete(serviceChangeMethod, Req0),
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{time_stamp, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.timeStamp == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{timeStamp = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{extension, _Val}|Parms], SCP0, Req) ->
- merge_ServiceChangeParm(Parms, SCP0, Req);
-
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when (SCP0#'ServiceChangeParm'.serviceChangeInfo == asn1_NOVALUE) andalso
- is_atom(Val) ->
- SCI = #'AuditDescriptor'{auditToken = [Val]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when (SCP0#'ServiceChangeParm'.serviceChangeInfo == asn1_NOVALUE) andalso
- is_tuple(Val) ->
- SCI = #'AuditDescriptor'{auditPropertyToken = [Val]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when is_record(SCP0#'ServiceChangeParm'.serviceChangeInfo, 'AuditDescriptor') andalso
- is_atom(Val) ->
- SCI0 = SCP0#'ServiceChangeParm'.serviceChangeInfo,
- L = SCI0#'AuditDescriptor'.auditToken,
- SCI = SCI0#'AuditDescriptor'{auditToken = [Val|L]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when is_record(SCP0#'ServiceChangeParm'.serviceChangeInfo, 'AuditDescriptor') andalso
- is_tuple(Val) ->
- SCI0 = SCP0#'ServiceChangeParm'.serviceChangeInfo,
- L = SCI0#'AuditDescriptor'.auditPropertyToken,
- SCI = SCI0#'AuditDescriptor'{auditPropertyToken = [Val|L]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([incomplete|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeIncompleteFlag == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeIncompleteFlag = 'NULL'},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{Tag, Val}|_Parms], SCP, _Req) ->
- Val2 =
- case Tag of
- address ->
- SCP#'ServiceChangeParm'.serviceChangeAddress;
- mgc_id ->
- SCP#'ServiceChangeParm'.serviceChangeMgcId;
- profile ->
- SCP#'ServiceChangeParm'.serviceChangeProfile;
- version ->
- SCP#'ServiceChangeParm'.serviceChangeVersion;
- reason ->
- SCP#'ServiceChangeParm'.serviceChangeReason;
- delay ->
- SCP#'ServiceChangeParm'.serviceChangeDelay;
- method ->
- SCP#'ServiceChangeParm'.serviceChangeMethod;
- time_stamp ->
- SCP#'ServiceChangeParm'.timeStamp;
- audit_item ->
- SCP#'ServiceChangeParm'.serviceChangeInfo
- end,
- exit({at_most_once_serviceChangeParm, {Tag, Val, Val2}});
-merge_ServiceChangeParm([Parm|_Parms], SCP, _Req) ->
- Parm2 =
- case Parm of
- incomplete ->
- SCP#'ServiceChangeParm'.serviceChangeIncompleteFlag
- end,
- exit({at_most_once_serviceChangeParm, {Parm, Parm2}}).
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_ServiceChangeResParm,1}]}).
--endif.
-merge_ServiceChangeResParm(Parms) ->
- merge_ServiceChangeResParm(Parms, #'ServiceChangeResParm'{}).
-
-merge_ServiceChangeResParm([], SCRP) ->
- SCRP;
-merge_ServiceChangeResParm([{address, Val}|Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE,
- SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeAddress = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-merge_ServiceChangeResParm([{address, Val}|_Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE ->
- MgcId = SCRP0#'ServiceChangeResParm'.serviceChangeMgcId,
- exit({not_both_address_mgcid_servChgReplyParm, Val, MgcId});
-
-merge_ServiceChangeResParm([{mgc_id, Val}|Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE,
- SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeMgcId = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-merge_ServiceChangeResParm([{mgc_id, Val}|_Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE ->
- Addr = SCRP0#'ServiceChangeResParm'.serviceChangeAddress,
- exit({not_both_address_mgcid_servChgReplyParm, Val, Addr});
-
-merge_ServiceChangeResParm([{profile, Val}|Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeProfile == asn1_NOVALUE ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeProfile = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-
-merge_ServiceChangeResParm([{version, Val}|Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeVersion == asn1_NOVALUE ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeVersion = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-
-merge_ServiceChangeResParm([{time_stamp, Val}|Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.timeStamp == asn1_NOVALUE ->
- SCRP = SCRP0#'ServiceChangeResParm'{timeStamp = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-
-merge_ServiceChangeResParm([{Tag, Val}|_Parms], SCRP) ->
- Val2 =
- case Tag of
- address -> SCRP#'ServiceChangeResParm'.serviceChangeAddress;
- mgc_id -> SCRP#'ServiceChangeResParm'.serviceChangeMgcId;
- profile -> SCRP#'ServiceChangeResParm'.serviceChangeProfile;
- version -> SCRP#'ServiceChangeResParm'.serviceChangeVersion;
- time_stamp -> SCRP#'ServiceChangeResParm'.timeStamp
- end,
- exit({at_most_once_servChgReplyParm, {Tag, Val, Val2}}).
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_serviceChangeMethod,1}]}).
--endif.
-ensure_serviceChangeMethod(Token) ->
- case Token of
- {safeToken, _Line, "fl"} ->
- failover;
- {safeToken, _Line, "failover"} ->
- failover;
- {safeToken, _Line, "fo"} ->
- forced;
- {safeToken, _Line, "forced"} ->
- forced;
- {safeToken, _Line, "gr"} ->
- graceful;
- {safeToken, _Line, "graceful"} ->
- graceful;
- {safeToken, _Line, "rs"} ->
- restart;
- {safeToken, _Line, "restart"} ->
- restart;
- {safeToken, _Line, "dc"} ->
- disconnected;
- {safeToken, _Line, "disconnected"} ->
- disconnected;
- {safeToken, _Line, "ho"} ->
- handOff;
- {safeToken, _Line, "handoff"} ->
- handOff;
- {safeToken, Line, Text} ->
- return_error(Line, {bad_serviceChangeMethod, Text})
- end.
-
-
-ensure_profile({_TokenTag, Line, Text}) ->
- case string:tokens(Text, [$/]) of
- [Name, Version] ->
- Version2 = ensure_version(Version),
- #'ServiceChangeProfile'{profileName = Name, version = Version2};
- _ ->
- return_error(Line, {bad_profile, Text})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_version,1}]}).
--endif.
-ensure_version(Version) ->
- ensure_uint(Version, 0, 99).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_signalRequest,2}]}).
--endif.
-merge_signalRequest(SignalName, PropertyParms) ->
- Sig = #'Signal'{signalName = SignalName},
- SPL = [],
- do_merge_signalRequest(Sig, PropertyParms, SPL).
-
-do_merge_signalRequest(Sig, [H | T], SPL) ->
- case H of
- {stream, SID} when Sig#'Signal'.streamID == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{streamID = SID}, T, SPL);
- {signal_type, SigType} when Sig#'Signal'.sigType == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{sigType = SigType}, T, SPL);
- {duration, Duration} when Sig#'Signal'.duration == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{duration = Duration}, T, SPL);
- {notify_completion, NC} when Sig#'Signal'.notifyCompletion == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{notifyCompletion = NC}, T, SPL);
- keepActive when Sig#'Signal'.keepActive == asn1_NOVALUE->
- do_merge_signalRequest(Sig#'Signal'{keepActive = true}, T, SPL);
- {other, Name, PP} ->
- SP = #'SigParameter'{sigParameterName = Name,
- value = PP#'PropertyParm'.value,
- extraInfo = PP#'PropertyParm'.extraInfo},
- do_merge_signalRequest(Sig, T, [SP | SPL]);
- {direction, Dir} when Sig#'Signal'.direction == asn1_NOVALUE->
- do_merge_signalRequest(Sig#'Signal'{direction = Dir}, T, SPL);
- {requestId, RID} when Sig#'Signal'.requestID == asn1_NOVALUE->
- do_merge_signalRequest(Sig#'Signal'{requestID = RID}, T, SPL);
- _ ->
- return_error(0, {bad_sigParm, H})
- end;
-do_merge_signalRequest(Sig, [], SPL) ->
- Sig#'Signal'{sigParList = lists:reverse(SPL)} .
-
-%% eventStream = StreamToken EQUAL StreamID
-%% eventOther = eventParameterName parmValue
--ifdef(megaco_parser_inline).
--compile({inline,[{select_stream_or_other,2}]}).
--endif.
-select_stream_or_other(EventParameterName, ParmValue) ->
- if
- (EventParameterName =:= "st") orelse
- (EventParameterName =:= "stream") ->
- case ParmValue of
- #'PropertyParm'{value = [Value]} ->
- {stream, ensure_uint16(Value)};
- _ ->
- {stream, ensure_uint16(ParmValue)}
- end;
- true ->
- #'PropertyParm'{value = Value} = ParmValue,
- EP = #'EventParameter'{eventParameterName = EventParameterName,
- value = Value},
- {other, EP}
- end.
-
-%% select_stream_or_other("st", #'PropertyParm'{value = [Value]}) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other("st", Value) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other("stream", #'PropertyParm'{value = [Value]}) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other("stream", Value) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other(Name, #'PropertyParm'{value = Value}) ->
-%% EP = #'EventParameter'{eventParameterName = Name,
-%% value = Value},
-%% {other, EP}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_eventDM,1}]}).
--endif.
-ensure_eventDM(Token) ->
- {_TokenTag, Line, DMD} = Token,
- if
- is_record(DMD, 'DigitMapDescriptor') ->
- Name = DMD#'DigitMapDescriptor'.digitMapName,
- Val = DMD#'DigitMapDescriptor'.digitMapValue,
- if
- (Name =:= asn1_NOVALUE) andalso (Val =/= asn1_NOVALUE) ->
- {'DigitMapValue', Start, Short, Long, Duration, Body} = Val,
- DMV = #'DigitMapValue'{startTimer = Start,
- shortTimer = Short,
- longTimer = Long,
- digitMapBody = Body,
- durationTimer = Duration},
- {eventDM, {digitMapValue, DMV}};
- (Name =/= asn1_NOVALUE) andalso (Val =:= asn1_NOVALUE) ->
- {eventDM, {digitMapName, Name}};
- true ->
- return_error(Line, {bad_eventDM, DMD})
- end;
- true ->
- return_error(Line, {bad_eventDM, DMD})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_DMD,1}]}).
--endif.
-ensure_DMD(Token) ->
- {_TokenTag, Line, DMD} = Token,
- if
- is_record(DMD, 'DigitMapDescriptor') ->
- Val2 =
- case DMD#'DigitMapDescriptor'.digitMapValue of
- %% Note that the values of the digitMapBody and
- %% durationTimers are swapped by the scanner
- %% (this is done because of a problem in the flex scanner).
- #'DigitMapValue'{startTimer = asn1_NOVALUE,
- shortTimer = asn1_NOVALUE,
- longTimer = asn1_NOVALUE,
- durationTimer = [],
- digitMapBody = asn1_NOVALUE} ->
- asn1_NOVALUE;
- #'DigitMapValue'{durationTimer = Body,
- digitMapBody = Duration} = DMV ->
- %% Convert to version 1 DigitMapValue
- DMV#'DigitMapValue'{digitMapBody = Body,
- durationTimer = Duration};
- Other ->
- Other
- end,
- DMD#'DigitMapDescriptor'{digitMapValue = Val2};
- true ->
- return_error(Line, {bad_DigitMapDescriptor, DMD})
- end.
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_observed_event,3}]}).
--endif.
-merge_observed_event(ObservedEvents, EventName, TimeStamp) ->
- StreamId = asn1_NOVALUE,
- EPL = [],
- do_merge_observed_event(ObservedEvents, EventName, TimeStamp, StreamId, EPL).
-
-do_merge_observed_event([{stream, StreamID} | T], EventName, TimeStamp, asn1_NOVALUE, EPL) ->
- do_merge_observed_event(T, EventName, TimeStamp, StreamID, EPL);
-do_merge_observed_event([{other, PP} | T], EventName, TimeStamp, StreamID, EPL) ->
- do_merge_observed_event(T, EventName, TimeStamp, StreamID, [PP | EPL]);
-do_merge_observed_event([], EventName, TimeStamp, StreamID, EPL) ->
- #'ObservedEvent'{eventName = EventName,
- timeNotation = TimeStamp,
- streamID = StreamID,
- eventParList = lists:reverse(EPL)}.
-
-merge_eventSpec(OE)
- when is_record(OE, 'ObservedEvent') andalso
- (OE#'ObservedEvent'.timeNotation == asn1_NOVALUE) ->
- #'EventSpec'{eventName = OE#'ObservedEvent'.eventName,
- streamID = OE#'ObservedEvent'.streamID,
- eventParList = OE#'ObservedEvent'.eventParList};
-merge_eventSpec(OE) ->
- return_error(0, {bad_event_spec, OE}).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_eventParameters,1}]}).
--endif.
-merge_eventParameters(Params) ->
- StreamId = asn1_NOVALUE,
- EPL = [],
- RA = #'RequestedActions'{},
- HasA = no,
- do_merge_eventParameters(Params, StreamId, EPL, RA, HasA) .
-
-do_merge_eventParameters([H | T], StreamId, EPL, RA, HasA) ->
- case H of
- keepActive when RA#'RequestedActions'.keepActive == asn1_NOVALUE ->
- RA2 = RA#'RequestedActions'{keepActive = true},
- do_merge_eventParameters(T, StreamId, EPL, RA2, yes);
- {embed, SD, SED} when RA#'RequestedActions'.signalsDescriptor == asn1_NOVALUE ->
- RA2 = RA#'RequestedActions'{signalsDescriptor = SD,
- secondEvent = SED},
- do_merge_eventParameters(T, StreamId, EPL, RA2, yes);
- {eventDM, DM} when RA#'RequestedActions'.eventDM == asn1_NOVALUE ->
- RA2 = RA#'RequestedActions'{eventDM = DM},
- do_merge_eventParameters(T, StreamId, EPL, RA2, yes);
- {stream, NewStreamId} when StreamId == asn1_NOVALUE ->
- do_merge_eventParameters(T, NewStreamId, EPL, RA, HasA);
- {other, PP} when is_record(PP, 'PropertyParm') ->
- EP = #'EventParameter'{eventParameterName = PP#'PropertyParm'.name,
- value = PP#'PropertyParm'.value,
- extraInfo = PP#'PropertyParm'.extraInfo},
- do_merge_eventParameters(T, StreamId, [EP | EPL], RA, HasA);
- {other, EP} when is_record(EP, 'EventParameter') ->
- do_merge_eventParameters(T, StreamId, [EP | EPL], RA, HasA);
- _ ->
- return_error(0, {bad_eventParameter, H})
- end;
-do_merge_eventParameters([], StreamId, EPL, RA, yes) ->
- #'RequestedEvent'{streamID = StreamId,
- eventAction = RA,
- evParList = lists:reverse(EPL)};
-do_merge_eventParameters([], StreamId, EPL, _RA, no) ->
- #'RequestedEvent'{streamID = StreamId,
- eventAction = asn1_NOVALUE,
- evParList = lists:reverse(EPL)}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_secondEventParameters,1}]}).
--endif.
-merge_secondEventParameters(Params) ->
- StreamId = asn1_NOVALUE,
- EPL = [],
- SRA = #'SecondRequestedActions'{},
- HasA = no,
- do_merge_secondEventParameters(Params, StreamId, EPL, SRA, HasA) .
-
-do_merge_secondEventParameters([H | T], StreamId, EPL, SRA, HasA) ->
- case H of
- keepActive when SRA#'SecondRequestedActions'.keepActive =:= asn1_NOVALUE ->
- SRA2 = SRA#'SecondRequestedActions'{keepActive = true},
- do_merge_secondEventParameters(T, StreamId, EPL, SRA2, yes);
- {second_embed, SD} when SRA#'SecondRequestedActions'.signalsDescriptor =:= asn1_NOVALUE ->
- SRA2 = SRA#'SecondRequestedActions'{signalsDescriptor = SD},
- do_merge_secondEventParameters(T, StreamId, EPL, SRA2, yes);
- {eventDM, DM} when SRA#'SecondRequestedActions'.eventDM =:= asn1_NOVALUE ->
- SRA2 = SRA#'SecondRequestedActions'{eventDM = DM},
- do_merge_secondEventParameters(T, StreamId, EPL, SRA2, yes);
- {stream, NewStreamId} when StreamId =:= asn1_NOVALUE ->
- do_merge_secondEventParameters(T, NewStreamId, EPL, SRA, HasA);
- {other, PP} when is_record(PP, 'PropertyParm') ->
- EP = #'EventParameter'{eventParameterName = PP#'PropertyParm'.name,
- value = PP#'PropertyParm'.value,
- extraInfo = PP#'PropertyParm'.extraInfo},
- do_merge_secondEventParameters(T, StreamId, [EP | EPL], SRA, HasA);
- {other, EP} when is_record(EP, 'EventParameter') ->
- do_merge_secondEventParameters(T, StreamId, [EP | EPL], SRA, HasA);
- _ ->
- return_error(0, {bad_secondEventParameter, H})
- end;
-do_merge_secondEventParameters([], StreamId, EPL, SRA, yes) ->
- #'SecondRequestedEvent'{streamID = StreamId,
- eventAction = SRA,
- evParList = lists:reverse(EPL)};
-do_merge_secondEventParameters([], StreamId, EPL, _SRA, no) ->
- #'SecondRequestedEvent'{streamID = StreamId,
- eventAction = asn1_NOVALUE,
- evParList = lists:reverse(EPL)}.
-
-%% terminationID = "ROOT" / pathName / "$" / "*"
-%% Total length of pathName must not exceed 64 chars.
-%% pathName = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
-%% ["@" pathDomainName ]
-%% ABNF allows two or more consecutive "." although it is meaningless
-%% in a path domain name.
-%% pathDomainName = (ALPHA / DIGIT / "*" )
-%% *63(ALPHA / DIGIT / "-" / "*" / ".")
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_terminationID,1}]}).
--endif.
-ensure_terminationID(Token) ->
- {safeToken, _Line, LowerText} = Token,
- %% terminationID = "ROOT" / pathName / "$" / "*"
- decode_term_id(LowerText, false, [], []).
-
-decode_term_id([H | T], Wild, Id, Component) ->
- case H of
- $/ -> decode_term_id(T, Wild, [lists:reverse(Component) | Id], []);
- $* -> decode_term_id(T, true, Id, [?megaco_all | Component]);
- $$ -> decode_term_id(T, true, Id, [?megaco_choose | Component]);
- _ -> decode_term_id(T, Wild, Id, [H | Component])
- end;
-decode_term_id([], Wild, Id, Component) ->
- Id2 = [lists:reverse(Component) | Id],
- #megaco_term_id{contains_wildcards = Wild, id = lists:reverse(Id2)}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_pathName,1}]}).
--endif.
-ensure_pathName(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Text. %% BUGBUG: ensure values
-
-%% TimeStamp = Date "T" Time ; per ISO 8601:1988
-%% Date = 8(DIGIT) ; Date = yyyymmdd
-%% Time = 8(DIGIT) ; Time = hhmmssss
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_timeStamp,1}]}).
--endif.
-ensure_timeStamp(Token) ->
- {'TimeStampToken', Line, Text} = Token,
- case string:tokens(Text, [$T, $t]) of
- [Date, Time] ->
- #'TimeNotation'{date = Date, time = Time};
- _ ->
- return_error(Line, {bad_timeStamp, Text})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_transactionID,1}]}).
--endif.
-ensure_transactionID(TransId) ->
- ensure_uint32(TransId).
-
-%% transactionAck = transactionID / (transactionID "-" transactionID)
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_transactionAck,1}]}).
--endif.
-ensure_transactionAck(Tokens) ->
- {safeToken, _Line, Text} = Tokens,
- ensure_transactionAck2(Text, []).
-
-ensure_transactionAck2([], Acc) ->
- Id = lists:reverse(Acc),
- #'TransactionAck'{firstAck = ensure_transactionID(Id)};
-ensure_transactionAck2([$- | Id2], Acc) ->
- Id1 = lists:reverse(Acc),
- #'TransactionAck'{firstAck = ensure_transactionID(Id1),
- lastAck = ensure_transactionID(Id2)};
-ensure_transactionAck2([H|T], Acc) ->
- ensure_transactionAck2(T, [H|Acc]).
-
-
-merge_context_request(CR, []) ->
- CR;
-merge_context_request(CR, [H|T]) ->
- case H of
- {priority, Int} when CR#'ContextRequest'.priority == asn1_NOVALUE ->
- merge_context_request(CR#'ContextRequest'{priority = Int}, T);
-
- {emergency, Bool} when CR#'ContextRequest'.emergency == asn1_NOVALUE ->
- merge_context_request(CR#'ContextRequest'{emergency = Bool}, T);
-
- {topology, Desc} when CR#'ContextRequest'.topologyReq == asn1_NOVALUE ->
- merge_context_request(CR#'ContextRequest'{topologyReq = Desc}, T);
-
- {iepsCallind, Ind} when CR#'ContextRequest'.iepsCallind == asn1_NOVALUE ->
- merge_context_request(CR#'ContextRequest'{iepsCallind = Ind}, T);
-
- {prop, Prop} when CR#'ContextRequest'.contextProp == asn1_NOVALUE ->
- merge_context_request(CR#'ContextRequest'{contextProp = [Prop]}, T);
- {Tag, Val} ->
- Val2 =
- case Tag of
- priority -> CR#'ContextRequest'.priority;
- emergency -> CR#'ContextRequest'.emergency;
- topology -> CR#'ContextRequest'.topologyReq;
- iepsCallind -> CR#'ContextRequest'.iepsCallind;
- prop -> CR#'ContextRequest'.contextProp
- end,
- exit({at_most_once_contextProperty, {Tag, Val, Val2}})
- end.
-
-
-merge_context_attr_audit_request(CAAR, []) ->
- CAAR;
-merge_context_attr_audit_request(CAAR, [H|T]) ->
- case H of
- priorityAudit when CAAR#'ContextAttrAuditRequest'.priority == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{priority = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- emergencyAudit when CAAR#'ContextAttrAuditRequest'.emergency == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{emergency = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- topologyAudit when CAAR#'ContextAttrAuditRequest'.topology == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{topology = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- iepsCallind when CAAR#'ContextAttrAuditRequest'.iepsCallind == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{iepsCallind = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- {prop, Name} when CAAR#'ContextAttrAuditRequest'.contextPropAud == asn1_NOVALUE ->
- CPA = [#'IndAudPropertyParm'{name = Name}],
- CAAR2 = CAAR#'ContextAttrAuditRequest'{contextPropAud = CPA},
- merge_context_attr_audit_request(CAAR2, T);
-
- {prop, Name} ->
- CPA = CAAR#'ContextAttrAuditRequest'.contextPropAud,
- CPA2 = [#'IndAudPropertyParm'{name = Name}|CPA],
- CAAR2 = CAAR#'ContextAttrAuditRequest'{contextPropAud = CPA2},
- merge_context_attr_audit_request(CAAR2, T)
-
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_action_request,2}]}).
--endif.
-merge_action_request(CtxId, Items) ->
- do_merge_action_request(Items, [], asn1_NOVALUE, asn1_NOVALUE, CtxId).
-
-do_merge_action_request([H|T], CmdReqs, CtxReq, CtxAuditReq, CtxId) ->
- case H of
- {commandRequest, CmdReq} ->
- do_merge_action_request(T, [CmdReq|CmdReqs],
- CtxReq, CtxAuditReq, CtxId);
-
- {contextProps, ContextReq} when CtxReq == asn1_NOVALUE ->
- do_merge_action_request(T, CmdReqs,
- ContextReq, CtxAuditReq, CtxId);
-
- {contextAudit, ContextAuditReq} when CtxAuditReq == asn1_NOVALUE ->
- do_merge_action_request(T, CmdReqs,
- CtxReq, ContextAuditReq, CtxId)
- end;
-do_merge_action_request([], CmdReqs, CtxReq, CtxAuditReq, CtxId) ->
- #'ActionRequest'{contextId = CtxId,
- contextRequest = strip_ContextRequest(CtxReq),
- contextAttrAuditReq = strip_ContextAttrAuditRequest(CtxAuditReq),
- commandRequests = lists:reverse(CmdReqs)}.
-
-
-%% OTP-5085:
-%% In order to solve a problem in the parser, the error descriptor
-%% has been put last in the non-empty commandReplyList, if it is not
-%% asn1_NOVALUE
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_action_reply,1}]}).
--endif.
-merge_action_reply(Items) ->
- do_merge_action_reply(Items, asn1_NOVALUE, asn1_NOVALUE, []).
-
-do_merge_action_reply([], Err, Ctx, Cmds) ->
- #'ActionReply'{errorDescriptor = Err,
- contextReply = strip_ContextRequest(Ctx),
- commandReply = lists:reverse(Cmds)};
-do_merge_action_reply([H|T], Err0, Ctx0, Cmds) ->
- case H of
- {error, Err1} when Err0 == asn1_NOVALUE ->
- do_merge_action_reply(T, Err1, Ctx0, Cmds);
- {command, Cmd} ->
- do_merge_action_reply(T, Err0, Ctx0, [Cmd | Cmds]);
- {context, Ctx1} when Ctx0 == asn1_NOVALUE ->
- do_merge_action_reply(T, Err0, Ctx1, Cmds)
- end.
-
-strip_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = asn1_NOVALUE,
- iepsCallind = asn1_NOVALUE,
- contextProp = asn1_NOVALUE}) ->
- asn1_NOVALUE;
-strip_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = asn1_NOVALUE,
- iepsCallind = asn1_NOVALUE,
- contextProp = []}) ->
- asn1_NOVALUE;
-strip_ContextRequest(asn1_NOVALUE) ->
- asn1_NOVALUE;
-strip_ContextRequest(R) ->
- R.
-
-strip_ContextAttrAuditRequest(asn1_NOVALUE) ->
- asn1_NOVALUE;
-strip_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topology = asn1_NOVALUE,
- iepsCallind = asn1_NOVALUE,
- contextPropAud = asn1_NOVALUE}) ->
- asn1_NOVALUE;
-strip_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topology = asn1_NOVALUE,
- iepsCallind = asn1_NOVALUE,
- contextPropAud = []}) ->
- asn1_NOVALUE;
-strip_ContextAttrAuditRequest(R) ->
- R.
-
-merge_AmmRequest_descriptors([], Acc) ->
- lists:reverse(Acc);
-merge_AmmRequest_descriptors([{_, deprecated}|Descs], Acc) ->
- merge_AmmRequest_descriptors(Descs, Acc);
-merge_AmmRequest_descriptors([Desc|Descs], Acc) ->
- merge_AmmRequest_descriptors(Descs, [Desc|Acc]).
-
-make_commandRequest({CmdTag, {_TokenTag, _Line, Text}}, Cmd) ->
- Req = #'CommandRequest'{command = {CmdTag, Cmd}},
- case Text of
- [$w, $- | _] ->
- Req#'CommandRequest'{wildcardReturn = 'NULL'};
- [$o, $-, $w, $- | _] ->
- Req#'CommandRequest'{optional = 'NULL', wildcardReturn = 'NULL'};
- [$o, $- | _] ->
- Req#'CommandRequest'{optional = 'NULL'};
- _ ->
- Req
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_terminationAudit,1}]}).
--endif.
-merge_terminationAudit(AuditReturnParameters) ->
- lists:reverse(do_merge_terminationAudit(AuditReturnParameters, [], [])).
-
-do_merge_terminationAudit([H| T], ARPs, AuditItems) ->
- case H of
- {auditReturnItem, AuditItem} ->
- do_merge_terminationAudit(T, ARPs, [AuditItem | AuditItems]);
- AuditReturnParameter ->
- do_merge_terminationAudit(T, [AuditReturnParameter | ARPs], AuditItems)
- end;
-do_merge_terminationAudit([], AuditReturnParameters, []) ->
- AuditReturnParameters;
-do_merge_terminationAudit([], AuditReturnParameters, AuditItems) ->
- AuditDescriptor = #'AuditDescriptor'{auditToken = AuditItems},
- AuditReturnParameter = {emptyDescriptors, AuditDescriptor},
- [AuditReturnParameter | AuditReturnParameters].
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_mediaDescriptor,1}]}).
--endif.
-merge_mediaDescriptor(MediaParms) ->
- do_merge_mediaDescriptor(MediaParms, asn1_NOVALUE, [], []).
-
-do_merge_mediaDescriptor([H | T], TS, One, Multi) ->
- case H of
- {streamParm, Parm} when Multi =:= [] ->
- do_merge_mediaDescriptor(T, TS, [Parm | One], Multi);
- {streamDescriptor, Desc} when One =:= [] ->
- do_merge_mediaDescriptor(T, TS, One, [Desc | Multi]);
- {termState, TS2} when TS =:= asn1_NOVALUE ->
- do_merge_mediaDescriptor(T, TS2, One, Multi);
- _ ->
- return_error(0, {bad_merge_mediaDescriptor, [H, TS, One, Multi]})
- end;
-do_merge_mediaDescriptor([], TS, One, Multi) ->
- if
- (One =:= []) ->
- if (Multi =:= []) ->
- #'MediaDescriptor'{streams = asn1_NOVALUE,
- termStateDescr = TS};
- true -> % (Multi =/= [])
- Streams = {multiStream, lists:reverse(Multi)},
- #'MediaDescriptor'{streams = Streams,
- termStateDescr = TS}
- end;
- true -> % (One =/= [])
- if
- (Multi =:= []) ->
- Streams = {oneStream, merge_streamParms(One)},
- #'MediaDescriptor'{streams = Streams,
- termStateDescr = TS};
- true -> % (Multi =/= [])
- return_error(0,
- {bad_merge_mediaDescriptor, [TS, One, Multi]})
- end
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_streamParms,1}]}).
--endif.
-merge_streamParms(TaggedStreamParms) ->
- SP = #'StreamParms'{},
- do_merge_streamParms(TaggedStreamParms, SP).
-
-do_merge_streamParms([{Tag, D} | T] = All, SP) ->
- case Tag of
- local when SP#'StreamParms'.localDescriptor =:= asn1_NOVALUE ->
- do_merge_streamParms(T, SP#'StreamParms'{localDescriptor = D});
- remote when SP#'StreamParms'.remoteDescriptor =:= asn1_NOVALUE ->
- do_merge_streamParms(T, SP#'StreamParms'{remoteDescriptor = D});
- control ->
- LCD =
- case SP#'StreamParms'.localControlDescriptor of
- asn1_NOVALUE ->
- #'LocalControlDescriptor'{propertyParms = []};
- PrevLCD ->
- PrevLCD
- end,
- LCD2 = do_merge_control_streamParms(D, LCD),
- do_merge_streamParms(T, SP#'StreamParms'{localControlDescriptor = LCD2});
- statistics when SP#'StreamParms'.statisticsDescriptor =:= asn1_NOVALUE ->
- do_merge_streamParms(T, SP#'StreamParms'{statisticsDescriptor = D});
- _ ->
- return_error(0, {do_merge_streamParms, [All, SP]})
- end;
-do_merge_streamParms([], SP)
- when is_record(SP#'StreamParms'.localControlDescriptor,
- 'LocalControlDescriptor') ->
- LCD = SP#'StreamParms'.localControlDescriptor,
- PP = LCD#'LocalControlDescriptor'.propertyParms,
- LCD2 = LCD#'LocalControlDescriptor'{propertyParms = lists:reverse(PP)},
- SP#'StreamParms'{localControlDescriptor = LCD2};
-do_merge_streamParms([], SP) ->
- SP.
-
-
-do_merge_control_streamParms([{SubTag, SD} | T] = All, LCD) ->
- case SubTag of
- group when LCD#'LocalControlDescriptor'.reserveGroup =:= asn1_NOVALUE ->
- LCD2 = LCD#'LocalControlDescriptor'{reserveGroup = SD},
- do_merge_control_streamParms(T, LCD2);
- value when LCD#'LocalControlDescriptor'.reserveValue =:= asn1_NOVALUE ->
- LCD2 = LCD#'LocalControlDescriptor'{reserveValue = SD},
- do_merge_control_streamParms(T, LCD2);
- mode when LCD#'LocalControlDescriptor'.streamMode =:= asn1_NOVALUE ->
- LCD2 = LCD#'LocalControlDescriptor'{streamMode = SD},
- do_merge_control_streamParms(T, LCD2);
- prop ->
- PP = LCD#'LocalControlDescriptor'.propertyParms,
- LCD2 = LCD#'LocalControlDescriptor'{propertyParms = [SD | PP]},
- do_merge_control_streamParms(T, LCD2);
- _ ->
- return_error(0, {do_merge_control_streamParms, [All, LCD]})
- end;
-do_merge_control_streamParms([], LCD) ->
- LCD.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_terminationStateDescriptor,1}]}).
--endif.
-merge_terminationStateDescriptor(Parms) ->
- TSD = #'TerminationStateDescriptor'{propertyParms = []},
- do_merge_terminationStateDescriptor(Parms, TSD).
-
-do_merge_terminationStateDescriptor([{Tag, Val} | T], TSD) ->
- case Tag of
- serviceState when TSD#'TerminationStateDescriptor'.serviceState =:= asn1_NOVALUE ->
- TSD2 = TSD#'TerminationStateDescriptor'{serviceState = Val},
- do_merge_terminationStateDescriptor(T, TSD2);
- eventBufferControl when TSD#'TerminationStateDescriptor'.eventBufferControl =:= asn1_NOVALUE->
- TSD2 = TSD#'TerminationStateDescriptor'{eventBufferControl = Val},
- do_merge_terminationStateDescriptor(T, TSD2);
- propertyParm ->
- PP = TSD#'TerminationStateDescriptor'.propertyParms,
- TSD2 = TSD#'TerminationStateDescriptor'{propertyParms = [Val | PP]},
- do_merge_terminationStateDescriptor(T, TSD2)
- end;
-do_merge_terminationStateDescriptor([], TSD) ->
- PP = TSD#'TerminationStateDescriptor'.propertyParms,
- TSD#'TerminationStateDescriptor'{propertyParms = lists:reverse(PP)}.
-
--ifdef(megaco_nscanner_props).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_prop_groups,1}]}).
--endif.
-ensure_prop_groups(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Group = [],
- parse_prop_name(Text, Group).
-
-parse_prop_name([Char | Rest] = All, Group) ->
- if
- ?white_space(Char) ->
- parse_prop_name(Rest, Group);
- ?end_of_line(Char) ->
- parse_prop_name(Rest, Group);
- true ->
- Name = [],
- do_parse_prop_name(All, Name, Group)
- end;
-parse_prop_name([] = All, Group) ->
- Name = [],
- do_parse_prop_name(All, Name, Group).
-
-do_parse_prop_name([Char | Rest], Name, Group)
- when (Char =:= $=) andalso (Name =/= []) ->
- %% Now we have a complete name
- if
- (Name =:= "v") andalso (Group =/= []) ->
- %% v= is a property group delimiter,
- %% lets create yet another property group.
- NewGroup = [],
- [lists:reverse(Group) | parse_prop_value(Rest, Name, NewGroup)];
- true ->
- %% Use current property group
- parse_prop_value(Rest, Name, Group)
- end;
-do_parse_prop_name([Char | Rest], Name, Group) ->
- case ?classify_char4(Char) of
- safe_char_upper ->
- do_parse_prop_name(Rest, [Char | Name], Group);
- safe_char ->
- do_parse_prop_name(Rest, [Char | Name], Group);
- _ ->
- return_error(0, {bad_prop_name, lists:reverse(Name), Char})
- end;
-do_parse_prop_name([], [], []) ->
- [];
-do_parse_prop_name([], [], Group) ->
- [lists:reverse(Group)];
-do_parse_prop_name([], Name, Group) when Name =/= [] ->
- %% Assume end of line
- Value = [],
- PP = make_prop_parm(Name, Value),
- Group2 = lists:reverse([PP | Group]),
- [Group2].
-
--ifdef(megaco_parser_inline).
--compile({inline,[{parse_prop_value,3}]}).
--endif.
-parse_prop_value(Chars, Name, Group) ->
- Value = [],
- do_parse_prop_value(Chars, Name, Value, Group).
-
-do_parse_prop_value([Char | Rest], Name, Value, Group) ->
- if
- ?end_of_line(Char) ->
- %% Now we have a complete "name=value" pair
- PP = make_prop_parm(Name, Value),
- parse_prop_name(Rest, [PP | Group]);
- true ->
- do_parse_prop_value(Rest, Name, [Char | Value], Group)
- end;
-do_parse_prop_value([], Name, Value, Group) ->
- %% Assume end of line
- PP = make_prop_parm(Name, Value),
- Group2 = lists:reverse([PP | Group]),
- [Group2].
-
--ifdef(megaco_parser_inline).
--compile({inline,[{make_prop_parm,2}]}).
--endif.
-make_prop_parm(Name, Value) ->
- #'PropertyParm'{name = lists:reverse(Name),
- value = [lists:reverse(Value)]}.
-
--else. % -ifdef(megaco_nscanner_props).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_prop_groups,1}]}).
--endif.
-ensure_prop_groups(Token) ->
- {_TokenTag, _Line, Groups} = Token,
- Groups.
-
-%% do_ensure_prop_groups(Groups) when is_list(Groups) ->
-%% [ensure_prop_group(Group) || Group <- Groups];
-%% do_ensure_prop_groups(BadGroups) ->
-%% throw({error, {?MODULE, {bad_property_groups, BadGroups}}}).
-
-%% -ifdef(megaco_parser_inline).
-%% -compile({inline,[{ensure_prop_group,1}]}).
-%% -endif.
-%% ensure_prop_group(Group) when is_list(Group) ->
-%% [ensure_prop_parm(PropParm) || PropParm <- Group];
-%% ensure_prop_group(BadGroup) ->
-%% throw({error, {?MODULE, {bad_property_group, BadGroup}}}).
-
-%% -ifdef(megaco_parser_inline).
-%% -compile({inline,[{ensure_prop_parm,1}]}).
-%% -endif.
-%% ensure_prop_parm(#property_parm{name = Name,
-%% value = Value}) ->
-%% #'PropertyParm'{name = Name,
-%% value = Value};
-%% ensure_prop_parm(PP) when is_record(PP, 'PropertyParm') ->
-%% PP;
-%% ensure_prop_parm(BadPropParm) ->
-%% throw({error, {?MODULE, {bad_property_parm, BadPropParm}}}).
-
--endif. % -ifdef(megaco_nscanner_props).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint,3}]}).
--endif.
-ensure_uint(Token, Min, Max) ->
- case Token of
- {_TokenTag, Line, Val} when is_integer(Val) ->
- ensure_uint(Val, Min, Max, Line);
- {_TokenTag, Line, Text} ->
- case (catch list_to_integer(Text)) of
- {'EXIT', _} ->
- return_error(Line, {not_an_integer, Text});
- Val when is_integer(Val) ->
- ensure_uint(Val, Min, Max, Line)
- end;
- Val when is_integer(Val) ->
- ensure_uint(Val, Min, Max, 0);
- Text ->
- case (catch list_to_integer(Text)) of
- {'EXIT', _} ->
- return_error(0, {not_an_integer, Text});
- Val when is_integer(Val) ->
- ensure_uint(Val, Min, Max, 0)
- end
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint,4}]}).
--endif.
--dialyzer({nowarn_function, ensure_uint/4}). % Future compat
-ensure_uint(Val, Min, Max, Line) ->
- if
- is_integer(Min) andalso (Val >= Min) ->
- if
- is_integer(Max) andalso (Val =< Max) ->
- Val;
- Max =:= infinity ->
- Val;
- true ->
- return_error(Line, {too_large_integer, Val, Max})
- end;
- true ->
- return_error(Line, {too_small_integer, Val, Min})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint16,1}]}).
--endif.
-ensure_uint16(Int) ->
- ensure_uint(Int, 0, 65535).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint32,1}]}).
--endif.
-ensure_uint32(Int) ->
- ensure_uint(Int, 0, 4294967295) .
-
-%% OTP-4710
-ensure_hex({_TokenTag, _Line, [$0, $x |Chars]}, Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []);
-ensure_hex({_TokenTag, _Line, [$0, $X |Chars]}, Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []);
-ensure_hex([$0, $x |Chars], Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []);
-ensure_hex([$0, $X |Chars], Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []).
-
-%% OTP-4710
-hex_to_int([], Acc) ->
- lists:reverse(Acc);
-hex_to_int([Char1,Char2|Tail], Acc) ->
- Int1 = hchar_to_int(Char1),
- Int2 = hchar_to_int(Char2),
- Val = Int2 bor (Int1 bsl 4),
- hex_to_int(Tail, [Val| Acc]);
-hex_to_int([Char], Acc) ->
- Int = hchar_to_int(Char),
- lists:reverse([Int|Acc]).
-
-hchar_to_int(Char) when ($0 =< Char) andalso (Char =< $9) ->
- Char - $0;
-hchar_to_int(Char) when ($A =< Char) andalso (Char =< $F) ->
- Char - $A + 10; % OTP-4710
-hchar_to_int(Char) when ($a =< Char) andalso (Char =< $f) ->
- Char - $a + 10. % OTP-4710
-
--ifdef(megaco_parser_inline).
--compile({inline,[{value_of,1}]}).
--endif.
-value_of(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Text.
-
-
-%% -------------------------------------------------------------------
-
-% d(F) ->
-% d(F,[]).
-% d(F, A) ->
-% d(get(dbg), F, A).
-
-% d(true, F, A) ->
-% io:format("DBG:~w:" ++ F ++ "~n", [?MODULE | A]);
-% d(_, _, _) ->
-% ok.
-
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3a.yrl b/lib/megaco/src/text/megaco_text_parser_prev3a.yrl
deleted file mode 100644
index 9100800c3d..0000000000
--- a/lib/megaco/src/text/megaco_text_parser_prev3a.yrl
+++ /dev/null
@@ -1,1597 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: YECC grammar for text encoding of Megaco/H.248
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Annex B TEXT ENCODING OF THE PROTOCOL (NORMATIVE)
-%%
-%% B.1 Coding of wildcards
-%%
-%% In a text encoding of the protocol, while TerminationIDs are
-%% arbitrary, by judicious choice of names, the wildcard character, "*"
-%% may be made more useful. When the wildcard character is encountered,
-%% it will "match" all TerminationIDs having the same previous and
-%% following characters (if appropriate). For example, if there were
-%% TerminationIDs of R13/3/1, R13/3/2 and R13/3/3, the TerminationID
-%% R13/3/* would match all of them. There are some circumstances where
-%% ALL Terminations must be referred to. The TerminationID "*" suffices,
-%% and is referred to as ALL. The CHOOSE TerminationID "$" may be used to
-%% signal to the MG that it has to create an ephemeral Termination or
-%% select an idle physical Termination.
-%%
-%% B.2 ABNF specification
-%%
-%% The protocol syntax is presented in ABNF according to RFC2234. The
-%% protocol is not case sensitive. Identifiers are not case sensitive.
-%%
-%% NOTE 1 - This syntax specification does not enforce all restrictions
-%% on element inclusions and values. Some additional
-%% restrictions are stated in comments and other restrictions
-%% appear in the text of this Recommendation. These additional
-%% restrictions are part of the protocol even though not
-%% enforced by this Recommendation.
-%% NOTE 2 - The syntax is context-dependent. For example, "Add" can be
-%% the AddToken or a NAME depending on the context in which it
-%% occurs.
-%%
-%% Everything in the ABNF and text encoding is case insensitive. This
-%% includes TerminationIDs, digitmap Ids etc. SDP is case sensitive as
-%% per RFC 2327.
-%%
-%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Number of expected shift/reduce warnings
-%% This is ugly but...
-%%----------------------------------------------------------------------
-
-Expect 118.
-
-
-%%----------------------------------------------------------------------
-%% Non-terminals
-%%----------------------------------------------------------------------
-
-Nonterminals
-
- actionReply
- actionReplyBody
- actionReplyList
- actionRequest
- actionRequestBody
- actionRequestItem
- actionRequestItems
- actionRequestList
- alternativeValue
- ammParameter
- ammParameters
- ammRequest
- ammRequestBody
- ammToken
- ammsReply
- ammsReplyBody
- ammsToken
- auditDescriptor
- auditDescriptorBody
- auditItem
- auditItemList
- auditOther
- auditReply
- auditRequest
- auditReturnItem
- auditReturnParameter
- auditReturnParameterList
- authenticationHeader
- commandReplyList
- commandReplys %% v3
- commandRequest
- contextAttrDescriptor %% v3
- contextAttrDescProp %% v3
- contextAttrDescProps %% v3
- contextAudit
- contextAuditProperties
- contextAuditProperty
- contextID
- contextProperties %% v3
- contextProperty
- contextTerminationAudit
- daddr
- deviceName
- digitMapDescriptor
- direction %% v3
- domainAddress
- domainName
- embedFirst
- embedNoSig
- embedSig
- embedWithSig
- errorCode
- errorDescriptor
- errorText
- eventBufferControl
- eventBufferControlState
- eventBufferDescriptor
- eventDM
- eventParameter
- eventParameterName
- eventParameters
- eventSpec
- eventSpecList
- eventStream
- eventStreamOrOther
- eventsDescriptor
- extension
- extensionParameter
-
- %% v2 - start
- indAudauditReturnParameter
- indAuddigitMapDescriptor
- indAudeventBufferDescriptor
- indAudeventSpec
- indAudeventSpecParameter
- %% indAudeventSpecParameterList
- indAudeventsDescriptor
- indAudlocalControlDescriptor
- indAudlocalParm
- indAudlocalParmList
- indAudmediaDescriptor
- indAudmediaParm
- %% indAudmediaParmList
- indAudpackagesDescriptor
- indAudrequestedEvent
- indAudsignalsDescriptor
- indAudsignalList
- %% indAudsignalListParm
- indAudsignalParm
- %% indAudsignalRequest
- indAudstreamDescriptor
- indAudstreamParm
- indAudstatisticsDescriptor
- indAudterminationAudit
- indAudterminationAuditList
- indAudterminationStateDescriptor
- indAudterminationStateParm
- %% indAudterminationStateParmList
- optIndAudeventSpecParameter
- optIndAudsignalParm
- %% v2 - end
-
- indAudcontextAttrDescriptor %% v3
-
- localControlDescriptor
- localParm
- localParmList
- mId
- mediaDescriptor
- mediaParm
- mediaParmList
- megacoMessage
- message
- messageBody
- modemDescriptor % Deprecated as of Corr 1
- modemType % Deprecated as of Corr 1
- modemTypeList % Deprecated as of Corr 1
- mtpAddress
- muxDescriptor
- muxType
- notificationReason
- notificationReasons
- notifyReply
- notifyReplyBody
- notifyRequest
- notifyRequestBody
- observedEvent
- observedEventBody
- observedEventParameter
- observedEventParameters
- % observedEventTimeStamp
- observedEvents
- observedEventsDescriptor
- onOrOff
- optAuditDescriptor
- optImmAckRequired
- optPropertyParms
- optSep
- packagesDescriptor
- packagesItem
- packagesItems
- %% parmName
- parmValue
- pathName
- pkgdName
- portNumber
- priority
- propertyParm
- propertyParms
- requestID
- requestedEvent
- requestedEventBody
- requestedEvents
- safeToken
- safeToken2
- secondEventParameter
- secondEventParameters
- secondRequestedEvent
- secondRequestedEventBody
- secondRequestedEvents
- servChgReplyParm
- servChgReplyParms
- serviceChangeAddress
- serviceChangeDelay
- serviceChangeDescriptor
- serviceChangeMethod
- serviceChangeMgcId
- serviceChangeParm
- serviceChangeParms
- serviceChangeProfile
- serviceChangeReason
- serviceChangeReply
- serviceChangeReplyBody
- serviceChangeReplyDescriptor
- serviceChangeRequest
- serviceChangeVersion
- serviceState
- serviceStates
- sigParameter
- sigParameters
- signalList
- signalListId
- signalListParm
- signalListParms
- signalName
- signalParm
- signalParms
- signalRequest
- signalsDescriptor
- signalType
- statisticsDescriptor
- statisticsParameter
- statisticsParameters
- streamDescriptor
- streamID
- streamModes
- streamParm
- streamParmList
- subtractRequest
- terminationA
- terminationAudit
- terminationB
- terminationID
- terminationIDList
- terminationIDListRepeat
- terminationStateDescriptor
- terminationStateParm
- terminationStateParms
- timeStamp
- topologyDescriptor
- topologyDirection
- topologyTriple
- topologyTripleList
- transactionAck
- transactionAckList
- transactionID
- transactionItem
- transactionList
- transactionPending
- transactionReply
- transactionReplyBody
- transactionRequest
- transactionResponseAck
- value
- valueList
-
-.
-
-%%----------------------------------------------------------------------
-%% Terminals
-%%----------------------------------------------------------------------
-
-Terminals
-
- 'AddToken'
- 'AuditCapToken'
- 'AuditToken'
- 'AuditValueToken'
- 'AuthToken'
- 'BothToken' %% v3
- 'BothwayToken'
- 'BriefToken'
- 'BufferToken'
- 'COLON'
- 'COMMA'
- 'ContextAttrToken' %% v3
- 'ContextAuditToken'
- 'CtxToken'
- 'DelayToken'
- 'DigitMapToken'
- 'DigitMapDescriptorToken'
- 'DirectionToken' %% v3
- 'DiscardToken'
- 'DisconnectedToken'
- 'DurationToken'
- 'EQUAL'
- 'EmbedToken'
- 'EmergencyToken'
- 'EmergencyOffToken'
- 'ErrorToken'
- 'EventBufferToken'
- 'EventsToken'
- 'ExternalToken' %% v3
- 'FailoverToken'
- 'ForcedToken'
- 'GREATER'
- 'GracefulToken'
- 'H221Token'
- 'H223Token'
- 'H226Token'
- 'HandOffToken'
- 'IEPSToken' %% v3
- 'ImmAckRequiredToken'
- 'InSvcToken'
- 'InactiveToken'
- 'InternalToken' %% v3
- 'InterruptByEventToken'
- 'InterruptByNewSignalsDescrToken'
- 'IsolateToken'
- 'KeepActiveToken'
- 'LBRKT'
- 'LESSER'
- 'LSBRKT'
- 'LocalControlToken'
- 'LocalDescriptorToken'
- 'LockStepToken'
- 'LoopbackToken'
- 'MediaToken'
- %% 'MegacopToken'
- 'MethodToken'
- 'MgcIdToken'
- 'ModeToken'
- 'ModemToken'
- 'ModifyToken'
- 'MoveToken'
- 'MtpAddressToken'
- 'MuxToken'
- 'NEQUAL'
- 'NotifyCompletionToken'
- 'NotifyToken'
- 'Nx64kToken' %% v2
- 'ObservedEventsToken'
- 'OffToken'
- 'OnToken'
- 'OnOffToken'
- 'OnewayToken'
- 'OtherReasonToken'
- 'OutOfSvcToken'
- 'PackagesToken'
- 'PendingToken'
- 'PriorityToken'
- 'ProfileToken'
- 'QuotedChars'
- 'RBRKT'
- 'RSBRKT'
- 'ReasonToken'
- 'RecvonlyToken'
- 'RemoteDescriptorToken'
- 'ReplyToken'
- 'RequestIDToken' %% v3
- 'ReservedGroupToken'
- 'ReservedValueToken'
- 'ResponseAckToken'
- 'RestartToken'
- 'SEP'
- 'SafeChars'
- 'SendonlyToken'
- 'SendrecvToken'
- 'ServiceChangeAddressToken'
- 'ServiceChangeToken'
- 'ServiceChangeIncompleteToken'
- 'ServiceStatesToken'
- 'ServicesToken'
- 'SignalListToken'
- 'SignalTypeToken'
- 'SignalsToken'
- 'StatsToken'
- 'StreamToken'
- 'SubtractToken'
- 'SynchISDNToken'
- 'TerminationStateToken'
- 'TestToken'
- 'TimeOutToken'
- 'TimeStampToken'
- 'TopologyToken'
- 'TransToken'
- 'V18Token'
- 'V22Token'
- 'V22bisToken'
- 'V32Token'
- 'V32bisToken'
- 'V34Token'
- 'V76Token'
- 'V90Token'
- 'V91Token'
- 'VersionToken'
- 'AndAUDITSelectToken' %% OTP-7534: v3-fix
- 'ContextListToken' %% OTP-7534: v3-fix
- 'EmergencyValueToken' %% OTP-7534: v3-fix
- 'IntsigDelayToken' %% OTP-7534: v3-fix
- 'IterationToken' %% OTP-7534: v3-fix
- 'MessageSegmentToken' %% OTP-7534: v3-fix
- 'NeverNotifyToken' %% OTP-7534: v3-fix
- 'NotifyImmediateToken' %% OTP-7534: v3-fix
- 'NotifyRegulatedToken' %% OTP-7534: v3-fix
- 'OnewayBothToken' %% OTP-7534: v3-fix
- 'OnewayExternalToken' %% OTP-7534: v3-fix
- 'OrAUDITselectToken' %% OTP-7534: v3-fix
- 'ResetEventsDescriptorToken' %% OTP-7534: v3-fix
- 'SegmentationCompleteToken' %% OTP-7534: v3-fix
- endOfMessage
-
-.
-
-%%----------------------------------------------------------------------
-%% Root symbol
-%%----------------------------------------------------------------------
-
-Rootsymbol megacoMessage.
-
-%%----------------------------------------------------------------------
-%% The grammar
-%%----------------------------------------------------------------------
-
-%% megacoMessage = LWSP [authenticationHeader SEP ] message
-%% authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON
-%% SequenceNum COLON AuthData
-%%
-%% SecurityParmIndex = "0x" 8(HEXDIG)
-%% SequenceNum = "0x" 8(HEXDIG)
-%% AuthData = "0x" 24*64(HEXDIG)
-%% message = MegacopToken SLASH version SEP mId SEP messageBody
-%% version = 1*2(DIGIT) .
-
-megacoMessage -> optSep authenticationHeader message endOfMessage
- : #'MegacoMessage'{authHeader = '$2', mess = '$3'} .
-
-optSep -> 'SEP' : sep .
-optSep -> '$empty' : no_sep .
-
-authenticationHeader -> 'AuthToken' 'EQUAL' safeToken 'COLON'
- safeToken 'COLON' safeToken optSep
- : ensure_auth_header('$3', '$5', '$7') .
-authenticationHeader -> '$empty' : asn1_NOVALUE .
-
-message -> safeToken mId messageBody : ensure_message('$1', '$2', '$3') .
-
-messageBody -> errorDescriptor : {messageError, '$1'} .
-messageBody -> transactionList : {transactions, '$1'} .
-
-transactionList -> transactionItem : ['$1'] .
-transactionList -> transactionItem transactionList : ['$1' | '$2'] .
-
-transactionItem -> transactionRequest : {transactionRequest, '$1'} .
-transactionItem -> transactionReply : {transactionReply, '$1'}.
-transactionItem -> transactionPending : {transactionPending, '$1'} .
-transactionItem -> transactionResponseAck : {transactionResponseAck, '$1'} .
-
-transactionResponseAck -> 'ResponseAckToken'
- 'LBRKT' transactionAck transactionAckList 'RBRKT' : ['$3' | '$4'] .
-
-transactionAckList -> 'COMMA' transactionAck transactionAckList : ['$2' | '$3'] .
-transactionAckList -> '$empty' : [] .
-
-transactionAck -> safeToken : ensure_transactionAck('$1') .
-
-transactionPending -> 'PendingToken' 'EQUAL' transactionID 'LBRKT' 'RBRKT'
- : #'TransactionPending'{transactionId = ensure_transactionID('$3') } .
-
-transactionRequest -> 'TransToken'
- 'LBRKT' actionRequest actionRequestList 'RBRKT'
- : #'TransactionRequest'{transactionId = asn1_NOVALUE,
- actions = ['$3' | '$4']} .
-transactionRequest -> 'TransToken' 'EQUAL'
- 'LBRKT' actionRequest actionRequestList 'RBRKT'
- : #'TransactionRequest'{transactionId = asn1_NOVALUE,
- actions = ['$4' | '$5']} .
-transactionRequest -> 'TransToken' 'EQUAL' transactionID
- 'LBRKT' actionRequest actionRequestList 'RBRKT'
- : #'TransactionRequest'{transactionId = ensure_transactionID('$3'),
- actions = ['$5' | '$6']} .
-
-actionRequestList -> 'COMMA' actionRequest actionRequestList : ['$2' | '$3'] .
-actionRequestList -> '$empty' : [] .
-
-actionRequest -> 'CtxToken' 'EQUAL' contextID
- 'LBRKT' actionRequestBody 'RBRKT'
- : merge_action_request('$3', '$5') .
-
-actionRequestBody -> actionRequestItem actionRequestItems : ['$1' | '$2'] .
-
-actionRequestItems -> 'COMMA' actionRequestItem actionRequestItems
- : ['$2' | '$3'] .
-actionRequestItems -> '$empty' : [] .
-
-actionRequestItem -> contextProperties : {contextProps, '$1'} .
-actionRequestItem -> contextAudit : {contextAudit, '$1'} .
-actionRequestItem -> commandRequest : {commandRequest, '$1'} .
-
-contextProperties -> contextAttrDescriptor :
- merge_context_request(#'ContextRequest'{}, '$1') .
-
-contextAttrDescriptor -> 'ContextAttrToken'
- 'LBRKT' contextAttrDescProp
- contextAttrDescProps 'RBRKT'
- : ['$3' | '$4'] .
-
-contextAttrDescProp -> contextProperty : '$1' .
-
-contextAttrDescProps -> 'COMMA' contextAttrDescProp contextAttrDescProps
- : ['$2' | '$3'] .
-contextAttrDescProps -> '$empty' : [] .
-
-%% at-most-once
-contextProperty -> topologyDescriptor : {topology, '$1'}.
-contextProperty -> priority : {priority, '$1'}.
-contextProperty -> 'EmergencyToken' : {emergency, true}.
-contextProperty -> 'EmergencyOffToken' : {emergency, false}.
-contextProperty -> 'IEPSToken' : {iepsCallind, true} . % BMK BMK
-contextProperty -> propertyParm : {prop, '$1'} .
-
-contextAudit -> 'ContextAuditToken' 'LBRKT' indAudcontextAttrDescriptor 'RBRKT'
- : merge_context_attr_audit_request(
- #'ContextAttrAuditRequest'{}, '$3') .
-
-indAudcontextAttrDescriptor -> 'ContextAttrToken'
- 'LBRKT' contextAuditProperty
- contextAuditProperties 'RBRKT'
- : ['$3' | '$4'] .
-
-contextAuditProperties -> 'COMMA' contextAuditProperty contextAuditProperties
- : ['$2' | '$3'] .
-contextAuditProperties -> '$empty' : [] .
-
-%% at-most-once .
-contextAuditProperty -> 'TopologyToken' : topologyAudit .
-contextAuditProperty -> 'EmergencyToken' : emergencyAudit .
-contextAuditProperty -> 'PriorityToken' : priorityAudit .
-contextAuditProperty -> 'IEPSToken' : iepsCallind .
-contextAuditProperty -> pkgdName : {prop, '$1'} .
-
-commandRequest -> ammRequest : '$1'.
-commandRequest -> subtractRequest : '$1'.
-commandRequest -> auditRequest : '$1'.
-commandRequest -> notifyRequest : '$1'.
-commandRequest -> serviceChangeRequest : '$1'.
-
-transactionReply -> 'ReplyToken' 'EQUAL' transactionID
- 'LBRKT'
- optImmAckRequired transactionReplyBody
- 'RBRKT'
- : #'TransactionReply'{transactionId = '$3',
- immAckRequired = '$5',
- transactionResult = '$6'} .
-
-optImmAckRequired -> 'ImmAckRequiredToken' 'COMMA' : 'NULL' .
-optImmAckRequired -> '$empty' : asn1_NOVALUE .
-
-transactionReplyBody -> errorDescriptor : {transactionError, '$1'} .
-transactionReplyBody -> actionReply actionReplyList : {actionReplies, ['$1' | '$2']} .
-
-actionReplyList -> 'COMMA' actionReply actionReplyList : ['$2' | '$3'] .
-actionReplyList -> '$empty' : [] .
-
-actionReply -> 'CtxToken' 'EQUAL' contextID
- 'LBRKT' actionReplyBody 'RBRKT' :
- setelement(#'ActionReply'.contextId, '$5', '$3') .
-
-actionReplyBody -> errorDescriptor :
- #'ActionReply'{errorDescriptor = '$1'} .
-actionReplyBody -> commandReplys commandReplyList :
- merge_action_reply(['$1' | '$2']) .
-
-%% OTP-5085
-%% This ugly thing is to fool the parser. The errorDescriptor does not
-%% realy belong here. The merge_action_reply will remove it and put it
-%% in it's right place later.
-commandReplyList -> 'COMMA' errorDescriptor :
- [{error, '$2'}] .
-commandReplyList -> 'COMMA' commandReplys commandReplyList :
- ['$2' | '$3'] .
-commandReplyList -> '$empty' : [] .
-
-commandReplys -> serviceChangeReply : {command, '$1'} .
-commandReplys -> auditReply : {command, '$1'} .
-commandReplys -> ammsReply : {command, '$1'} .
-commandReplys -> notifyReply : {command, '$1'} .
-commandReplys -> contextProperties : {context, '$1'} .
-
-%Add Move and Modify have the same request parameter
-ammRequest -> ammToken 'EQUAL' terminationID ammRequestBody :
- Descs = merge_AmmRequest_descriptors('$4', []),
- make_commandRequest('$1',
- #'AmmRequest'{terminationID = ['$3'],
- descriptors = Descs}) .
-
-ammToken -> 'AddToken' : {addReq, '$1'} .
-ammToken -> 'MoveToken' : {moveReq, '$1'} .
-ammToken -> 'ModifyToken' : {modReq, '$1'} .
-
-ammRequestBody -> 'LBRKT' ammParameter ammParameters 'RBRKT' : ['$2' | '$3'] .
-ammRequestBody -> '$empty' : [] .
-
-ammParameters -> 'COMMA' ammParameter ammParameters : ['$2' | '$3'] .
-ammParameters -> '$empty' : [] .
-
-%at-most-once
-ammParameter -> mediaDescriptor : {mediaDescriptor, '$1'}.
-ammParameter -> modemDescriptor : {modemDescriptor, deprecated}.
-ammParameter -> muxDescriptor : {muxDescriptor, '$1'}.
-ammParameter -> eventsDescriptor : {eventsDescriptor, '$1'}.
-ammParameter -> eventBufferDescriptor : {eventBufferDescriptor, '$1'}.
-ammParameter -> signalsDescriptor : {signalsDescriptor, '$1'}.
-ammParameter -> digitMapDescriptor : {digitMapDescriptor, '$1'}.
-ammParameter -> auditDescriptor : {auditDescriptor, '$1'}.
-ammParameter -> statisticsDescriptor : {statisticsDescriptor, '$1'}.
-
-ammsReply -> ammsToken 'EQUAL' terminationID ammsReplyBody
- : {'$1', #'AmmsReply'{terminationID = ['$3'],
- terminationAudit = '$4'}} .
-
-ammsToken -> 'AddToken' : addReply .
-ammsToken -> 'MoveToken' : moveReply .
-ammsToken -> 'ModifyToken' : modReply .
-ammsToken -> 'SubtractToken' : subtractReply .
-
-ammsReplyBody -> 'LBRKT' terminationAudit 'RBRKT' : '$2' .
-ammsReplyBody -> '$empty' : asn1_NOVALUE .
-
-subtractRequest -> 'SubtractToken' 'EQUAL' terminationID
- optAuditDescriptor
- : make_commandRequest({subtractReq, '$1'},
- #'SubtractRequest'{terminationID = ['$3'],
- auditDescriptor = '$4'}) .
-
-
-optAuditDescriptor -> 'LBRKT' auditDescriptor 'RBRKT' : '$2'.
-optAuditDescriptor -> '$empty' : asn1_NOVALUE .
-
-auditRequest -> 'AuditValueToken' 'EQUAL'
- terminationID optAuditDescriptor :
- make_commandRequest({auditValueRequest, '$1'},
- #'AuditRequest'{terminationID = '$3',
- auditDescriptor = '$4'}) .
-auditRequest -> 'AuditCapToken' 'EQUAL'
- terminationID optAuditDescriptor :
- make_commandRequest({auditCapRequest, '$1'},
- #'AuditRequest'{terminationID = '$3',
- auditDescriptor = '$4'}) .
-
-auditReply -> 'AuditValueToken' 'EQUAL' 'CtxToken' contextTerminationAudit
- : {auditValueReply, '$4'} .
-auditReply -> 'AuditCapToken' 'EQUAL' 'CtxToken' contextTerminationAudit
- : {auditCapReply, '$4'} .
-auditReply -> 'AuditValueToken' 'EQUAL' auditOther
- : {auditValueReply, '$3'} .
-auditReply -> 'AuditCapToken' 'EQUAL' auditOther
- : {auditCapReply, '$3'} .
-
-contextTerminationAudit -> terminationIDList : {contextAuditResult, '$1'} .
-contextTerminationAudit -> 'LBRKT' errorDescriptor 'RBRKT' : {contextAuditResult, '$2'} .
-
-auditOther -> terminationID :
- {auditResult,
- #'AuditResult'{terminationID = '$1',
- terminationAuditResult = []}} .
-auditOther -> terminationID 'LBRKT' terminationAudit 'RBRKT' :
- {auditResult,
- #'AuditResult'{terminationID = '$1',
- terminationAuditResult = '$3'}} .
-
-
-terminationAudit -> auditReturnParameter auditReturnParameterList :
- merge_terminationAudit(['$1' |'$2' ]) .
-
-auditReturnParameterList -> 'COMMA' auditReturnParameter auditReturnParameterList : ['$2' | '$3'] .
-auditReturnParameterList -> '$empty' : [] .
-
-auditReturnParameter -> mediaDescriptor : {mediaDescriptor, '$1'} .
-auditReturnParameter -> modemDescriptor.
-auditReturnParameter -> muxDescriptor : {muxDescriptor, '$1'} .
-auditReturnParameter -> eventsDescriptor : {eventsDescriptor, '$1'} .
-auditReturnParameter -> signalsDescriptor : {signalsDescriptor, '$1'} .
-auditReturnParameter -> digitMapDescriptor : {digitMapDescriptor, '$1'} .
-auditReturnParameter -> observedEventsDescriptor : {observedEventsDescriptor, '$1'} .
-auditReturnParameter -> eventBufferDescriptor : {eventBufferDescriptor, '$1'} .
-auditReturnParameter -> statisticsDescriptor : {statisticsDescriptor, '$1'} .
-auditReturnParameter -> packagesDescriptor : {packagesDescriptor, '$1'} .
-auditReturnParameter -> errorDescriptor : {errorDescriptor, '$1'} .
-auditReturnParameter -> auditReturnItem : {auditReturnItem, '$1'} .
-
-auditDescriptor -> 'AuditToken' 'LBRKT' auditDescriptorBody 'RBRKT' :
- merge_auditDescriptor('$3') .
-
-auditDescriptorBody -> auditItem auditItemList : ['$1' | '$2'].
-auditDescriptorBody -> '$empty' : asn1_NOVALUE .
-
-auditItemList -> 'COMMA' auditItem auditItemList : ['$2' | '$3'] .
-auditItemList -> '$empty' : [] .
-
-%% IGv11 - begin
-%%
-auditReturnItem -> 'MuxToken' : muxToken .
-auditReturnItem -> 'ModemToken' : modemToken .
-auditReturnItem -> 'MediaToken' : mediaToken .
-auditReturnItem -> 'DigitMapToken' : digitMapToken .
-auditReturnItem -> 'StatsToken' : statsToken .
-auditReturnItem -> 'ObservedEventsToken' : observedEventsToken .
-auditReturnItem -> 'PackagesToken' : packagesToken .
-
-%% at-most-once, and DigitMapToken and PackagesToken are not allowed
-%% in AuditCapabilities command
-auditItem -> auditReturnItem : '$1' .
-auditItem -> 'SignalsToken' : signalsToken.
-auditItem -> 'EventBufferToken' : eventBufferToken.
-auditItem -> 'EventsToken' : eventsToken .
-auditItem -> indAudterminationAudit : {terminationAudit, '$1'} . % v2
-%%
-%% IGv11 - end
-
-
-%% v2 - start
-%%
-indAudterminationAudit -> indAudauditReturnParameter
- indAudterminationAuditList
- : ['$1' | '$2'] .
-
-indAudterminationAuditList -> 'COMMA' indAudauditReturnParameter
- indAudterminationAuditList
- : ['$2' | '$3'] .
-indAudterminationAuditList -> '$empty' : [] .
-
-indAudauditReturnParameter -> indAudmediaDescriptor
- : {indAudMediaDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudeventsDescriptor
- : {indAudEventsDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudsignalsDescriptor
- : {indAudSignalsDescriptor, '$1'} .
-indAudauditReturnParameter -> indAuddigitMapDescriptor
- : {indAudDigitMapDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudeventBufferDescriptor
- : {indAudEventBufferDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudstatisticsDescriptor
- : {indAudStatisticsDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudpackagesDescriptor
- : {indAudPackagesDescriptor, '$1'} .
-
-
-indAudmediaDescriptor -> 'MediaToken' 'LBRKT'
- indAudmediaParm 'RBRKT'
- : merge_indAudMediaDescriptor('$3') .
-
-%% at-most-once per item
-%% and either streamParm or streamDescriptor but not both
-%% <rambling>
-%% This is solved in another way in text than in binary :(
-%% Instead of having a list of indAudmediaParm we put this
-%% stuff in the indAudterminationAuditList with several
-%% indAudmediaDescriptor's.
-%% </rambling>
-%%
-
-indAudmediaParm -> indAudstreamParm : {streamParm, '$1'} .
-indAudmediaParm -> indAudstreamDescriptor : {streamDescr, '$1'} .
-indAudmediaParm -> indAudterminationStateDescriptor : {termStateDescr, '$1'} .
-
-%% at-most-once
-indAudstreamParm -> indAudlocalControlDescriptor
- : #'IndAudStreamParms'{localControlDescriptor = '$1'} .
-indAudstreamParm -> indAudstatisticsDescriptor
- : #'IndAudStreamParms'{statisticsDescriptor = '$1'} .
-
-indAudstreamDescriptor -> 'StreamToken' 'EQUAL' streamID
- 'LBRKT' indAudstreamParm 'RBRKT'
- : #'IndAudStreamDescriptor'{streamID = '$3',
- streamParms = '$5'} .
-
-
-indAudlocalControlDescriptor -> 'LocalControlToken'
- 'LBRKT' indAudlocalParm indAudlocalParmList 'RBRKT' :
- merge_indAudLocalControlDescriptor(['$3'| '$4']) .
-
-indAudlocalParmList -> 'COMMA' indAudlocalParm indAudlocalParmList : ['$2'| '$3'] .
-indAudlocalParmList -> '$empty' : [] .
-
-%% at-most-once per item
-%%
-indAudlocalParm -> safeToken : ensure_indAudLocalParm('$1') .
-
-indAudterminationStateDescriptor -> 'TerminationStateToken'
- 'LBRKT' indAudterminationStateParm 'RBRKT'
- :
- merge_indAudTerminationStateDescriptor('$3') .
-
-%% at-most-once per item
-%%
-
-indAudterminationStateParm -> safeToken :
- ensure_indAudTerminationStateParm('$1') .
-
-indAudeventBufferDescriptor -> 'EventBufferToken'
- 'LBRKT' indAudeventSpec 'RBRKT' : '$3' .
-
-indAudeventSpec -> pkgdName optIndAudeventSpecParameter
- : merge_indAudEventBufferDescriptor('$1','$2') .
-
-optIndAudeventSpecParameter -> 'LBRKT' indAudeventSpecParameter 'RBRKT'
- : '$2' .
-optIndAudeventSpecParameter -> '$empty' : asn1_NOVALUE .
-
-
-indAudeventSpecParameter -> eventStream : {streamID, '$1'} .
-indAudeventSpecParameter -> eventParameterName : {eventParameterName, '$1'} .
-
-indAudeventsDescriptor -> 'EventsToken' 'EQUAL' requestID
- 'LBRKT' indAudrequestedEvent 'RBRKT'
- : #'IndAudEventsDescriptor'{requestID = '$3',
- pkgdName = '$5'} .
-
-indAudrequestedEvent -> pkgdName : '$1' .
-
-
-indAudsignalsDescriptor -> 'SignalsToken' optIndAudsignalParm : '$2' .
-
-
-optIndAudsignalParm -> 'LBRKT' 'RBRKT' : asn1_NOVALUE .
-optIndAudsignalParm -> 'LBRKT' indAudsignalParm 'RBRKT' : '$2' .
-
-indAudsignalParm -> indAudsignalList : {seqSigList, '$1'} .
-indAudsignalParm -> signalRequest : {signal, ensure_indAudSignal('$1')} .
-
-indAudsignalList -> 'SignalListToken' 'EQUAL' signalListId
- 'LBRKT' signalListParm 'RBRKT' :
- #'IndAudSeqSigList'{id = ensure_uint16('$3'),
- signalList =
- ensure_indAudSignalListParm('$5')} .
-
-
-%% The DigitMapDescriptorToken is specially treated by the scanner
-indAuddigitMapDescriptor -> 'DigitMapDescriptorToken' :
- ensure_IADMD('$1') .
-
-indAudstatisticsDescriptor -> 'StatsToken' 'LBRKT' pkgdName 'RBRKT' :
- #'IndAudStatisticsDescriptor'{statName = '$3'} .
-
-indAudpackagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem 'RBRKT'
- : merge_indAudPackagesDescriptor('$3') .
-
-eventStream -> 'StreamToken' 'EQUAL' streamID : '$3' .
-
-
-%%
-%% v2 - end
-
-notifyRequest -> 'NotifyToken' 'EQUAL' terminationID
- 'LBRKT' notifyRequestBody 'RBRKT'
- : make_commandRequest({notifyReq, '$1'},
- setelement(#'NotifyRequest'.terminationID, '$5', ['$3'])) .
-
-notifyRequestBody -> observedEventsDescriptor
- : #'NotifyRequest'{observedEventsDescriptor = '$1'}.
-notifyRequestBody -> errorDescriptor
- : #'NotifyRequest'{errorDescriptor = '$1'}.
-
-notifyReply -> 'NotifyToken' 'EQUAL' terminationID notifyReplyBody
- : {notifyReply,
- #'NotifyReply'{terminationID = ['$3'],
- errorDescriptor = '$4'}} .
-
-notifyReplyBody -> 'LBRKT' errorDescriptor 'RBRKT' : '$2'.
-notifyReplyBody -> '$empty' : asn1_NOVALUE .
-
-serviceChangeRequest -> 'ServiceChangeToken' 'EQUAL' terminationID
- 'LBRKT' serviceChangeDescriptor 'RBRKT'
- : make_commandRequest({serviceChangeReq, '$1'},
- #'ServiceChangeRequest'{terminationID = ['$3'],
- serviceChangeParms = '$5'}) .
-
-serviceChangeReply -> 'ServiceChangeToken' 'EQUAL' terminationID serviceChangeReplyBody
- : {serviceChangeReply,
- #'ServiceChangeReply'{terminationID = ['$3'],
- serviceChangeResult = '$4'}} .
-
-serviceChangeReplyBody -> 'LBRKT' errorDescriptor 'RBRKT'
- : {errorDescriptor, '$2'} .
-serviceChangeReplyBody -> 'LBRKT' serviceChangeReplyDescriptor 'RBRKT'
- : {serviceChangeResParms, '$2'} .
-serviceChangeReplyBody -> '$empty' : {serviceChangeResParms, #'ServiceChangeResParm'{}}.
-
-errorDescriptor -> 'ErrorToken' 'EQUAL' errorCode 'LBRKT' errorText 'RBRKT'
- : #'ErrorDescriptor'{errorCode = '$3',
- errorText = '$5'} .
-
-errorCode -> safeToken : ensure_uint('$1', 0, 999) .
-
-errorText -> 'QuotedChars' : value_of('$1') .
-errorText -> '$empty' : asn1_NOVALUE .
-
-transactionID -> safeToken : ensure_uint32('$1') .
-
-mId -> domainName : '$1' .
-mId -> domainAddress : '$1' .
-mId -> optSep mtpAddress optSep : '$2' .
-mId -> optSep deviceName optSep : '$2' .
-
-domainName -> 'LESSER' safeToken 'GREATER' 'COLON' portNumber optSep
- : ensure_domainName('$2', '$5') .
-domainName -> 'LESSER' safeToken 'GREATER'
- : ensure_domainName('$2', asn1_NOVALUE) .
-
-deviceName -> pathName : {deviceName, '$1'} .
-
-%% '-' is used for NULL context
-contextID -> safeToken : ensure_contextID('$1') .
-
-domainAddress -> 'LSBRKT' daddr 'RSBRKT' 'COLON' portNumber optSep
- : ensure_domainAddress('$2', '$5') .
-domainAddress -> 'LSBRKT' daddr 'RSBRKT'
- : ensure_domainAddress('$2', asn1_NOVALUE) .
-
-daddr -> '$empty' : [] .
-daddr -> 'COLON' daddr : [colon| '$2'] .
-daddr -> safeToken daddr : ['$1'| '$2'] .
-
-
-portNumber -> safeToken : ensure_uint16('$1') .
-
-mtpAddress -> 'MtpAddressToken' : ensure_mtpAddress('$1') .
-
-%% terminationIDList -> LBRKT terminationID *(COMMA terminationID) RBRKT .
-
-terminationIDList -> 'LBRKT' terminationID terminationIDListRepeat 'RBRKT'
- : ['$2' | '$3'] .
-
-terminationIDListRepeat -> 'COMMA' terminationID terminationIDListRepeat
- : ['$2'| '$3'] .
-terminationIDListRepeat -> '$empty' : [] .
-
-
-pathName -> safeToken : ensure_pathName('$1') .
-
-terminationID -> safeToken : ensure_terminationID('$1') .
-
-mediaDescriptor -> 'MediaToken' 'LBRKT' mediaParm mediaParmList 'RBRKT'
- : merge_mediaDescriptor(['$3' | '$4']) .
-
-mediaParmList -> 'COMMA' mediaParm mediaParmList : ['$2' | '$3'] .
-mediaParmList -> '$empty' : [] .
-
-
-%% at-most-once per item
-%% using either streamParms or streamDescriptors but not both
-mediaParm -> streamParm
- : {streamParm, '$1'} .
-mediaParm -> streamDescriptor
- : {streamDescriptor, '$1'} .
-mediaParm -> terminationStateDescriptor
- : {termState, '$1'} .
-
-%% at-most-onc .
-%% Specially treated by the scanner.
-streamParm -> 'LocalDescriptorToken' :
- PGs = ensure_prop_groups('$1'),
- {local, #'LocalRemoteDescriptor'{propGrps = PGs} } .
-streamParm -> 'RemoteDescriptorToken' :
- PGs = ensure_prop_groups('$1'),
- {remote, #'LocalRemoteDescriptor'{propGrps = PGs}} .
-streamParm -> localControlDescriptor : {control, '$1'} .
-streamParm -> statisticsDescriptor : {statistics, '$1'} .
-
-streamDescriptor -> 'StreamToken' 'EQUAL' streamID
- 'LBRKT' streamParm streamParmList 'RBRKT'
- : #'StreamDescriptor'{streamID = '$3',
- streamParms = merge_streamParms(['$5' | '$6'])} .
-
-streamParmList -> 'COMMA' streamParm streamParmList : ['$2' | '$3'] .
-streamParmList -> '$empty' : [] .
-
-localControlDescriptor -> 'LocalControlToken' 'LBRKT' localParm localParmList 'RBRKT'
- : ['$3' | '$4'] .
-
-localParmList -> 'COMMA' localParm localParmList : ['$2' | '$3'] .
-localParmList -> '$empty': [] .
-
-terminationStateDescriptor -> 'TerminationStateToken'
- 'LBRKT' terminationStateParm
- terminationStateParms 'RBRKT'
- : merge_terminationStateDescriptor(['$3' | '$4']) .
-
-terminationStateParms -> 'COMMA' terminationStateParm terminationStateParms : ['$2' | '$3'] .
-terminationStateParms -> '$empty' : [] .
-
-%% at-most-once per item except for propertyParm
-localParm -> 'ReservedGroupToken' 'EQUAL' onOrOff : {group, '$3'} .
-localParm -> 'ReservedValueToken' 'EQUAL' onOrOff : {value, '$3'} .
-localParm -> 'ModeToken' 'EQUAL' streamModes : {mode, '$3'} .
-localParm -> propertyParm : {prop, '$1'} .
-
-onOrOff -> 'OnToken' : true .
-onOrOff -> 'OffToken' : false .
-
-%% at-most-once
-streamModes -> 'SendonlyToken' : sendOnly .
-streamModes -> 'RecvonlyToken' : recvOnly .
-streamModes -> 'SendrecvToken' : sendRecv .
-streamModes -> 'InactiveToken' : inactive .
-streamModes -> 'LoopbackToken' : loopBack .
-
-propertyParm -> pkgdName parmValue :
- setelement(#'PropertyParm'.name, '$2', '$1') .
-
-parmValue -> 'EQUAL' alternativeValue :
- '$2' .
-
-parmValue -> 'NEQUAL' value :
- #'PropertyParm'{value = ['$2'],
- extraInfo = {relation, unequalTo}} .
-parmValue -> 'LESSER' value :
- #'PropertyParm'{value = ['$2'],
- extraInfo = {relation, smallerThan}} .
-parmValue -> 'GREATER' value :
- #'PropertyParm'{value = ['$2'],
- extraInfo = {relation, greaterThan}} .
-
-%% OTP-4013
-%% alternativeValue = ( VALUE /
-%% LSBRKT VALUE *(COMMA VALUE) RSBRKT /
-%% LSBRKT VALUE COLON VALUE RSBRKT ) /
-%% LBRKT VALUE *(COMMA VALUE) RBRKT
-alternativeValue -> 'LBRKT' value valueList 'RBRKT'
- : #'PropertyParm'{value = ['$2' | '$3'],
- extraInfo = {sublist, false}}. % OR
-
-alternativeValue -> 'LSBRKT' value 'COLON' value 'RSBRKT'
- : #'PropertyParm'{value = ['$2', '$4'],
- extraInfo = {range, true}}.
-
-alternativeValue -> 'LSBRKT' value valueList 'RSBRKT'
- : #'PropertyParm'{value = ['$2' | '$3'],
- extraInfo = {sublist, true}}. % AND
-
-alternativeValue -> value :
- #'PropertyParm'{value = ['$1']} .
-
-valueList -> 'COMMA' value valueList : ['$2' | '$3'] .
-valueList -> '$empty' : [] .
-
-
-eventBufferDescriptor -> 'EventBufferToken' : [] .
-eventBufferDescriptor -> 'EventBufferToken' 'LBRKT' eventSpec eventSpecList 'RBRKT'
- : ['$3' | '$4'] .
-
-eventSpecList -> 'COMMA' eventSpec eventSpecList : ['$2' | '$3'] .
-eventSpecList -> '$empty' : [] .
-
-eventSpec -> observedEvent : merge_eventSpec('$1') .
-
-%% at-most-once per item except for propertyParm
-terminationStateParm -> serviceStates : {serviceState, '$1'} .
-terminationStateParm -> eventBufferControl : {eventBufferControl, '$1'} .
-terminationStateParm -> propertyParm : {propertyParm, '$1'} .
-
-serviceStates -> 'ServiceStatesToken' 'EQUAL' serviceState : '$3' .
-
-serviceState -> 'TestToken' : test .
-serviceState -> 'OutOfSvcToken' : outOfSvc .
-serviceState -> 'InSvcToken' : inSvc .
-
-eventBufferControl -> 'BufferToken' 'EQUAL' eventBufferControlState : '$3' .
-
-eventBufferControlState -> 'OffToken' : off .
-eventBufferControlState -> 'LockStepToken' : lockStep .
-
-muxDescriptor -> 'MuxToken' 'EQUAL' muxType terminationIDList :
- #'MuxDescriptor'{muxType = '$3',
- termList = '$4'} .
-
-muxType -> safeToken : ensure_muxType('$1') .
-
-streamID -> safeToken : ensure_streamID('$1') .
-
-pkgdName -> safeToken : ensure_pkgdName('$1') .
-
-eventsDescriptor -> 'EventsToken' :
- #'EventsDescriptor'{requestID = asn1_NOVALUE,
- eventList = []} .
-eventsDescriptor -> 'EventsToken' 'EQUAL' requestID
- 'LBRKT' requestedEvent requestedEvents 'RBRKT' :
- #'EventsDescriptor'{requestID = '$3',
- eventList = ['$5' | '$6']} .
-
-requestedEvents -> 'COMMA' requestedEvent requestedEvents : ['$2' | '$3'] .
-requestedEvents -> '$empty' : [] .
-
-requestedEvent -> pkgdName requestedEventBody :
- setelement(#'RequestedEvent'.pkgdName, '$2', '$1') .
-
-requestedEventBody -> 'LBRKT' eventParameter eventParameters 'RBRKT' :
- merge_eventParameters(['$2' | '$3']) .
-requestedEventBody -> '$empty' : #'RequestedEvent'{evParList = []} .
-
-eventParameters -> 'COMMA' eventParameter eventParameters :
- ['$2' | '$3'] .
-eventParameters -> '$empty' : [] .
-
-%% at-most-once each of embedOrKeepActive , eventDM or eventStream
-eventParameter -> 'KeepActiveToken' : keepActive .
-eventParameter -> embedWithSig : '$1'.
-eventParameter -> embedNoSig : '$1'.
-eventParameter -> eventDM : '$1'.
-eventParameter -> eventStreamOrOther : '$1'.
-
-embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor
- 'COMMA' embedFirst 'RBRKT'
- : {embed, '$3', '$5'} .
-embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
- : {embed, '$3', asn1_NOVALUE} .
-
-embedNoSig -> 'EmbedToken' 'LBRKT' embedFirst 'RBRKT'
- : {embed, asn1_NOVALUE, '$3'} .
-
-embedFirst -> 'EventsToken' :
- #'SecondEventsDescriptor'{requestID = asn1_NOVALUE,
- eventList = []} .
-embedFirst -> 'EventsToken' 'EQUAL' requestID
- 'LBRKT' secondRequestedEvent secondRequestedEvents 'RBRKT' :
- #'SecondEventsDescriptor'{requestID = '$3',
- eventList = ['$5' | '$6']} .
-
-secondRequestedEvents -> 'COMMA' secondRequestedEvent secondRequestedEvents : ['$2' | '$3'] .
-secondRequestedEvents -> '$empty' : [] .
-
-%% at-most-once of each
-secondRequestedEvent -> pkgdName secondRequestedEventBody
- : setelement(#'SecondRequestedEvent'.pkgdName, '$2', '$1') .
-
-secondRequestedEventBody -> 'LBRKT' secondEventParameter secondEventParameters 'RBRKT'
- : merge_secondEventParameters(['$2' | '$3']) .
-secondRequestedEventBody -> '$empty' : #'SecondRequestedEvent'{evParList = []} .
-
-secondEventParameters -> 'COMMA' secondEventParameter secondEventParameters : ['$2' | '$3'] .
-secondEventParameters -> '$empty' : [] .
-
-%% at-most-once each of embedOrKeepActive , eventDM or eventStream
-secondEventParameter -> 'KeepActiveToken' : keepActive .
-secondEventParameter -> embedSig : '$1' .
-secondEventParameter -> eventDM : '$1' .
-secondEventParameter -> eventStreamOrOther : '$1' .
-
-embedSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
- : {second_embed, '$3'} .
-
-eventStreamOrOther -> eventParameterName parmValue :
- select_stream_or_other('$1', '$2') .
-
-eventParameterName -> safeToken : ensure_NAME('$1') .
-
-%% The DigitMapDescriptorToken is specially treated by the scanner
-eventDM -> 'DigitMapDescriptorToken' :
- ensure_eventDM('$1') .
-
-%% H248S-IG (IGv11)
-signalsDescriptor -> 'SignalsToken' 'LBRKT' signalParm signalParms 'RBRKT' :
- ['$3' | '$4'] .
-signalsDescriptor -> 'SignalsToken' : [] .
-
-signalParms -> 'COMMA' signalParm signalParms : [ '$2' | '$3'] .
-signalParms -> '$empty' : [] .
-
-signalParm -> signalList : {seqSigList, '$1'} .
-signalParm -> signalRequest : {signal, '$1'} .
-
-signalRequest -> signalName 'LBRKT' sigParameter sigParameters 'RBRKT'
- : merge_signalRequest('$1', ['$3' | '$4']).
-signalRequest -> signalName : merge_signalRequest('$1', []).
-
-sigParameters -> 'COMMA' sigParameter sigParameters : ['$2' | '$3'] .
-sigParameters -> '$empty' : [] .
-
-%% sigParameter = sigStream / sigSignalType / sigDuration / sigOther /
-%% notifyCompletion / KeepActiveToken /
-%% direction / sigRequestID
-%% sigStream = StreamToken EQUAL StreamID
-%% sigOther = sigParameterName parmValue
-%% sigParameterName = NAME
-%% sigSignalType = SignalTypeToken EQUAL signalType
-%% signalType = (OnOffToken / TimeOutToken / BriefToken)
-%% sigDuration = DurationToken EQUAL UINT16
-%% notifyCompletion = NotifyCompletionToken EQUAL (LBRKT
-%% notificationReason *(COMMA notificationReason)
-%% RBRKT)
-%%
-%% notificationReason = ( TimeOutToken / InterruptByEventToken /
-%% InterruptByNewSignalsDescrToken /
-%% OtherReasonToken )
-%% sigDirection = DirectionToken EQUAL direction
-%% sigRequestID = RequestIDToken EQUAL RequestID
-
-sigParameter -> 'StreamToken' 'EQUAL' streamID :
- {stream, '$3'}.
-sigParameter -> 'SignalTypeToken' 'EQUAL' signalType :
- {signal_type, '$3'} .
-sigParameter -> 'DurationToken' 'EQUAL' safeToken :
- {duration, ensure_uint16('$3')} .
-sigParameter -> 'NotifyCompletionToken' 'EQUAL'
- 'LBRKT' notificationReason notificationReasons 'RBRKT' :
- {notify_completion, ['$4' | '$5']} .
-sigParameter -> 'KeepActiveToken' : keepActive .
-sigParameter -> 'DirectionToken' 'EQUAL' direction : {direction, '$3'} .
-sigParameter -> 'RequestIDToken' 'EQUAL' requestID : {requestId, '$3'} .
-sigParameter -> safeToken parmValue :
- {other, ensure_NAME('$1'), '$2'}.
-
-signalType -> 'OnOffToken' : onOff.
-signalType -> 'TimeOutToken' : timeOut.
-signalType -> 'BriefToken' : brief.
-
-direction -> 'ExternalToken' : external .
-direction -> 'InternalToken' : internal .
-direction -> 'BothToken' : both .
-
-notificationReasons -> 'COMMA' notificationReason notificationReasons : ['$2' | '$3'] .
-notificationReasons -> '$empty' : [] .
-
-notificationReason -> 'TimeOutToken' : onTimeOut .
-notificationReason -> 'InterruptByEventToken' : onInterruptByEvent .
-notificationReason -> 'InterruptByNewSignalsDescrToken' : onInterruptByNewSignalDescr .
-notificationReason -> 'OtherReasonToken' : otherReason .
-
-signalList -> 'SignalListToken' 'EQUAL' signalListId
- 'LBRKT' signalListParm signalListParms 'RBRKT'
- : #'SeqSigList'{id = ensure_uint16('$3'),
- signalList = ['$5' | '$6']} .
-
-signalListParms -> 'COMMA' signalListParm signalListParms :
- ['$2' | '$3'] .
-signalListParms -> '$empty' : [] .
-
-signalListId -> safeToken : ensure_uint16('$1') .
-
-%% exactly once signalType,
-%% at most once duration and every signal parameter
-signalListParm -> signalRequest : '$1'.
-
-signalName -> pkgdName : '$1'.
-
-observedEventsDescriptor -> 'ObservedEventsToken' 'EQUAL' requestID
- 'LBRKT' observedEvent observedEvents 'RBRKT'
- : #'ObservedEventsDescriptor'{requestId = '$3',
- observedEventLst = ['$5' | '$6']} .
-
-observedEvents -> 'COMMA' observedEvent observedEvents : ['$2' | '$3'] .
-observedEvents -> '$empty' : [] .
-
-%%time per event, because it might be buffered
-
-observedEvent -> timeStamp optSep 'COLON' optSep pkgdName observedEventBody :
- merge_observed_event('$6', '$5', '$1') .
-observedEvent -> optSep pkgdName observedEventBody :
- merge_observed_event('$3', '$2', asn1_NOVALUE) .
-
-observedEventBody -> 'LBRKT' observedEventParameter
- observedEventParameters 'RBRKT'
- : ['$2' | '$3'] .
-observedEventBody -> '$empty' : [] .
-
-observedEventParameters -> 'COMMA' observedEventParameter observedEventParameters : ['$2' | '$3'] .
-observedEventParameters -> '$empty' : [] .
-
-%%at-most-once eventStream, every eventParameterName at most once
-observedEventParameter -> eventStreamOrOther : '$1' .
-
-requestID -> safeToken : ensure_requestID('$1') .
-
-%% Deprecated as of Corr 1
-modemDescriptor -> 'ModemToken' 'EQUAL' modemType optPropertyParms .
-modemDescriptor -> 'ModemToken' 'LSBRKT' modemType modemTypeList 'RSBRKT'
- optPropertyParms.
-modemTypeList -> 'COMMA' modemType modemTypeList.
-modemTypeList -> '$empty'.
-modemType -> safeToken.
-
-optPropertyParms -> 'LBRKT' propertyParm propertyParms 'RBRKT' :
- ['$2' | '$3'] .
-optPropertyParms -> '$empty' : [] .
-
-propertyParms -> 'COMMA' propertyParm propertyParms : ['$2' | '$3'] .
-propertyParms -> '$empty' : [] .
-
-% parmName -> safeToken : ensure_NAME('$1') .
-
-%% The DigitMapDescriptorToken is specially treated by the scanner
-digitMapDescriptor -> 'DigitMapDescriptorToken' :
- ensure_DMD('$1') .
-
-%% each parameter at-most-once, except auditItem
-%% at most one of either serviceChangeAddress or serviceChangeMgcId but
-%% not both. serviceChangeMethod and serviceChangeReason are REQUIRED
-serviceChangeDescriptor -> 'ServicesToken'
- 'LBRKT' serviceChangeParm
- serviceChangeParms 'RBRKT' :
- merge_ServiceChangeParm(['$3' | '$4']) .
-
-serviceChangeParms -> 'COMMA' serviceChangeParm serviceChangeParms :
- ['$2' | '$3'] .
-serviceChangeParms -> '$empty' : [] .
-
-serviceChangeParm -> serviceChangeMethod : {method, '$1'} .
-serviceChangeParm -> serviceChangeReason : {reason, '$1'} .
-serviceChangeParm -> serviceChangeDelay : {delay, '$1'} .
-serviceChangeParm -> serviceChangeAddress : {address, '$1'} .
-serviceChangeParm -> serviceChangeProfile : {profile, '$1'} .
-serviceChangeParm -> extension : {extension, '$1'} .
-serviceChangeParm -> timeStamp : {time_stamp, '$1'} .
-serviceChangeParm -> serviceChangeMgcId : {mgc_id, '$1'} .
-serviceChangeParm -> serviceChangeVersion : {version, '$1'} .
-serviceChangeParm -> 'ServiceChangeIncompleteToken' : incomplete . % v3
-serviceChangeParm -> auditItem : {audit_item, '$1'} . % v2
-
-serviceChangeMethod -> 'MethodToken' 'EQUAL' safeToken :
- ensure_serviceChangeMethod('$3') .
-
-serviceChangeReason -> 'ReasonToken' 'EQUAL' value : ['$3'] .
-
-serviceChangeDelay -> 'DelayToken' 'EQUAL' safeToken : ensure_uint32('$3').
-
-serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' mId : '$3' .
-serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' portNumber :
- {portNumber, '$3'} .
-
-serviceChangeMgcId -> 'MgcIdToken' 'EQUAL' mId : '$3' .
-
-serviceChangeProfile -> 'ProfileToken' 'EQUAL' safeToken : ensure_profile('$3').
-
-serviceChangeVersion -> 'VersionToken' 'EQUAL' safeToken : ensure_version('$3') .
-
-extension -> extensionParameter parmValue
- : setelement(#'PropertyParm'.name, '$2', '$1') .
-
-%% at most once. Version is REQUIRED on first ServiceChange response
-%% at most of either serviceChangeAddress or serviceChangeMgcId but not both
-serviceChangeReplyDescriptor -> 'ServicesToken'
- 'LBRKT' servChgReplyParm
- servChgReplyParms 'RBRKT' :
- merge_ServiceChangeResParm(['$3' | '$4']) .
-
-servChgReplyParms -> 'COMMA' servChgReplyParm servChgReplyParms :
- ['$2' | '$3'] .
-servChgReplyParms -> '$empty' : [] .
-
-servChgReplyParm -> serviceChangeAddress : {address, '$1'} .
-servChgReplyParm -> serviceChangeMgcId : {mgc_id, '$1'} .
-servChgReplyParm -> serviceChangeProfile : {profile, '$1'} .
-servChgReplyParm -> serviceChangeVersion : {version, '$1'} .
-servChgReplyParm -> timeStamp : {time_stamp,'$1'} .
-
-packagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem
- packagesItems 'RBRKT'
- : ['$3' | '$4'] .
-
-packagesItems -> 'COMMA' packagesItem packagesItems : ['$2' | '$3'] .
-packagesItems -> '$empty' : [] .
-
-packagesItem -> safeToken : ensure_packagesItem('$1') .
-
-timeStamp -> TimeStampToken : ensure_timeStamp('$1') .
-
-statisticsDescriptor -> 'StatsToken'
- 'LBRKT' statisticsParameter
- statisticsParameters 'RBRKT'
- : ['$3' | '$4'] .
-
-statisticsParameters -> 'COMMA' statisticsParameter statisticsParameters : ['$2' | '$3'] .
-statisticsParameters -> '$empty' : [] .
-
-%%at-most-once per item
-statisticsParameter -> pkgdName
- : #'StatisticsParameter'{statName = '$1',
- statValue = asn1_NOVALUE} .
-statisticsParameter -> pkgdName 'EQUAL' value
- : #'StatisticsParameter'{statName = '$1',
- statValue = ['$3']} .
-
-topologyDescriptor -> 'TopologyToken' 'LBRKT' topologyTriple
- topologyTripleList 'RBRKT' : ['$3' | '$4'] .
-
-terminationA -> terminationID : '$1' .
-
-terminationB -> terminationID : '$1' .
-
-topologyTriple -> terminationA 'COMMA'
- terminationB 'COMMA'
- topologyDirection :
- #'TopologyRequest'{terminationFrom = '$1',
- terminationTo = '$3',
- topologyDirection = '$5'} .
-
-topologyTripleList -> '$empty' : [] .
-topologyTripleList -> 'COMMA' topologyTriple topologyTripleList :
- ['$2' | '$3'] .
-
-topologyDirection -> 'BothwayToken' : bothway .
-topologyDirection -> 'IsolateToken' : isolate .
-topologyDirection -> 'OnewayToken' : oneway .
-
-priority -> 'PriorityToken' 'EQUAL' safeToken : ensure_uint16('$3') .
-
-extensionParameter -> safeToken : ensure_extensionParameter('$1') .
-
-value -> 'QuotedChars' : ensure_value('$1') .
-value -> safeToken : ensure_value('$1').
-
-safeToken -> safeToken2 : make_safe_token('$1') .
-
-safeToken2 -> 'SafeChars' : '$1' .
-%% BMK BMK safeToken2 -> 'AddToken' : '$1' .
-safeToken2 -> 'AuditToken' : '$1' .
-safeToken2 -> 'AuditCapToken' : '$1' .
-safeToken2 -> 'AuditValueToken' : '$1' .
-safeToken2 -> 'AuthToken' : '$1' .
-safeToken2 -> 'BothToken' : '$1' . % v3
-safeToken2 -> 'BothwayToken' : '$1' .
-safeToken2 -> 'BriefToken' : '$1' .
-safeToken2 -> 'BufferToken' : '$1' .
-safeToken2 -> 'CtxToken' : '$1' .
-%% v3-safeToken2 -> 'ContextAttrToken' : '$1' . % v3
-safeToken2 -> 'ContextAuditToken' : '$1' .
-%% v2-safeToken2 -> 'DigitMapToken' : '$1' .
-%% safeToken2 -> 'DigitMapDescriptorToken' : '$1' .
-%% v3-
-safeToken2 -> 'DirectionToken' : '$1' . % v3
-safeToken2 -> 'DiscardToken' : '$1' .
-safeToken2 -> 'DisconnectedToken' : '$1' .
-safeToken2 -> 'DelayToken' : '$1' .
-safeToken2 -> 'DurationToken' : '$1' .
-safeToken2 -> 'EmbedToken' : '$1' .
-%% BMK BMK safeToken2 -> 'EmergencyToken' : '$1' .
-%% BMK BMK safeToken2 -> 'EmergencyOffToken' : '$1' .
-safeToken2 -> 'ErrorToken' : '$1' .
-%% v2-safeToken2 -> 'EventBufferToken' : '$1' .
-%% v2-safeToken2 -> 'EventsToken' : '$1' .
-%% v3-safeToken2 -> 'ExternalToken' : '$1' . % v3
-safeToken2 -> 'FailoverToken' : '$1' .
-safeToken2 -> 'ForcedToken' : '$1' .
-safeToken2 -> 'GracefulToken' : '$1' .
-safeToken2 -> 'H221Token' : '$1' .
-safeToken2 -> 'H223Token' : '$1' .
-safeToken2 -> 'H226Token' : '$1' .
-safeToken2 -> 'HandOffToken' : '$1' .
-%% v3-safeToken2 -> 'IEPSToken' : '$1' . % v3
-safeToken2 -> 'ImmAckRequiredToken' : '$1' .
-safeToken2 -> 'InactiveToken' : '$1' .
-%% v3-safeToken2 -> 'InternalToken' : '$1' . % v3
-safeToken2 -> 'InterruptByEventToken' : '$1' .
-safeToken2 -> 'InterruptByNewSignalsDescrToken' : '$1' .
-safeToken2 -> 'IsolateToken' : '$1' .
-safeToken2 -> 'InSvcToken' : '$1' .
-safeToken2 -> 'KeepActiveToken' : '$1' .
-%% safeToken2 -> 'LocalToken' : '$1' .
-%% safeToken2 -> 'LocalDescriptorToken' : '$1' .
-safeToken2 -> 'LocalControlToken' : '$1' .
-safeToken2 -> 'LoopbackToken' : '$1' .
-safeToken2 -> 'LockStepToken' : '$1' .
-%% v2-safeToken2 -> 'MediaToken' : '$1' .
-%% safeToken2 -> 'MegacopToken' : '$1' .
-safeToken2 -> 'MethodToken' : '$1' .
-safeToken2 -> 'MgcIdToken' : '$1' .
-safeToken2 -> 'ModeToken' : '$1' .
-%% BMK BMK safeToken2 -> 'ModifyToken' : '$1' .
-%% v2-safeToken2 -> 'ModemToken' : '$1' .
-%% BMK BMK safeToken2 -> 'MoveToken' : '$1' .
-%% safeToken2 -> 'MtpToken' : '$1' .
-%% safeToken2 -> 'MtpAddressToken' : '$1' .
-%% v2-safeToken2 -> 'MuxToken' : '$1' .
-safeToken2 -> 'NotifyToken' : '$1' .
-safeToken2 -> 'NotifyCompletionToken' : '$1' .
-safeToken2 -> 'Nx64kToken' : '$1' .
-%% v2-safeToken2 -> 'ObservedEventsToken' : '$1' .
-safeToken2 -> 'OnewayToken' : '$1' .
-safeToken2 -> 'OffToken' : '$1' .
-safeToken2 -> 'OnToken' : '$1' .
-safeToken2 -> 'OnOffToken' : '$1' .
-safeToken2 -> 'OutOfSvcToken' : '$1' .
-safeToken2 -> 'OtherReasonToken' : '$1' .
-%% v2-safeToken2 -> 'PackagesToken' : '$1' .
-safeToken2 -> 'PendingToken' : '$1' .
-%% BMK BMK safeToken2 -> 'PriorityToken' : '$1' .
-safeToken2 -> 'ProfileToken' : '$1' .
-safeToken2 -> 'ReasonToken' : '$1' .
-safeToken2 -> 'RecvonlyToken' : '$1' .
-safeToken2 -> 'ReplyToken' : '$1' .
-%% v3-
-safeToken2 -> 'RequestIDToken' : '$1' . % v3
-safeToken2 -> 'ResponseAckToken' : '$1' .
-safeToken2 -> 'RestartToken' : '$1' .
-%% safeToken2 -> 'RemoteToken' : '$1' .
-%% safeToken2 -> 'RemoteDescriptorToken' : '$1' .
-safeToken2 -> 'ReservedGroupToken' : '$1' .
-safeToken2 -> 'ReservedValueToken' : '$1' .
-safeToken2 -> 'SendonlyToken' : '$1' .
-safeToken2 -> 'SendrecvToken' : '$1' .
-safeToken2 -> 'ServicesToken' : '$1' .
-safeToken2 -> 'ServiceStatesToken' : '$1' .
-safeToken2 -> 'ServiceChangeToken' : '$1' .
-%% v3-safeToken2 -> 'ServiceChangeIncompleteToken' : '$1' . % v3
-safeToken2 -> 'ServiceChangeAddressToken' : '$1' .
-safeToken2 -> 'SignalListToken' : '$1' .
-%% v2-safeToken2 -> 'SignalsToken' : '$1' .
-safeToken2 -> 'SignalTypeToken' : '$1' .
-%% v2-safeToken2 -> 'StatsToken' : '$1' .
-safeToken2 -> 'StreamToken' : '$1' .
-%% BMK BMK safeToken2 -> 'SubtractToken' : '$1' .
-safeToken2 -> 'SynchISDNToken' : '$1' .
-safeToken2 -> 'TerminationStateToken' : '$1' .
-safeToken2 -> 'TestToken' : '$1' .
-safeToken2 -> 'TimeOutToken' : '$1' .
-%% BMK BMK safeToken2 -> 'TopologyToken' : '$1' .
-safeToken2 -> 'TransToken' : '$1' .
-safeToken2 -> 'V18Token' : '$1' .
-safeToken2 -> 'V22Token' : '$1' .
-safeToken2 -> 'V22bisToken' : '$1' .
-safeToken2 -> 'V32Token' : '$1' .
-safeToken2 -> 'V32bisToken' : '$1' .
-safeToken2 -> 'V34Token' : '$1' .
-safeToken2 -> 'V76Token' : '$1' .
-safeToken2 -> 'V90Token' : '$1' .
-safeToken2 -> 'V91Token' : '$1' .
-safeToken2 -> 'VersionToken' : '$1' .
-%% <OTP-7534>
-safeToken2 -> 'AndAUDITSelectToken' : '$1' . % v3
-safeToken2 -> 'ContextListToken' : '$1' . % v3
-safeToken2 -> 'EmergencyValueToken' : '$1' . % v3
-safeToken2 -> 'IntsigDelayToken' : '$1' . % v3
-safeToken2 -> 'IterationToken' : '$1' . % v3
-safeToken2 -> 'MessageSegmentToken' : '$1' . % v3
-safeToken2 -> 'NeverNotifyToken' : '$1' . % v3
-safeToken2 -> 'NotifyImmediateToken' : '$1' . % v3
-safeToken2 -> 'NotifyRegulatedToken' : '$1' . % v3
-safeToken2 -> 'OnewayBothToken' : '$1' . % v3
-safeToken2 -> 'OnewayExternalToken' : '$1' . % v3
-safeToken2 -> 'OrAUDITselectToken' : '$1' . % v3
-safeToken2 -> 'ResetEventsDescriptorToken' : '$1' . % v3
-safeToken2 -> 'SegmentationCompleteToken' : '$1' . % v3
-%% </OTP-7534>
-
-
-Erlang code.
-
-%% The following directive is needed for (significantly) faster compilation
-%% of the generated .erl file by the HiPE compiler. Please do not remove.
--compile([{hipe,[{regalloc,linear_scan}]}]).
-
--include("megaco_text_parser_prev3a.hrl").
-
-
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3b.hrl b/lib/megaco/src/text/megaco_text_parser_prev3b.hrl
deleted file mode 100644
index c38aaa1140..0000000000
--- a/lib/megaco/src/text/megaco_text_parser_prev3b.hrl
+++ /dev/null
@@ -1,1725 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose : Define semantic text parser actions
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
-
--include_lib("megaco/include/megaco.hrl").
--include_lib("megaco/include/megaco_message_prev3b.hrl").
--define(encoder_version_pre_prev3c,true).
--include("megaco_text_tokens.hrl").
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{make_safe_token,1}]}).
--endif.
-make_safe_token(Token) ->
- {_TokenTag, Line, Text} = Token,
- {safeToken, Line, Text}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_value,1}]}).
--endif.
-ensure_value(Token) ->
- case Token of
- {safeToken, _Line, Text} when is_list(Text) ->
- Text; % We really should ensure length
- {'QuotedChars', _Line, Text} when is_list(Text) ->
- Text; % We really should ensure length
- Text when is_list(Text) ->
- Text % We really should ensure length
- end.
-
-%% NAME = ALPHA *63(ALPHA / DIGIT / "_" )
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_NAME,1}]}).
--endif.
-ensure_NAME(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Text. %% BUGBUG: ensure length and chars
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_requestID,1}]}).
--endif.
-ensure_requestID(Token) ->
- case Token of
- {safeToken, _Line, "*"} ->
- ?megaco_all_request_id;
- _ ->
- ensure_uint32(Token)
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_streamID,1}]}).
--endif.
-ensure_streamID(StreamId) ->
- ensure_uint16(StreamId).
-
-ensure_auth_header(SpiToken, SnToken, AdToken) ->
- Spi = ensure_hex(SpiToken, 8, 8),
- Sn = ensure_hex(SnToken, 8, 8),
- Ad = ensure_hex(AdToken, 24, 64),
- #'AuthenticationHeader'{secParmIndex = Spi, seqNum = Sn, ad = Ad}.
-
-%% The values 0x0, 0xFFFFFFFE and 0xFFFFFFFF are reserved.
-%% ContextID = (UINT32 / "*" / "-" / "$")
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_contextID,1}]}).
--endif.
-ensure_contextID(Token) ->
- {_TokenTag, Line, Text} = Token,
- case Text of
- "*" -> ?megaco_all_context_id;
- "-" -> ?megaco_null_context_id;
- "\$" -> ?megaco_choose_context_id;
- Int ->
- CID = ensure_uint32(Int),
- if
- (CID =/= 0) andalso
- (CID =/= 16#FFFFFFFE) andalso
- (CID =/= 16#FFFFFFFF) ->
- CID;
- true ->
- return_error(Line, {bad_ContextID, CID})
- end
- end.
-
-ensure_domainAddress([{_T, _L, _A} = Addr0], Port) ->
- Addr = ensure_ip4addr(Addr0),
- {ip4Address, #'IP4Address'{address = Addr, portNumber = Port}};
-ensure_domainAddress([colon,colon], Port) ->
- Addr = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
- {ip6Address, #'IP6Address'{address = Addr, portNumber = Port}};
-ensure_domainAddress(Addr0, Port) ->
- Addr = ensure_ip6addr(Addr0),
- {ip6Address, #'IP6Address'{address = Addr, portNumber = Port}}.
-
-
-ensure_ip4addr(Token) ->
- {_TokenTag, Line, Addr} = Token,
-%% case string:tokens(Addr, [$.]) of
-%% [T1, T2, T3, T4] ->
- case split_ip4addr_text(Addr, []) of
- [T1, T2, T3, T4] ->
- %% We optimize by sending only the text part (Addr) of
- %% the token to the function.
- %% If something is wrong, then we do not get a proper
- %% position and therefor we catch and issue the
- %% the error again (with the proper line number).
- case (catch [
- ensure_uint(T1, 0, 255),
- ensure_uint(T2, 0, 255),
- ensure_uint(T3, 0, 255),
- ensure_uint(T4, 0, 255)
- ]) of
- A when is_list(A) ->
- A;
- _ ->
- return_error(Line, {bad_IP4address, Addr})
- end;
- _ ->
- return_error(Line, {bad_IP4address, Addr})
- end.
-
-split_ip4addr_text([], Acc) ->
- [ lists:reverse(Acc) ];
-split_ip4addr_text([$. | Rest], Acc) ->
- [ lists:reverse(Acc) | split_ip4addr_text(Rest, []) ];
-split_ip4addr_text([H | T], Acc) ->
- split_ip4addr_text(T, [H | Acc]).
-
-
-ensure_ip6addr([colon,colon|T]) ->
- [H1|T1] = lists:reverse(T),
- case do_ensure_ip6addr(T1, true, [ensure_hex4_or_ip4addr(H1)], 1) of
- {true, A} when length(A) == 16 ->
- A;
- {true, B} when length(B) < 16 ->
- lists:duplicate(16 - length(B), 0) ++ B;
- {true, C} ->
- throw({error, {?MODULE, {bad_mid_ip6addr_length, C}}})
- end;
-ensure_ip6addr(L) ->
- case lists:reverse(L) of
- [colon, colon| T] ->
- case do_ensure_ip6addr(T, true, [], 1) of
- {true, A} when length(A) == 16 ->
- A;
- {true, B} when length(B) < 16 ->
- B ++ lists:duplicate(16 - length(B), 0);
- {true, C} ->
- throw({error, {?MODULE, {bad_mid_ip6addr_length, C}}})
- end;
- [H|L1] -> % A (last element) could be an ip4 address
- case do_ensure_ip6addr(L1,false,[ensure_hex4_or_ip4addr(H)],1) of
- {false, A} when length(A) == 16 ->
- A;
- %% allow a pad even if the address is full (i.e. 16)
- {true, B} when length(B) =< 17 ->
- do_ensure_ip6addr_padding(B, 0);
- {Pad, C} ->
- throw({error, {?MODULE, {bad_mid_ip6addr_length, Pad, C}}})
- end
-
- end.
-
-
-do_ensure_ip6addr([], Pad, Acc, _) ->
- {Pad, lists:flatten(Acc)};
-do_ensure_ip6addr([colon,colon|T], false, Acc, Line) ->
- do_ensure_ip6addr(T, true, [pad|Acc], Line);
-do_ensure_ip6addr([colon,colon|T], true, Acc, Line) ->
- return_error(Line, {bad_mid_duplicate_padding, T, Acc});
-do_ensure_ip6addr([colon|T], Pad, Acc, Line) ->
- do_ensure_ip6addr(T, Pad, Acc, Line);
-do_ensure_ip6addr([{_, Line, _} = A|T], Pad, Acc, _) ->
- do_ensure_ip6addr(T, Pad, [ensure_hex4(A)|Acc], Line).
-
-do_ensure_ip6addr_padding([], _) ->
- [];
-do_ensure_ip6addr_padding([pad|T], N) ->
- lists:duplicate(16 - (N + length(T)), 0) ++ T;
-do_ensure_ip6addr_padding([H|T], N) ->
- [H|do_ensure_ip6addr_padding(T, N+1)].
-
-ensure_hex4_or_ip4addr({TokenTag, Line, Addr} = V) ->
- case string:tokens(Addr, [$.]) of
- [T1, T2, T3, T4] ->
- A1 = ensure_uint({TokenTag, Line, T1}, 0, 255),
- A2 = ensure_uint({TokenTag, Line, T2}, 0, 255),
- A3 = ensure_uint({TokenTag, Line, T3}, 0, 255),
- A4 = ensure_uint({TokenTag, Line, T4}, 0, 255),
- [A1, A2, A3, A4];
- _ ->
- ensure_hex4(V)
- %% %% BMK BMK BMK
- %% %% Here we should test for hexseq
- %% return_error(Line, {bad_IP4address, Addr})
- end.
-
-ensure_hex4({_TokenTag, Line, Hex4})
- when length(Hex4) =< 4, length(Hex4) > 0 ->
- case (catch do_ensure_hex4(Hex4)) of
- IL when is_list(IL) andalso (length(IL) =:= 2) ->
- IL;
- Error ->
- return_error(Line, {bad_hex4, Hex4, Error})
- end.
-
-do_ensure_hex4([_H1, _H2, _H3, _H4] = H) ->
- hex_to_int(H, []);
-do_ensure_hex4([H2, H3, H4]) ->
- hex_to_int([$0, H2, H3, H4], []);
-do_ensure_hex4([H3, H4]) ->
- hex_to_int([$0, $0, H3, H4], []);
-do_ensure_hex4([H4]) ->
- hex_to_int([$0, $0, $0, H4], []).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_domainName,2}]}).
--endif.
-ensure_domainName(Token, Port) ->
- {_TokenTag, _Line, Name} = Token,
- %% BUGBUG: validate name
- {domainName, #'DomainName'{name = Name, portNumber = Port}}.
-
-%% extensionParameter= "X" ("-" / "+") 1*6(ALPHA / DIGIT)
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_extensionParameter,1}]}).
--endif.
-ensure_extensionParameter(Token) ->
- {_TokenTag, Line, Text} = Token,
- case Text of
- [X, S | _Chars] ->
- if
- X /= $X, X /= $x,
- S /= $+, S /= $- ->
- return_error(Line, {bad_extension_parameter, Text});
- true ->
- {extension_parameter, Text}
- end;
- _ ->
- return_error(Line, {bad_extension_parameter, Text})
- end.
-
-ensure_message(MegacopToken, MID, Body) ->
-%% #'ServiceChangeProfile'{profileName = Name,
-%% version = Version} =
-%% ensure_profile(MegacopToken),
-%% case Name of
-%% "megaco" ->
-%% #'Message'{version = Version, mId = MID, messageBody = Body};
-%% [$!] ->
-%% #'Message'{version = Version, mId = MID, messageBody = Body}
-%% end.
- {_TokenTag, Line, Text} = MegacopToken,
- case split_Megacop(Text, []) of
- {Name, Version} ->
- Version2 = ensure_version(Version),
- case Name of
- "megaco" ->
- #'Message'{version = Version2,
- mId = MID,
- messageBody = Body};
- [$!] ->
- #'Message'{version = Version2,
- mId = MID,
- messageBody = Body}
- end;
- _ ->
- return_error(Line, {bad_name_or_version, Text})
- end.
-
-split_Megacop([], _) ->
- error;
-split_Megacop([$/ | Version], Acc) ->
- {lists:reverse(Acc), Version};
-split_Megacop([H | T], Acc) ->
- split_Megacop(T, [H | Acc]).
-
-
-%% Corr1:
-%% As of corr 1 ModemDescriptor has been deprecated.
-%% and since this functon is only used when creating
-%% a ModemDescriptor, iit is removed.
-%% modemType = (V32bisToken / V22bisToken / V18Token /
-%% V22Token / V32Token / V34Token / V90Token /
-%% V91Token / SynchISDNToken / extensionParameter)
-%% ensure_modemType({_TokenTag, _Line, Text} = Token) ->
-%% case Text of
-%% "v32b" -> v32bis;
-%% "v22b" -> v22bis;
-%% "v18" -> v18;
-%% "v22" -> v22;
-%% "v32" -> v32;
-%% "v34" -> v34;
-%% "v90" -> v90;
-%% "v91" -> v91;
-%% "synchisdn" -> synchISDN;
-%% "sn" -> synchISDN;
-%% [$x | _] -> ensure_extensionParameter(Token)
-%% end.
-
-%% An mtp address is five octets long
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_mtpAddress,1}]}).
--endif.
-ensure_mtpAddress(Token) ->
- {_TokenTag, _Line, Addr} = Token,
- %% BUGBUG: validate address
- {mtpAddress, Addr}.
-
-%% MuxType = ( H221Token / H223Token / H226Token / V76Token / extensionParameter )
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_muxType,1}]}).
--endif.
-ensure_muxType(Token) ->
- {_TokenTag, _Line, Text} = Token,
- case Text of
- "h221" -> h221;
- "h223" -> h223;
- "h226" -> h226;
- "v76" -> v76;
- "nx64k" -> nx64k; % v2
- [$x | _] -> ensure_extensionParameter(Token)
- end.
-
-%% packagesItem = NAME "-" UINT16
-%% NAME = ALPHA *63(ALPHA / DIGIT / "_" )
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_packagesItem,1}]}).
--endif.
-ensure_packagesItem(Token) ->
- {_TokenTag, Line, Text} = Token,
- case split_packagesItem(Text, []) of
- {Name, Version} ->
- %% As we don't ensure length of the names, there is no point
- %% in doing the ensure_NAME thing...
- #'PackagesItem'{packageName = Name,
- packageVersion = ensure_uint(Version, 0, 99)};
- _ ->
- return_error(Line, {bad_PackagesItem, Text})
- end.
-
-split_packagesItem([], _) ->
- error;
-split_packagesItem([$- | Version], Acc) ->
- {lists:reverse(Acc), Version};
-split_packagesItem([H|T], Acc) ->
- split_packagesItem(T, [H|Acc]).
-
-
-%% pkgdName = (PackageName / "*") SLASH (ItemID / "*" )
-%% PackageName = NAME
-%% ItemID = NAME
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_pkgdName,1}]}).
--endif.
-ensure_pkgdName(Token) ->
- {_TokenTag, Line, Text} = Token,
- case ensure_pkgdName(Text, []) of
- ok ->
- %% As we don't really do any checks on the strings
- %% (length or content) there is really no point in
- %% "ensuring" the name and item part of the
- %% package name
- %% ensure_name_or_star(Name),
- %% ensure_name_or_star(Item),
- Text;
- _ ->
- return_error(Line, {bad_pkgdName, Text})
- end.
-
-ensure_pkgdName([], _) ->
- error;
-ensure_pkgdName([$/ | T], Acc)
- when ((length(T) > 0) andalso (length(Acc) > 0)) ->
- ok;
-ensure_pkgdName([H | T], Acc) ->
- ensure_pkgdName(T, [H | Acc]).
-
-
-%% -compile({inline,[{ensure_name_or_star,1}]}).
-%% ensure_name_or_star(Val) ->
-%% %% case Token of
-%% %% {_, _, Name} when Name =:= "*" ->
-%% %% Name;
-%% %% _ ->
-%% %% ensure_NAME(Token)
-%% %% end.
-%% if
-%% Val =:= "*" ->
-%% Val;
-%% true ->
-%% %% as we don't really validate the text part of the token(s),
-%% %% we can just return the value assuming it to be correct...
-%% Val
-%% end.
-
-
-%% v2 - start
-
-merge_indAudMediaDescriptor_streams(asn1_NOVALUE, []) ->
- asn1_NOVALUE;
-merge_indAudMediaDescriptor_streams(Stream, [])
- when is_record(Stream, 'IndAudStreamParms') ->
- {oneStream, Stream};
-merge_indAudMediaDescriptor_streams(asn1_NOVALUE, MStreams) ->
- {multiStream, lists:reverse(MStreams)};
-merge_indAudMediaDescriptor_streams(Stream, MStreams) ->
- return_error(0,
- {invalid_indAudMediaDescriptor_streams, {Stream, MStreams}}).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_indAudMediaDescriptor,1}]}).
--endif.
-merge_indAudMediaDescriptor(Vals) ->
- merge_indAudMediaDescriptor(Vals, asn1_NOVALUE, asn1_NOVALUE, []).
-
-merge_indAudMediaDescriptor([], TSD, OneStream, MultiStreams) ->
- Streams = merge_indAudMediaDescriptor_streams(OneStream, MultiStreams),
- #'IndAudMediaDescriptor'{termStateDescr = TSD,
- streams = Streams};
-
-merge_indAudMediaDescriptor([{termStateDescr, H}|T], asn1_NOVALUE, OS, MS) ->
- merge_indAudMediaDescriptor(T, H, OS, MS);
-merge_indAudMediaDescriptor([{streamDescr, Val}|T], TSD, asn1_NOVALUE, MS) ->
- merge_indAudMediaDescriptor(T, TSD, asn1_NOVALUE, [Val|MS]);
-merge_indAudMediaDescriptor([{streamParm, Val}|T], TSD, asn1_NOVALUE, []) ->
- merge_indAudMediaDescriptor(T, TSD, Val, []);
-merge_indAudMediaDescriptor(Vals, TSD, OneStream, MultiStream) ->
- return_error(0, {invalid_indAudMediaDescriptor,
- {Vals, TSD, OneStream, MultiStream}}).
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_indAudLocalControlDescriptor,1}]}).
--endif.
-merge_indAudLocalControlDescriptor(Parms) ->
- do_merge_indAudLocalControlDescriptor(Parms,
- #'IndAudLocalControlDescriptor'{}).
-
-do_merge_indAudLocalControlDescriptor([Parm | Parms], Desc) ->
- case Parm of
- modeToken when Desc#'IndAudLocalControlDescriptor'.streamMode =:= asn1_NOVALUE ->
- Desc2 = Desc#'IndAudLocalControlDescriptor'{streamMode = 'NULL'},
- do_merge_indAudLocalControlDescriptor(Parms, Desc2);
- reservedGroupToken when Desc#'IndAudLocalControlDescriptor'.reserveGroup =:= asn1_NOVALUE ->
- Desc2 = Desc#'IndAudLocalControlDescriptor'{reserveGroup = 'NULL'},
- do_merge_indAudLocalControlDescriptor(Parms, Desc2);
- reservedValueToken when Desc#'IndAudLocalControlDescriptor'.reserveValue =:= asn1_NOVALUE ->
- Desc2 = Desc#'IndAudLocalControlDescriptor'{reserveValue = 'NULL'},
- do_merge_indAudLocalControlDescriptor(Parms, Desc2);
- {pkgdName, Val} when Desc#'IndAudLocalControlDescriptor'.propertyParms =:= asn1_NOVALUE ->
- PropParms = [#'IndAudPropertyParm'{name = Val}],
- Desc2 = Desc#'IndAudLocalControlDescriptor'{propertyParms = PropParms},
- do_merge_indAudLocalControlDescriptor(Parms, Desc2);
- {pkgdName, Val} when is_list(Desc#'IndAudLocalControlDescriptor'.propertyParms) ->
- PropParms = Desc#'IndAudLocalControlDescriptor'.propertyParms,
- PropParms2 = [#'IndAudPropertyParm'{name = Val} | PropParms],
- Desc2 = Desc#'IndAudLocalControlDescriptor'{propertyParms = PropParms2},
- do_merge_indAudLocalControlDescriptor(Parms, Desc2)
- end;
-do_merge_indAudLocalControlDescriptor([], Desc) ->
- case Desc#'IndAudLocalControlDescriptor'.propertyParms of
- [_ | _] = PropParms -> % List has more then one element
- PropParms2= lists:reverse(PropParms),
- Desc#'IndAudLocalControlDescriptor'{propertyParms = PropParms2};
- _ ->
- Desc
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_indAudLocalParm,1}]}).
--endif.
-ensure_indAudLocalParm(Token) ->
- case Token of
- {safeToken, _Line, "mode"} -> modeToken;
- {safeToken, _Line, "mo"} -> modeToken;
- {safeToken, _Line, "reservedgroup"} -> reservedGroupToken;
- {safeToken, _Line, "rg"} -> reservedGroupToken;
- {safeToken, _Line, "reservedvalue"} -> reservedValueToken;
- {safeToken, _Line, "rv"} -> reservedValueToken;
- PkgdName -> {pkgdName,
- ensure_pkgdName(PkgdName)}
- end.
-
-merge_indAudTerminationStateDescriptor({pkgdName, Val}) ->
- PropParm = #'IndAudPropertyParm'{name = Val},
- #'IndAudTerminationStateDescriptor'{propertyParms = [PropParm]};
-merge_indAudTerminationStateDescriptor(serviceStatesToken) ->
- #'IndAudTerminationStateDescriptor'{serviceState = 'NULL'};
-merge_indAudTerminationStateDescriptor(bufferToken) ->
- #'IndAudTerminationStateDescriptor'{eventBufferControl = 'NULL'}.
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_indAudEventBufferDescriptor,2}]}).
--endif.
-merge_indAudEventBufferDescriptor(EventName, SpecParams) ->
- IAEBD = #'IndAudEventBufferDescriptor'{eventName = EventName},
- do_merge_indAudEventBufferDescriptor(SpecParams, IAEBD).
-
-do_merge_indAudEventBufferDescriptor(asn1_NOVALUE, IAEBD) ->
- IAEBD;
-do_merge_indAudEventBufferDescriptor({streamID, StreamID}, IAEBD) ->
- IAEBD#'IndAudEventBufferDescriptor'{streamID = StreamID};
-do_merge_indAudEventBufferDescriptor({eventParameterName, _Name} = EPN,
- IAEBD) ->
- %% BUGBUG BUGBUG BUGBUG
- %% This is an ugly hack to allow the eventParamName which only
- %% exists in the text encoding...
- IAEBD#'IndAudEventBufferDescriptor'{streamID = EPN}.
-
-
-ensure_indAudSignalListParm(SIG) when is_record(SIG, 'Signal') ->
- ensure_indAudSignal(SIG).
-
-ensure_indAudSignal(#'Signal'{signalName = SignalName,
- streamID = asn1_NOVALUE,
- sigType = asn1_NOVALUE,
- duration = asn1_NOVALUE,
- notifyCompletion = asn1_NOVALUE,
- keepActive = asn1_NOVALUE,
- sigParList = []}) ->
- #'IndAudSignal'{signalName = SignalName}.
-
-
-ensure_IADMD({_TokenTag, _Line,
- #'DigitMapDescriptor'{digitMapName = Name,
- digitMapValue = asn1_NOVALUE}}) ->
- #'IndAudDigitMapDescriptor'{digitMapName = Name}.
-
-
-merge_indAudPackagesDescriptor(#'PackagesItem'{packageName = N,
- packageVersion = V}) ->
- #'IndAudPackagesDescriptor'{packageName = N,
- packageVersion = V}.
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_indAudTerminationStateParm,1}]}).
--endif.
-ensure_indAudTerminationStateParm(Token) ->
- case Token of
- {safeToken, _Line, "servicestates"} -> serviceStatesToken;
- {safeToken, _Line, "si"} -> serviceStatesToken;
- {safeToken, _Line, "buffer"} -> bufferToken;
- {safeToken, _Line, "bf"} -> bufferToken;
- PkgdName -> {pkgdName,
- ensure_pkgdName(PkgdName)}
- end.
-
-
-%% Types modified by v2:
-
-merge_auditDescriptor([]) ->
- #'AuditDescriptor'{};
-merge_auditDescriptor(Tokens) when is_list(Tokens) ->
- case lists:keysearch(terminationAudit, 1, Tokens) of
- {value, {terminationAudit, TA}} ->
- case lists:keydelete(terminationAudit, 1, Tokens) of
- [] ->
- #'AuditDescriptor'{auditPropertyToken = TA};
- AuditTokens ->
- #'AuditDescriptor'{auditToken = AuditTokens,
- auditPropertyToken = TA}
- end;
- false ->
- #'AuditDescriptor'{auditToken = Tokens}
- end;
-merge_auditDescriptor(_) ->
- #'AuditDescriptor'{}.
-
-
-%% v2 - end
-
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_ServiceChangeParm,1}]}).
--endif.
-merge_ServiceChangeParm(Parms) ->
- Required = [serviceChangeReason, serviceChangeMethod],
- merge_ServiceChangeParm(Parms, #'ServiceChangeParm'{}, Required).
-
-merge_ServiceChangeParm([], SCP, []) ->
- SCP;
-
-merge_ServiceChangeParm([], _SCP, Required) ->
- exit({missing_required_serviceChangeParm, Required});
-
-merge_ServiceChangeParm([{address, Val}|Parms], SCP0, Req)
- when (SCP0#'ServiceChangeParm'.serviceChangeAddress == asn1_NOVALUE) andalso
- (SCP0#'ServiceChangeParm'.serviceChangeMgcId == asn1_NOVALUE) ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeAddress = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{address, Val}|_Parms], SCP0, _Req)
- when SCP0#'ServiceChangeParm'.serviceChangeAddress == asn1_NOVALUE ->
- MgcId = SCP0#'ServiceChangeParm'.serviceChangeMgcId,
- exit({not_both_address_mgcid_serviceChangeParm, Val, MgcId});
-
-merge_ServiceChangeParm([{mgc_id, Val}|Parms], SCP0, Req)
- when (SCP0#'ServiceChangeParm'.serviceChangeMgcId == asn1_NOVALUE) andalso
- (SCP0#'ServiceChangeParm'.serviceChangeAddress == asn1_NOVALUE) ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeMgcId = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{mgc_id, Val}|_Parms], SCP0, _Req)
- when SCP0#'ServiceChangeParm'.serviceChangeMgcId == asn1_NOVALUE ->
- Addr = SCP0#'ServiceChangeParm'.serviceChangeAddress,
- exit({not_both_address_mgcid_serviceChangeParm, Val, Addr});
-
-merge_ServiceChangeParm([{profile, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeProfile == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeProfile = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{version, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeVersion == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeVersion = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-%% REQUIRED (i.e. no default value)
-merge_ServiceChangeParm([{reason, Val}|Parms], SCP0, Req0)
- when SCP0#'ServiceChangeParm'.serviceChangeReason == undefined ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeReason = Val},
- Req = lists:delete(serviceChangeReason, Req0),
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{delay, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeDelay == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeDelay = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-%% REQUIRED (i.e. no default value)
-merge_ServiceChangeParm([{method, Val}|Parms], SCP0, Req0)
- when SCP0#'ServiceChangeParm'.serviceChangeMethod == undefined ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeMethod = Val},
- Req = lists:delete(serviceChangeMethod, Req0),
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{time_stamp, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.timeStamp == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{timeStamp = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{extension, _Val}|Parms], SCP0, Req) ->
- merge_ServiceChangeParm(Parms, SCP0, Req);
-
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when (SCP0#'ServiceChangeParm'.serviceChangeInfo == asn1_NOVALUE) andalso
- is_atom(Val) ->
- SCI = #'AuditDescriptor'{auditToken = [Val]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when (SCP0#'ServiceChangeParm'.serviceChangeInfo == asn1_NOVALUE) andalso
- is_tuple(Val) ->
- SCI = #'AuditDescriptor'{auditPropertyToken = [Val]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when is_record(SCP0#'ServiceChangeParm'.serviceChangeInfo, 'AuditDescriptor') andalso
- is_atom(Val) ->
- SCI0 = SCP0#'ServiceChangeParm'.serviceChangeInfo,
- L = SCI0#'AuditDescriptor'.auditToken,
- SCI = SCI0#'AuditDescriptor'{auditToken = [Val|L]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when is_record(SCP0#'ServiceChangeParm'.serviceChangeInfo, 'AuditDescriptor') andalso
- is_tuple(Val) ->
- SCI0 = SCP0#'ServiceChangeParm'.serviceChangeInfo,
- L = SCI0#'AuditDescriptor'.auditPropertyToken,
- SCI = SCI0#'AuditDescriptor'{auditPropertyToken = [Val|L]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([incomplete|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeIncompleteFlag == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeIncompleteFlag = 'NULL'},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{Tag, Val}|_Parms], SCP, _Req) ->
- Val2 =
- case Tag of
- address ->
- SCP#'ServiceChangeParm'.serviceChangeAddress;
- mgc_id ->
- SCP#'ServiceChangeParm'.serviceChangeMgcId;
- profile ->
- SCP#'ServiceChangeParm'.serviceChangeProfile;
- version ->
- SCP#'ServiceChangeParm'.serviceChangeVersion;
- reason ->
- SCP#'ServiceChangeParm'.serviceChangeReason;
- delay ->
- SCP#'ServiceChangeParm'.serviceChangeDelay;
- method ->
- SCP#'ServiceChangeParm'.serviceChangeMethod;
- time_stamp ->
- SCP#'ServiceChangeParm'.timeStamp;
- audit_item ->
- SCP#'ServiceChangeParm'.serviceChangeInfo
- end,
- exit({at_most_once_serviceChangeParm, {Tag, Val, Val2}});
-merge_ServiceChangeParm([Parm|_Parms], SCP, _Req) ->
- Parm2 =
- case Parm of
- incomplete ->
- SCP#'ServiceChangeParm'.serviceChangeIncompleteFlag
- end,
- exit({at_most_once_serviceChangeParm, {Parm, Parm2}}).
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_ServiceChangeResParm,1}]}).
--endif.
-merge_ServiceChangeResParm(Parms) ->
- merge_ServiceChangeResParm(Parms, #'ServiceChangeResParm'{}).
-
-merge_ServiceChangeResParm([], SCRP) ->
- SCRP;
-merge_ServiceChangeResParm([{address, Val}|Parms], SCRP0)
- when (SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE) andalso
- (SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE) ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeAddress = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-merge_ServiceChangeResParm([{address, Val}|_Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE ->
- MgcId = SCRP0#'ServiceChangeResParm'.serviceChangeMgcId,
- exit({not_both_address_mgcid_servChgReplyParm, Val, MgcId});
-
-merge_ServiceChangeResParm([{mgc_id, Val}|Parms], SCRP0)
- when (SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE) andalso
- (SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE) ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeMgcId = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-merge_ServiceChangeResParm([{mgc_id, Val}|_Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE ->
- Addr = SCRP0#'ServiceChangeResParm'.serviceChangeAddress,
- exit({not_both_address_mgcid_servChgReplyParm, Val, Addr});
-
-merge_ServiceChangeResParm([{profile, Val}|Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeProfile == asn1_NOVALUE ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeProfile = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-
-merge_ServiceChangeResParm([{version, Val}|Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeVersion == asn1_NOVALUE ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeVersion = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-
-merge_ServiceChangeResParm([{time_stamp, Val}|Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.timeStamp == asn1_NOVALUE ->
- SCRP = SCRP0#'ServiceChangeResParm'{timeStamp = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-
-merge_ServiceChangeResParm([{Tag, Val}|_Parms], SCRP) ->
- Val2 =
- case Tag of
- address -> SCRP#'ServiceChangeResParm'.serviceChangeAddress;
- mgc_id -> SCRP#'ServiceChangeResParm'.serviceChangeMgcId;
- profile -> SCRP#'ServiceChangeResParm'.serviceChangeProfile;
- version -> SCRP#'ServiceChangeResParm'.serviceChangeVersion;
- time_stamp -> SCRP#'ServiceChangeResParm'.timeStamp
- end,
- exit({at_most_once_servChgReplyParm, {Tag, Val, Val2}}).
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_serviceChangeMethod,1}]}).
--endif.
-ensure_serviceChangeMethod(Token) ->
- case Token of
- {safeToken, _Line, "fl"} ->
- failover;
- {safeToken, _Line, "failover"} ->
- failover;
- {safeToken, _Line, "fo"} ->
- forced;
- {safeToken, _Line, "forced"} ->
- forced;
- {safeToken, _Line, "gr"} ->
- graceful;
- {safeToken, _Line, "graceful"} ->
- graceful;
- {safeToken, _Line, "rs"} ->
- restart;
- {safeToken, _Line, "restart"} ->
- restart;
- {safeToken, _Line, "dc"} ->
- disconnected;
- {safeToken, _Line, "disconnected"} ->
- disconnected;
- {safeToken, _Line, "ho"} ->
- handOff;
- {safeToken, _Line, "handoff"} ->
- handOff;
- {safeToken, Line, Text} ->
- return_error(Line, {bad_serviceChangeMethod, Text})
- end.
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_profile,1}]}).
--endif.
-ensure_profile(Token) ->
- {_TokenTag, Line, Text} = Token,
- case string:tokens(Text, [$/]) of
- [Name, Version] ->
- Version2 = ensure_version(Version),
- #'ServiceChangeProfile'{profileName = Name, version = Version2};
- _ ->
- return_error(Line, {bad_profile, Text})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_version,1}]}).
--endif.
-ensure_version(Version) ->
- ensure_uint(Version, 0, 99).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_signalRequest,2}]}).
--endif.
-merge_signalRequest(SignalName, PropertyParms) ->
- Sig = #'Signal'{signalName = SignalName},
- SPL = [],
- do_merge_signalRequest(Sig, PropertyParms, SPL).
-
-do_merge_signalRequest(Sig, [H | T], SPL) ->
- case H of
- {stream, SID} when Sig#'Signal'.streamID == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{streamID = SID}, T, SPL);
- {signal_type, SigType} when Sig#'Signal'.sigType == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{sigType = SigType}, T, SPL);
- {duration, Duration} when Sig#'Signal'.duration == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{duration = Duration}, T, SPL);
- {notify_completion, NC} when Sig#'Signal'.notifyCompletion == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{notifyCompletion = NC}, T, SPL);
- keepActive when Sig#'Signal'.keepActive == asn1_NOVALUE->
- do_merge_signalRequest(Sig#'Signal'{keepActive = true}, T, SPL);
- {other, Name, PP} ->
- SP = #'SigParameter'{sigParameterName = Name,
- value = PP#'PropertyParm'.value,
- extraInfo = PP#'PropertyParm'.extraInfo},
- do_merge_signalRequest(Sig, T, [SP | SPL]);
- {direction, Dir} when Sig#'Signal'.direction == asn1_NOVALUE->
- do_merge_signalRequest(Sig#'Signal'{direction = Dir}, T, SPL);
- {requestId, RID} when Sig#'Signal'.requestID == asn1_NOVALUE->
- do_merge_signalRequest(Sig#'Signal'{requestID = RID}, T, SPL);
- _ ->
- return_error(0, {bad_sigParm, H})
- end;
-do_merge_signalRequest(Sig, [], SPL) ->
- Sig#'Signal'{sigParList = lists:reverse(SPL)} .
-
-
-%% eventStream = StreamToken EQUAL StreamID
-%% eventOther = eventParameterName parmValue
--ifdef(megaco_parser_inline).
--compile({inline,[{select_stream_or_other,2}]}).
--endif.
-select_stream_or_other(EventParameterName, ParmValue) ->
- if
- (EventParameterName =:= "st") orelse
- (EventParameterName =:= "stream") ->
- case ParmValue of
- #'PropertyParm'{value = [Value]} ->
- {stream, ensure_uint16(Value)};
- _ ->
- {stream, ensure_uint16(ParmValue)}
- end;
- true ->
- #'PropertyParm'{value = Value} = ParmValue,
- EP = #'EventParameter'{eventParameterName = EventParameterName,
- value = Value},
- {other, EP}
- end.
-
-%% select_stream_or_other("st", #'PropertyParm'{value = [Value]}) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other("st", Value) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other("stream", #'PropertyParm'{value = [Value]}) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other("stream", Value) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other(Name, #'PropertyParm'{value = Value}) ->
-%% EP = #'EventParameter'{eventParameterName = Name,
-%% value = Value},
-%% {other, EP}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_eventDM,1}]}).
--endif.
-ensure_eventDM(Token) ->
- {_TokenTag, Line, DMD} = Token,
- if
- is_record(DMD, 'DigitMapDescriptor') ->
- Name = DMD#'DigitMapDescriptor'.digitMapName,
- Val = DMD#'DigitMapDescriptor'.digitMapValue,
- if
- (Name =:= asn1_NOVALUE) andalso (Val =/= asn1_NOVALUE) ->
- {'DigitMapValue', Start, Short, Long, Duration, Body} = Val,
- DMV = #'DigitMapValue'{startTimer = Start,
- shortTimer = Short,
- longTimer = Long,
- digitMapBody = Body,
- durationTimer = Duration},
- {eventDM, {digitMapValue, DMV}};
- (Name =/= asn1_NOVALUE) andalso (Val =:= asn1_NOVALUE) ->
- {eventDM, {digitMapName, Name}};
- true ->
- return_error(Line, {bad_eventDM, DMD})
- end;
- true ->
- return_error(Line, {bad_eventDM, DMD})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_DMD,1}]}).
--endif.
-ensure_DMD(Token) ->
- {_TokenTag, Line, DMD} = Token,
- if
- is_record(DMD, 'DigitMapDescriptor') ->
- Val2 =
- case DMD#'DigitMapDescriptor'.digitMapValue of
- %% Note that the values of the digitMapBody and
- %% durationTimers are swapped by the scanner
- %% (this is done because of a problem in the flex scanner).
- #'DigitMapValue'{startTimer = asn1_NOVALUE,
- shortTimer = asn1_NOVALUE,
- longTimer = asn1_NOVALUE,
- durationTimer = [],
- digitMapBody = asn1_NOVALUE} ->
- asn1_NOVALUE;
- #'DigitMapValue'{durationTimer = Body,
- digitMapBody = Duration} = DMV ->
- %% Convert to version 1 DigitMapValue
- DMV#'DigitMapValue'{digitMapBody = Body,
- durationTimer = Duration};
- Other ->
- Other
- end,
- DMD#'DigitMapDescriptor'{digitMapValue = Val2};
- true ->
- return_error(Line, {bad_DigitMapDescriptor, DMD})
- end.
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_observed_event,3}]}).
--endif.
-merge_observed_event(ObservedEvents, EventName, TimeStamp) ->
- StreamId = asn1_NOVALUE,
- EPL = [],
- do_merge_observed_event(ObservedEvents, EventName, TimeStamp, StreamId, EPL).
-
-do_merge_observed_event([{stream, StreamID} | T], EventName, TimeStamp, asn1_NOVALUE, EPL) ->
- do_merge_observed_event(T, EventName, TimeStamp, StreamID, EPL);
-do_merge_observed_event([{other, PP} | T], EventName, TimeStamp, StreamID, EPL) ->
- do_merge_observed_event(T, EventName, TimeStamp, StreamID, [PP | EPL]);
-do_merge_observed_event([], EventName, TimeStamp, StreamID, EPL) ->
- #'ObservedEvent'{eventName = EventName,
- timeNotation = TimeStamp,
- streamID = StreamID,
- eventParList = lists:reverse(EPL)}.
-
-merge_eventSpec(OE)
- when is_record(OE, 'ObservedEvent') andalso
- (OE#'ObservedEvent'.timeNotation == asn1_NOVALUE) ->
- #'EventSpec'{eventName = OE#'ObservedEvent'.eventName,
- streamID = OE#'ObservedEvent'.streamID,
- eventParList = OE#'ObservedEvent'.eventParList};
-merge_eventSpec(OE) ->
- return_error(0, {bad_event_spec, OE}).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_eventParameters,1}]}).
--endif.
-merge_eventParameters(Params) ->
- StreamId = asn1_NOVALUE,
- EPL = [],
- RA = #'RequestedActions'{},
- HasA = no,
- do_merge_eventParameters(Params, StreamId, EPL, RA, HasA) .
-
-do_merge_eventParameters([H | T], StreamId, EPL, RA, HasA) ->
- case H of
- keepActive when RA#'RequestedActions'.keepActive =:= asn1_NOVALUE ->
- RA2 = RA#'RequestedActions'{keepActive = true},
- do_merge_eventParameters(T, StreamId, EPL, RA2, yes);
- {embed, SD, SED} when RA#'RequestedActions'.signalsDescriptor =:= asn1_NOVALUE ->
- RA2 = RA#'RequestedActions'{signalsDescriptor = SD,
- secondEvent = SED},
- do_merge_eventParameters(T, StreamId, EPL, RA2, yes);
- {eventDM, DM} when RA#'RequestedActions'.eventDM =:= asn1_NOVALUE ->
- RA2 = RA#'RequestedActions'{eventDM = DM},
- do_merge_eventParameters(T, StreamId, EPL, RA2, yes);
- {stream, NewStreamId} when StreamId =:= asn1_NOVALUE ->
- do_merge_eventParameters(T, NewStreamId, EPL, RA, HasA);
- {other, PP} when is_record(PP, 'PropertyParm') ->
- EP = #'EventParameter'{eventParameterName = PP#'PropertyParm'.name,
- value = PP#'PropertyParm'.value,
- extraInfo = PP#'PropertyParm'.extraInfo},
- do_merge_eventParameters(T, StreamId, [EP | EPL], RA, HasA);
- {other, EP} when is_record(EP, 'EventParameter') ->
- do_merge_eventParameters(T, StreamId, [EP | EPL], RA, HasA);
- _ ->
- return_error(0, {bad_eventParameter, H})
- end;
-do_merge_eventParameters([], StreamId, EPL, RA, yes) ->
- #'RequestedEvent'{streamID = StreamId,
- eventAction = RA,
- evParList = lists:reverse(EPL)};
-do_merge_eventParameters([], StreamId, EPL, _RA, no) ->
- #'RequestedEvent'{streamID = StreamId,
- eventAction = asn1_NOVALUE,
- evParList = lists:reverse(EPL)}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_secondEventParameters,1}]}).
--endif.
-merge_secondEventParameters(Params) ->
- StreamId = asn1_NOVALUE,
- EPL = [],
- SRA = #'SecondRequestedActions'{},
- HasA = no,
- do_merge_secondEventParameters(Params, StreamId, EPL, SRA, HasA) .
-
-do_merge_secondEventParameters([H | T], StreamId, EPL, SRA, HasA) ->
- case H of
- keepActive when SRA#'SecondRequestedActions'.keepActive =:= asn1_NOVALUE ->
- SRA2 = SRA#'SecondRequestedActions'{keepActive = true},
- do_merge_secondEventParameters(T, StreamId, EPL, SRA2, yes);
- {second_embed, SD} when SRA#'SecondRequestedActions'.signalsDescriptor =:= asn1_NOVALUE ->
- SRA2 = SRA#'SecondRequestedActions'{signalsDescriptor = SD},
- do_merge_secondEventParameters(T, StreamId, EPL, SRA2, yes);
- {eventDM, DM} when SRA#'SecondRequestedActions'.eventDM =:= asn1_NOVALUE ->
- SRA2 = SRA#'SecondRequestedActions'{eventDM = DM},
- do_merge_secondEventParameters(T, StreamId, EPL, SRA2, yes);
- {stream, NewStreamId} when StreamId =:= asn1_NOVALUE ->
- do_merge_secondEventParameters(T, NewStreamId, EPL, SRA, HasA);
- {other, PP} when is_record(PP, 'PropertyParm') ->
- EP = #'EventParameter'{eventParameterName = PP#'PropertyParm'.name,
- value = PP#'PropertyParm'.value,
- extraInfo = PP#'PropertyParm'.extraInfo},
- do_merge_secondEventParameters(T, StreamId, [EP | EPL], SRA, HasA);
- {other, EP} when is_record(EP, 'EventParameter') ->
- do_merge_secondEventParameters(T, StreamId, [EP | EPL], SRA, HasA);
- _ ->
- return_error(0, {bad_secondEventParameter, H})
- end;
-do_merge_secondEventParameters([], StreamId, EPL, SRA, yes) ->
- #'SecondRequestedEvent'{streamID = StreamId,
- eventAction = SRA,
- evParList = lists:reverse(EPL)};
-do_merge_secondEventParameters([], StreamId, EPL, _SRA, no) ->
- #'SecondRequestedEvent'{streamID = StreamId,
- eventAction = asn1_NOVALUE,
- evParList = lists:reverse(EPL)}.
-
-%% terminationID = "ROOT" / pathName / "$" / "*"
-%% Total length of pathName must not exceed 64 chars.
-%% pathName = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
-%% ["@" pathDomainName ]
-%% ABNF allows two or more consecutive "." although it is meaningless
-%% in a path domain name.
-%% pathDomainName = (ALPHA / DIGIT / "*" )
-%% *63(ALPHA / DIGIT / "-" / "*" / ".")
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_terminationID,1}]}).
--endif.
-ensure_terminationID(Token) ->
- {safeToken, _Line, LowerText} = Token,
- %% terminationID = "ROOT" / pathName / "$" / "*"
- decode_term_id(LowerText, false, [], []).
-
-decode_term_id([H | T], Wild, Id, Component) ->
- case H of
- $/ -> decode_term_id(T, Wild, [lists:reverse(Component) | Id], []);
- $* -> decode_term_id(T, true, Id, [?megaco_all | Component]);
- $$ -> decode_term_id(T, true, Id, [?megaco_choose | Component]);
- _ -> decode_term_id(T, Wild, Id, [H | Component])
- end;
-decode_term_id([], Wild, Id, Component) ->
- Id2 = [lists:reverse(Component) | Id],
- #megaco_term_id{contains_wildcards = Wild, id = lists:reverse(Id2)}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_pathName,1}]}).
--endif.
-ensure_pathName(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Text. %% BUGBUG: ensure values
-
-%% TimeStamp = Date "T" Time ; per ISO 8601:1988
-%% Date = 8(DIGIT) ; Date = yyyymmdd
-%% Time = 8(DIGIT) ; Time = hhmmssss
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_timeStamp,1}]}).
--endif.
-ensure_timeStamp(Token) ->
- {'TimeStampToken', Line, Text} = Token,
- case string:tokens(Text, [$T, $t]) of
- [Date, Time] ->
- #'TimeNotation'{date = Date, time = Time};
- _ ->
- return_error(Line, {bad_timeStamp, Text})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_transactionID,1}]}).
--endif.
-ensure_transactionID(TransId) ->
- ensure_uint32(TransId).
-
-%% transactionAck = transactionID / (transactionID "-" transactionID)
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_transactionAck,1}]}).
--endif.
-ensure_transactionAck(Tokens) ->
- {safeToken, _Line, Text} = Tokens,
- ensure_transactionAck2(Text, []).
-
-ensure_transactionAck2([], Acc) ->
- Id = lists:reverse(Acc),
- #'TransactionAck'{firstAck = ensure_transactionID(Id)};
-ensure_transactionAck2([$- | Id2], Acc) ->
- Id1 = lists:reverse(Acc),
- #'TransactionAck'{firstAck = ensure_transactionID(Id1),
- lastAck = ensure_transactionID(Id2)};
-ensure_transactionAck2([H|T], Acc) ->
- ensure_transactionAck2(T, [H|Acc]).
-
-
-merge_context_request(asn1_NOVALUE, Prop) ->
- merge_context_request(#'ContextRequest'{}, Prop);
-
-merge_context_request(#'ContextRequest'{priority = asn1_NOVALUE} = CR,
- {priority, Int}) ->
- CR#'ContextRequest'{priority = Int};
-
-merge_context_request(#'ContextRequest'{emergency = asn1_NOVALUE} = CR,
- {emergency, Bool}) ->
- CR#'ContextRequest'{emergency = Bool};
-
-merge_context_request(#'ContextRequest'{topologyReq = asn1_NOVALUE} = CR,
- {topology, Desc}) ->
- CR#'ContextRequest'{topologyReq = Desc};
-
-merge_context_request(#'ContextRequest'{iepscallind = asn1_NOVALUE} = CR,
- {iepsCallind, Ind}) ->
- CR#'ContextRequest'{iepscallind = Ind};
-
-merge_context_request(#'ContextRequest'{contextProp = asn1_NOVALUE} = CR,
- {contextProp, Props}) ->
- CR#'ContextRequest'{contextProp = Props};
-
-%% The parser handles this, but we drop it in this version
-%% merge_context_request(#'ContextRequest'{contextList = asn1_NOVALUE} = CR,
-%% {contextList, _IDs}) ->
-%% CR#'ContextRequest'{contextList = IDs};
-merge_context_request(CR, {contextList, _IDs}) ->
- CR;
-
-merge_context_request(CR, {Tag, Val}) ->
- Val2 =
- case Tag of
- priority -> CR#'ContextRequest'.priority;
- emergency -> CR#'ContextRequest'.emergency;
- topology -> CR#'ContextRequest'.topologyReq;
- iepsCallind -> CR#'ContextRequest'.iepscallind;
- contextProp -> CR#'ContextRequest'.contextProp%% ;
- %% contextList -> CR#'ContextRequest'.contextList
- end,
- exit({at_most_once_contextProperty, {Tag, Val, Val2}}).
-
-
-merge_context_attr_audit_request(CAAR, []) ->
- CAAR;
-merge_context_attr_audit_request(CAAR, [H|T]) ->
- case H of
- priorityAudit when CAAR#'ContextAttrAuditRequest'.priority == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{priority = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- emergencyAudit when CAAR#'ContextAttrAuditRequest'.emergency == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{emergency = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- topologyAudit when CAAR#'ContextAttrAuditRequest'.topology == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{topology = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- iepsCallind when CAAR#'ContextAttrAuditRequest'.iepscallind == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{iepscallind = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- {prop, Name} when CAAR#'ContextAttrAuditRequest'.contextPropAud == asn1_NOVALUE ->
- CPA = [#'IndAudPropertyParm'{name = Name}],
- CAAR2 = CAAR#'ContextAttrAuditRequest'{contextPropAud = CPA},
- merge_context_attr_audit_request(CAAR2, T);
-
- {prop, Name} ->
- CPA = CAAR#'ContextAttrAuditRequest'.contextPropAud,
- CPA2 = [#'IndAudPropertyParm'{name = Name}|CPA],
- CAAR2 = CAAR#'ContextAttrAuditRequest'{contextPropAud = CPA2},
- merge_context_attr_audit_request(CAAR2, T)
-
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_action_request,2}]}).
--endif.
-merge_action_request(CtxId, Items) ->
- do_merge_action_request(Items, [], asn1_NOVALUE, asn1_NOVALUE, CtxId).
-
-do_merge_action_request([H|T], CmdReqs, CtxReq, CtxAuditReq, CtxId) ->
- case H of
- {commandRequest, CmdReq} ->
- do_merge_action_request(T, [CmdReq|CmdReqs],
- CtxReq, CtxAuditReq, CtxId);
-
- {contextProp, ContextProp} ->
- do_merge_action_request(T, CmdReqs,
- merge_context_request(CtxReq, ContextProp),
- CtxAuditReq, CtxId);
-
- {contextAudit, ContextAuditReq} when CtxAuditReq == asn1_NOVALUE ->
- do_merge_action_request(T, CmdReqs,
- CtxReq, ContextAuditReq, CtxId)
- end;
-do_merge_action_request([], CmdReqs, CtxReq, CtxAuditReq, CtxId) ->
- #'ActionRequest'{contextId = CtxId,
- contextRequest = strip_ContextRequest(CtxReq),
- contextAttrAuditReq = strip_ContextAttrAuditRequest(CtxAuditReq),
- commandRequests = lists:reverse(CmdReqs)}.
-
-
-%% OTP-5085:
-%% In order to solve a problem in the parser, the error descriptor
-%% has been put last in the non-empty commandReplyList, if it is not
-%% asn1_NOVALUE
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_action_reply,1}]}).
--endif.
-merge_action_reply(Items) ->
- do_merge_action_reply(Items, asn1_NOVALUE, asn1_NOVALUE, []).
-
-do_merge_action_reply([], Err, Ctx, Cmds) ->
- #'ActionReply'{errorDescriptor = Err,
- contextReply = strip_ContextRequest(Ctx),
- commandReply = lists:reverse(Cmds)};
-do_merge_action_reply([H|T], Err0, CR, Cmds) ->
- case H of
- {error, Err1} when Err0 == asn1_NOVALUE ->
- do_merge_action_reply(T, Err1, CR, Cmds);
- {command, Cmd} ->
- do_merge_action_reply(T, Err0, CR, [Cmd | Cmds]);
- {context, CtxProp} ->
- do_merge_action_reply(T, Err0,
- merge_context_request(CR, CtxProp), Cmds)
- end.
-
-strip_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextProp = asn1_NOVALUE}) ->
- asn1_NOVALUE;
-strip_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextProp = []}) ->
- asn1_NOVALUE;
-strip_ContextRequest(asn1_NOVALUE) ->
- asn1_NOVALUE;
-strip_ContextRequest(R) ->
- R.
-
-strip_ContextAttrAuditRequest(asn1_NOVALUE) ->
- asn1_NOVALUE;
-strip_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topology = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextPropAud = asn1_NOVALUE}) ->
- asn1_NOVALUE;
-strip_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topology = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextPropAud = []}) ->
- asn1_NOVALUE;
-strip_ContextAttrAuditRequest(R) ->
- R.
-
-merge_AmmRequest_descriptors([], Acc) ->
- lists:reverse(Acc);
-merge_AmmRequest_descriptors([{_, deprecated}|Descs], Acc) ->
- merge_AmmRequest_descriptors(Descs, Acc);
-merge_AmmRequest_descriptors([Desc|Descs], Acc) ->
- merge_AmmRequest_descriptors(Descs, [Desc|Acc]).
-
-make_commandRequest({CmdTag, {_TokenTag, _Line, Text}}, Cmd) ->
- Req = #'CommandRequest'{command = {CmdTag, Cmd}},
- case Text of
- [$w, $- | _] ->
- Req#'CommandRequest'{wildcardReturn = 'NULL'};
- [$o, $-, $w, $- | _] ->
- Req#'CommandRequest'{optional = 'NULL', wildcardReturn = 'NULL'};
- [$o, $- | _] ->
- Req#'CommandRequest'{optional = 'NULL'};
- _ ->
- Req
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_terminationAudit,1}]}).
--endif.
-merge_terminationAudit(AuditReturnParameters) ->
- lists:reverse(do_merge_terminationAudit(AuditReturnParameters, [], [])).
-
-do_merge_terminationAudit([H| T], ARPs, AuditItems) ->
- case H of
- {auditReturnItem, AuditItem} ->
- do_merge_terminationAudit(T, ARPs, [AuditItem | AuditItems]);
- AuditReturnParameter ->
- do_merge_terminationAudit(T, [AuditReturnParameter | ARPs], AuditItems)
- end;
-do_merge_terminationAudit([], AuditReturnParameters, []) ->
- AuditReturnParameters;
-do_merge_terminationAudit([], AuditReturnParameters, AuditItems) ->
- AuditDescriptor = #'AuditDescriptor'{auditToken = AuditItems},
- AuditReturnParameter = {emptyDescriptors, AuditDescriptor},
- [AuditReturnParameter | AuditReturnParameters].
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_mediaDescriptor,1}]}).
--endif.
-merge_mediaDescriptor(MediaParms) ->
- do_merge_mediaDescriptor(MediaParms, asn1_NOVALUE, [], []).
-
-do_merge_mediaDescriptor([H | T], TS, One, Multi) ->
- case H of
- {streamParm, Parm} when Multi =:= [] ->
- do_merge_mediaDescriptor(T, TS, [Parm | One], Multi);
- {streamDescriptor, Desc} when One =:= [] ->
- do_merge_mediaDescriptor(T, TS, One, [Desc | Multi]);
- {termState, TS2} when TS =:= asn1_NOVALUE ->
- do_merge_mediaDescriptor(T, TS2, One, Multi);
- _ ->
- return_error(0, {bad_merge_mediaDescriptor, [H, TS, One, Multi]})
- end;
-do_merge_mediaDescriptor([], TS, One, Multi) ->
- if
- (One =:= []) ->
- if (Multi =:= []) ->
- #'MediaDescriptor'{streams = asn1_NOVALUE,
- termStateDescr = TS};
- true -> % (Multi =/= [])
- Streams = {multiStream, lists:reverse(Multi)},
- #'MediaDescriptor'{streams = Streams,
- termStateDescr = TS}
- end;
- true -> % (One =/= [])
- if
- (Multi =:= []) ->
- Streams = {oneStream, merge_streamParms(One)},
- #'MediaDescriptor'{streams = Streams,
- termStateDescr = TS};
- true -> % (Multi =/= [])
- return_error(0,
- {bad_merge_mediaDescriptor, [TS, One, Multi]})
- end
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_streamParms,1}]}).
--endif.
-merge_streamParms(TaggedStreamParms) ->
- SP = #'StreamParms'{},
- do_merge_streamParms(TaggedStreamParms, SP).
-
-do_merge_streamParms([{Tag, D} | T] = All, SP) ->
- case Tag of
- local when SP#'StreamParms'.localDescriptor =:= asn1_NOVALUE ->
- do_merge_streamParms(T, SP#'StreamParms'{localDescriptor = D});
- remote when SP#'StreamParms'.remoteDescriptor =:= asn1_NOVALUE ->
- do_merge_streamParms(T, SP#'StreamParms'{remoteDescriptor = D});
- control ->
- LCD =
- case SP#'StreamParms'.localControlDescriptor of
- asn1_NOVALUE ->
- #'LocalControlDescriptor'{propertyParms = []};
- PrevLCD ->
- PrevLCD
- end,
- LCD2 = do_merge_control_streamParms(D, LCD),
- do_merge_streamParms(T, SP#'StreamParms'{localControlDescriptor = LCD2});
- statistics when SP#'StreamParms'.statisticsDescriptor =:= asn1_NOVALUE ->
- do_merge_streamParms(T, SP#'StreamParms'{statisticsDescriptor = D});
- _ ->
- return_error(0, {do_merge_streamParms, [All, SP]})
- end;
-do_merge_streamParms([], SP)
- when is_record(SP#'StreamParms'.localControlDescriptor,
- 'LocalControlDescriptor') ->
- LCD = SP#'StreamParms'.localControlDescriptor,
- PP = LCD#'LocalControlDescriptor'.propertyParms,
- LCD2 = LCD#'LocalControlDescriptor'{propertyParms = lists:reverse(PP)},
- SP#'StreamParms'{localControlDescriptor = LCD2};
-do_merge_streamParms([], SP) ->
- SP.
-
-
-do_merge_control_streamParms([{SubTag, SD} | T] = All, LCD) ->
- case SubTag of
- group when LCD#'LocalControlDescriptor'.reserveGroup =:= asn1_NOVALUE ->
- LCD2 = LCD#'LocalControlDescriptor'{reserveGroup = SD},
- do_merge_control_streamParms(T, LCD2);
- value when LCD#'LocalControlDescriptor'.reserveValue =:= asn1_NOVALUE ->
- LCD2 = LCD#'LocalControlDescriptor'{reserveValue = SD},
- do_merge_control_streamParms(T, LCD2);
- mode when LCD#'LocalControlDescriptor'.streamMode =:= asn1_NOVALUE ->
- LCD2 = LCD#'LocalControlDescriptor'{streamMode = SD},
- do_merge_control_streamParms(T, LCD2);
- prop ->
- PP = LCD#'LocalControlDescriptor'.propertyParms,
- LCD2 = LCD#'LocalControlDescriptor'{propertyParms = [SD | PP]},
- do_merge_control_streamParms(T, LCD2);
- _ ->
- return_error(0, {do_merge_control_streamParms, [All, LCD]})
- end;
-do_merge_control_streamParms([], LCD) ->
- LCD.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_terminationStateDescriptor,1}]}).
--endif.
-merge_terminationStateDescriptor(Parms) ->
- TSD = #'TerminationStateDescriptor'{propertyParms = []},
- do_merge_terminationStateDescriptor(Parms, TSD).
-
-do_merge_terminationStateDescriptor([{Tag, Val} | T], TSD) ->
- case Tag of
- serviceState when TSD#'TerminationStateDescriptor'.serviceState =:= asn1_NOVALUE ->
- TSD2 = TSD#'TerminationStateDescriptor'{serviceState = Val},
- do_merge_terminationStateDescriptor(T, TSD2);
- eventBufferControl when TSD#'TerminationStateDescriptor'.eventBufferControl =:= asn1_NOVALUE->
- TSD2 = TSD#'TerminationStateDescriptor'{eventBufferControl = Val},
- do_merge_terminationStateDescriptor(T, TSD2);
- propertyParm ->
- PP = TSD#'TerminationStateDescriptor'.propertyParms,
- TSD2 = TSD#'TerminationStateDescriptor'{propertyParms = [Val | PP]},
- do_merge_terminationStateDescriptor(T, TSD2)
- end;
-do_merge_terminationStateDescriptor([], TSD) ->
- PP = TSD#'TerminationStateDescriptor'.propertyParms,
- TSD#'TerminationStateDescriptor'{propertyParms = lists:reverse(PP)}.
-
-
--ifdef(megaco_nscanner_props).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_prop_groups,1}]}).
--endif.
-ensure_prop_groups(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Group = [],
- parse_prop_name(Text, Group).
-
-parse_prop_name([Char | Rest] = All, Group) ->
- if
- ?white_space(Char) ->
- parse_prop_name(Rest, Group);
- ?end_of_line(Char) ->
- parse_prop_name(Rest, Group);
- true ->
- Name = [],
- do_parse_prop_name(All, Name, Group)
- end;
-parse_prop_name([] = All, Group) ->
- Name = [],
- do_parse_prop_name(All, Name, Group).
-
-do_parse_prop_name([Char | Rest], Name, Group)
- when (Char =:= $=) andalso (Name =/= []) ->
- %% Now we have a complete name
- if
- (Name =:= "v") andalso (Group =/= []) ->
- %% v= is a property group delimiter,
- %% lets create yet another property group.
- NewGroup = [],
- [lists:reverse(Group) | parse_prop_value(Rest, Name, NewGroup)];
- true ->
- %% Use current property group
- parse_prop_value(Rest, Name, Group)
- end;
-do_parse_prop_name([Char | Rest], Name, Group) ->
- case ?classify_char4(Char) of
- safe_char_upper ->
- do_parse_prop_name(Rest, [Char | Name], Group);
- safe_char ->
- do_parse_prop_name(Rest, [Char | Name], Group);
- _ ->
- return_error(0, {bad_prop_name, lists:reverse(Name), Char})
- end;
-do_parse_prop_name([], [], []) ->
- [];
-do_parse_prop_name([], [], Group) ->
- [lists:reverse(Group)];
-do_parse_prop_name([], Name, Group) when Name =/= [] ->
- %% Assume end of line
- Value = [],
- PP = make_prop_parm(Name, Value),
- Group2 = lists:reverse([PP | Group]),
- [Group2].
-
--ifdef(megaco_parser_inline).
--compile({inline,[{parse_prop_value,3}]}).
--endif.
-parse_prop_value(Chars, Name, Group) ->
- Value = [],
- do_parse_prop_value(Chars, Name, Value, Group).
-
-do_parse_prop_value([Char | Rest], Name, Value, Group) ->
- if
- ?end_of_line(Char) ->
- %% Now we have a complete "name=value" pair
- PP = make_prop_parm(Name, Value),
- parse_prop_name(Rest, [PP | Group]);
- true ->
- do_parse_prop_value(Rest, Name, [Char | Value], Group)
- end;
-do_parse_prop_value([], Name, Value, Group) ->
- %% Assume end of line
- PP = make_prop_parm(Name, Value),
- Group2 = lists:reverse([PP | Group]),
- [Group2].
-
--ifdef(megaco_parser_inline).
--compile({inline,[{make_prop_parm,2}]}).
--endif.
-make_prop_parm(Name, Value) ->
- #'PropertyParm'{name = lists:reverse(Name),
- value = [lists:reverse(Value)]}.
-
--else. % -ifdef(megaco_nscanner_props).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_prop_groups,1}]}).
--endif.
-ensure_prop_groups(Token) ->
- {_TokenTag, _Line, Groups} = Token,
- Groups.
-
-%% do_ensure_prop_groups(Groups) when is_list(Groups) ->
-%% [ensure_prop_group(Group) || Group <- Groups];
-%% do_ensure_prop_groups(BadGroups) ->
-%% throw({error, {?MODULE, {bad_property_groups, BadGroups}}}).
-
-%% -ifdef(megaco_parser_inline).
-%% -compile({inline,[{ensure_prop_group,1}]}).
-%% -endif.
-%% ensure_prop_group(Group) when is_list(Group) ->
-%% [ensure_prop_parm(PropParm) || PropParm <- Group];
-%% ensure_prop_group(BadGroup) ->
-%% throw({error, {?MODULE, {bad_property_group, BadGroup}}}).
-
-%% -ifdef(megaco_parser_inline).
-%% -compile({inline,[{ensure_prop_parm,1}]}).
-%% -endif.
-%% ensure_prop_parm(#property_parm{name = Name,
-%% value = Value}) ->
-%% #'PropertyParm'{name = Name,
-%% value = Value};
-%% ensure_prop_parm(PP) when is_record(PP, 'PropertyParm') ->
-%% PP;
-%% ensure_prop_parm(BadPropParm) ->
-%% throw({error, {?MODULE, {bad_property_parm, BadPropParm}}}).
-
--endif. % -ifdef(megaco_nscanner_props).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint,3}]}).
--endif.
-ensure_uint(Token, Min, Max) ->
- case Token of
- {_TokenTag, Line, Val} when is_integer(Val) ->
- ensure_uint(Val, Min, Max, Line);
- {_TokenTag, Line, Text} ->
- case (catch list_to_integer(Text)) of
- {'EXIT', _} ->
- return_error(Line, {not_an_integer, Text});
- Val when is_integer(Val) ->
- ensure_uint(Val, Min, Max, Line)
- end;
- Val when is_integer(Val) ->
- ensure_uint(Val, Min, Max, 0);
- Text ->
- case (catch list_to_integer(Text)) of
- {'EXIT', _} ->
- return_error(0, {not_an_integer, Text});
- Val when is_integer(Val) ->
- ensure_uint(Val, Min, Max, 0)
- end
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint,4}]}).
--endif.
--dialyzer({nowarn_function, ensure_uint/4}). % Future compat
-ensure_uint(Val, Min, Max, Line) ->
- if
- is_integer(Min) andalso (Val >= Min) ->
- if
- is_integer(Max) andalso (Val =< Max) ->
- Val;
- Max =:= infinity ->
- Val;
- true ->
- return_error(Line, {too_large_integer, Val, Max})
- end;
- true ->
- return_error(Line, {too_small_integer, Val, Min})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint16,1}]}).
--endif.
-ensure_uint16(Int) ->
- ensure_uint(Int, 0, 65535).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint32,1}]}).
--endif.
-ensure_uint32(Int) ->
- ensure_uint(Int, 0, 4294967295) .
-
-%% OTP-4710
-ensure_hex({_TokenTag, _Line, [$0, $x |Chars]}, Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []);
-ensure_hex({_TokenTag, _Line, [$0, $X |Chars]}, Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []);
-ensure_hex([$0, $x |Chars], Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []);
-ensure_hex([$0, $X |Chars], Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []).
-
-%% OTP-4710
-hex_to_int([], Acc) ->
- lists:reverse(Acc);
-hex_to_int([Char1,Char2|Tail], Acc) ->
- Int1 = hchar_to_int(Char1),
- Int2 = hchar_to_int(Char2),
- Val = Int2 bor (Int1 bsl 4),
- hex_to_int(Tail, [Val| Acc]);
-hex_to_int([Char], Acc) ->
- Int = hchar_to_int(Char),
- lists:reverse([Int|Acc]).
-
-hchar_to_int(Char) when ($0 =< Char) andalso (Char =< $9) ->
- Char - $0;
-hchar_to_int(Char) when ($A =< Char) andalso (Char =< $F) ->
- Char - $A + 10; % OTP-4710
-hchar_to_int(Char) when ($a =< Char) andalso (Char =< $f) ->
- Char - $a + 10. % OTP-4710
-
--ifdef(megaco_parser_inline).
--compile({inline,[{value_of,1}]}).
--endif.
-value_of(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Text.
-
-
-%% -------------------------------------------------------------------
-
-%% d(F) ->
-%% d(F,[]).
-%% d(F, A) ->
-%% %% d(true, F, A).
-%% d(get(dbg), F, A).
-
-%% d(true, F, A) ->
-%% io:format("DBG:~w:" ++ F ++ "~n", [?MODULE | A]);
-%% d(_, _, _) ->
-%% ok.
-
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3b.yrl b/lib/megaco/src/text/megaco_text_parser_prev3b.yrl
deleted file mode 100644
index eed984cdc3..0000000000
--- a/lib/megaco/src/text/megaco_text_parser_prev3b.yrl
+++ /dev/null
@@ -1,1607 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: YECC grammar for text encoding of Megaco/H.248
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Annex B TEXT ENCODING OF THE PROTOCOL (NORMATIVE)
-%%
-%% B.1 Coding of wildcards
-%%
-%% In a text encoding of the protocol, while TerminationIDs are
-%% arbitrary, by judicious choice of names, the wildcard character, "*"
-%% may be made more useful. When the wildcard character is encountered,
-%% it will "match" all TerminationIDs having the same previous and
-%% following characters (if appropriate). For example, if there were
-%% TerminationIDs of R13/3/1, R13/3/2 and R13/3/3, the TerminationID
-%% R13/3/* would match all of them. There are some circumstances where
-%% ALL Terminations must be referred to. The TerminationID "*" suffices,
-%% and is referred to as ALL. The CHOOSE TerminationID "$" may be used to
-%% signal to the MG that it has to create an ephemeral Termination or
-%% select an idle physical Termination.
-%%
-%% B.2 ABNF specification
-%%
-%% The protocol syntax is presented in ABNF according to RFC2234. The
-%% protocol is not case sensitive. Identifiers are not case sensitive.
-%%
-%% NOTE 1 - This syntax specification does not enforce all restrictions
-%% on element inclusions and values. Some additional
-%% restrictions are stated in comments and other restrictions
-%% appear in the text of this Recommendation. These additional
-%% restrictions are part of the protocol even though not
-%% enforced by this Recommendation.
-%% NOTE 2 - The syntax is context-dependent. For example, "Add" can be
-%% the AddToken or a NAME depending on the context in which it
-%% occurs.
-%%
-%% Everything in the ABNF and text encoding is case insensitive. This
-%% includes TerminationIDs, digitmap Ids etc. SDP is case sensitive as
-%% per RFC 2327.
-%%
-%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Number of expected shift/reduce warnings
-%% This is ugly but...
-%%----------------------------------------------------------------------
-
-Expect 117.
-
-
-%%----------------------------------------------------------------------
-%% Non-terminals
-%%----------------------------------------------------------------------
-
-Nonterminals
-
- actionReply
- actionReplyBody
- actionReplyList
- actionRequest
- actionRequestBody
- actionRequestItem
- actionRequestItems
- actionRequestList
- alternativeValue
- ammParameter
- ammParameters
- ammRequest
- ammRequestBody
- ammToken
- ammsReply
- ammsReplyBody
- ammsToken
- auditDescriptor
- auditDescriptorBody
- auditItem
- auditItemList
- auditOther
- auditReply
- auditRequest
- auditReturnItem
- auditReturnParameter
- auditReturnParameterList
- authenticationHeader
- commandReplyList
- commandReplys %% v3
- commandRequest
- contextAttrDescriptor %% v3
- contextAudit
- contextAuditProperties
- contextAuditProperty
- contextID
- contextIdList %% v3
- contextIDs %% v3
-%% contextProperties %% v3
- contextProperty
-%% contextPropertyList
- contextTerminationAudit
- daddr
- deviceName
- digitMapDescriptor
- direction %% v3
- domainAddress
- domainName
- embedFirst
- embedNoSig
- embedSig
- embedWithSig
- errorCode
- errorDescriptor
- errorText
- eventBufferControl
- eventBufferControlState
- eventBufferDescriptor
- eventDM
- eventParameter
- eventParameterName
- eventParameters
- eventSpec
- eventSpecList
- eventStream
- eventStreamOrOther
- eventsDescriptor
- extension
- extensionParameter
-
- iepsValue
-
- %% v2 - start
- indAudauditReturnParameter
- indAuddigitMapDescriptor
- indAudeventBufferDescriptor
- indAudeventSpec
- indAudeventSpecParameter
- %% indAudeventSpecParameterList
- indAudeventsDescriptor
- indAudlocalControlDescriptor
- indAudlocalParm
- indAudlocalParmList
- indAudmediaDescriptor
- indAudmediaParm
- indAudmediaParms %% v3
- %% indAudmediaParmList
- indAudpackagesDescriptor
- indAudrequestedEvent
- indAudsignalsDescriptor
- indAudsignalList
- %% indAudsignalListParm
- indAudsignalParm
- %% indAudsignalRequest
- indAudstreamDescriptor
- indAudstreamParm
- indAudstatisticsDescriptor
- indAudterminationAudit
- indAudterminationAuditList
- indAudterminationStateDescriptor
- indAudterminationStateParm
- %% indAudterminationStateParmList
- optIndAudeventSpecParameter
- optIndAudsignalParm
- %% v2 - end
-
- indAudcontextAttrDescriptor %% v3
-
- localControlDescriptor
- localParm
- localParmList
- mId
- mediaDescriptor
- mediaParm
- mediaParmList
- megacoMessage
- message
- messageBody
- modemDescriptor % Deprecated as of Corr 1
- modemType % Deprecated as of Corr 1
- modemTypeList % Deprecated as of Corr 1
- mtpAddress
- muxDescriptor
- muxType
- notificationReason
- notificationReasons
- notifyReply
- notifyReplyBody
- notifyRequest
- notifyRequestBody
- observedEvent
- observedEventBody
- observedEventParameter
- observedEventParameters
- % observedEventTimeStamp
- observedEvents
- observedEventsDescriptor
- onOrOff
- optAuditDescriptor
- optImmAckRequired
- optPropertyParms
- optSep
- packagesDescriptor
- packagesItem
- packagesItems
- %% parmName
- parmValue
- pathName
- pkgdName
- portNumber
- priority
- propertyParm
- propertyParms
- propertyParmList
- requestID
- requestedEvent
- requestedEventBody
- requestedEvents
- safeToken
- safeToken2
- secondEventParameter
- secondEventParameters
- secondRequestedEvent
- secondRequestedEventBody
- secondRequestedEvents
- servChgReplyParm
- servChgReplyParms
- serviceChangeAddress
- serviceChangeDelay
- serviceChangeDescriptor
- serviceChangeMethod
- serviceChangeMgcId
- serviceChangeParm
- serviceChangeParms
- serviceChangeProfile
- serviceChangeReason
- serviceChangeReply
- serviceChangeReplyBody
- serviceChangeReplyDescriptor
- serviceChangeRequest
- serviceChangeVersion
- serviceState
- serviceStates
- sigParameter
- sigParameters
- signalList
- signalListId
- signalListParm
- signalListParms
- signalName
- signalParm
- signalParms
- signalRequest
- signalsDescriptor
- signalType
- statisticsDescriptor
- statisticsParameter
- statisticsParameters
- streamDescriptor
- streamID
- streamModes
- streamParm
- streamParmList
- subtractRequest
- terminationA
- terminationAudit
- terminationB
- terminationID
- terminationIDList
- terminationIDListRepeat
- terminationStateDescriptor
- terminationStateParm
- terminationStateParms
- timeStamp
- topologyDescriptor
- topologyDirection
- topologyTriple
- topologyTripleList
- transactionAck
- transactionAckList
- transactionID
- transactionItem
- transactionList
- transactionPending
- transactionReply
- transactionReplyBody
- transactionRequest
- transactionResponseAck
- value
- valueList
-
-.
-
-%%----------------------------------------------------------------------
-%% Terminals
-%%----------------------------------------------------------------------
-
-Terminals
-
- 'AddToken'
- 'AuditCapToken'
- 'AuditToken'
- 'AuditValueToken'
- 'AuthToken'
- 'BothToken' %% v3
- 'BothwayToken'
- 'BriefToken'
- 'BufferToken'
- 'COLON'
- 'COMMA'
- 'ContextAttrToken' %% v3
- 'ContextAuditToken'
- 'ContextListToken' %% v3
- 'CtxToken'
- 'DelayToken'
- 'DigitMapToken'
- 'DigitMapDescriptorToken'
- 'DirectionToken' %% v3
- 'DiscardToken'
- 'DisconnectedToken'
- 'DurationToken'
- 'EQUAL'
- 'EmbedToken'
- 'EmergencyToken'
- 'EmergencyOffToken'
- 'ErrorToken'
- 'EventBufferToken'
- 'EventsToken'
- 'ExternalToken' %% v3
- 'FailoverToken'
- 'ForcedToken'
- 'GREATER'
- 'GracefulToken'
- 'H221Token'
- 'H223Token'
- 'H226Token'
- 'HandOffToken'
- 'IEPSToken' %% v3
- 'ImmAckRequiredToken'
- 'InSvcToken'
- 'InactiveToken'
- 'InternalToken' %% v3
- 'InterruptByEventToken'
- 'InterruptByNewSignalsDescrToken'
- 'IsolateToken'
- 'KeepActiveToken'
- 'LBRKT'
- 'LESSER'
- 'LSBRKT'
- 'LocalControlToken'
- 'LocalDescriptorToken'
- 'LockStepToken'
- 'LoopbackToken'
- 'MediaToken'
- %% 'MegacopToken'
- 'MethodToken'
- 'MgcIdToken'
- 'ModeToken'
- 'ModemToken'
- 'ModifyToken'
- 'MoveToken'
- 'MtpAddressToken'
- 'MuxToken'
- 'NEQUAL'
- 'NotifyCompletionToken'
- 'NotifyToken'
- 'Nx64Token' %% v2
- 'ObservedEventsToken'
- 'OffToken'
- 'OnToken'
- 'OnOffToken'
- 'OnewayToken'
- 'OtherReasonToken'
- 'OutOfSvcToken'
- 'PackagesToken'
- 'PendingToken'
- 'PriorityToken'
- 'ProfileToken'
- 'QuotedChars'
- 'RBRKT'
- 'RSBRKT'
- 'ReasonToken'
- 'RecvonlyToken'
- 'RemoteDescriptorToken'
- 'ReplyToken'
- 'RequestIDToken' %% v3
- 'ReservedGroupToken'
- 'ReservedValueToken'
- 'ResponseAckToken'
- 'RestartToken'
- 'SEP'
- 'SafeChars'
- 'SendonlyToken'
- 'SendrecvToken'
- 'ServiceChangeAddressToken'
- 'ServiceChangeToken'
- 'ServiceChangeIncompleteToken'
- 'ServiceStatesToken'
- 'ServicesToken'
- 'SignalListToken'
- 'SignalTypeToken'
- 'SignalsToken'
- 'StatsToken'
- 'StreamToken'
- 'SubtractToken'
- 'SynchISDNToken'
- 'TerminationStateToken'
- 'TestToken'
- 'TimeOutToken'
- 'TimeStampToken'
- 'TopologyToken'
- 'TransToken'
- 'V18Token'
- 'V22Token'
- 'V22bisToken'
- 'V32Token'
- 'V32bisToken'
- 'V34Token'
- 'V76Token'
- 'V90Token'
- 'V91Token'
- 'VersionToken'
- 'AndAUDITSelectToken' %% OTP-7534: v3-fix
- 'EmergencyValueToken' %% OTP-7534: v3-fix
- 'IntsigDelayToken' %% OTP-7534: v3-fix
- 'IterationToken' %% OTP-7534: v3-fix
- 'MessageSegmentToken' %% OTP-7534: v3-fix
- 'NeverNotifyToken' %% OTP-7534: v3-fix
- 'NotifyImmediateToken' %% OTP-7534: v3-fix
- 'NotifyRegulatedToken' %% OTP-7534: v3-fix
- 'OnewayBothToken' %% OTP-7534: v3-fix
- 'OnewayExternalToken' %% OTP-7534: v3-fix
- 'OrAUDITselectToken' %% OTP-7534: v3-fix
- 'ResetEventsDescriptorToken' %% OTP-7534: v3-fix
- 'SegmentationCompleteToken' %% OTP-7534: v3-fix
- endOfMessage
-
-.
-
-%%----------------------------------------------------------------------
-%% Root symbol
-%%----------------------------------------------------------------------
-
-Rootsymbol megacoMessage.
-
-%%----------------------------------------------------------------------
-%% The grammar
-%%----------------------------------------------------------------------
-
-%% megacoMessage = LWSP [authenticationHeader SEP ] message
-%% authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON
-%% SequenceNum COLON AuthData
-%%
-%% SecurityParmIndex = "0x" 8(HEXDIG)
-%% SequenceNum = "0x" 8(HEXDIG)
-%% AuthData = "0x" 24*64(HEXDIG)
-%% message = MegacopToken SLASH version SEP mId SEP messageBody
-%% version = 1*2(DIGIT) .
-
-megacoMessage -> optSep authenticationHeader message endOfMessage
- : #'MegacoMessage'{authHeader = '$2', mess = '$3'} .
-
-optSep -> 'SEP' : sep .
-optSep -> '$empty' : no_sep .
-
-authenticationHeader -> 'AuthToken' 'EQUAL' safeToken 'COLON'
- safeToken 'COLON' safeToken optSep
- : ensure_auth_header('$3', '$5', '$7') .
-authenticationHeader -> '$empty' : asn1_NOVALUE .
-
-message -> safeToken mId messageBody : ensure_message('$1', '$2', '$3') .
-
-messageBody -> errorDescriptor : {messageError, '$1'} .
-messageBody -> transactionList : {transactions, '$1'} .
-
-transactionList -> transactionItem : ['$1'] .
-transactionList -> transactionItem transactionList : ['$1' | '$2'] .
-
-transactionItem -> transactionRequest : {transactionRequest, '$1'} .
-transactionItem -> transactionReply : {transactionReply, '$1'}.
-transactionItem -> transactionPending : {transactionPending, '$1'} .
-transactionItem -> transactionResponseAck : {transactionResponseAck, '$1'} .
-
-transactionResponseAck -> 'ResponseAckToken'
- 'LBRKT' transactionAck transactionAckList 'RBRKT' : ['$3' | '$4'] .
-
-transactionAckList -> 'COMMA' transactionAck transactionAckList : ['$2' | '$3'] .
-transactionAckList -> '$empty' : [] .
-
-transactionAck -> safeToken : ensure_transactionAck('$1') .
-
-transactionPending -> 'PendingToken' 'EQUAL' transactionID 'LBRKT' 'RBRKT'
- : #'TransactionPending'{transactionId = ensure_transactionID('$3') } .
-
-transactionRequest -> 'TransToken'
- 'LBRKT' actionRequest actionRequestList 'RBRKT'
- : #'TransactionRequest'{transactionId = asn1_NOVALUE,
- actions = ['$3' | '$4']} .
-transactionRequest -> 'TransToken' 'EQUAL'
- 'LBRKT' actionRequest actionRequestList 'RBRKT'
- : #'TransactionRequest'{transactionId = asn1_NOVALUE,
- actions = ['$4' | '$5']} .
-transactionRequest -> 'TransToken' 'EQUAL' transactionID
- 'LBRKT' actionRequest actionRequestList 'RBRKT'
- : #'TransactionRequest'{transactionId = ensure_transactionID('$3'),
- actions = ['$5' | '$6']} .
-
-actionRequestList -> 'COMMA' actionRequest actionRequestList : ['$2' | '$3'] .
-actionRequestList -> '$empty' : [] .
-
-actionRequest -> 'CtxToken' 'EQUAL' contextID
- 'LBRKT' actionRequestBody 'RBRKT'
- : merge_action_request('$3', '$5') .
-
-actionRequestBody -> actionRequestItem actionRequestItems : ['$1' | '$2'] .
-
-actionRequestItems -> 'COMMA' actionRequestItem actionRequestItems
- : ['$2' | '$3'] .
-actionRequestItems -> '$empty' : [] .
-
-%% actionRequestItem -> contextProperties : '$1' .
-actionRequestItem -> contextProperty : {contextProp, '$1'} .
-actionRequestItem -> contextAudit : {contextAudit, '$1'} .
-actionRequestItem -> commandRequest : {commandRequest, '$1'} .
-
-%% contextProperties -> contextProperty contextPropertyList :
-%% merge_context_request(#'ContextRequest'{}, ['$1' | '$2']) .
-
-%% contextPropertyList -> 'COMMA' contextProperty contextPropertyList : ['$2' | '$3' ] .
-%% contextPropertyList -> '$empty' : [] .
-
-%% at-most-once
-contextProperty -> topologyDescriptor : {topology, '$1'}.
-contextProperty -> priority : {priority, '$1'}.
-contextProperty -> 'EmergencyToken' : {emergency, true}.
-contextProperty -> 'EmergencyOffToken' : {emergency, false}.
-contextProperty -> iepsValue : {iepsCallind, '$1'} .
-contextProperty -> contextAttrDescriptor : '$1' .
-
-contextAttrDescriptor -> 'ContextAttrToken' 'LBRKT' propertyParms 'RBRKT' :
- {contextProp, '$3'}.
-contextAttrDescriptor -> 'ContextAttrToken' 'LBRKT' contextIdList 'RBRKT' :
- {contextList, '$3'}.
-
-contextIdList -> 'ContextListToken' 'EQUAL'
- 'LBRKT' contextID contextIDs 'RBRKT' : ['$4' | '$5'] .
-
-contextIDs -> 'COMMA' contextID contextIDs : ['$2' | '$3'] .
-contextIDs -> '$empty' : [] .
-
-contextAudit -> 'ContextAuditToken' 'LBRKT' indAudcontextAttrDescriptor 'RBRKT'
- : merge_context_attr_audit_request(
- #'ContextAttrAuditRequest'{}, '$3') .
-
-indAudcontextAttrDescriptor -> 'ContextAttrToken'
- 'LBRKT' contextAuditProperty
- contextAuditProperties 'RBRKT'
- : ['$3' | '$4'] .
-
-contextAuditProperties -> 'COMMA' contextAuditProperty contextAuditProperties
- : ['$2' | '$3'] .
-contextAuditProperties -> '$empty' : [] .
-
-%% at-most-once .
-contextAuditProperty -> 'TopologyToken' : topologyAudit .
-contextAuditProperty -> 'EmergencyToken' : emergencyAudit .
-contextAuditProperty -> 'PriorityToken' : priorityAudit .
-contextAuditProperty -> 'IEPSToken' : iepsCallind .
-contextAuditProperty -> pkgdName : {prop, '$1'} .
-
-commandRequest -> ammRequest : '$1'.
-commandRequest -> subtractRequest : '$1'.
-commandRequest -> auditRequest : '$1'.
-commandRequest -> notifyRequest : '$1'.
-commandRequest -> serviceChangeRequest : '$1'.
-
-transactionReply -> 'ReplyToken' 'EQUAL' transactionID
- 'LBRKT'
- optImmAckRequired transactionReplyBody
- 'RBRKT'
- : #'TransactionReply'{transactionId = '$3',
- immAckRequired = '$5',
- transactionResult = '$6'} .
-
-optImmAckRequired -> 'ImmAckRequiredToken' 'COMMA' : 'NULL' .
-optImmAckRequired -> '$empty' : asn1_NOVALUE .
-
-transactionReplyBody -> errorDescriptor : {transactionError, '$1'} .
-transactionReplyBody -> actionReply actionReplyList : {actionReplies, ['$1' | '$2']} .
-
-actionReplyList -> 'COMMA' actionReply actionReplyList : ['$2' | '$3'] .
-actionReplyList -> '$empty' : [] .
-
-actionReply -> 'CtxToken' 'EQUAL' contextID
- 'LBRKT' actionReplyBody 'RBRKT' :
- setelement(#'ActionReply'.contextId, '$5', '$3') .
-
-actionReplyBody -> errorDescriptor :
- #'ActionReply'{errorDescriptor = '$1'} .
-actionReplyBody -> commandReplys commandReplyList :
- merge_action_reply(['$1' | '$2']) .
-
-%% OTP-5085
-%% This ugly thing is to fool the parser. The errorDescriptor does not
-%% realy belong here. The merge_action_reply will remove it and put it
-%% in it's right place later.
-commandReplyList -> 'COMMA' errorDescriptor :
- [{error, '$2'}] .
-commandReplyList -> 'COMMA' commandReplys commandReplyList :
- ['$2' | '$3'] .
-commandReplyList -> '$empty' : [] .
-
-commandReplys -> serviceChangeReply : {command, '$1'} .
-commandReplys -> auditReply : {command, '$1'} .
-commandReplys -> ammsReply : {command, '$1'} .
-commandReplys -> notifyReply : {command, '$1'} .
-commandReplys -> contextProperty : {context, '$1'} .
-
-%Add Move and Modify have the same request parameter
-ammRequest -> ammToken 'EQUAL' terminationID ammRequestBody :
- Descs = merge_AmmRequest_descriptors('$4', []),
- make_commandRequest('$1',
- #'AmmRequest'{terminationID = ['$3'],
- descriptors = Descs}) .
-
-ammToken -> 'AddToken' : {addReq, '$1'} .
-ammToken -> 'MoveToken' : {moveReq, '$1'} .
-ammToken -> 'ModifyToken' : {modReq, '$1'} .
-
-ammRequestBody -> 'LBRKT' ammParameter ammParameters 'RBRKT' : ['$2' | '$3'] .
-ammRequestBody -> '$empty' : [] .
-
-ammParameters -> 'COMMA' ammParameter ammParameters : ['$2' | '$3'] .
-ammParameters -> '$empty' : [] .
-
-%at-most-once
-ammParameter -> mediaDescriptor : {mediaDescriptor, '$1'}.
-ammParameter -> modemDescriptor : {modemDescriptor, deprecated}.
-ammParameter -> muxDescriptor : {muxDescriptor, '$1'}.
-ammParameter -> eventsDescriptor : {eventsDescriptor, '$1'}.
-ammParameter -> eventBufferDescriptor : {eventBufferDescriptor, '$1'}.
-ammParameter -> signalsDescriptor : {signalsDescriptor, '$1'}.
-ammParameter -> digitMapDescriptor : {digitMapDescriptor, '$1'}.
-ammParameter -> auditDescriptor : {auditDescriptor, '$1'}.
-ammParameter -> statisticsDescriptor : {statisticsDescriptor, '$1'}.
-
-ammsReply -> ammsToken 'EQUAL' terminationID ammsReplyBody
- : {'$1', #'AmmsReply'{terminationID = ['$3'],
- terminationAudit = '$4'}} .
-
-ammsToken -> 'AddToken' : addReply .
-ammsToken -> 'MoveToken' : moveReply .
-ammsToken -> 'ModifyToken' : modReply .
-ammsToken -> 'SubtractToken' : subtractReply .
-
-ammsReplyBody -> 'LBRKT' terminationAudit 'RBRKT' : '$2' .
-ammsReplyBody -> '$empty' : asn1_NOVALUE .
-
-subtractRequest -> 'SubtractToken' 'EQUAL' terminationID
- optAuditDescriptor
- : make_commandRequest({subtractReq, '$1'},
- #'SubtractRequest'{terminationID = ['$3'],
- auditDescriptor = '$4'}) .
-
-
-optAuditDescriptor -> 'LBRKT' auditDescriptor 'RBRKT' : '$2'.
-optAuditDescriptor -> '$empty' : asn1_NOVALUE .
-
-auditRequest -> 'AuditValueToken' 'EQUAL'
- terminationID optAuditDescriptor :
- make_commandRequest({auditValueRequest, '$1'},
- #'AuditRequest'{terminationID = '$3',
- auditDescriptor = '$4'}) .
-auditRequest -> 'AuditCapToken' 'EQUAL'
- terminationID optAuditDescriptor :
- make_commandRequest({auditCapRequest, '$1'},
- #'AuditRequest'{terminationID = '$3',
- auditDescriptor = '$4'}) .
-
-auditReply -> 'AuditValueToken' 'EQUAL' 'CtxToken' contextTerminationAudit
- : {auditValueReply, '$4'} .
-auditReply -> 'AuditCapToken' 'EQUAL' 'CtxToken' contextTerminationAudit
- : {auditCapReply, '$4'} .
-auditReply -> 'AuditValueToken' 'EQUAL' auditOther
- : {auditValueReply, '$3'} .
-auditReply -> 'AuditCapToken' 'EQUAL' auditOther
- : {auditCapReply, '$3'} .
-
-contextTerminationAudit -> terminationIDList :
- {contextAuditResult, '$1'} .
-contextTerminationAudit -> 'LBRKT' errorDescriptor 'RBRKT' :
- {error, '$2'} .
-
-auditOther -> terminationID :
- {auditResult,
- #'AuditResult'{terminationID = '$1',
- terminationAuditResult = []}} .
-auditOther -> terminationID 'LBRKT' terminationAudit 'RBRKT' :
- {auditResult,
- #'AuditResult'{terminationID = '$1',
- terminationAuditResult = '$3'}} .
-
-
-terminationAudit -> auditReturnParameter auditReturnParameterList :
- merge_terminationAudit(['$1' |'$2' ]) .
-
-auditReturnParameterList -> 'COMMA' auditReturnParameter auditReturnParameterList : ['$2' | '$3'] .
-auditReturnParameterList -> '$empty' : [] .
-
-auditReturnParameter -> mediaDescriptor : {mediaDescriptor, '$1'} .
-auditReturnParameter -> modemDescriptor.
-auditReturnParameter -> muxDescriptor : {muxDescriptor, '$1'} .
-auditReturnParameter -> eventsDescriptor : {eventsDescriptor, '$1'} .
-auditReturnParameter -> signalsDescriptor : {signalsDescriptor, '$1'} .
-auditReturnParameter -> digitMapDescriptor : {digitMapDescriptor, '$1'} .
-auditReturnParameter -> observedEventsDescriptor : {observedEventsDescriptor, '$1'} .
-auditReturnParameter -> eventBufferDescriptor : {eventBufferDescriptor, '$1'} .
-auditReturnParameter -> statisticsDescriptor : {statisticsDescriptor, '$1'} .
-auditReturnParameter -> packagesDescriptor : {packagesDescriptor, '$1'} .
-auditReturnParameter -> errorDescriptor : {errorDescriptor, '$1'} .
-auditReturnParameter -> auditReturnItem : {auditReturnItem, '$1'} .
-
-auditDescriptor -> 'AuditToken' 'LBRKT' auditDescriptorBody 'RBRKT' :
- merge_auditDescriptor('$3') .
-
-auditDescriptorBody -> auditItem auditItemList : ['$1' | '$2'].
-auditDescriptorBody -> '$empty' : asn1_NOVALUE .
-
-auditItemList -> 'COMMA' auditItem auditItemList : ['$2' | '$3'] .
-auditItemList -> '$empty' : [] .
-
-%% IGv11 - begin
-%%
-auditReturnItem -> 'MuxToken' : muxToken .
-auditReturnItem -> 'ModemToken' : modemToken .
-auditReturnItem -> 'MediaToken' : mediaToken .
-auditReturnItem -> 'DigitMapToken' : digitMapToken .
-auditReturnItem -> 'StatsToken' : statsToken .
-auditReturnItem -> 'ObservedEventsToken' : observedEventsToken .
-auditReturnItem -> 'PackagesToken' : packagesToken .
-
-%% at-most-once, and DigitMapToken and PackagesToken are not allowed
-%% in AuditCapabilities command
-auditItem -> auditReturnItem : '$1' .
-auditItem -> 'SignalsToken' : signalsToken.
-auditItem -> 'EventBufferToken' : eventBufferToken.
-auditItem -> 'EventsToken' : eventsToken .
-auditItem -> indAudterminationAudit : {terminationAudit, '$1'} . % v2
-%%
-%% IGv11 - end
-
-
-%% v2 - start
-%%
-indAudterminationAudit -> indAudauditReturnParameter
- indAudterminationAuditList
- : ['$1' | '$2'] .
-
-indAudterminationAuditList -> 'COMMA' indAudauditReturnParameter
- indAudterminationAuditList
- : ['$2' | '$3'] .
-indAudterminationAuditList -> '$empty' : [] .
-
-indAudauditReturnParameter -> indAudmediaDescriptor
- : {indAudMediaDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudeventsDescriptor
- : {indAudEventsDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudsignalsDescriptor
- : {indAudSignalsDescriptor, '$1'} .
-indAudauditReturnParameter -> indAuddigitMapDescriptor
- : {indAudDigitMapDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudeventBufferDescriptor
- : {indAudEventBufferDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudstatisticsDescriptor
- : {indAudStatisticsDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudpackagesDescriptor
- : {indAudPackagesDescriptor, '$1'} .
-
-
-indAudmediaDescriptor -> 'MediaToken' 'LBRKT'
- indAudmediaParm indAudmediaParms 'RBRKT'
- : merge_indAudMediaDescriptor(['$3'|'$4']) .
-
-%% at-most-once per item
-%% and either streamParm or streamDescriptor but not both
-%%
-
-indAudmediaParm -> indAudstreamParm : {streamParm, '$1'} .
-indAudmediaParm -> indAudstreamDescriptor : {streamDescr, '$1'} .
-indAudmediaParm -> indAudterminationStateDescriptor : {termStateDescr, '$1'} .
-
-indAudmediaParms -> 'COMMA' indAudmediaParm indAudmediaParms : ['$2' | '$3'] .
-indAudmediaParms -> '$empty' : [] .
-
-%% at-most-once
-indAudstreamParm -> indAudlocalControlDescriptor
- : #'IndAudStreamParms'{localControlDescriptor = '$1'} .
-indAudstreamParm -> indAudstatisticsDescriptor
- : #'IndAudStreamParms'{statisticsDescriptor = '$1'} .
-
-indAudstreamDescriptor -> 'StreamToken' 'EQUAL' streamID
- 'LBRKT' indAudstreamParm 'RBRKT'
- : #'IndAudStreamDescriptor'{streamID = '$3',
- streamParms = '$5'} .
-
-
-indAudlocalControlDescriptor -> 'LocalControlToken'
- 'LBRKT' indAudlocalParm indAudlocalParmList 'RBRKT' :
- merge_indAudLocalControlDescriptor(['$3' | '$4']) .
-
-indAudlocalParmList -> 'COMMA' indAudlocalParm indAudlocalParmList : ['$2' | '$3'] .
-indAudlocalParmList -> '$empty' : [] .
-
-%% at-most-once per item
-%%
-indAudlocalParm -> safeToken : ensure_indAudLocalParm('$1') .
-
-indAudterminationStateDescriptor -> 'TerminationStateToken'
- 'LBRKT' indAudterminationStateParm 'RBRKT'
- :
- merge_indAudTerminationStateDescriptor('$3') .
-
-%% at-most-once per item
-%%
-
-indAudterminationStateParm -> safeToken :
- ensure_indAudTerminationStateParm('$1') .
-
-indAudeventBufferDescriptor -> 'EventBufferToken'
- 'LBRKT' indAudeventSpec 'RBRKT' : '$3' .
-
-indAudeventSpec -> pkgdName optIndAudeventSpecParameter
- : merge_indAudEventBufferDescriptor('$1','$2') .
-
-optIndAudeventSpecParameter -> 'LBRKT' indAudeventSpecParameter 'RBRKT'
- : '$2' .
-optIndAudeventSpecParameter -> '$empty' : asn1_NOVALUE .
-
-
-indAudeventSpecParameter -> eventStream : {streamID, '$1'} .
-indAudeventSpecParameter -> eventParameterName : {eventParameterName, '$1'} .
-
-indAudeventsDescriptor -> 'EventsToken' 'EQUAL' requestID
- 'LBRKT' indAudrequestedEvent 'RBRKT'
- : #'IndAudEventsDescriptor'{requestID = '$3',
- pkgdName = '$5'} .
-
-indAudrequestedEvent -> pkgdName : '$1' .
-
-
-indAudsignalsDescriptor -> 'SignalsToken' optIndAudsignalParm : '$2' .
-
-
-optIndAudsignalParm -> 'LBRKT' 'RBRKT' : asn1_NOVALUE .
-optIndAudsignalParm -> 'LBRKT' indAudsignalParm 'RBRKT' : '$2' .
-
-indAudsignalParm -> indAudsignalList : {seqSigList, '$1'} .
-indAudsignalParm -> signalRequest : {signal, ensure_indAudSignal('$1')} .
-
-indAudsignalList -> 'SignalListToken' 'EQUAL' signalListId
- 'LBRKT' signalListParm 'RBRKT' :
- #'IndAudSeqSigList'{id = ensure_uint16('$3'),
- signalList =
- ensure_indAudSignalListParm('$5')} .
-
-
-%% The DigitMapDescriptorToken is specially treated by the scanner
-indAuddigitMapDescriptor -> 'DigitMapDescriptorToken' :
- ensure_IADMD('$1') .
-
-indAudstatisticsDescriptor -> 'StatsToken' 'LBRKT' pkgdName 'RBRKT' :
- #'IndAudStatisticsDescriptor'{statName = '$3'} .
-
-indAudpackagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem 'RBRKT'
- : merge_indAudPackagesDescriptor('$3') .
-
-eventStream -> 'StreamToken' 'EQUAL' streamID : '$3' .
-
-
-%%
-%% v2 - end
-
-notifyRequest -> 'NotifyToken' 'EQUAL' terminationID
- 'LBRKT' notifyRequestBody 'RBRKT'
- : make_commandRequest({notifyReq, '$1'},
- setelement(#'NotifyRequest'.terminationID, '$5', ['$3'])) .
-
-notifyRequestBody -> observedEventsDescriptor
- : #'NotifyRequest'{observedEventsDescriptor = '$1'}.
-notifyRequestBody -> errorDescriptor
- : #'NotifyRequest'{errorDescriptor = '$1'}.
-
-notifyReply -> 'NotifyToken' 'EQUAL' terminationID notifyReplyBody
- : {notifyReply,
- #'NotifyReply'{terminationID = ['$3'],
- errorDescriptor = '$4'}} .
-
-notifyReplyBody -> 'LBRKT' errorDescriptor 'RBRKT' : '$2'.
-notifyReplyBody -> '$empty' : asn1_NOVALUE .
-
-serviceChangeRequest -> 'ServiceChangeToken' 'EQUAL' terminationID
- 'LBRKT' serviceChangeDescriptor 'RBRKT'
- : make_commandRequest({serviceChangeReq, '$1'},
- #'ServiceChangeRequest'{terminationID = ['$3'],
- serviceChangeParms = '$5'}) .
-
-serviceChangeReply -> 'ServiceChangeToken' 'EQUAL' terminationID serviceChangeReplyBody
- : {serviceChangeReply,
- #'ServiceChangeReply'{terminationID = ['$3'],
- serviceChangeResult = '$4'}} .
-
-serviceChangeReplyBody -> 'LBRKT' errorDescriptor 'RBRKT'
- : {errorDescriptor, '$2'} .
-serviceChangeReplyBody -> 'LBRKT' serviceChangeReplyDescriptor 'RBRKT'
- : {serviceChangeResParms, '$2'} .
-serviceChangeReplyBody -> '$empty' : {serviceChangeResParms, #'ServiceChangeResParm'{}}.
-
-errorDescriptor -> 'ErrorToken' 'EQUAL' errorCode 'LBRKT' errorText 'RBRKT'
- : #'ErrorDescriptor'{errorCode = '$3',
- errorText = '$5'} .
-
-errorCode -> safeToken : ensure_uint('$1', 0, 999) .
-
-errorText -> 'QuotedChars' : value_of('$1') .
-errorText -> '$empty' : asn1_NOVALUE .
-
-transactionID -> safeToken : ensure_uint32('$1') .
-
-mId -> domainName : '$1' .
-mId -> domainAddress : '$1' .
-mId -> optSep mtpAddress optSep : '$2' .
-mId -> optSep deviceName optSep : '$2' .
-
-domainName -> 'LESSER' safeToken 'GREATER' 'COLON' portNumber optSep
- : ensure_domainName('$2', '$5') .
-domainName -> 'LESSER' safeToken 'GREATER'
- : ensure_domainName('$2', asn1_NOVALUE) .
-
-deviceName -> pathName : {deviceName, '$1'} .
-
-%% '-' is used for NULL context
-contextID -> safeToken : ensure_contextID('$1') .
-
-domainAddress -> 'LSBRKT' daddr 'RSBRKT' 'COLON' portNumber optSep
- : ensure_domainAddress('$2', '$5') .
-domainAddress -> 'LSBRKT' daddr 'RSBRKT'
- : ensure_domainAddress('$2', asn1_NOVALUE) .
-
-daddr -> '$empty' : [] .
-daddr -> 'COLON' daddr : [colon| '$2'] .
-daddr -> safeToken daddr : ['$1'| '$2'] .
-
-
-portNumber -> safeToken : ensure_uint16('$1') .
-
-mtpAddress -> 'MtpAddressToken' : ensure_mtpAddress('$1') .
-
-%% terminationIDList -> LBRKT terminationID *(COMMA terminationID) RBRKT .
-
-terminationIDList -> 'LBRKT' terminationID terminationIDListRepeat 'RBRKT'
- : ['$2' | '$3'] .
-
-terminationIDListRepeat -> 'COMMA' terminationID terminationIDListRepeat
- : ['$2'| '$3'] .
-terminationIDListRepeat -> '$empty' : [] .
-
-
-pathName -> safeToken : ensure_pathName('$1') .
-
-terminationID -> safeToken : ensure_terminationID('$1') .
-
-mediaDescriptor -> 'MediaToken' 'LBRKT' mediaParm mediaParmList 'RBRKT'
- : merge_mediaDescriptor(['$3' | '$4']) .
-
-mediaParmList -> 'COMMA' mediaParm mediaParmList : ['$2' | '$3'] .
-mediaParmList -> '$empty' : [] .
-
-
-%% at-most-once per item
-%% using either streamParms or streamDescriptors but not both
-mediaParm -> streamParm
- : {streamParm, '$1'} .
-mediaParm -> streamDescriptor
- : {streamDescriptor, '$1'} .
-mediaParm -> terminationStateDescriptor
- : {termState, '$1'} .
-
-%% at-most-onc .
-%% Specially treated by the scanner.
-streamParm -> 'LocalDescriptorToken' :
- PGs = ensure_prop_groups('$1'),
- {local, #'LocalRemoteDescriptor'{propGrps = PGs}} .
-streamParm -> 'RemoteDescriptorToken' :
- PGs = ensure_prop_groups('$1'),
- {remote, #'LocalRemoteDescriptor'{propGrps = PGs}} .
-streamParm -> localControlDescriptor : {control, '$1'} .
-streamParm -> statisticsDescriptor : {statistics, '$1'} .
-
-streamDescriptor -> 'StreamToken' 'EQUAL' streamID
- 'LBRKT' streamParm streamParmList 'RBRKT'
- : #'StreamDescriptor'{streamID = '$3',
- streamParms = merge_streamParms(['$5' | '$6'])} .
-
-streamParmList -> 'COMMA' streamParm streamParmList : ['$2' | '$3'] .
-streamParmList -> '$empty' : [] .
-
-localControlDescriptor -> 'LocalControlToken' 'LBRKT' localParm localParmList 'RBRKT'
- : ['$3' | '$4'] .
-
-localParmList -> 'COMMA' localParm localParmList : ['$2' | '$3'] .
-localParmList -> '$empty': [] .
-
-terminationStateDescriptor -> 'TerminationStateToken'
- 'LBRKT' terminationStateParm
- terminationStateParms 'RBRKT'
- : merge_terminationStateDescriptor(['$3' | '$4']) .
-
-terminationStateParms -> 'COMMA' terminationStateParm terminationStateParms : ['$2' | '$3'] .
-terminationStateParms -> '$empty' : [] .
-
-%% at-most-once per item except for propertyParm
-localParm -> 'ReservedGroupToken' 'EQUAL' onOrOff : {group, '$3'} .
-localParm -> 'ReservedValueToken' 'EQUAL' onOrOff : {value, '$3'} .
-localParm -> 'ModeToken' 'EQUAL' streamModes : {mode, '$3'} .
-localParm -> propertyParm : {prop, '$1'} .
-
-onOrOff -> 'OnToken' : true .
-onOrOff -> 'OffToken' : false .
-
-%% at-most-once
-streamModes -> 'SendonlyToken' : sendOnly .
-streamModes -> 'RecvonlyToken' : recvOnly .
-streamModes -> 'SendrecvToken' : sendRecv .
-streamModes -> 'InactiveToken' : inactive .
-streamModes -> 'LoopbackToken' : loopBack .
-
-propertyParm -> pkgdName parmValue :
- setelement(#'PropertyParm'.name, '$2', '$1') .
-
-parmValue -> 'EQUAL' alternativeValue :
- '$2' .
-
-parmValue -> 'NEQUAL' value :
- #'PropertyParm'{value = ['$2'],
- extraInfo = {relation, unequalTo}} .
-parmValue -> 'LESSER' value :
- #'PropertyParm'{value = ['$2'],
- extraInfo = {relation, smallerThan}} .
-parmValue -> 'GREATER' value :
- #'PropertyParm'{value = ['$2'],
- extraInfo = {relation, greaterThan}} .
-
-%% OTP-4013
-%% alternativeValue = ( VALUE /
-%% LSBRKT VALUE *(COMMA VALUE) RSBRKT /
-%% LSBRKT VALUE COLON VALUE RSBRKT ) /
-%% LBRKT VALUE *(COMMA VALUE) RBRKT
-alternativeValue -> 'LBRKT' value valueList 'RBRKT'
- : #'PropertyParm'{value = ['$2' | '$3'],
- extraInfo = {sublist, false}}. % OR
-
-alternativeValue -> 'LSBRKT' value 'COLON' value 'RSBRKT'
- : #'PropertyParm'{value = ['$2', '$4'],
- extraInfo = {range, true}}.
-
-alternativeValue -> 'LSBRKT' value valueList 'RSBRKT'
- : #'PropertyParm'{value = ['$2' | '$3'],
- extraInfo = {sublist, true}}. % AND
-
-alternativeValue -> value :
- #'PropertyParm'{value = ['$1']} .
-
-valueList -> 'COMMA' value valueList : ['$2' | '$3'] .
-valueList -> '$empty' : [] .
-
-
-eventBufferDescriptor -> 'EventBufferToken' : [] .
-eventBufferDescriptor -> 'EventBufferToken' 'LBRKT' eventSpec eventSpecList 'RBRKT'
- : ['$3' | '$4'] .
-
-eventSpecList -> 'COMMA' eventSpec eventSpecList : ['$2' | '$3'] .
-eventSpecList -> '$empty' : [] .
-
-eventSpec -> observedEvent : merge_eventSpec('$1') .
-
-%% at-most-once per item except for propertyParm
-terminationStateParm -> serviceStates : {serviceState, '$1'} .
-terminationStateParm -> eventBufferControl : {eventBufferControl, '$1'} .
-terminationStateParm -> propertyParm : {propertyParm, '$1'} .
-
-serviceStates -> 'ServiceStatesToken' 'EQUAL' serviceState : '$3' .
-
-serviceState -> 'TestToken' : test .
-serviceState -> 'OutOfSvcToken' : outOfSvc .
-serviceState -> 'InSvcToken' : inSvc .
-
-eventBufferControl -> 'BufferToken' 'EQUAL' eventBufferControlState : '$3' .
-
-eventBufferControlState -> 'OffToken' : off .
-eventBufferControlState -> 'LockStepToken' : lockStep .
-
-muxDescriptor -> 'MuxToken' 'EQUAL' muxType terminationIDList :
- #'MuxDescriptor'{muxType = '$3',
- termList = '$4'} .
-
-muxType -> safeToken : ensure_muxType('$1') .
-
-streamID -> safeToken : ensure_streamID('$1') .
-
-pkgdName -> safeToken : ensure_pkgdName('$1') .
-
-eventsDescriptor -> 'EventsToken' :
- #'EventsDescriptor'{requestID = asn1_NOVALUE,
- eventList = []} .
-eventsDescriptor -> 'EventsToken' 'EQUAL' requestID
- 'LBRKT' requestedEvent requestedEvents 'RBRKT' :
- #'EventsDescriptor'{requestID = '$3',
- eventList = ['$5' | '$6']} .
-
-requestedEvents -> 'COMMA' requestedEvent requestedEvents : ['$2' | '$3'] .
-requestedEvents -> '$empty' : [] .
-
-requestedEvent -> pkgdName requestedEventBody :
- setelement(#'RequestedEvent'.pkgdName, '$2', '$1') .
-
-requestedEventBody -> 'LBRKT' eventParameter eventParameters 'RBRKT' :
- merge_eventParameters(['$2' | '$3']) .
-requestedEventBody -> '$empty' : #'RequestedEvent'{evParList = []} .
-
-eventParameters -> 'COMMA' eventParameter eventParameters :
- ['$2' | '$3'] .
-eventParameters -> '$empty' : [] .
-
-%% at-most-once each of embedOrKeepActive , eventDM or eventStream
-eventParameter -> 'KeepActiveToken' : keepActive .
-eventParameter -> embedWithSig : '$1'.
-eventParameter -> embedNoSig : '$1'.
-eventParameter -> eventDM : '$1'.
-eventParameter -> eventStreamOrOther : '$1'.
-
-embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor
- 'COMMA' embedFirst 'RBRKT'
- : {embed, '$3', '$5'} .
-embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
- : {embed, '$3', asn1_NOVALUE} .
-
-embedNoSig -> 'EmbedToken' 'LBRKT' embedFirst 'RBRKT'
- : {embed, asn1_NOVALUE, '$3'} .
-
-embedFirst -> 'EventsToken' :
- #'SecondEventsDescriptor'{requestID = asn1_NOVALUE,
- eventList = []} .
-embedFirst -> 'EventsToken' 'EQUAL' requestID
- 'LBRKT' secondRequestedEvent secondRequestedEvents 'RBRKT' :
- #'SecondEventsDescriptor'{requestID = '$3',
- eventList = ['$5' | '$6']} .
-
-secondRequestedEvents -> 'COMMA' secondRequestedEvent secondRequestedEvents : ['$2' | '$3'] .
-secondRequestedEvents -> '$empty' : [] .
-
-%% at-most-once of each
-secondRequestedEvent -> pkgdName secondRequestedEventBody
- : setelement(#'SecondRequestedEvent'.pkgdName, '$2', '$1') .
-
-secondRequestedEventBody -> 'LBRKT' secondEventParameter secondEventParameters 'RBRKT'
- : merge_secondEventParameters(['$2' | '$3']) .
-secondRequestedEventBody -> '$empty' : #'SecondRequestedEvent'{evParList = []} .
-
-secondEventParameters -> 'COMMA' secondEventParameter secondEventParameters : ['$2' | '$3'] .
-secondEventParameters -> '$empty' : [] .
-
-%% at-most-once each of embedOrKeepActive , eventDM or eventStream
-secondEventParameter -> 'KeepActiveToken' : keepActive .
-secondEventParameter -> embedSig : '$1' .
-secondEventParameter -> eventDM : '$1' .
-secondEventParameter -> eventStreamOrOther : '$1' .
-
-embedSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
- : {second_embed, '$3'} .
-
-eventStreamOrOther -> eventParameterName parmValue :
- select_stream_or_other('$1', '$2') .
-
-eventParameterName -> safeToken : ensure_NAME('$1') .
-
-%% The DigitMapDescriptorToken is specially treated by the scanner
-eventDM -> 'DigitMapDescriptorToken' :
- ensure_eventDM('$1') .
-
-%% H248S-IG (IGv11)
-signalsDescriptor -> 'SignalsToken' 'LBRKT' signalParm signalParms 'RBRKT' :
- ['$3' | '$4'] .
-signalsDescriptor -> 'SignalsToken' : [] .
-
-signalParms -> 'COMMA' signalParm signalParms : [ '$2' | '$3'] .
-signalParms -> '$empty' : [] .
-
-signalParm -> signalList : {seqSigList, '$1'} .
-signalParm -> signalRequest : {signal, '$1'} .
-
-signalRequest -> signalName 'LBRKT' sigParameter sigParameters 'RBRKT'
- : merge_signalRequest('$1', ['$3' | '$4']).
-signalRequest -> signalName : merge_signalRequest('$1', []).
-
-sigParameters -> 'COMMA' sigParameter sigParameters : ['$2' | '$3'] .
-sigParameters -> '$empty' : [] .
-
-%% sigParameter = sigStream / sigSignalType / sigDuration / sigOther /
-%% notifyCompletion / KeepActiveToken /
-%% direction / sigRequestID
-%% sigStream = StreamToken EQUAL StreamID
-%% sigOther = sigParameterName parmValue
-%% sigParameterName = NAME
-%% sigSignalType = SignalTypeToken EQUAL signalType
-%% signalType = (OnOffToken / TimeOutToken / BriefToken)
-%% sigDuration = DurationToken EQUAL UINT16
-%% notifyCompletion = NotifyCompletionToken EQUAL (LBRKT
-%% notificationReason *(COMMA notificationReason)
-%% RBRKT)
-%%
-%% notificationReason = ( TimeOutToken / InterruptByEventToken /
-%% InterruptByNewSignalsDescrToken /
-%% OtherReasonToken )
-%% sigDirection = DirectionToken EQUAL direction
-%% sigRequestID = RequestIDToken EQUAL RequestID
-
-sigParameter -> 'StreamToken' 'EQUAL' streamID :
- {stream, '$3'}.
-sigParameter -> 'SignalTypeToken' 'EQUAL' signalType :
- {signal_type, '$3'} .
-sigParameter -> 'DurationToken' 'EQUAL' safeToken :
- {duration, ensure_uint16('$3')} .
-sigParameter -> 'NotifyCompletionToken' 'EQUAL'
- 'LBRKT' notificationReason notificationReasons 'RBRKT' :
- {notify_completion, ['$4' | '$5']} .
-sigParameter -> 'KeepActiveToken' : keepActive .
-sigParameter -> 'DirectionToken' 'EQUAL' direction : {direction, '$3'} .
-sigParameter -> 'RequestIDToken' 'EQUAL' requestID : {requestId, '$3'} .
-sigParameter -> safeToken parmValue :
- {other, ensure_NAME('$1'), '$2'}.
-
-signalType -> 'OnOffToken' : onOff.
-signalType -> 'TimeOutToken' : timeOut.
-signalType -> 'BriefToken' : brief.
-
-direction -> 'ExternalToken' : external .
-direction -> 'InternalToken' : internal .
-direction -> 'BothToken' : both .
-
-notificationReasons -> 'COMMA' notificationReason notificationReasons : ['$2' | '$3'] .
-notificationReasons -> '$empty' : [] .
-
-notificationReason -> 'TimeOutToken' : onTimeOut .
-notificationReason -> 'InterruptByEventToken' : onInterruptByEvent .
-notificationReason -> 'InterruptByNewSignalsDescrToken' : onInterruptByNewSignalDescr .
-notificationReason -> 'OtherReasonToken' : otherReason .
-
-signalList -> 'SignalListToken' 'EQUAL' signalListId
- 'LBRKT' signalListParm signalListParms 'RBRKT'
- : #'SeqSigList'{id = ensure_uint16('$3'),
- signalList = ['$5' | '$6']} .
-
-signalListParms -> 'COMMA' signalListParm signalListParms :
- ['$2' | '$3'] .
-signalListParms -> '$empty' : [] .
-
-signalListId -> safeToken : ensure_uint16('$1') .
-
-%% exactly once signalType,
-%% at most once duration and every signal parameter
-signalListParm -> signalRequest : '$1'.
-
-signalName -> pkgdName : '$1'.
-
-observedEventsDescriptor -> 'ObservedEventsToken' 'EQUAL' requestID
- 'LBRKT' observedEvent observedEvents 'RBRKT'
- : #'ObservedEventsDescriptor'{requestId = '$3',
- observedEventLst = ['$5' | '$6']} .
-
-observedEvents -> 'COMMA' observedEvent observedEvents : ['$2' | '$3'] .
-observedEvents -> '$empty' : [] .
-
-%%time per event, because it might be buffered
-
-observedEvent -> timeStamp optSep 'COLON' optSep pkgdName observedEventBody :
- merge_observed_event('$6', '$5', '$1') .
-observedEvent -> optSep pkgdName observedEventBody :
- merge_observed_event('$3', '$2', asn1_NOVALUE) .
-
-observedEventBody -> 'LBRKT' observedEventParameter
- observedEventParameters 'RBRKT'
- : ['$2' | '$3'] .
-observedEventBody -> '$empty' : [] .
-
-observedEventParameters -> 'COMMA' observedEventParameter observedEventParameters : ['$2' | '$3'] .
-observedEventParameters -> '$empty' : [] .
-
-%%at-most-once eventStream, every eventParameterName at most once
-observedEventParameter -> eventStreamOrOther : '$1' .
-
-requestID -> safeToken : ensure_requestID('$1') .
-
-%% Deprecated as of Corr 1
-modemDescriptor -> 'ModemToken' 'EQUAL' modemType optPropertyParms .
-modemDescriptor -> 'ModemToken' 'LSBRKT' modemType modemTypeList 'RSBRKT'
- optPropertyParms.
-modemTypeList -> 'COMMA' modemType modemTypeList.
-modemTypeList -> '$empty'.
-modemType -> safeToken.
-
-optPropertyParms -> 'LBRKT' propertyParm propertyParmList 'RBRKT' :
- ['$2' | '$3'] .
-optPropertyParms -> '$empty' : [] .
-
-propertyParms -> propertyParm propertyParmList : ['$1' | '$2'] .
-propertyParmList -> 'COMMA' propertyParm propertyParmList : ['$2' | '$3'] .
-propertyParmList -> '$empty' : [] .
-
-% parmName -> safeToken : ensure_NAME('$1') .
-
-%% The DigitMapDescriptorToken is specially treated by the scanner
-digitMapDescriptor -> 'DigitMapDescriptorToken' :
- ensure_DMD('$1') .
-
-%% each parameter at-most-once, except auditItem
-%% at most one of either serviceChangeAddress or serviceChangeMgcId but
-%% not both. serviceChangeMethod and serviceChangeReason are REQUIRED
-serviceChangeDescriptor -> 'ServicesToken'
- 'LBRKT' serviceChangeParm
- serviceChangeParms 'RBRKT' :
- merge_ServiceChangeParm(['$3' | '$4']) .
-
-serviceChangeParms -> 'COMMA' serviceChangeParm serviceChangeParms :
- ['$2' | '$3'] .
-serviceChangeParms -> '$empty' : [] .
-
-serviceChangeParm -> serviceChangeMethod : {method, '$1'} .
-serviceChangeParm -> serviceChangeReason : {reason, '$1'} .
-serviceChangeParm -> serviceChangeDelay : {delay, '$1'} .
-serviceChangeParm -> serviceChangeAddress : {address, '$1'} .
-serviceChangeParm -> serviceChangeProfile : {profile, '$1'} .
-serviceChangeParm -> extension : {extension, '$1'} .
-serviceChangeParm -> timeStamp : {time_stamp, '$1'} .
-serviceChangeParm -> serviceChangeMgcId : {mgc_id, '$1'} .
-serviceChangeParm -> serviceChangeVersion : {version, '$1'} .
-serviceChangeParm -> 'ServiceChangeIncompleteToken' : incomplete . % v3
-serviceChangeParm -> auditItem : {audit_item, '$1'} . % v2
-
-serviceChangeMethod -> 'MethodToken' 'EQUAL' safeToken :
- ensure_serviceChangeMethod('$3') .
-
-serviceChangeReason -> 'ReasonToken' 'EQUAL' value : ['$3'] .
-
-serviceChangeDelay -> 'DelayToken' 'EQUAL' safeToken : ensure_uint32('$3').
-
-serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' mId : '$3' .
-serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' portNumber :
- {portNumber, '$3'} .
-
-serviceChangeMgcId -> 'MgcIdToken' 'EQUAL' mId : '$3' .
-
-serviceChangeProfile -> 'ProfileToken' 'EQUAL' safeToken : ensure_profile('$3').
-
-serviceChangeVersion -> 'VersionToken' 'EQUAL' safeToken : ensure_version('$3') .
-
-extension -> extensionParameter parmValue
- : setelement(#'PropertyParm'.name, '$2', '$1') .
-
-%% at most once. Version is REQUIRED on first ServiceChange response
-%% at most of either serviceChangeAddress or serviceChangeMgcId but not both
-serviceChangeReplyDescriptor -> 'ServicesToken'
- 'LBRKT' servChgReplyParm
- servChgReplyParms 'RBRKT' :
- merge_ServiceChangeResParm(['$3' | '$4']) .
-
-servChgReplyParms -> 'COMMA' servChgReplyParm servChgReplyParms :
- ['$2' | '$3'] .
-servChgReplyParms -> '$empty' : [] .
-
-servChgReplyParm -> serviceChangeAddress : {address, '$1'} .
-servChgReplyParm -> serviceChangeMgcId : {mgc_id, '$1'} .
-servChgReplyParm -> serviceChangeProfile : {profile, '$1'} .
-servChgReplyParm -> serviceChangeVersion : {version, '$1'} .
-servChgReplyParm -> timeStamp : {time_stamp,'$1'} .
-
-packagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem
- packagesItems 'RBRKT'
- : ['$3' | '$4'] .
-
-packagesItems -> 'COMMA' packagesItem packagesItems : ['$2' | '$3'] .
-packagesItems -> '$empty' : [] .
-
-packagesItem -> safeToken : ensure_packagesItem('$1') .
-
-timeStamp -> TimeStampToken : ensure_timeStamp('$1') .
-
-statisticsDescriptor -> 'StatsToken'
- 'LBRKT' statisticsParameter
- statisticsParameters 'RBRKT'
- : ['$3' | '$4'] .
-
-statisticsParameters -> 'COMMA' statisticsParameter statisticsParameters : ['$2' | '$3'] .
-statisticsParameters -> '$empty' : [] .
-
-%%at-most-once per item
-statisticsParameter -> pkgdName
- : #'StatisticsParameter'{statName = '$1',
- statValue = asn1_NOVALUE} .
-statisticsParameter -> pkgdName 'EQUAL' value
- : #'StatisticsParameter'{statName = '$1',
- statValue = ['$3']} .
-
-topologyDescriptor -> 'TopologyToken' 'LBRKT' topologyTriple
- topologyTripleList 'RBRKT' : ['$3' | '$4'] .
-
-terminationA -> terminationID : '$1' .
-
-terminationB -> terminationID : '$1' .
-
-topologyTriple -> terminationA 'COMMA'
- terminationB 'COMMA'
- topologyDirection :
- #'TopologyRequest'{terminationFrom = '$1',
- terminationTo = '$3',
- topologyDirection = '$5'} .
-
-topologyTripleList -> '$empty' : [] .
-topologyTripleList -> 'COMMA' topologyTriple topologyTripleList :
- ['$2' | '$3'] .
-
-topologyDirection -> 'BothwayToken' : bothway .
-topologyDirection -> 'IsolateToken' : isolate .
-topologyDirection -> 'OnewayToken' : oneway .
-
-iepsValue -> 'IEPSToken' 'EQUAL' onOrOff : '$3' .
-
-priority -> 'PriorityToken' 'EQUAL' safeToken : ensure_uint16('$3') .
-
-extensionParameter -> safeToken : ensure_extensionParameter('$1') .
-
-value -> 'QuotedChars' : ensure_value('$1') .
-value -> safeToken : ensure_value('$1').
-
-safeToken -> safeToken2 : make_safe_token('$1') .
-
-safeToken2 -> 'SafeChars' : '$1' .
-%% BMK BMK safeToken2 -> 'AddToken' : '$1' .
-safeToken2 -> 'AuditToken' : '$1' .
-safeToken2 -> 'AuditCapToken' : '$1' .
-safeToken2 -> 'AuditValueToken' : '$1' .
-safeToken2 -> 'AuthToken' : '$1' .
-safeToken2 -> 'BothToken' : '$1' . % v3
-safeToken2 -> 'BothwayToken' : '$1' .
-safeToken2 -> 'BriefToken' : '$1' .
-safeToken2 -> 'BufferToken' : '$1' .
-safeToken2 -> 'CtxToken' : '$1' .
-%% v3-safeToken2 -> 'ContextAttrToken' : '$1' . % v3
-safeToken2 -> 'ContextAuditToken' : '$1' .
-%% v3-safeToken2 -> 'ContextListToken' : '$1' . % v3
-%% v2-safeToken2 -> 'DigitMapToken' : '$1' .
-%% safeToken2 -> 'DigitMapDescriptorToken' : '$1' .
-%% v3-
-safeToken2 -> 'DirectionToken' : '$1' . % v3
-safeToken2 -> 'DiscardToken' : '$1' .
-safeToken2 -> 'DisconnectedToken' : '$1' .
-safeToken2 -> 'DelayToken' : '$1' .
-safeToken2 -> 'DurationToken' : '$1' .
-safeToken2 -> 'EmbedToken' : '$1' .
-%% BMK BMK safeToken2 -> 'EmergencyToken' : '$1' .
-%% BMK BMK safeToken2 -> 'EmergencyOffToken' : '$1' .
-safeToken2 -> 'ErrorToken' : '$1' .
-%% v2-safeToken2 -> 'EventBufferToken' : '$1' .
-%% v2-safeToken2 -> 'EventsToken' : '$1' .
-%% v3-safeToken2 -> 'ExternalToken' : '$1' . % v3
-safeToken2 -> 'FailoverToken' : '$1' .
-safeToken2 -> 'ForcedToken' : '$1' .
-safeToken2 -> 'GracefulToken' : '$1' .
-safeToken2 -> 'H221Token' : '$1' .
-safeToken2 -> 'H223Token' : '$1' .
-safeToken2 -> 'H226Token' : '$1' .
-safeToken2 -> 'HandOffToken' : '$1' .
-%% v3-safeToken2 -> 'IEPSToken' : '$1' . % v3
-safeToken2 -> 'ImmAckRequiredToken' : '$1' .
-safeToken2 -> 'InactiveToken' : '$1' .
-%% v3-safeToken2 -> 'InternalToken' : '$1' . % v3
-safeToken2 -> 'InterruptByEventToken' : '$1' .
-safeToken2 -> 'InterruptByNewSignalsDescrToken' : '$1' .
-safeToken2 -> 'IsolateToken' : '$1' .
-safeToken2 -> 'InSvcToken' : '$1' .
-safeToken2 -> 'KeepActiveToken' : '$1' .
-%% safeToken2 -> 'LocalToken' : '$1' .
-%% safeToken2 -> 'LocalDescriptorToken' : '$1' .
-safeToken2 -> 'LocalControlToken' : '$1' .
-safeToken2 -> 'LoopbackToken' : '$1' .
-safeToken2 -> 'LockStepToken' : '$1' .
-%% v2-safeToken2 -> 'MediaToken' : '$1' .
-%% safeToken2 -> 'MegacopToken' : '$1' .
-safeToken2 -> 'MethodToken' : '$1' .
-safeToken2 -> 'MgcIdToken' : '$1' .
-safeToken2 -> 'ModeToken' : '$1' .
-%% BMK BMK safeToken2 -> 'ModifyToken' : '$1' .
-%% v2-safeToken2 -> 'ModemToken' : '$1' .
-%% BMK BMK safeToken2 -> 'MoveToken' : '$1' .
-%% safeToken2 -> 'MtpToken' : '$1' .
-%% safeToken2 -> 'MtpAddressToken' : '$1' .
-%% v2-safeToken2 -> 'MuxToken' : '$1' .
-safeToken2 -> 'NotifyToken' : '$1' .
-safeToken2 -> 'NotifyCompletionToken' : '$1' .
-safeToken2 -> 'Nx64Token' : '$1' .
-%% v2-safeToken2 -> 'ObservedEventsToken' : '$1' .
-safeToken2 -> 'OnewayToken' : '$1' .
-safeToken2 -> 'OffToken' : '$1' .
-safeToken2 -> 'OnToken' : '$1' .
-safeToken2 -> 'OnOffToken' : '$1' .
-safeToken2 -> 'OutOfSvcToken' : '$1' .
-safeToken2 -> 'OtherReasonToken' : '$1' .
-%% v2-safeToken2 -> 'PackagesToken' : '$1' .
-safeToken2 -> 'PendingToken' : '$1' .
-%% BMK BMK safeToken2 -> 'PriorityToken' : '$1' .
-safeToken2 -> 'ProfileToken' : '$1' .
-safeToken2 -> 'ReasonToken' : '$1' .
-safeToken2 -> 'RecvonlyToken' : '$1' .
-safeToken2 -> 'ReplyToken' : '$1' .
-%% v3-
-safeToken2 -> 'RequestIDToken' : '$1' . % v3
-safeToken2 -> 'ResponseAckToken' : '$1' .
-safeToken2 -> 'RestartToken' : '$1' .
-%% safeToken2 -> 'RemoteToken' : '$1' .
-%% safeToken2 -> 'RemoteDescriptorToken' : '$1' .
-safeToken2 -> 'ReservedGroupToken' : '$1' .
-safeToken2 -> 'ReservedValueToken' : '$1' .
-safeToken2 -> 'SendonlyToken' : '$1' .
-safeToken2 -> 'SendrecvToken' : '$1' .
-safeToken2 -> 'ServicesToken' : '$1' .
-safeToken2 -> 'ServiceStatesToken' : '$1' .
-safeToken2 -> 'ServiceChangeToken' : '$1' .
-%% v3-safeToken2 -> 'ServiceChangeIncompleteToken' : '$1' . % v3
-safeToken2 -> 'ServiceChangeAddressToken' : '$1' .
-safeToken2 -> 'SignalListToken' : '$1' .
-%% v2-safeToken2 -> 'SignalsToken' : '$1' .
-safeToken2 -> 'SignalTypeToken' : '$1' .
-%% v2-safeToken2 -> 'StatsToken' : '$1' .
-safeToken2 -> 'StreamToken' : '$1' .
-%% BMK safeToken2 -> 'SubtractToken' : '$1' .
-safeToken2 -> 'SynchISDNToken' : '$1' .
-safeToken2 -> 'TerminationStateToken' : '$1' .
-safeToken2 -> 'TestToken' : '$1' .
-safeToken2 -> 'TimeOutToken' : '$1' .
-%% BMK safeToken2 -> 'TopologyToken' : '$1' .
-safeToken2 -> 'TransToken' : '$1' .
-safeToken2 -> 'V18Token' : '$1' .
-safeToken2 -> 'V22Token' : '$1' .
-safeToken2 -> 'V22bisToken' : '$1' .
-safeToken2 -> 'V32Token' : '$1' .
-safeToken2 -> 'V32bisToken' : '$1' .
-safeToken2 -> 'V34Token' : '$1' .
-safeToken2 -> 'V76Token' : '$1' .
-safeToken2 -> 'V90Token' : '$1' .
-safeToken2 -> 'V91Token' : '$1' .
-safeToken2 -> 'VersionToken' : '$1' .
-%% <OTP-7534>
-safeToken2 -> 'AndAUDITSelectToken' : '$1' . % v3
-safeToken2 -> 'EmergencyValueToken' : '$1' . % v3
-safeToken2 -> 'IntsigDelayToken' : '$1' . % v3
-safeToken2 -> 'IterationToken' : '$1' . % v3
-safeToken2 -> 'MessageSegmentToken' : '$1' . % v3
-safeToken2 -> 'NeverNotifyToken' : '$1' . % v3
-safeToken2 -> 'NotifyImmediateToken' : '$1' . % v3
-safeToken2 -> 'NotifyRegulatedToken' : '$1' . % v3
-safeToken2 -> 'OnewayBothToken' : '$1' . % v3
-safeToken2 -> 'OnewayExternalToken' : '$1' . % v3
-safeToken2 -> 'OrAUDITselectToken' : '$1' . % v3
-safeToken2 -> 'ResetEventsDescriptorToken' : '$1' . % v3
-safeToken2 -> 'SegmentationCompleteToken' : '$1' . % v3
-%% </OTP-7534>
-
-Erlang code.
-
-%% The following directive is needed for (significantly) faster compilation
-%% of the generated .erl file by the HiPE compiler. Please do not remove.
--compile([{hipe,[{regalloc,linear_scan}]}]).
-
--include("megaco_text_parser_prev3b.hrl").
-
-
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3c.hrl b/lib/megaco/src/text/megaco_text_parser_prev3c.hrl
deleted file mode 100644
index 2a215d739d..0000000000
--- a/lib/megaco/src/text/megaco_text_parser_prev3c.hrl
+++ /dev/null
@@ -1,1988 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose : Define semantic text parser actions
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
-
--include_lib("megaco/include/megaco.hrl").
--include_lib("megaco/include/megaco_message_prev3c.hrl").
--include("megaco_text_tokens.hrl").
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{make_safe_token,1}]}).
--endif.
-make_safe_token(Token) ->
- {_TokenTag, Line, Text} = Token,
- {safeToken, Line, Text}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_value,1}]}).
--endif.
-ensure_value(Token) ->
- case Token of
- {safeToken, _Line, Text} when is_list(Text) ->
- Text; % We really should ensure length
- {'QuotedChars', _Line, Text} when is_list(Text) ->
- Text; % We really should ensure length
- Text when is_list(Text) ->
- Text % We really should ensure length
- end.
-
-%% NAME = ALPHA *63(ALPHA / DIGIT / "_" )
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_NAME,1}]}).
--endif.
-ensure_NAME(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Text. %% BUGBUG: ensure length and chars
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_requestID,1}]}).
--endif.
-ensure_requestID(Token) ->
- case Token of
- {safeToken, _Line, "*"} ->
- ?megaco_all_request_id;
- _ ->
- ensure_uint32(Token)
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_streamID,1}]}).
--endif.
-ensure_streamID(StreamId) ->
- ensure_uint16(StreamId).
-
-ensure_auth_header(SpiToken, SnToken, AdToken) ->
- Spi = ensure_hex(SpiToken, 8, 8),
- Sn = ensure_hex(SnToken, 8, 8),
- Ad = ensure_hex(AdToken, 24, 64),
- #'AuthenticationHeader'{secParmIndex = Spi, seqNum = Sn, ad = Ad}.
-
-%% The values 0x0, 0xFFFFFFFE and 0xFFFFFFFF are reserved.
-%% ContextID = (UINT32 / "*" / "-" / "$")
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_contextID,1}]}).
--endif.
-ensure_contextID(Token) ->
- {_TokenTag, Line, Text} = Token,
- case Text of
- "*" -> ?megaco_all_context_id;
- "-" -> ?megaco_null_context_id;
- "\$" -> ?megaco_choose_context_id;
- Int ->
- CID = ensure_uint32(Int),
- if
- (CID =/= 0) andalso
- (CID =/= 16#FFFFFFFE) andalso
- (CID =/= 16#FFFFFFFF) ->
- CID;
- true ->
- return_error(Line, {bad_ContextID, CID})
- end
- end.
-
-ensure_domainAddress([{_T, _L, _A} = Addr0], Port) ->
- Addr = ensure_ip4addr(Addr0),
- {ip4Address, #'IP4Address'{address = Addr, portNumber = Port}};
-ensure_domainAddress([colon,colon], Port) ->
- Addr = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
- {ip6Address, #'IP6Address'{address = Addr, portNumber = Port}};
-ensure_domainAddress(Addr0, Port) ->
- Addr = ensure_ip6addr(Addr0),
- {ip6Address, #'IP6Address'{address = Addr, portNumber = Port}}.
-
-split_ip4addr_text([], Acc) ->
- [ lists:reverse(Acc) ];
-split_ip4addr_text([$. | Rest], Acc) ->
- [ lists:reverse(Acc) | split_ip4addr_text(Rest, []) ];
-split_ip4addr_text([H | T], Acc) ->
- split_ip4addr_text(T, [H | Acc]).
-
-
-ensure_ip4addr(Token) ->
- {_TokenTag, Line, Addr} = Token,
- case split_ip4addr_text(Addr, []) of
- [T1, T2, T3, T4] ->
- %% We optimize by sending only the text part (Addr) of
- %% the token to the function.
- %% If something is wrong, then we do not get a proper
- %% position and therefor we catch and issue the
- %% the error again (with the proper line number).
- case (catch [
- ensure_uint(T1, 0, 255),
- ensure_uint(T2, 0, 255),
- ensure_uint(T3, 0, 255),
- ensure_uint(T4, 0, 255)
- ]) of
- A when is_list(A) ->
- A;
- _ ->
- return_error(Line, {bad_IP4address, Addr})
- end;
- _ ->
- return_error(Line, {bad_IP4address, Addr})
- end.
-
-
-ensure_ip6addr([colon,colon|T]) ->
- [H1|T1] = lists:reverse(T),
- case do_ensure_ip6addr(T1, true, [ensure_hex4_or_ip4addr(H1)], 1) of
- {true, A} when length(A) == 16 ->
- A;
- {true, B} when length(B) < 16 ->
- lists:duplicate(16 - length(B), 0) ++ B;
- {true, C} ->
- throw({error, {?MODULE, {bad_mid_ip6addr_length, C}}})
- end;
-ensure_ip6addr(L) ->
- case lists:reverse(L) of
- [colon, colon| T] ->
- case do_ensure_ip6addr(T, true, [], 1) of
- {true, A} when length(A) == 16 ->
- A;
- {true, B} when length(B) < 16 ->
- B ++ lists:duplicate(16 - length(B), 0);
- {true, C} ->
- throw({error, {?MODULE, {bad_mid_ip6addr_length, C}}})
- end;
- [H|L1] -> % A (last element) could be an ip4 address
- case do_ensure_ip6addr(L1,false,[ensure_hex4_or_ip4addr(H)],1) of
- {false, A} when length(A) == 16 ->
- A;
- %% allow a pad even if the address is full (i.e. 16)
- {true, B} when length(B) =< 17 ->
- do_ensure_ip6addr_padding(B, 0);
- {Pad, C} ->
- throw({error, {?MODULE, {bad_mid_ip6addr_length, Pad, C}}})
- end
-
- end.
-
-
-do_ensure_ip6addr([], Pad, Acc, _) ->
- {Pad, lists:flatten(Acc)};
-do_ensure_ip6addr([colon,colon|T], false, Acc, Line) ->
- do_ensure_ip6addr(T, true, [pad|Acc], Line);
-do_ensure_ip6addr([colon,colon|T], true, Acc, Line) ->
- return_error(Line, {bad_mid_duplicate_padding, T, Acc});
-do_ensure_ip6addr([colon|T], Pad, Acc, Line) ->
- do_ensure_ip6addr(T, Pad, Acc, Line);
-do_ensure_ip6addr([{_, Line, _} = A|T], Pad, Acc, _) ->
- do_ensure_ip6addr(T, Pad, [ensure_hex4(A)|Acc], Line).
-
-do_ensure_ip6addr_padding([], _) ->
- [];
-do_ensure_ip6addr_padding([pad|T], N) ->
- lists:duplicate(16 - (N + length(T)), 0) ++ T;
-do_ensure_ip6addr_padding([H|T], N) ->
- [H|do_ensure_ip6addr_padding(T, N+1)].
-
-ensure_hex4_or_ip4addr({TokenTag, Line, Addr} = V) ->
- case string:tokens(Addr, [$.]) of
- [T1, T2, T3, T4] ->
- A1 = ensure_uint({TokenTag, Line, T1}, 0, 255),
- A2 = ensure_uint({TokenTag, Line, T2}, 0, 255),
- A3 = ensure_uint({TokenTag, Line, T3}, 0, 255),
- A4 = ensure_uint({TokenTag, Line, T4}, 0, 255),
- [A1, A2, A3, A4];
- _ ->
- ensure_hex4(V)
- %% %% BMK BMK BMK
- %% %% Here we should test for hexseq
- %% return_error(Line, {bad_IP4address, Addr})
- end.
-
-ensure_hex4({_TokenTag, Line, Hex4})
- when length(Hex4) =< 4, length(Hex4) > 0 ->
- case (catch do_ensure_hex4(Hex4)) of
- IL when is_list(IL) andalso (length(IL) =:= 2) ->
- IL;
- Error ->
- return_error(Line, {bad_hex4, Hex4, Error})
- end.
-
-do_ensure_hex4([_H1, _H2, _H3, _H4] = H) ->
- hex_to_int(H, []);
-do_ensure_hex4([H2, H3, H4]) ->
- hex_to_int([$0, H2, H3, H4], []);
-do_ensure_hex4([H3, H4]) ->
- hex_to_int([$0, $0, H3, H4], []);
-do_ensure_hex4([H4]) ->
- hex_to_int([$0, $0, $0, H4], []).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_domainName,2}]}).
--endif.
-ensure_domainName(Token, Port) ->
- {_TokenTag, _Line, Name} = Token,
- %% BUGBUG: validate name
- {domainName, #'DomainName'{name = Name, portNumber = Port}}.
-
-%% extensionParameter= "X" ("-" / "+") 1*6(ALPHA / DIGIT)
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_extensionParameter,1}]}).
--endif.
-ensure_extensionParameter(Token) ->
- {_TokenTag, Line, Text} = Token,
- case Text of
- [X, S | _Chars] ->
- if
- X /= $X, X /= $x,
- S /= $+, S /= $- ->
- return_error(Line, {bad_extension_parameter, Text});
- true ->
- {extension_parameter, Text}
- end;
- _ ->
- return_error(Line, {bad_extension_parameter, Text})
- end.
-
-ensure_message(MegacopToken, MID, Body) ->
-%% #'ServiceChangeProfile'{profileName = Name,
-%% version = Version} =
-%% ensure_profile(MegacopToken),
-%% case Name of
-%% "megaco" ->
-%% #'Message'{version = Version, mId = MID, messageBody = Body};
-%% [$!] ->
-%% #'Message'{version = Version, mId = MID, messageBody = Body}
-%% end.
- {_TokenTag, Line, Text} = MegacopToken,
- case split_Megacop(Text, []) of
- {Name, Version} ->
- Version2 = ensure_version(Version),
- case Name of
- "megaco" ->
- #'Message'{version = Version2,
- mId = MID,
- messageBody = Body};
- [$!] ->
- #'Message'{version = Version2,
- mId = MID,
- messageBody = Body}
- end;
- _ ->
- return_error(Line, {bad_name_or_version, Text})
- end.
-
-split_Megacop([], _) ->
- error;
-split_Megacop([$/ | Version], Acc) ->
- {lists:reverse(Acc), Version};
-split_Megacop([H | T], Acc) ->
- split_Megacop(T, [H | Acc]).
-
-
-%% Corr1:
-%% As of corr 1 ModemDescriptor has been deprecated.
-%% and since this functon is only used when creating
-%% a ModemDescriptor, iit is removed.
-%% modemType = (V32bisToken / V22bisToken / V18Token /
-%% V22Token / V32Token / V34Token / V90Token /
-%% V91Token / SynchISDNToken / extensionParameter)
-%% ensure_modemType({_TokenTag, _Line, Text} = Token) ->
-%% case Text of
-%% "v32b" -> v32bis;
-%% "v22b" -> v22bis;
-%% "v18" -> v18;
-%% "v22" -> v22;
-%% "v32" -> v32;
-%% "v34" -> v34;
-%% "v90" -> v90;
-%% "v91" -> v91;
-%% "synchisdn" -> synchISDN;
-%% "sn" -> synchISDN;
-%% [$x | _] -> ensure_extensionParameter(Token)
-%% end.
-
-%% An mtp address is five octets long
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_mtpAddress,1}]}).
--endif.
-ensure_mtpAddress(Token) ->
- {_TokenTag, _Line, Addr} = Token,
- %% BUGBUG: validate address
- {mtpAddress, Addr}.
-
-%% MuxType = ( H221Token / H223Token / H226Token / V76Token / extensionParameter )
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_muxType,1}]}).
--endif.
-ensure_muxType(Token) ->
- {_TokenTag, _Line, Text} = Token,
- case Text of
- "h221" -> h221;
- "h223" -> h223;
- "h226" -> h226;
- "v76" -> v76;
- "nx64k" -> nx64k; % v2
- [$x | _] -> ensure_extensionParameter(Token)
- end.
-
-%% packagesItem = NAME "-" UINT16
-%% NAME = ALPHA *63(ALPHA / DIGIT / "_" )
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_packagesItem,1}]}).
--endif.
-ensure_packagesItem(Token) ->
- {_TokenTag, Line, Text} = Token,
- case split_packagesItem(Text, []) of
- {Name, Version} ->
- %% As we don't ensure length of the names, there is no point
- %% in doing the ensure_NAME thing...
- #'PackagesItem'{packageName = Name,
- packageVersion = ensure_uint(Version, 0, 99)};
- _ ->
- return_error(Line, {bad_PackagesItem, Text})
- end.
-
-split_packagesItem([], _) ->
- error;
-split_packagesItem([$- | Version], Acc) ->
- {lists:reverse(Acc), Version};
-split_packagesItem([H|T], Acc) ->
- split_packagesItem(T, [H|Acc]).
-
-
-%% pkgdName = (PackageName / "*") SLASH (ItemID / "*" )
-%% PackageName = NAME
-%% ItemID = NAME
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_pkgdName,1}]}).
--endif.
-ensure_pkgdName(Token) ->
- {_TokenTag, Line, Text} = Token,
- case ensure_pkgdName(Text, []) of
- ok ->
- %% As we don't really do any checks on the strings
- %% (length or content) there is really no point in
- %% "ensuring" the name and item part of the
- %% package name
- %% ensure_name_or_star(Name),
- %% ensure_name_or_star(Item),
- Text;
- _ ->
- return_error(Line, {bad_pkgdName, Text})
- end.
-
-ensure_pkgdName([], _) ->
- error;
-ensure_pkgdName([$/ | T], Acc)
- when ((length(T) > 0) andalso (length(Acc) > 0)) ->
- ok;
-ensure_pkgdName([H | T], Acc) ->
- ensure_pkgdName(T, [H | Acc]).
-
-
-%% -compile({inline,[{ensure_name_or_star,1}]}).
-%% ensure_name_or_star(Val) ->
-%% %% case Token of
-%% %% {_, _, Name} when Name =:= "*" ->
-%% %% Name;
-%% %% _ ->
-%% %% ensure_NAME(Token)
-%% %% end.
-%% if
-%% Val =:= "*" ->
-%% Val;
-%% true ->
-%% %% as we don't really validate the text part of the token(s),
-%% %% we can just return the value assuming it to be correct...
-%% Val
-%% end.
-
-
-
-%% v2 - start
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_indAudMediaDescriptor,1}]}).
--endif.
-merge_indAudMediaDescriptor(Vals) ->
- merge_indAudMediaDescriptor(Vals, #'IndAudMediaDescriptor'{}).
-
-merge_indAudMediaDescriptor(
- [], #'IndAudMediaDescriptor'{streams = Streams1} = D) ->
- Streams2 =
- case Streams1 of
- {multiStream, Descs} ->
- {multiStream, lists:reverse(Descs)};
- _ ->
- Streams1
- end,
- D#'IndAudMediaDescriptor'{streams = Streams2};
-merge_indAudMediaDescriptor([{termStateDescr, Val}|Vals], D)
- when D#'IndAudMediaDescriptor'.termStateDescr == asn1_NOVALUE ->
- D2 = #'IndAudMediaDescriptor'{termStateDescr = Val},
- merge_indAudMediaDescriptor(Vals, D2);
-merge_indAudMediaDescriptor([{streamParm, Val}|Vals], D)
- when D#'IndAudMediaDescriptor'.streams == asn1_NOVALUE ->
- D2 = #'IndAudMediaDescriptor'{streams = {oneStream, Val}},
- merge_indAudMediaDescriptor(Vals, D2);
-merge_indAudMediaDescriptor([{streamDescr, Val}|Vals], D)
- when D#'IndAudMediaDescriptor'.streams == asn1_NOVALUE ->
- D2 = #'IndAudMediaDescriptor'{streams = {multiStream, [Val]}},
- merge_indAudMediaDescriptor(Vals, D2);
-merge_indAudMediaDescriptor([{streamDescr, Val}|Vals],
- #'IndAudMediaDescriptor'{streams = Streams1} = D1) ->
- Streams2 =
- case Streams1 of
- {multiStream, Descs} ->
- {multiStream, [Val|Descs]};
- _ ->
- return_error(0, {bad_IndAudMediaDescriptor_streamDescr,
- Val, Streams1})
- end,
- D2 = D1#'IndAudMediaDescriptor'{streams = Streams2},
- merge_indAudMediaDescriptor(Vals, D2);
-merge_indAudMediaDescriptor([{Tag, Val}|_], D) ->
- case Tag of
- termStateDescr ->
- return_error(0, {bad_IndAudMediaDescriptor_termStateDescr,
- Val, D#'IndAudMediaDescriptor'.termStateDescr});
- streamParm ->
- return_error(0, {bad_IndAudMediaDescriptor_streamParm,
- Val, D#'IndAudMediaDescriptor'.streams});
- streamDescr ->
- return_error(0, {bad_IndAudMediaDescriptor_streamDescr,
- Val, D#'IndAudMediaDescriptor'.streams});
- _ ->
- return_error(0, {bad_IndAudMediaDescriptor_tag, Tag, Val})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_indAudLocalControlDescriptor,1}]}).
--endif.
-merge_indAudLocalControlDescriptor(Parms) ->
- merge_indAudLocalControlDescriptor(Parms,
- #'IndAudLocalControlDescriptor'{},
- asn1_NOVALUE).
-
-merge_indAudLocalControlDescriptor([modeToken | Parms], D, PP)
- when (D#'IndAudLocalControlDescriptor'.streamMode == asn1_NOVALUE) andalso
- (D#'IndAudLocalControlDescriptor'.streamModeSel == asn1_NOVALUE) ->
- D2 = D#'IndAudLocalControlDescriptor'{streamMode = 'NULL'},
- merge_indAudLocalControlDescriptor(Parms, D2, PP);
-
-merge_indAudLocalControlDescriptor([modeToken | Parms], D, PP)
- when (D#'IndAudLocalControlDescriptor'.streamMode == asn1_NOVALUE) ->
- merge_indAudLocalControlDescriptor(Parms, D, PP);
-
-merge_indAudLocalControlDescriptor([{mode, Val} | Parms], D, PP)
- when (D#'IndAudLocalControlDescriptor'.streamMode == asn1_NOVALUE) andalso
- (D#'IndAudLocalControlDescriptor'.streamModeSel == asn1_NOVALUE) ->
- D2 =
- case Val of
- {equal, Val2} ->
- D#'IndAudLocalControlDescriptor'{streamModeSel = Val2};
- {inequal, Val2} ->
- D#'IndAudLocalControlDescriptor'{streamModeSel = Val2}
- end,
- merge_indAudLocalControlDescriptor(Parms, D2, PP);
-
-merge_indAudLocalControlDescriptor([{mode, Val} | Parms], D, PP)
- when (D#'IndAudLocalControlDescriptor'.streamModeSel == asn1_NOVALUE) ->
- D2 =
- case Val of
- {equal, Val2} ->
- D#'IndAudLocalControlDescriptor'{streamMode = asn1_NOVALUE,
- streamModeSel = Val2};
- {inequal, Val2} ->
- D#'IndAudLocalControlDescriptor'{streamMode = asn1_NOVALUE,
- streamModeSel = Val2}
- end,
- merge_indAudLocalControlDescriptor(Parms, D2, PP);
-
-merge_indAudLocalControlDescriptor([reservedGroupToken | Parms], D, PP)
- when D#'IndAudLocalControlDescriptor'.reserveGroup == asn1_NOVALUE ->
- D2 = D#'IndAudLocalControlDescriptor'{reserveGroup = 'NULL'},
- merge_indAudLocalControlDescriptor(Parms, D2, PP);
-
-merge_indAudLocalControlDescriptor([reservedValueToken | Parms], D, PP)
- when D#'IndAudLocalControlDescriptor'.reserveValue == asn1_NOVALUE ->
- D2 = D#'IndAudLocalControlDescriptor'{reserveValue = 'NULL'},
- merge_indAudLocalControlDescriptor(Parms, D2, PP);
-
-%% This is really wierd in the standard, so at this point this is the
-%% best I can do... BUGBUG BUGBUG BUGBUG
-%%
-merge_indAudLocalControlDescriptor([{name, Val} | Parms], D, asn1_NOVALUE) ->
- PP = #'IndAudPropertyParm'{name = Val},
- merge_indAudLocalControlDescriptor(Parms, D, PP);
-
-merge_indAudLocalControlDescriptor([{name, Val} | Parms], D, PP)
- when D#'IndAudLocalControlDescriptor'.propertyParms == asn1_NOVALUE ->
- D2 = D#'IndAudLocalControlDescriptor'{propertyParms = [PP]},
- PP2 = #'IndAudPropertyParm'{name = Val},
- merge_indAudLocalControlDescriptor(Parms, D2, PP2);
-
-merge_indAudLocalControlDescriptor([{name, Val} | Parms], D, PP) ->
- PPs = D#'IndAudLocalControlDescriptor'.propertyParms,
- D2 = D#'IndAudLocalControlDescriptor'{propertyParms = [PP|PPs]},
- PP2 = #'IndAudPropertyParm'{name = Val},
- merge_indAudLocalControlDescriptor(Parms, D2, PP2);
-
-%% BUGBUG BUGBUG I cannot construct a proper IndAudPropertyParm with
-%% just the prop (the mandatory name part is missing), so for now I
-%% assume that it this has been used, then the name part
-%% (pkgdName) must precide it?
-merge_indAudLocalControlDescriptor([{prop, Val} | Parms], D, PP)
- when (PP =/= asn1_NOVALUE) andalso
- (D#'IndAudLocalControlDescriptor'.propertyParms == asn1_NOVALUE) ->
- PP2 = PP#'IndAudPropertyParm'{propertyParms = Val},
- D2 = D#'IndAudLocalControlDescriptor'{propertyParms = [PP2]},
- merge_indAudLocalControlDescriptor(Parms, D2, asn1_NOVALUE);
-
-merge_indAudLocalControlDescriptor([{prop, Val} | Parms], D, PP)
- when (PP =/= asn1_NOVALUE) andalso
- is_list(D#'IndAudLocalControlDescriptor'.propertyParms) ->
- PPs = D#'IndAudLocalControlDescriptor'.propertyParms,
- PP2 = PP#'IndAudPropertyParm'{propertyParms = Val},
- D2 = D#'IndAudLocalControlDescriptor'{propertyParms = [PP2|PPs]},
- merge_indAudLocalControlDescriptor(Parms, D2, asn1_NOVALUE);
-
-merge_indAudLocalControlDescriptor([H | _T], _D, _PP) ->
- return_error(0, {bad_indAudLocalControlDescriptor_parm, H});
-
-merge_indAudLocalControlDescriptor([], D, asn1_NOVALUE)
- when D#'IndAudLocalControlDescriptor'.propertyParms == asn1_NOVALUE ->
- D;
-merge_indAudLocalControlDescriptor([], D, asn1_NOVALUE) ->
- PPs = D#'IndAudLocalControlDescriptor'.propertyParms,
- PropParms2 = lists:reverse(PPs),
- D#'IndAudLocalControlDescriptor'{propertyParms = PropParms2};
-merge_indAudLocalControlDescriptor([], D, PP)
- when D#'IndAudLocalControlDescriptor'.propertyParms == asn1_NOVALUE ->
- D#'IndAudLocalControlDescriptor'{propertyParms = [PP]};
-merge_indAudLocalControlDescriptor([], D, PP) ->
- PPs = D#'IndAudLocalControlDescriptor'.propertyParms,
- PPs2 = lists:reverse([PP|PPs]),
- D#'IndAudLocalControlDescriptor'{propertyParms = PPs2}.
-
-
-merge_indAudTerminationStateDescriptor({name, Val}) ->
- PropParm = #'IndAudPropertyParm'{name = Val},
- #'IndAudTerminationStateDescriptor'{propertyParms = [PropParm]};
-%% BUGBUG BUGBUG BUGBUG
-merge_indAudTerminationStateDescriptor({prop, Val}) ->
- exit({incomplete_propertyParm_in_indAudTerminationStateDescriptor, Val});
-merge_indAudTerminationStateDescriptor(serviceStatesToken) ->
- #'IndAudTerminationStateDescriptor'{serviceState = 'NULL'};
-merge_indAudTerminationStateDescriptor({serviceStates, {equal, Val}}) ->
- #'IndAudTerminationStateDescriptor'{serviceStateSel = Val};
-merge_indAudTerminationStateDescriptor({serviceStates, {inequal, Val}}) ->
- #'IndAudTerminationStateDescriptor'{serviceStateSel = Val};
-merge_indAudTerminationStateDescriptor(bufferToken) ->
- #'IndAudTerminationStateDescriptor'{eventBufferControl = 'NULL'}.
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_indAudEventBufferDescriptor,2}]}).
--endif.
-merge_indAudEventBufferDescriptor(EventName, SpecParams) ->
- IAEBD = #'IndAudEventBufferDescriptor'{eventName = EventName},
- do_merge_indAudEventBufferDescriptor(SpecParams, IAEBD).
-
-do_merge_indAudEventBufferDescriptor(asn1_NOVALUE, IAEBD) ->
- IAEBD;
-do_merge_indAudEventBufferDescriptor({streamID, StreamID}, IAEBD) ->
- IAEBD#'IndAudEventBufferDescriptor'{streamID = StreamID};
-do_merge_indAudEventBufferDescriptor({eventParameterName, _Name} = EPN,
- IAEBD) ->
- %% BUGBUG BUGBUG BUGBUG
- %% This is an ugly hack to allow the eventParamName which only
- %% exists in the text encoding...
- IAEBD#'IndAudEventBufferDescriptor'{streamID = EPN}.
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_indAudSignalListParm,1}]}).
--endif.
-ensure_indAudSignalListParm(SIG) ->
- if
- is_record(SIG, 'Signal') ->
- ensure_indAudSignal(SIG);
- true ->
- return_error(0, {bad_Signal, SIG})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_indAudSignal,1}]}).
--endif.
-ensure_indAudSignal(Sig) ->
- #'Signal'{signalName = SignalName,
- streamID = SID,
- sigType = asn1_NOVALUE,
- duration = asn1_NOVALUE,
- notifyCompletion = asn1_NOVALUE,
- keepActive = asn1_NOVALUE,
- sigParList = [],
- requestID = RID} = Sig,
- #'IndAudSignal'{signalName = SignalName,
- streamID = SID,
- signalRequestID = RID}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_IADMD,1}]}).
--endif.
-ensure_IADMD(Token) ->
- {_TokenTag, _Line, DMD} = Token,
- #'DigitMapDescriptor'{digitMapName = Name,
- digitMapValue = asn1_NOVALUE} = DMD,
- #'IndAudDigitMapDescriptor'{digitMapName = Name}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_indAudPackagesDescriptor,1}]}).
--endif.
-merge_indAudPackagesDescriptor(Pkgs) ->
- #'PackagesItem'{packageName = N,
- packageVersion = V} = Pkgs,
- #'IndAudPackagesDescriptor'{packageName = N,
- packageVersion = V}.
-
-
-%% ensure_indAudTerminationStateParm(Token) ->
-%% case Token of
-%% {safeToken, _Line, "servicestates"} -> serviceStatesToken;
-%% {safeToken, _Line, "si"} -> serviceStatesToken;
-%% {safeToken, _Line, "buffer"} -> bufferToken;
-%% {safeToken, _Line, "bf"} -> bufferToken;
-%% PkgdName -> {pkgdName,
-%% ensure_pkgdName(PkgdName)}
-%% end.
-
-
-%% Types modified by v2:
-
-merge_auditDescriptor([]) ->
- #'AuditDescriptor'{};
-merge_auditDescriptor(Tokens) when is_list(Tokens) ->
- case lists:keysearch(terminationAudit, 1, Tokens) of
- {value, {terminationAudit, TA}} ->
- case lists:keydelete(terminationAudit, 1, Tokens) of
- [] ->
- #'AuditDescriptor'{auditPropertyToken = TA};
- AuditTokens ->
- #'AuditDescriptor'{auditToken = AuditTokens,
- auditPropertyToken = TA}
- end;
- false ->
- #'AuditDescriptor'{auditToken = Tokens}
- end;
-merge_auditDescriptor(_) ->
- #'AuditDescriptor'{}.
-
-
-%% v2 - end
-
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_ServiceChangeParm,1}]}).
--endif.
-merge_ServiceChangeParm(Parms) ->
- Required = [serviceChangeReason, serviceChangeMethod],
- merge_ServiceChangeParm(Parms, #'ServiceChangeParm'{}, Required).
-
-merge_ServiceChangeParm([], SCP, []) ->
- SCP;
-
-merge_ServiceChangeParm([], _SCP, Required) ->
- exit({missing_required_serviceChangeParm, Required});
-
-merge_ServiceChangeParm([{address, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeAddress == asn1_NOVALUE,
- SCP0#'ServiceChangeParm'.serviceChangeMgcId == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeAddress = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{address, Val}|_Parms], SCP0, _Req)
- when SCP0#'ServiceChangeParm'.serviceChangeAddress == asn1_NOVALUE ->
- MgcId = SCP0#'ServiceChangeParm'.serviceChangeMgcId,
- exit({not_both_address_mgcid_serviceChangeParm, Val, MgcId});
-
-merge_ServiceChangeParm([{mgc_id, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeMgcId == asn1_NOVALUE,
- SCP0#'ServiceChangeParm'.serviceChangeAddress == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeMgcId = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{mgc_id, Val}|_Parms], SCP0, _Req)
- when SCP0#'ServiceChangeParm'.serviceChangeMgcId == asn1_NOVALUE ->
- Addr = SCP0#'ServiceChangeParm'.serviceChangeAddress,
- exit({not_both_address_mgcid_serviceChangeParm, Val, Addr});
-
-merge_ServiceChangeParm([{profile, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeProfile == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeProfile = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{version, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeVersion == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeVersion = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-%% REQUIRED (i.e. no default value)
-merge_ServiceChangeParm([{reason, Val}|Parms], SCP0, Req0)
- when SCP0#'ServiceChangeParm'.serviceChangeReason == undefined ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeReason = Val},
- Req = lists:delete(serviceChangeReason, Req0),
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{delay, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeDelay == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeDelay = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-%% REQUIRED (i.e. no default value)
-merge_ServiceChangeParm([{method, Val}|Parms], SCP0, Req0)
- when SCP0#'ServiceChangeParm'.serviceChangeMethod == undefined ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeMethod = Val},
- Req = lists:delete(serviceChangeMethod, Req0),
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{time_stamp, Val}|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.timeStamp == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{timeStamp = Val},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{extension, _Val}|Parms], SCP0, Req) ->
- merge_ServiceChangeParm(Parms, SCP0, Req);
-
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when (SCP0#'ServiceChangeParm'.serviceChangeInfo == asn1_NOVALUE) andalso
- is_atom(Val) ->
- SCI = #'AuditDescriptor'{auditToken = [Val]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when (SCP0#'ServiceChangeParm'.serviceChangeInfo == asn1_NOVALUE) andalso
- is_tuple(Val) ->
- SCI = #'AuditDescriptor'{auditPropertyToken = [Val]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when is_record(SCP0#'ServiceChangeParm'.serviceChangeInfo, 'AuditDescriptor') andalso
- is_atom(Val) ->
- SCI0 = SCP0#'ServiceChangeParm'.serviceChangeInfo,
- L = SCI0#'AuditDescriptor'.auditToken,
- SCI = SCI0#'AuditDescriptor'{auditToken = [Val|L]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req)
- when is_record(SCP0#'ServiceChangeParm'.serviceChangeInfo, 'AuditDescriptor') andalso
- is_tuple(Val) ->
- SCI0 = SCP0#'ServiceChangeParm'.serviceChangeInfo,
- L = SCI0#'AuditDescriptor'.auditPropertyToken,
- SCI = SCI0#'AuditDescriptor'{auditPropertyToken = [Val|L]},
- SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([incomplete|Parms], SCP0, Req)
- when SCP0#'ServiceChangeParm'.serviceChangeIncompleteFlag == asn1_NOVALUE ->
- SCP = SCP0#'ServiceChangeParm'{serviceChangeIncompleteFlag = 'NULL'},
- merge_ServiceChangeParm(Parms, SCP, Req);
-
-merge_ServiceChangeParm([{Tag, Val}|_Parms], SCP, _Req) ->
- Val2 =
- case Tag of
- address ->
- SCP#'ServiceChangeParm'.serviceChangeAddress;
- mgc_id ->
- SCP#'ServiceChangeParm'.serviceChangeMgcId;
- profile ->
- SCP#'ServiceChangeParm'.serviceChangeProfile;
- version ->
- SCP#'ServiceChangeParm'.serviceChangeVersion;
- reason ->
- SCP#'ServiceChangeParm'.serviceChangeReason;
- delay ->
- SCP#'ServiceChangeParm'.serviceChangeDelay;
- method ->
- SCP#'ServiceChangeParm'.serviceChangeMethod;
- time_stamp ->
- SCP#'ServiceChangeParm'.timeStamp;
- audit_item ->
- SCP#'ServiceChangeParm'.serviceChangeInfo
- end,
- exit({at_most_once_serviceChangeParm, {Tag, Val, Val2}});
-merge_ServiceChangeParm([Parm|_Parms], SCP, _Req) ->
- Parm2 =
- case Parm of
- incomplete ->
- SCP#'ServiceChangeParm'.serviceChangeIncompleteFlag
- end,
- exit({at_most_once_serviceChangeParm, {Parm, Parm2}}).
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_ServiceChangeResParm,1}]}).
--endif.
-merge_ServiceChangeResParm(Parms) ->
- merge_ServiceChangeResParm(Parms, #'ServiceChangeResParm'{}).
-
-merge_ServiceChangeResParm([], SCRP) ->
- SCRP;
-merge_ServiceChangeResParm([{address, Val}|Parms], SCRP0)
- when (SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE) andalso
- (SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE) ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeAddress = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-merge_ServiceChangeResParm([{address, Val}|_Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE ->
- MgcId = SCRP0#'ServiceChangeResParm'.serviceChangeMgcId,
- exit({not_both_address_mgcid_servChgReplyParm, Val, MgcId});
-
-merge_ServiceChangeResParm([{mgc_id, Val}|Parms], SCRP0)
- when (SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE) andalso
- (SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE) ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeMgcId = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-merge_ServiceChangeResParm([{mgc_id, Val}|_Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE ->
- Addr = SCRP0#'ServiceChangeResParm'.serviceChangeAddress,
- exit({not_both_address_mgcid_servChgReplyParm, Val, Addr});
-
-merge_ServiceChangeResParm([{profile, Val}|Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeProfile == asn1_NOVALUE ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeProfile = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-
-merge_ServiceChangeResParm([{version, Val}|Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.serviceChangeVersion == asn1_NOVALUE ->
- SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeVersion = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-
-merge_ServiceChangeResParm([{time_stamp, Val}|Parms], SCRP0)
- when SCRP0#'ServiceChangeResParm'.timeStamp == asn1_NOVALUE ->
- SCRP = SCRP0#'ServiceChangeResParm'{timeStamp = Val},
- merge_ServiceChangeResParm(Parms, SCRP);
-
-merge_ServiceChangeResParm([{Tag, Val}|_Parms], SCRP) ->
- Val2 =
- case Tag of
- address -> SCRP#'ServiceChangeResParm'.serviceChangeAddress;
- mgc_id -> SCRP#'ServiceChangeResParm'.serviceChangeMgcId;
- profile -> SCRP#'ServiceChangeResParm'.serviceChangeProfile;
- version -> SCRP#'ServiceChangeResParm'.serviceChangeVersion;
- time_stamp -> SCRP#'ServiceChangeResParm'.timeStamp
- end,
- exit({at_most_once_servChgReplyParm, {Tag, Val, Val2}}).
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_serviceChangeMethod,1}]}).
--endif.
-ensure_serviceChangeMethod(Token) ->
- case Token of
- {safeToken, _Line, "fl"} ->
- failover;
- {safeToken, _Line, "failover"} ->
- failover;
- {safeToken, _Line, "fo"} ->
- forced;
- {safeToken, _Line, "forced"} ->
- forced;
- {safeToken, _Line, "gr"} ->
- graceful;
- {safeToken, _Line, "graceful"} ->
- graceful;
- {safeToken, _Line, "rs"} ->
- restart;
- {safeToken, _Line, "restart"} ->
- restart;
- {safeToken, _Line, "dc"} ->
- disconnected;
- {safeToken, _Line, "disconnected"} ->
- disconnected;
- {safeToken, _Line, "ho"} ->
- handOff;
- {safeToken, _Line, "handoff"} ->
- handOff;
- {safeToken, Line, Text} ->
- return_error(Line, {bad_serviceChangeMethod, Text})
- end.
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_topologyDescriptor,1}]}).
--endif.
-merge_topologyDescriptor(Components) ->
- merge_topologyDescriptor(Components, #'TopologyRequest'{}, []).
-
-merge_topologyDescriptor([], TR, TRs) ->
- lists:reverse([ensure_TopologyRequest(TR)|TRs]);
-merge_topologyDescriptor(
- [{tid, From}|Comps],
- #'TopologyRequest'{terminationFrom = undefined} = TR1, TRs) ->
- TR2 = TR1#'TopologyRequest'{terminationFrom = From},
- merge_topologyDescriptor(Comps, TR2, TRs);
-merge_topologyDescriptor(
- [{tid, To}|Comps],
- #'TopologyRequest'{terminationTo = undefined} = TR1,
- TRs) ->
- TR2 = TR1#'TopologyRequest'{terminationTo = To},
- merge_topologyDescriptor(Comps, TR2, TRs);
-merge_topologyDescriptor([{tid, From}|Comps], TR1, TRs) ->
- TR2 = #'TopologyRequest'{terminationFrom = From},
- merge_topologyDescriptor(Comps, TR2, [TR1 | TRs]);
-merge_topologyDescriptor([{direction, Dir}|Comps], TR1, TRs) ->
- TR2 = TR1#'TopologyRequest'{topologyDirection = Dir},
- merge_topologyDescriptor(Comps, TR2, TRs);
-merge_topologyDescriptor([{sid, SID}|Comps], TR1, TRs) ->
- TR2 = TR1#'TopologyRequest'{streamID = SID},
- merge_topologyDescriptor(Comps, TR2, TRs);
-merge_topologyDescriptor(
- [{direction_ext, EDir}|Comps],
- #'TopologyRequest'{topologyDirection = asn1_NOVALUE} = TR1, TRs) ->
- TR2 = TR1#'TopologyRequest'{topologyDirection = oneway,
- topologyDirectionExtension = EDir},
- merge_topologyDescriptor(Comps, TR2, TRs);
-merge_topologyDescriptor([{direction_ext, EDir}|Comps], TR1, TRs) ->
- TR2 = TR1#'TopologyRequest'{topologyDirectionExtension = EDir},
- merge_topologyDescriptor(Comps, TR2, TRs);
-merge_topologyDescriptor(Comps, TR, TRs) ->
- return_error(0, {bad_topologyDescriptor, Comps, TR, TRs}).
-
-
-ensure_TopologyRequest(#'TopologyRequest'{terminationFrom = From,
- terminationTo = To,
- topologyDirection = Dir} = R)
- when (From =/= asn1_NOVALUE) andalso
- (To =/= asn1_NOVALUE) andalso
- (Dir =/= asn1_NOVALUE) ->
- R;
-ensure_TopologyRequest(R) ->
- return_error(0, {bad_TopologyRequest, R}).
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_profile,1}]}).
--endif.
-ensure_profile(Token) ->
- {_TokenTag, Line, Text} = Token,
- case string:tokens(Text, [$/]) of
- [Name, Version] ->
- Version2 = ensure_version(Version),
- #'ServiceChangeProfile'{profileName = Name, version = Version2};
- _ ->
- return_error(Line, {bad_profile, Text})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_version,1}]}).
--endif.
-ensure_version(Version) ->
- ensure_uint(Version, 0, 99).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_signalRequest,2}]}).
--endif.
-merge_signalRequest(SignalName, PropertyParms) ->
- Sig = #'Signal'{signalName = SignalName},
- SPL = [],
- do_merge_signalRequest(Sig, PropertyParms, SPL).
-
-do_merge_signalRequest(Sig, [H | T], SPL) ->
- case H of
- {stream, SID} when Sig#'Signal'.streamID == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{streamID = SID}, T, SPL);
- {signal_type, SigType} when Sig#'Signal'.sigType == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{sigType = SigType}, T, SPL);
- {duration, Duration} when Sig#'Signal'.duration == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{duration = Duration}, T, SPL);
- {notify_completion, NC} when Sig#'Signal'.notifyCompletion == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{notifyCompletion = NC}, T, SPL);
- keepActive when Sig#'Signal'.keepActive == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{keepActive = true}, T, SPL);
- {other, Name, PP} ->
- SP = #'SigParameter'{sigParameterName = Name,
- value = PP#'PropertyParm'.value,
- extraInfo = PP#'PropertyParm'.extraInfo},
- do_merge_signalRequest(Sig, T, [SP | SPL]);
- {direction, Dir} when Sig#'Signal'.direction == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{direction = Dir}, T, SPL);
- {requestId, RID} when Sig#'Signal'.requestID == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{requestID = RID}, T, SPL);
- {intersigDelay, ISD} when Sig#'Signal'.intersigDelay == asn1_NOVALUE ->
- do_merge_signalRequest(Sig#'Signal'{intersigDelay = ISD}, T, SPL);
- _ ->
- return_error(0, {bad_sigParm, H})
- end;
-do_merge_signalRequest(Sig, [], SPL) ->
- Sig#'Signal'{sigParList = lists:reverse(SPL)} .
-
-%% eventStream = StreamToken EQUAL StreamID
-%% eventOther = eventParameterName parmValue
--ifdef(megaco_parser_inline).
--compile({inline,[{select_stream_or_other,2}]}).
--endif.
-select_stream_or_other(EventParameterName, ParmValue) ->
-%% io:format("select_stream_or_other -> entry with"
-%% "~n EventParameterName: ~p"
-%% "~n ParmValue: ~p"
-%% "~n", [EventParameterName, ParmValue]),
- if
- (EventParameterName =:= "st") orelse
- (EventParameterName =:= "stream") ->
- case ParmValue of
- #'PropertyParm'{value = [Value]} ->
- {stream, ensure_uint16(Value)};
- _ ->
- {stream, ensure_uint16(ParmValue)}
- end;
- true ->
- #'PropertyParm'{value = Value} = ParmValue,
- EP = #'EventParameter'{eventParameterName = EventParameterName,
- value = Value},
- {other, EP}
- end.
-
-%% select_stream_or_other("st", #'PropertyParm'{value = [Value]}) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other("st", Value) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other("stream", #'PropertyParm'{value = [Value]}) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other("stream", Value) ->
-%% {stream, ensure_uint16(Value)};
-%% select_stream_or_other(Name, #'PropertyParm'{value = Value}) ->
-%% EP = #'EventParameter'{eventParameterName = Name,
-%% value = Value},
-%% {other, EP}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_eventDM,1}]}).
--endif.
-ensure_eventDM(Token) ->
- {_TokenTag, Line, DMD} = Token,
- if
- is_record(DMD, 'DigitMapDescriptor') ->
- Name = DMD#'DigitMapDescriptor'.digitMapName,
- Val = DMD#'DigitMapDescriptor'.digitMapValue,
- if
- (Name =:= asn1_NOVALUE) andalso (Val =/= asn1_NOVALUE) ->
- {'DigitMapValue', Start, Short, Long, Duration, Body} = Val,
- DMV = #'DigitMapValue'{startTimer = Start,
- shortTimer = Short,
- longTimer = Long,
- digitMapBody = Body,
- durationTimer = Duration},
- {eventDM, {digitMapValue, DMV}};
- (Name =/= asn1_NOVALUE) andalso (Val =:= asn1_NOVALUE) ->
- {eventDM, {digitMapName, Name}};
- true ->
- return_error(Line, {bad_eventDM, DMD})
- end;
- true ->
- return_error(Line, {bad_eventDM, DMD})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_DMD,1}]}).
--endif.
-ensure_DMD(Token) ->
- {_TokenTag, Line, DMD} = Token,
- if
- is_record(DMD, 'DigitMapDescriptor') ->
- Val2 =
- case DMD#'DigitMapDescriptor'.digitMapValue of
- %% Note that the values of the digitMapBody and
- %% durationTimers are swapped by the scanner
- %% (this is done because of a problem in the flex scanner).
- #'DigitMapValue'{startTimer = asn1_NOVALUE,
- shortTimer = asn1_NOVALUE,
- longTimer = asn1_NOVALUE,
- durationTimer = [],
- digitMapBody = asn1_NOVALUE} ->
- asn1_NOVALUE;
- #'DigitMapValue'{durationTimer = Body,
- digitMapBody = Duration} = DMV ->
- %% Convert to version 1 DigitMapValue
- DMV#'DigitMapValue'{digitMapBody = Body,
- durationTimer = Duration};
- Other ->
- Other
- end,
- DMD#'DigitMapDescriptor'{digitMapValue = Val2};
- true ->
- return_error(Line, {bad_DigitMapDescriptor, DMD})
- end.
-
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_observed_event,3}]}).
--endif.
-merge_observed_event(ObservedEvents, EventName, TimeStamp) ->
- StreamId = asn1_NOVALUE,
- EPL = [],
- do_merge_observed_event(ObservedEvents, EventName, TimeStamp, StreamId, EPL).
-
-do_merge_observed_event([{stream, StreamID} | T], EventName, TimeStamp, asn1_NOVALUE, EPL) ->
- do_merge_observed_event(T, EventName, TimeStamp, StreamID, EPL);
-do_merge_observed_event([{other, PP} | T], EventName, TimeStamp, StreamID, EPL) ->
- do_merge_observed_event(T, EventName, TimeStamp, StreamID, [PP | EPL]);
-do_merge_observed_event([], EventName, TimeStamp, StreamID, EPL) ->
- #'ObservedEvent'{eventName = EventName,
- timeNotation = TimeStamp,
- streamID = StreamID,
- eventParList = lists:reverse(EPL)}.
-
-merge_eventSpec(OE)
- when is_record(OE, 'ObservedEvent') andalso
- (OE#'ObservedEvent'.timeNotation == asn1_NOVALUE) ->
- #'EventSpec'{eventName = OE#'ObservedEvent'.eventName,
- streamID = OE#'ObservedEvent'.streamID,
- eventParList = OE#'ObservedEvent'.eventParList};
-merge_eventSpec(OE) ->
- return_error(0, {bad_event_spec, OE}).
-
-make_RegulatedEmbeddedDescriptor({embed, SD, SED}) ->
- #'RegulatedEmbeddedDescriptor'{secondEvent = SED,
- signalsDescriptor = SD}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_eventParameters,1}]}).
--endif.
-merge_eventParameters(Params) ->
-%% io:format("merge_eventParameters -> entry"
-%% "~n", []),
- SID = asn1_NOVALUE,
- EPL = [],
- RA = #'RequestedActions'{},
- HasA = no,
- do_merge_eventParameters(Params, SID, EPL, RA, HasA) .
-
-do_merge_eventParameters([H | T], SID, EPL, RA, HasA) ->
-%% io:format("do_merge_eventParameters -> entry with"
-%% "~n H: ~p"
-%% "~n SID: ~p"
-%% "~n EPL: ~p"
-%% "~n RA: ~p"
-%% "~n HasA: ~p"
-%% "~n", [H, SID, EPL, RA, HasA]),
- case H of
- keepActive when RA#'RequestedActions'.keepActive =:= asn1_NOVALUE ->
- RA2 = RA#'RequestedActions'{keepActive = true},
- do_merge_eventParameters(T, SID, EPL, RA2, yes);
- resetEventsDescriptor when RA#'RequestedActions'.resetEventsDescriptor =:= asn1_NOVALUE ->
- RA2 = RA#'RequestedActions'{resetEventsDescriptor = 'NULL'},
- do_merge_eventParameters(T, SID, EPL, RA2, yes);
- {embed, SD, SED} when RA#'RequestedActions'.signalsDescriptor =:= asn1_NOVALUE ->
- RA2 = RA#'RequestedActions'{signalsDescriptor = SD,
- secondEvent = SED},
- do_merge_eventParameters(T, SID, EPL, RA2, yes);
- {eventDM, DM} when RA#'RequestedActions'.eventDM =:= asn1_NOVALUE ->
- RA2 = RA#'RequestedActions'{eventDM = DM},
- do_merge_eventParameters(T, SID, EPL, RA2, yes);
- {stream, NewSID} when SID =:= asn1_NOVALUE ->
- do_merge_eventParameters(T, NewSID, EPL, RA, HasA);
- {other, PP} when is_record(PP, 'PropertyParm') ->
- EP = #'EventParameter'{eventParameterName = PP#'PropertyParm'.name,
- value = PP#'PropertyParm'.value,
- extraInfo = PP#'PropertyParm'.extraInfo},
- do_merge_eventParameters(T, SID, [EP | EPL], RA, HasA);
- {other, EP} when is_record(EP, 'EventParameter') ->
- do_merge_eventParameters(T, SID, [EP | EPL], RA, HasA);
- {notifyBehaviour, NB} when RA#'RequestedActions'.notifyBehaviour =:= asn1_NOVALUE ->
- RA2 = RA#'RequestedActions'{notifyBehaviour = NB},
- do_merge_eventParameters(T, SID, EPL, RA2, yes);
- _ ->
- return_error(0, {bad_eventParameter, H})
- end;
-do_merge_eventParameters([], SID, EPL, RA, yes) ->
-%% io:format("do_merge_eventParameters(yes) -> entry with"
-%% "~n SID: ~p"
-%% "~n EPL: ~p"
-%% "~n RA: ~p"
-%% "~n", [SID, EPL, RA]),
- #'RequestedEvent'{streamID = SID,
- eventAction = RA,
- evParList = lists:reverse(EPL)};
-do_merge_eventParameters([], SID, EPL, _RA, no) ->
-%% io:format("do_merge_eventParameters(no) -> entry with"
-%% "~n SID: ~p"
-%% "~n EPL: ~p"
-%% "~n", [SID, EPL]),
- #'RequestedEvent'{streamID = SID,
- eventAction = asn1_NOVALUE,
- evParList = lists:reverse(EPL)}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_secondEventParameters,1}]}).
--endif.
-merge_secondEventParameters(Params) ->
- SID = asn1_NOVALUE,
- EPL = [],
- SRA = #'SecondRequestedActions'{},
- HasA = no,
- do_merge_secondEventParameters(Params, SID, EPL, SRA, HasA) .
-
-do_merge_secondEventParameters([H | T], SID, EPL, SRA, HasA) ->
- case H of
- keepActive when SRA#'SecondRequestedActions'.keepActive =:= asn1_NOVALUE ->
- SRA2 = SRA#'SecondRequestedActions'{keepActive = true},
- do_merge_secondEventParameters(T, SID, EPL, SRA2, yes);
-
- resetEventsDescriptor when SRA#'SecondRequestedActions'.resetEventsDescriptor =:= asn1_NOVALUE ->
- SRA2 = SRA#'SecondRequestedActions'{resetEventsDescriptor = 'NULL'},
- do_merge_secondEventParameters(T, SID, EPL, SRA2, yes);
-
- {second_embed, SD} when SRA#'SecondRequestedActions'.signalsDescriptor =:= asn1_NOVALUE ->
- SRA2 = SRA#'SecondRequestedActions'{signalsDescriptor = SD},
- do_merge_secondEventParameters(T, SID, EPL, SRA2, yes);
-
- {eventDM, DM} when SRA#'SecondRequestedActions'.eventDM =:= asn1_NOVALUE ->
- SRA2 = SRA#'SecondRequestedActions'{eventDM = DM},
- do_merge_secondEventParameters(T, SID, EPL, SRA2, yes);
-
- {stream, NewSID} when SID =:= asn1_NOVALUE ->
- do_merge_secondEventParameters(T, NewSID, EPL, SRA, HasA);
-
- {other, PP} when is_record(PP, 'PropertyParm') ->
- EP = #'EventParameter'{eventParameterName = PP#'PropertyParm'.name,
- value = PP#'PropertyParm'.value,
- extraInfo = PP#'PropertyParm'.extraInfo},
- do_merge_secondEventParameters(T, SID, [EP | EPL], SRA, HasA);
-
- {other, EP} when is_record(EP, 'EventParameter') ->
- do_merge_secondEventParameters(T, SID, [EP | EPL], SRA, HasA);
-
- {notifyBehaviour, NB} when SRA#'SecondRequestedActions'.notifyBehaviour =:= asn1_NOVALUE ->
- SRA2 = SRA#'SecondRequestedActions'{notifyBehaviour = NB},
- do_merge_secondEventParameters(T, SID, EPL, SRA2, yes);
-
- _ ->
- return_error(0, {bad_secondEventParameter, H})
- end;
-do_merge_secondEventParameters([], SID, EPL, SRA, yes) ->
- #'SecondRequestedEvent'{streamID = SID,
- eventAction = SRA,
- evParList = lists:reverse(EPL)};
-do_merge_secondEventParameters([], SID, EPL, _SRA, no) ->
- #'SecondRequestedEvent'{streamID = SID,
- eventAction = asn1_NOVALUE,
- evParList = lists:reverse(EPL)}.
-
-%% terminationID = "ROOT" / pathName / "$" / "*"
-%% Total length of pathName must not exceed 64 chars.
-%% pathName = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
-%% ["@" pathDomainName ]
-%% ABNF allows two or more consecutive "." although it is meaningless
-%% in a path domain name.
-%% pathDomainName = (ALPHA / DIGIT / "*" )
-%% *63(ALPHA / DIGIT / "-" / "*" / ".")
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_terminationID,1}]}).
--endif.
-ensure_terminationID(Token) ->
- {safeToken, _Line, LowerText} = Token,
- %% terminationID = "ROOT" / pathName / "$" / "*"
- decode_term_id(LowerText, false, [], []).
-
-decode_term_id([H | T], Wild, Id, Component) ->
- case H of
- $/ -> decode_term_id(T, Wild, [lists:reverse(Component) | Id], []);
- $* -> decode_term_id(T, true, Id, [?megaco_all | Component]);
- $$ -> decode_term_id(T, true, Id, [?megaco_choose | Component]);
- _ -> decode_term_id(T, Wild, Id, [H | Component])
- end;
-decode_term_id([], Wild, Id, Component) ->
- Id2 = [lists:reverse(Component) | Id],
- #megaco_term_id{contains_wildcards = Wild, id = lists:reverse(Id2)}.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_pathName,1}]}).
--endif.
-ensure_pathName(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Text. %% BUGBUG: ensure values
-
-%% TimeStamp = Date "T" Time ; per ISO 8601:1988
-%% Date = 8(DIGIT) ; Date = yyyymmdd
-%% Time = 8(DIGIT) ; Time = hhmmssss
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_timeStamp,1}]}).
--endif.
-ensure_timeStamp(Token) ->
- {'TimeStampToken', Line, Text} = Token,
- case string:tokens(Text, [$T, $t]) of
- [Date, Time] ->
- #'TimeNotation'{date = Date, time = Time};
- _ ->
- return_error(Line, {bad_timeStamp, Text})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_transactionID,1}]}).
--endif.
-ensure_transactionID(TransId) ->
- ensure_uint32(TransId).
-
-%% transactionAck = transactionID / (transactionID "-" transactionID)
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_transactionAck,1}]}).
--endif.
-ensure_transactionAck(Tokens) ->
- {safeToken, _Line, Text} = Tokens,
- ensure_transactionAck2(Text, []).
-
-ensure_transactionAck2([], Acc) ->
- Id = lists:reverse(Acc),
- #'TransactionAck'{firstAck = ensure_transactionID(Id)};
-ensure_transactionAck2([$- | Id2], Acc) ->
- Id1 = lists:reverse(Acc),
- #'TransactionAck'{firstAck = ensure_transactionID(Id1),
- lastAck = ensure_transactionID(Id2)};
-ensure_transactionAck2([H|T], Acc) ->
- ensure_transactionAck2(T, [H|Acc]).
-
-
-merge_context_request(asn1_NOVALUE, Prop) ->
- merge_context_request(#'ContextRequest'{}, Prop);
-
-merge_context_request(#'ContextRequest'{priority = asn1_NOVALUE} = CR,
- {priority, Int}) ->
- CR#'ContextRequest'{priority = Int};
-
-merge_context_request(#'ContextRequest'{emergency = asn1_NOVALUE} = CR,
- {emergency, Bool}) ->
- CR#'ContextRequest'{emergency = Bool};
-
-merge_context_request(#'ContextRequest'{topologyReq = asn1_NOVALUE} = CR,
- {topology, Desc}) ->
- CR#'ContextRequest'{topologyReq = Desc};
-
-merge_context_request(#'ContextRequest'{iepscallind = asn1_NOVALUE} = CR,
- {iepsCallind, Ind}) ->
- CR#'ContextRequest'{iepscallind = Ind};
-
-merge_context_request(#'ContextRequest'{contextProp = asn1_NOVALUE} = CR,
- {contextProp, Props}) ->
- CR#'ContextRequest'{contextProp = Props};
-
-merge_context_request(#'ContextRequest'{contextList = asn1_NOVALUE} = CR,
- {contextList, IDs}) ->
- CR#'ContextRequest'{contextList = IDs};
-
-merge_context_request(CR, {Tag, Val}) ->
- Val2 =
- case Tag of
- priority -> CR#'ContextRequest'.priority;
- emergency -> CR#'ContextRequest'.emergency;
- topology -> CR#'ContextRequest'.topologyReq;
- iepsCallind -> CR#'ContextRequest'.iepscallind;
- contextProp -> CR#'ContextRequest'.contextProp;
- contextList -> CR#'ContextRequest'.contextList
- end,
- exit({at_most_once_contextProperty, {Tag, Val, Val2}}).
-
-
-merge_context_attr_audit_request(
- #'ContextAttrAuditRequest'{contextPropAud = asn1_NOVALUE} = CAAR, []) ->
-
- CAAR;
-merge_context_attr_audit_request(
- #'ContextAttrAuditRequest'{contextPropAud = CPA} = CAAR, []) ->
-
- CAAR#'ContextAttrAuditRequest'{contextPropAud = lists:reverse(CPA)};
-merge_context_attr_audit_request(CAAR, [H|T]) ->
- case H of
- priorityAudit when CAAR#'ContextAttrAuditRequest'.priority == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{priority = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- emergencyAudit when CAAR#'ContextAttrAuditRequest'.emergency == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{emergency = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- topologyAudit when CAAR#'ContextAttrAuditRequest'.topology == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{topology = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- iepsCallind when CAAR#'ContextAttrAuditRequest'.iepscallind == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{iepscallind = 'NULL'},
- merge_context_attr_audit_request(CAAR2, T);
-
- {prop, Name} when CAAR#'ContextAttrAuditRequest'.contextPropAud == asn1_NOVALUE ->
- CPA = [#'IndAudPropertyParm'{name = Name}],
- CAAR2 = CAAR#'ContextAttrAuditRequest'{contextPropAud = CPA},
- merge_context_attr_audit_request(CAAR2, T);
-
- {prop, Name} ->
- CPA = CAAR#'ContextAttrAuditRequest'.contextPropAud,
- CPA2 = [#'IndAudPropertyParm'{name = Name}|CPA],
- CAAR2 = CAAR#'ContextAttrAuditRequest'{contextPropAud = CPA2},
- merge_context_attr_audit_request(CAAR2, T);
-
- {select_prio, Prio} when CAAR#'ContextAttrAuditRequest'.selectpriority == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{selectpriority = Prio},
- merge_context_attr_audit_request(CAAR2, T);
-
- {select_emergency, EV} when CAAR#'ContextAttrAuditRequest'.selectemergency == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{selectemergency = EV},
- merge_context_attr_audit_request(CAAR2, T);
-
- {select_ieps, IV} when CAAR#'ContextAttrAuditRequest'.selectiepscallind == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{selectiepscallind = IV},
- merge_context_attr_audit_request(CAAR2, T);
-
- {select_logic, SL} when CAAR#'ContextAttrAuditRequest'.selectLogic == asn1_NOVALUE ->
- CAAR2 = CAAR#'ContextAttrAuditRequest'{selectLogic = SL},
- merge_context_attr_audit_request(CAAR2, T);
-
- %% BUGBUG BUGBUG BUGBUG BUGBUG BUGBUG BUGBUG BUGBUG BUGBUG BUGBUG
- %%
- %% For some strange reason, contextAttrDescriptor was added
- %% to contextAuditSelector. But there is no place for this
- %% info in the ContextAttrAuditRequest. Since contextAttrDescriptor
- %% can also be found in contextProperty (which correspond to
- %% ContextRequest), the question is if this info should go there
- %% or if we shall just drop it. For now we drop it.
- %%
- {contextProp, _PPs} ->
- merge_context_attr_audit_request(CAAR, T);
-
- {contextList, _IDs} ->
- merge_context_attr_audit_request(CAAR, T);
-
- _ ->
- exit({unexpected_contextAttrAudit_item, H})
-
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_action_request,2}]}).
--endif.
-merge_action_request(CtxId, Items) ->
- do_merge_action_request(Items, [], asn1_NOVALUE, asn1_NOVALUE, CtxId).
-
-do_merge_action_request([H|T], CmdReqs, CtxReq, CtxAuditReq, CtxId) ->
- case H of
- {commandRequest, CmdReq} ->
- do_merge_action_request(T, [CmdReq|CmdReqs],
- CtxReq, CtxAuditReq, CtxId);
-
- {contextProp, ContextProp} ->
- do_merge_action_request(T, CmdReqs,
- merge_context_request(CtxReq, ContextProp),
- CtxAuditReq, CtxId);
-
- {contextAudit, ContextAuditReq} when CtxAuditReq == asn1_NOVALUE ->
- do_merge_action_request(T, CmdReqs,
- CtxReq, ContextAuditReq, CtxId)
- end;
-do_merge_action_request([], CmdReqs, CtxReq, CtxAuditReq, CtxId) ->
- #'ActionRequest'{contextId = CtxId,
- contextRequest = strip_ContextRequest(CtxReq),
- contextAttrAuditReq = strip_ContextAttrAuditRequest(CtxAuditReq),
- commandRequests = lists:reverse(CmdReqs)}.
-
-
-%% OTP-5085:
-%% In order to solve a problem in the parser, the error descriptor
-%% has been put last in the non-empty commandReplyList, if it is not
-%% asn1_NOVALUE
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_action_reply,1}]}).
--endif.
-merge_action_reply(Items) ->
- do_merge_action_reply(Items, asn1_NOVALUE, asn1_NOVALUE, []).
-
-do_merge_action_reply([], Err, Ctx, Cmds) ->
- #'ActionReply'{errorDescriptor = Err,
- contextReply = strip_ContextRequest(Ctx),
- commandReply = lists:reverse(Cmds)};
-do_merge_action_reply([H|T], Err0, CR, Cmds) ->
- case H of
- {error, Err1} when Err0 == asn1_NOVALUE ->
- do_merge_action_reply(T, Err1, CR, Cmds);
- {command, Cmd} ->
- do_merge_action_reply(T, Err0, CR, [Cmd | Cmds]);
- {context, CtxProp} ->
- do_merge_action_reply(T, Err0,
- merge_context_request(CR, CtxProp), Cmds)
- end.
-
-merge_auditOther([TID], TAR) ->
- {auditResult,
- #'AuditResult'{terminationID = TID,
- terminationAuditResult = TAR}};
-merge_auditOther(TIDs, TAR) ->
- {auditResultTermList,
- #'TermListAuditResult'{terminationIDList = TIDs,
- terminationAuditResult = TAR}}.
-
-strip_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextProp = asn1_NOVALUE,
- contextList = asn1_NOVALUE}) ->
- asn1_NOVALUE;
-strip_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topologyReq = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextProp = [],
- contextList = asn1_NOVALUE}) ->
- asn1_NOVALUE;
-%% strip_ContextRequest(asn1_NOVALUE) ->
-%% asn1_NOVALUE;
-strip_ContextRequest(R) ->
- R.
-
-strip_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topology = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextPropAud = asn1_NOVALUE,
- selectpriority = asn1_NOVALUE,
- selectemergency = asn1_NOVALUE,
- selectiepscallind = asn1_NOVALUE,
- selectLogic = asn1_NOVALUE}) ->
- asn1_NOVALUE;
-strip_ContextAttrAuditRequest(
- #'ContextAttrAuditRequest'{priority = asn1_NOVALUE,
- emergency = asn1_NOVALUE,
- topology = asn1_NOVALUE,
- iepscallind = asn1_NOVALUE,
- contextPropAud = [],
- selectpriority = asn1_NOVALUE,
- selectemergency = asn1_NOVALUE,
- selectiepscallind = asn1_NOVALUE,
- selectLogic = asn1_NOVALUE}) ->
- asn1_NOVALUE;
-strip_ContextAttrAuditRequest(R) ->
- R.
-
-merge_AmmRequest_descriptors([], Acc) ->
- lists:reverse(Acc);
-merge_AmmRequest_descriptors([{_, deprecated}|Descs], Acc) ->
- merge_AmmRequest_descriptors(Descs, Acc);
-merge_AmmRequest_descriptors([Desc|Descs], Acc) ->
- merge_AmmRequest_descriptors(Descs, [Desc|Acc]).
-
-make_auditRequest([TID], AD) ->
- #'AuditRequest'{terminationID = TID,
- auditDescriptor = AD};
-make_auditRequest([TID|_] = TIDList, AD) ->
- #'AuditRequest'{terminationID = TID,
- auditDescriptor = AD,
- terminationIDList = TIDList}.
-
-make_commandRequest({CmdTag, {_TokenTag, _Line, Text}}, Cmd) ->
- Req = #'CommandRequest'{command = {CmdTag, Cmd}},
- case Text of
- [$w, $- | _] ->
- Req#'CommandRequest'{wildcardReturn = 'NULL'};
- [$o, $-, $w, $- | _] ->
- Req#'CommandRequest'{optional = 'NULL', wildcardReturn = 'NULL'};
- [$o, $- | _] ->
- Req#'CommandRequest'{optional = 'NULL'};
- _ ->
- Req
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_terminationAudit,1}]}).
--endif.
-merge_terminationAudit(AuditReturnParameters) ->
- lists:reverse(do_merge_terminationAudit(AuditReturnParameters, [], [])).
-
-do_merge_terminationAudit([H| T], ARPs, AuditItems) ->
- case H of
- {auditReturnItem, AuditItem} ->
- do_merge_terminationAudit(T, ARPs, [AuditItem | AuditItems]);
- AuditReturnParameter ->
- do_merge_terminationAudit(T, [AuditReturnParameter | ARPs], AuditItems)
- end;
-do_merge_terminationAudit([], AuditReturnParameters, []) ->
- AuditReturnParameters;
-do_merge_terminationAudit([], AuditReturnParameters, AuditItems) ->
- AuditDescriptor = #'AuditDescriptor'{auditToken = AuditItems},
- AuditReturnParameter = {emptyDescriptors, AuditDescriptor},
- [AuditReturnParameter | AuditReturnParameters].
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_mediaDescriptor,1}]}).
--endif.
-merge_mediaDescriptor(MediaParms) ->
- do_merge_mediaDescriptor(MediaParms, asn1_NOVALUE, [], []).
-
-do_merge_mediaDescriptor([H | T], TS, One, Multi) ->
- case H of
- {streamParm, Parm} when Multi =:= [] ->
- do_merge_mediaDescriptor(T, TS, [Parm | One], Multi);
- {streamDescriptor, Desc} when One =:= [] ->
- do_merge_mediaDescriptor(T, TS, One, [Desc | Multi]);
- {termState, TS2} when TS =:= asn1_NOVALUE ->
- do_merge_mediaDescriptor(T, TS2, One, Multi);
- _ ->
- return_error(0, {bad_merge_mediaDescriptor, [H, TS, One, Multi]})
- end;
-do_merge_mediaDescriptor([], TS, One, Multi) ->
- if
- (One =:= []) ->
- if (Multi =:= []) ->
- #'MediaDescriptor'{streams = asn1_NOVALUE,
- termStateDescr = TS};
- true -> % (Multi =/= [])
- Streams = {multiStream, lists:reverse(Multi)},
- #'MediaDescriptor'{streams = Streams,
- termStateDescr = TS}
- end;
- true -> % (One =/= [])
- if
- (Multi =:= []) ->
- Streams = {oneStream, merge_streamParms(One)},
- #'MediaDescriptor'{streams = Streams,
- termStateDescr = TS};
- true -> % (Multi =/= [])
- return_error(0,
- {bad_merge_mediaDescriptor, [TS, One, Multi]})
- end
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_streamParms,1}]}).
--endif.
-merge_streamParms(TaggedStreamParms) ->
- SP = #'StreamParms'{},
- do_merge_streamParms(TaggedStreamParms, SP).
-
-do_merge_streamParms([{Tag, D} | T] = All, SP) ->
- case Tag of
- local when SP#'StreamParms'.localDescriptor =:= asn1_NOVALUE ->
- do_merge_streamParms(T, SP#'StreamParms'{localDescriptor = D});
- remote when SP#'StreamParms'.remoteDescriptor =:= asn1_NOVALUE ->
- do_merge_streamParms(T, SP#'StreamParms'{remoteDescriptor = D});
- control ->
- LCD =
- case SP#'StreamParms'.localControlDescriptor of
- asn1_NOVALUE ->
- #'LocalControlDescriptor'{propertyParms = []};
- PrevLCD ->
- PrevLCD
- end,
- LCD2 = do_merge_control_streamParms(D, LCD),
- do_merge_streamParms(T, SP#'StreamParms'{localControlDescriptor = LCD2});
- statistics when SP#'StreamParms'.statisticsDescriptor =:= asn1_NOVALUE ->
- do_merge_streamParms(T, SP#'StreamParms'{statisticsDescriptor = D});
- _ ->
- return_error(0, {do_merge_streamParms, [All, SP]})
- end;
-do_merge_streamParms([], SP)
- when is_record(SP#'StreamParms'.localControlDescriptor,
- 'LocalControlDescriptor') ->
- LCD = SP#'StreamParms'.localControlDescriptor,
- PP = LCD#'LocalControlDescriptor'.propertyParms,
- LCD2 = LCD#'LocalControlDescriptor'{propertyParms = lists:reverse(PP)},
- SP#'StreamParms'{localControlDescriptor = LCD2};
-do_merge_streamParms([], SP) ->
- SP.
-
-
-do_merge_control_streamParms([{SubTag, SD} | T] = All, LCD) ->
- case SubTag of
- group when LCD#'LocalControlDescriptor'.reserveGroup =:= asn1_NOVALUE ->
- LCD2 = LCD#'LocalControlDescriptor'{reserveGroup = SD},
- do_merge_control_streamParms(T, LCD2);
- value when LCD#'LocalControlDescriptor'.reserveValue =:= asn1_NOVALUE ->
- LCD2 = LCD#'LocalControlDescriptor'{reserveValue = SD},
- do_merge_control_streamParms(T, LCD2);
- mode when LCD#'LocalControlDescriptor'.streamMode =:= asn1_NOVALUE ->
- LCD2 = LCD#'LocalControlDescriptor'{streamMode = SD},
- do_merge_control_streamParms(T, LCD2);
- prop ->
- PP = LCD#'LocalControlDescriptor'.propertyParms,
- LCD2 = LCD#'LocalControlDescriptor'{propertyParms = [SD | PP]},
- do_merge_control_streamParms(T, LCD2);
- _ ->
- return_error(0, {do_merge_control_streamParms, [All, LCD]})
- end;
-do_merge_control_streamParms([], LCD) ->
- LCD.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{merge_terminationStateDescriptor,1}]}).
--endif.
-merge_terminationStateDescriptor(Parms) ->
- TSD = #'TerminationStateDescriptor'{propertyParms = []},
- do_merge_terminationStateDescriptor(Parms, TSD).
-
-do_merge_terminationStateDescriptor([{Tag, Val} | T], TSD) ->
- case Tag of
- serviceState when TSD#'TerminationStateDescriptor'.serviceState =:= asn1_NOVALUE ->
- TSD2 = TSD#'TerminationStateDescriptor'{serviceState = Val},
- do_merge_terminationStateDescriptor(T, TSD2);
- eventBufferControl when TSD#'TerminationStateDescriptor'.eventBufferControl =:= asn1_NOVALUE->
- TSD2 = TSD#'TerminationStateDescriptor'{eventBufferControl = Val},
- do_merge_terminationStateDescriptor(T, TSD2);
- propertyParm ->
- PP = TSD#'TerminationStateDescriptor'.propertyParms,
- TSD2 = TSD#'TerminationStateDescriptor'{propertyParms = [Val | PP]},
- do_merge_terminationStateDescriptor(T, TSD2)
- end;
-do_merge_terminationStateDescriptor([], TSD) ->
- PP = TSD#'TerminationStateDescriptor'.propertyParms,
- TSD#'TerminationStateDescriptor'{propertyParms = lists:reverse(PP)}.
-
--ifdef(megaco_nscanner_props).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_prop_groups,1}]}).
--endif.
-ensure_prop_groups(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Group = [],
- parse_prop_name(Text, Group).
-
-parse_prop_name([Char | Rest] = All, Group) ->
- if
- ?white_space(Char) ->
- parse_prop_name(Rest, Group);
- ?end_of_line(Char) ->
- parse_prop_name(Rest, Group);
- true ->
- Name = [],
- do_parse_prop_name(All, Name, Group)
- end;
-parse_prop_name([] = All, Group) ->
- Name = [],
- do_parse_prop_name(All, Name, Group).
-
-do_parse_prop_name([Char | Rest], Name, Group)
- when (Char =:= $=) andalso (Name =/= []) ->
- %% Now we have a complete name
- if
- (Name =:= "v") andalso (Group =/= []) ->
- %% v= is a property group delimiter,
- %% lets create yet another property group.
- NewGroup = [],
- [lists:reverse(Group) | parse_prop_value(Rest, Name, NewGroup)];
- true ->
- %% Use current property group
- parse_prop_value(Rest, Name, Group)
- end;
-do_parse_prop_name([Char | Rest], Name, Group) ->
- case ?classify_char4(Char) of
- safe_char_upper ->
- do_parse_prop_name(Rest, [Char | Name], Group);
- safe_char ->
- do_parse_prop_name(Rest, [Char | Name], Group);
- _ ->
- return_error(0, {bad_prop_name, lists:reverse(Name), Char})
- end;
-do_parse_prop_name([], [], []) ->
- [];
-do_parse_prop_name([], [], Group) ->
- [lists:reverse(Group)];
-do_parse_prop_name([], Name, Group) when Name =/= [] ->
- %% Assume end of line
- Value = [],
- PP = make_prop_parm(Name, Value),
- Group2 = lists:reverse([PP | Group]),
- [Group2].
-
--ifdef(megaco_parser_inline).
--compile({inline,[{parse_prop_value,3}]}).
--endif.
-parse_prop_value(Chars, Name, Group) ->
- Value = [],
- do_parse_prop_value(Chars, Name, Value, Group).
-
-do_parse_prop_value([Char | Rest], Name, Value, Group) ->
- if
- ?end_of_line(Char) ->
- %% Now we have a complete "name=value" pair
- PP = make_prop_parm(Name, Value),
- parse_prop_name(Rest, [PP | Group]);
- true ->
- do_parse_prop_value(Rest, Name, [Char | Value], Group)
- end;
-do_parse_prop_value([], Name, Value, Group) ->
- %% Assume end of line
- PP = make_prop_parm(Name, Value),
- Group2 = lists:reverse([PP | Group]),
- [Group2].
-
--ifdef(megaco_parser_inline).
--compile({inline,[{make_prop_parm,2}]}).
--endif.
-make_prop_parm(Name, Value) ->
- #'PropertyParm'{name = lists:reverse(Name),
- value = [lists:reverse(Value)]}.
-
--else. % -ifdef(megaco_nscanner_props).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_prop_groups,1}]}).
--endif.
-ensure_prop_groups(Token) ->
- {_TokenTag, _Line, Groups} = Token,
- Groups.
-
-%% do_ensure_prop_groups(Groups) when is_list(Groups) ->
-%% [ensure_prop_group(Group) || Group <- Groups];
-%% do_ensure_prop_groups(BadGroups) ->
-%% throw({error, {?MODULE, {bad_property_groups, BadGroups}}}).
-
-%% -ifdef(megaco_parser_inline).
-%% -compile({inline,[{ensure_prop_group,1}]}).
-%% -endif.
-%% ensure_prop_group(Group) when is_list(Group) ->
-%% [ensure_prop_parm(PropParm) || PropParm <- Group];
-%% ensure_prop_group(BadGroup) ->
-%% throw({error, {?MODULE, {bad_property_group, BadGroup}}}).
-
-%% -ifdef(megaco_parser_inline).
-%% -compile({inline,[{ensure_prop_parm,1}]}).
-%% -endif.
-%% ensure_prop_parm(#property_parm{name = Name,
-%% value = Value}) ->
-%% #'PropertyParm'{name = Name,
-%% value = Value};
-%% ensure_prop_parm(PP) when is_record(PP, 'PropertyParm') ->
-%% PP;
-%% ensure_prop_parm(BadPropParm) ->
-%% throw({error, {?MODULE, {bad_property_parm, BadPropParm}}}).
-
--endif. % -ifdef(megaco_nscanner_props).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint,3}]}).
--endif.
-ensure_uint(Token, Min, Max) ->
- case Token of
- {_TokenTag, Line, Val} when is_integer(Val) ->
- ensure_uint(Val, Min, Max, Line);
- {_TokenTag, Line, Text} ->
- case (catch list_to_integer(Text)) of
- {'EXIT', _} ->
- return_error(Line, {not_an_integer, Text});
- Val when is_integer(Val) ->
- ensure_uint(Val, Min, Max, Line)
- end;
- Val when is_integer(Val) ->
- ensure_uint(Val, Min, Max, 0);
- Text ->
- case (catch list_to_integer(Text)) of
- {'EXIT', _} ->
- return_error(0, {not_an_integer, Text});
- Val when is_integer(Val) ->
- ensure_uint(Val, Min, Max, 0)
- end
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint,4}]}).
--endif.
--dialyzer({nowarn_function, ensure_uint/4}). % Future compat
-ensure_uint(Val, Min, Max, Line) ->
- if
- is_integer(Min) andalso (Val >= Min) ->
- if
- is_integer(Max) andalso (Val =< Max) ->
- Val;
- Max == infinity ->
- Val;
- true ->
- return_error(Line, {too_large_integer, Val, Max})
- end;
- true ->
- return_error(Line, {too_small_integer, Val, Min})
- end.
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint16,1}]}).
--endif.
-ensure_uint16(Int) ->
- ensure_uint(Int, 0, 65535).
-
--ifdef(megaco_parser_inline).
--compile({inline,[{ensure_uint32,1}]}).
--endif.
-ensure_uint32(Int) ->
- ensure_uint(Int, 0, 4294967295) .
-
-%% OTP-4710
-ensure_hex({_TokenTag, _Line, [$0, $x |Chars]}, Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []);
-ensure_hex({_TokenTag, _Line, [$0, $X |Chars]}, Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []);
-ensure_hex([$0, $x |Chars], Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []);
-ensure_hex([$0, $X |Chars], Min, Max) ->
- ensure_uint(length(Chars), Min, Max),
- hex_to_int(Chars, []).
-
-%% OTP-4710
-hex_to_int([], Acc) ->
- lists:reverse(Acc);
-hex_to_int([Char1,Char2|Tail], Acc) ->
- Int1 = hchar_to_int(Char1),
- Int2 = hchar_to_int(Char2),
- Val = Int2 bor (Int1 bsl 4),
- hex_to_int(Tail, [Val| Acc]);
-hex_to_int([Char], Acc) ->
- Int = hchar_to_int(Char),
- lists:reverse([Int|Acc]).
-
-hchar_to_int(Char) when ($0 =< Char) andalso (Char =< $9) ->
- Char - $0;
-hchar_to_int(Char) when ($A =< Char) andalso (Char =< $F) ->
- Char - $A + 10; % OTP-4710
-hchar_to_int(Char) when ($a =< Char) andalso (Char =< $f) ->
- Char - $a + 10. % OTP-4710
-
--ifdef(megaco_parser_inline).
--compile({inline,[{value_of,1}]}).
--endif.
-value_of(Token) ->
- {_TokenTag, _Line, Text} = Token,
- Text.
-
-
-%% -------------------------------------------------------------------
-
-%% d(F) ->
-%% d(F,[]).
-%% d(F, A) ->
-%% %% d(true, F, A).
-%% d(get(dbg), F, A).
-
-%% d(true, F, A) ->
-%% io:format("DBG:~w:" ++ F ++ "~n", [?MODULE | A]);
-%% d(_, _, _) ->
-%% ok.
-
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3c.yrl b/lib/megaco/src/text/megaco_text_parser_prev3c.yrl
deleted file mode 100644
index 42188923a0..0000000000
--- a/lib/megaco/src/text/megaco_text_parser_prev3c.yrl
+++ /dev/null
@@ -1,1679 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%%----------------------------------------------------------------------
-%% Purpose: YECC grammar for text encoding of Megaco/H.248
-%%
-%% DEPRECATED
-%% DEPRECATED
-%% DEPRECATED
-%%
-%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Annex B TEXT ENCODING OF THE PROTOCOL (NORMATIVE)
-%%
-%% B.1 Coding of wildcards
-%%
-%% In a text encoding of the protocol, while TerminationIDs are
-%% arbitrary, by judicious choice of names, the wildcard character, "*"
-%% may be made more useful. When the wildcard character is encountered,
-%% it will "match" all TerminationIDs having the same previous and
-%% following characters (if appropriate). For example, if there were
-%% TerminationIDs of R13/3/1, R13/3/2 and R13/3/3, the TerminationID
-%% R13/3/* would match all of them. There are some circumstances where
-%% ALL Terminations must be referred to. The TerminationID "*" suffices,
-%% and is referred to as ALL. The CHOOSE TerminationID "$" may be used to
-%% signal to the MG that it has to create an ephemeral Termination or
-%% select an idle physical Termination.
-%%
-%% B.2 ABNF specification
-%%
-%% The protocol syntax is presented in ABNF according to RFC2234. The
-%% protocol is not case sensitive. Identifiers are not case sensitive.
-%%
-%% NOTE 1 - This syntax specification does not enforce all restrictions
-%% on element inclusions and values. Some additional
-%% restrictions are stated in comments and other restrictions
-%% appear in the text of this Recommendation. These additional
-%% restrictions are part of the protocol even though not
-%% enforced by this Recommendation.
-%% NOTE 2 - The syntax is context-dependent. For example, "Add" can be
-%% the AddToken or a NAME depending on the context in which it
-%% occurs.
-%%
-%% Everything in the ABNF and text encoding is case insensitive. This
-%% includes TerminationIDs, digitmap Ids etc. SDP is case sensitive as
-%% per RFC 2327.
-%%
-%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Number of expected shift/reduce warnings
-%% This is ugly but...
-%%----------------------------------------------------------------------
-
-Expect 93.
-
-
-%%----------------------------------------------------------------------
-%% Non-terminals
-%%----------------------------------------------------------------------
-
-Nonterminals
-
- actionReply
- actionReplyBody
- actionReplyList
- actionRequest
- actionRequestBody
- actionRequestItem
- actionRequestItems
- actionRequestList
- alternativeValue
- ammParameter
- ammParameters
- ammRequest
- ammRequestBody
- ammToken
- ammsReply
- ammsReplyBody
- ammsToken
- auditDescriptor
- auditDescriptorBody
- auditItem
- auditItemList
- auditOther
- auditReply
- auditRequest
- auditReturnItem
- auditReturnParameter
- auditReturnParameterList
- auditSelectLogic %% v3
- authenticationHeader
- commandReplyList
- commandReplys %% v3
- commandRequest
- contextAttrDescriptor %% v3
- contextAudit
- contextAuditProperties
- contextAuditProperty
- contextAuditSelector %% v3
- contextID
- contextIdList %% v3
- contextIDs %% v3
-%% contextProperties %% v3
- contextProperty
-%% contextPropertyList
- contextTerminationAudit
- daddr
- deviceName
- digitMapDescriptor
- direction %% v3
- domainAddress
- domainName
- embedFirst
- embedNoSig
- embedSig
- embedWithSig
- emergencyValue %% v3
- errorCode
- errorDescriptor
- errorText
- eventBufferControl
- eventBufferControlValue %% v3
- eventBufferDescriptor
- eventDM
- eventParameter
- eventParameterName
- eventParameters
- eventSpec
- eventSpecList
- eventStream
- eventStreamOrOther
- eventsDescriptor
- extension
- extensionParameter
-
- iaServiceStates %% v3
- iepsValue
-
- %% v2 - start
- indAudauditReturnParameter
- indAuddigitMapDescriptor
- indAudeventBufferDescriptor
- indAudeventSpec
- indAudeventSpecParameter
- %% indAudeventSpecParameterList
- indAudeventsDescriptor
- indAudlocalControlDescriptor
- indAudlocalParm
- indAudlocalParmList
- indAudmediaDescriptor
- indAudmediaParm
- indAudmediaParms %% v3
- %% indAudmediaParmList
- indAudpackagesDescriptor
- indAudrequestedEvent
- indAudsignalsDescriptor
- indAudsignalList
- %% indAudsignalListParm
- indAudsignalParm
- %% indAudsignalRequest
- indAudstreamDescriptor
- indAudstreamParm
- indAudstatisticsDescriptor
- indAudterminationAudit
- indAudterminationAuditList
- indAudterminationStateDescriptor
- indAudterminationStateParm
- %% indAudterminationStateParmList
- optIndAudeventSpecParameter
- optIndAudsignalParm
- %% v2 - end
-
- indAudcontextAttrDescriptor %% v3
-
- localControlDescriptor
- localParm
- localParmList
- mId
- mediaDescriptor
- mediaParm
- mediaParmList
- megacoMessage
- message
- messageBody
- modemDescriptor % Deprecated as of Corr 1
- modemType % Deprecated as of Corr 1
- modemTypeList % Deprecated as of Corr 1
- mtpAddress
- muxDescriptor
- muxType
- notificationReason
- notificationReasons
- notifyBehaviour %% v3
- notifyRegulated %% v3
- notifyReply
- notifyReplyBody
- notifyRequest
- notifyRequestBody
- observedEvent
- observedEventBody
- observedEventParameter
- observedEventParameters
- % observedEventTimeStamp
- observedEvents
- observedEventsDescriptor
- onOrOff
- optAuditDescriptor
- optImmAckRequired
- optPropertyParms
- optSep
- packagesDescriptor
- packagesItem
- packagesItems
- %% parmName
- parmValue
- pathName
- pkgdName
- portNumber
- priority
- propertyParm
- propertyParms
- propertyParmList
- requestID
- requestedEvent
- requestedEventBody
- requestedEvents
- safeToken
- safeToken2
- secondEventParameter
- secondEventParameters
- secondRequestedEvent
- secondRequestedEventBody
- secondRequestedEvents
- servChgReplyParm
- servChgReplyParms
- serviceChangeAddress
- serviceChangeDelay
- serviceChangeDescriptor
- serviceChangeMethod
- serviceChangeMgcId
- serviceChangeParm
- serviceChangeParms
- serviceChangeProfile
- serviceChangeReason
- serviceChangeReply
- serviceChangeReplyBody
- serviceChangeReplyDescriptor
- serviceChangeRequest
- serviceChangeVersion
- serviceStates
- serviceStatesValue %% v3
- sigParameter
- sigParameters
- signalList
- signalListId
- signalListParm
- signalListParms
- signalName
- signalParm
- signalParms
- signalRequest
- signalsDescriptor
- signalType
- statisticsDescriptor
- statisticsParameter
- statisticsParameters
- streamDescriptor
- streamID
- streamModes
- streamParm
- streamParmList
- subtractRequest
- termIDList %% v3
- terminationAudit
- terminationID
- terminationIDList
- terminationIDListRepeat
- terminationStateDescriptor
- terminationStateParm
- terminationStateParms
- timeStamp
- topologyDescriptor
- topologyDirection
- topologyDescComp
- topologyDescCompList
- transactionAck
- transactionAckList
- transactionID
- transactionItem
- transactionList
- transactionPending
- transactionReply
- transactionReplyBody
- transactionRequest
- transactionResponseAck
- value
- valueList
-
-.
-
-%%----------------------------------------------------------------------
-%% Terminals
-%%----------------------------------------------------------------------
-
-Terminals
-
- 'AddToken'
- 'AndAUDITselectToken' %% v3
- 'AuditCapToken'
- 'AuditToken'
- 'AuditValueToken'
- 'AuthToken'
- 'BothToken' %% v3
- 'BothwayToken'
- 'BriefToken'
- 'BufferToken'
- 'COLON'
- 'COMMA'
- 'ContextAttrToken' %% v3
- 'ContextAuditToken'
- 'ContextListToken' %% v3
- 'CtxToken'
- 'DelayToken'
- 'DigitMapToken'
- 'DigitMapDescriptorToken'
- 'DirectionToken' %% v3
- 'DiscardToken'
- 'DisconnectedToken'
- 'DurationToken'
- 'EQUAL'
- 'EmbedToken'
- 'EmergencyToken'
- 'EmergencyOffToken'
- 'EmergencyValueToken' %% v3
- 'ErrorToken'
- 'EventBufferToken'
- 'EventsToken'
- 'ExternalToken' %% v3
- 'FailoverToken'
- 'ForcedToken'
- 'GREATER'
- 'GracefulToken'
- 'H221Token'
- 'H223Token'
- 'H226Token'
- 'HandOffToken'
- 'IEPSToken' %% v3
- 'ImmAckRequiredToken'
- 'INEQUAL' %% v3
- 'InSvcToken'
- 'InactiveToken'
- 'InternalToken' %% v3
- 'InterruptByEventToken'
- 'InterruptByNewSignalsDescrToken'
- 'IntsigDelayToken' %% v3
- 'IsolateToken'
- 'IterationToken' %% v3
- 'KeepActiveToken'
- 'LBRKT'
- 'LESSER'
- 'LSBRKT'
- 'LocalControlToken'
- 'LocalDescriptorToken'
- 'LockStepToken'
- 'LoopbackToken'
- 'MediaToken'
- %% 'MegacopToken'
- 'MethodToken'
- 'MgcIdToken'
- 'ModeToken'
- 'ModemToken'
- 'ModifyToken'
- 'MoveToken'
- 'MtpAddressToken'
- 'MuxToken'
- 'NEQUAL'
- 'NeverNotifyToken' %% v3
- 'NotifyCompletionToken'
- 'NotifyImmediateToken' %% v3
- 'NotifyRegulatedToken' %% v3
- 'NotifyToken'
- 'Nx64Token' %% v2
- 'ObservedEventsToken'
- 'OffToken'
- 'OnToken'
- 'OnOffToken'
- 'OnewayToken'
- 'OnewayExternalToken' %% v3
- 'OnewayBothToken' %% v3
- 'OrAUDITselectToken' %% v3
- 'OtherReasonToken'
- 'OutOfSvcToken'
- 'PackagesToken'
- 'PendingToken'
- 'PriorityToken'
- 'ProfileToken'
- 'QuotedChars'
- 'RBRKT'
- 'RSBRKT'
- 'ReasonToken'
- 'RecvonlyToken'
- 'RemoteDescriptorToken'
- 'ReplyToken'
- 'RequestIDToken' %% v3
- 'ReservedGroupToken'
- 'ReservedValueToken'
- 'ResetEventsDescriptorToken' %% v3
- 'ResponseAckToken'
- 'RestartToken'
- 'SEP'
- 'SafeChars'
- 'SendonlyToken'
- 'SendrecvToken'
- 'ServiceChangeAddressToken'
- 'ServiceChangeToken'
- 'ServiceChangeIncompleteToken'
- 'ServiceStatesToken'
- 'ServicesToken'
- 'SignalListToken'
- 'SignalTypeToken'
- 'SignalsToken'
- 'StatsToken'
- 'StreamToken'
- 'SubtractToken'
- 'SynchISDNToken'
- 'TerminationStateToken'
- 'TestToken'
- 'TimeOutToken'
- 'TimeStampToken'
- 'TopologyToken'
- 'TransToken'
- 'V18Token'
- 'V22Token'
- 'V22bisToken'
- 'V32Token'
- 'V32bisToken'
- 'V34Token'
- 'V76Token'
- 'V90Token'
- 'V91Token'
- 'VersionToken'
- 'MessageSegmentToken' %% OTP-7534: v3-fix
- 'SegmentationCompleteToken' %% OTP-7534: v3-fix
- endOfMessage
-
-.
-
-%%----------------------------------------------------------------------
-%% Root symbol
-%%----------------------------------------------------------------------
-
-Rootsymbol megacoMessage.
-
-%%----------------------------------------------------------------------
-%% The grammar
-%%----------------------------------------------------------------------
-
-%% megacoMessage = LWSP [authenticationHeader SEP ] message
-%% authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON
-%% SequenceNum COLON AuthData
-%%
-%% SecurityParmIndex = "0x" 8(HEXDIG)
-%% SequenceNum = "0x" 8(HEXDIG)
-%% AuthData = "0x" 24*64(HEXDIG)
-%% message = MegacopToken SLASH version SEP mId SEP messageBody
-%% version = 1*2(DIGIT) .
-
-megacoMessage -> optSep authenticationHeader message endOfMessage
- : #'MegacoMessage'{authHeader = '$2', mess = '$3'} .
-
-optSep -> 'SEP' : sep .
-optSep -> '$empty' : no_sep .
-
-authenticationHeader -> 'AuthToken' 'EQUAL' safeToken 'COLON'
- safeToken 'COLON' safeToken optSep
- : ensure_auth_header('$3', '$5', '$7') .
-authenticationHeader -> '$empty' : asn1_NOVALUE .
-
-message -> safeToken mId messageBody :
- ensure_message('$1', '$2', '$3') .
-
-messageBody -> errorDescriptor : {messageError, '$1'} .
-messageBody -> transactionList : {transactions, '$1'} .
-
-transactionList -> transactionItem : ['$1'] .
-transactionList -> transactionItem transactionList : ['$1' | '$2'] .
-
-transactionItem -> transactionRequest : {transactionRequest, '$1'} .
-transactionItem -> transactionReply : {transactionReply, '$1'}.
-transactionItem -> transactionPending : {transactionPending, '$1'} .
-transactionItem -> transactionResponseAck : {transactionResponseAck, '$1'} .
-
-transactionResponseAck -> 'ResponseAckToken'
- 'LBRKT' transactionAck
- transactionAckList 'RBRKT' : ['$3' | '$4'] .
-
-transactionAckList -> 'COMMA' transactionAck
- transactionAckList : ['$2' | '$3'] .
-transactionAckList -> '$empty' : [] .
-
-transactionAck -> safeToken : ensure_transactionAck('$1') .
-
-transactionPending -> 'PendingToken' 'EQUAL' transactionID 'LBRKT' 'RBRKT' :
- #'TransactionPending'{transactionId = ensure_transactionID('$3') } .
-
-transactionRequest -> 'TransToken' 'LBRKT' actionRequest
- actionRequestList 'RBRKT' :
- #'TransactionRequest'{transactionId = asn1_NOVALUE,
- actions = ['$3' | '$4']} .
-transactionRequest -> 'TransToken' 'EQUAL' 'LBRKT' actionRequest
- actionRequestList 'RBRKT' :
- #'TransactionRequest'{transactionId = asn1_NOVALUE,
- actions = ['$4' | '$5']} .
-transactionRequest -> 'TransToken' 'EQUAL' transactionID
- 'LBRKT' actionRequest actionRequestList 'RBRKT' :
- #'TransactionRequest'{transactionId = ensure_transactionID('$3'),
- actions = ['$5' | '$6']} .
-
-actionRequestList -> 'COMMA' actionRequest actionRequestList : ['$2' | '$3'] .
-actionRequestList -> '$empty' : [] .
-
-%% actionRequest = CtxToken EQUAL ContextID LBRKT ((contextRequest
-%% [COMMA commandRequestList]) /
-%% commandRequestList) RBRKT
-%% contextRequest = ((contextProperties [COMMA contextAudit]) /
-%% contextAudit)
-%% contextProperties = contextProperty *(COMMA contextProperty)
-
-actionRequest -> 'CtxToken' 'EQUAL' contextID
- 'LBRKT' actionRequestBody 'RBRKT' :
- merge_action_request('$3', '$5') .
-
-actionRequestBody -> actionRequestItem actionRequestItems : ['$1' | '$2'] .
-
-actionRequestItems -> 'COMMA' actionRequestItem
- actionRequestItems : ['$2' | '$3'] .
-actionRequestItems -> '$empty' : [] .
-
-actionRequestItem -> contextProperty : {contextProp, '$1'} .
-actionRequestItem -> contextAudit : {contextAudit, '$1'} .
-actionRequestItem -> commandRequest : {commandRequest, '$1'} .
-
-
-%% at-most-once (presumebly in contextProperties)
-contextProperty -> topologyDescriptor : {topology, '$1'}.
-contextProperty -> priority : {priority, '$1'}.
-contextProperty -> 'EmergencyToken' : {emergency, true}.
-contextProperty -> 'EmergencyOffToken' : {emergency, false}.
-contextProperty -> iepsValue : {iepsCallind, '$1'} .
-contextProperty -> contextAttrDescriptor : '$1' .
-
-contextAttrDescriptor -> 'ContextAttrToken' 'LBRKT' propertyParms 'RBRKT' :
- {contextProp, '$3'}.
-contextAttrDescriptor -> 'ContextAttrToken' 'LBRKT' contextIdList 'RBRKT' :
- {contextList, '$3'}.
-
-contextIdList -> 'ContextListToken' 'EQUAL'
- 'LBRKT' contextID contextIDs 'RBRKT' : ['$4' | '$5'] .
-
-contextIDs -> 'COMMA' contextID contextIDs : ['$2' | '$3'] .
-contextIDs -> '$empty' : [] .
-
-contextAudit -> 'ContextAuditToken' 'LBRKT'
- indAudcontextAttrDescriptor 'RBRKT' :
- merge_context_attr_audit_request(
- #'ContextAttrAuditRequest'{}, '$3') .
-contextAudit -> 'ContextAuditToken' 'LBRKT'
- contextAuditProperty contextAuditProperties 'RBRKT' :
- merge_context_attr_audit_request(
- #'ContextAttrAuditRequest'{}, ['$3' | '$4']) .
-
-indAudcontextAttrDescriptor -> 'ContextAttrToken'
- 'LBRKT' contextAuditProperty
- contextAuditProperties 'RBRKT'
- : ['$3' | '$4'] .
-
-contextAuditProperties -> 'COMMA' contextAuditProperty contextAuditProperties
- : ['$2' | '$3'] .
-contextAuditProperties -> '$empty' : [] .
-
-%% at-most-once except contextAuditSelector.
-contextAuditProperty -> 'TopologyToken' : topologyAudit .
-contextAuditProperty -> 'EmergencyToken' : emergencyAudit .
-contextAuditProperty -> 'PriorityToken' : priorityAudit .
-contextAuditProperty -> 'IEPSToken' : iepsCallind .
-contextAuditProperty -> pkgdName : {prop, '$1'} .
-contextAuditProperty -> contextAuditSelector : '$1' .
-
-%% at-most-once
-contextAuditSelector -> priority : {select_prio, '$1'} .
-contextAuditSelector -> emergencyValue : {select_emergency, '$1'} .
-contextAuditSelector -> iepsValue : {select_ieps, '$1'} .
-contextAuditSelector -> auditSelectLogic : {select_logic, '$1'} .
-contextAuditSelector -> contextAttrDescriptor : '$1' .
-
-auditSelectLogic -> 'AndAUDITselectToken' : {andAUDITSelect, 'NULL'} .
-auditSelectLogic -> 'OrAUDITselectToken' : {orAUDITSelect, 'NULL'} .
-
-commandRequest -> ammRequest : '$1'.
-commandRequest -> subtractRequest : '$1'.
-commandRequest -> auditRequest : '$1'.
-commandRequest -> notifyRequest : '$1'.
-commandRequest -> serviceChangeRequest : '$1'.
-
-transactionReply -> 'ReplyToken' 'EQUAL' transactionID
- 'LBRKT'
- optImmAckRequired transactionReplyBody
- 'RBRKT'
- : #'TransactionReply'{transactionId = '$3',
- immAckRequired = '$5',
- transactionResult = '$6'} .
-
-optImmAckRequired -> 'ImmAckRequiredToken' 'COMMA' : 'NULL' .
-optImmAckRequired -> '$empty' : asn1_NOVALUE .
-
-transactionReplyBody -> errorDescriptor : {transactionError, '$1'} .
-transactionReplyBody -> actionReply actionReplyList : {actionReplies, ['$1' | '$2']} .
-
-actionReplyList -> 'COMMA' actionReply actionReplyList : ['$2' | '$3'] .
-actionReplyList -> '$empty' : [] .
-
-actionReply -> 'CtxToken' 'EQUAL' contextID
- 'LBRKT' actionReplyBody 'RBRKT' :
- setelement(#'ActionReply'.contextId, '$5', '$3') .
-actionReply -> 'CtxToken' 'EQUAL' contextID :
- #'ActionReply'{contextId = '$3'} .
-
-actionReplyBody -> errorDescriptor :
- #'ActionReply'{errorDescriptor = '$1'} .
-actionReplyBody -> commandReplys commandReplyList :
- merge_action_reply(['$1' | '$2']) .
-
-%% OTP-5085
-%% This ugly thing is to fool the parser. The errorDescriptor does not
-%% realy belong here. The merge_action_reply will remove it and put it
-%% in it's right place later.
-commandReplyList -> 'COMMA' errorDescriptor :
- [{error, '$2'}] .
-commandReplyList -> 'COMMA' commandReplys commandReplyList :
- ['$2' | '$3'] .
-commandReplyList -> '$empty' : [] .
-
-commandReplys -> serviceChangeReply : {command, '$1'} .
-commandReplys -> auditReply : {command, '$1'} .
-commandReplys -> ammsReply : {command, '$1'} .
-commandReplys -> notifyReply : {command, '$1'} .
-commandReplys -> contextProperty : {context, '$1'} .
-
-%Add Move and Modify have the same request parameter
-ammRequest -> ammToken 'EQUAL' termIDList ammRequestBody :
- Descs = merge_AmmRequest_descriptors('$4', []),
- make_commandRequest('$1',
- #'AmmRequest'{terminationID = '$3',
- descriptors = Descs}) .
-
-ammToken -> 'AddToken' : {addReq, '$1'} .
-ammToken -> 'MoveToken' : {moveReq, '$1'} .
-ammToken -> 'ModifyToken' : {modReq, '$1'} .
-
-ammRequestBody -> 'LBRKT' ammParameter ammParameters 'RBRKT' : ['$2' | '$3'] .
-ammRequestBody -> '$empty' : [] .
-
-ammParameters -> 'COMMA' ammParameter ammParameters : ['$2' | '$3'] .
-ammParameters -> '$empty' : [] .
-
-%at-most-once
-ammParameter -> mediaDescriptor : {mediaDescriptor, '$1'}.
-ammParameter -> modemDescriptor : {modemDescriptor, deprecated}.
-ammParameter -> muxDescriptor : {muxDescriptor, '$1'}.
-ammParameter -> eventsDescriptor : {eventsDescriptor, '$1'}.
-ammParameter -> eventBufferDescriptor : {eventBufferDescriptor, '$1'}.
-ammParameter -> signalsDescriptor : {signalsDescriptor, '$1'}.
-ammParameter -> digitMapDescriptor : {digitMapDescriptor, '$1'}.
-ammParameter -> auditDescriptor : {auditDescriptor, '$1'}.
-ammParameter -> statisticsDescriptor : {statisticsDescriptor, '$1'}.
-
-ammsReply -> ammsToken 'EQUAL' termIDList ammsReplyBody
- : {'$1', #'AmmsReply'{terminationID = '$3',
- terminationAudit = '$4'}} .
-
-ammsToken -> 'AddToken' : addReply .
-ammsToken -> 'MoveToken' : moveReply .
-ammsToken -> 'ModifyToken' : modReply .
-ammsToken -> 'SubtractToken' : subtractReply .
-
-ammsReplyBody -> 'LBRKT' terminationAudit 'RBRKT' : '$2' .
-ammsReplyBody -> '$empty' : asn1_NOVALUE .
-
-subtractRequest -> 'SubtractToken' 'EQUAL' termIDList optAuditDescriptor :
- SR = #'SubtractRequest'{terminationID = '$3',
- auditDescriptor = '$4'},
- make_commandRequest({subtractReq, '$1'}, SR) .
-
-
-optAuditDescriptor -> 'LBRKT' auditDescriptor 'RBRKT' : '$2'.
-optAuditDescriptor -> '$empty' : asn1_NOVALUE .
-
-auditRequest -> 'AuditValueToken' 'EQUAL' termIDList optAuditDescriptor :
- make_commandRequest({auditValueRequest, '$1'},
- make_auditRequest('$3', '$4')) .
-auditRequest -> 'AuditCapToken' 'EQUAL' termIDList optAuditDescriptor :
- make_commandRequest({auditCapRequest, '$1'},
- make_auditRequest('$3', '$4')) .
-
-auditReply -> 'AuditValueToken' 'EQUAL' 'CtxToken' contextTerminationAudit :
- {auditValueReply, '$4'} .
-auditReply -> 'AuditCapToken' 'EQUAL' 'CtxToken' contextTerminationAudit :
- {auditCapReply, '$4'} .
-auditReply -> 'AuditValueToken' 'EQUAL' auditOther :
- {auditValueReply, '$3'} .
-auditReply -> 'AuditCapToken' 'EQUAL' auditOther :
- {auditCapReply, '$3'} .
-
-contextTerminationAudit -> terminationIDList :
- {contextAuditResult, '$1'} .
-contextTerminationAudit -> 'LBRKT' errorDescriptor 'RBRKT' :
- {error, '$2'} .
-
-auditOther -> termIDList :
- merge_auditOther('$1', []) .
-auditOther -> termIDList 'LBRKT' terminationAudit 'RBRKT' :
- merge_auditOther('$1', '$3') .
-
-
-terminationAudit -> auditReturnParameter auditReturnParameterList :
- merge_terminationAudit(['$1' |'$2' ]) .
-
-auditReturnParameterList -> 'COMMA' auditReturnParameter auditReturnParameterList : ['$2' | '$3'] .
-auditReturnParameterList -> '$empty' : [] .
-
-auditReturnParameter -> mediaDescriptor : {mediaDescriptor, '$1'} .
-auditReturnParameter -> modemDescriptor.
-auditReturnParameter -> muxDescriptor : {muxDescriptor, '$1'} .
-auditReturnParameter -> eventsDescriptor : {eventsDescriptor, '$1'} .
-auditReturnParameter -> signalsDescriptor : {signalsDescriptor, '$1'} .
-auditReturnParameter -> digitMapDescriptor : {digitMapDescriptor, '$1'} .
-auditReturnParameter -> observedEventsDescriptor : {observedEventsDescriptor, '$1'} .
-auditReturnParameter -> eventBufferDescriptor : {eventBufferDescriptor, '$1'} .
-auditReturnParameter -> statisticsDescriptor : {statisticsDescriptor, '$1'} .
-auditReturnParameter -> packagesDescriptor : {packagesDescriptor, '$1'} .
-auditReturnParameter -> errorDescriptor : {errorDescriptor, '$1'} .
-auditReturnParameter -> auditReturnItem : {auditReturnItem, '$1'} .
-
-auditDescriptor -> 'AuditToken' 'LBRKT' auditDescriptorBody 'RBRKT' :
- merge_auditDescriptor('$3') .
-
-auditDescriptorBody -> auditItem auditItemList : ['$1' | '$2'].
-auditDescriptorBody -> '$empty' : asn1_NOVALUE .
-
-auditItemList -> 'COMMA' auditItem auditItemList : ['$2' | '$3'] .
-auditItemList -> '$empty' : [] .
-
-%% IGv11 - begin
-%%
-auditReturnItem -> 'MuxToken' : muxToken .
-auditReturnItem -> 'ModemToken' : modemToken .
-auditReturnItem -> 'MediaToken' : mediaToken .
-auditReturnItem -> 'DigitMapToken' : digitMapToken .
-auditReturnItem -> 'StatsToken' : statsToken .
-auditReturnItem -> 'ObservedEventsToken' : observedEventsToken .
-auditReturnItem -> 'PackagesToken' : packagesToken .
-
-%% at-most-once, and DigitMapToken and PackagesToken are not allowed
-%% in AuditCapabilities command
-auditItem -> auditReturnItem : '$1' .
-auditItem -> 'SignalsToken' : signalsToken.
-auditItem -> 'EventBufferToken' : eventBufferToken.
-auditItem -> 'EventsToken' : eventsToken .
-auditItem -> indAudterminationAudit : {terminationAudit, '$1'} . % v2
-%%
-%% IGv11 - end
-
-
-%% v2 - start
-%%
-indAudterminationAudit -> indAudauditReturnParameter
- indAudterminationAuditList
- : ['$1' | '$2'] .
-
-indAudterminationAuditList -> 'COMMA' indAudauditReturnParameter
- indAudterminationAuditList
- : ['$2' | '$3'] .
-indAudterminationAuditList -> '$empty' : [] .
-
-indAudauditReturnParameter -> indAudmediaDescriptor
- : {indAudMediaDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudeventsDescriptor
- : {indAudEventsDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudsignalsDescriptor
- : {indAudSignalsDescriptor, '$1'} .
-indAudauditReturnParameter -> indAuddigitMapDescriptor
- : {indAudDigitMapDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudeventBufferDescriptor
- : {indAudEventBufferDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudstatisticsDescriptor
- : {indAudStatisticsDescriptor, '$1'} .
-indAudauditReturnParameter -> indAudpackagesDescriptor
- : {indAudPackagesDescriptor, '$1'} .
-
-
-indAudmediaDescriptor -> 'MediaToken' 'LBRKT'
- indAudmediaParm indAudmediaParms 'RBRKT'
- : merge_indAudMediaDescriptor(['$3'|'$4']) .
-
-%% at-most-once per item
-%% and either streamParm or streamDescriptor but not both
-%%
-
-indAudmediaParm -> indAudstreamParm : {streamParm, '$1'} .
-indAudmediaParm -> indAudstreamDescriptor : {streamDescr, '$1'} .
-indAudmediaParm -> indAudterminationStateDescriptor : {termStateDescr, '$1'} .
-
-indAudmediaParms -> 'COMMA' indAudmediaParm indAudmediaParms : ['$2' | '$3'] .
-indAudmediaParms -> '$empty' : [] .
-
-%% at-most-once
-indAudstreamParm -> 'RemoteDescriptorToken' :
- RD = ensure_prop_groups('$1'),
- #'IndAudStreamParms'{remoteDescriptor = RD} .
-indAudstreamParm -> 'LocalDescriptorToken' :
- LD = ensure_prop_groups('$1'),
- #'IndAudStreamParms'{localDescriptor = LD} .
-indAudstreamParm -> indAudlocalControlDescriptor :
- #'IndAudStreamParms'{localControlDescriptor = '$1'} .
-indAudstreamParm -> indAudstatisticsDescriptor :
- #'IndAudStreamParms'{statisticsDescriptor = '$1'} .
-
-indAudstreamDescriptor -> 'StreamToken' 'EQUAL' streamID
- 'LBRKT' indAudstreamParm 'RBRKT'
- : #'IndAudStreamDescriptor'{streamID = '$3',
- streamParms = '$5'} .
-
-
-indAudlocalControlDescriptor -> 'LocalControlToken'
- 'LBRKT' indAudlocalParm
- indAudlocalParmList 'RBRKT' :
- merge_indAudLocalControlDescriptor(['$3' | '$4']) .
-
-indAudlocalParmList -> 'COMMA' indAudlocalParm
- indAudlocalParmList : ['$2' | '$3'] .
-indAudlocalParmList -> '$empty' : [] .
-
-%% at-most-once per item
-%%
-%% propertyparm and streamModes are used only to specify audit selection
-%% criteria. AND/OR selection logic is specified at context level.
-%%
-indAudlocalParm -> 'ReservedGroupToken' : reservedGroupToken .
-indAudlocalParm -> 'ReservedValueToken' : reservedValueToken .
-indAudlocalParm -> 'ModeToken' : modeToken .
-indAudlocalParm -> 'ModeToken' 'EQUAL' streamModes : {mode, {equal, '$3'}} .
-indAudlocalParm -> 'ModeToken' 'INEQUAL' streamModes : {mode, {inequal,'$3'}} .
-indAudlocalParm -> propertyParm : {prop, '$1'} .
-indAudlocalParm -> pkgdName : {name, '$1'} .
-
-indAudterminationStateDescriptor -> 'TerminationStateToken'
- 'LBRKT' indAudterminationStateParm 'RBRKT'
- :
- merge_indAudTerminationStateDescriptor('$3') .
-
-%% at-most-once per item
-%%
-
-%% at-most-once per item except for propertyParm
-indAudterminationStateParm -> iaServiceStates : '$1' .
-indAudterminationStateParm -> 'BufferToken' : bufferToken .
-indAudterminationStateParm -> propertyParm : {prop, '$1'} .
-indAudterminationStateParm -> pkgdName : {name, '$1'} .
-
-iaServiceStates -> 'ServiceStatesToken' :
- serviceStatesToken .
-iaServiceStates -> 'ServiceStatesToken' 'EQUAL' serviceStatesValue :
- {serviceStates, {equal, '$3'}} .
-iaServiceStates -> 'ServiceStatesToken' 'INEQUAL' serviceStatesValue :
- {serviceStates, {inequal, '$3'}} .
-
-indAudeventBufferDescriptor -> 'EventBufferToken'
- 'LBRKT' indAudeventSpec 'RBRKT' : '$3' .
-
-indAudeventSpec -> pkgdName optIndAudeventSpecParameter
- : merge_indAudEventBufferDescriptor('$1','$2') .
-
-optIndAudeventSpecParameter -> 'LBRKT' indAudeventSpecParameter 'RBRKT'
- : '$2' .
-optIndAudeventSpecParameter -> '$empty' : asn1_NOVALUE .
-
-
-indAudeventSpecParameter -> eventStream : {streamID, '$1'} .
-indAudeventSpecParameter -> eventParameterName : {eventParameterName, '$1'} .
-
-indAudeventsDescriptor -> 'EventsToken' 'LBRKT' indAudrequestedEvent 'RBRKT' :
- #'IndAudEventsDescriptor'{pkgdName = '$3'} .
-indAudeventsDescriptor -> 'EventsToken' 'EQUAL' requestID
- 'LBRKT' indAudrequestedEvent 'RBRKT' :
- #'IndAudEventsDescriptor'{requestID = '$3',
- pkgdName = '$5'} .
-
-indAudrequestedEvent -> pkgdName : '$1' .
-
-
-indAudsignalsDescriptor -> 'SignalsToken' optIndAudsignalParm : '$2' .
-
-
-optIndAudsignalParm -> 'LBRKT' 'RBRKT' : asn1_NOVALUE .
-optIndAudsignalParm -> 'LBRKT' indAudsignalParm 'RBRKT' : '$2' .
-
-indAudsignalParm -> indAudsignalList : {seqSigList, '$1'} .
-indAudsignalParm -> signalRequest : {signal, ensure_indAudSignal('$1')} .
-
-indAudsignalList -> 'SignalListToken' 'EQUAL' signalListId :
- #'IndAudSeqSigList'{id = ensure_uint16('$3')} .
-indAudsignalList -> 'SignalListToken' 'EQUAL' signalListId
- 'LBRKT' signalListParm 'RBRKT' :
- #'IndAudSeqSigList'{id = ensure_uint16('$3'),
- signalList =
- ensure_indAudSignalListParm('$5')} .
-
-
-%% The DigitMapDescriptorToken is specially treated by the scanner
-indAuddigitMapDescriptor -> 'DigitMapDescriptorToken' :
- ensure_IADMD('$1') .
-
-indAudstatisticsDescriptor -> 'StatsToken' 'LBRKT' pkgdName 'RBRKT' :
- #'IndAudStatisticsDescriptor'{statName = '$3'} .
-
-indAudpackagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem 'RBRKT'
- : merge_indAudPackagesDescriptor('$3') .
-
-eventStream -> 'StreamToken' 'EQUAL' streamID : '$3' .
-
-
-%%
-%% v2 - end
-
-notifyRequest -> 'NotifyToken' 'EQUAL' termIDList
- 'LBRKT' notifyRequestBody 'RBRKT' :
- NR = setelement(#'NotifyRequest'.terminationID,
- '$5', '$3'),
- make_commandRequest({notifyReq, '$1'}, NR) .
-
-notifyRequestBody -> observedEventsDescriptor :
- #'NotifyRequest'{observedEventsDescriptor = '$1'}.
-notifyRequestBody -> errorDescriptor :
- #'NotifyRequest'{errorDescriptor = '$1'}.
-
-notifyReply -> 'NotifyToken' 'EQUAL' termIDList notifyReplyBody :
- {notifyReply, #'NotifyReply'{terminationID = '$3',
- errorDescriptor = '$4'}} .
-
-notifyReplyBody -> 'LBRKT' errorDescriptor 'RBRKT' : '$2'.
-notifyReplyBody -> '$empty' : asn1_NOVALUE .
-
-serviceChangeRequest -> 'ServiceChangeToken' 'EQUAL' termIDList
- 'LBRKT' serviceChangeDescriptor 'RBRKT' :
- make_commandRequest({serviceChangeReq, '$1'},
- #'ServiceChangeRequest'{terminationID = '$3',
- serviceChangeParms = '$5'}) .
-
-serviceChangeReply -> 'ServiceChangeToken' 'EQUAL' termIDList
- serviceChangeReplyBody :
- {serviceChangeReply,
- #'ServiceChangeReply'{terminationID = '$3',
- serviceChangeResult = '$4'}} .
-
-serviceChangeReplyBody -> 'LBRKT' errorDescriptor 'RBRKT' :
- {errorDescriptor, '$2'} .
-serviceChangeReplyBody -> 'LBRKT' serviceChangeReplyDescriptor 'RBRKT' :
- {serviceChangeResParms, '$2'} .
-serviceChangeReplyBody -> '$empty' :
- {serviceChangeResParms, #'ServiceChangeResParm'{}}.
-
-errorDescriptor -> 'ErrorToken' 'EQUAL' errorCode 'LBRKT'
- errorText 'RBRKT' :
- #'ErrorDescriptor'{errorCode = '$3',
- errorText = '$5'} .
-
-errorCode -> safeToken : ensure_uint('$1', 0, 999) .
-
-errorText -> 'QuotedChars' : value_of('$1') .
-errorText -> '$empty' : asn1_NOVALUE .
-
-transactionID -> safeToken : ensure_uint32('$1') .
-
-mId -> domainName : '$1' .
-mId -> domainAddress : '$1' .
-mId -> optSep mtpAddress optSep : '$2' .
-mId -> optSep deviceName optSep : '$2' .
-
-domainName -> 'LESSER' safeToken 'GREATER' 'COLON' portNumber optSep
- : ensure_domainName('$2', '$5') .
-domainName -> 'LESSER' safeToken 'GREATER'
- : ensure_domainName('$2', asn1_NOVALUE) .
-
-deviceName -> pathName : {deviceName, '$1'} .
-
-%% '-' is used for NULL context
-contextID -> safeToken : ensure_contextID('$1') .
-
-domainAddress -> 'LSBRKT' daddr 'RSBRKT' 'COLON' portNumber optSep
- : ensure_domainAddress('$2', '$5') .
-domainAddress -> 'LSBRKT' daddr 'RSBRKT'
- : ensure_domainAddress('$2', asn1_NOVALUE) .
-
-daddr -> '$empty' : [] .
-daddr -> 'COLON' daddr : [colon| '$2'] .
-daddr -> safeToken daddr : ['$1'| '$2'] .
-
-
-portNumber -> safeToken : ensure_uint16('$1') .
-
-mtpAddress -> 'MtpAddressToken' : ensure_mtpAddress('$1') .
-
-termIDList -> terminationID : ['$1'] .
-termIDList -> LSBRKT terminationID terminationIDListRepeat RSBRKT :
- ['$2' | '$3'] .
-
-terminationIDList -> 'LBRKT' terminationID terminationIDListRepeat 'RBRKT' :
- ['$2' | '$3'] .
-
-terminationIDListRepeat -> 'COMMA' terminationID terminationIDListRepeat :
- ['$2'| '$3'] .
-terminationIDListRepeat -> '$empty' : [] .
-
-
-pathName -> safeToken : ensure_pathName('$1') .
-
-terminationID -> safeToken : ensure_terminationID('$1') .
-
-mediaDescriptor -> 'MediaToken' 'LBRKT' mediaParm mediaParmList 'RBRKT'
- : merge_mediaDescriptor(['$3' | '$4']) .
-
-mediaParmList -> 'COMMA' mediaParm mediaParmList : ['$2' | '$3'] .
-mediaParmList -> '$empty' : [] .
-
-
-%% at-most-once per item
-%% using either streamParms or streamDescriptors but not both
-mediaParm -> streamParm
- : {streamParm, '$1'} .
-mediaParm -> streamDescriptor
- : {streamDescriptor, '$1'} .
-mediaParm -> terminationStateDescriptor
- : {termState, '$1'} .
-
-%% at-most-once .
-%% Specially treated by the scanner.
-streamParm -> 'LocalDescriptorToken' :
- PGs = ensure_prop_groups('$1'),
- {local, #'LocalRemoteDescriptor'{propGrps = PGs} } .
-streamParm -> 'RemoteDescriptorToken' :
- PGs = ensure_prop_groups('$1'),
- {remote, #'LocalRemoteDescriptor'{propGrps = PGs}} .
-streamParm -> localControlDescriptor : {control, '$1'} .
-streamParm -> statisticsDescriptor : {statistics, '$1'} .
-
-streamDescriptor -> 'StreamToken' 'EQUAL' streamID
- 'LBRKT' streamParm streamParmList 'RBRKT'
- : #'StreamDescriptor'{streamID = '$3',
- streamParms = merge_streamParms(['$5' | '$6'])} .
-
-streamParmList -> 'COMMA' streamParm streamParmList : ['$2' | '$3'] .
-streamParmList -> '$empty' : [] .
-
-localControlDescriptor -> 'LocalControlToken' 'LBRKT' localParm localParmList 'RBRKT'
- : ['$3' | '$4'] .
-
-localParmList -> 'COMMA' localParm localParmList : ['$2' | '$3'] .
-localParmList -> '$empty': [] .
-
-terminationStateDescriptor -> 'TerminationStateToken'
- 'LBRKT' terminationStateParm
- terminationStateParms 'RBRKT'
- : merge_terminationStateDescriptor(['$3' | '$4']) .
-
-terminationStateParms -> 'COMMA' terminationStateParm terminationStateParms : ['$2' | '$3'] .
-terminationStateParms -> '$empty' : [] .
-
-%% at-most-once per item except for propertyParm
-localParm -> 'ReservedGroupToken' 'EQUAL' onOrOff : {group, '$3'} .
-localParm -> 'ReservedValueToken' 'EQUAL' onOrOff : {value, '$3'} .
-localParm -> 'ModeToken' 'EQUAL' streamModes : {mode, '$3'} .
-localParm -> propertyParm : {prop, '$1'} .
-
-onOrOff -> 'OnToken' : true .
-onOrOff -> 'OffToken' : false .
-
-%% at-most-once
-streamModes -> 'SendonlyToken' : sendOnly .
-streamModes -> 'RecvonlyToken' : recvOnly .
-streamModes -> 'SendrecvToken' : sendRecv .
-streamModes -> 'InactiveToken' : inactive .
-streamModes -> 'LoopbackToken' : loopBack .
-
-propertyParm -> pkgdName parmValue :
- setelement(#'PropertyParm'.name, '$2', '$1') .
-
-parmValue -> 'EQUAL' alternativeValue :
- '$2' .
-
-parmValue -> 'NEQUAL' value :
- #'PropertyParm'{value = ['$2'],
- extraInfo = {relation, unequalTo}} .
-parmValue -> 'LESSER' value :
- #'PropertyParm'{value = ['$2'],
- extraInfo = {relation, smallerThan}} .
-parmValue -> 'GREATER' value :
- #'PropertyParm'{value = ['$2'],
- extraInfo = {relation, greaterThan}} .
-
-%% OTP-4013
-%% alternativeValue = ( VALUE /
-%% LSBRKT VALUE *(COMMA VALUE) RSBRKT /
-%% LSBRKT VALUE COLON VALUE RSBRKT ) /
-%% LBRKT VALUE *(COMMA VALUE) RBRKT
-alternativeValue -> 'LBRKT' value valueList 'RBRKT' :
- #'PropertyParm'{value = ['$2' | '$3'],
- extraInfo = {sublist, false}}. % OR
-
-alternativeValue -> 'LSBRKT' value 'COLON' value 'RSBRKT' :
- #'PropertyParm'{value = ['$2', '$4'],
- extraInfo = {range, true}}.
-
-alternativeValue -> 'LSBRKT' value valueList 'RSBRKT' :
- #'PropertyParm'{value = ['$2' | '$3'],
- extraInfo = {sublist, true}}. % AND
-
-alternativeValue -> value :
- #'PropertyParm'{value = ['$1']} .
-
-valueList -> 'COMMA' value valueList : ['$2' | '$3'] .
-valueList -> '$empty' : [] .
-
-
-eventBufferDescriptor -> 'EventBufferToken' : [] .
-eventBufferDescriptor -> 'EventBufferToken' 'LBRKT' eventSpec
- eventSpecList 'RBRKT' :
- ['$3' | '$4'] .
-
-eventSpecList -> 'COMMA' eventSpec eventSpecList : ['$2' | '$3'] .
-eventSpecList -> '$empty' : [] .
-
-eventSpec -> observedEvent : merge_eventSpec('$1') .
-
-%% at-most-once per item except for propertyParm
-terminationStateParm -> serviceStates : {serviceState, '$1'} .
-terminationStateParm -> eventBufferControl : {eventBufferControl, '$1'} .
-terminationStateParm -> propertyParm : {propertyParm, '$1'} .
-
-serviceStates -> 'ServiceStatesToken' 'EQUAL' serviceStatesValue : '$3'.
-
-serviceStatesValue -> 'TestToken' : test .
-serviceStatesValue -> 'OutOfSvcToken' : outOfSvc .
-serviceStatesValue -> 'InSvcToken' : inSvc .
-
-eventBufferControl -> 'BufferToken' 'EQUAL' eventBufferControlValue : '$3' .
-
-eventBufferControlValue -> 'OffToken' : off .
-eventBufferControlValue -> 'LockStepToken' : lockStep .
-
-muxDescriptor -> 'MuxToken' 'EQUAL' muxType terminationIDList :
- #'MuxDescriptor'{muxType = '$3',
- termList = '$4'} .
-
-muxType -> safeToken : ensure_muxType('$1') .
-
-streamID -> safeToken : ensure_streamID('$1') .
-
-pkgdName -> safeToken : ensure_pkgdName('$1') .
-
-eventsDescriptor -> 'EventsToken' :
- #'EventsDescriptor'{requestID = asn1_NOVALUE,
- eventList = []} .
-eventsDescriptor -> 'EventsToken' 'EQUAL' requestID
- 'LBRKT' requestedEvent requestedEvents 'RBRKT' :
- #'EventsDescriptor'{requestID = '$3',
- eventList = ['$5' | '$6']} .
-
-requestedEvents -> 'COMMA' requestedEvent requestedEvents : ['$2' | '$3'] .
-requestedEvents -> '$empty' : [] .
-
-requestedEvent -> pkgdName requestedEventBody :
- setelement(#'RequestedEvent'.pkgdName, '$2', '$1') .
-
-requestedEventBody -> 'LBRKT' eventParameter eventParameters 'RBRKT' :
- merge_eventParameters(['$2' | '$3']) .
-requestedEventBody -> '$empty' : #'RequestedEvent'{evParList = []} .
-
-
-notifyRegulated -> 'NotifyRegulatedToken' :
- #'RegulatedEmbeddedDescriptor'{} .
-notifyRegulated -> 'NotifyRegulatedToken' 'LBRKT' embedWithSig 'RBRKT' :
- make_RegulatedEmbeddedDescriptor('$3') .
-notifyRegulated -> 'NotifyRegulatedToken' 'LBRKT' embedNoSig 'RBRKT' :
- make_RegulatedEmbeddedDescriptor('$3') .
-
-notifyBehaviour -> 'NotifyImmediateToken' : {notifyImmediate, 'NULL'} .
-notifyBehaviour -> 'NeverNotifyToken' : {neverNotify, 'NULL'} .
-notifyBehaviour -> notifyRegulated : {notifyRegulated, '$1'} .
-
-eventParameters -> 'COMMA' eventParameter eventParameters :
- ['$2' | '$3'] .
-eventParameters -> '$empty' : [] .
-
-%% at-most-once each of embedOrKeepActive , eventDM or eventStream
-eventParameter -> 'KeepActiveToken' : keepActive .
-eventParameter -> embedWithSig : '$1'.
-eventParameter -> embedNoSig : '$1'.
-eventParameter -> eventDM : '$1'.
-eventParameter -> eventStreamOrOther : '$1'.
-eventParameter -> notifyBehaviour : {notifyBehaviour, '$1'}.
-eventParameter -> 'ResetEventsDescriptorToken' : resetEventsDescriptor .
-
-embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor
- 'COMMA' embedFirst 'RBRKT'
- : {embed, '$3', '$5'} .
-embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
- : {embed, '$3', asn1_NOVALUE} .
-
-embedNoSig -> 'EmbedToken' 'LBRKT' embedFirst 'RBRKT'
- : {embed, asn1_NOVALUE, '$3'} .
-
-embedFirst -> 'EventsToken' :
- #'SecondEventsDescriptor'{requestID = asn1_NOVALUE,
- eventList = []} .
-embedFirst -> 'EventsToken' 'EQUAL' requestID
- 'LBRKT' secondRequestedEvent secondRequestedEvents 'RBRKT' :
- #'SecondEventsDescriptor'{requestID = '$3',
- eventList = ['$5' | '$6']} .
-
-secondRequestedEvents -> 'COMMA' secondRequestedEvent secondRequestedEvents : ['$2' | '$3'] .
-secondRequestedEvents -> '$empty' : [] .
-
-%% at-most-once of each
-secondRequestedEvent -> pkgdName secondRequestedEventBody
- : setelement(#'SecondRequestedEvent'.pkgdName, '$2', '$1') .
-
-secondRequestedEventBody -> 'LBRKT' secondEventParameter secondEventParameters 'RBRKT'
- : merge_secondEventParameters(['$2' | '$3']) .
-secondRequestedEventBody -> '$empty' : #'SecondRequestedEvent'{evParList = []} .
-
-secondEventParameters -> 'COMMA' secondEventParameter secondEventParameters : ['$2' | '$3'] .
-secondEventParameters -> '$empty' : [] .
-
-%% at-most-once each of embedOrKeepActive , eventDM or eventStream
-secondEventParameter -> 'KeepActiveToken' : keepActive .
-secondEventParameter -> embedSig : '$1' .
-secondEventParameter -> eventDM : '$1' .
-secondEventParameter -> eventStreamOrOther : '$1' .
-secondEventParameter -> notifyBehaviour : {notifyBehaviour, '$1'}.
-secondEventParameter -> 'ResetEventsDescriptorToken' : resetEventsDescriptor .
-
-embedSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
- : {second_embed, '$3'} .
-
-eventStreamOrOther -> eventParameterName parmValue :
- select_stream_or_other('$1', '$2') .
-
-eventParameterName -> safeToken : ensure_NAME('$1') .
-
-%% The DigitMapDescriptorToken is specially treated by the scanner
-eventDM -> 'DigitMapDescriptorToken' :
- ensure_eventDM('$1') .
-
-%% H248S-IG (IGv11)
-signalsDescriptor -> 'SignalsToken' 'LBRKT' signalParm signalParms 'RBRKT' :
- ['$3' | '$4'] .
-signalsDescriptor -> 'SignalsToken' : [] .
-
-signalParms -> 'COMMA' signalParm signalParms : [ '$2' | '$3'] .
-signalParms -> '$empty' : [] .
-
-signalParm -> signalList : {seqSigList, '$1'} .
-signalParm -> signalRequest : {signal, '$1'} .
-
-signalRequest -> signalName 'LBRKT' sigParameter sigParameters 'RBRKT'
- : merge_signalRequest('$1', ['$3' | '$4']).
-signalRequest -> signalName : merge_signalRequest('$1', []).
-
-sigParameters -> 'COMMA' sigParameter sigParameters : ['$2' | '$3'] .
-sigParameters -> '$empty' : [] .
-
-%% sigParameter = sigStream / sigSignalType / sigDuration / sigOther /
-%% notifyCompletion / KeepActiveToken /
-%% direction / sigRequestID
-%% sigStream = StreamToken EQUAL StreamID
-%% sigOther = sigParameterName parmValue
-%% sigParameterName = NAME
-%% sigSignalType = SignalTypeToken EQUAL signalType
-%% signalType = (OnOffToken / TimeOutToken / BriefToken)
-%% sigDuration = DurationToken EQUAL UINT16
-%% notifyCompletion = NotifyCompletionToken EQUAL (LBRKT
-%% notificationReason *(COMMA notificationReason)
-%% RBRKT)
-%%
-%% notificationReason = ( TimeOutToken / InterruptByEventToken /
-%% InterruptByNewSignalsDescrToken /
-%% OtherReasonToken )
-%% sigDirection = DirectionToken EQUAL direction
-%% sigRequestID = RequestIDToken EQUAL RequestID
-%% sigIntsigDelay = IntsigDelayToken EQUAL UINT16
-
-sigParameter -> 'StreamToken' 'EQUAL' streamID :
- {stream, '$3'}.
-sigParameter -> 'SignalTypeToken' 'EQUAL' signalType :
- {signal_type, '$3'} .
-sigParameter -> 'DurationToken' 'EQUAL' safeToken :
- {duration, ensure_uint16('$3')} .
-sigParameter -> 'NotifyCompletionToken' 'EQUAL'
- 'LBRKT' notificationReason notificationReasons 'RBRKT' :
- {notify_completion, ['$4' | '$5']} .
-sigParameter -> 'KeepActiveToken' : keepActive .
-sigParameter -> 'DirectionToken' 'EQUAL' direction :
- {direction, '$3'} .
-sigParameter -> 'RequestIDToken' 'EQUAL' requestID :
- {requestId, '$3'} .
-sigParameter -> 'IntsigDelayToken' 'EQUAL' safeToken :
- {intersigDelay, ensure_uint16('$3')} .
-sigParameter -> safeToken parmValue :
- {other, ensure_NAME('$1'), '$2'}.
-
-signalType -> 'OnOffToken' : onOff.
-signalType -> 'TimeOutToken' : timeOut.
-signalType -> 'BriefToken' : brief.
-
-direction -> 'ExternalToken' : external .
-direction -> 'InternalToken' : internal .
-direction -> 'BothToken' : both .
-
-notificationReasons -> 'COMMA' notificationReason notificationReasons : ['$2' | '$3'] .
-notificationReasons -> '$empty' : [] .
-
-notificationReason -> 'TimeOutToken' : onTimeOut .
-notificationReason -> 'InterruptByEventToken' : onInterruptByEvent .
-notificationReason -> 'InterruptByNewSignalsDescrToken' : onInterruptByNewSignalDescr .
-notificationReason -> 'OtherReasonToken' : otherReason .
-notificationReason -> 'IterationToken' : iteration .
-
-signalList -> 'SignalListToken' 'EQUAL' signalListId
- 'LBRKT' signalListParm signalListParms 'RBRKT'
- : #'SeqSigList'{id = ensure_uint16('$3'),
- signalList = ['$5' | '$6']} .
-
-signalListParms -> 'COMMA' signalListParm signalListParms :
- ['$2' | '$3'] .
-signalListParms -> '$empty' : [] .
-
-signalListId -> safeToken : ensure_uint16('$1') .
-
-%% exactly once signalType,
-%% at most once duration and every signal parameter
-signalListParm -> signalRequest : '$1'.
-
-signalName -> pkgdName : '$1'.
-
-observedEventsDescriptor -> 'ObservedEventsToken' 'EQUAL' requestID
- 'LBRKT' observedEvent observedEvents 'RBRKT'
- : #'ObservedEventsDescriptor'{requestId = '$3',
- observedEventLst = ['$5' | '$6']} .
-
-observedEvents -> 'COMMA' observedEvent observedEvents : ['$2' | '$3'] .
-observedEvents -> '$empty' : [] .
-
-%%time per event, because it might be buffered
-
-observedEvent -> timeStamp optSep 'COLON' optSep pkgdName observedEventBody :
- merge_observed_event('$6', '$5', '$1') .
-observedEvent -> optSep pkgdName observedEventBody :
- merge_observed_event('$3', '$2', asn1_NOVALUE) .
-
-observedEventBody -> 'LBRKT' observedEventParameter
- observedEventParameters 'RBRKT'
- : ['$2' | '$3'] .
-observedEventBody -> '$empty' : [] .
-
-observedEventParameters -> 'COMMA' observedEventParameter observedEventParameters : ['$2' | '$3'] .
-observedEventParameters -> '$empty' : [] .
-
-%%at-most-once eventStream, every eventParameterName at most once
-observedEventParameter -> eventStreamOrOther : '$1' .
-
-requestID -> safeToken : ensure_requestID('$1') .
-
-%% Deprecated as of Corr 1
-modemDescriptor -> 'ModemToken' 'EQUAL' modemType optPropertyParms .
-modemDescriptor -> 'ModemToken' 'LSBRKT' modemType modemTypeList 'RSBRKT'
- optPropertyParms.
-modemTypeList -> 'COMMA' modemType modemTypeList.
-modemTypeList -> '$empty'.
-modemType -> safeToken.
-
-optPropertyParms -> 'LBRKT' propertyParm propertyParmList 'RBRKT' :
- ['$2' | '$3'] .
-optPropertyParms -> '$empty' : [] .
-
-propertyParms -> propertyParm propertyParmList : ['$1' | '$2'] .
-propertyParmList -> 'COMMA' propertyParm propertyParmList : ['$2' | '$3'] .
-propertyParmList -> '$empty' : [] .
-
-% parmName -> safeToken : ensure_NAME('$1') .
-
-%% The DigitMapDescriptorToken is specially treated by the scanner
-digitMapDescriptor -> 'DigitMapDescriptorToken' :
- ensure_DMD('$1') .
-
-%% each parameter at-most-once, except auditItem
-%% at most one of either serviceChangeAddress or serviceChangeMgcId but
-%% not both. serviceChangeMethod and serviceChangeReason are REQUIRED
-serviceChangeDescriptor -> 'ServicesToken'
- 'LBRKT' serviceChangeParm
- serviceChangeParms 'RBRKT' :
- merge_ServiceChangeParm(['$3' | '$4']) .
-
-serviceChangeParms -> 'COMMA' serviceChangeParm serviceChangeParms :
- ['$2' | '$3'] .
-serviceChangeParms -> '$empty' : [] .
-
-serviceChangeParm -> serviceChangeMethod : {method, '$1'} .
-serviceChangeParm -> serviceChangeReason : {reason, '$1'} .
-serviceChangeParm -> serviceChangeDelay : {delay, '$1'} .
-serviceChangeParm -> serviceChangeAddress : {address, '$1'} .
-serviceChangeParm -> serviceChangeProfile : {profile, '$1'} .
-serviceChangeParm -> extension : {extension, '$1'} .
-serviceChangeParm -> timeStamp : {time_stamp, '$1'} .
-serviceChangeParm -> serviceChangeMgcId : {mgc_id, '$1'} .
-serviceChangeParm -> serviceChangeVersion : {version, '$1'} .
-serviceChangeParm -> 'ServiceChangeIncompleteToken' : incomplete . % v3
-serviceChangeParm -> auditItem : {audit_item, '$1'} . % v2
-
-serviceChangeMethod -> 'MethodToken' 'EQUAL' safeToken :
- ensure_serviceChangeMethod('$3') .
-
-serviceChangeReason -> 'ReasonToken' 'EQUAL' value : ['$3'] .
-
-serviceChangeDelay -> 'DelayToken' 'EQUAL' safeToken : ensure_uint32('$3').
-
-serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' mId : '$3' .
-serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' portNumber :
- {portNumber, '$3'} .
-
-serviceChangeMgcId -> 'MgcIdToken' 'EQUAL' mId : '$3' .
-
-serviceChangeProfile -> 'ProfileToken' 'EQUAL' safeToken : ensure_profile('$3').
-
-serviceChangeVersion -> 'VersionToken' 'EQUAL' safeToken : ensure_version('$3') .
-
-extension -> extensionParameter parmValue
- : setelement(#'PropertyParm'.name, '$2', '$1') .
-
-%% at most once. Version is REQUIRED on first ServiceChange response
-%% at most of either serviceChangeAddress or serviceChangeMgcId but not both
-serviceChangeReplyDescriptor -> 'ServicesToken'
- 'LBRKT' servChgReplyParm
- servChgReplyParms 'RBRKT' :
- merge_ServiceChangeResParm(['$3' | '$4']) .
-
-servChgReplyParms -> 'COMMA' servChgReplyParm servChgReplyParms :
- ['$2' | '$3'] .
-servChgReplyParms -> '$empty' : [] .
-
-servChgReplyParm -> serviceChangeAddress : {address, '$1'} .
-servChgReplyParm -> serviceChangeMgcId : {mgc_id, '$1'} .
-servChgReplyParm -> serviceChangeProfile : {profile, '$1'} .
-servChgReplyParm -> serviceChangeVersion : {version, '$1'} .
-servChgReplyParm -> timeStamp : {time_stamp,'$1'} .
-
-packagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem
- packagesItems 'RBRKT'
- : ['$3' | '$4'] .
-
-packagesItems -> 'COMMA' packagesItem packagesItems : ['$2' | '$3'] .
-packagesItems -> '$empty' : [] .
-
-packagesItem -> safeToken : ensure_packagesItem('$1') .
-
-timeStamp -> TimeStampToken : ensure_timeStamp('$1') .
-
-statisticsDescriptor -> 'StatsToken'
- 'LBRKT' statisticsParameter
- statisticsParameters 'RBRKT'
- : ['$3' | '$4'] .
-
-statisticsParameters -> 'COMMA' statisticsParameter statisticsParameters : ['$2' | '$3'] .
-statisticsParameters -> '$empty' : [] .
-
-%%at-most-once per item
-statisticsParameter -> pkgdName :
- #'StatisticsParameter'{statName = '$1',
- statValue = asn1_NOVALUE} .
-statisticsParameter -> pkgdName 'EQUAL' value :
- #'StatisticsParameter'{statName = '$1',
- statValue = ['$3']} .
-statisticsParameter -> pkgdName 'EQUAL' 'LSBRKT' value valueList 'RSBRKT' :
- #'StatisticsParameter'{statName = '$1',
- statValue = ['$4' | '$5']} .
-
-
-topologyDescriptor -> 'TopologyToken' 'LBRKT'
- topologyDescComp topologyDescCompList 'RBRKT' :
- merge_topologyDescriptor(['$3' | '$4']) .
-
-topologyDescComp -> terminationID : {tid, '$1'} .
-topologyDescComp -> eventStream : {sid, '$1'} .
-topologyDescComp -> topologyDirection : '$1' .
-
-topologyDescCompList -> '$empty' : [] .
-topologyDescCompList -> 'COMMA' topologyDescComp topologyDescCompList :
- ['$2' | '$3'] .
-
-topologyDirection -> 'BothwayToken' : {direction, bothway} .
-topologyDirection -> 'IsolateToken' : {direction, isolate} .
-topologyDirection -> 'OnewayToken' : {direction, oneway} .
-topologyDirection -> 'OnewayExternalToken' : {direction_ext, onewayexternal} .
-topologyDirection -> 'OnewayBothToken' : {direction_ext, onewayboth} .
-
-iepsValue -> 'IEPSToken' 'EQUAL' onOrOff : '$3' .
-
-emergencyValue -> 'EmergencyValueToken' 'EQUAL' 'EmergencyToken' : true .
-emergencyValue -> 'EmergencyValueToken' 'EQUAL' 'EmergencyOffToken' : false .
-
-priority -> 'PriorityToken' 'EQUAL' safeToken : ensure_uint16('$3') .
-
-extensionParameter -> safeToken : ensure_extensionParameter('$1') .
-
-value -> 'QuotedChars' : ensure_value('$1') .
-value -> safeToken : ensure_value('$1').
-
-safeToken -> safeToken2 : make_safe_token('$1') .
-
-safeToken2 -> 'SafeChars' : '$1' .
-%% BMK BMK safeToken2 -> 'AddToken' : '$1' .
-safeToken2 -> 'AuditToken' : '$1' .
-safeToken2 -> 'AuditCapToken' : '$1' .
-safeToken2 -> 'AuditValueToken' : '$1' .
-safeToken2 -> 'AuthToken' : '$1' .
-safeToken2 -> 'BothToken' : '$1' . % v3
-%% v3-safeToken2 -> 'BothwayToken' : '$1' .
-safeToken2 -> 'BriefToken' : '$1' .
-%% v3-safeToken2 -> 'BufferToken' : '$1' .
-safeToken2 -> 'CtxToken' : '$1' .
-%% v3-safeToken2 -> 'ContextAttrToken' : '$1' . % v3
-safeToken2 -> 'ContextAuditToken' : '$1' .
-%% v3-safeToken2 -> 'ContextListToken' : '$1' . % v3
-%% v2-safeToken2 -> 'DigitMapToken' : '$1' .
-%% safeToken2 -> 'DigitMapDescriptorToken' : '$1' .
-%% v3-
-safeToken2 -> 'DirectionToken' : '$1' . % v3
-safeToken2 -> 'DiscardToken' : '$1' .
-safeToken2 -> 'DisconnectedToken' : '$1' .
-safeToken2 -> 'DelayToken' : '$1' .
-safeToken2 -> 'DurationToken' : '$1' .
-safeToken2 -> 'EmbedToken' : '$1' .
-%% BMK BMK safeToken2 -> 'EmergencyToken' : '$1' .
-%% BMK BMK safeToken2 -> 'EmergencyOffToken' : '$1' .
-safeToken2 -> 'ErrorToken' : '$1' .
-%% v2-safeToken2 -> 'EventBufferToken' : '$1' .
-%% v2-safeToken2 -> 'EventsToken' : '$1' .
-%% v3-safeToken2 -> 'ExternalToken' : '$1' . % v3
-safeToken2 -> 'FailoverToken' : '$1' .
-safeToken2 -> 'ForcedToken' : '$1' .
-safeToken2 -> 'GracefulToken' : '$1' .
-safeToken2 -> 'H221Token' : '$1' .
-safeToken2 -> 'H223Token' : '$1' .
-safeToken2 -> 'H226Token' : '$1' .
-safeToken2 -> 'HandOffToken' : '$1' .
-%% v3-safeToken2 -> 'IEPSToken' : '$1' . % v3
-safeToken2 -> 'ImmAckRequiredToken' : '$1' .
-safeToken2 -> 'InactiveToken' : '$1' .
-%% v3-safeToken2 -> 'InternalToken' : '$1' . % v3
-safeToken2 -> 'InterruptByEventToken' : '$1' .
-safeToken2 -> 'InterruptByNewSignalsDescrToken' : '$1' .
-%% v3-safeToken2 -> 'IsolateToken' : '$1' .
-safeToken2 -> 'InSvcToken' : '$1' .
-safeToken2 -> 'KeepActiveToken' : '$1' .
-%% safeToken2 -> 'LocalToken' : '$1' .
-%% safeToken2 -> 'LocalDescriptorToken' : '$1' .
-safeToken2 -> 'LocalControlToken' : '$1' .
-safeToken2 -> 'LoopbackToken' : '$1' .
-safeToken2 -> 'LockStepToken' : '$1' .
-%% v2-safeToken2 -> 'MediaToken' : '$1' .
-%% safeToken2 -> 'MegacopToken' : '$1' .
-safeToken2 -> 'MethodToken' : '$1' .
-safeToken2 -> 'MgcIdToken' : '$1' .
-%% v3-safeToken2 -> 'ModeToken' : '$1' .
-%% BMK BMK safeToken2 -> 'ModifyToken' : '$1' .
-%% v2-safeToken2 -> 'ModemToken' : '$1' .
-%% BMK BMK safeToken2 -> 'MoveToken' : '$1' .
-%% safeToken2 -> 'MtpToken' : '$1' .
-%% safeToken2 -> 'MtpAddressToken' : '$1' .
-%% v2-safeToken2 -> 'MuxToken' : '$1' .
-safeToken2 -> 'NotifyToken' : '$1' .
-safeToken2 -> 'NotifyCompletionToken' : '$1' .
-safeToken2 -> 'Nx64Token' : '$1' .
-%% v2-safeToken2 -> 'ObservedEventsToken' : '$1' .
-%% v3-safeToken2 -> 'OnewayToken' : '$1' .
-%% v3-safeToken2 -> 'OnewayExternalToken' : '$1' .
-%% v3-safeToken2 -> 'OnewayBothToken' : '$1' .
-safeToken2 -> 'OffToken' : '$1' .
-safeToken2 -> 'OnToken' : '$1' .
-safeToken2 -> 'OnOffToken' : '$1' .
-safeToken2 -> 'OutOfSvcToken' : '$1' .
-safeToken2 -> 'OtherReasonToken' : '$1' .
-%% v2-safeToken2 -> 'PackagesToken' : '$1' .
-safeToken2 -> 'PendingToken' : '$1' .
-%% BMK BMK safeToken2 -> 'PriorityToken' : '$1' .
-safeToken2 -> 'ProfileToken' : '$1' .
-safeToken2 -> 'ReasonToken' : '$1' .
-safeToken2 -> 'RecvonlyToken' : '$1' .
-safeToken2 -> 'ReplyToken' : '$1' .
-%% v3-
-safeToken2 -> 'RequestIDToken' : '$1' . % v3
-safeToken2 -> 'ResponseAckToken' : '$1' .
-safeToken2 -> 'RestartToken' : '$1' .
-%% safeToken2 -> 'RemoteToken' : '$1' .
-%% safeToken2 -> 'RemoteDescriptorToken' : '$1' .
-%% v3-safeToken2 -> 'ReservedGroupToken' : '$1' .
-%% v3-safeToken2 -> 'ReservedValueToken' : '$1' .
-safeToken2 -> 'SendonlyToken' : '$1' .
-safeToken2 -> 'SendrecvToken' : '$1' .
-safeToken2 -> 'ServicesToken' : '$1' .
-%% v3-safeToken2 -> 'ServiceStatesToken' : '$1' .
-safeToken2 -> 'ServiceChangeToken' : '$1' .
-%% v3-safeToken2 -> 'ServiceChangeIncompleteToken' : '$1' . % v3
-safeToken2 -> 'ServiceChangeAddressToken' : '$1' .
-safeToken2 -> 'SignalListToken' : '$1' .
-%% v2-safeToken2 -> 'SignalsToken' : '$1' .
-safeToken2 -> 'SignalTypeToken' : '$1' .
-%% v2-safeToken2 -> 'StatsToken' : '$1' .
-safeToken2 -> 'StreamToken' : '$1' .
-%% BMK BMK safeToken2 -> 'SubtractToken' : '$1' .
-safeToken2 -> 'SynchISDNToken' : '$1' .
-safeToken2 -> 'TerminationStateToken' : '$1' .
-safeToken2 -> 'TestToken' : '$1' .
-safeToken2 -> 'TimeOutToken' : '$1' .
-%% BMK BMK safeToken2 -> 'TopologyToken' : '$1' .
-safeToken2 -> 'TransToken' : '$1' .
-safeToken2 -> 'V18Token' : '$1' .
-safeToken2 -> 'V22Token' : '$1' .
-safeToken2 -> 'V22bisToken' : '$1' .
-safeToken2 -> 'V32Token' : '$1' .
-safeToken2 -> 'V32bisToken' : '$1' .
-safeToken2 -> 'V34Token' : '$1' .
-safeToken2 -> 'V76Token' : '$1' .
-safeToken2 -> 'V90Token' : '$1' .
-safeToken2 -> 'V91Token' : '$1' .
-safeToken2 -> 'VersionToken' : '$1' .
-%% <OTP-7534>
-safeToken2 -> 'MessageSegmentToken' : '$1' . % v3
-safeToken2 -> 'SegmentationCompleteToken' : '$1' . % v3
-%% </OTP-7534>
-
-Erlang code.
-
-%% The following directive is needed for (significantly) faster compilation
-%% of the generated .erl file by the HiPE compiler. Please do not remove.
--compile([{hipe,[{regalloc,linear_scan}]}]).
-
--include("megaco_text_parser_prev3c.hrl").
-
-
diff --git a/lib/megaco/src/text/megaco_text_parser_v1.hrl b/lib/megaco/src/text/megaco_text_parser_v1.hrl
index 3a19debba0..6331f32ecc 100644
--- a/lib/megaco/src/text/megaco_text_parser_v1.hrl
+++ b/lib/megaco/src/text/megaco_text_parser_v1.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2019. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2020. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@
-include_lib("megaco/include/megaco.hrl").
-include_lib("megaco/include/megaco_message_v1.hrl").
--define(encoder_version_pre_prev3c,true).
+-define(encoder_pre_version_3,true). % version 1 or 2
-include("megaco_text_tokens.hrl").
-ifdef(megaco_parser_inline).
diff --git a/lib/megaco/src/text/megaco_text_parser_v2.hrl b/lib/megaco/src/text/megaco_text_parser_v2.hrl
index 270541d111..8a96db6fc6 100644
--- a/lib/megaco/src/text/megaco_text_parser_v2.hrl
+++ b/lib/megaco/src/text/megaco_text_parser_v2.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2019. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2020. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@
-include_lib("megaco/include/megaco.hrl").
-include_lib("megaco/include/megaco_message_v2.hrl").
--define(encoder_version_pre_prev3c,true).
+-define(encoder_pre_version_3,true). % version 1 or 2
-include("megaco_text_tokens.hrl").
-define(d(F,A), io:format("DBG:"++F++"~n",A)).
diff --git a/lib/megaco/src/text/megaco_text_scanner.erl b/lib/megaco/src/text/megaco_text_scanner.erl
index 88194b8083..69687f187c 100644
--- a/lib/megaco/src/text/megaco_text_scanner.erl
+++ b/lib/megaco/src/text/megaco_text_scanner.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2020. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -643,7 +643,7 @@ select_token(LowerText, Version) ->
"emergency" -> 'EmergencyToken';
"eg" -> 'EmergencyToken';
"emergencyofftoken" -> 'EmergencyOffToken';
- "emergencyoff" when (Version >= 3) -> 'EmergencyOffToken'; % v3 (as of prev3c)
+ "emergencyoff" when (Version >= 3) -> 'EmergencyOffToken'; % v3
"ego" -> 'EmergencyOffToken';
"emergencyvalue" when (Version >= 3) -> 'EmergencyValueToken'; % v3
"egv" when (Version >= 3) -> 'EmergencyValueToken'; % v3
diff --git a/lib/megaco/src/text/megaco_text_tokens.hrl b/lib/megaco/src/text/megaco_text_tokens.hrl
index dc9fadcbe5..2b1c21258e 100644
--- a/lib/megaco/src/text/megaco_text_tokens.hrl
+++ b/lib/megaco/src/text/megaco_text_tokens.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2020. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -97,18 +97,14 @@
-define(PrettyContextAttrToken , "ContextAttr" ). % v3
-define(PrettyContextListToken , "ContextList" ). % v3
-define(PrettyDigitMapToken , "DigitMap" ).
--ifdef(encoder_version_pre_prev3c).
--define(PrettyDirectionToken , "Direction" ). % v3
--else.
-define(PrettyDirectionToken , "SPADirection" ). % v3
--endif.
-define(PrettyDiscardToken , "Discard" ).
-define(PrettyDisconnectedToken , "Disconnected" ).
-define(PrettyDelayToken , "Delay" ).
-define(PrettyDurationToken , "Duration" ).
-define(PrettyEmbedToken , "Embed" ).
-define(PrettyEmergencyToken , "Emergency" ).
--ifdef(encoder_version_pre_prev3c).
+-ifdef(encoder_pre_version_3).
-define(PrettyEmergencyOffToken , "EmergencyOffToken" ). % v2
-else.
-define(PrettyEmergencyOffToken , "EmergencyOff" ). % v3
@@ -177,11 +173,7 @@
-define(PrettyResetEventsDescriptorToken , "ResetEventsDescriptor" ). % v3
-define(PrettyRestartToken , "Restart" ).
-define(PrettyRemoteToken , "Remote" ).
--ifdef(encoder_version_pre_prev3c).
--define(PrettyRequestIDToken , "RequestID" ). % v3
--else.
-define(PrettyRequestIDToken , "SPARequestID" ). % v3
--endif.
-define(PrettyReservedGroupToken , "ReservedGroup" ).
-define(PrettyReservedValueToken , "ReservedValue" ).
-define(PrettySegmentationCompleteToken , "END" ). % v3
@@ -235,11 +227,7 @@
-define(CompactContextAttrToken , "CT" ). % v3
-define(CompactContextListToken , "CLT" ). % v3
-define(CompactDigitMapToken , "DM" ).
--ifdef(encoder_version_pre_prev3c).
--define(CompactDirectionToken , "DI" ). % v3
--else.
-define(CompactDirectionToken , "SPADI" ). % v3
--endif.
-define(CompactDiscardToken , "DS" ).
-define(CompactDisconnectedToken , "DC" ).
-define(CompactDelayToken , "DL" ).
@@ -311,11 +299,7 @@
-define(CompactResetEventsDescriptorToken , "RSE" ). % v3
-define(CompactRestartToken , "RS" ).
-define(CompactRemoteToken , "R" ).
--ifdef(encoder_version_pre_prev3c).
--define(CompactRequestIDToken , "RQ" ). % v3
--else.
-define(CompactRequestIDToken , "SPARQ" ). % v3
--endif.
-define(CompactReservedGroupToken , "RG" ).
-define(CompactReservedValueToken , "RV" ).
-define(CompactSegmentationCompleteToken , "&" ). % v3
diff --git a/lib/megaco/src/text/modules.mk b/lib/megaco/src/text/modules.mk
index c0436755cc..5b7d24b29b 100644
--- a/lib/megaco/src/text/modules.mk
+++ b/lib/megaco/src/text/modules.mk
@@ -18,16 +18,6 @@
#
# %CopyrightEnd%
-# <DEPRECATED>
-PREV3_MODULES = \
- megaco_compact_text_encoder_prev3a \
- megaco_compact_text_encoder_prev3b \
- megaco_compact_text_encoder_prev3c \
- megaco_pretty_text_encoder_prev3a \
- megaco_pretty_text_encoder_prev3b \
- megaco_pretty_text_encoder_prev3c
-# </DEPRECATED>
-
MODULES = \
megaco_compact_text_encoder \
megaco_compact_text_encoder_v1 \
@@ -38,19 +28,8 @@ MODULES = \
megaco_pretty_text_encoder_v2 \
megaco_pretty_text_encoder_v3 \
megaco_text_mini_decoder \
- megaco_text_scanner \
- $(PREV3_MODULES)
-
+ megaco_text_scanner
-# <DEPRECATED>
-PREV3_INTERNAL_HRL_FILES = \
- megaco_text_gen_prev3a.hrl \
- megaco_text_gen_prev3b.hrl \
- megaco_text_gen_prev3c.hrl \
- megaco_text_parser_prev3a.hrl \
- megaco_text_parser_prev3b.hrl \
- megaco_text_parser_prev3c.hrl
-# </DEPRECATED>
INTERNAL_HRL_FILES = \
megaco_text_gen_v1.hrl \
@@ -60,20 +39,11 @@ INTERNAL_HRL_FILES = \
megaco_text_parser_v2.hrl \
megaco_text_parser_v3.hrl \
megaco_text_mini_parser.hrl \
- megaco_text_tokens.hrl \
- $(PREV3_INTERNAL_HRL_FILES)
-
+ megaco_text_tokens.hrl
-# <DEPRECATED>
-PREV3_INTERNAL_YRL_FILES = \
- megaco_text_parser_prev3a.yrl \
- megaco_text_parser_prev3b.yrl \
- megaco_text_parser_prev3c.yrl
-# </DEPRECATED>
INTERNAL_YRL_FILES = \
megaco_text_parser_v1.yrl \
megaco_text_parser_v2.yrl \
megaco_text_parser_v3.yrl \
- megaco_text_mini_parser.yrl \
- $(PREV3_INTERNAL_YRL_FILES)
+ megaco_text_mini_parser.yrl