在线文档教程

megaco

MEGACO

模块

MEGACO

模块摘要

Megaco应用程序的主要API

描述

用于Megaco应用程序的接口模块

数据类型

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

该记录megaco_incr_timer包含以下字段:

wait_for = integer() >= 0

真正的计时器时间。

factor = integer() >= 0

计算新定时器时间(wait_for)时的因素。

incr = integer()

计算新定时器时间(wait_for)时的增量值。请注意,此值可能为负数,并且计时器重新启动可能会导致wait_for值为零!用户应了解wait_for零值的后果。

max_retries = infinity | infinity_restartable | integer() >= 0

计时器的最大重复次数。

这个领域有一个特例。 当max_retries的值为infinity_restartable时,意味着只要发生一些外部事件(例如收到未决消息),定时器就可以重新启动。 但是定时器永远不会被“自动”重启,即当定时器到期时(无论超时时间)如何,定时器也是如此。 每当定时器重新启动时,超时时间将以通常的方式计算! 另外,如上所述,如果incr设置为负值,请注意将值设置为无穷大的后果。

输出

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

类型

启动Megaco应用程序

用户可以明确向megaco注册:start_user / 2和/或通过将应用程序环境变量'users'设置为{UserMid,Config}元组列表来静态配置。有关详细信息,请参阅函数megaco:start_user / 2。

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

类型

停止Megaco应用程序

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

类型

用户的初始配置

需要启动megaco应用程序。用户是媒体网关(MG)或媒体网关控制器(MGC)。一个Erlang节点可能承载许多用户。

用户是由其用户中心标识的,它必须是合法的Megaco中间。

Config是{Item,Value}元组的列表。请参阅megaco:user_info / 2了解哪些项目和值是有效的。

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

类型

删除用户的配置

要求用户没有任何活动连接。

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

类型

查找用户信息

以下项有效:

connections

列出此用户的所有活动连接。返回megaco_conn_handle记录的列表。

receive_handle

从用户配置构建一个megaco_receive_handle记录

trans_id

当前事务ID

一个正整数或原子undefined_serial(如果没有消息发送)。

min_trans_id

第一个反编号。

一个正整数,默认为1。

max_trans_id

最后的翻译ID。

一个正整数或者infinity,默认为infinity

request_timer

等待回复。

当收到答复时,取消计时器。

当收到一个待处理的消息时,定时器被取消,long_request_timer而代之以启动(见下文)。从这一点开始不会执行重新发送(因为我们现在知道对方已收到请求)。

当计时器到达中间端过期时,请求被重新启动,计时器被重新启动。

当计时器达到最终期限时,函数megaco:call将返回{error,timeout},或者使用UserReply = {error,timeout}调用回调函数handle_trans_reply(如果使用了megaco:cast)。

一个Megaco定时器(见上面的解释),默认为#megaco_incr_timer{}

long_request_timer

在收到待处理消息后等待回复。

当计时器到达中间端过期时,重新启动定时器。

当接收到挂起的消息,并且long_request_timer不是“在其最后一站”时,定时器将被重新启动,并且如果long_request_resend = true,则请求将被重新发送。

一个Megaco定时器(见上面的解释),默认为60 seconds

long_request_resend

该选项指示天气,即使收到未决消息,请求也应重新发送,直到收到答复为止。

通常,在接收到挂起消息之后,请求不会被重新发送(因为挂起的消息表明请求已被接收)。但是由于对请求的回复可能会丢失,所以这种行为有其价值。

除非(见上面)也设置为增量式定时器(),否则将该值设置为真是毫无意义的。long_request_timer#megaco_incr_timer{}

boolean,默认为false

reply_timer

进行等候

收到请求时,与回复相关的一些信息将在内部存储(例如回复的二进制文件)。此信息将一直存在,直至收到确认或计时器到期。例如,如果再次收到相同的请求(例如具有相同事务ID的请求),则(存储的)答复将由megaco自动发送(重新)发送。

如果定时器的类型为#megaco_incr_timer {},那么对于每个中间timout,答复将被重新发送(直到收到确认或计时器到期为止)。

一个Megaco定时器(见上面的解释),默认为30000。

request_keep_alive_timeout

指定请求保持活动计时器的超时时间。

