SRP

此模块包含用于控制 SRP 客户端行为的函数。

摘要

此模块包含服务注册协议的功能。

此模块包含 SRP 客户端缓冲区和服务池的函数。

仅当启用了 OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_ENABLE 功能时,此模块中的函数才可用。

枚举

otSrpClientItemState{
  OT_SRP_CLIENT_ITEM_STATE_TO_ADD,
  OT_SRP_CLIENT_ITEM_STATE_ADDING,
  OT_SRP_CLIENT_ITEM_STATE_TO_REFRESH,
  OT_SRP_CLIENT_ITEM_STATE_REFRESHING,
  OT_SRP_CLIENT_ITEM_STATE_TO_REMOVE,
  OT_SRP_CLIENT_ITEM_STATE_REMOVING,
  OT_SRP_CLIENT_ITEM_STATE_REGISTERED,
  OT_SRP_CLIENT_ITEM_STATE_REMOVED
}
枚举
指定 SRP 客户端项(服务或主机信息)状态。
otSrpServerAddressMode{
  OT_SRP_SERVER_ADDRESS_MODE_UNICAST = 0,
  OT_SRP_SERVER_ADDRESS_MODE_ANYCAST = 1
}
枚举
表示 SRP 服务器使用的地址模式。
otSrpServerState{
  OT_SRP_SERVER_STATE_DISABLED = 0,
  OT_SRP_SERVER_STATE_RUNNING = 1,
  OT_SRP_SERVER_STATE_STOPPED = 2
}
枚举
表示 SRP 服务器的状态。

类型定义符

