Skip to main content

9. CreatePermission (创建权限)

TURN 支持客户端在服务器上安装或刷新权限的两种方式。本节描述一种方式:CreatePermission 请求。

CreatePermission 请求可以与第 10 节中的 Send 机制或第 11 节中的通道机制结合使用。

9.1. Forming a CreatePermission Request (构造创建权限请求)

希望安装或刷新一个或多个权限的客户端可以向服务器发送 CreatePermission 请求。

在构造 CreatePermission 请求时,客户端必须 (MUST) 包含至少一个 XOR-PEER-ADDRESS 属性,并且可以 (MAY) 包含多个此类属性。每个 XOR-PEER-ADDRESS 属性的 IP 地址部分包含应该安装或刷新权限的 IP 地址。每个 XOR-PEER-ADDRESS 属性的端口部分将被忽略,可以是任何任意值。各个 XOR-PEER-ADDRESS 属性可以以任何顺序出现。

9.2. Receiving a CreatePermission Request (接收创建权限请求)

当服务器接收到 CreatePermission 请求时,它按照第 4 节加上此处提到的特定规则进行处理。

检查消息的有效性。CreatePermission 请求必须 (MUST) 包含至少一个 XOR-PEER-ADDRESS 属性,并且可以 (MAY) 包含多个此类属性。如果不存在此类属性,或者如果这些属性中的任何一个无效,则返回 400(错误请求,Bad Request)错误。如果请求有效,但服务器由于某些容量限制或类似原因无法满足请求,则返回 508(容量不足,Insufficient Capacity)错误。

服务器可以 (MAY) 对 XOR-PEER-ADDRESS 属性中允许的 IP 地址施加限制 - 如果不允许某个值,服务器拒绝请求并返回 403(禁止,Forbidden)错误。

如果消息有效且服务器能够执行请求,则服务器按照第 8 节中的描述为每个 XOR-PEER-ADDRESS 属性中包含的 IP 地址安装或刷新权限。每个属性的端口部分被忽略,可以是任何任意值。

然后,服务器回复 CreatePermission 成功响应。成功响应中没有强制属性。

注意:服务器无需执行任何特殊操作来使用"无状态栈方法"实现通过 UDP 的 CreatePermission 请求的幂等性。重传的 CreatePermission 请求将简单地刷新权限。

9.3. Receiving a CreatePermission Response (接收创建权限响应)

如果客户端收到有效的 CreatePermission 成功响应,则客户端更新其数据结构以指示权限已安装或刷新。