当对异步请求的第一个回复(使用megaco:cast/3函数发出)到达时,启动此计时器。只要这个定时器运行,答复将通过传递handle_trans_reply/4,5回调函数,用自己“到达数”(见UserReply的的handle_trans_reply/4,5回调函数)。

定时器到期后到达的回复将使用handle_unexpected_trans/3,4回调函数发送。

超时时间可以具有以下值:plain | integer() >= 0。

默认为plain...

call_proxy_gc_timeout

呼叫代理的超时时间。

当使用该call/3功能发送请求时,代理进程将开始处理所有回复。当答复已被接收并交付给用户时,只要此选项指定,代理进程就会继续存在。任何收到的消息都通过handle_unexpected_trans回调函数传递给用户。

超时时间以毫秒为单位。值为0(零)表示代理进程将在回复完成后直接退出。

整数> = 0,默认为5000(= 5秒)。

auto_ack

当收到交易回复时自动发送交易确认(见trans_ack下文)。

这用于三方握手

boolean,默认为false

trans_ack

应该积累与否。

此属性仅在auto_ack为true时有效。

如果auto_ack为true,那么如果trans_ack为false,则会立即发送ack。 如果trans_ack为true,那么ack's将被发送到事务发送器进程以用于累积和稍后发送(请参阅trans_ack_maxcount,trans_req_maxcount,trans_req_maxsize,trans_ack_maxcount和trans_timer)。

另见transaction sender以了解更多信息。

boolean,默认为false...

trans_ack_maxcount

累计确认的最大数量。最多这个ack将由交易发送者累积(如果启动并配置为累积ack的)。

另见transaction sender想了解更多信息。

integer,默认为10。

trans_req

应否累积申请。

如果trans_reqfalse,则请求将立即发送(在它自己的消息中)。

如果trans_req为真,则请求(S)将代替被发送到用于积累该事务发送进程和以后发送(见trans_ack_maxcounttrans_req_maxcounttrans_req_maxsizetrans_ack_maxcounttrans_timer)。

另见transaction sender想了解更多信息。

boolean,默认为false...

trans_req_maxcount

最大数量的累计请求。至多这些请求将由事务发送者累积(如果启动并配置为累积请求)。

另见transaction sender以了解更多信息。

integer默认为10。

trans_req_maxsize

累计请求的最大大小。最多这个请求将被事务发送者累积(如果启动并被配置为累积请求)。

另见transaction sender以了解更多信息。

integer,默认为2048。

trans_timer

交易发件人超时时间。 有两个功能。 首先,如果值为0,那么交易将不会累积(例如,交易发送者进程将不会启动)。 其次,如果值大于0,且auto_ack和trans_ack都为真,或者如果trans_req为true,则会启动事务发送器,并且会积累事务(取决于auto_ack,trans_ack和trans_req的值),以便稍后发送。

另见transaction sender以了解更多信息。

integer默认为0。

pending_timer

如果定时器在事务应答发送之前过期,则自动发送挂起。这个定时器也称为临时响应定时器。

一个Megaco定时器(见上面的解释),默认为30000。

sent_pending_limit

发送暂挂限制(请参阅megaco根包的MGOriginatedPendingLimit和MGCOriginatedPendingLimit)。此参数指定可以发送多少个待处理消息(针对给定的收到的事务请求)。超过限制时,交易将中止(请参阅handle_trans_request_abort),并向对方发送错误消息。

请注意,这对待决事务的实际发送没有影响。这是隐含的(例如,当接收到正在处理的请求的重新发送的事务请求时)或由pending_timer控制时,请参阅上文。

正整数或infinity,默认为infinity...

recv_pending_limit

接收待定限制(请参阅megaco根包的MGOriginatedPendingLimit和MGCOriginatedPendingLimit)。此参数指定可以接收多少个待处理消息(针对已发送的事务请求)。超过限制时,事务被视为丢失,并向用户返回错误(通过回调函数handle_trans_reply)。

一个正整数或者infinity,默认为infinity

send_mod

发送send_message / 2的回调模块。当字节需要传送给远程用户时,SendMod:send_message(SendHandle,Binary)函数被调用。

atom,默认为megaco_tcp

encoding_mod