otSrpClientAutoStartCallback)(const otSockAddr *aServerSockAddr, void *aContext) typedef
void(*
指针类型定义了 SRP 客户端用来在其自动启动或停止时通知用户的回调。
otSrpClientBuffersServiceEntry typedef
表示 SRP 客户端服务池条目。
otSrpClientCallback)(otError aError, const otSrpClientHostInfo *aHostInfo, const otSrpClientService *aServices, const otSrpClientService *aRemovedServices, void *aContext) typedef
void(*
指针类型定义了 SRP 客户端用来通知用户更改/事件/错误的回调。
otSrpClientHostInfo typedef
表示 SRP 客户端主机信息。
otSrpClientService typedef
表示 SRP 客户端服务。
otSrpServerAddressMode typedef
表示 SRP 服务器使用的地址模式。
otSrpServerHost typedef
此不透明类型表示 SRP 服务主机。
otSrpServerLeaseConfig typedef
包括 SRP 服务器 LEASE 和 KEY-LEASE 配置。
otSrpServerLeaseInfo typedef
包括主机/服务的 SRP 服务器租用信息。
otSrpServerResponseCounters typedef
包含 SRP 服务器响应的统计信息。
otSrpServerService typedef
此不透明类型表示 SRP 服务。
otSrpServerServiceUpdateHandler)(otSrpServerServiceUpdateId aId, const otSrpServerHost *aHost, uint32_t aTimeout, void *aContext) typedef
void(*
处理 SRP 服务更新。
otSrpServerServiceUpdateId typedef
uint32_t
SRP 服务器上的 SRP 服务更新事务的 ID。
otSrpServerTtlConfig typedef
包含 SRP 服务器 TTL 配置。

函数

otSrpClientAddService(otInstance *aInstance, otSrpClientService *aService)
添加要向服务器注册的服务。
otSrpClientBuffersAllocateService(otInstance *aInstance)
从池中分配新的服务条目。
otSrpClientBuffersFreeAllServices(otInstance *aInstance)
void
释放之前分配的所有服务条目。
otSrpClientBuffersFreeService(otInstance *aInstance, otSrpClientBuffersServiceEntry *aService)
void
释放先前分配的服务条目。
otSrpClientBuffersGetHostAddressesArray(otInstance *aInstance, uint8_t *aArrayLength)
获取要用作 SRP 客户端主机地址列表的 IPv6 地址条目数组。
otSrpClientBuffersGetHostNameString(otInstance *aInstance, uint16_t *aSize)
char *
获取用于 SRP 客户端主机名的字符串缓冲区。
otSrpClientBuffersGetServiceEntryInstanceNameString(otSrpClientBuffersServiceEntry *aEntry, uint16_t *aSize)
char *
从服务条目中获取服务实例名称的字符串缓冲区。
otSrpClientBuffersGetServiceEntryServiceNameString(otSrpClientBuffersServiceEntry *aEntry, uint16_t *aSize)
char *
从服务条目中获取服务名称的字符串缓冲区。
otSrpClientBuffersGetServiceEntryTxtBuffer(otSrpClientBuffersServiceEntry *aEntry, uint16_t *aSize)
uint8_t *
从服务条目中获取 TXT 记录的缓冲区。
otSrpClientBuffersGetSubTypeLabelsArray(otSrpClientBuffersServiceEntry *aEntry, uint16_t *aArrayLength)
const char **
从服务条目中获取服务子类型标签的数组。
otSrpClientClearHostAndServices(otInstance *aInstance)
void
清除所有主机信息和所有服务。
otSrpClientClearService(otInstance *aInstance, otSrpClientService *aService)
清除服务,并立即将其从客户服务列表中移除。
otSrpClientDisableAutoStartMode(otInstance *aInstance)
void
停用自动启动模式。
otSrpClientEnableAutoHostAddress(otInstance *aInstance)
启用自动主机地址模式。
otSrpClientEnableAutoStartMode(otInstance *aInstance, otSrpClientAutoStartCallback aCallback, void *aContext)
void
启用自动启动模式。
otSrpClientGetDomainName(otInstance *aInstance)
const char *
获取 SRP 客户端使用的域名。
otSrpClientGetHostInfo(otInstance *aInstance)
获取主机信息。
otSrpClientGetKeyLeaseInterval(otInstance *aInstance)
uint32_t
获取 SRP 更新请求中使用的默认密钥租用间隔。
otSrpClientGetLeaseInterval(otInstance *aInstance)
uint32_t
获取 SRP 更新请求中使用的默认租期间隔。
otSrpClientGetServerAddress(otInstance *aInstance)
const otSockAddr *
获取 SRP 客户端正在使用的 SRP 服务器的套接字地址(IPv6 地址和端口号)。
otSrpClientGetServices(otInstance *aInstance)
获取由客户端管理的服务的列表。
otSrpClientGetTtl(otInstance *aInstance)
uint32_t
获取 SRP 更新请求中包含的每条记录的 TTL 值。
otSrpClientIsAutoStartModeEnabled(otInstance *aInstance)
bool
指示自动启动模式的当前状态(启用或停用)。
otSrpClientIsRunning(otInstance *aInstance)
bool
指示 SRP 客户端是否正在运行。
otSrpClientIsServiceKeyRecordEnabled(otInstance *aInstance)
bool
指示是启用还是停用了“包含服务密钥记录”模式。
otSrpClientItemStateToString(otSrpClientItemState aItemState)
const char *
otSrpClientItemState 转换为字符串。
otSrpClientRemoveHostAndServices(otInstance *aInstance, bool aRemoveKeyLease, bool aSendUnregToServer)
启动主机信息和所有服务的移除过程。
otSrpClientRemoveService(otInstance *aInstance, otSrpClientService *aService)
请求向服务器取消注册服务。
otSrpClientSetCallback(otInstance *aInstance, otSrpClientCallback aCallback, void *aContext)
void
设置回调,以通知调用方来自 SRP 客户端的事件/更改。
otSrpClientSetDomainName(otInstance *aInstance, const char *aName)
设置要供 SRP 客户端使用的域名。
otSrpClientSetHostAddresses(otInstance *aInstance, const otIp6Address *aIp6Addresses, uint8_t aNumAddresses)
设置/更新主机 IPv6 地址列表。
otSrpClientSetHostName(otInstance *aInstance, const char *aName)
设置主机名标签。
otSrpClientSetKeyLeaseInterval(otInstance *aInstance, uint32_t aInterval)
void
设置 SRP 更新请求中使用的默认密钥租用间隔。
otSrpClientSetLeaseInterval(otInstance *aInstance, uint32_t aInterval)
void
设置 SRP 更新请求中使用的默认租期间隔。
otSrpClientSetServiceKeyRecordEnabled(otInstance *aInstance, bool aEnabled)
void
启用/停用“包含服务密钥记录”模式。
otSrpClientSetTtl(otInstance *aInstance, uint32_t aTtl)
void
设置 SRP 更新请求中包含的每条记录的 TTL 值。
otSrpClientStart(otInstance *aInstance, const otSockAddr *aServerSockAddr)
启动 SRP 客户端操作。
otSrpClientStop(otInstance *aInstance)
void
停止 SRP 客户端操作。
otSrpServerGetAddressMode(otInstance *aInstance)
返回 SRP 服务器使用的地址模式。
otSrpServerGetAnycastModeSequenceNumber(otInstance *aInstance)
uint8_t
返回用于任播地址模式的序列号。
otSrpServerGetDomain(otInstance *aInstance)
const char *
返回授权给 SRP 服务器的网域。
otSrpServerGetLeaseConfig(otInstance *aInstance, otSrpServerLeaseConfig *aLeaseConfig)
void
返回 SRP 服务器 LEASE 和 KEY-LEASE 配置。
otSrpServerGetNextHost(otInstance *aInstance, const otSrpServerHost *aHost)
const otSrpServerHost *
返回 SRP 服务器上的下一个注册主机。
otSrpServerGetPort(otInstance *aInstance)
uint16_t
返回 SRP 服务器正在监听的端口。
otSrpServerGetResponseCounters(otInstance *aInstance)
返回 SRP 服务器的响应计数器。
otSrpServerGetState(otInstance *aInstance)
返回 SRP 服务器的状态。
otSrpServerGetTtlConfig(otInstance *aInstance, otSrpServerTtlConfig *aTtlConfig)
void
返回 SRP 服务器 TTL 配置。
otSrpServerHandleServiceUpdateResult(otInstance *aInstance, otSrpServerServiceUpdateId aId, otError aError)
void
向 SRP 服务器报告 SRP 更新的处理结果。
otSrpServerHostGetAddresses(const otSrpServerHost *aHost, uint8_t *aAddressesNum)
const otIp6Address *
返回指定主机的地址。
otSrpServerHostGetFullName(const otSrpServerHost *aHost)
const char *
返回主机的全名。
otSrpServerHostGetLeaseInfo(const otSrpServerHost *aHost, otSrpServerLeaseInfo *aLeaseInfo)
void
返回指定主机的 LEASE 和 KEY-LEASE 信息。
otSrpServerHostGetNextService(const otSrpServerHost *aHost, const otSrpServerService *aService)
返回指定主机的下一项服务。
otSrpServerHostIsDeleted(const otSrpServerHost *aHost)
bool
判断 SRP 服务主机是否已被删除。
otSrpServerHostMatchesFullName(const otSrpServerHost *aHost, const char *aFullName)
bool
指示主机是否与给定的主机名匹配。
otSrpServerIsAutoEnableMode(otInstance *aInstance)
bool
指示是启用还是停用自动启用模式。
otSrpServerParseSubTypeServiceName(const char *aSubTypeServiceName, char *aLabel, uint8_t aLabelSize)
解析子类型服务名称(全名)并提取子类型标签。
otSrpServerServiceGetHost(const otSrpServerService *aService)
const otSrpServerHost *
返回服务实例所在的主机。
otSrpServerServiceGetInstanceLabel(const otSrpServerService *aService)
const char *
返回服务的服务实例标签(实例名称中的第一个标签)。
otSrpServerServiceGetInstanceName(const otSrpServerService *aService)
const char *
返回服务的完整服务实例名称。
otSrpServerServiceGetLeaseInfo(const otSrpServerService *aService, otSrpServerLeaseInfo *aLeaseInfo)
void
返回指定服务的 LEASE 和 KEY-LEASE 信息。
otSrpServerServiceGetNumberOfSubTypes(const otSrpServerService *aService)
uint16_t
获取服务的子类型的数量。
otSrpServerServiceGetPort(const otSrpServerService *aService)
uint16_t
返回服务实例的端口。
otSrpServerServiceGetPriority(const otSrpServerService *aService)
uint16_t
返回服务实例的优先级。
otSrpServerServiceGetServiceName(const otSrpServerService *aService)
const char *
返回服务的完整名称。
otSrpServerServiceGetSubTypeServiceNameAt(const otSrpServerService *aService, uint16_t aIndex)
const char *
获取指定索引处服务的子类型服务名称(全名)。
otSrpServerServiceGetTtl(const otSrpServerService *aService)
uint32_t
返回服务实例的 TTL。
otSrpServerServiceGetTxtData(const otSrpServerService *aService, uint16_t *aDataLength)
const uint8_t *
返回服务实例的 TXT 记录数据。
otSrpServerServiceGetWeight(const otSrpServerService *aService)
uint16_t
返回服务实例的权重。
otSrpServerServiceHasSubTypeServiceName(const otSrpServerService *aService, const char *aSubTypeServiceName)
bool
指示服务是否具有给定子类型。
otSrpServerServiceIsDeleted(const otSrpServerService *aService)
bool
指明 SRP 服务是否已被删除。
otSrpServerServiceMatchesInstanceName(const otSrpServerService *aService, const char *aInstanceName)
bool
指示此服务是否与指定的服务实例名称匹配。
otSrpServerServiceMatchesServiceName(const otSrpServerService *aService, const char *aServiceName)
bool
指示此服务是否与给定服务名称匹配。
otSrpServerSetAddressMode(otInstance *aInstance, otSrpServerAddressMode aMode)
设置要由 SRP 服务器使用的地址模式。
otSrpServerSetAnycastModeSequenceNumber(otInstance *aInstance, uint8_t aSequenceNumber)
设置用于任播地址模式的序列号。
otSrpServerSetAutoEnableMode(otInstance *aInstance, bool aEnabled)
void
启用/停用 SRP 服务器上的自动启用模式。
otSrpServerSetDomain(otInstance *aInstance, const char *aDomain)
在 SRP 服务器上设置网域。
otSrpServerSetEnabled(otInstance *aInstance, bool aEnabled)
void
启用/停用 SRP 服务器。
otSrpServerSetLeaseConfig(otInstance *aInstance, const otSrpServerLeaseConfig *aLeaseConfig)
设置 SRP 服务器 LEASE 和 KEY-LEASE 配置。
otSrpServerSetServiceUpdateHandler(otInstance *aInstance, otSrpServerServiceUpdateHandler aServiceHandler, void *aContext)
void
设置 SRP 服务器上的 SRP 服务更新处理程序。
otSrpServerSetTtlConfig(otInstance *aInstance, const otSrpServerTtlConfig *aTtlConfig)
设置 SRP 服务器 TTL 配置。

结构体

otSrpClientBuffersServiceEntry

表示 SRP 客户端服务池条目。

otSrpClientHostInfo

表示 SRP 客户端主机信息。

otSrpClientService

表示 SRP 客户端服务。

otSrpServerLeaseConfig

包括 SRP 服务器 LEASE 和 KEY-LEASE 配置。

otSrpServerLeaseInfo

包括主机/服务的 SRP 服务器租用信息。

otSrpServerResponseCounters

包含 SRP 服务器响应的统计信息。

otSrpServerTtlConfig

包含 SRP 服务器 TTL 配置。

枚举

otSrpClientItemState

 otSrpClientItemState

指定 SRP 客户端项(服务或主机信息)状态。

属性
OT_SRP_CLIENT_ITEM_STATE_ADDING

正在添加/注册商品。

OT_SRP_CLIENT_ITEM_STATE_REFRESHING

正在刷新内容。

OT_SRP_CLIENT_ITEM_STATE_REGISTERED

内容已在服务器中注册。

OT_SRP_CLIENT_ITEM_STATE_REMOVED

已移除内容。

OT_SRP_CLIENT_ITEM_STATE_REMOVING

正在移除内容。

OT_SRP_CLIENT_ITEM_STATE_TO_ADD

要添加/注册的内容。

OT_SRP_CLIENT_ITEM_STATE_TO_REFRESH

要刷新的项(重新注册以续订租约)。

OT_SRP_CLIENT_ITEM_STATE_TO_REMOVE

要移除的内容。

otSrpServerAddressMode

 otSrpServerAddressMode

表示 SRP 服务器使用的地址模式。

地址模式指定了 SRP 服务器如何确定地址和端口号,以及此信息在 Thread 网络数据中的发布方式。

属性
OT_SRP_SERVER_ADDRESS_MODE_ANYCAST

任播地址模式。

OT_SRP_SERVER_ADDRESS_MODE_UNICAST

单播地址模式。

otSrpServerState

 otSrpServerState

表示 SRP 服务器的状态。

属性
OT_SRP_SERVER_STATE_DISABLED

SRP 服务器已停用。

OT_SRP_SERVER_STATE_RUNNING

SRP 服务器已启用且正在运行。

OT_SRP_SERVER_STATE_STOPPED

SRP 服务器已启用,但已停止。

类型定义符

otSrpClientAutoStartCallback

void(* otSrpClientAutoStartCallback)(const otSockAddr *aServerSockAddr, void *aContext)

指针类型定义了 SRP 客户端用来在其自动启动或停止时通知用户的回调。

仅当启用了自动启动功能 OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE 时,才会用到此参数。

启用自动启动模式且 SRP 客户端自动启动或停止时,系统将调用此回调函数。

具体说明
参数
[in] aServerSockAddr
非 NULL 指针表示 SRP 服务器已启动,并且指针将提供所选的服务器套接字地址。NULL 指针表示 SRP 服务器已停止。
[in] aContext
指向任意上下文的指针(在注册回调时提供)。

otSrpClientBuffersServiceEntry

struct otSrpClientBuffersServiceEntry otSrpClientBuffersServiceEntry

表示 SRP 客户端服务池条目。

otSrpClientCallback

void(* otSrpClientCallback)(otError aError, const otSrpClientHostInfo *aHostInfo, const otSrpClientService *aServices, const otSrpClientService *aRemovedServices, void *aContext)

指针类型定义了 SRP 客户端用来通知用户更改/事件/错误的回调。

如果更新成功注册(即向 SRP 服务器添加/移除主机信息和/或某些服务),或者出现失败或错误(例如,服务器拒绝更新请求或客户端超时等待响应等),系统将调用此回调函数。

如果成功重新注册更新,aError 参数将为 OT_ERROR_NONE,并且主机信息将作为输入参数提供给回调。请注意,主机信息和服务会在相关数据结构的相应 mState 成员变量中跟踪自己的状态(指示主机信息/服务是已注册、已移除还是仍在添加/移除等状态)。

已移除服务的列表会在回调函数中作为其自己的关联列表 aRemovedServices 进行传递。请注意,调用回调时,SRP 客户端(OpenThread 实现)使用 aRemovedServices 中列出的已移除服务实例完成,并且不再跟踪/存储它们(即,如果我们从回调中调用 otSrpClientGetServices(),已移除的服务将不会出现在返回的列表中)。在回调中提供单独的已移除服务列表有助于向用户指明现在已移除哪些项目,并允许用户重新声明/重复使用实例。

如果服务器拒绝 SRP 更新请求,则 DNS 响应代码 (RFC 2136) 会映射到以下错误:

  • (0) NOERROR 成功(无错误条件)-> OT_ERROR_NONE
  • (1) FORMERR 服务器因格式错误而无法解释 -> OT_ERROR_PARSE
  • (2) SERVFAIL 服务器发生内部故障 -> OT_ERROR_FAILED
  • (3) NXDOMAIN 上应存在的名称,但不存在 -> OT_ERROR_NOT_FOUND
  • (4) NOTIMP 服务器不支持查询类型 (OpCode) -> OT_ERROR_NOT_IMPLEMENTED
  • (5) 因政策/安全原因遭拒 -> OT_ERROR_SECURITY
  • (6) YXDOMAIN 某些不应存在但存在的名称 -> OT_ERROR_DUPLICATED
  • (7) YXRRSET 一些本不应存在的 RRset 确实存在 -> OT_ERROR_DUPLICATED
  • (8) NXRRSET 一些本应存在的 RRset 不存在 -> OT_ERROR_NOT_FOUND
  • (9) NOTAUTH 服务不是可用区的权威服务 -> OT_ERROR_SECURITY
  • (10) NOTZONE A 名称不在该可用区 -> OT_ERROR_PARSE
  • (20) BADNAME 名称错误 -> OT_ERROR_PARSE
  • (21) BADALG 算法错误 -> OT_ERROR_SECURITY
  • (22) BADTRUN 截断错误 -> OT_ERROR_PARSE
  • 其他响应代码 -> OT_ERROR_FAILED

还可能出现以下错误:

  • OT_ERROR_PARENT_TIMEOUT :等待服务器响应时超时(客户端将继续重试)。
  • OT_ERROR_INVALID_ARGS:提供的服务结构无效(例如,服务名称或 otDnsTxtEntry 无效)。
  • OT_ERROR_NO_BUFS:准备或发送更新消息的缓冲区不足。

请注意,如果发生任何故障,客户端会继续执行操作,即经过一段时间的等待间隔后,客户端会准备 SRP 更新消息并将其(重新)传输至服务器。重试等待间隔从最小值开始,并在每次失败时以增长因数增加,直至达到最大值(如需了解详情,请参阅配置参数 OPENTHREAD_CONFIG_SRP_CLIENT_MIN_RETRY_WAIT_INTERVAL 和相关参数)。

具体说明
参数
[in] aError
错误(参见上文)。
[in] aHostInfo
指向主机信息的指针。
[in] aServices
包含所有服务(不包括已移除的服务)的关联列表的标头。如果列表为空,则为 NULL。
[in] aRemovedServices
包含所有已移除服务的关联列表的标头。如果列表为空,则为 NULL。
[in] aContext
指向任意上下文的指针(在注册回调时提供)。

otSrpClientHostInfo

struct otSrpClientHostInfo otSrpClientHostInfo

表示 SRP 客户端主机信息。

otSrpClientService

struct otSrpClientService otSrpClientService

表示 SRP 客户端服务。

在将此结构的实例从 otSrpClientAddService()otSrpClientRemoveService() 传递到 OpenThread 后,此结构中的值(包括名称和 TXT 记录条目的字符串缓冲区)必须保持不变。

mStatemDatamNext 字段仅由 OT 核心使用/管理。当在 otSrpClientAddService()otSrpClientRemoveService() 或其他函数中传递 otSrpClientService 的实例时,系统会忽略它们的值。调用方无需设置这些字段。

mLeasemKeyLease 字段指定此服务所需的租期和密钥租期。值为零表示未指定间隔,则系统会对此服务使用来自 otSrpClientGetLeaseInterval()otSrpClientGetKeyLeaseInterval() 的默认租用或密钥租用间隔。如果密钥租用间隔(无论是明确设置还是根据默认值确定)短于服务的租用间隔,SRP 客户端也会将租用间隔值重复用于密钥租用间隔。例如,如果在服务中明确将 mLease 设为 2 天,将 mKeyLease 设为 0,并将默认密钥租期设为 1 天,那么在注册此服务时,为此服务请求的密钥租期也设为 2 天。

otSrpServerAddressMode

enum otSrpServerAddressMode otSrpServerAddressMode

表示 SRP 服务器使用的地址模式。

地址模式指定了 SRP 服务器如何确定地址和端口号,以及此信息在 Thread 网络数据中的发布方式。

otSrpServerHost

struct otSrpServerHost otSrpServerHost

此不透明类型表示 SRP 服务主机。

otSrpServerLeaseConfig

struct otSrpServerLeaseConfig otSrpServerLeaseConfig

包括 SRP 服务器 LEASE 和 KEY-LEASE 配置。

otSrpServerLeaseInfo

struct otSrpServerLeaseInfo otSrpServerLeaseInfo

包括主机/服务的 SRP 服务器租用信息。

otSrpServerResponseCounters

struct otSrpServerResponseCounters otSrpServerResponseCounters

包含 SRP 服务器响应的统计信息。

otSrpServerService

struct otSrpServerService otSrpServerService

此不透明类型表示 SRP 服务。

otSrpServerServiceUpdateHandler

void(* otSrpServerServiceUpdateHandler)(otSrpServerServiceUpdateId aId, const otSrpServerHost *aHost, uint32_t aTimeout, void *aContext)

处理 SRP 服务更新。

由 SRP 服务器调用,用于通知 SRP 主机(可能还有 SRP 服务)正在更新。只有在处理程序通过调用 otSrpServerHandleServiceUpdateResult 返回结果或在 aTimeout 后超时后,才提交 SRP 更新。

SRP 服务观察者应始终在收到更新事件后立即调用 otSrpServerHandleServiceUpdateResult 并返回错误代码 OT_ERROR_NONE。

更通用的处理程序可能会对 SRP 主机/服务执行验证,并在任何验证失败时拒绝 SRP 更新。例如,广告代理应在支持多播的链路上通告(或移除)主机和服务,并在发生任何故障时返回特定的错误代码。

具体说明
参数
[in] aId
服务更新事务 ID。此 ID 必须通过 otSrpServerHandleServiceUpdateResult 传回。
[in] aHost
指向包含 SRP 更新的 otSrpServerHost 对象的指针。处理程序应发布/取消发布主机,并且每个服务应通过以下规则指向此主机:
  1. 如果主机未被删除(以 otSrpServerHostIsDeleted 表示),则应使用 mDNS 发布或更新该主机。否则,应取消发布该主机(移除 AAAA RR)。
  2. 对于指向此主机的每个服务,如果要取消发布该主机,则必须取消发布该服务。否则,处理程序应在服务未删除(用 otSrpServerServiceIsDeleted 表示)时发布或更新服务,并在删除后取消发布该服务。
[in] aTimeout
处理程序处理服务事件的最大时间(以毫秒为单位)。
[in] aContext
指向应用特定上下文的指针。
另请参阅
otSrpServerSetServiceUpdateHandler
otSrpServerHandleServiceUpdateResult

otSrpServerServiceUpdateId

uint32_t otSrpServerServiceUpdateId

SRP 服务器上的 SRP 服务更新事务的 ID。

otSrpServerTtlConfig

struct otSrpServerTtlConfig otSrpServerTtlConfig

包含 SRP 服务器 TTL 配置。

函数

otSrpClientAddService

otError otSrpClientAddService(
  otInstance *aInstance,
  otSrpClientService *aService
)

添加要向服务器注册的服务。

成功调用此函数后,系统将调用 otSrpClientCallback,以报告向 SRP 服务器添加/注册服务的状态。

从此函数(通过 OT_ERROR_NONE)返回后,aService 指向的 otSrpClientService 实例必须保留且保持不变。OpenThread 将保存指向服务实例的指针。

OpenThread 不再跟踪 otSrpClientService 实例,并且只有在满足以下条件时才能将其回收

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aService
指向要添加的 otSrpClientService 实例的指针。
返回值
OT_ERROR_NONE
已成功开始添加服务。系统将调用 otSrpClientCallback 来报告状态。
OT_ERROR_ALREADY
列表中已存在具有相同服务和实例名称的服务。
OT_ERROR_INVALID_ARGS
服务结构无效(例如,服务名称或 otDnsTxtEntry 有误)。

otSrpClientBuffersAllocateService

otSrpClientBuffersServiceEntry * otSrpClientBuffersAllocateService(
  otInstance *aInstance
)

从池中分配新的服务条目。

返回的服务条目实例将按如下方式初始化:

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
指向新分配的服务条目的指针,如果池中没有可用的条目,则为 NULL。

otSrpClientBuffersFreeAllServices

void otSrpClientBuffersFreeAllServices(
  otInstance *aInstance
)

释放之前分配的所有服务条目。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。

otSrpClientBuffersFreeService

void otSrpClientBuffersFreeService(
  otInstance *aInstance,
  otSrpClientBuffersServiceEntry *aService
)

释放先前分配的服务条目。

必须事先使用 otSrpClientBuffersAllocateService() 分配 aService,但尚未将其释放。否则,此函数的行为将处于未定义状态。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aService
指向可释放的服务条目的指针(不得为 NULL)。

otSrpClientBuffersGetHostAddressesArray

otIp6Address * otSrpClientBuffersGetHostAddressesArray(
  otInstance *aInstance,
  uint8_t *aArrayLength
)

获取要用作 SRP 客户端主机地址列表的 IPv6 地址条目数组。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aArrayLength
指向用于返回数组长度(即数组中的 IPv6 地址条目数)的变量的指针(不得为 NULL)。
返回值
指向 otIp6Address 条目数组的指针(条目数在 aArrayLength 中返回)。

otSrpClientBuffersGetHostNameString

char * otSrpClientBuffersGetHostNameString(
  otInstance *aInstance,
  uint16_t *aSize
)

获取用于 SRP 客户端主机名的字符串缓冲区。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aSize
一个指针,指向用于返回字符串缓冲区的大小(字节数)的变量(不得为 NULL)。
返回值
指向用于 SRP 客户端主机名的字符缓冲区的指针。

otSrpClientBuffersGetServiceEntryInstanceNameString

char * otSrpClientBuffersGetServiceEntryInstanceNameString(
  otSrpClientBuffersServiceEntry *aEntry,
  uint16_t *aSize
)

从服务条目中获取服务实例名称的字符串缓冲区。

具体说明
参数
[in] aEntry
指向之前分配的服务条目的指针(不得为 NULL)。
[out] aSize
指向用于返回字符串缓冲区大小(字节数)的变量的指针(不得为 NULL)。
返回值
指向字符串缓冲区的指针。

otSrpClientBuffersGetServiceEntryServiceNameString

char * otSrpClientBuffersGetServiceEntryServiceNameString(
  otSrpClientBuffersServiceEntry *aEntry,
  uint16_t *aSize
)

从服务条目中获取服务名称的字符串缓冲区。

具体说明
参数
[in] aEntry
指向之前分配的服务条目的指针(不得为 NULL)。
[out] aSize
指向用于返回字符串缓冲区大小(字节数)的变量的指针(不得为 NULL)。
返回值
指向字符串缓冲区的指针。

otSrpClientBuffersGetServiceEntryTxtBuffer

uint8_t * otSrpClientBuffersGetServiceEntryTxtBuffer(
  otSrpClientBuffersServiceEntry *aEntry,
  uint16_t *aSize
)

从服务条目中获取 TXT 记录的缓冲区。

具体说明
参数
[in] aEntry
指向之前分配的服务条目的指针(不得为 NULL)。
[out] aSize
指向用于返回缓冲区大小(字节数)的变量的指针(不得为 NULL)。
返回值
指向缓冲区的指针。

otSrpClientBuffersGetSubTypeLabelsArray

const char ** otSrpClientBuffersGetSubTypeLabelsArray(
  otSrpClientBuffersServiceEntry *aEntry,
  uint16_t *aArrayLength
)

从服务条目中获取服务子类型标签的数组。

具体说明
参数
[in] aEntry
指向之前分配的服务条目的指针(不得为 NULL)。
[out] aArrayLength
指向要返回数组长度的变量的指针(不得为 NULL)。
返回值
指向数组的指针。

otSrpClientClearHostAndServices

void otSrpClientClearHostAndServices(
  otInstance *aInstance
)

清除所有主机信息和所有服务。

otSrpClientRemoveHostAndServices() 向服务器发送更新消息以移除所有信息不同,此函数会立即清除所有信息,而不会与服务器进行任何交互。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。

otSrpClientClearService

otError otSrpClientClearService(
  otInstance *aInstance,
  otSrpClientService *aService
)

清除服务,并立即将其从客户服务列表中移除。

otSrpClientRemoveService() 向服务器发送更新消息以移除相应服务不同,此函数不会与服务器进行任何交互,而是从客户端的服务列表中清除该服务。成功调用此函数后,系统将不会调用 otSrpClientCallback,并且调用方可以立即回收并重复使用 aService 条目。

可与对 otSrpClientAddService() 的后续调用结合使用(可能会重复使用具有相同服务和实例名称的同一 aService 条目),以更新现有服务中的某些参数。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aService
指向要删除的 otSrpClientService 实例的指针。
返回值
OT_ERROR_NONE
已成功删除 aService。它可以立即回收和再利用。
OT_ERROR_NOT_FOUND
在列表中找不到该服务。

otSrpClientDisableAutoStartMode

void otSrpClientDisableAutoStartMode(
  otInstance *aInstance
)

停用自动启动模式。

仅当启用了自动启动功能 OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE 时,此功能才可用。

停用自动启动模式不会停止已在运行的客户端,但客户端会停止监控 Thread 网络数据以验证所选 SRP 服务器是否仍然存在。

请注意,调用 otSrpClientStop() 也会停用自动启动模式。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。

otSrpClientEnableAutoHostAddress

otError otSrpClientEnableAutoHostAddress(
  otInstance *aInstance
)

启用自动主机地址模式。

启用后,SRP 客户端会使用 Thread netif 上的所有首选单播地址自动设置主机 IPv6 地址,不包括所有链路本地和网状本地地址。如果没有首选地址,则会添加网状网本地 EID 地址。当/如果 Thread netif 上的地址更新(添加了新地址、移除现有地址或标记为非首选)时,SRP 客户端将自动重新注册。

自动主机地址模式可在 SRP 客户端启动之前或操作期间启用,除非主机信息正在被移除(客户端正忙于处理来自对 otSrpClientRemoveHostAndServices() 的调用的移除请求,并且主机信息仍处于 STATE_TO_REMOVESTATE_REMOVING 状态)。

启用自动主机地址模式后,可通过调用 otSrpClientSetHostAddresses() 将其停用,该调用随后会显式设置主机地址。

具体说明
返回值
OT_ERROR_NONE
已成功启用自动主机地址模式。
OT_ERROR_INVALID_STATE
系统正在移除主机,因此无法启用自动主机地址模式。

otSrpClientEnableAutoStartMode

void otSrpClientEnableAutoStartMode(
  otInstance *aInstance,
  otSrpClientAutoStartCallback aCallback,
  void *aContext
)

启用自动启动模式。

仅当启用了自动启动功能 OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE 时,此功能才可用。

配置选项 OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_DEFAULT_MODE 用于指定默认的自动启动模式(在 OT 堆栈开始时是启用或停用)。

启用自动启动后,SRP 客户端将监控线程网络数据以发现 SRP 服务器,并选择首选服务器,并在检测到 SRP 服务器时自动启动和停止客户端。

有三类网络数据条目表明存在 SRP 服务器。建议按以下顺序进行优先使用:

1) 服务数据中包含服务器地址的首选单播条目。如果有多个选项,请优先选择数值最低的 IPv6 地址。

