/********************************************************** * COperator::ListenOnAddresses * *------------------------------* * Description: * Find all addresses that support audio in and audio * out. Call ListenOnThisAddress to start listening * Return: * S_OK * S_FALSE if there are no addresses to listen on * Failed HRESULT ITTAPI::EnumberateAddresses() * or IEnumAddress::Next() ************************************************************/ HRESULT COperator::ListenOnAddresses() { // enumerate the addresses IEnumAddress * pEnumAddress; HRESULT hr = m_pTapi->EnumerateAddresses( &pEnumAddress ); if ( FAILED(hr) ) { return hr; } ITAddress * pAddress; bool fAddressExists = false; while ( true ) { // get the next address hr = pEnumAddress->Next( 1, &pAddress, NULL ); if (S_OK != hr) { // Done dealing with all the addresses break; } // Does the address support audio? if ( AddressSupportsMediaType(pAddress, TAPIMEDIATYPE_AUDIO) ) { // If it does then we'll listen. HRESULT hrListen = ListenOnThisAddress( pAddress ); if ( S_OK == hrListen ) { fAddressExists = true; } } pAddress->Release(); } pEnumAddress->Release(); if ( !fAddressExists ) { DoMessage( L"Could not find any addresses to listen on" ); } if ( FAILED( hr ) ) { return hr; } else { return fAddressExists ? S_OK : S_FALSE; } } /* COperator::ListenOnAddress */
HRESULT StartListening() { HRESULT hr = S_OK; LogMessage("StartListening: started"); // // enumerate available addresses // IEnumAddress *pEnumAddress = NULL; hr = g_pTapi->EnumerateAddresses( &pEnumAddress ); if (FAILED(hr)) { LogError("StartListening: Failed to enumerate addresses"); return hr; } // // this flag remains false until we succeded starting listening on at // least one address // BOOL bListenStarted = FALSE; // // walk through all the addresses and start listening on the ones that // support audio // while (TRUE) { // // check the next address // ITAddress *pAddress = NULL; hr = pEnumAddress->Next(1, &pAddress, NULL); if (S_OK != hr) { // // no more addresses or error // break; } // // log the name of the address // BSTR bstrAddressName; hr = pAddress->get_AddressName(&bstrAddressName); if (SUCCEEDED(hr)) { LogMessage("StartListening: -> found address [%S]", bstrAddressName); SysFreeString(bstrAddressName); } else { LogError("StartListening: failed to get address name"); } // // if the address supports audio and media streaming terminal, // start listening // if ( AddressSupportsAudio(pAddress) && AddressSupportsMST(pAddress) ) { // // start listening on this address // LogMessage("StartListening: Starting listening."); hr = ListenOnAddress(pAddress); if (SUCCEEDED(hr)) { // // we are listening on at least one address // bListenStarted = TRUE; LogMessage("StartListening: " "-> started listening on this address"); } else { // // log an error and continue // LogError("StartListening: -> failed starting listening on this address, " "hr = 0x%lx", hr); } } else { LogMessage("StartListening: -> no audio or MST support on this address."); } pAddress->Release(); pAddress = NULL; } pEnumAddress->Release(); pEnumAddress = NULL; // // depending on whether we started listening or not, log a message and // return the appropriate error code. // if (bListenStarted) { LogMessage("StartListening: completed. " "Listening on one or more addresses"); return S_OK; } else { LogMessage("StartListening: completed. Not listening on any address."); return E_FAIL; } }