/* * Called when the combo opens * Shows all entries found so far */ void TZCBrowserCombo::OnCbnDropDown (void) { TZCPublication *p; TCHAR szText[512]; /* rendezvous doesn't use unicode */ TCHAR szIP[60]; int iIndex; Clear (); #ifdef _RENDEZVOUS /* Add Items */ _zcbrowser.Lock (); for (p = _zcbrowser.m_pItems; p; p = p->next) { if (p->eventType == kDNSBrowserEventTypeResolved) { DNSNetworkAddressToString (&p->address, szIP); _stprintf (szText, _T("%s (%s)"), p->szName, szIP); iIndex = AddString (szText); if (Data (iIndex, p) != CB_ERR) p->AddRef (); } } _zcbrowser.Unlock (); #endif }
LPCTSTR TZCBrowserCombo::GetHost (void) { #ifdef _RENDEZVOUS if (m_pResolvedZC) { DNSNetworkAddressToString (&m_pResolvedZC->address, m_szText); return m_szText; } #endif Text (); return _tcschr (m_szText, ':') ? m_szText : NULL; }
static void BrowserCallBack( void * inContext, DNSBrowserRef inRef, DNSStatus inStatusCode, const DNSBrowserEvent * inEvent ) { ChooserDialog * dialog; UINT message; BOOL posted; UNUSED_ALWAYS( inStatusCode ); UNUSED_ALWAYS( inRef ); // Check parameters. assert( inContext ); dialog = reinterpret_cast <ChooserDialog *> ( inContext ); try { switch( inEvent->type ) { case kDNSBrowserEventTypeRelease: break; // Domains case kDNSBrowserEventTypeAddDomain: case kDNSBrowserEventTypeAddDefaultDomain: case kDNSBrowserEventTypeRemoveDomain: { DomainEventInfo * domain; std::auto_ptr < DomainEventInfo > domainAutoPtr; domain = new DomainEventInfo; domainAutoPtr.reset( domain ); domain->eventType = inEvent->type; domain->domain = inEvent->data.addDomain.domain; domain->ifIP = inEvent->data.addDomain.interfaceIP; message = ( inEvent->type == kDNSBrowserEventTypeRemoveDomain ) ? WM_USER_DOMAIN_REMOVE : WM_USER_DOMAIN_ADD; posted = ::PostMessage( dialog->GetSafeHwnd(), message, 0, (LPARAM) domain ); assert( posted ); if( posted ) { domainAutoPtr.release(); } break; } // Services case kDNSBrowserEventTypeAddService: case kDNSBrowserEventTypeRemoveService: { ServiceEventInfo * service; std::auto_ptr < ServiceEventInfo > serviceAutoPtr; service = new ServiceEventInfo; serviceAutoPtr.reset( service ); service->eventType = inEvent->type; service->name = inEvent->data.addService.name; service->type = inEvent->data.addService.type; service->domain = inEvent->data.addService.domain; service->ifIP = inEvent->data.addService.interfaceIP; message = ( inEvent->type == kDNSBrowserEventTypeAddService ) ? WM_USER_SERVICE_ADD : WM_USER_SERVICE_REMOVE; posted = ::PostMessage( dialog->GetSafeHwnd(), message, 0, (LPARAM) service ); assert( posted ); if( posted ) { serviceAutoPtr.release(); } break; } // Resolves case kDNSBrowserEventTypeResolved: if( inEvent->data.resolved->address.addressType == kDNSNetworkAddressTypeIPv4 ) { ServiceInstanceInfo * serviceInstance; std::auto_ptr < ServiceInstanceInfo > serviceInstanceAutoPtr; char s[ 32 ]; serviceInstance = new ServiceInstanceInfo; serviceInstanceAutoPtr.reset( serviceInstance ); serviceInstance->name = inEvent->data.resolved->name; serviceInstance->type = inEvent->data.resolved->type; serviceInstance->domain = inEvent->data.resolved->domain; serviceInstance->ip = DNSNetworkAddressToString( &inEvent->data.resolved->address, s ); serviceInstance->ifIP = DNSNetworkAddressToString( &inEvent->data.resolved->interfaceIP, s ); serviceInstance->text = inEvent->data.resolved->textRecord; serviceInstance->hostName = inEvent->data.resolved->hostName; posted = ::PostMessage( dialog->GetSafeHwnd(), WM_USER_RESOLVE, 0, (LPARAM) serviceInstance ); assert( posted ); if( posted ) { serviceInstanceAutoPtr.release(); } } break; default: break; } } catch( ... ) { // Don't let exceptions escape. } }