2) 每个任播条目都有一个序列号。RFC-1982 中的序列号算术逻辑指定的较大的序列号被视为较近,因此建议使用。如果使用序列号运算的最大序列编号已明确定义(即序列编号大于所有其他序列编号),则首选使用最大的序列编号。如果没有明确定义,则首选数值最大的序列号。

3) 服务器地址中包含服务器地址信息的 Unicast 条目。如果有多个选项,请优先选择数值最低的 IPv6 地址。

当网络数据条目发生更改时,客户端将检查当前选定的服务器是否仍存在于网络数据中,且仍是首选服务器。否则,客户端将切换到新的首选服务器,如果没有,则停止。

当通过成功调用 otSrpClientStart() 来显式启动 SRP 客户端时,无论自动启动模式的状态如何,也无论 Thread Network Data 中是否发现了相同的 SRP 服务器地址,otSrpClientStart() 中的指定 SRP 服务器地址都将继续使用。在这种情况下,只有显式 otSrpClientStop() 调用才会停止客户端。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aCallback
用于通知客户端自动启动/停止的回调。如果不需要,可以为 NULL。
[in] aContext
调用 aCallback 时要传递的上下文。

otSrpClientGetDomainName

const char * otSrpClientGetDomainName(
  otInstance *aInstance
)