编码导出encode_message / 2和decode_message / 2的回调模块。每当需要将'MegacoMessage'记录翻译成Erlang二进制文件时,就会调用EncodingMod:encode_message(EncodingConfig,MegacoMessage)函数。无论何时需要将Erlang二进制转换为“MegacoMessage”记录,都会调用EncodingMod:decode_message(EncodingConfig,Binary)函数。

atom,默认为megaco_pretty_text_encoder...

encoding_config

编码模块配置

list,默认为[]...

protocol_version

实际的协议版本。

integer,缺省值为1。

strict_version

严格的版本控制,即当收到消息时,验证版本是否是协商的版本。

boolean,默认值为真。

reply_data

默认回复数据。

任何术语,默认为原子undefined

user_mod

用户回调模块的名称。有关更多信息,请参阅megaco_user的参考手册。

user_args

用户回调函数的额外参数列表。有关更多信息,请参阅megaco_user的参考手册。

threaded

如果收到的消息包含多个事务请求,则此选项指示是否应该在同一个进程(false)中按顺序处理请求,或者每个请求是否应由其自己的进程处理(true即为每个请求产生单独的进程)。

boolean,默认为false...

resend_indication

此选项指示天气,如果发送的消息是重发或不重发,则应告知传输模块。

如果为false,则使用该send_message函数发送megaco消息。

如果为true,则使用该函数重新发送 megaco消息resend_message。初始消息发送仍然使用该send_message功能完成。

相反,特殊值标志表示send_message/3应该使用该功能。

resend_indication(),默认为false...

segment_reply_ind

此选项指定是否应将收到的段答复通知用户。

handle_segment_reply有关更多信息的回调函数。

boolean,默认为false...

segment_recv_timer

该定时器在segmentation complete token接收到指示的段时启动,但所有段尚未收到。

当计时器最终到期时,向对方发送“megaco segments not received”(459)错误消息,并在handle_trans_reply回调函数或call函数的返回值中用段超时UserReply通知用户。

一个Megaco定时器(见上面的解释),默认为10000

segment_send

发出的信息是否应分段:

none

不要细分传出的回复消息。当知道消息不会太大或者传输协议可以自己处理这些事情时(例如TCP或SCTP),这是非常有用的。

integer() > 0

传出的回复消息将根据需要进行分段(见max_pdu_size下文)。该值K表示未完成的窗口,即在任何给定时间有多少段可以未完成(未确认)。

infinity

传出的回复消息将根据需要进行分段(见max_pdu_size下文)。段消息一次全部发送(即在发送下一个段之前没有等待确认)。

默认为none...

max_pdu_size

最大邮件大小。如果编码消息(PDU)超过此大小,则应对消息进行分段,然后进行编码。

正整数或infinity,默认为infinity...

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

类型

更新有关用户的信息

需要用户启动。请参阅megaco:user_info / 2了解哪些项目和值是有效的。

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

类型

查找有关活动连接的信息

要求连接处于活动状态。

control_pid

连接的控制过程的进程标识符。

send_handle

不透明的发送句柄,其内容为发送模块的内部内容。可能是任何术语。

local_mid

本地中间(连接的中间,即自己的中间)。megaco_mid()

remote_mid

远程中(连接)。megaco_mid()

receive_handle

构建一个megaco_receive_handle记录。

trans_id

下一个交易ID。正整数或原子undefined_serial(仅在出错的情况下)。

请注意,事务ID是(当前)以每个用户为基础进行维护的,因此无法确定返回的值是否将实际用于在此连接上发送的事务(如果用户有多个连接,而这些连接不在都不可能)。

max_trans_id

最后一次身份证明。

一个正整数或者infinity,默认为infinity

request_timer

等待答复。

当收到答复时,取消计时器。

当收到一个待处理的消息时,定时器被取消,long_request_timer而代之以启动(见下文)。从这一点开始不会执行重新发送(因为我们现在知道对方已收到请求)。

当定时器到达中间到期时,请求被重新发送并且定时器重新启动。

当计时器达到最终期限时,函数megaco:call将返回{error, timeout}或回调函数handle_trans_reply将被调用UserReply = {error, timeout}(如果megaco:cast已使用)。

Megaco定时器(请参阅上面的解释),默认为#megaco_incr_timer {}。

long_request_timer

在收到挂起的消息后等待回复。

当计时器到达中间端时,计时器将重新启动。

