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 }