获取 SRP 客户端使用的域名。

需要启用 OPENTHREAD_CONFIG_SRP_CLIENT_DOMAIN_NAME_API_ENABLE

如果未设置域名,系统将使用“default.service.arpa”。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
域名字符串。

otSrpClientGetHostInfo

const otSrpClientHostInfo * otSrpClientGetHostInfo(
  otInstance *aInstance
)

获取主机信息。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
指向主机信息结构的指针。

otSrpClientGetKeyLeaseInterval

uint32_t otSrpClientGetKeyLeaseInterval(
  otInstance *aInstance
)

获取 SRP 更新请求中使用的默认密钥租用间隔。

默认时间间隔仅用于 mKeyLease 设置为零的 otSrpClientService 实例。

请注意,这是 SRP 客户端请求的租期。服务器可能会选择接受不同的租期间隔。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
密钥租用时间间隔(以秒为单位)。

otSrpClientGetLeaseInterval

uint32_t otSrpClientGetLeaseInterval(
  otInstance *aInstance
)

获取 SRP 更新请求中使用的默认租期间隔。

默认时间间隔仅用于 mLease 设置为零的 otSrpClientService 实例。

请注意,这是 SRP 客户端请求的租期。服务器可能会选择接受不同的租期间隔。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
租用间隔(以秒为单位)。

