--- a/libpurple/dnssrv.c Thu May 09 10:27:34 2013 +0200
+++ b/libpurple/dnssrv.c Thu May 09 10:28:43 2013 +0200
@@ -71,20 +71,23 @@
typedef struct _PurpleSrvInternalQuery {
} PurpleSrvInternalQuery;
@@ -244,13 +247,13 @@
static PurpleSrvTxtQueryData *
-query_data_new(int type, gchar *query, gpointer extradata)
+query_data_new(PurpleDnsType type, gchar *query, gpointer extradata) PurpleSrvTxtQueryData *query_data = g_new0(PurpleSrvTxtQueryData, 1);
query_data->extradata = extradata;
query_data->query = query;
+#if ! defined(_WIN32) && !defined(ANDROID) @@ -279,12 +282,14 @@
g_free(query_data->error_message);
if (query_data->fd_out != -1)
close(query_data->fd_out);
if (query_data->fd_in != -1)
close(query_data->fd_in);
+ /* Android only uses ui ops. */ g_free(query_data->query);
@@ -303,7 +308,7 @@
+#if !defined(_WIN32) && !defined(ANDROID) write_to_parent(int in, int out, gconstpointer data, gsize size)
@@ -474,7 +479,7 @@
resolved(gpointer data, gint source, PurpleInputCondition cond)
PurpleSrvTxtQueryData *query_data = (PurpleSrvTxtQueryData*)data;
@@ -569,7 +574,7 @@
purple_srv_txt_query_destroy(query_data);
+#elif !defined(ANDROID) /* _WIN32 */ /** The Jabber Server code was inspiration for parts of this. */
@@ -635,7 +640,7 @@
res_thread(gpointer data)
PurpleSrvTxtQueryData *query_data = data;
@@ -714,7 +719,8 @@
+/* Android only supports ui ops because its libc does not include res_*. */ @@ -773,7 +779,7 @@
+#if !defined(_WIN32) && !defined(ANDROID) if(pipe(in) || pipe(out)) {
purple_debug_error("dnssrv", "Could not create pipe\n");
@@ -825,7 +831,7 @@
query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data);
query_data->resolver = g_thread_try_new("dnssrv srv resolver", res_thread, query_data, &err);
if (query_data->resolver == NULL) {
query_data->error_message = g_strdup_printf("SRV thread create failure: %s\n", (err && err->message) ? err->message : "");
@@ -841,6 +847,10 @@
query_data->handle = purple_timeout_add(0, res_main_thread_cb, query_data);
+ /* Android needs UI ops. */ + query_data->error_message = "UI ops not implemented."; @@ -894,7 +904,7 @@
+#if !defined(_WIN32) && !defined(ANDROID) if(pipe(in) || pipe(out)) {
purple_debug_error("dnssrv", "Could not create pipe\n");
@@ -946,7 +956,7 @@
query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data);
query_data->resolver = g_thread_try_new("dnssrv srv resolver", res_thread, query_data, &err);
if (query_data->resolver == NULL) {
query_data->error_message = g_strdup_printf("TXT thread create failure: %s\n", (err && err->message) ? err->message : "");
@@ -962,6 +972,10 @@
query_data->handle = purple_timeout_add(0, res_main_thread_cb, query_data);
+ /* Android needs to implement UI ops. */ + query_data->error_message = "UI ops not implemented."; @@ -991,8 +1005,6 @@
PurpleSrvResponse *records_array;
- g_return_if_fail(records != NULL);
if (query_data->cb.srv == NULL) {
purple_srv_txt_query_destroy(query_data);
@@ -1030,8 +1042,6 @@
purple_txt_query_resolved(PurpleSrvTxtQueryData *query_data, GList *entries)
- g_return_if_fail(entries != NULL);
purple_debug_info("dnssrv", "TXT entries resolved for %s, count: %d\n", query_data->query, g_list_length(entries));
/* the callback should g_free the entries.
@@ -1085,6 +1095,22 @@
return srv_txt_query_ui_ops;
+purple_srv_txt_query_get_ui_data(PurpleSrvTxtQueryData *query_data) + g_return_val_if_fail(query_data != NULL, NULL); + return query_data->ui_data; +purple_srv_txt_query_set_ui_data(PurpleSrvTxtQueryData *query_data, void *ui_data) + g_return_if_fail(query_data != NULL); + query_data->ui_data = ui_data; purple_srv_txt_query_get_query(PurpleSrvTxtQueryData *query_data)
@@ -1094,7 +1120,7 @@
purple_srv_txt_query_get_type(PurpleSrvTxtQueryData *query_data)
g_return_val_if_fail(query_data != NULL, 0);
--- a/libpurple/dnssrv.h Thu May 09 10:27:34 2013 +0200
+++ b/libpurple/dnssrv.h Thu May 09 10:28:43 2013 +0200
@@ -29,11 +29,12 @@
typedef struct _PurpleTxtResponse PurpleTxtResponse;
struct _PurpleSrvResponse {
@@ -166,6 +167,11 @@
PurpleSrvTxtQueryUiOps *purple_srv_txt_query_get_ui_ops(void);
+void *purple_srv_txt_query_get_ui_data(PurpleSrvTxtQueryData *query_data); +void purple_srv_txt_query_set_ui_data(PurpleSrvTxtQueryData *query_data, void *ui_data); * Get the query from a PurpleSrvTxtQueryData
@@ -180,7 +186,7 @@
* @param query_data The query
-int purple_srv_txt_query_get_type(PurpleSrvTxtQueryData *query_data);
+PurpleDnsType purple_srv_txt_query_get_type(PurpleSrvTxtQueryData *query_data);