diameter_transport
diameter_transport
模块
diameter_transport
模块摘要
直径传输接口
描述
指定为transport_module
to的模块diameter:add_transport/2
必须实现这里记录的接口。该接口由直径启动传输过程的函数和消息接口组成,传输过程与启动它的进程(即其父节点)进行通信。
数据类型
message() = binary() |
diameter_codec:packet()
通过传输接口传递的直径消息。
对于来自传输进程的入站消息,diameter_codec:packet()
必须在其bin
场。如果是入站请求,则在transport_data
字段将在相应的应答消息中传回传输模块,除非发件人提供另一个值。
对于到传输进程的出站消息,a diameter_codec:packet()
的值不是undefined
在其transport_data
字段中,而是在其字段中发送bin
ary()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/2
和diameter:add_transport/2
传递给后者覆盖那些传递到前值。
Config
就像在传递给列表的transport_config
元组中传递的元组一样。diameter:transport_opt()diameter:add_transport/2
启动功能应该使用Host-IP-Address
列表Svc
和/或Config
选择并返回适当的本地IP地址列表。在连接情况下,本地地址列表可以在连接建立之后在connected
消息中传递(参见MESSAGES
下文)。在任何一种情况下,本地地址列表都用于填充Host-IP-Address
AVP的输出功能,如果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=accept
。Remote
是一个任意术语,用于唯一标识传输所连接的远程端点。一个LocalAddr
列表有一个作为从返回相同的语义start/3
。
{diameter, {recv,
message()
}}
入站直径消息。
{diameter, {tls, Ref}}
确认成功的TLS握手。Ref
是{diameter, {tls, Ref, Type, Bool}}
消息中接收到的引用(),以响应发送回复。如果握手不成功,交通工具必须退出。
另见
diameter_tcp(3)
,,,diameter_sctp(3)