otSrpClientGetServerAddress

const otSockAddr * otSrpClientGetServerAddress(
  otInstance *aInstance
)

获取 SRP 客户端正在使用的 SRP 服务器的套接字地址(IPv6 地址和端口号)。

如果客户端未运行,则地址未指定(全部为零)且端口号为零。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
指向 SRP 服务器的套接字地址(始终为非 NULL)的指针。

otSrpClientGetServices

const otSrpClientService * otSrpClientGetServices(
  otInstance *aInstance
)

获取由客户端管理的服务的列表。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
指向所有服务的链接列表头的指针,如果列表为空,则为 NULL。

otSrpClientGetTtl

uint32_t otSrpClientGetTtl(
  otInstance *aInstance
)

获取 SRP 更新请求中包含的每条记录的 TTL 值。

请注意,这是 SRP 客户端请求的 TTL。服务器可能会选择接受不同的 TTL。

默认情况下,TTL 等于租用间隔。通过 otSrpClientSetTtl() 传递 0 或大于租用间隔的值也会使 TTL 等于租用间隔。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
TTL(以秒为单位)。

otSrpClientIsAutoStartModeEnabled

bool otSrpClientIsAutoStartModeEnabled(
  otInstance *aInstance
)

指示自动启动模式的当前状态(启用或停用)。

仅当启用了自动启动功能 OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE 时,此功能才可用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
如果已启用自动启动模式,则为 TRUE,否则为 FALSE。

otSrpClientIsRunning

bool otSrpClientIsRunning(
  otInstance *aInstance
)

指示 SRP 客户端是否正在运行。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
如果 SRP 客户端正在运行,则为 TRUE,否则为 FALSE。

otSrpClientIsServiceKeyRecordEnabled

bool otSrpClientIsServiceKeyRecordEnabled(
  otInstance *aInstance
)

指示是启用还是停用了“包含服务密钥记录”模式。

在启用 OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE 配置后可用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
如果启用了“包含服务密钥记录”模式,则为 TRUE,否则为 FALSE。

otSrpClientItemStateToString

const char * otSrpClientItemStateToString(
  otSrpClientItemState aItemState
)

otSrpClientItemState 转换为字符串。

具体说明
参数
[in] aItemState
项状态。
返回值
aItemState 的字符串表示法。

otSrpClientRemoveHostAndServices

otError otSrpClientRemoveHostAndServices(
  otInstance *aInstance,
  bool aRemoveKeyLease,
  bool aSendUnregToServer
)

启动主机信息和所有服务的移除过程。

从此函数返回后,系统将调用 otSrpClientCallback 以报告向 SRP 服务器发出的移除请求的状态。

如果要从服务器上永久移除主机信息,则应将 aRemoveKeyLease 设置为 true,以移除与服务器上主机关联的密钥租期。否则,密钥租用记录会像以前一样保留,以确保服务器保留主机名,以便在客户端再次能够提供和注册其服务时进行保留。

aSendUnregToServer 用于确定在主机信息尚未向服务器注册时的行为。如果 aSendUnregToServer 设置为 false(默认值/预期值),SRP 客户端会立即移除主机信息和服务,而不会向服务器发送更新消息(如果尚未向服务器注册任何内容,则无需更新服务器)。如果 aSendUnregToServer 设置为 true,则 SRP 客户端会向服务器发送一条更新消息。请注意,如果注册了主机信息,aSendUnregToServer 的值就无关紧要,SRP 客户端会始终向服务器发送一条更新消息,要求移除所有信息。

aSendUnregToServer 有用的一种情况是当设备重置/重新启动时,调用方可能想要移除之前在服务器中注册的所有服务。在这种情况下,调用方可以执行 otSrpClientSetHostName(),然后请求 otSrpClientRemoveHostAndServices() 并使用 aSendUnregToServer 作为 true

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aRemoveKeyLease
指示是否也移除主机密钥租用的布尔值。
[in] aSendUnregToServer
一个布尔值,用于指明在未注册主机信息时是否向服务器发送更新。
返回值
OT_ERROR_NONE
已成功开始移除主机信息和服务。系统将调用 otSrpClientCallback 来报告状态。
OT_ERROR_ALREADY
主机信息已移除。

otSrpClientRemoveService

otError otSrpClientRemoveService(
  otInstance *aInstance,
  otSrpClientService *aService
)

请求向服务器取消注册服务。

成功调用此函数后,系统会调用 otSrpClientCallback,以报告向 SRP 服务器发出的移除请求的状态。

