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