当收到挂起的消息时,long_request_timer“在它的最后一段”,计时器将重新启动,如果long_request_resend = true,请求将重新发送。

一个Megaco定时器(见上面的解释),默认为60 seconds

request_keep_alive_timeout

指定请求保持活动计时器的超时时间。

当对异步请求的第一个回复(使用megaco:cast/3函数发出)到达时,启动此计时器。只要这个定时器运行,答复将通过传递handle_trans_reply/4,5回调函数,用自己“到达数”(见UserReply的的handle_trans_reply/4,5回调函数)。

计时器过期后到达的回复,将使用handle_unexpected_trans/3,4回调函数

超时时间可以有以下值:plain | integer() >= 0...

默认为plain...

long_request_resend

此选项指示在收到答复之前是否应重新处理请求,even虽然已经收到一条挂起的消息。

通常,在接收到挂起消息之后,请求不会被重新发送(因为挂起的消息表明请求已被接收)。但是由于对请求的回复可能会丢失,所以这种行为有其价值。

除非(见上面)也设置为增量式定时器(),否则将该值设置为true是毫无意义的。long_request_timer#megaco_incr_timer{}

boolean,默认为false...

reply_timer

等一下。

收到请求时,与回复相关的一些信息将在内部存储(例如回复的二进制文件)。此信息将一直存在,直至收到确认或计时器到期。例如,如果再次收到相同的请求(例如具有相同事务ID的请求),则(存储的)答复将由megaco自动发送(重新)发送。

如果定时器是类型的#megaco_incr_timer{},则对于每个中间定时器,答复将被重新发送(在接收到确认或计时器到期之前,该答复有效)。

一个Megaco定时器(见上面的解释),默认为30000。

call_proxy_gc_timeout

调用代理的超时时间。

当使用该call/3功能发送请求时,代理进程将开始处理所有回复。当答复已被接收并交付给用户时,只要此选项指定,代理进程就会继续存在。任何收到的消息都通过handle_unexpected_trans回调函数传递给用户。

超时时间以毫秒为单位。值为0(零)表示代理进程将在回复完成后直接退出。

整数> = 0,默认为5000(= 5秒)。

auto_ack

当收到交易回复时自动发送交易确认(见trans_ack)。

这用于三方握手

boolean,默认为false

trans_ack

应该积累与否。

此属性仅在有效时才有效auto_ack

如果auto_ack为true,那么如果trans_ack为false,则会立即发送ack。 如果trans_ack为true,那么ack's将被发送到事务发送器进程以用于累积和稍后发送(请参阅trans_ack_maxcount,trans_req_maxcount,trans_req_maxsize,trans_ack_maxcount和trans_timer)。

另见transaction sender想了解更多信息。

boolean,默认为false...

trans_ack_maxcount

累计确认的最大数量。最多这个ack将由交易发送者累积(如果启动并配置为累积ack的)。

另见transaction sender想了解更多信息。

整数,默认为10。

trans_req

请求是否被累计。

如果trans_reqfalse,则请求将立即发送(在它自己的消息中)。

如果trans_req为真,则请求(S)将代替被发送到用于积累该事务发送进程和以后发送(见trans_ack_maxcounttrans_req_maxcounttrans_req_maxsizetrans_ack_maxcounttrans_timer)。

参见transaction sender更多信息。

boolean,默认为false...

trans_req_maxcount

最大数量的累计请求。至多这些请求将由事务发送者累积(如果启动并配置为累积请求)。

另见transaction sender想了解更多信息。

integer默认为10。

trans_req_maxsize

累计请求的最大大小。最多这个请求将被事务发送者累积(如果启动并被配置为累积请求)。

另见transaction sender了解更多信息。

integer,默认为2048。

trans_timer

交易发件人超时时间。有两个功能。首先,如果值为0,那么交易将不会累积(例如交易发送者进程将不会启动)。第二,如果该值大于0且auto_acktrans_ack为真,或者如果trans_req为真,则交易发送者将被启动,并且交易(其取决于的值auto_acktrans_acktrans_req)将被积累,供以后发送。

另见transaction sender想了解更多信息。

integer默认为0。

pending_timer

如果定时器在发送事务应答之前过期,则自动发送事务挂起。这个定时器也称为临时响应定时器。

一个Megaco定时器(见上面的解释),默认为30000。