从此函数(通过 OT_ERROR_NONE)返回后,aService 指向的 otSrpClientService 实例必须保留且保持不变。在移除过程中,OpenThread 将保留该服务实例。仅在调用 otSrpClientCallback 后表示服务实例已从 SRP 客户端服务列表中移除,可以释放/重复使用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aService
指向要移除的 otSrpClientService 实例的指针。
返回值
OT_ERROR_NONE
已成功开始移除服务。系统将调用 otSrpClientCallback 来报告状态。
OT_ERROR_NOT_FOUND
在列表中找不到该服务。

otSrpClientSetCallback

void otSrpClientSetCallback(
  otInstance *aInstance,
  otSrpClientCallback aCallback,
  void *aContext
)

设置回调,以通知调用方来自 SRP 客户端的事件/更改。

SRP 客户端允许注册单个回调。因此,对此函数的连续调用将覆盖之前设置的所有回调函数。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aCallback
用于通知事件和更改的回调。如果不需要,可以为 NULL。
[in] aContext
aCallback 一起使用的任意上下文。

otSrpClientSetDomainName

otError otSrpClientSetDomainName(
  otInstance *aInstance,
  const char *aName
)

设置要供 SRP 客户端使用的域名。

需要启用 OPENTHREAD_CONFIG_SRP_CLIENT_DOMAIN_NAME_API_ENABLE

如果未设置,系统将使用“default.service.arpa”。

aName 指向的名称字符串缓冲区在从此函数返回后必须保留且保持不变。OpenThread 将保留指向该字符串的指针。

您可以在客户端启动之前或启动之后、向服务器注册主机信息之前设置域名(主机信息应位于 STATE_TO_ADDSTATE_TO_REMOVE 中)。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aName
指向域名字符串的指针。如果为 NULL,则将其设置为默认值“default.service.arpa”。
返回值
OT_ERROR_NONE
已成功设置域名标签。
OT_ERROR_INVALID_STATE
主机信息已在服务器上注册。

otSrpClientSetHostAddresses

otError otSrpClientSetHostAddresses(
  otInstance *aInstance,
  const otIp6Address *aIp6Addresses,
  uint8_t aNumAddresses
)

设置/更新主机 IPv6 地址列表。

您可以在启动之前或 SRP 客户端操作期间设置/更改主机 IPv6 地址(例如,添加/移除或更改以前注册的主机地址),但移除主机信息的情况除外(客户端正忙于处理先前对 otSrpClientRemoveHostAndServices() 的调用发出的移除请求,并且主机信息仍处于 STATE_TO_REMOVESTATE_REMOVING 状态)。

从此函数返回(通过 OT_ERROR_NONE)后,aIp6Addresses 指向的主机 IPv6 地址数组必须保留且保持不变。OpenThread 会将指向该数组的指针保存下来。

成功调用此函数后,系统会调用 otSrpClientCallback,以报告向 SRP 服务器注册的地址的状态。

如果之前通过成功调用 otSrpClientEnableAutoHostAddress() 启用了自动主机地址模式,则调用此函数会停用自动主机地址模式。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aIp6Addresses
指向包含主机 IPv6 地址的数组的指针。
[in] aNumAddresses
aIp6Addresses 数组中的地址数量。
返回值
OT_ERROR_NONE
已成功开始主机 IPv6 地址列表更改。系统将调用 otSrpClientCallback 以报告向服务器注册地址的状态。
OT_ERROR_INVALID_ARGS
地址列表无效(例如,必须包含至少一个地址)。
OT_ERROR_INVALID_STATE
系统正在移除主机,因此无法更改主机地址。

otSrpClientSetHostName

otError otSrpClientSetHostName(
  otInstance *aInstance,
  const char *aName
)

设置主机名标签。

成功调用此函数后,系统将调用 otSrpClientCallback 以报告向 SRP 服务器注册主机信息的状态。

aName 指向的名称字符串缓冲区在从此函数返回后必须保留且保持不变。OpenThread 将保留指向该字符串的指针。

可以在客户端启动之前或启动之后、向服务器注册主机信息之前设置主机名(主机信息应位于 STATE_TO_ADDSTATE_REMOVED 中)。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aName
指向主机名标签字符串(不得为 NULL)的指针。指向字符串缓冲区的指针在从此函数返回后必须持续有效且保持不变。
返回值
OT_ERROR_NONE
已成功设置主机名标签。
OT_ERROR_INVALID_ARGS
aName 为 NULL。
OT_ERROR_INVALID_STATE
主机名已设置且已向服务器注册。

otSrpClientSetKeyLeaseInterval

void otSrpClientSetKeyLeaseInterval(
  otInstance *aInstance,
  uint32_t aInterval
)

设置 SRP 更新请求中使用的默认密钥租用间隔。

默认时间间隔仅用于 mKeyLease 设置为零的 otSrpClientService 实例。

更改租借间隔不会影响已注册服务/host-info 的已接受租借间隔,而只会影响今后的所有 SRP 更新消息(即添加新服务和/或刷新现有服务)。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aInterval
密钥租用时间间隔(以秒为单位)。如果为零,将使用 OPENTHREAD_CONFIG_SRP_CLIENT_DEFAULT_KEY_LEASE 指定的默认值。

otSrpClientSetLeaseInterval

void otSrpClientSetLeaseInterval(
  otInstance *aInstance,
  uint32_t aInterval
)

设置 SRP 更新请求中使用的默认租期间隔。

默认时间间隔仅用于 mLease 设置为零的 otSrpClientService 实例。

更改租借间隔不会影响已注册服务/host-info 的已接受租借间隔。这只会影响以后的所有 SRP 更新消息(即添加新服务和/或刷新现有服务)。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aInterval
租用间隔(以秒为单位)。如果为零,将使用 OPENTHREAD_CONFIG_SRP_CLIENT_DEFAULT_LEASE 指定的默认值。

otSrpClientSetServiceKeyRecordEnabled

void otSrpClientSetServiceKeyRecordEnabled(
  otInstance *aInstance,
  bool aEnabled
)

启用/停用“包含服务密钥记录”模式。

启用后,SRP 客户端会在其发送的 SRP 更新消息的“服务说明说明”部分包含 KEY 记录。

在启用 OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE 配置后可用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aEnabled
为 TRUE 时启用,为 FALSE 以停用“包含服务密钥记录”模式。

otSrpClientSetTtl

void otSrpClientSetTtl(
  otInstance *aInstance,
  uint32_t aTtl
)

设置 SRP 更新请求中包含的每条记录的 TTL 值。

更改 TTL 不会影响已注册服务/host-info 的 TTL。它只会影响未来的 SRP 更新消息(即添加新服务和/或刷新现有服务)。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aTtl
TTL(以秒为单位)。如果值为零或大于租用间隔,则 TTL 设置为租用间隔。

otSrpClientStart

otError otSrpClientStart(
  otInstance *aInstance,
  const otSockAddr *aServerSockAddr
)

启动 SRP 客户端操作。

满足以下所有条件后,SRP 客户端会准备“SRP 更新”消息并将其发送到 SRP 服务器:

这些函数的调用顺序并不重要。当所有条件都满足时,SRP 客户端会等待一个短暂的延迟,然后再准备“SRP 更新”消息并将其发送到服务器。这种延迟允许用户在发送第一条 SRP 更新消息之前添加多个服务和/或 IPv6 地址(确保发送包含所有信息的单个 SRP 更新)。OPENTHREAD_CONFIG_SRP_CLIENT_UPDATE_TX_DELAY 配置会指定延迟间隔。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aServerSockAddr
SRP 服务器的套接字地址(IPv6 地址和端口号)。
返回值
OT_ERROR_NONE
SRP 客户端操作已成功启动,或它已使用相同的服务器套接字地址和回调运行。
OT_ERROR_BUSY
SRP 客户端正忙于使用其他套接字地址运行。
OT_ERROR_FAILED
打开/连接客户端的 UDP 套接字失败。

otSrpClientStop

void otSrpClientStop(
  otInstance *aInstance
)

停止 SRP 客户端操作。

停止与 SRP 服务器的任何进一步交互。请注意,此操作不会移除或清除主机信息和/或服务列表。它标记了要在(重启)客户端后再次添加/移除的所有服务。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。

otSrpServerGetAddressMode

otSrpServerAddressMode otSrpServerGetAddressMode(
  otInstance *aInstance
)

返回 SRP 服务器使用的地址模式。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
SRP 服务器的地址模式。

otSrpServerGetAnycastModeSequenceNumber

