电话服务服务提供商的生命周期
本主题提供有关 TSP 操作的高级回顾。
会话是特定配置保持有效并执行电话操作的时间。服务提供商可以支持从首次加载到最终释放之间的许多会话。 对于每个会话,TAPI 会协商接口的版本、启动会话、执行操作,并最终关闭会话。 服务提供商不得将一个会话中的信息保留到另一个会话。
知道接口版本后,TAPI 会调用 TSPI_providerInit 函数来设置所有操作参数。 当调用 TSPI_providerInit 函数时,确保服务提供商在注册表中的所有配置信息都是稳定的。 大多数服务提供商在当时读取所有配置信息。
初始化服务提供程序后,正常操作可以按任意顺序进行。
TAPI 根据每个设备协商特定于设备的信息。 TAPI 和服务提供商在打开设备时提交到某个版本。
服务提供商可以接收选择和取消扩展版本的请求。 选择扩展版本时,设备严格按照特定于设备的扩展版本运行。
在设备打开之前和之后,可能会多次协商特定于设备的扩展版本。 TAPI 传递版本范围,服务提供商选择并返回此范围内的值。 通常,服务提供商禁用了特定于设备的扩展。
这会将 TAPI 和服务提供商提交到该扩展版本级别运行,直到取消选择。 在特定于设备的扩展生效期间,尝试协商扩展版本级别应仅允许当前有效的版本级别。 取消特定于设备的扩展后,可以协商并选择其他版本。
下图显示了 打开/关闭 对中的电话操作。 其中一些操作是同步的,其他操作是异步的。 如果操作以异步方式完成,则可以在第一个报告完成之前请求另一个操作。 因此,操作可以以任何方式重叠。 服务提供商必须最终报告请求的任何异步操作的完成情况。 关闭电话会强制未完成的异步操作完成 (可能带有“失败”指示) 。
线路设备的生命周期类似于手机的生命周期,只是线路有自己的协商、初始化、打开和关闭过程。 打开行上的操作由其自己的 打开/关闭 对括起来。 此对又在与手机打开/关闭相同的初始化/关闭对之间括起来。
调用的生命周期严格用括号括在包含它们的行的 打开/关闭 之间。 调用的生存期可以通过多种方式开始:
- 通过 lineMakeCall、 lineSetupTransfer 或 lineSetupConference 等函数从 TAPI 请求。
- 作为新的传入呼叫、用户发起的附加电话手机上的呼叫,或作为其他操作(例如暂停现有呼叫)的副作用生成的呼叫,自发地源自服务提供商。
同一行中不同调用的生存期可以以任何方式相互重叠。 所有调用在调用 TSPI 函数 TSPI_lineCloseCall 时结束其生存期。 下图显示了多个调用的生命周期。
调用可以源自 TAPI,如 MakeCall/CloseCall 对所示。 调用也可以源自服务提供商。 服务提供商使用 LINE_NEWCALL 消息向 TAPI 提供的回调过程报出此消息。 在这种情况下,TAPI 返回呼叫的标识符,该标识符包含在后续回调中,报告调用中发生的事件。 对于生存期源自 TAPI 的调用,此标识符包含在创建调用的 TSPI 操作中。
启动调用生存期的所有操作都会导致 TAPI 和服务提供商为新调用交换标识符。 对于 TAPI 发起的调用,TAPI 会传递其标识符,并接收服务提供商的标识符作为返回参数。 如果调用源自服务提供商,则服务提供商将其标识符传递给 TAPI,并接收 TAPI 标识符作为返回参数。
下图提供了服务提供商安装、配置和删除的高级视图:跨多个会话的生命周期序列。 可以使用以下时间线显示这些操作的典型生命周期。
显示了跨多个会话的典型安装和删除生命周期。 对安装和删除过程的调用是严格配对的,不会重叠。 在此对中,可能会多次调用 Config 过程。 一个通常由服务提供商完成,作为 安装 过程的内部副作用,以创建线路和电话条目。 在其他时间可以调用 Config 过程来更改现有设置。 必须先完成 安装 过程,然后才能允许任何其他 TSPI 函数。 在理想情况下,所有会话严格嵌套在 安装/删除 过程对中。
函数TSPI_providerInstall、TSPI_providerConfig和TSPI_providerRemove与服务提供商本身交互,而不是与任何特定设备交互。 它们会影响在多个会话中幸存下来的静态配置信息,并且必须存在才能继续执行任何其他操作。 因此,所有其他操作都嵌套在 TSPI_providerInstall 的调用与其匹配 TSPI_providerRemove完成之间。 这两个操作通常相距甚远,最有可能发生在服务提供商的不同负载或计算机的不同启动中。 在外部调用 Config 函数是可选的,因为除了自己的配置行为外,还需要安装过程。 在外部调用它的常见原因是修改现有配置。
完成 TSPI_providerRemove 操作的概念中蕴含着微妙之处。 允许用户运行随电话服务一起提供的电话控制面板实用工具来更改服务提供商配置,即使电话操作 (会话) 正在进行时也是如此。 因此, TSPI_providerConfig 和 TSPI_providerRemove 规范都允许在未完成的会话时调用。 但是,对配置的任何更改都需要延迟,直到关闭并重启电话操作。 因此,严格地说,任何 TSPI_providerConfig 或 TSPI_providerRemove 操作的完成都发生在任何会话之外。 操作的嵌套如图所示,尽管过程调用可能以略有不同的顺序显示。 允许服务提供商在操作正在进行时仅禁止配置或删除,不过应通过对话框通知用户。 首选更便于用户使用的实现,该实现至少允许一部分操作。
这些 “安装”、“ 配置”和 “删除” 操作都有向任何正在运行的电话应用程序发出信号的副作用,最终导致它们关闭对电话服务的使用。 这一起结束服务提供商的所有未完成会话。 这表示服务提供商在新会话开始时必须读取新的注册表配置。 操作正在进行时由于配置或删除而挂起的任何更改随后生效。