noble (3) megaco.3erl.gz

Provided by: erlang-manpages_25.3.2.8+dfsg-1ubuntu4_all bug

NAME

       megaco - Main API of the Megaco application

DESCRIPTION

       Interface module for the Megaco application

DATA TYPES

       megaco_mid() = ip4Address() | ip6Address() |
                      domainName() | deviceName() |
                      mtpAddress()
       ip4Address() = #'IP4Address'{}
       ip6Address() = #'IP6Address'{}
       domainName() = #'DomainName'{}
       deviceName() = pathName()
       pathName()   = ia5String(1..64)
       mtpAddress() = octetString(2..4)

       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{}

       The record megaco_incr_timer contains the following fields:

         wait_for = integer() >= 0:
           The actual timer time.

         factor = integer() >= 0:
           The factor when calculating the new timer time (wait_for).

         incr = integer():
           The  increment  value  when  calculating  the  new timer time (wait_for). Note that this value can be
           negative and that a timer restart can therefor lead to a wait_for value of zero! It is up to the user
           to be aware of the consequences of a wait_for value of zero.

         max_retries = infinity | infinity_restartable | integer() >= 0:
           The maximum number of repetitions of the timer.

           There  is  a special case for this field. When the max_retries has the value infinity_restartable, it
           means that the timer is restartable as long as some external event occurs (e.g. receipt of a  pending
           message for instance). But the timer will never be restarted "by itself", i.e. when the timer expires
           (whatever the timeout time), so does the timer. 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 infinity if incr has been set to an negative value.

