跳到主要内容

9. CreatePermission

TURN 支持 client 在 server 上安装或刷新 permission 的两种方式. 本章描述其中一种方式: CreatePermission request.

CreatePermission request 可以与第 10 章的 Send mechanism 一起使用, 也可以与第 11 章的 channel mechanism 一起使用.

9.1. 构造 CreatePermission Request

希望安装或刷新一个或多个 permission 的 client 可以向 server 发送 CreatePermission request.

构造 CreatePermission request 时, client 必须至少包含一个 XOR-PEER-ADDRESS 属性, 并且可以包含多个此类属性. 每个 XOR-PEER-ADDRESS 属性的 IP 地址部分包含应安装或刷新 permission 的 IP 地址. 每个 XOR-PEER-ADDRESS 属性的端口部分会被忽略, 可以是任意值. 各个 XOR-PEER-ADDRESS 属性可以按任意顺序出现.

9.2. 接收 CreatePermission Request

当 server 收到 CreatePermission request 时, 它按照第 4 章以及此处给出的特定规则进行处理.

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

server 可以对 XOR-PEER-ADDRESS 属性中允许的 IP 地址施加限制 -- 如果某个值不被允许, server 将以 403 (Forbidden) 错误拒绝该请求.

如果消息有效且 server 能够执行该请求, 则 server 按第 8 章所述, 为每个 XOR-PEER-ADDRESS 属性中包含的 IP 地址安装或刷新 permission. 每个属性的端口部分会被忽略, 可以是任意值.

随后 server 以 CreatePermission success response 响应. 成功响应中没有强制属性.

NOTE: server 无需采取任何特殊措施, 即可使用 "stateless stack approach" 实现 UDP 上 CreatePermission request 的幂等性. 重传的 CreatePermission request 只会刷新 permission.

9.3. 接收 CreatePermission Response

如果 client 收到有效的 CreatePermission success response, 则 client 更新其数据结构, 表明 permission 已安装或刷新.