aboutsummaryrefslogtreecommitdiffstats
path: root/lib/megaco/include/megaco.hrl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/megaco/include/megaco.hrl')
-rw-r--r--lib/megaco/include/megaco.hrl333
1 files changed, 333 insertions, 0 deletions
diff --git a/lib/megaco/include/megaco.hrl b/lib/megaco/include/megaco.hrl
new file mode 100644
index 0000000000..4045fa9461
--- /dev/null
+++ b/lib/megaco/include/megaco.hrl
@@ -0,0 +1,333 @@
+%% ``The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved via the world wide web at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+%% AB. All Rights Reserved.''
+%%
+%% $Id$
+%%
+%%----------------------------------------------------------------------
+%% Purpose: Define common data structures and error codes
+%%----------------------------------------------------------------------
+
+%%----------------------------------------------------------------------
+%% Receive handle
+%%
+%% The receive handle contains enough information in order
+%% to be able to decode a message and send a reply to the
+%% originator.
+%%----------------------------------------------------------------------
+
+-record(megaco_receive_handle,
+ {
+ local_mid,
+ encoding_mod,
+ encoding_config,
+ send_mod,
+ protocol_version = dynamic % dynamic | integer()
+ }).
+
+%%----------------------------------------------------------------------
+%% Connection handle
+%%
+%% The connecion handle provides a locally unique identity of a
+%% connection. It is generated when a connection is established.
+%%----------------------------------------------------------------------
+
+-record(megaco_conn_handle,
+ {
+ local_mid,
+ remote_mid
+ }).
+
+%%----------------------------------------------------------------------
+%% Incremental timer
+%%
+%% The timer sleeps in WaitFor milli seconds and when it
+%% times out, a new time out value is computed:
+%%
+%% WaitFor2 = WaitFor * Factor + Incr
+%%
+%% And the timer starts all over again with the new WaitFor value.
+%% The procedure is repeated at at most MaxRetries.
+%%
+%% There is a special case for this timer. When the max_retries has
+%% the value infinity_restartable it means that the timer is
+%% restartable as long as some external event occurs (e.g. receipt of
+%% a pending message for instance). But the timer will never be
+%% restarted "by itself". I.e. when the timer expires (whatever the
+%% timeout time), so does the timer. Whever the timer is restarted,
+%% the timeout time will be calculated in the usual way!
+%%
+%%----------------------------------------------------------------------
+
+-record(megaco_incr_timer,
+ {wait_for = timer:seconds(7),% Initial timeout (milli seconds)
+ factor = 2, % Factor to multiply with at timeout
+ incr = 0, % Milli seconds to add at timeout
+ max_retries = infinity}). % infinity | infinity_restartable | Integer
+
+%%----------------------------------------------------------------------
+%% The internal representation of a termination id
+%%----------------------------------------------------------------------
+%%
+%% id() -> [level()]
+%% level() -> [char()]
+%% char() -> wildcard() | $0 | $1 | text_only_char()
+%% text_only_char() -> $2..$9 | $a..$z | $_ | $. | $@
+%% wildcard() -> all() | choose()
+%% all() -> $*
+%% choose() -> $$
+%% contains_wildcards() -> true | false
+%%
+%% The id field contains all info about the termination id, while the
+%% presense of the contains_wildcards field is just as a matter of
+%% convenience in order to make it simple to determine whether a
+%% simple id lookup will suffice or if some more complicated matching
+%% algorithm is needed.
+%%
+%% Some text encoding examples:
+%%
+%% "ROOT" -> {megaco_term_id, false, [[$r,$o,$o,$t]]}
+%% "*" -> {megaco_term_id, true, [[$*]]}
+%% "$" -> {megaco_term_id, true, [[$$]]}
+%% "R1/101/1" -> {megaco_term_id, false, [[$r, $1], [$1, $0, $1], [$1]]}
+%% "R1/1*1/*" -> {megaco_term_id, true, [[$r, $1], [$1, all, $1]], [$*]}
+%% "R1/1*" -> {megaco_term_id, true, [[$r, $1], [$1, $*]]}
+%% "R1/1*/" -> {megaco_term_id, true, [[$r, $1], [$1, $*], []]}
+%%
+%% Given the terminations "R1/10", "R1/101/0" and "R1/101/1" the above
+%% termination identifiers would be resolved to the following ones:
+%%
+%% "ROOT" -> "ROOT"
+%% "*" -> "R1/10" and "R1/101/0" and "R1/101/1"
+%% "$" -> "R1/10" or "R1/101/0" or "R1/101/1"
+%% "R1/101/1" -> "R1/101/1"
+%% "R1/1*1/*" -> "R1/101/1" and "R1/101/0"
+%% "R1/1*" -> "R1/10" and "R1/101/0" and "R1/101/1"
+%% "R1/1*/" -> "R1/10"
+%%
+%% In the binary encoding it is possible to express whether the last
+%% wildcard pertains to a certain level, in the hierarchical naming
+%% scheme (in the internal form this is expressed as an empty list as
+%% last level, see the internal form for "R1/1*/" above) or if the
+%% match also should include all lower levels recursively (see the
+%% internal form for "R1/1*" above).
+%%
+%% Observe that a termination id with a trailing slash (such as
+%% "R1/1*/") violates the text encoding protocol. But we allow it
+%% anyway since the corresponding internal form is needed for the
+%% binary encoding. It is also nice to be able to pretty print any
+%% binary termination id as text.
+%%
+%% A fully specified binary termination id:
+%%
+%% #'TerminationID'{wildcard = [],
+%% id = [2#00000001, 02#0011110, 2#00000000]}
+%%
+%% is internally represented as:
+%%
+%% #megaco_term_id{contains_wildcards = false,
+%% id = [[$0, $0, $0, $1, $1, $1, $1, $0],
+%% [$0, $1, $0, $1, $0, $1, $0, $1],
+%% [$0, $0, $0, $0, $0, $0, $0, $0]]}
+%%
+%% Addressing all names with prefix 00000001 00011110 is done as follows:
+%%
+%% #'TerminationID'{wildcard = [2#10000111],
+%% id = [2#00000001, 2#00011110, 2#00000000]}
+%%
+%% is internally represented as:
+%%
+%% #megaco_term_id{contains_wildcards = true,
+%% id = [[$0, $0, $0, $0, $0, $0, $0, $1],
+%% [$0, $0, $0, $1, $1, $1, $1, $0],
+%% [?megaco_all]}
+%%
+%% Indicating to the receiver that is must choose a name with 00011110 as
+%% the second octet is done as follows:
+%%
+%% #'TerminationID'{wildcard = [2#00010111, 2#00000111],
+%% id = [2#00000000, 2#00011110, 2#00000000]}
+%%
+%% is internally represented as:
+%%
+%% #megaco_term_id{contains_wildcards = true,
+%% id = [[?megaco_choose],
+%% [$0, $0, $0, $1, $1, $1, $1, $0],
+%% [?megaco_choose]]}
+%%
+%% Finally, a choose-wildcarded name with the highest level of the name
+%% equal to 00000001 is specified as follows:
+%%
+%% #'TerminationID'{wildcard = [2#01001111],
+%% id = [2#00000001, 2#00000000, 2#00000000]}
+%%
+%% is internally represented as:
+%%
+%% #megaco_term_id{contains_wildcards = true,
+%% id = [[$0, $0, $0, $0, $0, $0, $0, $1],
+%% [?megaco_choose],
+%% [?megaco_choose]]}
+%%----------------------------------------------------------------------
+
+-record(megaco_term_id, {contains_wildcards = false, id}).
+
+-define(megaco_root_termination_id, #megaco_term_id{id = [[$r,$o,$o,$t]]}).
+
+-define(megaco_all, $*).
+-define(megaco_choose, $$).
+
+%%----------------------------------------------------------------------
+%% Predefined context identifiers
+%%----------------------------------------------------------------------
+
+-define(megaco_null_context_id, 0). % 0
+-define(megaco_choose_context_id, 16#FFFFFFFE). % 4294967294
+-define(megaco_all_context_id, 16#FFFFFFFF). % 4294967295
+
+%%----------------------------------------------------------------------
+%% Predefined request identifiers
+%%----------------------------------------------------------------------
+
+-define(megaco_all_request_id, 16#FFFFFFFF). % 4294967295
+
+%%----------------------------------------------------------------------
+%% Command error codes
+%%----------------------------------------------------------------------
+
+-define(megaco_bad_request, 400).
+-define(megaco_protocol_error, 401).
+-define(megaco_unauthorized, 402).
+-define(megaco_syntax_error_in_transaction, 403).
+-define(megaco_version_not_supported, 406).
+-define(megaco_incorrect_identifier, 410).
+-define(megaco_unknown_context_id, 411).
+-define(megaco_no_context_id_available, 412).
+-define(megaco_num_of_trans_exceeds_max, 413). % v3
+-define(megaco_unknown_action_or_illegal_combination_of_actions, 421).
+-define(megaco_syntax_error_in_action, 422).
+-define(megaco_unknown_termination_id, 430).
+-define(megaco_no_termination_id_matched_a_wildcard, 431).
+-define(megaco_out_of_termination_ids_or_no_termination_id_available, 432).
+-define(megaco_termination_id_already_in_context, 433).
+-define(megaco_max_number_of_terminations_in_context_exceeded, 434). % v2
+-define(megaco_terminations_id_not_in_specified_context, 435). % v2
+
+-define(megaco_unsupported_or_unknown_package, 440).
+-define(megaco_missing_remote_or_local_descriptor, 441). % v2
+-define(megaco_missing_remote_descriptor,
+ ?megaco_missing_remote_or_local_descriptor).
+-define(megaco_missing_local_descriptor,
+ ?megaco_missing_remote_or_local_descriptor).
+-define(megaco_syntax_error_in_command, 442).
+-define(megaco_unsupported_or_unknown_command, 443).
+-define(megaco_unsupported_or_unknown_descriptor, 444).
+-define(megaco_unsupported_or_unknown_property, 445).
+-define(megaco_unsupported_or_unknown_parameter, 446).
+-define(megaco_descriptor_not_legal_in_this_command, 447).
+-define(megaco_descriptor_appears_twice_in_this_command, 448).
+-define(megaco_unsup_or_unknown_param_or_prop_value, 449). % v3
+-define(megaco_unsupported_parameter_value,
+ ?megaco_unsup_or_unknown_param_or_prop_value).
+-define(megaco_unsupported_proprty_value,
+ ?megaco_unsup_or_unknown_param_or_prop_value).
+-define(megaco_unknown_parameter_value,
+ ?megaco_unsup_or_unknown_param_or_prop_value).
+-define(megaco_unknown_proprty_value,
+ ?megaco_unsup_or_unknown_param_or_prop_value).
+-define(megaco_no_such_property_in_this_package, 450).
+-define(megaco_no_such_event_in_this_package, 451).
+-define(megaco_no_such_signal_in_this_package, 452).
+-define(megaco_no_such_statistic_in_this_package, 453).
+-define(megaco_no_such_parameter_in_this_package, 454).
+-define(megaco_property_illegal_in_this_descriptor, 455). % v2
+-define(megaco_parameter_illegal_in_this_descriptor,
+ ?megaco_property_illegal_in_this_descriptor).
+-define(megaco_property_appears_twice_in_this_descriptor, 456). % v2
+-define(megaco_parameter_or_property_appears_twice_in_this_descriptor,
+ ?megaco_property_appears_twice_in_this_descriptor).
+-define(megaco_missing_parameter_in_signal_or_event, 457). % v2
+-define(megaco_unexpected_event_or_request_id, 458). % v3
+-define(megaco_unexpected_event,
+ ?megaco_unexpected_event_or_request_id).
+-define(megaco_unexpected_request_id,
+ ?megaco_unexpected_event_or_request_id).
+-define(megaco_segments_not_received, 459). % v3
+-define(megaco_unable_to_set_statistic_on_stream, 460). % v3
+-define(megaco_implied_add_for_multiplex_failure, 471).
+-define(megaco_internal_gateway_error, 500).
+-define(megaco_not_implemented, 501).
+-define(megaco_not_ready, 502).
+-define(megaco_service_unavailable, 503).
+-define(megaco_command_received_from_unauthorized_entity, 504).
+-define(megaco_transaction_req_received_before_servicechange_reply, 505). % v2
+-define(megaco_command_received_before_restart_response,
+ ?megaco_transaction_req_received_before_servicechange_reply).
+-define(megaco_number_of_transactionpending_exceeded, 506). % v2
+-define(megaco_insufficient_resources, 510).
+-define(megaco_mg_unequipped_to_detect_requested_event, 512).
+-define(megaco_mg_unequipped_to_generate_requested_signals, 513).
+-define(megaco_mg_cannot_send_the_specified_announcement, 514).
+-define(megaco_unsupported_media_type, 515).
+-define(megaco_unsupported_or_invalid_mode, 517).
+-define(megaco_event_buffer_full, 518).
+-define(megaco_out_of_space_to_store_digit_map, 519).
+-define(megaco_mg_does_not_have_a_digit_map, 520).
+-define(megaco_termination_is_service_changing, 521).
+-define(megaco_unsupported_func_req_in_topology_triple, 522). % v3
+-define(megaco_insufficient_bandwidth, 526).
+-define(megaco_internal_hardware_failure, 529).
+-define(megaco_temporary_network_failure, 530).
+-define(megaco_permanent_network_failure, 531).
+-define(megaco_audit_prop_stat_event_or_sig_does_not_exist, 532). % v2
+-define(megaco_response_exceeds_maximum_transport_pdu_size, 533). % v2
+-define(megaco_illegal_write_of_read_only_property, 534). % v2
+-define(megaco_unexpected_initial_hook_state, 540). % v2
+-define(megaco_command_not_allowed_on_this_termination, 542). % v3
+-define(megaco_does_not_exist, 581).
+
+
+%%----------------------------------------------------------------------
+%% Service change reasons
+%%----------------------------------------------------------------------
+
+-define(megaco_service_restored, "900").
+-define(megaco_cold_boot, "901").
+-define(megaco_warm_boot, "902").
+-define(megaco_mgc_directed_change, "903").
+-define(megaco_termination_malfunctioning, "904").
+-define(megaco_termination_taken_out_of_service, "905").
+-define(megaco_loss_of_lower_layer_connectivity, "906").
+-define(megaco_transmission_failure, "907").
+-define(megaco_mg_impending_failure, "908").
+-define(megaco_mgc_impending_failure, "909").
+-define(megaco_media_capability_failure, "910").
+-define(megaco_modem_capability_failure, "911").
+-define(megaco_mux_capability_failure, "912").
+-define(megaco_signal_capability_failure, "913").
+-define(megaco_event_capability_failure, "914").
+-define(megaco_state_loss, "915").
+-define(megaco_packages_change, "916"). % v2
+-define(megaco_capabilities_change, "917"). % v2
+-define(megaco_cancel_gracefull, "918"). % v3
+-define(megaco_warm_failover, "919"). % v3
+-define(megaco_cold_failover, "920"). % v3
+
+
+%%----------------------------------------------------------------------
+%% MGC listen ports for both TCP/IP and UDP/IP
+%% The port numbers are standardized by IANA (ww.iana.org).
+%%----------------------------------------------------------------------
+
+-define(megaco_ip_port_text, 2944).
+-define(megaco_ip_port_binary, 2945).