수신 전화 수락

애플리케이션이 들어오는 호출을 수락하려면 먼저 줄을 열어야 합니다. TAPI lineOpen 함수를 호출하는 애플리케이션의 결과로 줄이 열립니다. 이 TAPI 함수 호출은 기본 드라이버가 들어오는 호출을 받을 준비를 하기 위해 NDIS 구조에 TAPI 매개 변수를 캡슐화하도록 합니다. CoNDIS WAN 미니포트 드라이버가 수신 전화를 받은 후 미니포트 드라이버는 먼저 NDPROXY 드라이버와 함께 VC(가상 연결)를 만든 다음, NDPROXY에 수신 호출을 알려야 합니다. NDPROXY는 차례로 TAPI를 통해 애플리케이션에 알립니다. 다음 목록에서는 들어오는 호출이 설정, 연결 및 수행되는 방법을 설명합니다.

  • NDPROXY는 CO_AF_TAPI_SAP 구조에서 들어오는 연결에 대한 TAPI 매개 변수를 지정합니다. NDPROXY는 TAPI lineOpen 함수에 전달된 다음 정보로 이 구조체의 멤버를 채웁니다.

    • ulLineID 멤버의 열린 줄 식별자
    • ulAddressID 멤버의 들어오는 연결 주소
    • ulMediaModes 멤버에서 들어오는 연결 정보 스트림의 미디어 모드
  • NDPROXY는 CO_SAP 구조체의 Sap 멤버에 CO_AF_TAPI_SAP 구조를 오버레이하고 CO_SAP SapLength 멤버를 CO_AF_TAPI_SAP 크기로 설정합니다. NDPROXY는 CO_SAP SapType 멤버도 AF_TAPI_SAP_TYPE 설정해야 합니다.

  • NDPROXY가 TAPI 매개 변수를 캡슐화하면 NDPROXY는 NdisClRegisterSap 함수를 호출하여 들어오는 호출을 받을 준비를 합니다. 이 함수 호출에서 NDPROXY는 NDPROXY가 수신 호출을 받을 수 있는 SAP(서비스 액세스 지점)를 지정하는 채워진 CO_SAP 구조에 대한 포인터를 전달합니다. NDIS는 CO_SAP 구조를 CoNDIS WAN MCM(미니포트 호출 관리자) 드라이버의 ProtocolCmRegisterSap 함수에 전달합니다. ProtocolCmRegisterSap 는 필요에 따라 네트워크 제어 디바이스 또는 기타 미디어 관련 에이전트와 통신하여 NDPROXY에 대한 네트워크에 SAP를 등록합니다. 미니포트 드라이버가 SAP를 등록한 후 해당 SAP로 전달되는 수신 호출 제안을 수락할 수 있습니다.

  • CoNDIS WAN 미니포트 드라이버는 네트워크에서 메시지를 신호로 전송하여 들어오는 호출에 대한 경고를 받습니다. 이러한 신호 메시지에서 미니포트 드라이버는 들어오는 호출이 처리되는 SAP를 포함하여 호출에 대한 호출 매개 변수를 추출합니다.

  • NDPROXY에 들어오는 호출을 나타내기 전에 미니포트 드라이버는 NdisMCmCreateVc 함수를 호출하여 NDPROXY를 사용하여 VC 만들기를 시작합니다. NDPROXY는 VC에 필요한 리소스를 할당하고 초기화하고 VC에 핸들을 저장합니다.

  • CoNDIS WAN 미니포트 드라이버는 CO_AF_TAPI_INCOMING_CALL_PARAMETERS 구조에서 들어오는 호출에 대한 TAPI 매개 변수를 설정합니다. 미니포트 드라이버는 이 구조체의 멤버를 신호 메시지에서 추출된 다음 정보로 채웁니다.

    • ulLineID 멤버의 줄 식별자
    • ulAddressID 멤버에서 들어오는 호출의 주소
    • ulFlags 멤버의 CO_TAPI_FLAG_INCOMING_CALL 비트입니다. 다른 모든 ulFlag 비트는 예약되어 있으며 0으로 설정해야 합니다.
    • LineCallInfo 멤버의 LINECALLPARAMS 구조체입니다. LINECALLPARAMS의 멤버는 들어오는 호출에 대한 TAPI 호출 매개 변수를 지정합니다.
  • 미니포트 드라이버는 CO_SPECIFIC_PARAMETERS 구조체의 Parameters 멤버에 CO_AF_TAPI_INCOMING_CALL_PARAMETERS 오버레이하고 CO_SPECIFIC_PARAMETERSLength 멤버를 CO_AF_TAPI_INCOMING_CALL_PARAMETERS 크기로 설정합니다.

  • 미니포트 드라이버는 CO_SPECIFIC_PARAMETERS 구조를 CO_MEDIA_PARAMETERS 구조체의 MediaSpecific멤버로 설정합니다 .

  • 미니포트 드라이버는 CO_MEDIA_PARAMETERS 구조체에 대한 포인터를 CO_CALL_PARAMETERS 구조체MediaParameters 멤버로 설정합니다.

  • 또한 미니포트 드라이버는 CO_CALL_PARAMETERS 구조의 CallMgrParameters 멤버를 설정하여 대역폭과 같은 패킷 전송의 QoS(서비스 품질)를 지정해야 합니다. 이 CallMgrParameters 멤버를 설정하기 위해 미니포트 드라이버는 CO_CALL_MANAGER_PARAMETERS 구조체의 멤버를 채우고 이 구조를 CallMgrParameters로 가리킵니다. 예를 들어 VC에 대한 전송 및 수신 속도를 초당 바이트 단위로 식별하려면 미니포트 드라이버는 CO_CALL_MANAGER_PARAMETERS 전송수신 멤버의 PeakBandwidth 멤버를 설정해야 합니다. 전송수신 멤버는 FLOWSPEC 구조입니다. FLOWSPEC 구조에 대한 자세한 내용은 Microsoft Windows SDK 참조하세요.

  • 미니포트 드라이버는 TAPI 매개 변수를 캡슐화하고 CO_CALL_MANAGER_PARAMETERS CallMgrParameters 멤버를 채운 후 NdisMCmDispatchIncomingCall 함수를 호출하여 NDPROXY에 들어오는 호출을 나타냅니다. 이 호출에서 미니포트 드라이버는 다음을 전달합니다.

    • 들어오는 호출이 처리되는 SAP를 식별하는 핸들입니다.
    • 들어오는 호출에 대한 VC를 식별하는 핸들
    • 채워진 CO_CALL_PARAMETERS 구조체에 대한 포인터
  • NDPROXY는 NDPROXY가 NdisMCmDispatchIncomingCall 을 비동기적으로 완료할 수 있도록 미니포트 드라이버에 NDIS_STATUS_PENDING 반환합니다.

  • TAPI 애플리케이션이 lineAnswer 함수를 사용하여 들어오는 호출에 응답한 후 NDPROXY는 NdisClIncomingCallComplete 함수를 호출합니다. NDIS는 미니포트 드라이버의 ProtocolCmIncomingCallComplete 함수를 차례로 호출합니다. NDPROXY가 NDIS_STATUS_SUCCESS 코드를 반환하는 경우 호출 매개 변수의 동의를 나타냅니다. NDPROXY는 호출 매개 변수가 허용되지 않는 것으로 확인되면 CO_CALL_PARAMETERS 구조의 Flags 멤버를 CALL_PARAMETERS_CHANGED 설정하고 수정된 호출 매개 변수를 제공하여 호출 매개 변수의 변경을 요청할 수 있습니다. NDPROXY가 수신 전화를 수락하는 경우 미니포트 드라이버는 호출이 수락되었음을 호출 엔터티에 나타내는 신호 메시지를 보내야 합니다. 그렇지 않으면 미니포트 드라이버는 호출이 거부되었음을 나타내는 신호 메시지를 보내야 합니다. NDPROXY가 호출 매개 변수 변경을 요청하는 경우 미니포트 드라이버는 신호 메시지를 보내 호출 매개 변수의 변경을 요청합니다.

  • 미니포트 드라이버는 NDPROXY로 만든 미니포트 드라이버가 만든 VC를 활성화하고 NdisMCmActivateVc 함수를 호출하여 미니포트 드라이버가 VC에서 패킷을 전송할 준비가 되었음을 NDPROXY에 알려야 합니다.

  • NDPROXY가 호출을 거부하는 경우 미니포트 드라이버는 NdisMCmDeactivateVc 함수를 호출하여 미니포트 드라이버가 들어오는 호출에 대해 만든 VC를 비활성화합니다. VC가 비활성화된 후 미니포트 드라이버는 NdisMCmDeleteVc 함수를 호출하여 VC를 삭제합니다.

  • NDPROXY가 들어오는 호출을 수락했는지 여부와 엔드투엔드 연결이 성공적으로 설정되었는지 여부에 따라 미니포트 드라이버는 NdisMCmDispatchCallConnected 또는 NdisMCmDispatchIncomingCloseCall 함수를 호출합니다. 원격 호출 엔터티가 호출을 중단하면 엔드 투 엔드 연결이 성공적으로 설정되지 않았음을 나타내는 신호 메시지를 보냅니다. NdisMCmDispatchCallConnected는 들어오는 호출에 대해 미니포트 드라이버가 만들고 활성화한 VC에서 데이터 전송을 시작할 수 있음을 NDPROXY에 알릴 수 있습니다. NdisMCmDispatchIncomingCloseCall 은 NDPROXY에 수신 전화를 중단하도록 알릴 수 있습니다.

  • NDPROXY가 수신 호출을 중단하도록 지시된 경우 NdisCloseCall 함수를 호출하여 VC에서 데이터를 보내거나 받을 것으로 기대하지 않는다는 것을 인정합니다. NDIS는 미니포트 드라이버의 ProtocolCmCloseCall 함수를 차례로 호출합니다. 그런 다음 미니포트 드라이버는 NdisMCmDeactivateVc 함수를 호출하여 VC를 비활성화합니다. VC가 비활성화된 후 미니포트 드라이버는 NdisMCmDeleteVc 함수를 호출하여 VC를 삭제합니다.

  • TAPI 애플리케이션이 들어오는 호출을 수락하고 NDPROXY가 호출이 연결되어 있음을 애플리케이션에 알린 후 애플리케이션은 TAPI lineGetID 함수를 호출하여 NDPROXY에 적절한 CoNDIS 클라이언트를 찾도록 알릴 수 있습니다. 이 lineGetID 호출에서 TAPI 애플리케이션은 애플리케이션에 핸들이 필요한 특정 TAPI 디바이스 클래스에 대한 문자열을 제공합니다. NDPROXY는 이 문자열을 사용하여 특정 TAPI 디바이스 클래스에 대해 이전에 SAP를 등록한 CoNDIS 클라이언트를 찾습니다. CoNDIS 클라이언트가 NDISWAN인 경우 문자열은 NDIS입니다. NDPROXY가 TAPI 애플리케이션에서 전달한 문자열과 일치하는 문자열이 있는 SAP를 찾는 경우 NDPROXY는 NdisMCmCreateVc 를 호출하여 들어오는 호출의 알림을 디스패치할 수 있는 NDISWAN과의 연결 엔드포인트를 설정합니다. NDIS는 차례로 NDISWAN의 ProtocolCoCreateVc 함수를 호출하고 VC를 나타내는 핸들을 전달합니다.

  • NDPROXY가 NDISWAN을 사용하여 연결 엔드포인트를 설정한 후 NdisCmDispatchIncomingCall 함수를 호출하여 NDISWAN에 들어오는 호출에 대해 알립니다. 이 호출에서 NDPROXY는 들어오는 호출 매개 변수를 포함하는 캡슐화된 CO_AF_TAPI_INCOMING_CALL_PARAMETERS 구조를 전달합니다. NDIS는 차례로 NDISWAN의 ProtocolClIncomingCall 함수를 호출하며, 이 함수 내에서 NDISWAN은 요청된 연결을 수락하거나 거부합니다.

  • 연결을 허용할지 여부를 결정한 후 호출 매개 변수를 변경한 후 NDISWAN은 NdisClIncomingCallComplete 함수를 호출합니다. NDIS는 미니포트 드라이버의 ProtocolCmIncomingCallComplete 함수를 차례로 호출합니다. NDISWAN이 수신 전화를 수락했는지 여부와 미니포트 드라이버가 NDISWAN의 제안된 호출 매개 변수 변경 내용을 수락하거나 거부하는지에 따라 미니포트 드라이버는 NdisCmDispatchCallConnected 또는 NdisCmDispatchIncomingCloseCall 함수를 호출합니다. NdisCmDispatchCallConnected는 들어오는 호출을 위해 만든 미니포트 드라이버가 VC에서 데이터 전송을 시작할 수 있음을 NDISWAN에 알린 것입니다. NdisCmDispatchIncomingCloseCall 은 NDISWAN 및 NDPROXY에 수신 전화를 중단하도록 알릴 수 있습니다.

  • NDISWAN이 들어오는 호출을 수락하면 NDPROXY는 NdisCoGetTapiCallId 함수를 호출하여 VC에 대한 NDISWAN의 컨텍스트를 식별하는 문자열을 검색합니다. NDPROXY는 이 문자열을 TAPI 애플리케이션에 다시 전달합니다. TAPI 애플리케이션은 이 VC 컨텍스트 문자열을 사용하여 lineGetID에 대한 호출을 완료합니다.