전화 걸기
다음 그림에서는 호출 관리자를 통해 나가는 호출을 하는 클라이언트를 보여줍니다.
다음 그림은 MCM 드라이버를 통해 나가는 호출을 하는 클라이언트를 보여줍니다.
나가는 호출을 하기 전에 연결 지향 클라이언트는 다음을 수행해야 합니다.
CO_CALL_PARAMETERS 형식의 구조에서 호출 매개 변수를 초기화합니다. 호출 관리자 또는 MCM 드라이버는 일반적으로 클라이언트가 지정한 호출 매개 변수를 사용하여 호출을 설정하고 미니포트 드라이버에서 사용할 미디어 매개 변수를 파생합니다.
NdisCoCreateVc를 사용하여 VC 만들기를 시작합니다.
NdisCoCreateVc가 성공적으로 반환되면 클라이언트는 NdisClMakeCall을 호출하여 호출을 시작합니다(이 섹션의 두 그림 참조).
NdisClMakeCall 호출에서 클라이언트는 이전에 초기화된 CO_CALL_PARAMETERS 구조체에 대한 포인터를 전달합니다. 또한 클라이언트는 클라이언트가 호출에 대한 데이터를 전송(수신)할 VC를 식별하는 NdisVcHandle ( NdisCoCreateVc에서 반환됨)을 전달합니다. 클라이언트가 다중 포인트 호출(둘 이상의 원격 당사자에 대한 호출)을 만드는 경우 클라이언트가 다중 포인트 VC에서 초기 파티의 파티별 상태를 유지 관리하는 클라이언트 할당 상주 컨텍스트 영역에 핸들을 지정하는 ProtocolPartyContext 도 전달합니다.
NdisClMakeCall을 호출하면 NDIS가 이 요청을 호출 관리자 또는 MCM 드라이버의 ProtocolCmMakeCall 함수로 전달합니다. 이 함수는 클라이언트가 지정된 NdisVcHandle 을 공유합니다. ProtocolCmMakeCall은 클라이언트에서 설정한 입력 호출 매개 변수의 유효성을 검사해야 합니다.
ProtocolCmMakeCall 은 네트워크 제어 디바이스와 통신(신호 메시지 교환)하여 연결을 만듭니다. 호출 관리자는 NdisCoSendNetBufferLists 를 호출하여 이러한 교환을 시작합니다( CoNDIS 드라이버에서 NET_BUFFER 구조 보내기 참조). MCM 드라이버는 NdisCoSendNetBufferLists를 호출하지 않습니다. 대신 네트워크를 통해 직접 데이터를 전송합니다.
호출 관리자 또는 MCM 드라이버는 관련 네트워크 구성 요소와 협상하는 동안 클라이언트에서 제공하는 호출 매개 변수를 수정할 수 있으며, 클라이언트가 원래 NdisClMakeCall에 제공한 것과 다른 트래픽 매개 변수를 반환할 수 있습니다( 들어오는 호출 매개 변수 변경 요청 참조).
ProtocolCmMakeCall에 전달된 명시적 NdisPartyHandle은 클라이언트에서 만든 VC가 다중 포인트 호출에 사용됨을 나타냅니다. 호출 관리자 또는 MCM 드라이버는 파티별 상태 정보를 유지하고 다중 포인트 호출을 제어하는 데 필요한 모든 리소스를 할당하고 초기화해야 합니다.
통화 관리자가 해당 매체에서 요구하는 대로 네트워킹 하드웨어와 필요한 모든 통신을 수행한 후 NdisCmActivateVc 를 호출하여 통화 데이터를 보내고 받을 VC의 활성화 를 시작해야 합니다. MCM 드라이버는 NdisMCmActivateVc를 호출해야 합니다.
기본 미니포트 드라이버가 VC에서 데이터 전송을 수행할 준비가 되면(즉, VC가 활성화된 후) 호출 관리자가 NdisCmMakeCallComplete를 호출하고 MCM 드라이버가 NdisMCmMakeCallComplete를 호출합니다. 이 시점에서 호출 관리자 또는 MCM 드라이버는 VC에 대한 호출 매개 변수를 설정하기 위해 네트워크와 협상해야 하며 기본 미니포트 드라이버는 VC의 활성화를 완료해야 합니다.
Ndis(M)CmMakeCallComplete 호출에서 호출 관리자 또는 MCM 드라이버는 VC에 대한 호출 매개 변수를 CO_CALL_PARAMETERS 형식 구조체에 대한 포인터로 전달합니다. 호출 관리자가 원래 클라이언트에서 지정한 대로 호출 매개 변수를 수정한 경우 CO_CALL_PARAMETERS 구조에서 CALL_PARAMETERS_CHANGED 플래그를 설정하여 클라이언트에 알릴 수 있습니다.
Ndis(M)CmMakeCallComplete를 호출하면 NDIS에서 발신 호출을 시작한 클라이언트의 ProtocolClMakeCallComplete 함수를 호출합니다. ProtocolClMakeCallComplete 호출은 호출 관리자가 NdisClMakeCall을 사용하여 가상 연결을 설정하기 위한 클라이언트의 요청 처리를 완료했음을 나타냅니다.
나가는 호출을 설정하려는 클라이언트의 시도가 성공한 경우 ProtocolClMakeCallComplete는 CALL_PARAMETERS_CHANGED 플래그를 검사 클라이언트에서 원래 지정한 호출 매개 변수가 수정되었는지 여부를 확인해야 합니다. 호출 매개 변수가 변경되었음을 나타내는 플래그가 설정된 경우 ProtocolClMakeCallComplete 는 반환된 호출 매개 변수를 검사하여 이 연결에 허용되는지 여부를 확인해야 합니다.
호출 매개 변수가 허용되는 경우 ProtocolClMakeCallComplete 는 단순히 컨트롤을 반환합니다. 호출 매개 변수가 허용되지 않고 신호 프로토콜이 이 시점에서 재협상을 허용하는 경우 클라이언트는 NdisClModifyCallQoS 를 호출하여 호출 매개 변수 변경을 요청할 수 있습니다( 클라이언트에서 시작한 통화 닫기 요청 참조). 신호 프로토콜이 허용되지 않는 호출 매개 변수의 재협상을 허용하지 않는 경우 ProtocolClMakeCallComplete 는 NdisCloseCall을 사용하여 호출을 중단해야 합니다(Client-Initiated 통화 닫기 요청 참조).