다음을 통해 공유


전화 걸기

다음 그림에서는 호출 관리자를 통해 나가는 호출을 하는 클라이언트를 보여줍니다.

호출 관리자를 통해 나가는 호출을 하는 클라이언트를 보여 주는 다이어그램입니다.

다음 그림은 MCM 드라이버를 통해 전화를 거는 클라이언트를 보여줍니다.

MCM 드라이버를 사용하여 나가는 호출을 수행하는 클라이언트를 보여 주는 다이어그램입니다.

발신 전화를 걸기 전에 연결 지향 클라이언트는 다음을 수행해야 합니다.

  • CO_CALL_PARAMETERS형식의 구조에서 호출 매개 변수를 초기화합니다. 호출 관리자 또는 MCM 드라이버는 일반적으로 클라이언트가 지정한 호출 매개 변수를 사용하여 호출을 설정하고 미니포트 드라이버에서 사용할 미디어 매개 변수를 파생합니다.

  • 의 NdisCoCreateVc를 사용하여 VC 생성을 시작합니다.

NdisCoCreateVc성공적으로 반환되면 클라이언트는 NdisClMakeCall 호출하여 호출을 시작합니다(이 섹션의 두 그림 참조).

NdisClMakeCall 호출에서 클라이언트는 이전에 초기화된 CO_CALL_PARAMETERS 구조에 대한 포인터를 전달합니다. 또한 클라이언트는 NdisVcHandle(NdisCoCreateVc반환됨)를 전달하여 클라이언트가 호출에 대한 데이터를 전송(및 수신)할 VC를 식별합니다. 클라이언트가 다중 포인트 호출(둘 이상의 원격 당사자에 대한 호출)을 만드는 경우 클라이언트가 다중 포인트 VC의 초기 파티의 파티별 상태를 유지하는 클라이언트 할당 상주 컨텍스트 영역에 대한 핸들을 지정하는 ProtocolPartyContext 전달합니다.

NdisClMakeCall을 호출하면 NDIS는 클라이언트가 지정된 NdisVcHandle을 공유하는 호출 관리자 또는 MCM 드라이버의 ProtocolCmMakeCall 함수로 이 요청을 전달합니다. ProtocolCmMakeCall 클라이언트에서 설정한 입력 호출 매개 변수의 유효성을 검사해야 합니다.

ProtocolCmMakeCall 네트워크 제어 디바이스와 통신(신호 메시지 교환)하여 연결합니다. 호출 관리자는 NdisCoSendNetBufferLists 호출하여 이러한 교환을 시작합니다(CoNDIS 드라이버NET_BUFFER 구조 보내기 참조). MCM 드라이버는 NdisCoSendNetBufferLists호출하지 않습니다. 대신 네트워크를 통해 직접 데이터를 전송합니다.

호출 관리자 또는 MCM 드라이버는 관련 네트워크 구성 요소와 협상하는 동안 클라이언트에서 제공하는 호출 매개 변수를 수정할 수 있으며 NdisClMakeCall클라이언트가 원래 제공한 것과 다른 트래픽 매개 변수를 반환할 수 있습니다(호출 매개 변수 변경 요청참조).

NdisPartyHandle가 명시적으로 ProtocolCmMakeCall에 전달될 경우, 클라이언트가 생성한 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 호출하여 호출 매개 변수 변경을 요청할 수 있습니다(Client-Initiated 통화 닫기 요청참조). 신호 프로토콜이 허용되지 않는 호출 매개 변수의 재협상을 허용하지 않는 경우 ProtocolClMakeCallCompleteNdisCloseCall호출을 중단해야 합니다(Client-Initiated 통화 닫기 요청 참조).