EXPORTS

       start() -> ok | {error, Reason}

              Types:

                 Reason = term()

              Starts the Megaco application

              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.

       stop() -> ok | {error, Reason}

              Types:

                 Reason = term()

              Stops the Megaco application

       start_user(UserMid, Config) -> ok | {error, Reason}

              Types:

                 UserMid = megaco_mid()
                 Config = [{user_info_item(), user_info_value()}]
                 Reason = term()

              Initial configuration of a user

              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.

              A user is identified by its UserMid, which must be a legal Megaco MID.

              Config is a list of {Item, Value} tuples. See megaco:user_info/2 about which items and values that
              are valid.

       stop_user(UserMid) -> ok | {error, Reason}

              Types:

                 UserMid = megaco_mid()
                 Reason = term()

              Delete the configuration of a user

              Requires that the user does not have any active connection.

       user_info(UserMid) -> [{Item, Value}]
       user_info(UserMid, Item) -> Value | exit(Reason)

              Types:

                 Handle = user_info_handle()
                 UserMid = megaco_mid()
                 Item = user_info_item()
                 Value = user_info_value()
                 Reason = term()

              Lookup user information

              The following Item's are valid:

                connections:
                  Lists all active connections for this user. Returns a list of megaco_conn_handle records.

                receive_handle:
                  Construct a megaco_receive_handle record from user config

                trans_id:
                  Current transaction id.

                  A positive integer or the atom undefined_serial (in case no messages has been sent).

                min_trans_id:
                  First trans id.

                  A positive integer, defaults to 1.

                max_trans_id:
                  Last trans id.

                  A positive integer or infinity, defaults to infinity.

                request_timer:
                  Wait for reply.

                  The timer is cancelled when a reply is received.

                  When a pending message is received, the timer  is  cancelled  and  the  long_request_timer  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).

                  When the timer reaches an intermediate  expire,  the  request  is  resent  and  the  timer  is
                  restarted.

                  When  the  timer  reaches  the  final expire, either the function megaco:call will return with
                  {error, timeout} or the callback function handle_trans_reply will be called with  UserReply  =
                  {error, timeout} (if megaco:cast was used).

                  A Megaco Timer (see explanation above), defaults to #megaco_incr_timer{}.

                long_request_timer:
                  Wait for reply after having received a pending message.

                  When the timer reaches an intermediate expire, the timer is restarted.

                  When  a pending message is received, and the long_request_timer is not "on its final leg", the
                  timer will be restarted, and, if long_request_resend = true, the request will be re-sent.

                  A Megaco Timer (see explanation above), defaults to 60 seconds.

                long_request_resend:
                  This option indicates weather the request should be resent until the reply is  received,  even
                  though a pending message has been received.

                  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.

                  It  is of course pointless to set this value to true unless the long_request_timer (see above)
                  is also set to an incremental timer (#megaco_incr_timer{}).

                  A boolean, defaults to false.

                reply_timer:
                  Wait for an ack.

                  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.

                  If  the  timer  is  of type #megaco_incr_timer{}, then for each intermediate timout, the reply
                  will be resent (this is valid until the ack is received or the timer expires).

                  A Megaco Timer (see explanation above), defaults to 30000.

                request_keep_alive_timeout:
                  Specifies the timeout time for the request-keep-alive timer.

                  This timer is started when the first reply  to  an  asynchronous  request  (issued  using  the
                  megaco:cast/3  function)  arrives. As long as this timer is running, replies will be delivered
                  via the handle_trans_reply/4,5 callback function, with their "arrival number"  (see  UserReply
                  of the handle_trans_reply/4,5 callback function).

                  Replies   arriving   after   the   timer   has   expired,   will   be   delivered   using  the
                  handle_unexpected_trans/3,4 callback function.

                  The timeout time can have the values: plain | integer() >= 0.

                  Defaults to plain.

                call_proxy_gc_timeout:
                  Timeout time for the call proxy.

                  When a request is sent using the call/3 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 handle_unexpected_trans callback function.

                  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.

                  An integer >= 0, defaults to 5000 (= 5 seconds).

                auto_ack:
                  Automatic send transaction ack when the transaction reply has  been  received  (see  trans_ack
                  below).

                  This is used for three-way-handshake.

                  A boolean, defaults to false.

                trans_ack:
                  Shall ack's be accumulated or not.

                  This property is only valid if auto_ack is true.

                  If  auto_ack is true, then if trans_ack is false, ack's will be sent immediately. If trans_ack
                  is true, then ack's will instead be sent to the transaction sender  process  for  accumulation
                  and    later   sending   (see   trans_ack_maxcount,   trans_req_maxcount,   trans_req_maxsize,
                  trans_ack_maxcount and trans_timer).

                  See also transaction sender for more info.

                  An boolean, defaults to false.

                trans_ack_maxcount:
                  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).

                  See also transaction sender for more info.

                  An integer, defaults to 10.

                trans_req:
                  Shall requests be accumulated or not.

                  If trans_req is false, then request(s) will be sent immediately (in its own message).

                  If  trans_req  is true, then request(s) will instead be sent to the transaction sender process
                  for   accumulation   and   later   sending   (see   trans_ack_maxcount,    trans_req_maxcount,
                  trans_req_maxsize, trans_ack_maxcount and trans_timer).

                  See also transaction sender for more info.

                  An boolean, defaults to false.

                trans_req_maxcount:
                  Maximum  number of accumulated requests. At most this many requests will be accumulated by the
                  transaction sender (if started and configured to accumulate requests).

                  See also transaction sender for more info.

                  An integer, defaults to 10.

                trans_req_maxsize:
                  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).

                  See also transaction sender for more info.

                  An integer, defaults to 2048.

                trans_timer:
                  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 auto_ack and trans_ack are both true or
                  if trans_req is true, then transaction sender will  be  started  and  transactions  (which  is
                  depending  on  the values of auto_ack, trans_ack and trans_req) will be accumulated, for later
                  sending.

                  See also transaction sender for more info.

                  An integer, defaults to 0.

                pending_timer:
                  Automatically send pending if the timer expires before a transaction reply has been sent. This
                  timer is also called provisional response timer.

                  A Megaco Timer (see explanation above), defaults to 30000.

                sent_pending_limit:
                  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 handle_trans_request_abort) and an error message is sent to the other side.

                  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.

                  A positive integer or infinity, defaults to infinity.

                recv_pending_limit:
                  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
                  handle_trans_reply).

                  A positive integer or infinity, defaults to infinity.

                send_mod:
                  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.

                  An atom, defaults to megaco_tcp.

                encoding_mod:
                  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.

                  An atom, defaults to megaco_pretty_text_encoder.

                encoding_config:
                  Encoding module config.

                  A list, defaults to [].

                protocol_version:
                  Actual protocol version.

                  An integer, default is 1.

                strict_version:
                  Strict version control, i.e. when a message is received, verify that the version is that which
                  was negotiated.

                  An boolean, default is true.

                reply_data:
                  Default reply data.

                  Any term, defaults to the atom undefined.

                user_mod:
                  Name of the user callback module. See the the reference manual for megaco_user for more info.

                user_args:
                  List  of  extra  arguments  to  the  user callback functions. See the the reference manual for
                  megaco_user for more info.

                threaded:
                  If a received message contains several transaction requests, this option indicates whether the
                  requests should be handled sequentially in the same process (false), or if each request should
                  be handled by its own process (true i.e. a separate process is spawned for each request).

                  An boolean, defaults to false.

                resend_indication:
                  This option indicates weather the transport module should be told  if  a  message  send  is  a
                  resend or not.

                  If false, megaco messages are sent using the send_message function.

                  If  true,  megaco  message  re-sends  are  made using the resend_message function. The initial
                  message send is still done using the send_message function.

                  The special value flag instead indicates that the function send_message/3 shall be used.

                  A resend_indication(), defaults to false.

                segment_reply_ind:
                  This option specifies if the user shall be notified of received segment replies or not.

                  See handle_segment_reply callback function for more information.

                  A boolean, defaults to false.

                segment_recv_timer:
                  This timer is started when the  segment  indicated  by  the  segmentation  complete  token  is
                  received, but all segments has not yet been received.

                  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 segment  timeout  UserReply  in  either  the
                  handle_trans_reply callback function or the return value of the call function.

                  A Megaco Timer (see explanation above), defaults to 10000.

                segment_send:
                  Shall outgoing messages be segmented or not:

                  none:
                    Do not segment outgoing reply messages. This is useful 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).

                  integer() > 0:
                    Outgoing reply messages will be segmented as needed (see max_pdu_size below). This value, K,
                    indicate  the  outstanding  window,  i.e.  how  many  segments  can  be   outstanding   (not
                    acknowledged) at any given time.

                  infinity:
                    Outgoing  reply  messages  will  be  segmented  as  needed (see max_pdu_size below). Segment
                    messages are sent all at once (i.e. no  acknowledgement  awaited  before  sending  the  next
                    segment).

                  Defaults to none.

                max_pdu_size:
                  Max  message  size.  If  the  encoded  message  (PDU) exceeds this size, the message should be
                  segmented, and then encoded.

                  A positive integer or infinity, defaults to infinity.

       update_user_info(UserMid, Item, Value) -> ok | {error, Reason}

              Types:

                 UserMid = megaco_mid()
                 Item = user_info_item()
                 Value = user_info_value()
                 Reason = term()

              Update information about a user

              Requires that the user is started. See megaco:user_info/2 about which items and  values  that  are
              valid.

       conn_info(ConnHandle) -> [{Item, Value}]
       conn_info(ConnHandle, Item) -> Value | exit(Reason)

              Types:

                 ConnHandle = #megaco_conn_handle{}
                 Item = conn_info_item()
                 Value = conn_info_value()
                 Reason = {no_such_connection, ConnHandle} | term()

              Lookup information about an active connection

              Requires that the connection is active.

                control_pid:
                  The process identifier of the controlling process for a connection.

                send_handle:
                  Opaque send handle whose contents is internal for the send module. May be any term.

                local_mid:
                  The local mid (of the connection, i.e. the own mid). megaco_mid().

                remote_mid:
                  The remote mid (of the connection). megaco_mid().

                receive_handle:
                  Construct a megaco_receive_handle record.

                trans_id:
                  Next transaction id. A positive integer or the atom undefined_serial (only in case of error).

                  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).

                max_trans_id:
                  Last trans id.

                  A positive integer or infinity, defaults to infinity.

                request_timer:
                  Wait for reply.

                  The timer is cancelled when a reply is received.

                  When  a  pending  message  is  received,  the timer is cancelled and the long_request_timer 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).

                  When  the  timer  reaches  an  intermediate  expire,  the  request  is resent and the timer is
                  restarted.

                  When the timer reaches the final expire, either the  function  megaco:call  will  return  with
                  {error,  timeout}  or the callback function handle_trans_reply will be called with UserReply =
                  {error, timeout} (if megaco:cast was used).

                  A Megaco Timer (see explanation above), defaults to #megaco_incr_timer{}.

                long_request_timer:
                  Wait for reply after having received a pending message.

                  When the timer reaches an intermediate expire, the timer restarted.

                  When a pending message is received, and the long_request_timer is not "on its final leg",  the
                  timer will be restarted, and, if long_request_resend = true, the request will be re-sent.

                  A Megaco Timer (see explanation above), defaults to 60 seconds.

                request_keep_alive_timeout:
                  Specifies the timeout time for the request-keep-alive timer.

                  This  timer  is  started  when  the  first  reply to an asynchronous request (issued using the
                  megaco:cast/3 function) arrives. As long as this timer is running, replies will  be  delivered
                  via  the  handle_trans_reply/4,5 callback function, with their "arrival number" (see UserReply
                  of the handle_trans_reply/4,5 callback function).

                  Replies  arriving   after   the   timer   has   expired,   will   be   delivered   using   the
                  handle_unexpected_trans/3,4 callback function.

                  The timeout time can have the values: plain | integer() >= 0.

                  Defaults to plain.

                long_request_resend:
                  This  option  indicates weather the request should be resent until the reply is received, even
                  though a pending message has been received.

                  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.

                  It is of course pointless to set this value to true unless the long_request_timer (see  above)
                  is also set to an incremental timer (#megaco_incr_timer{}).

                  A boolean, defaults to false.

                reply_timer:
                  Wait for an ack.

                  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.

                  If the timer is of type #megaco_incr_timer{}, then for each  intermediate  timout,  the  reply
                  will be resent (this is valid until the ack is received or the timer expires).

                  A Megaco Timer (see explanation above), defaults to 30000.

                call_proxy_gc_timeout:
                  Timeout time for the call proxy.

                  When  a  request  is  sent using the call/3 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 handle_unexpected_trans callback function.

                  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.

                  An integer >= 0, defaults to 5000 (= 5 seconds).

                auto_ack:
                  Automatic  send  transaction  ack  when the transaction reply has been received (see trans_ack
                  below).

                  This is used for three-way-handshake.

                  A boolean, defaults to false.

                trans_ack:
                  Shall ack's be accumulated or not.

                  This property is only valid if auto_ack is true.

                  If auto_ack is true, then if trans_ack is false, ack's will be sent immediately. If  trans_ack
                  is  true,  then  ack's will instead be sent to the transaction sender process for accumulation
                  and   later   sending   (see   trans_ack_maxcount,   trans_req_maxcount,    trans_req_maxsize,
                  trans_ack_maxcount and trans_timer).

                  See also transaction sender for more info.

                  An boolean, defaults to false.

                trans_ack_maxcount:
                  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).

                  See also transaction sender for more info.

                  An integer, defaults to 10.

                trans_req:
                  Shall requests be accumulated or not.

                  If trans_req is false, then request(s) will be sent immediately (in its own message).

                  If trans_req is true, then request(s) will instead be sent to the transaction  sender  process
                  for    accumulation   and   later   sending   (see   trans_ack_maxcount,   trans_req_maxcount,
                  trans_req_maxsize, trans_ack_maxcount and trans_timer).

                  See also transaction sender for more info.

                  An boolean, defaults to false.

                trans_req_maxcount:
                  Maximum number of accumulated requests. At most this many requests will be accumulated by  the
                  transaction sender (if started and configured to accumulate requests).

                  See also transaction sender for more info.

                  An integer, defaults to 10.

                trans_req_maxsize:
                  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).

                  See also transaction sender for more info.

                  An integer, defaults to 2048.

                trans_timer:
                  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 auto_ack and  trans_ack  is  true  or  if
                  trans_req  is  true,  then  transaction  sender  will  be  started  and transactions (which is
                  depending on the values of auto_ack, trans_ack and trans_req) will be accumulated,  for  later
                  sending.

                  See also transaction sender for more info.

                  An integer, defaults to 0.

                pending_timer:
                  Automatic  send  transaction  pending if the timer expires before a transaction reply has been
                  sent. This timer is also called provisional response timer.

                  A Megaco Timer (see explanation above), defaults to 30000.

                sent_pending_limit:
                  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 handle_trans_request_abort) and an error message is sent to the other side.

                  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.

                  A positive integer or infinity, defaults to infinity.

                recv_pending_limit:
                  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
                  handle_trans_reply).

                  A positive integer or infinity, defaults to infinity.

                send_mod:
                  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.

                  An atom, defaults to megaco_tcp.

                encoding_mod:
                  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.

                  An atom, defaults to megaco_pretty_text_encoder.

                encoding_config:
                  Encoding module config.

                  A list, defaults to [].

                protocol_version:
                  Actual protocol version.

                  An positive integer, Current default is 1.

                strict_version:
                  Strict version control, i.e. when a message is received, verify that the version is that which
                  was negotiated.

                  An boolean, default is true.

                reply_data:
                  Default reply data.

                  Any term, defaults to the atom undefined.

                threaded:
                  If a received message contains several transaction requests, this option indicates whether the
                  requests should be handled sequentially in the same process (false), or if each request should
                  be handled by its own process (true i.e. a separate process is spawned for each request).

                  An boolean, defaults to false.

                resend_indication:
                  This option indicates weather the transport module should be told  if  a  message  send  is  a
                  resend or not.

                  If false, megaco messages are sent using the send_message/2 function.

                  If  true,  megaco  message  re-sends  are  made using the resend_message function. The initial
                  message send is still done using the send_message function.

                  The special value flag instead indicates that the function send_message/3 shall be used.

                  A resend_indication(), defaults to false.

                segment_reply_ind:
                  This option specifies if the user shall be notified of received segment replies or not.

                  See handle_segment_reply callback function for more information.

                  A boolean, defaults to false.

                segment_recv_timer:
                  This timer is started when the segment indicated by the segmentation complete token (e.g.  the
                  last  of  the segment which makes up the reply) is received, but all segments has not yet been
                  received.

                  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 segment timeout UserReply in either the
                  handle_trans_reply callback function or the return value of the call function.

                  A Megaco Timer (see explanation above), defaults to 10000.

                segment_send:
                  Shall outgoing messages be segmented or not:

                  none:
                    Do not segment outgoing reply messages. This is useful 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).

                  integer() > 0:
                    Outgoing reply messages will be segmented as needed (see max_pdu_size below). This value, K,
                    indicate   the   outstanding  window,  i.e.  how  many  segments  can  be  outstanding  (not
                    acknowledged) at any given time.

                  infinity:
                    Outgoing reply messages will be  segmented  as  needed  (see  max_pdu_size  below).  Segment
                    messages  are  sent  all  at  once  (i.e. no acknowledgement awaited before sending the next
                    segment).

                  Defaults to none.

                max_pdu_size:
                  Max message size. If the encoded message (PDU)  exceeds  this  size,  the  message  should  be
                  segmented, and then encoded.

                  A positive integer or infinity, defaults to infinity.

       update_conn_info(ConnHandle, Item, Value) -> ok | {error, Reason}

              Types:

                 ConnHandle = #megaco_conn_handle{}
                 Item = conn_info_item()
                 Value = conn_info_value()
                 Reason = term()

              Update information about an active connection

              Requires  that  the  connection  is activated. See megaco:conn_info/2 about which items and values
              that are valid.

       system_info() -> [{Item, Value}] | exit(Reason)
       system_info(Item) -> Value | exit(Reason)

              Types:

                 Item = system_info_item()

              Lookup system information

              The following items are valid:

                text_config:
                  The text encoding config.

                connections:
                  Lists all active connections. Returns a list of megaco_conn_handle records.

                users:
                  Lists all active users. Returns a list of megaco_mid()'s.

                n_active_requests:
                  Returns an integer representing the number of requests that has originated  from  this  Erlang
                  node and still are active (and therefore consumes system resources).

                n_active_replies:
                  Returns  an  integer  representing  the number of replies that has originated from this Erlang
                  node and still are active (and therefore consumes system resources).

                n_active_connections:
                  Returns an integer representing the number of active connections.

       info() -> Info

              Types:

                 Info = [{Key, Value}]

              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.

              This  information can be produced by the functions user_info, conn_info, system_info and get_stats
              but this is a simple way to get it all at once.

       connect(ReceiveHandle, RemoteMid, SendHandle, ControlPid) -> {ok, ConnHandle} | {error, Reason}
       connect(ReceiveHandle, RemoteMid, SendHandle, ControlPid, Extra) -> {ok, ConnHandle} | {error, Reason}

              Types:

                 ReceiveHandle = #megaco_receive_handle{}
                 RemoteMid = preliminary_mid | megaco_mid()
                 SendHandle = term()
                 ControlPid = pid()
                 ConnHandle = #megaco_conn_handle{}
                 Reason = connect_reason() | handle_connect_reason() | term()
                 connect_reason() = {no_such_user, LocalMid} | {already_connected, ConnHandle} | term()
                 handle_connect_error() = {connection_refused, ConnData, ErrorInfo} | term()
                 LocalMid = megaco_mid()
                 ConnData = term()
                 ErrorInfo = term()
                 Extra = term()

              Establish a "virtual" connection

              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.

              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, ...).

              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.

              A connection may be established in several ways:

                provisioned MID:
                  The  MG  may  explicitly  invoke  megaco:connect/4 and use a provisioned MID of the MGC as the
                  RemoteMid.

                upgrade preliminary MID:
                  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.

                automatic:
                  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.

                distributed:
                  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.

              An   initial   megaco_receive_handle   record   may  be  obtained  with  megaco:user_info(UserMid,
              receive_handle)

              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.

              The  connect is done in two steps: first an internal connection setup and then by calling the user
              handle_connect callback function.  The  first  step  could  result  in  an  error  with  Reason  =
              connect_reason() and the second an error with Reason = handle_connect_reason():

                connect_reason():
                  An error with this reason is generated by the megaco application itself.

                handle_connect_reason():
                  An  error  with  this  reason  is  caused  by the user handle_connect callback function either
                  returning an error or an invalid value.

              Extra can be any term() except the atom ignore_extra. It is passed (back)  to  the  user  via  the
              callback function handle_connect/3.

       disconnect(ConnHandle, DiscoReason) -> ok | {error, ErrReason}

              Types:

                 ConnHandle = conn_handle()
                 DiscoReason = term()
                 ErrReason = term()

              Tear down a "virtual" connection

              Causes the UserMod:handle_disconnect/2 callback function to be invoked. See the megaco_user module
              for more info about the callback arguments.

       call(ConnHandle, Actions, Options) -> {ProtocolVersion, UserReply}

              Types:

                 ConnHandle = conn_handle()
                 Actions = action_reqs() | [action_reqs()]
                 action_reqs() = binary() | [action_request()]
                 Options = [send_option()]
                 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()}
                 ProtocolVersion = integer()
                 UserReply = user_reply() | [user_reply()]
                 user_reply() = success() | failure()
                 success() = {ok, result()} | {ok, result(), extra()}
                 result() = message_result() | segment_result()
                 message_result() = action_reps()
                 segment_result() = segments_ok()
                 failure() = {error, reason()} | {error, reason(), extra()}
                 reason() =  message_reason()  |  segment_reason()  |  user_cancel_reason()  |  send_reason()  |
                 other_reason()
                 message_reason() = error_desc()
                 segment_reason()    =    {segment,    segments_ok(),    segments_err()}   |   {segment_timeout,
                 missing_segments(), segments_ok(), segments_err()}
                 segments_ok() = [segment_ok()]
                 segment_ok() = {segment_no(), action_reps()}
                 segments_err() = [segment_err()]
                 segment_err() = {segment_no(), error_desc()}
                 missing_segments() = [segment_no()]
                 user_cancel_reason() = {user_cancel, reason_for_user_cancel()}
                 reason_for_user_cancel() = term()
                 send_reason() = send_cancelled_reason() | send_failed_reason()
                 send_cancelled_reason() = {send_message_cancelled, reason_for_send_cancel()}
                 reason_for_send_cancel() = term()
                 send_failed_reason() = {send_message_failed, reason_for_send_failure()}
                 reason_for_send_failure() = term()
                 other_reason() = {wrong_mid, WrongMid, RightMid, TR} | term()
                 WrongMid = mid()
                 RightMid = mid()
                 TR = transaction_reply()
                 action_reps() = [action_reply()]
                 call_proxy_gc_timeout() = integer() >= 0
                 extra() = term()

              Sends one or more transaction request(s) and waits for the reply.

              When sending one transaction in a message, Actions should be action_reqs() (UserReply will then be
              user_reply()).  When  sending several transactions in a message, Actions should be [action_reqs()]
              (UserReply will then be [user_reply()]). Each element of the list is part of one transaction.

              For some of our codecs (not binary), it is also possible to pre-encode the actions, in which  case
              Actions will be either a binary() or [binary()].

              The  function  returns when the reply arrives, when the request timer eventually times out or when
              the outstanding requests are explicitly cancelled.

              The default values of the send options are obtained by megaco:conn_info(ConnHandle, Item). But the
              send options above, may explicitly be overridden.

              The ProtocolVersion version is the version actually encoded in the reply message.

              At  success(),  the  UserReply  contains a list of 'ActionReply' records possibly containing error
              indications.

              A message_error(), indicates that the remote user has replied with an explicit transactionError.

              A  user_cancel_error(),  indicates  that  the   request   has   been   canceled   by   the   user.
              reason_for_user_cancel() is the reason given in the call to the cancel function.

              A send_error(), indicates that the send function of the megaco transport callback module failed to
              send the request. There are two separate cases: send_cancelled_reason() and  send_failed_reason().
              The  first  is  the  result of the send function returning {cancel, Reason} and the second is some
              other kind of erroneous return value. See the send_message function for more info.

              An other_error(), indicates some other error such as timeout.

              For more info about the extra() part of the result, see the  note  in  the  user  callback  module
              documentation.

       cast(ConnHandle, Actions, Options) -> ok | {error, Reason}

              Types:

                 ConnHandle = conn_handle()
                 Actions = action_reqs() | [action_reqs()]
                 action_reqs() = binary() | [action_request()]
                 Options = [send_option()]
                 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()}
                 request_keep_alive_timeout() = plain | integer() >= 0
                 Reason = term()

              Sends one or more transaction request(s) but does NOT wait for a reply

              When  sending  one transaction in a message, Actions should be action_reqs(). When sending several
              transactions in a message, Actions should be [action_reqs()]. Each element of the list is part  of
              one transaction.

              For  some of our codecs (not binary), it is also possible to pre-encode the actions, in which case
              Actions will be either a binary() or [binary()].

              The default values of the send options are obtained by megaco:conn_info(ConnHandle, Item). But the
              send options above, may explicitly be overridden.

              The ProtocolVersion version is the version actually encoded in the reply message.

              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.

              Given as UserData argument to UserMod:handle_trans_reply/4.

       encode_actions(ConnHandle, Actions, Options) -> {ok, BinOrBins} | {error, Reason}

              Types:

                 ConnHandle = conn_handle()
                 Actions = action_reqs() | [action_reqs()]
                 action_reqs() = [#'ActionRequest'{}]
                 Options = [send_option()]
                 send_option()  =  {request_timer,  megaco_timer()}  |  {long_request_timer,  megaco_timer()}  |
                 {send_handle, term()} | {protocol_version, integer()}
                 BinOrBins = binary() | [binary()]
                 Reason = term()

              Encodes lists of action requests for one or more transaction request(s).

              When encoding action requests for one transaction, Actions should be action_reqs(). When  encoding
              action  requests  for several transactions, Actions should be [action_reqs()]. Each element of the
              list is part of one transaction.

       token_tag2string(Tag) -> Result
       token_tag2string(Tag, EncoderMod) -> Result
       token_tag2string(Tag, EncoderMod, Version) -> Result

              Types:

                 Tag = atom()
                 EncoderMod = pretty | compact | encoder_module()
                 encoder_module() = megaco_pretty_text_encoder | megaco_compact_text_encoder | atom()
                 Version = int_version() | atom_version()
                 int_version() = 1 | 2 | 3
                 atom_version() = v1 | v2 | v3
                 Result = string() | {error, Reason}
                 Reason = term()

              Convert a token tag to a string

              If no encoder module is given, the default is used (which is pretty).

              If no or an unknown version is given, the best version is used (which is v3).

              If no match is found for Tag, Result will be the empty string ([]).

       cancel(ConnHandle, CancelReason) -> ok | {error, ErrReason}

              Types:

                 ConnHandle = conn_handle()
                 CancelReason = term()
                 ErrReason = term()

              Cancel all outstanding messages for this connection

              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.

       process_received_message(ReceiveHandle, ControlPid, SendHandle, BinMsg) -> ok
       process_received_message(ReceiveHandle, ControlPid, SendHandle, BinMsg, Extra) -> ok

              Types:

                 ReceiveHandle = #megaco_receive_handle{}
                 ControlPid = pid()
                 SendHandle = term()
                 BinMsg = binary()
                 Extra = term()

              Process a received message

              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.

              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.

              The argument Extra is just an opaque data structure passed to the user via the callback  functions
              in the user callback module. Note however that if Extra has the value extra_undefined the argument
              will be ignored (same as if process_received_message/4 had been called). See the documentation for
              the behaviour of the callback module, megaco_user, for more info.

              Note  that  all processing is done in the context of the calling process. A transport module could
              call this function via one of the spawn functions (e.g. spawn_opt). See also receive_message/4,5.

              If the message cannot be decoded the following callback function will be invoked:

                * UserMod:handle_syntax_error/3

              If the decoded message instead of transactions contains a message error,  the  following  callback
              function will be invoked:

                * UserMod:handle_message_error/3

              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:

                * UserMod:handle_connect/2

              For each transaction request in the decoded  message  the  following  callback  function  will  be
              invoked:

                * UserMod:handle_trans_request/3

              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:

                * UserMod:handle_trans_reply/4

              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:

                * UserMod:handle_trans_ack/4

              See the megaco_user module for more info about the callback arguments.

       receive_message(ReceiveHandle, ControlPid, SendHandle, BinMsg) -> ok
       receive_message(ReceiveHandle, ControlPid, SendHandle, BinMsg, Extra) -> ok

              Types:

                 ReceiveHandle = #megaco_receive_handle{}
                 ControlPid = pid()
                 SendHandle = term()
                 BinMsg = binary()
                 Extra = term()

              Process a received message

              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.

              In principle, this function calls the process_received_message/4 function via a spawn  to  perform
              the actual processing.

              For further information see the process_received_message/4 function.

       parse_digit_map(DigitMapBody) -> {ok, ParsedDigitMap} | {error, Reason}

              Types:

                 DigitMapBody = string()
                 ParsedDigitMap = parsed_digit_map()
                 parsed_digit_map() = term()
                 Reason = term()

              Parses a digit map body

              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.

       eval_digit_map(DigitMap) -> {ok, MatchResult} | {error, Reason}
       eval_digit_map(DigitMap, Timers) -> {ok, MatchResult} | {error, Reason}

              Types:

                 DigitMap = #'DigitMapValue'{} | parsed_digit_map()
                 parsed_digit_map() = term()
                 ParsedDigitMap = term()
                 Timers = ignore() | reject()
                 ignore() = ignore | {ignore, digit_map_value()}
                 reject() = reject | {reject, digit_map_value()} | digit_map_value()
                 MatchResult = {Kind, Letters} | {Kind, Letters, Extra}
                 Kind = kind()
                 kind() = full | unambiguous
                 Letters = [letter()]
                 letter() = $0..$9 | $a .. $k
                 Extra = letter()
                 Reason = term()

              Collect digit map letters according to the digit map.

              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.

              When a complete sequence of valid events has been received, the result is returned as  a  list  of
              letters.

              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.

       report_digit_event(DigitMapEvalPid, Events) -> ok | {error, Reason}

              Types:

                 DigitMapEvalPid = pid()
                 Events = Event | [Event]
                 Event = letter() | pause() | cancel()
                 letter() = $0..$9 | $a .. $k | $A .. $K
                 pause() = one_second() | ten_seconds()
                 one_second() = $s | $S
                 ten_seconds() = $l | $L
                 cancel() = $z | $Z | cancel
                 Reason = term()

              Send one or more events to the event collector process.

              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.

              Note that the events $s | $S, l | $L and $z | $Z has nothing to do with the timers using the  same
              characters.

       test_digit_event(DigitMap, Events) -> {ok, Kind, Letters} | {error, Reason}

              Types:

                 DigitMap = #'DigitMapValue'{} | parsed_digit_map()
                 parsed_digit_map() = term()
                 ParsedDigitMap = term()
                 Timers = ignore() | reject()
                 ignore() = ignore | {ignore, digit_map_value()}
                 reject() = reject | {reject, digit_map_value()} | digit_map_value()
                 DigitMapEvalPid = pid()
                 Events = Event | [Event]
                 Event = letter() | pause() | cancel()
                 Kind = kind()
                 kind() = full | unambiguous
                 Letters = [letter()]
                 letter() = $0..$9 | $a .. $k | $A .. $K
                 pause() = one_second() | ten_seconds()
                 one_second() = $s | $S
                 ten_seconds() = $l | $L
                 cancel () = $z | $Z | cancel
                 Reason = term()

              Feed digit map collector with events and return the result

              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.

       encode_sdp(SDP) -> {ok, PP} | {error, Reason}

              Types:

                 SDP = sdp_property_parm() | sdp_property_group() | sdp_property_groups() | asn1_NOVALUE
                 PP = property_parm() | property_group() | property_groups() | asn1_NOVALUE
                 Reason = term()

              Encode (generate) an SDP construct.

              If a property_parm() is found as part of the input (SDP) then it is left unchanged.

              This function performs the following transformation:

                * sdp() -> property_parm()

                * sdp_property_group() -> property_group()

                * sdp_property_groups() -> property_groups()

       decode_sdp(PP) -> {ok, SDP} | {error, Reason}

              Types:

                 PP = property_parm() | property_group() | property_groups() | asn1_NOVALUE
                 SDP = sdp() | decode_sdp_property_group() | decode_sdp_property_groups() | asn1_NOVALUE
                 decode_sdp() = sdp() | {property_parm(), DecodeError}
                 decode_sdp_property_group() = [decode_sdp()]
                 decode_sdp_property_groups() = [decode_sdp_property_group()]
                 DecodeError = term()
                 Reason = term()

              Decode (parse) a property parameter construct.

              When decoding property_group() or property_groups(),  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.

              This function performs the following transformation:

                * property_parm() -> sdp()

                * property_group() -> sdp_property_group()

                * property_groups() -> sdp_property_groups()

       versions1() -> {ok, VersionInfo} | {error, Reason}
       versions2() -> {ok, Info} | {error, Reason}

              Types:

                 VersionInfo = [version_info()]
                 version_info() = term()
                 Reason = term()

              Utility functions used to retrieve some system and application info.

              The difference between the two functions is in how they get the modules to check.  versions1  uses
              the app-file and versions2 uses the function application:get_key.

       print_version_info() -> void()
       print_version_info(VersionInfo) -> void()

              Types:

                 VersionInfo = [version_info()]
                 version_info() = term()

              Utility  function  to  produce a formated printout of the versions info generated by the versions1
              and versions2 functions.

              The function print_version_info/0 uses the result of function version1/0 as VersionInfo.

              Example:

                         {ok, V} = megaco:versions1(), megaco:format_versions(V).

       enable_trace(Level, Destination) -> void()

              Types:

                 Level = max | min | 0 <= integer() <= 100
                 Destination = File | Port | HandlerSpec | io
                 File = string()
                 Port = integer()
                 HandleSpec = {HandlerFun, Data}
                 HandleFun = fun() (two arguments)
                 Data = term()

              This function is used to start megaco tracing at a given Level and  direct  result  to  the  given
              Destination.

              It starts a tracer server and then sets the proper match spec (according to Level).

              In  the  case  when  Destination is File, the printable megaco trace events will be printed to the
              file File using plain io:format/2.

              In the case when Destination is io, the printable megaco trace events will be  printed  on  stdout
              using plain io:format/2.

              See dbg for further information.

       disable_trace() -> void()

              This function is used to stop megaco tracing.

       set_trace(Level) -> void()

              Types:

                 Level = max | min | 0 <= integer() <= 100

              This function is used to change the megaco trace level.

              It is assumed that tracing has already been enabled (see enable_trace above).

       get_stats() -> {ok, TotalStats} | {error, Reason}
       get_stats(GlobalCounter) -> {ok, CounterStats} | {error, Reason}
       get_stats(ConnHandle) -> {ok, ConnHandleStats} | {error, Reason}
       get_stats(ConnHandle, Counter) -> {ok, integer()} | {error, Reason}

              Types:

                 TotalStats = [total_stats()]
                 total_stats() = {conn_handle(), [stats()]} | {global_counter(), integer()}
                 GlobalCounter = global_counter()
                 GlobalCounterStats = integer()
                 ConnHandle = conn_handle()
                 ConnHandleStats = [stats()]
                 stats() = {counter(), integer()}
                 Counter = counter()
                 counter() = medGwyGatewayNumTimerRecovery | medGwyGatewayNumErrors
                 global_counter() = medGwyGatewayNumErrors
                 Reason = term()

              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).

       reset_stats() -> void()
       reset_stats(ConnHandle) -> void()

              Types:

                 ConnHandle = conn_handle()

              Reset all related (SNMP) statistics counters.

       test_request(ConnHandle, Version, EncodingMod, EncodingConfig, Actions) -> {MegaMsg, EncodeRes}

              Types:

                 ConnHandle = conn_handle()
                 Version = integer()
                 EncodingMod = atom()
                 EncodingConfig = Encoding configuration
                 Actions = A list
                 MegaMsg = #'MegacoMessage'{}
                 EncodeRes = {ok, Bin} | {error, Reason}
                 Bin = binary()
                 Reason = term()

              Tests if the Actions argument is correctly composed.

              This  function  is  only  intended  for  testing  purposes.  It's  supposed to have a same kind of
              interface as the call or cast functions (with the additions of the EncodingMod and  EncodingConfig
              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.

       test_reply(ConnHandle, Version, EncodingMod, EncodingConfig, Reply) -> {MegaMsg, EncodeRes}

              Types:

                 ConnHandle = conn_handle()
                 Version = integer()
                 EncodingMod = atom()
                 EncodingConfig = A list
                 Reply = actual_reply()
                 MegaMsg = #'MegacoMessage'{}
                 EncodeRes = {ok, Bin} | {error, Reason}
                 Bin = binary()
                 Reason = term()

              Tests if the Reply argument is correctly composed.

              This function is only intended for testing purposes. It's  supposed  to  test  the  actual_reply()
              return   value  of  the  callback  functions  handle_trans_request  and  handle_trans_long_request
              functions (with the additions of the EncodingMod and  EncodingConfig  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.