수신 전화 표시
통화 관리자 또는 MCM 드라이버는 네트워크에서 메시지를 신호로 전송하여 들어오는 호출에 대한 경고를 받습니다. 이러한 신호 메시지에서 호출 관리자 또는 MCM 드라이버는 들어오는 호출이 처리되는 SAP를 포함하여 호출에 대한 호출 매개 변수를 추출합니다.
다음 그림에서는 들어오는 호출을 나타내는 MCM 드라이버를 보여 있습니다.
다음 그림에서는 수신 전화를 나타내는 통화 관리자를 보여줍니다.
들어오는 호출 매개 변수가 호출 관리자 또는 MCM 드라이버에 허용되지 않는 경우 신호 프로토콜에서 이러한 협상을 허용하는 경우 원격 당사자와 이러한 매개 변수의 변경을 협상하려고 시도할 수 있습니다. 또는 들어오는 호출이 전달되는 클라이언트가 호출 관리자 또는 MCM 드라이버로부터 호출 표시를 받은 후 호출 매개 변수를 협상하려고 시도할 수 있습니다(호출 매개 변수를 변경하기 위한 클라이언트 시작 요청 참조). 호출 관리자 또는 MCM 드라이버가 원격 당사자와 통화에 허용되는 호출 매개 변수를 협상할 수 없는 경우 호출을 거부할 수 있습니다. 신호 프로토콜은 이러한 경우에 가능한 것을 결정합니다.
클라이언트에 들어오는 호출을 나타내기 전에 호출 관리자 또는 MCM 드라이버는 호출이 전달되는 SAP를 식별해야 합니다. SAP는 이전에 클라이언트에 의해 등록되어 있어야 합니다. 또한 호출 관리자 또는 MCM 드라이버는 VC 만들기를 시작하고 이 VC의 활성화를 시작해야 합니다.
그런 다음 호출 관리자 또는 MCM 드라이버는 들어오는 호출이 전달되는 SAP를 등록한 클라이언트에 대한 수신 호출을 나타냅니다. 통화 관리자는 NdisCmDispatchIncomingCall을 사용하여 들어오는 통화를 나타냅니다. MCM 드라이버는 NdisMCmDispatchIncomingCall을 사용하여 들어오는 호출을 나타냅니다.
Ndis(M)CmDispatchIncomingCall 호출에서 호출 관리자 또는 MCM 드라이버는 다음을 전달합니다.
들어오는 호출이 처리되는 SAP를 식별하는 NdisSapHandle 입니다.
들어오는 호출에 대한 가상 회로를 식별하는 NdisVcHandle 입니다.
호출에 대한 호출 매개 변수를 포함하는 형식 CO_CALL_PARAMETERS 구조체에 대한 포인터입니다.
Ndis(M)CmDispatchIncomingCall을 호출하면 NDIS가 클라이언트의 ProtocolClIncomingCall 함수를 호출합니다. 이 함수 내에서 클라이언트는 요청된 연결을 수락하거나 거부합니다. ProtocolClIncomingCall은 SAP, VC 및 호출 매개 변수의 유효성을 검사해야 합니다.
ProtocolClIncomingCall 은 동기적으로 완료되거나 NdisClIncomingCallComplete를 사용하여 NDIS_STATUS_PENDING 반환하고 비동기적으로 완료할 수 있습니다. NdisClIncomingCallComplete를 호출하면 NDIS에서 호출 관리자 또는 MCM 드라이버의 ProtocolCmIncomingCallComplete 함수를 호출합니다.
ProtocolClIncomingCall의 동기 완료에 의해 반환되거나 NdisClIncomingCallComplete에 제공된 NDIS_STATUS 코드는 클라이언트가 들어오는 호출을 수락하거나 거부했음을 나타냅니다. 또한 클라이언트는 버퍼링된 CO_CALL_PARAMETERS 구조에서 호출에 대한 호출 매개 변수를 반환합니다. 클라이언트가 호출 매개 변수를 허용할 수 없는 경우 신호 프로토콜에서 허용하는 경우 CALL_PARAMETERS_CHANGED 사용하여 CO_CALL_PARAMETERS 구조의 Flags 멤버를 설정하고 버퍼링된 CO_CALL_PARAMETERS 구조에서 수정된 호출 매개 변수를 제공하여 호출 매개 변수의 변경을 요청할 수 있습니다.
클라이언트가 수신 전화를 수락하는 경우 호출 관리자 또는 MCM 드라이버는 호출이 수락되었음을 호출 엔터티에 나타내는 신호 메시지를 보내야 합니다. 그렇지 않으면 호출 관리자 또는 MCM 드라이버는 통화가 거부되었음을 나타내는 신호 메시지를 보내야 합니다. 클라이언트가 호출 매개 변수 변경을 요청하는 경우 호출 관리자 또는 MCM 드라이버는 신호 메시지를 보내 호출 매개 변수의 변경을 요청합니다.
클라이언트가 호출을 수락하거나 원격 당사자가 클라이언트의 요청된 호출 매개 변수 변경을 수락한 경우 호출 관리자는 NdisCmDispatchCallConnected를 호출하고 MCM 드라이버는 NdisMCmDispatchCallConnected를 호출합니다. Ndis(M)CmDispatchCallConnected를 호출하면 NDIS가 클라이언트의 ProtocolClCallConnected 함수를 호출합니다.
클라이언트가 통화를 거부했고 호출 관리자 또는 MCM 드라이버가 들어오는 호출에 대한 VC를 이미 활성화한 경우 호출 관리자 또는 MCM 드라이버는 Ndis(M)CmDeactivateVc 를 호출하여 VC가 활성화된 경우 VC를 비활성화합니다. 호출 관리자 또는 MCM 드라이버는 MCM 드라이버의 경우 호출 관리자 또는 NdisMCmDeleteVc의 경우 NdisCoDeleteVc를 호출하여 VC 삭제를 시작할 수 있습니다.
클라이언트가 호출을 수락했지만 엔드투엔드 연결이 성공적으로 설정되지 않은 경우(예: 원격 당사자가 통화를 중단했기 때문에) 호출 관리자 또는 MCM 드라이버는 Ndis(M)CmDispatchCallConnected를 호출하지 않습니다. 대신 NDIS가 클라이언트의 ProtocolClIncomingCloseCall 함수를 호출하도록 하는 Ndis(M)CmDispatchIncomingCloseCall을 호출합니다. 그런 다음 클라이언트는 NdisCloseCall 을 호출하여 호출 해제를 완료해야 합니다. 그런 다음 호출 관리자 또는 MCM 드라이버는 Ndis(M)CmDeactivateVC 를 호출하여 들어오는 호출에 대해 만든 VC를 비활성화 합니다. 호출 관리자 또는 MCM 드라이버는 MCM 드라이버의 경우 호출 관리자 또는 NdisMCmDeleteVc의 경우 NdisCoDeleteVc를 호출하여 VC 삭제를 시작할 수 있습니다.