sent_pending_limit

发送暂挂限制(请参阅megaco根包的MGOriginatedPendingLimit和MGCOriginatedPendingLimit)。此参数指定可以发送多少个待处理消息(针对给定的收到的事务请求)。超过限制时,交易将中止(请参阅handle_trans_request_abort),并向对方发送错误消息。

请注意,这对待决事务的实际发送没有影响。这是隐含的(例如,当接收到正在处理的请求的重新发送的事务请求时)或由pending_timer控制时,请参阅上文。

正整数或infinity,默认为infinity...

recv_pending_limit

接收待定限制(请参阅megaco根包的MGOriginatedPendingLimit和MGCOriginatedPendingLimit)。此参数指定可以接收多少个待处理消息(针对已发送的事务请求)。超过限制时,事务被视为丢失,并向用户返回错误(通过回调函数handle_trans_reply)。

正整数或infinity,默认为infinity...

send_mod

发送send_message / 2的回调模块。当字节需要传送给远程用户时,SendMod:send_message(SendHandle,Binary)函数被调用。

atom,默认为megaco_tcp...

encoding_mod

编码导出encode_message / 2和decode_message / 2的回调模块。每当需要将'MegacoMessage'记录翻译成Erlang二进制文件时,就会调用EncodingMod:encode_message(EncodingConfig,MegacoMessage)函数。无论何时需要将Erlang二进制转换为“MegacoMessage”记录,都会调用EncodingMod:decode_message(EncodingConfig,Binary)函数。

atom,默认为megaco_pretty_text_encoder...

encoding_config

编码模块配置

list,默认为[]。

protocol_version

实际的协议版本。

正整数,当前默认值为1。

strict_version

严格的版本控制,即当收到消息时,验证版本是否是协商的版本。

boolean,默认值为真。

reply_data

默认回复数据。

任何术语,默认为原子。undefined...

threaded

如果收到的消息包含多个事务请求,则此选项指示是否应该在同一个进程(false)中按顺序处理请求,或者每个请求是否应由其自己的进程处理(true即为每个请求产生单独的进程)。

boolean,默认为false...

resend_indication

此选项指示天气,如果发送的消息是重发或不重发,则应告知传输模块。

如果为false,则使用该send_message/2函数发送megaco消息。

如果为true,则使用该函数重新发送 megaco消息resend_message。初始消息发送仍然使用该send_message功能完成。

相反,特殊值标志表示send_message/3应该使用该功能。

resend_indication(),默认为false...

segment_reply_ind

该选项指定是否应该通知用户收到的段回复。

handle_segment_reply有关更多信息的回调函数。

boolean,默认为false...

segment_recv_timer

该定时器在接收到segmentation complete token(例如组成应答的最后一个段)指示的段时开始,但是尚未接收到所有段。

当计时器最终到期时,向对方发送“megaco segments not received”(459)错误消息,并在handle_trans_reply回调函数或call函数的返回值中用段超时UserReply通知用户。

一个Megaco定时器(见上面的解释),默认为10000

segment_send

发出的信息是否应分段:

none

不要细分传出的回复消息。当知道消息不会太大或者传输协议可以自己处理这些事情时(例如TCP或SCTP),这是非常有用的。

integer() > 0

传出的回复消息将根据需要进行分段(见max_pdu_size下文)。该值K表示未完成的窗口,即在任何给定时间有多少段可以未完成(未确认)。

infinity

传出的回复消息将根据需要进行分段(见max_pdu_size下文)。段消息一次全部发送(即在发送下一个段之前没有等待确认)。

默认为none...

max_pdu_size

最大邮件大小。如果编码消息(PDU)超过此大小,则应对消息进行分段,然后进行编码。

正整数或infinity,默认为infinity...

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

类型

更新有关活动连接的信息

要求连接被激活。请参阅megaco:conn_info / 2了解哪些项目和值是有效的。

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

类型

查找系统信息

下列项目有效:

text_config

文本编码配置。

connections

列出所有活动连接。返回megaco_conn_handle记录的列表。

users

列出所有活动用户。返回megaco_mid()的列表。

n_active_requests

返回一个整数,表示源自此Erlang节点并仍处于活动状态的请求数(因此会消耗系统资源)。

n_active_replies