uint8_t otSrpServerGetAnycastModeSequenceNumber(
  otInstance *aInstance
)

返回用于任播地址模式的序列号。

序列号包含在“网络数据”中发布“DNS/SRP 服务任播地址”条目中。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
任播序列号。

otSrpServerGetDomain

const char * otSrpServerGetDomain(
  otInstance *aInstance
)

返回授权给 SRP 服务器的网域。

如果网域未通过 SetDomain 进行设置,则会返回“default.service.arpa.”。即使设置域名时不带句点,也会始终附加结尾句点。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
指向以点联接的网域字符串的指针。

otSrpServerGetLeaseConfig

void otSrpServerGetLeaseConfig(
  otInstance *aInstance,
  otSrpServerLeaseConfig *aLeaseConfig
)

返回 SRP 服务器 LEASE 和 KEY-LEASE 配置。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aLeaseConfig
指向 otSrpServerLeaseConfig 实例的指针。

otSrpServerGetNextHost

const otSrpServerHost * otSrpServerGetNextHost(
  otInstance *aInstance,
  const otSrpServerHost *aHost
)

返回 SRP 服务器上的下一个注册主机。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aHost
指向当前主机的指针;使用 NULL 获取第一个主机。
返回值
指向已注册的主机的指针。如果找不到更多主机,则为 NULL。

otSrpServerGetPort

uint16_t otSrpServerGetPort(
  otInstance *aInstance
)

返回 SRP 服务器正在监听的端口。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
SRP 服务器的端口。如果服务器未运行,则返回 0。

otSrpServerGetResponseCounters

const otSrpServerResponseCounters * otSrpServerGetResponseCounters(
  otInstance *aInstance
)

返回 SRP 服务器的响应计数器。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
指向 SRP 服务器响应计数器的指针。

otSrpServerGetState

otSrpServerState otSrpServerGetState(
  otInstance *aInstance
)

返回 SRP 服务器的状态。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
SRP 服务器的当前状态。

otSrpServerGetTtlConfig

void otSrpServerGetTtlConfig(
  otInstance *aInstance,
  otSrpServerTtlConfig *aTtlConfig
)

返回 SRP 服务器 TTL 配置。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aTtlConfig
指向 otSrpServerTtlConfig 实例的指针。

otSrpServerHandleServiceUpdateResult

void otSrpServerHandleServiceUpdateResult(
  otInstance *aInstance,
  otSrpServerServiceUpdateId aId,
  otError aError
)

向 SRP 服务器报告 SRP 更新的处理结果。

服务更新处理程序应调用此函数以返回其对 SRP 更新的处理结果。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aId
服务更新事务 ID。此 ID 应该与通过 otSrpServerServiceUpdateHandler 提供的 ID 相同。
[in] aError
要返回到 SRP 服务器的错误。使用 OT_ERROR_DUPLICATED 来表示 DNS 名称冲突。

otSrpServerHostGetAddresses

const otIp6Address * otSrpServerHostGetAddresses(
  const otSrpServerHost *aHost,
  uint8_t *aAddressesNum
)

返回指定主机的地址。

具体说明
参数
[in] aHost
指向 SRP 服务主机的指针。
[out] aAddressesNum
指向应将地址数输出到的位置的指针。
返回值
指向 IPv6 地址数组的指针。

otSrpServerHostGetFullName

const char * otSrpServerHostGetFullName(
  const otSrpServerHost *aHost
)

返回主机的全名。

具体说明
参数
[in] aHost
指向 SRP 服务主机的指针。
返回值
指向以 null 结尾的主机名字符串的指针。

otSrpServerHostGetLeaseInfo

void otSrpServerHostGetLeaseInfo(
  const otSrpServerHost *aHost,
  otSrpServerLeaseInfo *aLeaseInfo
)

返回指定主机的 LEASE 和 KEY-LEASE 信息。

具体说明
参数
[in] aHost
指向 SRP 服务器主机的指针。
[out] aLeaseInfo
指向 LEASE 和 KEY-LEASE 信息的输出位置的指针。

otSrpServerHostGetNextService

const otSrpServerService * otSrpServerHostGetNextService(
  const otSrpServerHost *aHost,
  const otSrpServerService *aService
)

返回指定主机的下一项服务。

具体说明
参数
[in] aHost
指向 SRP 服务主机的指针。
[in] aService
指向当前 SRP 服务实例的指针;使用 NULL 可获取第一项服务。
返回值
指向下一项服务的指针,如果没有更多服务,则为 NULL。

otSrpServerHostIsDeleted

bool otSrpServerHostIsDeleted(
  const otSrpServerHost *aHost
)

判断 SRP 服务主机是否已被删除。

可以删除 SRP 服务主机,但会保留其名称以供将来使用。在这种情况下,主机实例不会从 SRP 服务器/注册表中移除。

具体说明
参数
[in] aHost
指向 SRP 服务主机的指针。
返回值
如果主机已删除,则为 TRUE,否则为 FALSE。

otSrpServerHostMatchesFullName

bool otSrpServerHostMatchesFullName(
  const otSrpServerHost *aHost,
  const char *aFullName
)

指示主机是否与给定的主机名匹配。

DNS 名称匹配使用不区分大小写的字符串比较(即“Abc”和“aBc”视为相同)。

具体说明
参数
[in] aHost
指向 SRP 服务主机的指针。
[in] aFullName
完整的主机名。
返回值
TRUE
如果主机与主机名匹配。
FALSE
如果主机与主机名不匹配。

otSrpServerIsAutoEnableMode

bool otSrpServerIsAutoEnableMode(
  otInstance *aInstance
)

指示是启用还是停用自动启用模式。

需要 OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE 功能。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
TRUE
自动启用模式已启用。
FALSE
自动启用模式已停用。

otSrpServerParseSubTypeServiceName

otError otSrpServerParseSubTypeServiceName(
  const char *aSubTypeServiceName,
  char *aLabel,
  uint8_t aLabelSize
)

解析子类型服务名称(全名)并提取子类型标签。

子类型服务的完整服务名称为“._sub...”。

具体说明
参数
[in] aSubTypeServiceName
子类型服务名称(全名)。
[out] aLabel
指向用于复制提取子类型标签的缓冲区的指针。
[in] aLabelSize
aLabel 缓冲区的大小上限。
返回值
OT_ERROR_NONE
已成功解析名称并更新了“aLabel”。
OT_ERROR_NO_BUFS
子类型标签无法在 aLabel 缓冲区中容纳(标签中符合要求的字符数要复制到 aLabel 中,以确保其为 null 终止)。
OT_ERROR_INVALID_ARGS
aSubTypeServiceName”不是有效的子类型格式。

otSrpServerServiceGetHost

const otSrpServerHost * otSrpServerServiceGetHost(
  const otSrpServerService *aService
)

返回服务实例所在的主机。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
返回值
指向主机实例的指针。

otSrpServerServiceGetInstanceLabel

const char * otSrpServerServiceGetInstanceLabel(
  const otSrpServerService *aService
)

返回服务的服务实例标签(实例名称中的第一个标签)。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
返回值
指向以 null 结尾的服务实例标签字符串的指针。

otSrpServerServiceGetInstanceName

const char * otSrpServerServiceGetInstanceName(
  const otSrpServerService *aService
)

返回服务的完整服务实例名称。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
返回值
指向以 null 结尾的服务实例名称字符串的指针。

otSrpServerServiceGetLeaseInfo

void otSrpServerServiceGetLeaseInfo(
  const otSrpServerService *aService,
  otSrpServerLeaseInfo *aLeaseInfo
)

返回指定服务的 LEASE 和 KEY-LEASE 信息。

具体说明
参数
[in] aService
指向 SRP 服务器服务的指针。
[out] aLeaseInfo
指向 LEASE 和 KEY-LEASE 信息的输出位置的指针。

otSrpServerServiceGetNumberOfSubTypes

uint16_t otSrpServerServiceGetNumberOfSubTypes(
  const otSrpServerService *aService
)

获取服务的子类型的数量。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
返回值
aService 的子类型的数量。

otSrpServerServiceGetPort

uint16_t otSrpServerServiceGetPort(
  const otSrpServerService *aService
)

返回服务实例的端口。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
返回值
服务的端口。

otSrpServerServiceGetPriority

uint16_t otSrpServerServiceGetPriority(
  const otSrpServerService *aService
)

返回服务实例的优先级。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
返回值
服务的优先级。

otSrpServerServiceGetServiceName

const char * otSrpServerServiceGetServiceName(
  const otSrpServerService *aService
)

返回服务的完整名称。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
返回值
指向以 null 结尾的服务名称字符串的指针。

otSrpServerServiceGetSubTypeServiceNameAt

const char * otSrpServerServiceGetSubTypeServiceNameAt(
  const otSrpServerService *aService,
  uint16_t aIndex
)

获取指定索引处服务的子类型服务名称(全名)。

子类型服务的完整服务名称为“._sub...”。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
[in] aIndex
要获取的索引。
返回值
指向位于 aIndex 的子类型服务名称的指针,如果此索引没有子类型,则为 NULL

otSrpServerServiceGetTtl

uint32_t otSrpServerServiceGetTtl(
  const otSrpServerService *aService
)

返回服务实例的 TTL。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
返回值
服务实例的 TTL。

otSrpServerServiceGetTxtData

const uint8_t * otSrpServerServiceGetTxtData(
  const otSrpServerService *aService,
  uint16_t *aDataLength
)

返回服务实例的 TXT 记录数据。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
[out] aDataLength
用于返回 TXT 记录数据长度的指针。不得为 NULL。
返回值
指向包含 TXT 记录数据的缓冲区的指针(TXT 数据长度在 aDataLength 中返回)。

otSrpServerServiceGetWeight

uint16_t otSrpServerServiceGetWeight(
  const otSrpServerService *aService
)

返回服务实例的权重。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
返回值
服务的权重。

otSrpServerServiceHasSubTypeServiceName

bool otSrpServerServiceHasSubTypeServiceName(
  const otSrpServerService *aService,
  const char *aSubTypeServiceName
)

指示服务是否具有给定子类型。

DNS 名称匹配使用不区分大小写的字符串比较(即“Abc”和“aBc”视为相同)。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
[in] aSubTypeServiceName
要检查的子类型服务名称(全名)。
返回值
TRUE
Service 包含子类型 aSubTypeServiceName
FALSE
Service 不包含子类型 aSubTypeServiceName

otSrpServerServiceIsDeleted

bool otSrpServerServiceIsDeleted(
  const otSrpServerService *aService
)

指明 SRP 服务是否已被删除。

可以删除 SRP 服务,但会保留其名称以供将来使用。在这种情况下,服务实例不会从 SRP 服务器/注册表中移除。如果删除主机,这必定会删除所有服务。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
返回值
如果服务已被删除,则为 TRUE,否则为 FALSE。

otSrpServerServiceMatchesInstanceName

bool otSrpServerServiceMatchesInstanceName(
  const otSrpServerService *aService,
  const char *aInstanceName
)

指示此服务是否与指定的服务实例名称匹配。

DNS 名称匹配使用不区分大小写的字符串比较(即“Abc”和“aBc”视为相同)。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
[in] aInstanceName
服务实例名称。
返回值
TRUE
服务与服务实例名称匹配。
FALSE
如果服务与服务实例名称不匹配。

otSrpServerServiceMatchesServiceName

bool otSrpServerServiceMatchesServiceName(
  const otSrpServerService *aService,
  const char *aServiceName
)

指示此服务是否与给定服务名称匹配。

DNS 名称匹配使用不区分大小写的字符串比较(即“Abc”和“aBc”视为相同)。

具体说明
参数
[in] aService
指向 SRP 服务的指针。
[in] aServiceName
服务名称。
返回值
TRUE
服务名称是否与服务名称匹配。
FALSE
如果服务与服务名称不匹配。

otSrpServerSetAddressMode

otError otSrpServerSetAddressMode(
  otInstance *aInstance,
  otSrpServerAddressMode aMode
)

设置要由 SRP 服务器使用的地址模式。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aMode
要使用的地址模式。
返回值
OT_ERROR_NONE
已成功设置地址模式。
OT_ERROR_INVALID_STATE
SRP 服务器已启用,地址模式无法更改。

otSrpServerSetAnycastModeSequenceNumber

otError otSrpServerSetAnycastModeSequenceNumber(
  otInstance *aInstance,
  uint8_t aSequenceNumber
)

设置用于任播地址模式的序列号。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aSequenceNumber
要使用的序列号。
返回值
OT_ERROR_NONE
已成功设置地址模式。
OT_ERROR_INVALID_STATE
已启用 SRP 服务器,且序列号无法更改。

otSrpServerSetAutoEnableMode

void otSrpServerSetAutoEnableMode(
  otInstance *aInstance,
  bool aEnabled
)

启用/停用 SRP 服务器上的自动启用模式。

需要 OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE 功能。

启用此模式后,边界路由管理器将控制是否/何时启用或停用 SRP 服务器。如果/当边界路由已启动且使用初始前缀和路由配置(已确定 OMR 和链路前缀、在基础架构端发出的路由器通告消息中通告并在线程网络数据中发布)时,SRP 服务器会自动启用。当 BR 停止时(例如,如果基础架构网络接口发生故障或 BR 断开连接时),SRP 服务器会自动停用。

可通过将 aEnabled 设置为 falseotSrpServerSetAutoEnableMode() 调用来停用此模式,也可以通过调用 otSrpServerSetEnabled() 函数明确启用或停用 SRP 服务器。使用 otSrpServerSetAutoEnableMode(false) 停用自动启用模式不会更改 SRP 服务器的当前状态(例如,如果已启用,它会保持启用状态)。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aEnabled
用于启用/停用自动启用模式的布尔值。

otSrpServerSetDomain

otError otSrpServerSetDomain(
  otInstance *aInstance,
  const char *aDomain
)

在 SRP 服务器上设置网域。

如果 aDomain 不存在,则将附加该结尾句点。只应在启用 SRP 服务器之前调用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aDomain
要设置的域名。不得为 NULL。
返回值
OT_ERROR_NONE
已成功将网域设置为 aDomain
OT_ERROR_INVALID_STATE
SRP 服务器已启用,无法更改域名。
OT_ERROR_INVALID_ARGS
参数 aDomain 不是有效的 DNS 域名。
OT_ERROR_NO_BUFS
没有内存来存储“aDomain”的内容。

otSrpServerSetEnabled

void otSrpServerSetEnabled(
  otInstance *aInstance,
  bool aEnabled
)

启用/停用 SRP 服务器。

在边界路由器上,建议改用 otSrpServerSetAutoEnableMode()

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aEnabled
用于启用/停用 SRP 服务器的布尔值。

otSrpServerSetLeaseConfig

otError otSrpServerSetLeaseConfig(
  otInstance *aInstance,
  const otSrpServerLeaseConfig *aLeaseConfig
)

设置 SRP 服务器 LEASE 和 KEY-LEASE 配置。

当从客户端请求非零 LEASE 时间时,授予的值将限制在 [aMinLease、aMaxLease] 的范围内;而在 [aMinKeyLease, aMaxKeyLease] 的范围内授予非零 KEY-LEASE。如果 LEASE 或 KEY-LEASE 时间为零,则系统将授予零权限。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aLeaseConfig
指向 otSrpServerLeaseConfig 实例的指针。
返回值
OT_ERROR_NONE
成功设置 LEASE 和 KEY-LEASE 范围。
OT_ERROR_INVALID_ARGS
LEASE 或 KEY-LEASE 范围无效。

otSrpServerSetServiceUpdateHandler

void otSrpServerSetServiceUpdateHandler(
  otInstance *aInstance,
  otSrpServerServiceUpdateHandler aServiceHandler,
  void *aContext
)

设置 SRP 服务器上的 SRP 服务更新处理程序。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aServiceHandler
指向服务处理程序的指针。使用 NULL 移除处理程序。
[in] aContext
指向任意上下文信息的指针。如果未使用,可为 NULL。

otSrpServerSetTtlConfig

otError otSrpServerSetTtlConfig(
  otInstance *aInstance,
  const otSrpServerTtlConfig *aTtlConfig
)

设置 SRP 服务器 TTL 配置。

无论最小和最大 TTL 配置如何,授予的 TTL 始终不大于通过 otSrpServerSetLeaseConfig() 配置的最大租用间隔。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aTtlConfig
指向 otSrpServerTtlConfig 实例的指针。
返回值
OT_ERROR_NONE
已成功设置 TTL 配置。
OT_ERROR_INVALID_ARGS
TTL 配置无效。

资源

OpenThread API 参考文档源自 GitHub 上提供的源代码。如需了解详情,或者为我们的文档做贡献,请参阅资源