Lines Matching refs:sdns

732 _check_cache(sdns_handle_t *sdns)
740 if (sdns == NULL) return;
744 if (sdns->stattime == 0) refresh = 1;
748 if (sdns->notify_sys_config_token == -1) refresh = 1;
752 status = notify_check(sdns->notify_sys_config_token, &n);
759 if (sdns->notify_dir_token == -1) refresh = 1;
763 status = notify_check(sdns->notify_dir_token, &n);
771 sdns->pdns_primary = NULL;
773 for (i = 0; i < sdns->client_count; i++)
775 _pdns_free(sdns->client[i]);
778 sdns->client_count = 0;
779 if (sdns->client != NULL) free(sdns->client);
780 sdns->client = NULL;
789 if (sdns->flags & DNS_FLAG_FORWARD_TO_MDNSRESPONDER)
792 sdns->pdns_primary = _mdns_primary(sc_dns->resolver[0]);
797 sdns->pdns_primary = _pdns_convert_sc(sc_dns->resolver[0]);
800 _pdns_check_search_list(sdns->pdns_primary);
804 sdns->pdns_primary = _pdns_file_open(_PATH_RESCONF);
807 if (sdns->pdns_primary != NULL)
809 if ((sdns->flags & DNS_FLAG_DEBUG) && (sdns->pdns_primary->res != NULL)) sdns->pdns_primary->res->options |= RES_DEBUG;
810 if (sdns->flags & DNS_FLAG_OK_TO_SKIP_AAAA) sdns->pdns_primary->flags |= DNS_FLAG_OK_TO_SKIP_AAAA;
811 sdns->pdns_primary->flags |= DNS_FLAG_DEFAULT_RESOLVER;
813 sdns->client = (pdns_handle_t **)calloc(1, sizeof(pdns_handle_t *));
814 if (sdns->client == NULL)
820 sdns->client[sdns->client_count] = sdns->pdns_primary;
821 sdns->client_count++;
830 if (sdns->flags & DNS_FLAG_DEBUG) c->res->options |= RES_DEBUG;
831 if (sdns->flags & DNS_FLAG_OK_TO_SKIP_AAAA) c->flags |= DNS_FLAG_OK_TO_SKIP_AAAA;
833 if (sdns->client_count == 0)
835 sdns->client = (pdns_handle_t **)calloc(1, sizeof(pdns_handle_t *));
839 sdns->client = (pdns_handle_t **)reallocf(sdns->client, (sdns->client_count + 1) * sizeof(pdns_handle_t *));
842 if (sdns->client == NULL)
844 sdns->client_count = 0;
849 sdns->client[sdns->client_count] = c;
850 sdns->client_count++;
855 if (sdns->flags & DNS_FLAG_CHECK_RESOLVER_DIR)
861 sdns->flags &= ~DNS_FLAG_CHECK_RESOLVER_DIR;
871 if (sdns->flags & DNS_FLAG_DEBUG) c->res->options |= RES_DEBUG;
872 if (sdns->flags & DNS_FLAG_OK_TO_SKIP_AAAA) c->flags |= DNS_FLAG_OK_TO_SKIP_AAAA;
874 if (sdns->client_count == 0)
876 sdns->client = (pdns_handle_t **)calloc(1, sizeof(pdns_handle_t *));
880 sdns->client = (pdns_handle_t **)reallocf(sdns->client, (sdns->client_count + 1) * sizeof(pdns_handle_t *));
883 if (sdns->client == NULL)
885 sdns->client_count = 0;
889 sdns->client[sdns->client_count] = c;
890 sdns->client_count++;
896 sdns->stattime = 1;
900 _pdns_get_default_handles(sdns_handle_t *sdns, pdns_handle_t ***pdns)
904 if (sdns == NULL) return 0;
909 for (i = 0; i < sdns->client_count; i++)
911 if (sdns->client[i]->flags & DNS_FLAG_DEFAULT_RESOLVER)
927 if (sdns->client[i]->search_order < (*pdns)[j]->search_order) break;
931 (*pdns)[j] = sdns->client[i];
940 _pdns_get_handles_for_name(sdns_handle_t *sdns, const char *name, pdns_handle_t ***pdns)
945 if (sdns == NULL) return 0;
948 if (name == NULL) return _pdns_get_default_handles(sdns, pdns);
949 else if (name[0] == '\0') return _pdns_get_default_handles(sdns, pdns);
960 for (i = 0; i < sdns->client_count; i++)
962 if (sdns->client[i]->name == NULL) continue;
964 if (!strcasecmp(sdns->client[i]->name, p))
980 if (sdns->client[i]->search_order < (*pdns)[j]->search_order) break;
984 (*pdns)[j] = sdns->client[i];
997 return _pdns_get_default_handles(sdns, pdns);
1022 _dns_open_notify(sdns_handle_t *sdns)
1026 if (sdns == NULL) return;
1028 if (sdns->notify_delay_token == -1)
1030 status = notify_register_check(DNS_DELAY_NAME, &(sdns->notify_delay_token));
1031 if (status != NOTIFY_STATUS_OK) sdns->notify_delay_token = -1;
1032 else status = notify_check(sdns->notify_delay_token, &n);
1035 if (sdns->notify_sys_config_token == -1)
1037 status = notify_register_check(dns_configuration_notify_key(), &(sdns->notify_sys_config_token));
1038 if (status != NOTIFY_STATUS_OK) sdns->notify_sys_config_token = -1;
1041 if (sdns->notify_dir_token == -1)
1043 status = notify_register_check(NOTIFY_DIR_NAME, &(sdns->notify_dir_token));
1046 status = notify_monitor_file(sdns->notify_dir_token, "/private/etc/resolver", 0);
1049 notify_cancel(sdns->notify_dir_token);
1050 sdns->notify_dir_token = -1;
1055 sdns->notify_dir_token = -1;
1061 _dns_close_notify(sdns_handle_t *sdns)
1063 if (sdns == NULL) return;
1065 if (sdns->notify_delay_token != -1) notify_cancel(sdns->notify_delay_token);
1066 sdns->notify_delay_token = -1;
1068 if (sdns->notify_sys_config_token != -1) notify_cancel(sdns->notify_sys_config_token);
1069 sdns->notify_sys_config_token = -1;
1071 if (sdns->notify_dir_token != -1) notify_cancel(sdns->notify_dir_token);
1072 sdns->notify_dir_token = -1;
1120 dns->sdns = (sdns_handle_t *)calloc(1, sizeof(sdns_handle_t));
1121 if (dns->sdns == NULL)
1127 dns->sdns->flags |= DNS_FLAG_CHECK_RESOLVER_DIR;
1128 dns->sdns->notify_sys_config_token = -1;
1129 dns->sdns->notify_dir_token = -1;
1130 dns->sdns->notify_delay_token = -1;
1131 _dns_open_notify(dns->sdns);
1142 dns->sdns = (sdns_handle_t *)calloc(1, sizeof(sdns_handle_t));
1143 if (dns->sdns == NULL)
1149 dns->sdns->flags = DNS_FLAG_FORWARD_TO_MDNSRESPONDER;
1150 dns->sdns->notify_sys_config_token = -1;
1151 dns->sdns->notify_dir_token = -1;
1152 dns->sdns->notify_delay_token = -1;
1153 if (local_control == 1) _dns_open_notify(dns->sdns);
1194 if (dns->sdns == NULL) return;
1196 _dns_close_notify(dns->sdns);
1198 for (i = 0; i < dns->sdns->client_count; i++)
1200 _pdns_free(dns->sdns->client[i]);
1203 dns->sdns->client_count = 0;
1204 if (dns->sdns->client != NULL) free(dns->sdns->client);
1206 free(dns->sdns);
1232 _sdns_debug(sdns_handle_t *sdns, uint32_t flag)
1236 if (sdns == NULL) return;
1240 sdns->flags &= ~ DNS_FLAG_DEBUG;
1242 for (i = 0; i < sdns->client_count; i++)
1244 sdns->client[i]->res->options &= ~RES_DEBUG;
1249 sdns->flags |= DNS_FLAG_DEBUG;
1251 for (i = 0; i < sdns->client_count; i++)
1253 sdns->client[i]->res->options |= RES_DEBUG;
1272 _sdns_debug(dns->sdns, flag);
1295 _check_cache(dns->sdns);
1296 pdns = dns->sdns->pdns_primary;
1324 _check_cache(dns->sdns);
1325 pdns = dns->sdns->pdns_primary;
1336 _pdns_delay(sdns_handle_t *sdns)
1341 if (sdns == NULL) return 0;
1347 if (sdns->notify_delay_token == -1) return 0;
1349 if (sdns->dns_delay == 0)
1351 status = notify_check(sdns->notify_delay_token, &n);
1357 sdns->dns_delay = time(NULL) + DNS_DELAY_INTERVAL;
1368 snooze = 1 + (sdns->dns_delay - tick);
1377 if (n == 1) sdns->dns_delay = 0;
1383 _pdns_query(sdns_handle_t *sdns, pdns_handle_t *pdns, const char *name, uint32_t class, uint32_t type, char *buf, uint32_t len, struct sockaddr *from, uint32_t *fromlen, int *min)
1402 _pdns_delay(sdns);
1409 _pdns_search(sdns_handle_t *sdns, pdns_handle_t *pdns, const char *name, uint32_t class, uint32_t type, char *buf, uint32_t len, struct sockaddr *from, uint32_t *fromlen)
1452 _pdns_delay(sdns);
1458 _pdns_delay(sdns);
1473 _sdns_send(sdns_handle_t *sdns, const char *name, uint32_t class, uint32_t type, uint32_t fqdn, char *buf, uint32_t len, struct sockaddr *from, uint32_t *fromlen, int *min)
1488 pdns_count = _pdns_get_handles_for_name(sdns, name, &pdns);
1499 n = _pdns_query(sdns, pdns[i], qname, class, type, buf, len, from, fromlen, &tmin);
1524 _sdns_search(sdns_handle_t *sdns, const char *name, uint32_t class, uint32_t type, uint32_t fqdn, uint32_t recurse, char *buf, uint32_t len, struct sockaddr *from, uint32_t *fromlen, int *min)
1532 if (sdns == NULL) return -1;
1551 primary = sdns->pdns_primary;
1577 status = _sdns_send(sdns, name, class, type, fqdn, buf, len, from, fromlen, &tmin);
1604 status = _sdns_search(sdns, qname, class, type, fqdn, 0, buf, len, from, fromlen, &tmin);
1631 pdns_count = _pdns_get_default_handles(sdns, &pdns);
1650 status = _pdns_query(sdns, pdns[i], qname, class, type, buf, len, from, fromlen, &tmin);
1689 _check_cache(dns->sdns);
1690 status = _sdns_search(dns->sdns, name, class, type, 1, 1, buf, len, from, fromlen, &unused);
1694 status = _pdns_query(dns->sdns, dns->pdns, name, class, type, buf, len, from, fromlen, &unused);
1716 _check_cache(dns->sdns);
1717 status = _sdns_search(dns->sdns, name, class, type, 0, 1, buf, len, from, fromlen, &unused);
1721 status = _pdns_search(dns->sdns, dns->pdns, name, class, type, buf, len, from, fromlen);