📄 megaco.erl
字号:
%% ``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 : Main API for Megaco/H.248 protocol stack%%-----------------------------------------------------------------------module(megaco).%%-----------------------------------------------------------------%% Public interface%%------------------------------------------------------------------export([ start/0, stop/0, start_user/2, stop_user/1, user_info/2, update_user_info/3, conn_info/2, update_conn_info/3, system_info/1, connect/4, disconnect/2, call/3, cast/3, cancel/2, process_received_message/4, receive_message/4, encode_actions/3, token_tag2string/1, token_tag2string/2, token_tag2string/3, parse_digit_map/1, eval_digit_map/1, eval_digit_map/2, report_digit_event/2, test_digit_event/2, encode_binary_term_id/2, decode_binary_term_id/2, encode_sdp/1, decode_sdp/1, versions1/0, versions2/0, print_version_info/0, print_version_info/1, ms/0, nc/0, nc/1, ni/0, ni/1, enable_trace/2, disable_trace/0, set_trace/1, report_event/4, report_event/5, test_request/5, test_reply/5 ]).-export([ get_stats/0, get_stats/1, get_stats/2, reset_stats/0, reset_stats/1 ]).%% Deprecated-export([format_versions/1]).%% Internal-export([format_timestamp/1]).%% This is for XREF-deprecated([{format_versions, 1, eventually}]).-include("megaco_internal.hrl").%%-----------------------------------------------------------------%% Starts the Megaco application%%-----------------------------------------------------------------start() -> application:start(?APPLICATION).%%-----------------------------------------------------------------%% Stops the Megaco application%%-----------------------------------------------------------------stop() -> application:stop(?APPLICATION).%%-----------------------------------------------------------------%% Initial configuration of a user%%-----------------------------------------------------------------start_user(UserMid, Config) -> megaco_config:start_user(UserMid, Config).%%-----------------------------------------------------------------%% Delete the configuration of a user%%-----------------------------------------------------------------stop_user(UserMid) -> megaco_config:stop_user(UserMid).%%-----------------------------------------------------------------%% Lookup user information%%-----------------------------------------------------------------user_info(UserMid, requests) -> megaco_messenger:which_requests(UserMid);user_info(UserMid, replies) -> megaco_messenger:which_replies(UserMid);user_info(UserMid, Item) -> megaco_config:user_info(UserMid, Item).%%-----------------------------------------------------------------%% Update information about a user%%-----------------------------------------------------------------update_user_info(UserMid, Item, Value) -> megaco_config:update_user_info(UserMid, Item, Value).%%-----------------------------------------------------------------%% Lookup information about an active connection%%-----------------------------------------------------------------conn_info(ConnHandle, requests) -> megaco_messenger:which_requests(ConnHandle);conn_info(ConnHandle, replies) -> megaco_messenger:which_replies(ConnHandle);conn_info(ConnHandle, Item) -> megaco_config:conn_info(ConnHandle, Item).%%-----------------------------------------------------------------%% Update information about an active connection%%-----------------------------------------------------------------update_conn_info(ConnHandle, Item, Value) -> megaco_config:update_conn_info(ConnHandle, Item, Value).%%-----------------------------------------------------------------%% Lookup system information%%-----------------------------------------------------------------system_info(Item) -> megaco_config:system_info(Item).%%-----------------------------------------------------------------%% Establish a "virtual" connection%%-----------------------------------------------------------------connect(ReceiveHandle, RemoteMid, SendHandle, ControlPid) -> megaco_messenger:connect(ReceiveHandle, RemoteMid, SendHandle, ControlPid).%%-----------------------------------------------------------------%% Tear down a "virtual" connection%%-----------------------------------------------------------------disconnect(ConnHandle, Reason) -> megaco_messenger:disconnect(ConnHandle, {user_disconnect, Reason}).%%-----------------------------------------------------------------%% Sends a transaction request and waits for a reply%%-----------------------------------------------------------------call(ConnHandle, ActionRequests, Options) -> megaco_messenger:call(ConnHandle, ActionRequests, Options).%%-----------------------------------------------------------------%% Sends a transaction request but does NOT wait for a reply%%-----------------------------------------------------------------cast(ConnHandle, ActionRequests, Options) -> megaco_messenger:cast(ConnHandle, ActionRequests, Options).%%-----------------------------------------------------------------%% Test the validity of the actions%%----------------------------------------------------------------- test_request(ConnHandle, Version, EncodingMod, EncodingConfig, ActionRequests) -> megaco_messenger:test_request(ConnHandle, ActionRequests, Version, EncodingMod, EncodingConfig).%% This tests the actual_reply() type of return from the %% handle_trans_request function.%% test_reply(ConnHandle, Version, EncodingMod, EncodingConfig, Reply) -> megaco_messenger:test_reply(ConnHandle, Version, EncodingMod, EncodingConfig, Reply).%%-----------------------------------------------------------------%% Func: get_stats/0, get_stats/1, get_stats/2%% Description: Retreive statistics (counters) for TCP%%-----------------------------------------------------------------get_stats() -> megaco_messenger:get_stats().get_stats(SendHandle) -> megaco_messenger:get_stats(SendHandle).get_stats(SendHandle, Counter) -> megaco_messenger:get_stats(SendHandle, Counter).%%-----------------------------------------------------------------%% Func: reset_stats/0, reaet_stats/1%% Description: Reset statistics (counters) for TCP%%-----------------------------------------------------------------reset_stats() -> megaco_messenger:reset_stats().reset_stats(SendHandle) -> megaco_messenger:reset_stats(SendHandle).%%-----------------------------------------------------------------%% Cancel all outstanding messages for this connection%%-----------------------------------------------------------------cancel(ConnHandle, Reason) -> megaco_messenger:cancel(ConnHandle, {user_cancel, Reason}).%%-----------------------------------------------------------------%% Process a received message%%-----------------------------------------------------------------process_received_message(ReceiveHandle, ControlPid, SendHandle, BinMsg) -> megaco_messenger:process_received_message(ReceiveHandle, ControlPid, SendHandle, BinMsg).receive_message(ReceiveHandle, ControlPid, SendHandle, BinMsg) -> megaco_messenger:receive_message(ReceiveHandle, ControlPid, SendHandle, BinMsg).%%-----------------------------------------------------------------%% Encode the actions list for one or more transactions.%%-----------------------------------------------------------------encode_actions(ConnHandle, ActionRequests, Options) -> megaco_messenger:encode_actions(ConnHandle, ActionRequests, Options).%%-----------------------------------------------------------------%% Convert the (token) tags found in a decoded message into a %% printable string.%%-----------------------------------------------------------------token_tag2string(Tag) -> token_tag2string(Tag, pretty).token_tag2string(Tag, pretty) -> token_tag2string(Tag, megaco_pretty_text_encoder);token_tag2string(Tag, compact) -> token_tag2string(Tag, megaco_compact_text_encoder);token_tag2string(Tag, Mod) when is_atom(Tag) and is_atom(Mod) -> Mod:token_tag2string(Tag).token_tag2string(Tag, pretty, V) -> token_tag2string(Tag, megaco_pretty_text_encoder, V);token_tag2string(Tag, compact, V) -> token_tag2string(Tag, megaco_compact_text_encoder, V);token_tag2string(Tag, Mod, V) when is_atom(Tag) and is_atom(Mod) -> Mod:token_tag2string(Tag, V).%%-----------------------------------------------------------------%% Parses a digit map body%%-----------------------------------------------------------------parse_digit_map(DigitMapBody) -> megaco_digit_map:parse(DigitMapBody).%%-----------------------------------------------------------------%% Collect digit map letters according to the digit map%%-----------------------------------------------------------------eval_digit_map(DigitMap) -> megaco_digit_map:eval(DigitMap).eval_digit_map(DigitMap, Timers) -> megaco_digit_map:eval(DigitMap, Timers).%%-----------------------------------------------------------------%% Send one or more events to event collector process%%-----------------------------------------------------------------report_digit_event(DigitMapEvalPid, Event) -> megaco_digit_map:report(DigitMapEvalPid, Event).%%-----------------------------------------------------------------%% Feed digit map collector with events and return the result%%-----------------------------------------------------------------test_digit_event(DigitMap, Events) -> megaco_digit_map:test(DigitMap, Events).%%-----------------------------------------------------------------%% encode_binary_term_id(Config, MegacoTermId) ->%% %% {ok, TerminationId} | {error, Reason}%%%% Encode the Megaco internal form of a termination id (a%% megaco_term_id record) into ASN.1'1 internal form of a termination%% id (a 'TerminationId' record).%% %%-----------------------------------------------------------------encode_binary_term_id(Config, TermId) -> megaco_binary_term_id:encode(Config, TermId).%%-----------------------------------------------------------------%% decode_binary_term_id(Config, TerminationId) ->%% %% {ok, MegacoTermId} | {error, Reason}%%%% Decode ASN.1's internal form of a termination id (a 'TerminationId'%% record) into the Megaco internal form of a termination id (a%% megaco_term_id record).%%-----------------------------------------------------------------decode_binary_term_id(Config, TermId) -> megaco_binary_term_id:decode(Config, TermId).%%-----------------------------------------------------------------%% encode_sdp(SDP) ->%% %% {ok, PP} | {error, Reason}%%%% Encode a SDP construct into a property parm construct%%-----------------------------------------------------------------encode_sdp(SDP) -> megaco_sdp:encode(SDP).%%-----------------------------------------------------------------%% decode_sdp(PP) ->%% %% {ok, SDP} | {error, Reason}%%%% Decode a property parm construct into a SDP construct%%-----------------------------------------------------------------decode_sdp(PP) -> megaco_sdp:decode(PP).%%-----------------------------------------------------------------%% {ok, Vs} = megaco:versions1(), megaco:format_versions(Vs).print_version_info() -> {ok, Versions} = megaco:versions1(), print_version_info(Versions).print_version_info(Versions) when is_list(Versions) -> print_sys_info(Versions), print_os_info(Versions), print_mods_info(Versions);print_version_info(BadVersions) -> {error, {bad_versions, BadVersions}}.format_versions(Versions) -> print_version_info(Versions).print_sys_info(Versions) -> case key1search(sys_info, Versions) of {value, SysInfo} when list(SysInfo) -> {value, Arch} = key1search(arch, SysInfo, "Not found"), {value, Ver} = key1search(ver, SysInfo, "Not found"), io:format("System info: " "~n Arch: ~s" "~n Ver: ~s" "~n", [Arch, Ver]), ok; _ -> io:format("System info: Not found~n", []), not_found end. print_os_info(Versions) -> case key1search(os_info, Versions) of {value, OsInfo} when list(OsInfo) -> Fam = case key1search(fam, OsInfo, "Not found") of {value, F} when atom(F) -> atom_to_list(F); {value, LF} when list(LF) -> LF; {value, XF} -> lists:flatten(io_lib:format("~p", [XF])) end, Name = case key1search(name, OsInfo) of {value, N} when atom(N) -> "[" ++ atom_to_list(N) ++ "]"; {value, LN} when list(LN) -> "[" ++ LN ++ "]"; not_found -> "" end, Ver = case key1search(ver, OsInfo, "Not found") of {value, T} when tuple(T) -> tversion(T); {value, LV} when list(LV) -> LV; {value, XV} -> lists:flatten(io_lib:format("~p", [XV])) end, io:format("OS info: " "~n Family: ~s ~s" "~n Ver: ~s" "~n", [Fam, Name, Ver]), ok; _ -> io:format("OS info: Not found~n", []), not_found end.%% tversion({A, B, C}) ->%% lists:flatten(io_lib:format("~w.~w.~w", [A, B, C]));tversion(T) ->
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -