// autoans.cpp : implementation file // #include "stdafx.h" #include "t3test.h" #include "t3testd.h" #include "confdlg.h" #include "strings.h" #include "resource.h" #ifdef _DEBUG #ifndef _WIN64 // mfc 4.2's heap debugging features generate warnings on win64 #define new DEBUG_NEW #endif #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif CConfDlg::CConfDlg(CWnd* pParent /*=NULL*/) : CDialog(CConfDlg::IDD, pParent) { m_bstrDestAddress = NULL; } void CConfDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BOOL CConfDlg::OnInitDialog() { CDialog::OnInitDialog(); PopulateConferences(); return TRUE; } void CConfDlg::PopulateConferences() { ITRendezvous * pRend; IEnumDirectory * pEnumDirectory; HRESULT hr; ITDirectory * pDirectory; LPWSTR * ppServers; DWORD dw; // // create the rendezvous control. // hr = ::CoCreateInstance( CLSID_Rendezvous, NULL, CLSCTX_INPROC_SERVER, IID_ITRendezvous, (void **)&pRend ); if (FAILED(hr)) { return; } hr = pRend->EnumerateDefaultDirectories( &pEnumDirectory ); if (FAILED(hr)) { pRend->Release(); return; } while (TRUE) { DWORD dwFetched = 0; hr = pEnumDirectory->Next( 1, &pDirectory, &dwFetched ); if ( S_OK != hr ) { break; } DIRECTORY_TYPE type; // print out the names of the conference found. hr = pDirectory->get_DirectoryType(&type); if ( FAILED(hr) ) { pDirectory->Release(); continue; } if (type == DT_ILS) { break; } pDirectory->Release(); } pEnumDirectory->Release(); // // if hr is s_false, we went through the enumerate // without finding an ils server // if ( S_OK == hr ) { hr = pDirectory->Connect(FALSE); if ( SUCCEEDED(hr)) { ListObjects( pDirectory ); } pDirectory->Release(); } hr = ListILSServers( &ppServers, &dw ); if ( !SUCCEEDED(hr) ) { return; } while ( dw ) { dw--; hr = pRend->CreateDirectory( DT_ILS, ppServers[dw], &pDirectory ); if ( SUCCEEDED(hr) ) { hr = pDirectory->Connect(FALSE); if ( SUCCEEDED(hr) ) { ListObjects( pDirectory ); } pDirectory->Release(); } CoTaskMemFree( ppServers[dw] ); } CoTaskMemFree( ppServers ); } void CConfDlg::ListObjects( ITDirectory * pDirectory ) { BSTR bstrNameToSearch; BSTR bstrDirName; HRESULT hr; int i; bstrNameToSearch = SysAllocString(L"*"); if (bstrNameToSearch == NULL) { return; } IEnumDirectoryObject * pEnum; hr = pDirectory->EnumerateDirectoryObjects( OT_CONFERENCE, bstrNameToSearch, &pEnum ); SysFreeString( bstrNameToSearch ); if (FAILED(hr)) { return; } pDirectory->get_DisplayName( &bstrDirName ); // print out the names of all the users found. while (TRUE) { ITDirectoryObject * pObject; BSTR bstrObjectName; WCHAR szBuffer[256]; hr = pEnum->Next( 1, &pObject, NULL ); if ( S_OK != hr ) { break; } hr = pObject->get_Name(&bstrObjectName); if (FAILED(hr)) { continue; } wsprintf(szBuffer, L"%s: %s", bstrDirName, bstrObjectName ); i = SendDlgItemMessage( IDC_CONFLIST, LB_ADDSTRING, 0, (LPARAM)szBuffer ); SysFreeString(bstrObjectName); SendDlgItemMessage( IDC_CONFLIST, LB_SETITEMDATA, i, (LPARAM) pObject ); } SysFreeString( bstrDirName ); pEnum->Release(); } void CConfDlg::OnOK() { DWORD i; HRESULT hr; i = SendDlgItemMessage( IDC_CONFLIST, LB_GETCURSEL, 0, 0 ); if (LB_ERR != i) { ITDirectoryObject * pObject; IEnumDialableAddrs * pEnumAddress; pObject = (ITDirectoryObject *)SendDlgItemMessage( IDC_CONFLIST, LB_GETITEMDATA, i, 0 ); hr = pObject->EnumerateDialableAddrs( LINEADDRESSTYPE_SDP, &pEnumAddress ); if ( !SUCCEEDED(hr) ) { } hr = pEnumAddress->Next( 1, &m_bstrDestAddress, NULL ); if ( S_OK != hr ) { } pEnumAddress->Release(); } CDialog::OnOK(); } void CConfDlg::OnDestroy() { DWORD count; CDialog::OnDestroy(); count = SendDlgItemMessage( IDC_CONFLIST, LB_GETCOUNT, 0, 0 ); while ( 0 != count ) { ITDirectoryObject * pObject; count--; pObject = (ITDirectoryObject *)SendDlgItemMessage( IDC_CONFLIST, LB_GETITEMDATA, count, 0 ); pObject->Release(); } } BEGIN_MESSAGE_MAP(CConfDlg, CDialog) ON_WM_DESTROY() END_MESSAGE_MAP()