aboutsummaryrefslogtreecommitdiffstats
path: root/lib/megaco/doc/src/megaco.xml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/megaco/doc/src/megaco.xml')
-rw-r--r--lib/megaco/doc/src/megaco.xml2173
1 files changed, 2173 insertions, 0 deletions
diff --git a/lib/megaco/doc/src/megaco.xml b/lib/megaco/doc/src/megaco.xml
new file mode 100644
index 0000000000..0fb9d5aac6
--- /dev/null
+++ b/lib/megaco/doc/src/megaco.xml
@@ -0,0 +1,2173 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2000</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ 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 online 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.
+
+ </legalnotice>
+
+ <title>megaco</title>
+ <prepared>H&aring;kan Mattsson</prepared>
+ <responsible>H&aring;kan Mattsson</responsible>
+ <docno></docno>
+ <approved>H&aring;kan Mattsson</approved>
+ <checked></checked>
+ <date>2007-06-15</date>
+ <rev>%VSN%</rev>
+ <file>megaco.xml</file>
+ </header>
+ <module>megaco</module>
+ <modulesummary>Main API of the Megaco application</modulesummary>
+ <description>
+ <p>Interface module for the Megaco application</p>
+ </description>
+
+ <section>
+ <title>DATA TYPES</title>
+ <code type="none"><![CDATA[
+action_request() = #'ActionRequest'{}
+action_reply() = #'ActionReply'{}
+error_desc() = #'ErrorDescriptor'{}
+transaction_reply() = #'TransactionReply'{}
+segment_no() = integer()
+
+resend_indication() = flag | boolean()
+
+property_parm() = #'PropertyParm'{}
+property_group() = [property_parm()]
+property_groups() = [property_group()]
+
+sdp() = sdp_c() | sdp_o() | sdp_s() | sdp_i() | sdp_u() |
+ sdp_e() | sdp_p() | sdp_b() | sdp_z() | sdp_k() |
+ sdp_a() | sdp_a_rtpmap() | sdp_a_ptime() |
+ sdp_t() | sdp_r() | sdp_m()
+sdp_v() = #megaco_sdp_v{} (Protocol version)
+sdp_o() = #megaco_sdp_o{} (Owner/creator and session identifier)
+sdp_s() = #megaco_sdp_s{} (Session name)
+sdp_i() = #megaco_sdp_i{} (Session information)
+sdp_u() = #megaco_sdp_u{} (URI of description)
+sdp_e() = #megaco_sdp_e{} (Email address)
+sdp_p() = #megaco_sdp_p{} (Phone number)
+sdp_c() = #megaco_sdp_c{} (Connection information)
+sdp_b() = #megaco_sdp_b{} (Bandwidth information)
+sdp_k() = #megaco_sdp_k{} (Encryption key)
+sdp_a() = #megaco_sdp_a{} (Session attribute)
+sdp_a_rtpmap() = #megaco_sdp_a_rtpmap{}
+sdp_a_ptime() = #megaco_sdp_a_ptime{}
+sdp_a_quality() = #megaco_sdp_a_quality{}
+sdp_a_fmtp() = #megaco_sdp_a_fmtp{}
+sdp_z() = #megaco_sdp_z{} (Time zone adjustment)
+sdp_t() = #megaco_sdp_t{} (Time the session is active)
+sdp_r() = #megaco_sdp_r{} (Repeat times)
+sdp_m() = #megaco_sdp_m{} (Media name and transport address)
+sdp_property_parm() = sdp() | property_parm()
+sdp_property_group() = [sdp_property_parm()]
+sdp_property_groups() = [sdp_property_group()]
+
+megaco_timer() = infinity | integer() >= 0 | megaco_incr_timer()
+megaco_incr_timer() = #megaco_incr_timer{}
+ ]]></code>
+ <p>The record <c><![CDATA[megaco_incr_timer]]></c> contains the following fields: </p>
+ <taglist>
+ <tag><c><![CDATA[wait_for = integer() >= 0]]></c></tag>
+ <item>
+ <p>The actual timer time.</p>
+ </item>
+ <tag><c><![CDATA[factor = integer() >= 0]]></c></tag>
+ <item>
+ <p>The factor when calculating the new timer time
+ (<c><![CDATA[wait_for]]></c>).</p>
+ </item>
+ <tag><c><![CDATA[incr = integer()]]></c></tag>
+ <item>
+ <p>The increment value when calculating the new timer time
+ (<c><![CDATA[wait_for]]></c>). Note that this value <em>can</em> be negative
+ and that a timer restart can therefor lead to a <c><![CDATA[wait_for]]></c>
+ value of zero! It is up to the user to be aware of the
+ consequences of a <c><![CDATA[wait_for]]></c> value of zero. </p>
+ </item>
+ <tag><c><![CDATA[max_retries = infinity | infinity_restartable | integer() >= 0]]></c></tag>
+ <item>
+ <p>The maximum number of repetitions of the timer.</p>
+ <p>There is a special case for this field. When the
+ <c><![CDATA[max_retries]]></c> has the value <c><![CDATA[infinity_restartable]]></c>,
+ 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.
+ Whenever the timer is restarted, the timeout time will
+ be calculated in the usual way! Also, as mentioned
+ above, beware the consequences of setting the value to
+ <c><![CDATA[infinity]]></c> if <em>incr</em> has been set to an
+ negative value.</p>
+ </item>
+ </taglist>
+
+ <marker id="start"></marker>
+ </section>
+
+ <funcs>
+ <func>
+ <name>start() -> ok | {error, Reason}</name>
+ <fsummary>Starts the Megaco application</fsummary>
+ <type>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Starts the Megaco application</p>
+ <p>Users may either explicitly be registered with
+ megaco:start_user/2 and/or be statically configured by
+ setting the application environment variable 'users' to a
+ list of {UserMid, Config} tuples. See the function
+ megaco:start_user/2 for details.</p>
+
+ <marker id="stop"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>stop() -> ok | {error, Reason}</name>
+ <fsummary>Stops the Megaco application</fsummary>
+ <type>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Stops the Megaco application</p>
+
+ <marker id="start_user"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>start_user(UserMid, Config) -> ok | {error, Reason}</name>
+ <fsummary>Initial configuration of a user</fsummary>
+ <type>
+ <v>UserMid = megaco_mid()</v>
+ <v>Config = [{user_info_item(), user_info_value()}]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Initial configuration of a user</p>
+ <p>Requires the megaco application to be started. A user is
+ either a Media Gateway (MG) or a Media Gateway Controller
+ (MGC). One Erlang node may host many users.</p>
+ <p>A user is identified by its UserMid, which must be a legal
+ Megaco MID.</p>
+ <p>Config is a list of {Item, Value} tuples. See
+ megaco:user_info/2 about which items and values that are valid.</p>
+
+ <marker id="stop_user"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>stop_user(UserMid) -> ok | {error, Reason}</name>
+ <fsummary>Delete the configuration of a user</fsummary>
+ <type>
+ <v>UserMid = megaco_mid()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Delete the configuration of a user</p>
+ <p>Requires that the user does not have any active connection.</p>
+
+ <marker id="user_info"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>user_info(UserMid) -> [{Item, Value}]</name>
+ <name>user_info(UserMid, Item) -> Value | exit(Reason)</name>
+ <fsummary>Lookup user information</fsummary>
+ <type>
+ <v>Handle = user_info_handle()</v>
+ <v>UserMid = megaco_mid() </v>
+ <v>Item = user_info_item()</v>
+ <v>Value = user_info_value()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Lookup user information</p>
+ <p>The following Item's are valid:</p>
+ <marker id="ui_connections"></marker>
+ <taglist>
+ <tag><c><![CDATA[connections]]></c></tag>
+ <item>
+ <p>Lists all active connections for this user. Returns a
+ list of megaco_conn_handle records.</p>
+ <marker id="ui_receive_handle"></marker>
+ </item>
+
+ <tag><c><![CDATA[receive_handle]]></c></tag>
+ <item>
+ <p>Construct a megaco_receive_handle record from user config</p>
+
+ <marker id="ui_trans_id"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_id]]></c></tag>
+ <item>
+ <p>Current transaction id. </p>
+ <p>A positive integer or the atom
+ <c><![CDATA[undefined_serial]]></c> (in case no messages has been sent).</p>
+
+ <marker id="ui_min_trans_id"></marker>
+ </item>
+
+ <tag><c><![CDATA[min_trans_id]]></c></tag>
+ <item>
+ <p>First trans id. </p>
+ <p>A positive integer, defaults to 1.</p>
+
+ <marker id="ui_max_trans_id"></marker>
+ </item>
+
+ <tag><c><![CDATA[max_trans_id]]></c></tag>
+ <item>
+ <p>Last trans id. </p>
+ <p>A positive integer or <c><![CDATA[infinity]]></c>,
+ defaults to <c><![CDATA[infinity]]></c>.</p>
+
+ <marker id="ui_request_timer"></marker>
+ </item>
+
+ <tag><c><![CDATA[request_timer]]></c></tag>
+ <item>
+ <p>Wait for reply. </p>
+ <p>The timer is cancelled when a reply is received. </p>
+ <p>When a pending message is received, the timer is
+ cancelled and the <c><![CDATA[long_request_timer]]></c> is started instead
+ (see below). No resends will be performed from this point
+ (since we now know that the other side has received the
+ request). </p>
+ <p>When the timer reaches an intermediate expire, the request
+ is resent and the timer is restarted. </p>
+ <p>When the timer reaches the final expire, either the function
+ <c><![CDATA[megaco:call]]></c> will return with <c><![CDATA[{error, timeout}]]></c>
+ or the callback function <c><![CDATA[handle_trans_reply]]></c> will be
+ called with <c><![CDATA[UserReply = {error, timeout}]]></c> (if
+ <c><![CDATA[megaco:cast]]></c> was used).</p>
+ <p>A Megaco Timer (see explanation above),
+ defaults to <c><![CDATA[#megaco_incr_timer{}]]></c>.</p>
+
+ <marker id="ui_long_request_timer"></marker>
+ </item>
+
+ <tag><c><![CDATA[long_request_timer]]></c></tag>
+ <item>
+ <p>Wait for reply after having received a pending message. </p>
+ <p>When the timer reaches an intermediate expire, the timer
+ is restarted. </p>
+ <p>When a pending message is received, and the
+ <c><![CDATA[long_request_timer]]></c>
+ is <em>not</em> "on its final leg", the timer will be
+ restarted, and, if <c><![CDATA[long_request_resend = true]]></c>, the
+ request will be re-sent. </p>
+ <p>A Megaco Timer (see explanation above),
+ defaults to <c><![CDATA[60 seconds]]></c>.</p>
+
+ <marker id="ui_long_request_resend"></marker>
+ </item>
+
+ <tag><c><![CDATA[long_request_resend]]></c></tag>
+ <item>
+ <p>This option indicates weather the request should be
+ resent until the reply is received,
+ <em>even</em> though a pending message has been received. </p>
+ <p>Normally, after a pending message has been received,
+ the request is not resent
+ (since a pending message is an indication that the
+ request has been received). But since the reply (to the
+ request) can be lost, this behaviour has its values.</p>
+ <p>It is of course pointless to set this value to <em>true</em>
+ unless the <c><![CDATA[long_request_timer]]></c> (see above) is also set
+ to an incremental timer (<c><![CDATA[#megaco_incr_timer{}]]></c>). </p>
+ <p>A <c><![CDATA[boolean]]></c>,
+ defaults to <c><![CDATA[false]]></c>.</p>
+
+ <marker id="ui_reply_timer"></marker>
+ </item>
+
+ <tag><c><![CDATA[reply_timer]]></c></tag>
+ <item>
+ <p>Wait for an ack. </p>
+ <p>When a request is received, some info
+ related to the reply is store internally (e.g. the
+ binary of the reply). This info will live until either
+ an ack is received or this timer expires. For instance,
+ if the same request is received again (e.g. a request
+ with the same transaction id), the (stored) reply will
+ be (re-) sent automatically by megaco.</p>
+ <p>If the timer is of type <c><![CDATA[#megaco_incr_timer{}]]></c>,
+ then for each intermediate timout, the reply will be resent
+ (this is valid until the ack is received or
+ the timer expires). </p>
+ <p>A Megaco Timer (see explanation above), defaults to 30000.</p>
+
+ <marker id="ui_request_keep_alive_timeout"></marker>
+ </item>
+
+ <tag><c><![CDATA[request_keep_alive_timeout]]></c></tag>
+ <item>
+ <p>Specifies the timeout time for the request-keep-alive timer. </p>
+ <p>This timer is started when the <em>first</em> reply to an asynchroneous
+ request (issued using the
+ <seealso marker="megaco#cast">megaco:cast/3</seealso> function)
+ arrives. As long as this timer is running, replies will
+ be delivered via the
+ <seealso marker="megaco_user#trans_reply">handle_trans_reply/4,5</seealso>
+ callback function, with their "arrival number"
+ (see <c><![CDATA[UserReply]]></c> of the
+ <seealso marker="megaco_user#trans_reply">handle_trans_reply/4,5</seealso>
+ callback function). </p>
+ <p>Replies arriving after the timer has expired, will be
+ delivered using the
+ <seealso marker="megaco_user#unexpected_trans">handle_unexpected_trans/3,4</seealso>
+ callback function. </p>
+ <p>The timeout time can have the values:
+ <c><![CDATA[plain | integer() >= 0]]></c>. </p>
+ <p>Defaults to <c><![CDATA[plain]]></c>.</p>
+
+ <marker id="ui_call_proxy_gc_timeout"></marker>
+ </item>
+
+ <tag><c><![CDATA[call_proxy_gc_timeout]]></c></tag>
+ <item>
+ <p>Timeout time for the call proxy. </p>
+ <p>When a request is sent using the
+ <seealso marker="megaco#call">call/3</seealso> function,
+ a proxy process is started to handle
+ all replies. When the reply has been received and delivered
+ to the user, the proxy process continue to exist for as long
+ as this option specifies. Any received messages, is passed on
+ to the user via the
+ <seealso marker="megaco_user#handle_unexpected_trans">handle_unexpected_trans</seealso>
+ callback function. </p>
+ <p>The timeout time is in milliseconds. A value of 0 (zero) means
+ that the proxy process will exit directly after the reply has
+ been delivered. </p>
+ <p>An integer >= 0, defaults to 5000 (= 5 seconds).</p>
+
+ <marker id="ui_auto_ack"></marker>
+ </item>
+
+ <tag><c><![CDATA[auto_ack]]></c></tag>
+ <item>
+ <p>Automatic send transaction ack when the transaction
+ reply has been received (see <c><![CDATA[trans_ack]]></c> below). </p>
+ <p>This is used for <em>three-way-handshake</em>.</p>
+ <p>A <c><![CDATA[boolean]]></c>, defaults to <c><![CDATA[false]]></c>.</p>
+
+ <marker id="ui_trans_ack"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_ack]]></c></tag>
+ <item>
+ <p>Shall ack's be accumulated or not. </p>
+ <p>This property is only valid if <c><![CDATA[auto_ack]]></c> is true.</p>
+ <p>If <c><![CDATA[auto_ack]]></c> is true, then if <c><![CDATA[trans_ack]]></c> is
+ <c><![CDATA[false]]></c>, ack's will be sent immediately.
+ If <c><![CDATA[trans_ack]]></c> is <c><![CDATA[true]]></c>, then
+ ack's will instead be sent to the transaction
+ sender process for accumulation and later sending
+ (see <c><![CDATA[trans_ack_maxcount]]></c>, <c><![CDATA[trans_req_maxcount]]></c>,
+ <c><![CDATA[trans_req_maxsize]]></c>, <c><![CDATA[trans_ack_maxcount]]></c> and
+ <c><![CDATA[trans_timer]]></c>). </p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info.</p>
+ <p>An <c><![CDATA[boolean]]></c>, defaults to <c><![CDATA[false]]></c>.</p>
+
+ <marker id="ui_trans_ack_maxcount"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_ack_maxcount]]></c></tag>
+ <item>
+ <p>Maximum number of accumulated ack's. At most this many ack's
+ will be accumulated by the transaction sender (if started and
+ configured to accumulate ack's).</p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info. </p>
+ <p>An <c><![CDATA[integer]]></c>, defaults to 10.</p>
+
+ <marker id="ui_trans_req"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_req]]></c></tag>
+ <item>
+ <p>Shall requests be accumulated or not. </p>
+ <p>If <c><![CDATA[trans_req]]></c> is <c><![CDATA[false]]></c>, then request(s)
+ will be sent immediately (in its own message).</p>
+ <p>If <c><![CDATA[trans_req]]></c> is true, then request(s) will
+ instead be sent to the transaction sender process for
+ accumulation and later sending
+ (see <c><![CDATA[trans_ack_maxcount]]></c>, <c><![CDATA[trans_req_maxcount]]></c>,
+ <c><![CDATA[trans_req_maxsize]]></c>, <c><![CDATA[trans_ack_maxcount]]></c> and
+ <c><![CDATA[trans_timer]]></c>). </p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info. </p>
+ <p>An <c><![CDATA[boolean]]></c>, defaults to <c><![CDATA[false]]></c>.</p>
+
+ <marker id="ui_trans_req_maxcount"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_req_maxcount]]></c></tag>
+ <item>
+ <p>Maximum number of accumulated requests. At most this many
+ requests will be accumulated by the transaction sender
+ (if started and configured to accumulate requests). </p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info.</p>
+ <p>An <c><![CDATA[integer]]></c>, defaults to 10.</p>
+ <marker id="ui_trans_req_maxsize"></marker>
+ </item>
+ <tag><c><![CDATA[trans_req_maxsize]]></c></tag>
+ <item>
+ <p>Maximum size of the accumulated requests. At most this much
+ requests will be accumulated by the transaction sender
+ (if started and configured to accumulate requests).</p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info.</p>
+ <p>An <c><![CDATA[integer]]></c>, defaults to 2048.</p>
+
+ <marker id="ui_trans_timer"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_timer]]></c></tag>
+ <item>
+ <p>Transaction sender timeout time. Has two functions. First, if
+ the value is 0, then transactions will not be accumulated
+ (e.g. the transaction sender process will not be started).
+ Second, if the value is greater then 0 and <c><![CDATA[auto_ack]]></c>
+ and <c><![CDATA[trans_ack]]></c> are both true or
+ if <c><![CDATA[trans_req]]></c> is true,
+ then transaction sender will be started and transactions
+ (which is depending on the values of <c><![CDATA[auto_ack]]></c>,
+ <c><![CDATA[trans_ack]]></c> and <c><![CDATA[trans_req]]></c>) will be accumulated,
+ for later sending. </p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info. </p>
+ <p>An <c><![CDATA[integer]]></c>, defaults to 0.</p>
+
+ <marker id="ui_pending_timer"></marker>
+ </item>
+
+ <tag><c><![CDATA[pending_timer]]></c></tag>
+ <item>
+ <p>Automatically send pending if the timer expires before a
+ transaction reply has been sent. This timer is also called
+ provisional response timer. </p>
+ <p>A Megaco Timer (see explanation above), defaults to 30000.</p>
+
+ <marker id="ui_sent_pending_limit"></marker>
+ </item>
+
+ <tag><c><![CDATA[sent_pending_limit]]></c></tag>
+ <item>
+ <p>Sent pending limit (see the MGOriginatedPendingLimit
+ and the MGCOriginatedPendingLimit of the megaco root package).
+ This parameter specifies how many pending messages that can
+ be sent (for a given received transaction request).
+ When the limit is exceeded, the transaction is aborted
+ (see <seealso marker="megaco_user#request_abort">handle_trans_request_abort</seealso>) and an error message
+ is sent to the other side. </p>
+ <p>Note that this has no effect on the actual sending of
+ pending transactions. This is either implicit (e.g. when
+ receiving a re-sent transaction request for a request which
+ is being processed) or controlled by the pending_timer,
+ see above. </p>
+ <p>A positive integer or <c><![CDATA[infinity]]></c>,
+ defaults to <c><![CDATA[infinity]]></c>.</p>
+
+ <marker id="ui_recv_pending_limit"></marker>
+ </item>
+
+ <tag><c><![CDATA[recv_pending_limit]]></c></tag>
+ <item>
+ <p>Receive pending limit (see the MGOriginatedPendingLimit
+ and the MGCOriginatedPendingLimit of the megaco root package).
+ This parameter specifies how many pending messages that can
+ be received (for a sent transaction request).
+ When the limit is exceeded, the transaction is considered
+ lost, and an error returned to the user (through the call-back
+ function <em>handle_trans_reply</em>). </p>
+ <p>A positive integer or <c><![CDATA[infinity]]></c>,
+ defaults to <c><![CDATA[infinity]]></c>. </p>
+
+ <marker id="ui_send_mod"></marker>
+ </item>
+
+ <tag><c><![CDATA[send_mod]]></c></tag>
+ <item>
+ <p>Send callback module which exports send_message/2. The
+ function SendMod:send_message(SendHandle, Binary) is
+ invoked when the bytes needs to be transmitted to the
+ remote user. </p>
+ <p>An <c><![CDATA[atom]]></c>, defaults to <c><![CDATA[megaco_tcp]]></c>.</p>
+
+ <marker id="ui_encoding_mod"></marker>
+ </item>
+
+ <tag><c><![CDATA[encoding_mod]]></c></tag>
+ <item>
+ <p>Encoding callback module which exports encode_message/2
+ and decode_message/2. The function
+ EncodingMod:encode_message(EncodingConfig,
+ MegacoMessage) is invoked whenever a 'MegacoMessage'
+ record needs to be translated into an Erlang binary. The
+ function EncodingMod:decode_message(EncodingConfig,
+ Binary) is invoked whenever an Erlang binary needs to be
+ translated into a 'MegacoMessage' record. </p>
+ <p>An <c><![CDATA[atom]]></c>, defaults to <c><![CDATA[megaco_pretty_text_encoder]]></c>.</p>
+
+ <marker id="ui_encoding_config"></marker>
+ </item>
+
+ <tag><c><![CDATA[encoding_config]]></c></tag>
+ <item>
+ <p>Encoding module config. </p>
+ <p>A <c><![CDATA[list]]></c>, defaults to <c><![CDATA[[]]]></c>.</p>
+
+ <marker id="ui_protocol_version"></marker>
+ </item>
+
+ <tag><c><![CDATA[protocol_version]]></c></tag>
+ <item>
+ <p>Actual protocol version. </p>
+ <p>An <c><![CDATA[integer]]></c>, default is 1.</p>
+
+ <marker id="ui_strict_version"></marker>
+ </item>
+
+ <tag><c><![CDATA[strict_version]]></c></tag>
+ <item>
+ <p>Strict version control, i.e. when a message is received,
+ verify that the version is that which was negotiated. </p>
+ <p>An <c><![CDATA[boolean]]></c>, default is true.</p>
+
+ <marker id="ui_reply_data"></marker>
+ </item>
+
+ <tag><c><![CDATA[reply_data]]></c></tag>
+ <item>
+ <p>Default reply data. </p>
+ <p>Any term, defaults to the atom <c><![CDATA[undefined]]></c>.</p>
+
+ <marker id="ui_user_mod"></marker>
+ </item>
+
+ <tag><c><![CDATA[user_mod]]></c></tag>
+ <item>
+ <p>Name of the user callback module. See the the reference
+ manual for megaco_user for more info.</p>
+
+ <marker id="ui_user_args"></marker>
+ </item>
+
+ <tag><c><![CDATA[user_args]]></c></tag>
+ <item>
+ <p>List of extra arguments to the user callback
+ functions. See the the reference manual for megaco_user
+ for more info.</p>
+
+ <marker id="ui_threaded"></marker>
+ </item>
+
+ <tag><c><![CDATA[threaded]]></c></tag>
+ <item>
+ <p>If a received message contains several transaction requests,
+ this option indicates whether the requests should be handled
+ sequentially in the same process (<c><![CDATA[false]]></c>), or if each
+ request should be handled by its own process (<c><![CDATA[true]]></c>
+ i.e. a separate process is spawned for each request). </p>
+ <p>An <c><![CDATA[boolean]]></c>, defaults to <c><![CDATA[false]]></c>. </p>
+
+ <marker id="ui_resend_indication"></marker>
+ </item>
+
+ <tag><c><![CDATA[resend_indication]]></c></tag>
+ <item>
+ <p>This option indicates weather the transport module
+ should be told if a message send is a resend or not. </p>
+ <p>If <em>false</em>, megaco messages are sent using the
+ <seealso marker="megaco_transport#send_message">send_message</seealso>
+ function. </p>
+ <p>If <em>true</em>, megaco message <em>re-sends</em> are made using the
+ <seealso marker="megaco_transport#resend_message">resend_message</seealso>
+ function. The initial message send is still done using the
+ <seealso marker="megaco_transport#send_message">send_message</seealso>
+ function. </p>
+ <p>The special value <em>flag</em> instead indicates that the
+ function
+ <seealso marker="megaco_transport#send_message">send_message/3</seealso>
+ shall be used. </p>
+ <p>A <c>resend_indication()</c>,
+ defaults to <c><![CDATA[false]]></c>.</p>
+
+ <marker id="ui_segment_reply_ind"></marker>
+ </item>
+
+ <tag><c><![CDATA[segment_reply_ind]]></c></tag>
+ <item>
+ <p>This option specifies if the user shall be notified of received
+ segment replies or not. </p>
+ <p>See
+ <seealso marker="megaco_user#segment_reply">handle_segment_reply</seealso>
+ callback function for more information. </p>
+ <p>A <c><![CDATA[boolean]]></c>,
+ defaults to <c><![CDATA[false]]></c>. </p>
+
+ <marker id="ui_segment_recv_timer"></marker>
+ </item>
+
+ <tag><c><![CDATA[segment_recv_timer]]></c></tag>
+ <item>
+ <p>This timer is started when the segment indicated by the
+ <c><![CDATA[segmentation complete token]]></c> is received, but all
+ segments has not yet been received.</p>
+ <p>When the timer finally expires, a "megaco segments not
+ received" (459) error message is sent to the other side
+ and the user is notified with a <c><![CDATA[segment timeout]]></c><c><![CDATA[UserReply]]></c> in either the
+ <seealso marker="megaco_user#trans_reply">handle_trans_reply</seealso> callback function or
+ the return value of the
+ <seealso marker="megaco#call">call</seealso> function. </p>
+ <p>A Megaco Timer (see explanation above),
+ defaults to <c><![CDATA[10000]]></c>. </p>
+
+ <marker id="ui_segment_send"></marker>
+ </item>
+
+ <tag><c><![CDATA[segment_send]]></c></tag>
+ <item>
+ <p>Shall outgoing messages be segmented or not: </p>
+ <taglist>
+ <tag><c><![CDATA[none]]></c></tag>
+ <item>
+ <p>Do not segment outgoing reply messages. This is usefull when
+ either it is known that messages are never to large or
+ that the transport protocol can handle such things
+ on its own (e.g. TCP or SCTP).</p>
+ </item>
+ <tag><c><![CDATA[integer() > 0]]></c></tag>
+ <item>
+ <p>Outgoing reply messages will be segmented as needed
+ (see <c><![CDATA[max_pdu_size]]></c> below). This value, K, indicate
+ the outstanding window, i.e. how many segments can be
+ outstanding (not acknowledged) at any given time. </p>
+ </item>
+ <tag><c><![CDATA[infinity]]></c></tag>
+ <item>
+ <p>Outgoing reply messages will be segmented as needed
+ (see <c><![CDATA[max_pdu_size]]></c> below). Segment messages
+ are sent all at once (i.e. no acknowledgement awaited
+ before sending the next segment). </p>
+ </item>
+ </taglist>
+ <p>Defaults to <c><![CDATA[none]]></c>. </p>
+
+ <marker id="ui_max_pdu_size"></marker>
+ </item>
+
+ <tag><c><![CDATA[max_pdu_size]]></c></tag>
+ <item>
+ <p>Max message size. If the encoded message (PDU) exceeds
+ this size, the message should be segmented, and then
+ encoded. </p>
+ <p>A positive integer or <c><![CDATA[infinity]]></c>,
+ defaults to <c><![CDATA[infinity]]></c>. </p>
+ </item>
+ </taglist>
+
+ <marker id="update_user_info"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>update_user_info(UserMid, Item, Value) -> ok | {error, Reason}</name>
+ <fsummary>Update information about a user</fsummary>
+ <type>
+ <v>UserMid = megaco_mid() </v>
+ <v>Item = user_info_item()</v>
+ <v>Value = user_info_value()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Update information about a user</p>
+ <p>Requires that the user is started. See megaco:user_info/2
+ about which items and values that are valid.</p>
+
+ <marker id="conn_info"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>conn_info(ConnHandle) -> [{Item, Value}]</name>
+ <name>conn_info(ConnHandle, Item) -> Value | exit(Reason)</name>
+ <fsummary>Lookup information about an active connection</fsummary>
+ <type>
+ <v>ConnHandle = #megaco_conn_handle{}</v>
+ <v>Item = conn_info_item()</v>
+ <v>Value = conn_info_value()</v>
+ <v>Reason = {no_such_connection, ConnHandle} | term()</v>
+ </type>
+ <desc>
+ <p>Lookup information about an active connection</p>
+ <p>Requires that the connection is active.</p>
+ <marker id="ci_control_pid"></marker>
+ <taglist>
+
+ <tag><c><![CDATA[control_pid]]></c></tag>
+ <item>
+ <p>The process identifier of the controlling process for a
+ connection.</p>
+
+ <marker id="ci_send_handle"></marker>
+ </item>
+
+ <tag><c><![CDATA[send_handle]]></c></tag>
+ <item>
+ <p>Opaque send handle whose contents is internal for the
+ send module. May be any term.</p>
+
+ <marker id="ci_local_mid"></marker>
+ </item>
+
+ <tag><c><![CDATA[local_mid]]></c></tag>
+ <item>
+ <p>The local mid (of the connection, i.e. the own mid).
+ <c><![CDATA[megaco_mid()]]></c>.</p>
+
+ <marker id="ci_remote_mid"></marker>
+ </item>
+
+ <tag><c><![CDATA[remote_mid]]></c></tag>
+ <item>
+ <p>The remote mid (of the connection).
+ <c><![CDATA[megaco_mid()]]></c>.</p>
+
+ <marker id="ci_receive_handle"></marker>
+ </item>
+
+ <tag><c><![CDATA[receive_handle]]></c></tag>
+ <item>
+ <p>Construct a megaco_receive_handle record.</p>
+
+ <marker id="ci_trans_id"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_id]]></c></tag>
+ <item>
+ <p>Next transaction id. A positive integer or the atom
+ <c><![CDATA[undefined_serial]]></c> (only in case of error). </p>
+ <p>Note that transaction id's are (currently) maintained
+ on a per user basis so there is no way to be sure that
+ the value returned will actually be used for a transaction
+ sent on this connection (in case a user has several
+ connections, which is not at all unlikely). </p>
+
+ <marker id="ci_max_trans_id"></marker>
+ </item>
+
+ <tag><c><![CDATA[max_trans_id]]></c></tag>
+ <item>
+ <p>Last trans id. </p>
+ <p>A positive integer or <c><![CDATA[infinity]]></c>,
+ defaults to <c><![CDATA[infinity]]></c>.</p>
+
+ <marker id="ci_request_time"></marker>
+ </item>
+
+ <tag><c><![CDATA[request_timer]]></c></tag>
+ <item>
+ <p>Wait for reply. </p>
+ <p>The timer is cancelled when a reply is received. </p>
+ <p>When a pending message is received, the timer is
+ cancelled and the <c><![CDATA[long_request_timer]]></c> is started instead
+ (see below). No resends will be performed from this point
+ (since we now know that the other side has received the
+ request). </p>
+ <p>When the timer reaches an intermediate expire, the request
+ is resent and the timer is restarted. </p>
+ <p>When the timer reaches the final expire, either the function
+ <c><![CDATA[megaco:call]]></c> will return with <c><![CDATA[{error, timeout}]]></c>
+ or the callback function <c><![CDATA[handle_trans_reply]]></c> will be
+ called with <c><![CDATA[UserReply = {error, timeout}]]></c> (if
+ <c><![CDATA[megaco:cast]]></c> was used).</p>
+ <p>A Megaco Timer (see explanation above),
+ defaults to #megaco_incr_timer{}.</p>
+
+ <marker id="ci_long_request_timer"></marker>
+ </item>
+
+ <tag><c><![CDATA[long_request_timer]]></c></tag>
+ <item>
+ <p>Wait for reply after having received a pending message. </p>
+ <p>When the timer reaches an intermediate expire, the timer
+ restarted. </p>
+ <p>When a pending message is received, and the
+ <c><![CDATA[long_request_timer]]></c>
+ is <em>not</em> "on its final leg", the timer will be
+ restarted, and, if <c><![CDATA[long_request_resend = true]]></c>, the
+ request will be re-sent. </p>
+ <p>A Megaco Timer (see explanation above),
+ defaults to <c><![CDATA[60 seconds]]></c>.</p>
+
+ <marker id="ci_request_keep_alive_timeout"></marker>
+ </item>
+
+ <tag><c><![CDATA[request_keep_alive_timeout]]></c></tag>
+ <item>
+ <p>Specifies the timeout time for the request-keep-alive timer. </p>
+ <p>This timer is started when the <em>first</em> reply to an asynchroneous
+ request (issued using the
+ <seealso marker="megaco#cast">megaco:cast/3</seealso> function)
+ arrives. As long as this timer is running, replies will
+ be delivered via the
+ <seealso marker="megaco_user#trans_reply">handle_trans_reply/4,5</seealso>
+ callback function, with their "arrival number"
+ (see <c><![CDATA[UserReply]]></c> of the
+ <seealso marker="megaco_user#trans_reply">handle_trans_reply/4,5</seealso>
+ callback function). </p>
+ <p>Replies arriving after the timer has expired, will be
+ delivered using the
+ <seealso marker="megaco_user#unexpected_trans">handle_unexpected_trans/3,4</seealso>
+ callback function. </p>
+ <p>The timeout time can have the values:
+ <c><![CDATA[plain | integer() >= 0]]></c>. </p>
+ <p>Defaults to <c><![CDATA[plain]]></c>.</p>
+
+ <marker id="ci_long_request_resend"></marker>
+ </item>
+
+ <tag><c><![CDATA[long_request_resend]]></c></tag>
+ <item>
+ <p>This option indicates weather the request should be
+ resent until the reply is received,
+ <em>even</em> though a pending message has been received. </p>
+ <p>Normally, after a pending message has been received,
+ the request is not resent
+ (since a pending message is an indication that the
+ request has been received). But since the reply (to the
+ request) can be
+ lost, this behaviour has its values.</p>
+ <p>It is of course pointless to set this value to <em>true</em>
+ unless the <c><![CDATA[long_request_timer]]></c> (see above) is also set
+ to an incremental timer (<c><![CDATA[#megaco_incr_timer{}]]></c>). </p>
+ <p>A <c><![CDATA[boolean]]></c>,
+ defaults to <c><![CDATA[false]]></c>.</p>
+
+ <marker id="ci_reply_timer"></marker>
+ </item>
+
+ <tag><c><![CDATA[reply_timer]]></c></tag>
+ <item>
+ <p>Wait for an ack. </p>
+ <p>When a request is received, some info
+ related to the reply is store internally (e.g. the
+ binary of the reply). This info will live until either
+ an ack is received or this timer expires. For instance,
+ if the same request is received again (e.g. a request
+ with the same transaction id), the (stored) reply will
+ be (re-) sent automatically by megaco.</p>
+ <p>If the timer is of type <c><![CDATA[#megaco_incr_timer{}]]></c>,
+ then for each intermediate timout, the reply will be resent
+ (this is valid until the ack is received or
+ the timer expires). </p>
+ <p>A Megaco Timer (see explanation above), defaults to 30000.</p>
+
+ <marker id="ci_call_proxy_gc_timeout"></marker>
+ </item>
+
+ <tag><c><![CDATA[call_proxy_gc_timeout]]></c></tag>
+ <item>
+ <p>Timeout time for the call proxy. </p>
+ <p>When a request is sent using the
+ <seealso marker="megaco#call">call/3</seealso> function,
+ a proxy process is started to handle
+ all replies. When the reply has been received and delivered
+ to the user, the proxy process continue to exist for as long
+ as this option specifies. Any received messages, is passed on
+ to the user via the
+ <seealso marker="megaco_user#handle_unexpected_trans">handle_unexpected_trans</seealso>
+ callback function. </p>
+ <p>The timeout time is in milliseconds. A value of 0 (zero) means
+ that the proxy process will exit directly after the reply has
+ been delivered. </p>
+ <p>An integer >= 0, defaults to 5000 (= 5 seconds).</p>
+ <marker id="ci_auto_ack"></marker>
+ </item>
+
+ <tag><c><![CDATA[auto_ack]]></c></tag>
+ <item>
+ <p>Automatic send transaction ack when the transaction
+ reply has been received (see <c><![CDATA[trans_ack]]></c> below). </p>
+ <p>This is used for <em>three-way-handshake</em>. </p>
+ <p>A <c><![CDATA[boolean]]></c>, defaults to <c><![CDATA[false]]></c>.</p>
+
+ <marker id="ci_trans_ack"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_ack]]></c></tag>
+ <item>
+ <p>Shall ack's be accumulated or not. </p>
+ <p>This property is only valid if <c><![CDATA[auto_ack]]></c> is true. </p>
+ <p>If <c><![CDATA[auto_ack]]></c> is true, then if <c><![CDATA[trans_ack]]></c> is
+ <c><![CDATA[false]]></c>, ack's will be sent immediately.
+ If <c><![CDATA[trans_ack]]></c> is
+ <c><![CDATA[true]]></c>, then ack's will instead be sent to the transaction
+ sender process for accumulation and later sending
+ (see <c><![CDATA[trans_ack_maxcount]]></c>, <c><![CDATA[trans_req_maxcount]]></c>,
+ <c><![CDATA[trans_req_maxsize]]></c>, <c><![CDATA[trans_ack_maxcount]]></c> and
+ <c><![CDATA[trans_timer]]></c>). </p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info. </p>
+ <p>An <c><![CDATA[boolean]]></c>, defaults to <c><![CDATA[false]]></c>.</p>
+
+ <marker id="ci_trans_ack_maxcount"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_ack_maxcount]]></c></tag>
+ <item>
+ <p>Maximum number of accumulated ack's. At most this many ack's
+ will be accumulated by the transaction sender (if started and
+ configured to accumulate ack's).</p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info.</p>
+ <p>An integer, defaults to 10.</p>
+
+ <marker id="ci_trans_req"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_req]]></c></tag>
+ <item>
+ <p>Shall requests be accumulated or not. </p>
+ <p>If <c><![CDATA[trans_req]]></c> is <c><![CDATA[false]]></c>, then request(s)
+ will be sent immediately (in its own message). </p>
+ <p>If <c><![CDATA[trans_req]]></c> is true, then request(s) will
+ instead be sent to the transaction sender process for
+ accumulation and later sending
+ (see <c><![CDATA[trans_ack_maxcount]]></c>, <c><![CDATA[trans_req_maxcount]]></c>,
+ <c><![CDATA[trans_req_maxsize]]></c>, <c><![CDATA[trans_ack_maxcount]]></c> and
+ <c><![CDATA[trans_timer]]></c>). </p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info. </p>
+ <p>An <c><![CDATA[boolean]]></c>, defaults to <c><![CDATA[false]]></c>.</p>
+
+ <marker id="ci_trans_req_maxcount"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_req_maxcount]]></c></tag>
+ <item>
+ <p>Maximum number of accumulated requests. At most this many
+ requests will be accumulated by the transaction sender
+ (if started and configured to accumulate requests). </p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info. </p>
+ <p>An <c><![CDATA[integer]]></c>, defaults to 10.</p>
+
+ <marker id="ci_trans_req_maxsize"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_req_maxsize]]></c></tag>
+ <item>
+ <p>Maximum size of the accumulated requests. At most this much
+ requests will be accumulated by the transaction sender
+ (if started and configured to accumulate requests). </p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info. </p>
+ <p>An <c><![CDATA[integer]]></c>, defaults to 2048.</p>
+
+ <marker id="ci_trans_timer"></marker>
+ </item>
+
+ <tag><c><![CDATA[trans_timer]]></c></tag>
+ <item>
+ <p>Transaction sender timeout time. Has two functions. First, if
+ the value is 0, then transactions will not be accumulated
+ (e.g. the transaction sender process will not be started).
+ Second, if the value is greater then 0 and <c><![CDATA[auto_ack]]></c>
+ and <c><![CDATA[trans_ack]]></c> is true or if <c><![CDATA[trans_req]]></c> is true,
+ then transaction sender will be started and transactions
+ (which is depending on the values of <c><![CDATA[auto_ack]]></c>,
+ <c><![CDATA[trans_ack]]></c> and <c><![CDATA[trans_req]]></c>) will be accumulated,
+ for later sending. </p>
+ <p>See also <seealso marker="megaco_run#transaction_sender">transaction sender</seealso> for more info. </p>
+ <p>An <c><![CDATA[integer]]></c>, defaults to 0.</p>
+
+ <marker id="ci_pending_timer"></marker>
+ </item>
+
+ <tag><c><![CDATA[pending_timer]]></c></tag>
+ <item>
+ <p>Automatic send transaction pending if the timer expires
+ before a transaction reply has been sent. This timer is
+ also called provisional response timer. </p>
+ <p>A Megaco Timer (see explanation above), defaults to 30000.</p>
+
+ <marker id="ci_sent_pending_limit"></marker>
+ </item>
+
+ <tag><c><![CDATA[sent_pending_limit]]></c></tag>
+ <item>
+ <p>Sent pending limit (see the MGOriginatedPendingLimit
+ and the MGCOriginatedPendingLimit of the megaco root package).
+ This parameter specifies how many pending messages that can
+ be sent (for a given received transaction request).
+ When the limit is exceeded, the transaction is aborted
+ (see <seealso marker="megaco_user#request_abort">handle_trans_request_abort</seealso>) and an error message
+ is sent to the other side. </p>
+ <p>Note that this has no effect on the actual sending of
+ pending transactions. This is either implicit (e.g. when
+ receiving a re-sent transaction request for a request which
+ is being processed) or controlled by the pending_timer,
+ see above. </p>
+ <p>A positive integer or <c><![CDATA[infinity]]></c>,
+ defaults to <c><![CDATA[infinity]]></c>.</p>
+
+ <marker id="ci_recv_pending_limit"></marker>
+ </item>
+
+ <tag><c><![CDATA[recv_pending_limit]]></c></tag>
+ <item>
+ <p>Receive pending limit (see the MGOriginatedPendingLimit
+ and the MGCOriginatedPendingLimit of the megaco root package).
+ This parameter specifies how many pending messages that can
+ be received (for a sent transaction request).
+ When the limit is exceeded, the transaction is considered
+ lost, and an error returned to the user (through the call-back
+ function <em>handle_trans_reply</em>). </p>
+ <p>A positive integer or <c><![CDATA[infinity]]></c>,
+ defaults to <c><![CDATA[infinity]]></c>.</p>
+
+ <marker id="ci_send_mod"></marker>
+ </item>
+
+ <tag><c><![CDATA[send_mod]]></c></tag>
+ <item>
+ <p>Send callback module which exports send_message/2. The
+ function SendMod:send_message(SendHandle, Binary) is
+ invoked when the bytes needs to be transmitted to
+ the remote user. </p>
+ <p>An <c><![CDATA[atom]]></c>, defaults to <c><![CDATA[megaco_tcp]]></c>.</p>
+
+ <marker id="ci_encoding_mod"></marker>
+ </item>
+
+ <tag><c><![CDATA[encoding_mod]]></c></tag>
+ <item>
+ <p>Encoding callback module which exports encode_message/2
+ and decode_message/2. The function
+ EncodingMod:encode_message(EncodingConfig, MegacoMessage)
+ is invoked whenever a 'MegacoMessage' record needs to be
+ translated into an Erlang binary. The function
+ EncodingMod:decode_message(EncodingConfig, Binary) is
+ invoked whenever an Erlang binary needs to be translated
+ into a 'MegacoMessage' record. </p>
+ <p>An <c><![CDATA[atom]]></c>,
+ defaults to <c><![CDATA[megaco_pretty_text_encoder]]></c>.</p>
+
+ <marker id="ci_encoding_confi"></marker>
+ </item>
+
+ <tag><c><![CDATA[encoding_config]]></c></tag>
+ <item>
+ <p>Encoding module config. </p>
+ <p>A <c><![CDATA[list]]></c>, defaults to [].</p>
+
+ <marker id="ci_protocol_version"></marker>
+ </item>
+
+ <tag><c><![CDATA[protocol_version]]></c></tag>
+ <item>
+ <p>Actual protocol version. </p>
+ <p>An positive integer, Current default is 1.</p>
+ <marker id="ci_strict_version"></marker>
+ </item>
+ <tag><c><![CDATA[strict_version]]></c></tag>
+ <item>
+ <p>Strict version control, i.e. when a message is received,
+ verify that the version is that which was negotiated. </p>
+ <p>An <c><![CDATA[boolean]]></c>, default is true.</p>
+ <marker id="ci_reply_data"></marker>
+ </item>
+ <tag><c><![CDATA[reply_data]]></c></tag>
+ <item>
+ <p>Default reply data. </p>
+ <p>Any term, defaults to the atom <c><![CDATA[undefined]]></c>.</p>
+
+ <marker id="ci_threaded"></marker>
+ </item>
+
+ <tag><c><![CDATA[threaded]]></c></tag>
+ <item>
+ <p>If a received message contains several transaction requests,
+ this option indicates whether the requests should be handled
+ sequentially in the same process (<c><![CDATA[false]]></c>), or if each
+ request should be handled by its own process (<c><![CDATA[true]]></c>
+ i.e. a separate process is spawned for each request). </p>
+ <p>An <c><![CDATA[boolean]]></c>, defaults to <c><![CDATA[false]]></c>. </p>
+ <marker id="ci_resend_indication"></marker>
+ </item>
+ <tag><c><![CDATA[resend_indication]]></c></tag>
+ <item>
+ <p>This option indicates weather the transport module
+ should be told if a message send is a resend or not. </p>
+ <p>If <em>false</em>, megaco messages are sent using the
+ <seealso marker="megaco_transport#send_message">send_message/2</seealso>
+ function. </p>
+ <p>If <em>true</em>, megaco message <em>re-sends</em> are made using the
+ <seealso marker="megaco_transport#resend_message">resend_message</seealso>
+ function. The initial message send is still done using the
+ <seealso marker="megaco_transport#send_message">send_message</seealso>
+ function. </p>
+ <p>The special value <em>flag</em> instead indicates that the
+ function
+ <seealso marker="megaco_transport#send_message">send_message/3</seealso>
+ shall be used. </p>
+ <p>A <c>resend_indication()</c>,
+ defaults to <c><![CDATA[false]]></c>.</p>
+ <marker id="ci_segment_reply_ind"></marker>
+ </item>
+
+ <tag><c><![CDATA[segment_reply_ind]]></c></tag>
+ <item>
+ <p>This option specifies if the user shall be notified of received
+ segment replies or not. </p>
+ <p>See
+ <seealso marker="megaco_user#segment_reply">handle_segment_reply</seealso>
+ callback function for more information. </p>
+ <p>A <c><![CDATA[boolean]]></c>,
+ defaults to <c><![CDATA[false]]></c>. </p>
+
+ <marker id="ci_segment_recv_timer"></marker>
+ </item>
+
+ <tag><c><![CDATA[segment_recv_timer]]></c></tag>
+ <item>
+ <p>This timer is started when the segment indicated by the
+ <c><![CDATA[segmentation complete token]]></c> (e.g. the last of the segment
+ which makes up the reply) is received, but all
+ segments has not yet been received.</p>
+ <p>When the timer finally expires, a "megaco segments not
+ received" (459) error message is sent to the other side
+ and the user is notified with a
+ <c><![CDATA[segment timeout]]></c><c><![CDATA[UserReply]]></c> in either the
+ <seealso marker="megaco_user#trans_reply">handle_trans_reply</seealso>
+ callback function or
+ the return value of the
+ <seealso marker="megaco#call">call</seealso> function. </p>
+ <p>A Megaco Timer (see explanation above),
+ defaults to <c><![CDATA[10000]]></c>. </p>
+
+ <marker id="ci_segment_send"></marker>
+ </item>
+
+ <tag><c><![CDATA[segment_send]]></c></tag>
+ <item>
+ <p>Shall outgoing messages be segmented or not: </p>
+ <taglist>
+ <tag><c><![CDATA[none]]></c></tag>
+ <item>
+ <p>Do not segment outgoing reply messages. This is usefull when
+ either it is known that messages are never to large or
+ that the transport protocol can handle such things
+ on its own (e.g. TCP or SCTP).</p>
+ </item>
+ <tag><c><![CDATA[integer() > 0]]></c></tag>
+ <item>
+ <p>Outgoing reply messages will be segmented as needed
+ (see <c><![CDATA[max_pdu_size]]></c> below). This value, K, indicate
+ the outstanding window, i.e. how many segments can be
+ outstanding (not acknowledged) at any given time. </p>
+ </item>
+ <tag><c><![CDATA[infinity]]></c></tag>
+ <item>
+ <p>Outgoing reply messages will be segmented as needed
+ (see <c><![CDATA[max_pdu_size]]></c> below). Segment messages
+ are sent all at once (i.e. no acknowledgement awaited
+ before sending the next segment). </p>
+ </item>
+ </taglist>
+ <p>Defaults to <c><![CDATA[none]]></c>. </p>
+ <marker id="ci_max_pdu_size"></marker>
+ </item>
+
+ <tag><c><![CDATA[max_pdu_size]]></c></tag>
+ <item>
+ <p>Max message size. If the encoded message (PDU) exceeds
+ this size, the message should be segmented, and then
+ encoded. </p>
+ <p>A positive integer or <c><![CDATA[infinity]]></c>,
+ defaults to <c><![CDATA[infinity]]></c>. </p>
+ </item>
+ </taglist>
+
+ <marker id="update_conn_info"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>update_conn_info(ConnHandle, Item, Value) -> ok | {error, Reason}</name>
+ <fsummary>Update information about an active connection</fsummary>
+ <type>
+ <v>ConnHandle = #megaco_conn_handle{}</v>
+ <v>Item = conn_info_item()</v>
+ <v>Value = conn_info_value()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Update information about an active connection</p>
+ <p>Requires that the connection is activated. See
+ megaco:conn_info/2 about which items and values that are
+ valid.</p>
+
+ <marker id="system_info"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>system_info() -> [{Item, Value}] | exit(Reason)</name>
+ <name>system_info(Item) -> Value | exit(Reason)</name>
+ <fsummary>Lookup system information</fsummary>
+ <type>
+ <v>Item = system_info_item()</v>
+ </type>
+ <desc>
+ <p>Lookup system information</p>
+ <p>The following items are valid:</p>
+ <taglist>
+ <tag><c><![CDATA[text_config]]></c></tag>
+ <item>
+ <p>The text encoding config.</p>
+ </item>
+ <tag><c><![CDATA[connections]]></c></tag>
+ <item>
+ <p>Lists all active connections. Returns a list of
+ megaco_conn_handle records.</p>
+ </item>
+ <tag><c><![CDATA[users]]></c></tag>
+ <item>
+ <p>Lists all active users. Returns a list of
+ megaco_mid()'s.</p>
+ </item>
+ <tag><c><![CDATA[n_active_requests]]></c></tag>
+ <item>
+ <p>Returns an integer representing the number of requests
+ that has originated from this Erlang node and still are
+ active (and therefore consumes system resources).</p>
+ </item>
+ <tag><c><![CDATA[n_active_replies]]></c></tag>
+ <item>
+ <p>Returns an integer representing the number of replies
+ that has originated from this Erlang node and still are
+ active (and therefore consumes system resources).</p>
+ </item>
+ <tag><c><![CDATA[n_active_connections]]></c></tag>
+ <item>
+ <p>Returns an integer representing the number of active
+ connections.</p>
+ </item>
+ </taglist>
+
+ <marker id="info"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>info() -> Info</name>
+ <fsummary>All the information of the application</fsummary>
+ <type>
+ <v>Info = [{Key, Value}]</v>
+ </type>
+ <desc>
+ <p>This function produces a list of information about the megaco
+ application. Such as users and their config, connections
+ and their config, statistics and so on.</p>
+
+ <p>This information can be produced by the functions
+ <seealso marker="#user_info">user_info</seealso>,
+ <seealso marker="#conn_info">conn_info</seealso>,
+ <seealso marker="#system_info">system_info</seealso> and
+ <seealso marker="#get_stats">get_stats</seealso>
+ but this is a simple way to get it all at once.</p>
+
+ <marker id="connect"></marker> <!-- Belongs to NEXT function(s) -->
+ </desc>
+ </func>
+
+ <func>
+ <name>connect(ReceiveHandle, RemoteMid, SendHandle, ControlPid) -> {ok, ConnHandle} | {error, Reason}</name>
+ <name>connect(ReceiveHandle, RemoteMid, SendHandle, ControlPid, Extra) -> {ok, ConnHandle} | {error, Reason}</name>
+ <fsummary>Establish a "virtual" connection</fsummary>
+ <type>
+ <v>ReceiveHandle = #megaco_receive_handle{}</v>
+ <v>RemoteMid = preliminary_mid | megaco_mid()</v>
+ <v>SendHandle = term()</v>
+ <v>ControlPid = pid()</v>
+ <v>ConnHandle = #megaco_conn_handle{}</v>
+ <v>Reason = connect_reason() | handle_connect_reason() | term()</v>
+ <v>connect_reason() = {no_such_user, LocalMid} | {already_connected, ConnHandle} | term()</v>
+ <v>handle_connect_error() = {connection_refused, ConnData, ErrorInfo} | term()</v>
+ <v>LocalMid = megaco_mid()</v>
+ <v>ConnData = term()</v>
+ <v>ErrorInfo = term()</v>
+ <v>Extra = term()</v>
+ </type>
+ <desc>
+ <p>Establish a "virtual" connection</p>
+ <p>Activates a connection to a remote user. When this is done
+ the connection can be used to send messages (with
+ SendMod:send_message/2). The ControlPid is the identifier
+ of a process that controls the connection. That process will
+ be supervised and if it dies, this will be detected and the
+ UserMod:handle_disconnect/2 callback function will be
+ invoked. See the megaco_user module for more info about the
+ callback arguments. The connection may also explicitly be
+ deactivated by invoking megaco:disconnect/2.</p>
+ <p>The ControlPid may be the identity of a process residing on
+ another Erlang node. This is useful when you want to
+ distribute a user over several Erlang nodes. In such a case
+ one of the nodes has the physical connection. When a user
+ residing on one of the other nodes needs to send a request
+ (with megaco:call/3 or megaco:cast/3), the message will
+ encoded on the originating Erlang node, and then be
+ forwarded to the node with the physical connection. When the
+ reply arrives, it will be forwarded back to the originator.
+ The distributed connection may explicitly be deactivated by
+ a local call to megaco:disconnect/2 or implicitly when
+ the physical connection is deactivated (with megaco:disconnect/2,
+ killing the controlling process, halting the other node, ...).</p>
+ <p>The call of this function will trigger the callback
+ function UserMod:handle_connect/2 to be invoked. See the
+ megaco_user module for more info about the callback
+ arguments.</p>
+ <p>A connection may be established in several ways:</p>
+ <taglist>
+ <tag><c><![CDATA[provisioned MID]]></c></tag>
+ <item>
+ <p>The MG may explicitly invoke megaco:connect/4 and use
+ a provisioned MID of the MGC as the RemoteMid.</p>
+ </item>
+ <tag><c><![CDATA[upgrade preliminary MID]]></c></tag>
+ <item>
+ <p>The MG may explicitly invoke megaco:connect/4 with the
+ atom 'preliminary_mid' as a temporary MID of the MGC,
+ send an intial message, the Service Change Request, to
+ the MGC and then wait for an initial message, the
+ Service Change Reply. When the reply arrives, the Megaco
+ application will pick the MID of the MGC from the
+ message header and automatically upgrade the connection
+ to be a "normal" connection. By using this method of
+ establishing the connection, the callback function
+ UserMod:handle_connect/2 to be invoked twice. First with
+ a ConnHandle with the remote_mid-field set to
+ preliminary_mid, and then when the connection upgrade is
+ done with the remote_mid-field set to the actual MID of
+ the MGC.</p>
+ </item>
+ <tag><c><![CDATA[automatic]]></c></tag>
+ <item>
+ <p>When the MGC receives its first message, the Service
+ Change Request, the Megaco application will
+ automatically establish the connection by using the MG
+ MID found in the message header as remote mid.</p>
+ </item>
+ <tag><c><![CDATA[distributed]]></c></tag>
+ <item>
+ <p>When a user (MG/MGC) is distributed over several nodes,
+ it is required that the node hosting the connection
+ already has activated the connection and that it is
+ in the "normal" state. The RemoteMid must be a real
+ Megaco MID and not a preliminary_mid.</p>
+ </item>
+ </taglist>
+ <p>An initial megaco_receive_handle record may be obtained
+ with megaco:user_info(UserMid, receive_handle)</p>
+ <p>The send handle is provided by the preferred transport
+ module, e.g. megaco_tcp, megaco_udp. Read the documentation
+ about each transport module about the details.</p>
+
+ <p>The connect is done in two steps: first an internal
+ <c>connection setup</c> and then by calling the user
+ <seealso marker="megaco_user#connect">handle_connect</seealso>
+ callback function. The first step could result in
+ an error with <c>Reason = connect_reason()</c> and the second
+ an error with <c>Reason = handle_connect_reason()</c>: </p>
+
+ <taglist>
+ <tag><c>connect_reason()</c></tag>
+ <item>
+ <p>An error with this reason is generated by the
+ megaco application itself.</p>
+ </item>
+
+ <tag><c>handle_connect_reason()</c></tag>
+ <item>
+ <p>An error with this reason is caused by the user
+ <seealso marker="megaco_user#connect">handle_connect</seealso>
+ callback function either returning an error
+ or an invalid value.</p>
+ </item>
+
+ </taglist>
+
+ <p><c><![CDATA[Extra]]></c> can be any <c><![CDATA[term()]]></c>
+ except the atom <c><![CDATA[ignore_extra]]></c>.
+ It is passed (back) to the user via the callback function
+ <seealso marker="megaco_user#connect">handle_connect/3</seealso>. </p>
+
+ <marker id="disconnect"></marker> <!-- Belongs to NEXT function(s) -->
+ </desc>
+ </func>
+
+ <func>
+ <name>disconnect(ConnHandle, DiscoReason) -> ok | {error, ErrReason}</name>
+ <fsummary>Tear down a "virtual" connection</fsummary>
+ <type>
+ <v>ConnHandle = conn_handle()</v>
+ <v>DiscoReason = term()</v>
+ <v>ErrReason = term()</v>
+ </type>
+ <desc>
+ <p>Tear down a "virtual" connection</p>
+ <p>Causes the UserMod:handle_disconnect/2 callback function to
+ be invoked. See the megaco_user module for more info about
+ the callback arguments.</p>
+
+ <marker id="call"></marker> <!-- Belongs to NEXT function(s) -->
+ </desc>
+ </func>
+
+ <func>
+ <name>call(ConnHandle, Actions, Options) -> {ProtocolVersion, UserReply}</name>
+ <fsummary>Sends one or more transaction request(s) and waits for the reply</fsummary>
+ <type>
+ <v>ConnHandle = conn_handle()</v>
+ <v>Actions = action_reqs() | [action_reqs()]</v>
+ <v>action_reqs() = binary() | [action_request()]</v>
+ <v>Options = [send_option()]</v>
+ <v>send_option() = {request_timer, megaco_timer()} | {long_request_timer, megaco_timer()} | {send_handle, term()} | {protocol_version, integer()} | {call_proxy_gc_timeout, call_proxy_gc_timeout()}</v>
+ <v>ProtocolVersion = integer()</v>
+ <v>UserReply = user_reply() | [user_reply()]</v>
+ <v>user_reply() = success() | failure()</v>
+ <v>success() = {ok, result()} | {ok, result(), extra()}</v>
+ <v>result() = message_result() | segment_result()</v>
+ <v>message_result() = action_reps()</v>
+ <v>segment_result() = segments_ok()</v>
+ <v>failure() = {error, reason()} | {error, reason(), extra()}</v>
+ <v>reason() = message_reason() | segment_reason() | user_cancel_reason() | send_reason() | other_reason()</v>
+ <v>message_reason() = error_desc()</v>
+ <v>segment_reason() = {segment, segments_ok(), segments_err()} | {segment_timeout, missing_segments(), segments_ok(), segments_err()}</v>
+ <v>segments_ok() = [segment_ok()]</v>
+ <v>segment_ok() = {segment_no(), action_reps()}</v>
+ <v>segments_err() = [segment_err()]</v>
+ <v>segment_err() = {segment_no(), error_desc()}</v>
+ <v>missing_segments() = [segment_no()]</v>
+ <v>user_cancel_reason() = {user_cancel, reason_for_user_cancel()}</v>
+ <v>reason_for_user_cancel() = term()</v>
+ <v>send_reason() = send_cancelled_reason() | send_failed_reason()</v>
+ <v>send_cancelled_reason() = {send_message_cancelled, reason_for_send_cancel()}</v>
+ <v>reason_for_send_cancel() = term()</v>
+ <v>send_failed_reason() = {send_message_failed, reason_for_send_failure()}</v>
+ <v>reason_for_send_failure() = term()</v>
+ <v>other_reason() = {wrong_mid, WrongMid, RightMid, TR} | term()</v>
+ <v>WrongMid = mid()</v>
+ <v>RightMid = mid()</v>
+ <v>TR = transaction_reply()</v>
+ <v>action_reps() = [action_reply()]</v>
+ <v>call_proxy_gc_timeout() = integer() >= 0</v>
+ <v>extra() = term()</v>
+ </type>
+ <desc>
+ <p>Sends one or more transaction request(s) and waits for the
+ reply.</p>
+ <p>When sending one transaction in a message, <c><![CDATA[Actions]]></c> should be
+ <c><![CDATA[action_reqs()]]></c> (<c><![CDATA[UserReply]]></c> will then be
+ <c><![CDATA[user_reply()]]></c>). When sending several transactions in a message,
+ <c><![CDATA[Actions]]></c> should be <c><![CDATA[[action_reqs()]]]></c> (<c><![CDATA[UserReply]]></c>
+ will then be <c><![CDATA[[user_reply()]]]></c>). Each element of the list is
+ part of one transaction.</p>
+ <p>For some of <em>our</em> codecs (not binary), it is also possible
+ to pre-encode the actions, in which case <c><![CDATA[Actions]]></c> will be
+ either a <c><![CDATA[binary()]]></c> or <c><![CDATA[[binary()]]]></c>.</p>
+ <p>The function returns when the reply arrives, when the
+ request timer eventually times out or when the outstanding
+ requests are explicitly cancelled.</p>
+ <p>The default values of the send options are obtained by
+ <c><![CDATA[megaco:conn_info(ConnHandle, Item)]]></c>. But the send options
+ above, may explicitly be overridden.</p>
+ <p>The <c><![CDATA[ProtocolVersion]]></c> version is the version actually encoded
+ in the reply message.</p>
+ <p>At <c><![CDATA[success()]]></c>, the <c><![CDATA[UserReply]]></c> contains a list of
+ 'ActionReply' records possibly containing error indications.</p>
+ <p>A <c><![CDATA[message_error()]]></c>, indicates that the remote user has
+ replied with an explicit transactionError.</p>
+ <p>A <c><![CDATA[user_cancel_error()]]></c>, indicates that the request has been
+ canceled by the user. <c><![CDATA[reason_for_user_cancel()]]></c> is the reason
+ given in the call to the <seealso marker="#cancel">cancel</seealso>
+ function. </p>
+ <p>A <c><![CDATA[send_error()]]></c>, indicates that the send function of the
+ megaco transport callback module failed to send the request.
+ There are two separate cases: <c><![CDATA[send_cancelled_reason()]]></c> and
+ <c><![CDATA[send_failed_reason()]]></c>.
+ The first is the result of the send function returning
+ <c><![CDATA[{cancel, Reason}]]></c> and the second is some other kind of
+ erroneous return value. See the
+ <seealso marker="megaco_transport#send_message">send_message</seealso>
+ function for more info. </p>
+ <p>An <c><![CDATA[other_error()]]></c>, indicates some other error such as
+ timeout.</p>
+
+ <p>For more info about the <c>extra()</c> part of the
+ result, see the
+ <seealso marker="megaco_user#extra_argument">note</seealso>
+ in the user callback module documentation. </p>
+
+
+
+ <marker id="cast"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>cast(ConnHandle, Actions, Options) -> ok | {error, Reason}</name>
+ <fsummary>Sends one or more transaction request(s) but does NOT wait for a reply</fsummary>
+ <type>
+ <v>ConnHandle = conn_handle()</v>
+ <v>Actions = action_reqs() | [action_reqs()]</v>
+ <v>action_reqs() = binary() | [action_request()]</v>
+ <v>Options = [send_option()]</v>
+ <v>send_option() = {request_keep_alive_timeout, request_keep_alive_timeout()} | {request_timer, megaco_timer()} | {long_request_timer, megaco_timer()} | {send_handle, term()} | {reply_data, reply_data()} | {protocol_version, integer()}</v>
+ <v>request_keep_alive_timeout() = plain | integer() >= 0</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Sends one or more transaction request(s) but does NOT wait for a reply</p>
+ <p>When sending one transaction in a message, <c><![CDATA[Actions]]></c> should be
+ <c><![CDATA[action_reqs()]]></c>. When sending several transactions in a message,
+ <c><![CDATA[Actions]]></c> should be <c><![CDATA[[action_reqs()]]]></c>. Each element of the
+ list is part of one transaction.</p>
+ <p>For some of <em>our</em> codecs (not binary), it is also possible
+ to pre-encode the actions, in which case <c><![CDATA[Actions]]></c> will be
+ either a <c><![CDATA[binary()]]></c> or <c><![CDATA[[binary()]]]></c>.</p>
+ <p>The default values of the send options are obtained by
+ megaco:conn_info(ConnHandle, Item). But the send options above,
+ may explicitly be overridden.</p>
+ <p>The ProtocolVersion version is the version actually encoded
+ in the reply message.</p>
+ <p>The callback function UserMod:handle_trans_reply/4 is invoked
+ when the reply arrives, when the request timer eventually
+ times out or when the outstanding requests are explicitly
+ cancelled. See the megaco_user module for more info about
+ the callback arguments.</p>
+ <p>Given as UserData argument to UserMod:handle_trans_reply/4.</p>
+
+ <marker id="encode_actions"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>encode_actions(ConnHandle, Actions, Options) -> {ok, BinOrBins} | {error, Reason}</name>
+ <fsummary>Encode action requests for one or more transaction request(s)</fsummary>
+ <type>
+ <v>ConnHandle = conn_handle()</v>
+ <v>Actions = action_reqs() | [action_reqs()]</v>
+ <v>action_reqs() = [#'ActionRequest'{}]</v>
+ <v>Options = [send_option()]</v>
+ <v>send_option() = {request_timer, megaco_timer()} | {long_request_timer, megaco_timer()} | {send_handle, term()} | {protocol_version, integer()}</v>
+ <v>BinOrBins = binary() | [binary()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Encodes lists of action requests for one or more transaction
+ request(s).</p>
+ <p>When encoding action requests for one transaction,
+ <c><![CDATA[Actions]]></c> should be <c><![CDATA[action_reqs()]]></c>.
+ When encoding action requests for several transactions,
+ <c><![CDATA[Actions]]></c> should be <c><![CDATA[[action_reqs()]]]></c>. Each element
+ of the list is part of one transaction.</p>
+
+ <marker id="token_tag2string"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>token_tag2string(Tag) -> Result</name>
+ <name>token_tag2string(Tag, EncoderMod) -> Result</name>
+ <name>token_tag2string(Tag, EncoderMod, Version) -> Result</name>
+ <fsummary>Convert a token tag to a string</fsummary>
+ <type>
+ <v>Tag = atom()</v>
+ <v>EncoderMod = pretty | compact | encoder_module()</v>
+ <v>encoder_module() = megaco_pretty_text_encoder | megaco_compact_text_encoder | atom()</v>
+ <v>Version = int_version() | atom_version()</v>
+ <v>int_version() = 1 | 2 | 3</v>
+ <v>atom_version() = v1 | v2 | v3 | prev3c | prev3b</v>
+ <v>Result = string() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Convert a token tag to a string</p>
+ <p>If no encoder module is given, the default is used
+ (which is pretty).</p>
+ <p>If no or an unknown version is given,
+ the <em>best</em> version is used (which is v3).</p>
+ <p>If no match is found for <c><![CDATA[Tag]]></c>, <c><![CDATA[Result]]></c> will be the
+ empty string (<c><![CDATA[[]]]></c>).</p>
+
+ <marker id="cancel"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>cancel(ConnHandle, CancelReason) -> ok | {error, ErrReason}</name>
+ <fsummary>Cancel all outstanding messages for this connection</fsummary>
+ <type>
+ <v>ConnHandle = conn_handle()</v>
+ <v>CancelReason = term()</v>
+ <v>ErrReason = term()</v>
+ </type>
+ <desc>
+ <p>Cancel all outstanding messages for this connection</p>
+ <p>This causes outstanding megaco:call/3 requests to return.
+ The callback functions UserMod:handle_reply/4 and
+ UserMod:handle_trans_ack/4 are also invoked where it
+ applies. See the megaco_user module for more info about the
+ callback arguments.</p>
+
+ <marker id="process_received_message"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>process_received_message(ReceiveHandle, ControlPid, SendHandle, BinMsg) -> ok</name>
+ <name>process_received_message(ReceiveHandle, ControlPid, SendHandle, BinMsg, Extra) -> ok</name>
+ <fsummary>Process a received message</fsummary>
+ <type>
+ <v>ReceiveHandle = #megaco_receive_handle{}</v>
+ <v>ControlPid = pid()</v>
+ <v>SendHandle = term()</v>
+ <v>BinMsg = binary()</v>
+ <v>Extra = term()</v>
+ </type>
+ <desc>
+ <p>Process a received message</p>
+
+ <p>This function is intended to be invoked by some
+ transport modules when get an incoming message. Which
+ transport that actually is used is up to the user to
+ choose.</p>
+
+ <p>The message is delivered as an Erlang binary and is decoded
+ by the encoding module stated in the receive handle together
+ with its encoding config (also in the receive
+ handle). Depending of the outcome of the decoding various
+ callback functions will be invoked. See megaco_user for more
+ info about the callback arguments.</p>
+
+ <p>The argument <c>Extra</c> is just an opaque data structure passed to the user
+ via the callback functions in the
+ <seealso marker="megaco_user">user callback module</seealso>.
+ Note however that if <c>Extra</c> has the value
+ <c>extra_undefined</c> the argument will be ignored (same as if
+ <c>process_received_message/4</c> had been called).
+ See the documentation for the behaviour of the callback module,
+ <seealso marker="megaco_user">megaco_user</seealso>, for more info. </p>
+ <p>Note that all processing is done in the context of the calling
+ process. A transport module could call this function via one of the
+ <c><![CDATA[spawn]]></c> functions (e.g. <c><![CDATA[spawn_opt]]></c>). See also
+ <c><![CDATA[receive_message/4,5]]></c>.
+ </p>
+ <p>If the message cannot be decoded the following callback
+ function will be invoked:</p>
+ <list type="bulleted">
+ <item>
+ <p>UserMod:handle_syntax_error/3</p>
+ </item>
+ </list>
+ <p>If the decoded message instead of transactions contains a
+ message error, the following callback function will be
+ invoked:</p>
+ <list type="bulleted">
+ <item>
+ <p>UserMod:handle_message_error/3</p>
+ </item>
+ </list>
+ <p>If the decoded message happens to be received before the
+ connection is established, a new "virtual" connection is
+ established. This is typically the case for the Media
+ Gateway Controller (MGC) upon the first Service Change.
+ When this occurs the following callback function will be
+ invoked:</p>
+ <list type="bulleted">
+ <item>
+ <p>UserMod:handle_connect/2</p>
+ </item>
+ </list>
+ <p>For each transaction request in the decoded message the
+ following callback function will be invoked:</p>
+ <list type="bulleted">
+ <item>
+ <p>UserMod:handle_trans_request/3</p>
+ </item>
+ </list>
+ <p>For each transaction reply in the decoded message the reply
+ is returned to the user. Either the originating function
+ megaco:call/3 will return. Or in case the originating
+ function was megaco:case/3 the following callback function
+ will be invoked:</p>
+ <list type="bulleted">
+ <item>
+ <p>UserMod:handle_trans_reply/4</p>
+ </item>
+ </list>
+ <p>When a transaction acknowledgement is received it is
+ possible that user has decided not to bother about the
+ acknowledgement. But in case the return value from
+ UserMod:handle_trans_request/3 indicates that the
+ acknowledgement is important the following callback function
+ will be invoked:</p>
+ <list type="bulleted">
+ <item>
+ <p>UserMod:handle_trans_ack/4</p>
+ </item>
+ </list>
+ <p>See the megaco_user module for more info about the callback
+ arguments.</p>
+
+ <marker id="receive_message"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>receive_message(ReceiveHandle, ControlPid, SendHandle, BinMsg) -> ok</name>
+ <name>receive_message(ReceiveHandle, ControlPid, SendHandle, BinMsg, Extra) -> ok</name>
+ <fsummary>Process a received message</fsummary>
+ <type>
+ <v>ReceiveHandle = #megaco_receive_handle{}</v>
+ <v>ControlPid = pid()</v>
+ <v>SendHandle = term()</v>
+ <v>BinMsg = binary()</v>
+ <v>Extra = term()</v>
+ </type>
+ <desc>
+ <p>Process a received message</p>
+ <p>This is a callback function intended to be invoked by some
+ transport modules when get an incoming message. Which
+ transport that actually is used is up to the user to
+ choose.</p>
+ <p>In principle, this function calls the
+ <c><![CDATA[process_received_message/4]]></c> function via a <c><![CDATA[spawn]]></c> to
+ perform the actual processing.</p>
+ <p>For further information see the
+ <seealso marker="#process_received_message">process_received_message/4</seealso>
+ function.</p>
+
+ <marker id="parse_digit_map"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>parse_digit_map(DigitMapBody) -> {ok, ParsedDigitMap} | {error, Reason}</name>
+ <fsummary>Parses a digit map body</fsummary>
+ <type>
+ <v>DigitMapBody = string()</v>
+ <v>ParsedDigitMap = parsed_digit_map()</v>
+ <v>parsed_digit_map() = term()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Parses a digit map body</p>
+ <p>Parses a digit map body, represented as a list of
+ characters, into a list of state transitions suited to
+ be evaluated by megaco:eval_digit_map/1,2.</p>
+
+ <marker id="eval_digit_map"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>eval_digit_map(DigitMap) -> {ok, MatchResult} | {error, Reason}</name>
+ <name>eval_digit_map(DigitMap, Timers) -> {ok, MatchResult} | {error, Reason}</name>
+ <fsummary>Collect digit map letters according to the digit map</fsummary>
+ <type>
+ <v>DigitMap = #'DigitMapValue'{} | parsed_digit_map()</v>
+ <v>parsed_digit_map() = term()</v>
+ <v>ParsedDigitMap = term()</v>
+ <v>Timers = ignore() | reject()</v>
+ <v>ignore() = ignore | {ignore, digit_map_value()}</v>
+ <v>reject() = reject | {reject, digit_map_value()} | digit_map_value()</v>
+ <v>MatchResult = {Kind, Letters} | {Kind, Letters, Extra}</v>
+ <v>Kind = kind()</v>
+ <v>kind() = full | unambiguous</v>
+ <v>Letters = [letter()]</v>
+ <v>letter() = $0..$9 | $a .. $k</v>
+ <v>Extra = letter()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Collect digit map letters according to the digit map.</p>
+ <p>When evaluating a digit map, a state machine waits for
+ timeouts and letters reported by
+ megaco:report_digit_event/2. The length of the various
+ timeouts are defined in the digit_map_value() record.</p>
+ <p>When a complete sequence of valid events has been received,
+ the result is returned as a list of letters.</p>
+ <p>There are two options for handling syntax errors (that is
+ when an unexpected event is received when the digit map
+ evaluator is expecting some other event). The unexpected
+ events may either be ignored or rejected. The latter means
+ that the evaluation is aborted and an error is returned. </p>
+
+ <marker id="report_digit_event"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>report_digit_event(DigitMapEvalPid, Events) -> ok | {error, Reason}</name>
+ <fsummary>Send one or more events to the event collector process</fsummary>
+ <type>
+ <v>DigitMapEvalPid = pid()</v>
+ <v>Events = Event | [Event]</v>
+ <v>Event = letter() | pause() | cancel()</v>
+ <v>letter() = $0..$9 | $a .. $k | $A .. $K</v>
+ <v>pause() = one_second() | ten_seconds()</v>
+ <v>one_second() = $s | $S</v>
+ <v>ten_seconds() = $l | $L</v>
+ <v>cancel() = $z | $Z | cancel</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Send one or more events to the event collector process.</p>
+ <p>Send one or more events to a process that is evaluating a
+ digit map, that is a process that is executing
+ megaco:eval_digit_map/1,2.</p>
+ <p>Note that the events <c><![CDATA[$s | $S]]></c>, <c><![CDATA[l | $L]]></c> and
+ <c><![CDATA[$z | $Z]]></c> has nothing to do with the timers using
+ the same characters.</p>
+
+ <marker id="test_digit_event"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>test_digit_event(DigitMap, Events) -> {ok, Kind, Letters} | {error, Reason}</name>
+ <fsummary>Feed digit map collector with events and return the result</fsummary>
+ <type>
+ <v>DigitMap = #'DigitMapValue'{} | parsed_digit_map()</v>
+ <v>parsed_digit_map() = term()</v>
+ <v>ParsedDigitMap = term()</v>
+ <v>Timers = ignore() | reject()</v>
+ <v>ignore() = ignore | {ignore, digit_map_value()}</v>
+ <v>reject() = reject | {reject, digit_map_value()} | digit_map_value()</v>
+ <v>DigitMapEvalPid = pid()</v>
+ <v>Events = Event | [Event]</v>
+ <v>Event = letter() | pause() | cancel()</v>
+ <v>Kind = kind()</v>
+ <v>kind() = full | unambiguous</v>
+ <v>Letters = [letter()]</v>
+ <v>letter() = $0..$9 | $a .. $k | $A .. $K</v>
+ <v>pause() = one_second() | ten_seconds()</v>
+ <v>one_second() = $s | $S</v>
+ <v>ten_seconds() = $l | $L</v>
+ <v>cancel () = $z | $Z | cancel</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Feed digit map collector with events and return the result</p>
+ <p>This function starts the evaluation of a digit map with
+ megaco:eval_digit_map/1 and sends a sequence of events to it
+ megaco:report_digit_event/2 in order to simplify testing of
+ digit maps.</p>
+
+ <marker id="encode_sdp"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>encode_sdp(SDP) -> {ok, PP} | {error, Reason}</name>
+ <fsummary>Encode an SDP construct</fsummary>
+ <type>
+ <v>SDP = sdp_property_parm() | sdp_property_group() | sdp_property_groups() | asn1_NOVALUE</v>
+ <v>PP = property_parm() | property_group() | property_groups() | asn1_NOVALUE</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Encode (generate) an SDP construct.</p>
+ <p>If a <c><![CDATA[property_parm()]]></c> is found as part of the input
+ (<c><![CDATA[SDP]]></c>) then it is left unchanged.</p>
+ <p>This function performs the following transformation:</p>
+ <list type="bulleted">
+ <item>
+ <p>sdp() -&gt; property_parm()</p>
+ </item>
+ <item>
+ <p>sdp_property_group() -&gt; property_group()</p>
+ </item>
+ <item>
+ <p>sdp_property_groups() -&gt; property_groups()</p>
+ </item>
+ </list>
+
+ <marker id="decode_sdp"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>decode_sdp(PP) -> {ok, SDP} | {error, Reason}</name>
+ <fsummary>Decode an property parameter construct</fsummary>
+ <type>
+ <v>PP = property_parm() | property_group() | property_groups() | asn1_NOVALUE</v>
+ <v>SDP = sdp() | decode_sdp_property_group() | decode_sdp_property_groups() | asn1_NOVALUE</v>
+ <v>decode_sdp() = sdp() | {property_parm(), DecodeError}</v>
+ <v>decode_sdp_property_group() = [decode_sdp()]</v>
+ <v>decode_sdp_property_groups() = [decode_sdp_property_group()]</v>
+ <v>DecodeError = term()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Decode (parse) a property parameter construct.</p>
+ <p>When decoding <c><![CDATA[property_group()]]></c> or
+ <c><![CDATA[property_groups()]]></c>,
+ those property parameter constructs that cannot be decoded
+ (either because of decode error or because they are unknown),
+ will be returned as a two-tuple. The first element of which
+ will be the (undecoded) property parameter and the other the
+ actual reason.
+ This means that the caller of this function has to expect not
+ only sdp-records, but also this two-tuple construct.</p>
+ <p>This function performs the following transformation:</p>
+ <list type="bulleted">
+ <item>
+ <p>property_parm() -&gt; sdp()</p>
+ </item>
+ <item>
+ <p>property_group() -&gt; sdp_property_group()</p>
+ </item>
+ <item>
+ <p>property_groups() -&gt; sdp_property_groups()</p>
+ </item>
+ </list>
+
+ <marker id="get_sdp_record_from_PG"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_sdp_record_from_PropertGroup(Type, PG) -> [sdp()]</name>
+ <fsummary>Get all sdp records of a certain type from a property group</fsummary>
+ <type>
+ <v>Type = v | c | m | o | a | b | t | r | z | k | s | i | u | e | p</v>
+ <v>PG = sdp_property_group()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Retreive all the sdp records of type <c>Type</c> from the
+ property group <c>PG</c>.</p>
+
+ <marker id="versions1"></marker>
+ <marker id="versions2"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>versions1() -> {ok, VersionInfo} | {error, Reason}</name>
+ <name>versions2() -> {ok, Info} | {error, Reason}</name>
+ <fsummary>Retreive various system and application info</fsummary>
+ <type>
+ <v>VersionInfo = [version_info()]</v>
+ <v>version_info() = term()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Utility functions used to retrieve some system and
+ application info.</p>
+ <p>The difference between the two functions is in how they get
+ the modules to check. <c><![CDATA[versions1]]></c> uses the
+ app-file and <c><![CDATA[versions2]]></c> uses the function
+ <c><![CDATA[application:get_key]]></c>.</p>
+
+ <marker id="print_version_info"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>print_version_info() -> void()</name>
+ <name>print_version_info(VersionInfo) -> void()</name>
+ <fsummary>Formated print of result of the versions functions</fsummary>
+ <type>
+ <v>VersionInfo = [version_info()]</v>
+ <v>version_info() = term()</v>
+ </type>
+ <desc>
+ <p>Utility function to produce a formated printout of the versions
+ info generated by the <c><![CDATA[versions1]]></c> and <c><![CDATA[versions2]]></c>
+ functions.</p>
+ <p>The function print_version_info/0 uses the result of function
+ version1/0 as <c><![CDATA[VersionInfo]]></c>.</p>
+ <p>Example: </p>
+ <pre>
+ {ok, V} = megaco:versions1(), megaco:format_versions(V).
+ </pre>
+ <marker id="enable_trace"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>enable_trace(Level, Destination) -> void()</name>
+ <fsummary>Start megaco tracing</fsummary>
+ <type>
+ <v>Level = max | min | 0 &lt;= integer() &lt;= 100</v>
+ <v>Destination = File | Port | HandlerSpec | io</v>
+ <v>File = string()</v>
+ <v>Port = integer()</v>
+ <v>HandleSpec = {HandlerFun, Data}</v>
+ <v>HandleFun = fun() (two arguments)</v>
+ <v>Data = term()</v>
+ </type>
+ <desc>
+ <p>This function is used to start megaco tracing at a given
+ <c><![CDATA[Level]]></c> and direct result to the given <c><![CDATA[Destination]]></c>.</p>
+ <p>It starts a tracer server and then sets the proper match spec
+ (according to <c><![CDATA[Level]]></c>).</p>
+ <p>In the case when <c><![CDATA[Destination]]></c> is <c><![CDATA[File]]></c>, the printable
+ megaco trace events will be printed to the file <c><![CDATA[File]]></c> using
+ plain <c><![CDATA[io:format/2]]></c>. </p>
+ <p>In the case when <c><![CDATA[Destination]]></c> is <c><![CDATA[io]]></c>, the printable
+ megaco trace events will be printed on stdout using plain
+ <c><![CDATA[io:format/2]]></c>. </p>
+ <p>See <c><![CDATA[dbg]]></c> for further information.</p>
+ <marker id="disable_trace"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>disable_trace() -> void()</name>
+ <fsummary>Stop megaco tracing</fsummary>
+ <desc>
+ <p>This function is used to stop megaco tracing.</p>
+ <marker id="set_trace"></marker>
+ </desc>
+ </func>
+ <func>
+ <name>set_trace(Level) -> void()</name>
+ <fsummary>Change megaco trace level</fsummary>
+ <type>
+ <v>Level = max | min | 0 &lt;= integer() &lt;= 100</v>
+ </type>
+ <desc>
+ <p>This function is used to change the megaco trace level.</p>
+ <p>It is assumed that tracing has already been enabled (see
+ <c><![CDATA[enable_trace]]></c> above).</p>
+
+ <marker id="stats"></marker>
+ <marker id="get_stats"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_stats() -> {ok, TotalStats} | {error, Reason}</name>
+ <name>get_stats(GlobalCounter) -> {ok, CounterStats} | {error, Reason}</name>
+ <name>get_stats(ConnHandle) -> {ok, ConnHandleStats} | {error, Reason}</name>
+ <name>get_stats(ConnHandle, Counter) -> {ok, integer()} | {error, Reason}</name>
+ <fsummary></fsummary>
+ <type>
+ <v>TotalStats = [total_stats()]</v>
+ <v>total_stats() = {conn_handle(), [stats()]} | {global_counter(), integer()}</v>
+ <v>GlobalCounter = global_counter()</v>
+ <v>GlobalCounterStats = integer()</v>
+ <v>ConnHandle = conn_handle()</v>
+ <v>ConnHandleStats = [stats()]</v>
+ <v>stats() = {counter(), integer()}</v>
+ <v>Counter = counter()</v>
+ <v>counter() = medGwyGatewayNumTimerRecovery | medGwyGatewayNumErrors</v>
+ <v>global_counter() = medGwyGatewayNumErrors</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Retreive the (SNMP) statistic counters maintained by the
+ megaco application. The global
+ counters handle events that cannot be attributed to
+ a single connection (e.g. protocol errors that occur
+ before the connection has been properly setup).</p>
+ <marker id="reset_stats"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>reset_stats() -> void()</name>
+ <name>reset_stats(ConnHandle) -> void()</name>
+ <fsummary></fsummary>
+ <type>
+ <v>ConnHandle = conn_handle()</v>
+ </type>
+ <desc>
+ <p>Reset all related (SNMP) statistics counters.</p>
+ <marker id="test_request"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>test_request(ConnHandle, Version, EncodingMod, EncodingConfig, Actions) -> {MegaMsg, EncodeRes}</name>
+ <fsummary>Tests if the Actions argument is correct</fsummary>
+ <type>
+ <v>ConnHandle = conn_handle()</v>
+ <v>Version = integer()</v>
+ <v>EncodingMod = atom()</v>
+ <v>EncodingConfig = Encoding configuration</v>
+ <v>Actions = A list</v>
+ <v>MegaMsg = #'MegacoMessage'{}</v>
+ <v>EncodeRes = {ok, Bin} | {error, Reason}</v>
+ <v>Bin = binary()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Tests if the Actions argument is correctly composed.</p>
+ <p>This function is only intended for testing purposes. It's
+ supposed to have a same kind of interface as the <seealso marker="#call">call</seealso> or <seealso marker="#cast">cast</seealso> functions (with the additions
+ of the <c><![CDATA[EncodingMod]]></c> and <c><![CDATA[EncodingConfig]]></c>
+ arguments). It composes a complete megaco message end
+ attempts to encode it. The return value, will be a tuple of
+ the composed megaco message and the encode result. </p>
+
+ <marker id="test_reply"></marker>
+ </desc>
+ </func>
+
+ <func>
+ <name>test_reply(ConnHandle, Version, EncodingMod, EncodingConfig, Reply) -> {MegaMsg, EncodeRes}</name>
+ <fsummary>Tests if the Reply argument is correct</fsummary>
+ <type>
+ <v>ConnHandle = conn_handle()</v>
+ <v>Version = integer()</v>
+ <v>EncodingMod = atom()</v>
+ <v>EncodingConfig = A list</v>
+ <v>Reply = actual_reply()</v>
+ <v>MegaMsg = #'MegacoMessage'{}</v>
+ <v>EncodeRes = {ok, Bin} | {error, Reason}</v>
+ <v>Bin = binary()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Tests if the Reply argument is correctly composed.</p>
+ <p>This function is only intended for testing purposes. It's
+ supposed to test the <c><![CDATA[actual_reply()]]></c> return value of
+ the callback functions
+ <seealso marker="megaco_user#trans_request">handle_trans_request</seealso>
+ and
+ <seealso marker="megaco_user#trans_long_request">handle_trans_long_request</seealso>
+ functions (with the additions of the <c><![CDATA[EncodingMod]]></c> and
+ <c><![CDATA[EncodingConfig]]></c> arguments). It composes a complete
+ megaco message end attempts to encode it. The return value,
+ will be a tuple of the composed megaco message and the
+ encode result.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+