返回一个整数,表示来自此Erlang节点的回复数量,并且仍处于活动状态(因此会消耗系统资源)。

n_active_connections

返回一个表示活动连接数的整数。

info() -> Info

类型

此函数生成关于megaco应用程序的信息列表。如用户及其配置,连接及其配置,统计等。

这些信息可以通过函数user_info,conn_info,system_info和get_stats生成,但这是一次性完成所有操作的简单方法。

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

类型

建立“虚拟”连接

激活与远程用户的连接。完成后,连接可用于发送消息(使用SendMod:send_message / 2)。ControlPid是控制连接的进程的标识符。该进程将被监督,如果它死了,这将被检测到,并且UserMod:handle_disconnect / 2回调函数将被调用。有关回调参数的更多信息,请参阅megaco_user模块。也可以通过调用megaco来明确地禁用连接:disconnect / 2。

ControlPid可能是驻留在另一个Erlang节点上的进程的标识。当您想要通过几个Erlang节点分发用户时,这非常有用。在这种情况下,其中一个节点具有物理连接。当驻留在其他节点之一上的用户需要发送请求时(使用megaco:call / 3或megaco:cast / 3),消息将在源Erlang节点上编码,然后被转发到物理节点连接。当回复到达时,它将被转发回发端人。通过对megaco的本地调用可以明确地停用分布式连接:断开/ 2或在物理连接停用时隐式地断开(使用megaco:disconnect / 2,终止控制进程,暂停其他节点...)。

这个函数的调用将触发回调函数UserMod:handle_connect / 2被调用。有关回调参数的更多信息,请参阅megaco_user模块。

可以通过以下几种方式建立联系:

provisioned MID

MG可以明确调用megaco:connect / 4,并使用MGC的配置MID作为RemoteMid。

upgrade preliminary MID

MG可以显式地调用MEGACO:用原子连接/ 4“preliminary_mid”作为MGC的临时MID,发送INTIAL消息,所述服务改变请求,给MGC,然后等待的初始消息,该服务改变回复。当答复到达时,Megaco应用程序将从消息头中选择MGC的MID,并自动将连接升级为“正常”连接。通过使用这种建立连接的方法,回调函数UserMod:handle_connect / 2被调用两次。首先用connHandle将remote_mid字段设置为preliminary_mid,然后在连接升级时将remote_mid字段设置为MGC的实际MID。

automatic

当MGC收到其第一条消息(服务变更请求)时,Megaco应用程序将通过使用消息头中的MG MID作为远程中间站自动建立连接。

distributed

当一个用户(MG / MGC)分布在多个节点上时,要求托管连接的节点已经激活了连接并且处于“正常”状态。RemoteMid必须是真正的Megaco MID,而不是初步的MID。

可以使用megaco获取最初的megaco_receive_handle记录:user_info(UserMid,receive_handle)

发送句柄由首选传输模块提供,例如megaco_tcp,megaco_udp。有关详细信息,请阅读有关每个运输模块的文档。

连接分两步完成:首先进行内部连接设置,然后调用用户的handle_connect回调函数。 第一步可能导致Reason = connect_reason()错误,第二步导致reason = handle_connect_reason()错误:

connect_reason()

这个原因的错误是由megaco应用程序本身产生的。

handle_connect_reason()

有此原因的错误是由用户引起的。handle_connect回调函数返回错误或无效值。

Extra可以是term()除原子之外的任何物体ignore_extra。它通过回调函数传回给用户handle_connect/3

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

类型

撤下一个“虚拟”连接

导致调用UserMod:handle_disconnect / 2回调函数。有关回调参数的更多信息,请参阅megaco_user模块。

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

类型

发送一个或多个事务请求并等待回复。

当在消息中发送一个事务时,Actions应该是action_reqs()(UserReply将会是user_reply())。 在消息中发送多个事务时,Actions应该是[action_reqs()](UserReply将会是[user_reply()])。 列表中的每个元素都是一个事务的一部分。

对于我们的一些编解码器(不是二进制),也可以对这些动作进行预编码,在这种情况下Actions将是binary()[binary()]

该函数在答复到达时,请求计时器最终超时或未完成的请求被明确取消时返回。

发送选项的默认值由megaco:conn_info(ConnHandle,Item)获得。 但是上面的发送选项可能会被明确地覆盖。

