/mcpint numLines = ::TfxGetNumLines(); for( DWORD nLineID = 0; (int)nLineID < numLines; nLineID++ ) { if( /*ShouldShowLine(nLineID) &&*/ TSUCCEEDED(ldc.GetDevCaps(nLineID)) ) { CtAddressCaps ac; tracer->tracef(SDI_LEVEL_DETAILED, "CTACtrl::OpenLine : Calling ac.GetAddressCaps %d 0\n", nLineID); if ( TSUCCEEDED(ac.GetAddressCaps(nLineID, 0)) ) { // GCGC only one address supported CString strCurrAddress(ac.GetAddress()); if (strReqAddress = = strCurrAddress) { lineID = nLineID; break; } } } else { tracer->tracef(SDI_LEVEL_ERROR, "TAC: error -GetAddressCaps() failed\n"); } } } if (lDeviceID<0) { tracer->tracef(SDI_LEVEL_ERROR, "TAC: error -could not find dirn %s to open line.\n",(LPCSTR)lineDirNumber); return S_FALSE; } // if we are to do media termination; negotiate the extensions version DWORD retExtVersion; if (bTermMedia) { TRESULT tr3; tracer->tracef(SDI_LEVEL_DETAILED, "TAC: lineNegotiateExtVersion -appHandle = %d, deviceID = %d, API ver = %d, HiVer = %d, LoVer = %d\n", CtLine::GetAppHandle(), lineID, CtLine::GetApiVersion(lineID), 0x80000000 | 0x00010000L, 0x80000000 | 0x00020000L ); tr3 = ::lineNegotiateExtVersion(CtLine::GetAppHandle(), lineID, CtLine::GetApiVersion(lineID), 0x80000000 | 0x00010000L, // TAPI v1.3, 0x80000000 | 0x00020000L, &retExtVersion); tracer->tracef(SDI_LEVEL_DETAILED, "TAC: lineNegotiateExtVersion returned: %d\n", tr3); } pLine = new CtLine(); tr = pLine->Open(lineID, this, lPriviledges, lMediaModes); if( TSUCCEEDED(tr)) { if (bTermMedia) { if (retExtVersion = = 0x10000) { CiscoLineDevSpecificUserControlRTPStream dsucr; dsucr.m_RecievePort = lreceivePort; dsucr.m_RecieveIP = ::inet_addr((LPCSTR)strReceiveIP); TRESULT tr2; tr2 = ::lineDevSpecific(pLine->GetHandle(), 0,0, dsucr.lpParams(),dsucr.dwSize()); tracer->tracef(SDI_LEVEL_DETAILED, "TAC: lineDevSpecific returned: %d\n", tr2); } else { Cisco Unified TAPI Developers Guide for Cisco Unified Communications Manager, Release 15 and SUs 449 Cisco Unified TAPI Examples OpenLine