Управление версиями TSPI
Со временем могут быть созданы различные версии TAPI, приложений и поставщиков услуг. Эти новые версии могут создавать новые определения, например для новых функций, новых членов в структурах данных и новых битовых полей. Поэтому номера версий необходимы, чтобы указать, как интерпретировать различные структуры данных.
Чтобы обеспечить оптимальное взаимодействие различных версий приложений, версий самого TAPI и версий поставщиков услуг от разных поставщиков, Телефония Майкрософт предоставляет простой механизм согласования версий для приложений. Существует две разные версии, которые должны быть согласованы TAPI и поставщиком услуг телефонии для каждого устройства линии. Во-первых, номер версии для ИНТЕРФЕЙСА базовой и дополнительной телефонии, который называется версией интерфейса TSPI. Другая — для расширений, зависящих от поставщика, если таковые есть, и называется версией расширения. Формат структур данных и типов данных, используемых базовыми и дополнительными функциями TSPI, определяется версией TSPI, а версия расширения определяет формат структур данных, определенный расширениями поставщика.
Эти два типа согласования версий обрабатываются двумя разными процедурами: TSPI_lineNegotiateTSPIVersion используется для согласования версии интерфейса TSPI, а TSPI_lineNegotiateExtVersion используется для согласования версии расширения. Согласование версий расширений можно пропустить, если расширения не нужны. Если эти диапазоны, входные во время согласования, перекрываются, поставщик услуг должен возвращать значение в перекрывающейся части диапазона в результате согласования. Обычно это должно быть максимально возможное значение. Если диапазоны не перекрываются, обе стороны несовместимы, и функция возвращает ошибку.
Результаты согласования просто указывают на то, что поставщик услуг готов работать с определенным номером версии, но не обязывает поставщика услуг делать это. Например, TAPI может пересмотреть, чтобы определить идеальную версию после согласования возможной версии. Версия интерфейса TSPI фиксируется только при открытии строки с помощью TSPI_lineOpen и сохраняется до закрытия устройства. Версия расширения фиксируется при вызове функции TSPI_lineSelectExtVersion и сохраняется, пока выбор не будет отменен путем выбора нулевой версии расширения.
Выбор версии расширения может происходить много раз, в том числе во время действия версии расширения. Так как поставщик услуг фиксируется в версии расширения, диапазон поддерживаемых версий сужается до именно этой версии расширения. Например, рассмотрим поставщика услуг, который обычно совместим с расширениями версий 1.0–5.5. Если версия 3.0 действует, пока вызывающий объект пытается согласовать версию в диапазоне от 1.0 до 5.5, согласование возвращает значение 3.0.
Так как TAPI согласовывает версию, вы можете обновить поставщика услуг до новых версий интерфейса, не требуя обновления TAPI. Аналогичным образом можно обновить TAPI, но по-прежнему использовать старый поставщик услуг.