| 223 |
223 |
| 224 return FALSE; |
224 return FALSE; |
| 225 } |
225 } |
| 226 |
226 |
| 227 static gpointer res_thread(gpointer data) { |
227 static gpointer res_thread(gpointer data) { |
| 228 PDNS_RECORD *dr = NULL; |
228 PDNS_RECORD dr = NULL; |
| 229 GSList *lst = NULL; |
|
| 230 struct srv_response *srvres; |
|
| 231 DNS_SRV_DATA *srv_data; |
|
| 232 int type = DNS_TYPE_SRV; |
229 int type = DNS_TYPE_SRV; |
| 233 DNS_STATUS ds; |
230 DNS_STATUS ds; |
| 234 struct resdata *rdata = data; |
231 struct resdata *rdata = data; |
| 235 |
232 |
| 236 ds = MyDnsQuery_UTF8(rdata->query, type, DNS_QUERY_STANDARD, NULL, dr, NULL); |
233 ds = MyDnsQuery_UTF8(rdata->query, type, DNS_QUERY_STANDARD, NULL, &dr, NULL); |
| 237 if (ds != ERROR_SUCCESS) { |
234 if (ds != ERROR_SUCCESS) { |
| 238 rdata->errmsg = g_strdup_printf("Couldn't look up SRV record. Error = %d\n", (int) ds); |
235 rdata->errmsg = g_strdup_printf("Couldn't look up SRV record. Error = %d\n", (int) ds); |
| 239 } else { |
236 } else { |
| 240 DNS_RECORD *dr_tmp = *dr; |
237 PDNS_RECORD dr_tmp; |
| 241 while (dr_tmp != NULL) { |
238 GSList *lst = NULL; |
| |
239 DNS_SRV_DATA *srv_data; |
| |
240 struct srv_response *srvres; |
| |
241 |
| |
242 for (dr_tmp = dr; dr_tmp != NULL; dr_tmp = dr_tmp->pNext) { |
| 242 /* Discard any incorrect entries. I'm not sure if this is necessary */ |
243 /* Discard any incorrect entries. I'm not sure if this is necessary */ |
| 243 if (dr_tmp->wType != type || strcmp(dr_tmp->pName, rdata->query) != 0) { |
244 if (dr_tmp->wType != type || strcmp(dr_tmp->pName, rdata->query) != 0) { |
| 244 dr_tmp = dr_tmp->pNext; |
|
| 245 continue; |
245 continue; |
| 246 } |
246 } |
| 247 |
247 |
| 248 srv_data = &dr_tmp->Data.SRV; |
248 srv_data = &dr_tmp->Data.SRV; |
| 249 srvres = g_new0(struct srv_response, 1); |
249 srvres = g_new0(struct srv_response, 1); |
| 252 srvres->pref = srv_data->wPriority; |
252 srvres->pref = srv_data->wPriority; |
| 253 srvres->port = srv_data->wPort; |
253 srvres->port = srv_data->wPort; |
| 254 srvres->weight = srv_data->wWeight; |
254 srvres->weight = srv_data->wWeight; |
| 255 |
255 |
| 256 lst = g_slist_insert_sorted(lst, srvres, responsecompare); |
256 lst = g_slist_insert_sorted(lst, srvres, responsecompare); |
| 257 |
|
| 258 dr_tmp = dr_tmp->pNext; |
|
| 259 } |
257 } |
| 260 |
258 |
| 261 MyDnsRecordListFree(*dr, DnsFreeRecordList); |
259 MyDnsRecordListFree(dr, DnsFreeRecordList); |
| 262 rdata->results = lst; |
260 rdata->results = lst; |
| 263 } |
261 } |
| 264 |
262 |
| 265 /* back to main thread */ |
263 /* back to main thread */ |
| 266 g_idle_add(res_main_thread_cb, rdata); |
264 g_idle_add(res_main_thread_cb, rdata); |