다음을 통해 공유


발신 전화 걸기

애플리케이션이 발신 호출을 시도하는 경우 먼저 줄을 열어야 합니다. TAPI lineOpen 함수를 호출하는 애플리케이션의 결과로 줄이 열립니다. 이전에 연 줄에 전화 통신 통화를 배치하기 위해 애플리케이션은 TAPI lineMakeCall 함수를 호출하고 특정 대상 주소에 포인터를 전달합니다. 기본 호출 설정 매개 변수 외에 아무것도 요청되면 애플리케이션은 LINECALLPARAMS 구조에 대한 포인터도 전달합니다. 애플리케이션에서 기본 호출 설정 매개 변수를 사용하는 경우 lineMakeCall 은 LINECALLPARAMS 구조에서 해당 매개 변수를 제공합니다. 이 구조의 멤버는 전화 통신 호출을 설정하는 방법을 지정합니다.

이러한 TAPI 함수 호출은 NDPROXY 드라이버가 먼저 CoNDIS WAN 미니포트 드라이버를 사용하여 VC(가상 연결)를 만든 다음, 나가는 호출을 하기 위해 NDIS 구조에서 TAPI 매개 변수를 캡슐화하도록 합니다. 미니포트 드라이버는 이러한 TAPI 매개 변수를 사용하여 나가는 호출을 설정합니다. 다음은 나가는 호출이 연결, 설정 및 수행되는 방법을 설명합니다.

  • NDPROXY는 NdisCoCreateVc 를 호출하여 미니포트 드라이버를 사용하여 VC 만들기를 시작합니다. NDPROXY가 NdisCoCreateVc를 호출한 후 NDIS는 동기 작업으로 미니포트 드라이버에 통합된 호출 관리자의 ProtocolCoCreateVc 함수를 호출합니다. NDIS는 VC를 나타내는 핸들을 ProtocolCoCreateVc 에 전달합니다. NdisCoCreateVc 호출에 성공하면 NDIS가 VC 핸들을 채우고 반환합니다. ProtocolCoCreateVc 는 MCM(미니포트 호출 관리자) 드라이버가 나중에 활성화될 VC에서 후속 작업을 수행하는 데 필요한 동적 리소스 및 구조의 필요한 할당을 수행합니다. 이러한 리소스에는 메모리 버퍼, 데이터 구조, 이벤트 및 기타 유사한 리소스가 포함되지만 이에 국한되지는 않습니다.

  • NDPROXY는 CO_AF_TAPI_MAKE_CALL_PARAMETERS 구조에서 나가는 호출에 대한 TAPI 매개 변수를 지정합니다. NDPROXY는 TAPI lineMakeCall 함수에 전달된 다음 정보로 이 구조체의 멤버를 채웁니다.

    • DestAddress 멤버의 대상 주소
    • ulLineID 멤버의 오픈 라인 식별자
    • LineCallParams 멤버의 LINECALLPARAMS 구조체
  • NDPROXY는 CO_SPECIFIC_PARAMETERS 구조체의 Parameters 멤버에 CO_AF_TAPI_MAKE_CALL_PARAMETERS 구조체를 오버레이하고 CO_SPECIFIC_PARAMETERSLength 멤버를 CO_AF_TAPI_MAKE_CALL_PARAMETERS 크기로 설정합니다.

  • NDPROXY는 CO_SPECIFIC_PARAMETERS 구조를 CO_MEDIA_PARAMETERS 구조체MediaSpecific 멤버로 설정합니다.

  • NDPROXY는 CO_MEDIA_PARAMETERS 구조체에 대한 포인터를 CO_CALL_PARAMETERS 구조체MediaParameters 멤버에 설정합니다.

  • NDPROXY가 TAPI 매개 변수를 캡슐화하면 NDPROXY는 NdisClMakeCall 함수를 호출하여 발신 호출을 시작합니다. 이 함수 호출에서 NDPROXY는 채워진 CO_CALL_PARAMETERS 구조체에 대한 포인터를 전달합니다. NDIS는 CoNDIS WAN 미니포트 드라이버의 호출 관리자의 ProtocolCmMakeCall 함수를 차례로 호출합니다. 미니포트 드라이버는 CO_CALL_PARAMETERS 포함된 CO_AF_TAPI_MAKE_CALL_PARAMETERS 구조만 검사해야 합니다. 이 경우 다른 호출 매개 변수가 의미가 없습니다. 미니포트 드라이버가 이후에 나가는 호출에 대해 VC를 활성화하는 경우 미니포트 드라이버는 NdisMCmActivateVc 함수를 호출하고 채워진 CO_CALL_PARAMETERS 포인터를 전달합니다.

  • 미니포트 드라이버가 VC에 대한 전화 통신 호출 매개 변수를 설정하고 해당 호출 매개 변수에 대한 NIC를 설정하기 위해 네트워크와 협상한 후 미니포트 드라이버는 NdisMCmMakeCallComplete 함수를 호출하여 VC에서 데이터 전송을 수행할 준비가 되었음을 나타냅니다. 이 호출에서 미니포트 드라이버는 VC에 핸들을 전달하고 전화 통신 호출 매개 변수를 수정해야 합니다.

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

  • 미니포트 드라이버가 전화 통신 호출 매개 변수를 수정한 경우 CALL_PARAMETERS_CHANGED 사용하여 CO_CALL_PARAMETERS 구조에서 Flags 멤버를 설정해야 합니다. 미니포트 드라이버에서 수행된 NdisMCmMakeCallComplete 호출의 결과로 NDIS는 NDPROXY의 ProtocolClMakeCallComplete 함수를 호출하여 NdisClMakeCall로 시작된 비동기 작업을 완료합니다.

  • 미니포트 드라이버가 발신 호출을 성공적으로 완료한 후 NDPROXY는 TAPI 애플리케이션에 호출이 연결되었음을 알릴 수 있습니다. 그런 다음 이 TAPI 애플리케이션은 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_MAKE_CALL_PARAMETERS 구조를 전달합니다. NDIS는 NDISWAN의 ProtocolClIncomingCall 함수를 호출하며, 이 함수 내에서 NDISWAN은 요청된 연결을 수락하거나 거부합니다. NDISWAN이 전달된 호출 매개 변수를 변경하는 경우 CALL_PARAMETERS_CHANGED CO_CALL_PARAMETERS 구조에서 Flags 멤버를 설정해야 합니다.

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

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