非常教程

Erlang 20参考手册

直径 | diameter

diameter_transport

模块

diameter_transport

模块摘要

直径传输接口

描述

指定为transport_moduleto的模块diameter:add_transport/2必须实现这里记录的接口。该接口由直径启动传输过程的函数和消息接口组成,传输过程与启动它的进程(即其父节点)进行通信。

数据类型

message() = binary() |diameter_codec:packet()

通过传输接口传递的直径消息。

对于来自传输进程的入站消息,diameter_codec:packet()必须在其bin场。如果是入站请求,则在transport_data字段将在相应的应答消息中传回传输模块,除非发件人提供另一个值。

对于到传输进程的出站消息,a diameter_codec:packet()的值不是undefined在其transport_data字段中,而是在其字段中发送binary()bin

出口

Mod:start({Type, Ref}, Svc, Config) -> {ok, Pid} | {ok, Pid, LAddrs} | {error, Reason}

类型

开始一个运输过程。由直接呼叫来调用以diameter:add_transport/2分别建立或接受传输连接。传输进程保持与单个远程对等方的连接。

Type指示连接(Type=connect)或侦听(Type=accept)传输是否正在启动有问题的传输过程。在后一种情况下,根据需要启动传输过程以接受来自多个对等方的连接。

Ref是从调用返回的值,diameter:add_transport/2导致启动传输过程。

Svc包含传递给功能diameter:start_service/2diameter:add_transport/2传递给后者覆盖那些传递到前值。

Config就像在传递给列表的transport_config元组中传递的元组一样。diameter:transport_opt()diameter:add_transport/2

启动功能应该使用Host-IP-Address列表Svc和/或Config选择并返回适当的本地IP地址列表。在连接情况下,本地地址列表可以在连接建立之后在connected消息中传递(参见MESSAGES下文)。在任何一种情况下,本地地址列表都用于填充Host-IP-AddressAVP的输出功能,如果Host-IP-Address未指定则交换消息。

传输过程必须实现下面记录的消息接口。它应该保留其父母的pid,监视父母并在父母死亡时终止。它不应链接到父项。如果与同伴的传输连接丢失,它应该退出。

消息

所有通过传输接口发送的消息都是这种形式{diameter, term()}

传输过程可以期望从其父节点获得以下类型的消息。

{diameter, {send,message()}}

出站Diameter消息。

{diameter, {close, Pid}}

在收到响应DPR的DPA后终止运输过程的请求。运输过程应该退出。Pid是父进程的pid()。

{diameter, {tls, Ref, Type, Bool}}

指示功能交换是否使用TLS选择了带内安全性。Ref是一个引用(),它必须包含在{diameter, {tls, Ref}}传输的父进程的回复消息中(见下文)。Type要么connect还是accept取决于该进程是否已经开始分别用于连接或收听交通。Bool是一个boolean(),指示传输连接是否应该升级到TLS。

如果TLS被请求(Bool=true),则连接过程应该启动与对等方的TLS握手,并且接受过程应该准备接受握手。成功的握手之后应该{diameter, {tls, Ref}}给父进程发送一条消息。握手失败应该导致进程退出。

此消息仅发送到其Inband-Security-Id配置已指示支持TLS 的传输进程。

传输过程应将以下类型的消息发送给其父节点。

{diameter, {self(), connected}}

通知父母传输过程与Type=accept对方已建立连接。如果运输过程有,则不发送Type=connect

{diameter, {self(), connected, Remote}}{diameter, {self(), connected, Remote, [LocalAddr]}}

通知父母传输过程与Type=connect对等方已建立连接。如果运输过程有,则不发送Type=acceptRemote是一个任意术语,用于唯一标识传输所连接的远程端点。一个LocalAddr列表有一个作为从返回相同的语义start/3

{diameter, {recv,message()}}

入站直径消息。

{diameter, {tls, Ref}}

确认成功的TLS握手。Ref{diameter, {tls, Ref, Type, Bool}}消息中接收到的引用(),以响应发送回复。如果握手不成功,交通工具必须退出。

另见

diameter_tcp(3),,,diameter_sctp(3)

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1