ProtocolVersion版本是在回复消息实际编码的版本。

success()UserReply包含可能包含错误指示的'ActionReply'记录列表。

message_error()表示远程用户已用显式的transactionError回复。

user_cancel_error()表示请求已被用户取消。reason_for_user_cancel()是在cancel函数调用中给出的原因。

send_error(),表示megaco传输回调模块的发送功能未能发送请求。有两种不同的情况:send_cancelled_reason()send_failed_reason()。第一个是返回的发送函数的结果,{cancel, Reason}第二个是其他类型的错误返回值。有关send_message更多信息,请参阅该功能。

other_error(),表示其他一些错误,例如超时。

有关extra()结果部分的更多信息,请参阅note用户回调模块文档中的内容。

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

类型

发送一个或多个事务请求但不等待回复

在消息中发送一个事务时,Actions应该是action_reqs()。在消息中发送多个事务时,Actions应该是[action_reqs()]。列表中的每个元素都是一个事务的一部分。

对于我们的一些编解码器(不是二进制),也可以对这些动作进行预编码,在这种情况下Actions将是binary()[binary()]

发送选项的默认值由megaco:conn_info(ConnHandle,Item)获得。但是上面的发送选项可能会被明确地覆盖。

ProtocolVersion版本是回复消息中实际编码的版本。

回复函数UserMod:handle_trans_reply / 4在答复到达时,请求计时器最终超时或未完成的请求被明确取消时被调用。有关回调参数的更多信息,请参阅megaco_user模块。

给UserMod的UserData参数:handle_trans_reply / 4。

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

类型

编码一个或多个事务请求的操作请求列表。

当为一个事务编码动作请求时,Actions应该是action_reqs()。在为多个事务编码动作请求时,Actions应该是[action_reqs()]。列表中的每个元素都是一个事务的一部分。

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

类型

将令牌标记转换为字符串

如果没有给出编码器模块,则使用默认值(这很漂亮)。

如果没有或者给出未知版本,则使用最好的版本(这是v3)。

如果找不到匹配项TagResult将为空字符串([])。

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

类型

取消此连接的所有未完成消息

这导致杰出的megaco:呼叫/ 3请求返回。回调函数UserMod:handle_reply / 4和UserMod:handle_trans_ack / 4也会在适用的地方调用。有关回调参数的更多信息,请参阅megaco_user模块。

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

类型

处理接收到的消息

此功能旨在在收到传入消息时由某些传输模块调用。实际使用哪种运输方式由用户自行选择。

该消息以Erlang二进制形式提供,并由接收句柄中的编码模块和其编码配置(也在接收句柄中)解码。根据解码的结果,将调用各种回调函数。有关回调参数的更多信息,请参阅megaco_user。

参数Extra只是一个通过用户回调模块中的回调函数传递给用户的不透明数据结构。 但请注意,如果Extra的值为extra_undefined,则参数将被忽略(与调用process_received_message / 4时相同)。 有关更多信息,请参阅回调模块的行为文档megaco_user。

请注意,所有处理均在调用过程的上下文中完成。传输模块可以通过其中一个spawn功能(例如spawn_opt)调用该功能。另见receive_message/4,5

如果消息无法解码,则会调用以下回调函数:

  • UserMod:handle_syntax_error / 3如果解码的消息而不是事务包含消息错误,则将调用以下回调函数:

  • USERMOD:handle_message_error / 3

如果在连接建立之前恰好接收到解码的消息,则建立新的“虚拟”连接。媒体网关控制器(MGC)在第一次服务变更时通常就是这种情况。发生这种情况时,将调用以下回调函数:

  • UserMod:handle_connect / 2对于解码消息中的每个事务请求,将调用以下回调函数:

  • USERMOD:handle_trans_request / 3

对于解码消息中的每个交易回复,回复将被返回给用户。起始函数megaco:call / 3将返回。或者如果原始函数是megaco:case / 3,将调用以下回调函数:

  • UserMod:handle_trans_reply / 4当收到事务确认时,用户可能决定不再担心确认。但是,如果来自UserMod:handle_trans_request / 3的返回值指示确认是重要的,则将调用以下回调函数:

  • USERMOD:handle_trans_ack / 4

有关回调参数的更多信息,请参阅megaco_user模块。

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

类型

处理接收到的消息

