Расширенные функции строки
Расширенные линейные службы (или службы для конкретных устройств) включают в API все расширения, определенные поставщиком услуг. API определяет механизм, который позволяет поставщикам услуг расширять TAPI с помощью расширений для конкретных устройств. API определяет только механизм расширения и тем самым предоставляет доступ к расширениям для конкретных устройств, но API не определяет их поведение. Поведение полностью определяется поставщиком услуг.
TAPI состоит из определений скалярных и битовых констант, структур данных, функций и сообщений. Определены процедуры, позволяющие поставщику расширить большинство из них следующим образом.
Для расширяемых скалярных констант данных поставщик услуг может определить новые значения в указанном диапазоне. Так как большинство констант данных являются значениями DWORD, обычно диапазон 0x00000000 до 0x7FFFFFFF зарезервирован для общих будущих расширений, а 0x80000000 через 0xFFFFFFFF доступны для расширений конкретного поставщика. Предполагается, что поставщик определяет значения, которые являются естественными расширениями типов данных, определенных API.
Для расширяемых констант данных битового флага поставщик услуг может определить новые значения для указанных битов. Так как большинство констант битового флага являются DWORD, обычно определенное количество нижних битов зарезервировано для общих расширений, а оставшиеся верхние биты доступны для расширений конкретного поставщика. Общие битовые флаги назначаются с нуля; Расширения для конкретных поставщиков должны назначаться с бита 31 вниз. Это обеспечивает максимальную гибкость при назначении битовых позиций общим расширениям по сравнению с расширениями конкретных поставщиков. Ожидается, что поставщик определит новые значения, которые являются естественными расширениями битовых флагов, определенных API.
Расширяемые структуры данных имеют поле с изменяющимся размером, которое зарезервировано для конкретного устройства. При разных размерах поставщик услуг определяет объем информации и интерпретацию. Поставщик, который определяет поле для конкретного устройства, должен сделать эти естественные расширения исходной структуры данных, определенной API.
Две функции, lineDevSpecific и lineDevSpecificFeature, а также два связанных сообщения, LINE_DEVSPECIFIC и LINE_DEVSPECIFICFEATURE, предоставляют механизм расширения для конкретного поставщика. Функция lineDevSpecific и связанное LINE_DEVSPECIFIC сообщение позволяют приложению получать доступ к функциям строки, адреса или вызова конкретного устройства, которые недоступны в службах базовой или дополнительной телефонии. Профиль параметров функции lineDevSpecific является универсальным, так как API мало интерпретирует параметры. Интерпретация параметров определяется поставщиком услуг и должна пониматься приложением, которое их использует. Параметры просто передаются через TAPI из приложения поставщику услуг. Приложение, использующее расширения для конкретных устройств, обычно не будет работать с другими поставщиками услуг; однако приложения, написанные в службах базовой и дополнительной телефонии, будут работать с поставщиком расширенных услуг.
Для удобства также предоставляется более специализированная escape-функция. Он похож на lineDevSpecific, но содержит интерпретацию некоторых параметров. Это более специализированная функция lineDevSpecificFeature, escape-функция для конкретного устройства, позволяющая отправлять функции коммутатора в коммутатор. Сообщение LINE_DEVSPECIFICFEATURE — это сообщение конкретного устройства, отправленное приложению в качестве указания функций, отправляемых в коммутатор. Эта функция и связанное с ней сообщение позволяют приложению эмулировать нажатия кнопок на телефоне функции линии. Так как функции телефонов и значения их кнопок зависят от поставщика, вызов функции с помощью lineDevSpecificFeature также зависит от поставщика.
Как упоминалось ранее, не существует центрального реестра для идентификаторов изготовителей. Вместо этого предоставляется генератор уникальных идентификаторов (EXTIDGEN).