Mercurial > pidgin.yaz
comparison libpurple/dnssrv.c @ 20232:b7c0c79585f9
applied changes from 31d62e1a78974a0239e86bfeb42b29ab75216114
through c32aee6deb5c7a5e5749d6e0598f588947b8d45c
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Fri, 28 Sep 2007 15:52:48 +0000 |
parents | 44b4e8bd759b |
children | ef5cdffa31d4 |
comparison
equal
deleted
inserted
replaced
20231:09b4d8c32e50 | 20232:b7c0c79585f9 |
---|---|
66 GThread *resolver; | 66 GThread *resolver; |
67 char *query; | 67 char *query; |
68 char *error_message; | 68 char *error_message; |
69 GSList *results; | 69 GSList *results; |
70 #else | 70 #else |
71 int fd_in, fd_out; | |
71 pid_t pid; | 72 pid_t pid; |
72 #endif | 73 #endif |
73 }; | 74 }; |
74 | 75 |
75 static gint | 76 static gint |
109 | 110 |
110 #ifdef HAVE_SIGNAL_H | 111 #ifdef HAVE_SIGNAL_H |
111 purple_restore_default_signal_handlers(); | 112 purple_restore_default_signal_handlers(); |
112 #endif | 113 #endif |
113 | 114 |
114 if (read(in, query, 256) <= 0) | 115 if (read(in, query, 256) <= 0) { |
116 close(out); | |
117 close(in); | |
115 _exit(0); | 118 _exit(0); |
119 } | |
116 | 120 |
117 size = res_query( query, C_IN, T_SRV, (u_char*)&answer, sizeof( answer)); | 121 size = res_query( query, C_IN, T_SRV, (u_char*)&answer, sizeof( answer)); |
118 | 122 |
119 qdcount = ntohs(answer.hdr.qdcount); | 123 qdcount = ntohs(answer.hdr.qdcount); |
120 ancount = ntohs(answer.hdr.ancount); | 124 ancount = ntohs(answer.hdr.ancount); |
175 { | 179 { |
176 write(out, ret->data, sizeof(PurpleSrvResponse)); | 180 write(out, ret->data, sizeof(PurpleSrvResponse)); |
177 g_free(ret->data); | 181 g_free(ret->data); |
178 ret = g_list_remove(ret, ret->data); | 182 ret = g_list_remove(ret, ret->data); |
179 } | 183 } |
184 | |
185 close(out); | |
186 close(in); | |
180 | 187 |
181 _exit(0); | 188 _exit(0); |
182 } | 189 } |
183 | 190 |
184 static void | 191 static void |
355 | 362 |
356 query_data = g_new0(PurpleSrvQueryData, 1); | 363 query_data = g_new0(PurpleSrvQueryData, 1); |
357 query_data->cb = cb; | 364 query_data->cb = cb; |
358 query_data->extradata = extradata; | 365 query_data->extradata = extradata; |
359 query_data->pid = pid; | 366 query_data->pid = pid; |
367 query_data->fd_out = out[0]; | |
368 query_data->fd_in = in[1]; | |
360 query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data); | 369 query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data); |
361 | 370 |
362 g_free(query); | 371 g_free(query); |
363 | 372 |
364 return query_data; | 373 return query_data; |
396 } | 405 } |
397 | 406 |
398 void | 407 void |
399 purple_srv_cancel(PurpleSrvQueryData *query_data) | 408 purple_srv_cancel(PurpleSrvQueryData *query_data) |
400 { | 409 { |
410 printf("purple_srv_cancel(%p)\n", query_data); | |
401 if (query_data->handle > 0) | 411 if (query_data->handle > 0) |
402 purple_input_remove(query_data->handle); | 412 purple_input_remove(query_data->handle); |
403 #ifdef _WIN32 | 413 #ifdef _WIN32 |
404 if (query_data->resolver != NULL) | 414 if (query_data->resolver != NULL) |
405 { | 415 { |
411 query_data->cb = NULL; | 421 query_data->cb = NULL; |
412 return; | 422 return; |
413 } | 423 } |
414 g_free(query_data->query); | 424 g_free(query_data->query); |
415 g_free(query_data->error_message); | 425 g_free(query_data->error_message); |
426 #else | |
427 close(query_data->fd_out); | |
428 close(query_data->fd_in); | |
416 #endif | 429 #endif |
417 g_free(query_data); | 430 g_free(query_data); |
418 } | 431 } |