这是一个回调函数,用于在收到传入消息时由某些传输模块调用。实际使用的传输由用户选择。

原则上,该函数通过spawn调用process_received_message / 4函数来执行实际处理。

有关更多信息,请参见process_received_message/4功能。

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

类型

分析数字地图主体

将表示为字符列表的数字地图主体分析为适合由megaco评估的状态转换列表:eval_digit_map / 1,2。

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

类型

根据数字地图收集数字地图字母。

在评估数字地图时,状态机会等待megaco报告的超时和字母:report_digit_event / 2。各种超时的长度在digit_map_value()记录中定义。

当收到完整的有效事件序列后,结果将返回为字母列表。

有两种处理语法错误的选项(即在数字地图评估器期待其他事件时收到意外事件时)。意外事件可能被忽略或拒绝。后者意味着评估中止并返回错误。

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

类型

向事件收集器进程发送一个或多个事件。

将一个或多个事件发送到正在评估数字地图的进程,该进程正在执行megaco:eval_digit_map / 1,2。

请注意事件$s | $Sl | $L$z | $Z与使用相同字符的计时器无关。

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

类型

用事件馈送数字地图收集器并返回结果

此功能使用megaco:eval_digit_map / 1开始评估数字地图,并向其发送一系列事件megaco:report_digit_event / 2以简化数字地图的测试。

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

类型

编码(生成)SDP结构。

如果找到property_parm()作为输入(SDP)的一部分,则保持不变。

此函数执行以下转换:

  • sdp() -> property_parm()

  • sdp_property_group() -> property_group()

  • sdp_property_groups() - > property_groups()decode_sdp(PP) - > {ok,SDP} | {error,Reason} TypesDecode(解析)属性参数构造。解码property_group()或property_groups()时,那些无法解码的属性参数构造(无论是因为解码错误还是因为它们未知)将作为两元组。 其中的第一个元素是(未解码)属性参数,另一个是实际原因。 这意味着这个函数的调用者不仅需要sdp记录,而且还需要这个二元结构。该函数执行以下转换:

  • property_parm() -> sdp()

  • property_group() -> sdp_property_group()

  • property_groups() -> sdp_property_groups()

get_sdp_record_from_PropertGroup(Type, PG) -> [sdp()]

类型

Type从属性组中检索所有类型的sdp记录PG

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

类型

用于检索某些系统和应用程序信息的实用函数。

这两个函数的区别在于他们如何获取模块进行检查。versions1使用应用程序文件并versions2使用该功能application:get_key

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

类型

用于生成由versions1versions2函数生成的版本信息的格式打印输出的实用程序功能。

函数print_version_info / 0使用函数version1 / 0的结果作为VersionInfo

例子:

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

enable_trace(Level, Destination) -> void()

类型

这个函数用于在给定的Level直接结果下启动megaco跟踪Destination

它启动一个示踪服务器,然后设置适当的匹配规格(根据Level)。

在这种情况下,当DestinationFile,可印刷MEGACO跟踪事件将被打印到文件File使用普通io:format/2

在当壳体Destinationio,可印刷MEGACO跟踪事件将在stdout使用普通印刷io:format/2

dbg以获得更多信息。

disable_trace() -> void()

该功能用于停止megaco追踪。

set_trace(Level) -> void()

类型

此函数用于更改兆CO跟踪级别。

假定已经启用了跟踪(参见enable_trace上文)。

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}

类型

Retreive由megaco应用程序维护的(SNMP)统计计数器。全局计数器处理不能归因于单个连接的事件(例如,在连接正确设置之前发生的协议错误)。

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

类型

重置所有相关(SNMP)统计计数器。

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

类型

测试操作参数是否正确组合。

此功能仅用于测试目的。它应该和callcast函数具有相同类型的接口(通过增加EncodingModEncodingConfig参数)。它编写了一个完整的megaco消息结束尝试对其进行编码。返回值将是组合的megaco消息和编码结果的元组。

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

类型

测试答复参数是否正确组合。

此功能仅用于测试目的。 它应该测试回调函数handle_trans_request和handle_trans_long_request函数(增加了EncodingMod和EncodingConfig参数)的actual_reply()返回值。 它编写了一个完整的megaco消息结束尝试对其进行编码。 返回值将是组合的megaco消息和编码结果的元组。