mDNSlocal void DNSSECProbeCallback(mDNS *const m, DNSQuestion *question, const ResourceRecord *const answer, QC_result AddRecord) { if (!AddRecord) return; mDNS_Lock(m); if ((m->timenow - question->StopTime) >= 0) { mDNS_Unlock(m); LogDNSSEC("DNSSECProbeCallback: Question %##s (%s) timed out", question->qname.c, DNSTypeName(question->qtype)); mDNS_StopQuery(m, question); return; } mDNS_Unlock(m); // Wait till we get the DNSSEC results. If we get a negative response e.g., no DNS servers, the // question will be restarted by the core and we should have the DNSSEC results eventually. if (AddRecord != QC_dnssec) { LogDNSSEC("DNSSECProbeCallback: Question %##s (%s)", question->qname.c, DNSTypeName(question->qtype), RRDisplayString(m, answer)); return; } LogDNSSEC("DNSSECProbeCallback: Question %##s (%s), DNSSEC status %s", question->qname.c, DNSTypeName(question->qtype), DNSSECStatusName(question->ValidationStatus)); mDNS_StopQuery(m, question); }
static void DNSServiceResolveDispose(mDNS_DirectOP *op) { mDNS_DirectOP_Resolve *x = (mDNS_DirectOP_Resolve*)op; if (x->qSRV.ThisQInterval >= 0) mDNS_StopQuery(&mDNSStorage, &x->qSRV); if (x->qTXT.ThisQInterval >= 0) mDNS_StopQuery(&mDNSStorage, &x->qTXT); mDNSPlatformMemFree(x); }
mDNSlocal void DoOneQuery(DNSQuestion *q, char *qname, mDNSu16 qtype, const mDNSAddr *target, mDNSQuestionCallback callback) { mStatus status = StartQuery(q, qname, qtype, target, callback); if (status != mStatus_NoError) StopNow = 2; else { WaitForAnswer(&mDNSStorage, 4); mDNS_StopQuery(&mDNSStorage, q); } }
int main(int argc, char **argv) // The program's main entry point. The program does a trivial // mDNS query, looking for all AFP servers in the local domain. { int result; mStatus status; DNSQuestion question; domainname type; domainname domain; // Parse our command line arguments. This won't come back if there's an error. ParseArguments(argc, argv); // Initialise the mDNS core. status = mDNS_Init(&mDNSStorage, &PlatformStorage, gRRCache, RR_CACHE_SIZE, mDNS_Init_DontAdvertiseLocalAddresses, mDNS_Init_NoInitCallback, mDNS_Init_NoInitCallbackContext); if (status == mStatus_NoError) { // Construct and start the query. MakeDomainNameFromDNSNameString(&type, gServiceType); MakeDomainNameFromDNSNameString(&domain, gServiceDomain); status = mDNS_StartBrowse(&mDNSStorage, &question, &type, &domain, mDNSInterface_Any, mDNSfalse, BrowseCallback, NULL); // Run the platform main event loop until the user types ^C. // The BrowseCallback routine is responsible for printing // any results that we find. if (status == mStatus_NoError) { fprintf(stderr, "Hit ^C when you're bored waiting for responses.\n"); ExampleClientEventLoop(&mDNSStorage); mDNS_StopQuery(&mDNSStorage, &question); mDNS_Close(&mDNSStorage); } } if (status == mStatus_NoError) { result = 0; } else { result = 2; } if ( (result != 0) || (gMDNSPlatformPosixVerboseLevel > 0) ) { fprintf(stderr, "%s: Finished with status %d, result %d\n", gProgramName, (int)status, result); } return 0; }
static void DNSServiceQueryRecordDispose(mDNS_DirectOP *op) { mDNS_DirectOP_QueryRecord *x = (mDNS_DirectOP_QueryRecord*)op; if (x->q.ThisQInterval >= 0) mDNS_StopQuery(&mDNSStorage, &x->q); mDNSPlatformMemFree(x); }
int main(void) // The program's main entry point. The program does a trivial // mDNS query, looking for mDNS service & device in the local domain. { int result; mStatus status; DNSQuestion question; domainname type; domainname domain; char DeviceName[64]; // Initialise the mDNS core. status = mDNS_Init(&mDNSStorage, &PlatformStorage, gRRCache, RR_CACHE_SIZE, mDNS_Init_DontAdvertiseLocalAddresses, mDNS_Init_NoInitCallback, mDNS_Init_NoInitCallbackContext); if (status == mStatus_NoError) { #if 1 /* Query service type */ // Construct and start the query. MakeDomainNameFromDNSNameString(&type, gServiceType); MakeDomainNameFromDNSNameString(&domain, gServiceDomain); status = mDNS_StartBrowse(&mDNSStorage, &question, &type, &domain, mDNSInterface_Any, mDNSfalse, BrowseCallback, NULL); //return; // Run the platform main event loop. // The BrowseCallback routine is responsible for printing // any results that we find. if (status == mStatus_NoError) { fprintf(stderr, "* Query: %s\n", gServiceType); EventLoop(&mDNSStorage); mDNS_StopQuery(&mDNSStorage, &question); //Parse all service type and query detail //fprintf(stderr, "===== Parse all service type and query detail...\n"); callback = 0; event = 0; StopNow = 0; } return 0; #endif #if 0 /* Query device name */ Service_tmp = Service_list; while(Service_tmp!=NULL) { printf("\n======= Queried Service: %s.%s\n", Service_tmp->service, Service_tmp->type); sprintf(Query_type, "%s.%s", Service_tmp->service, Service_tmp->type); //Device_found = Service_tmp->sup_device; gServiceType = Query_type; MakeDomainNameFromDNSNameString(&type, gServiceType); status = mDNS_StartBrowse(&mDNSStorage, &question, &type, &domain, mDNSInterface_Any, mDNSfalse, QueryCallback, NULL); if (status == mStatus_NoError) { EventLoop(&mDNSStorage); mDNS_StopQuery(&mDNSStorage, &question); } callback = 0; event = 0; StopNow = 0; Service_tmp = Service_tmp->next; } printf("===============\n\n"); #endif #if 0 /* Query IP of device */ DeviceIP_cur = Device_list; printf("%d,%d,%d ", callback, event, StopNow); printf("QUERY DEVICE: %s/%s\n", Device_cur->name, Device_cur->IPv4Addr); char *cc = Device_cur->IPv4Addr; int x =0; for(; x<16; x++) { printf("%",*cc); cc++; } printf("\n"); //if(DeviceIP_cur->IPv4Addr == NULL) if(!strcmp(DeviceIP_cur->IPv4Addr, "")) printf(" DeviceIP_cur->IPv4Addr == NULL\n"); while(DeviceIP_cur && (!strcmp(DeviceIP_cur->IPv4Addr, ""))) { memset(DeviceName, 0, 64); strcpy(DeviceName, DeviceIP_cur->name); HostnameParse(DeviceName); gServiceType = DeviceName; printf("Query IP of %s\n", gServiceType); // Construct and start the query. MakeDomainNameFromDNSNameString(&type, gServiceType); status = mDNS_GetAddrInfo(&mDNSStorage, &question, &type, &domain, mDNSInterface_Any, mDNSfalse, IPInfoCallback, NULL); if (status == mStatus_NoError) { EventLoop(&mDNSStorage); mDNS_StopQuery(&mDNSStorage, &question); } else { printf("Error= %ld\n", status); } DeviceIP_cur = DeviceIP_cur->next; callback = 0; event = 0; StopNow = 0; } printf("===============\n"); #endif int nvram_size, i = 0; char *nvram_info; char device_name_ascii[256], service_type_list[512]; struct mDNS_service_handler *handler; nvram_size = device_count*64 + service_count*4; nvram_info = malloc(nvram_size); memset(nvram_info, 0, nvram_size); printf("nvram_size= %d\n", nvram_size); //Print all info Service_tmp = Service_list; while(Service_tmp!=NULL) { printf("\n=== %s.%s ===\n", Service_tmp->service, Service_tmp->type); Service_tmp = Service_tmp->next; } printf("\n===== Print device ========\n"); Device_tmp = Device_list; while(Device_tmp!=NULL) { //printf(" %s:%s->", Device_tmp->name, Device_tmp->IPv4Addr); memset(device_name_ascii, 0, 256); char_to_ascii(device_name_ascii, Device_tmp->name); strcat(nvram_info, "<"); sprintf(nvram_info, "%s%s>%s>", nvram_info, Device_tmp->IPv4Addr, device_name_ascii); printf(" %s\n", nvram_info); Sup_service_tmp = Device_tmp->sup_service; memset(service_type_list, 0, 512); while(Sup_service_tmp!=NULL) { for(handler = &service_handler[0], i=0; handler->service; handler++, i++) { if(strstr(Sup_service_tmp->name, handler->service)) { sprintf(service_type_list, "%s#%d", service_type_list, i); break; } } printf("%s ", Sup_service_tmp->name); Sup_service_tmp = Sup_service_tmp->next; } printf("\n"); printf("Service_type= %s\n", service_type_list); sprintf(nvram_info, "%s%s", nvram_info, service_type_list); printf("-> %s\n", nvram_info); Device_tmp = Device_tmp->next; } printf("\n==> %s\n", nvram_info); free(nvram_info); mDNS_Close(&mDNSStorage); }//Endof Initialise the mDNS core. if (status == mStatus_NoError) { result = 0; } else { result = 2; } if ( (result != 0) || (gMDNSPlatformPosixVerboseLevel > 0) ) { fprintf(stderr, "%s: Finished with status %d, result %d\n", gProgramName, (int)status, result); } return 0; }