--- a/libpurple/protocols/bonjour/bonjour.c Tue Dec 29 00:37:08 2020 -0600
+++ b/libpurple/protocols/bonjour/bonjour.c Thu Dec 31 22:00:36 2020 -0600
@@ -30,7 +30,6 @@
-#include "dns_sd_proxy.h"
@@ -96,15 +95,13 @@
PurplePresence *presence;
- if (!dns_sd_available()) {
+ if (!mdns_available()) { purple_connection_error(gc,
PURPLE_CONNECTION_ERROR_OTHER_ERROR,
_("Unable to find Apple's \"Bonjour for Windows\" toolkit, see "
"https://developer.pidgin.im/BonjourWindows for more information."));
purple_connection_set_flags(gc, PURPLE_CONNECTION_FLAG_HTML |
PURPLE_CONNECTION_FLAG_NO_IMAGES);
--- a/libpurple/protocols/bonjour/buddy.c Tue Dec 29 00:37:08 2020 -0600
+++ b/libpurple/protocols/bonjour/buddy.c Thu Dec 31 22:00:36 2020 -0600
@@ -21,7 +21,6 @@
-#include "mdns_interface.h"
--- a/libpurple/protocols/bonjour/mdns_avahi.c Tue Dec 29 00:37:08 2020 -0600
+++ b/libpurple/protocols/bonjour/mdns_avahi.c Thu Dec 31 22:00:36 2020 -0600
@@ -16,7 +16,6 @@
-#include "mdns_interface.h"
@@ -398,7 +397,9 @@
* mdns_interface functions *
****************************/
-gboolean _mdns_init_session(BonjourDnsSd *data) {
+avahi_mdns_init_session(BonjourDnsSd *data) AvahiSessionImplData *idata = g_new0(AvahiSessionImplData, 1);
const AvahiPoll *poll_api;
@@ -429,7 +430,9 @@
-gboolean _mdns_publish(BonjourDnsSd *data, PublishType type, GSList *records) {
+avahi_mdns_publish(BonjourDnsSd *data, PublishType type, GSList *records) AvahiSessionImplData *idata = data->mdns_impl_data;
AvahiStringList *lst = NULL;
@@ -492,7 +495,9 @@
-gboolean _mdns_browse(BonjourDnsSd *data) {
+avahi_mdns_browse(BonjourDnsSd *data) AvahiSessionImplData *idata = data->mdns_impl_data;
g_return_val_if_fail(idata != NULL, FALSE);
@@ -509,7 +514,9 @@
-gboolean _mdns_set_buddy_icon_data(BonjourDnsSd *data, gconstpointer avatar_data, gsize avatar_len) {
+avahi_mdns_set_buddy_icon_data(BonjourDnsSd *data, gconstpointer avatar_data, gsize avatar_len) AvahiSessionImplData *idata = data->mdns_impl_data;
if (idata == NULL || idata->client == NULL)
@@ -574,7 +581,9 @@
-void _mdns_stop(BonjourDnsSd *data) {
+avahi_mdns_stop(BonjourDnsSd *data) AvahiSessionImplData *idata = data->mdns_impl_data;
if (idata == NULL || idata->client == NULL)
@@ -591,11 +600,15 @@
data->mdns_impl_data = NULL;
-void _mdns_init_buddy(BonjourBuddy *buddy) {
+avahi_mdns_init_buddy(BonjourBuddy *buddy) buddy->mdns_impl_data = g_new0(AvahiBuddyImplData, 1);
-void _mdns_delete_buddy(BonjourBuddy *buddy) {
+avahi_mdns_delete_buddy(BonjourBuddy *buddy) AvahiBuddyImplData *idata = buddy->mdns_impl_data;
g_return_if_fail(idata != NULL);
@@ -610,7 +623,9 @@
buddy->mdns_impl_data = NULL;
-void _mdns_retrieve_buddy_icon(BonjourBuddy* buddy) {
+avahi_mdns_retrieve_buddy_icon(BonjourBuddy* buddy) PurpleConnection *conn = purple_account_get_connection(buddy->account);
BonjourData *bd = purple_connection_get_protocol_data(conn);
AvahiSessionImplData *session_idata = bd->dns_sd_data->mdns_impl_data;
@@ -638,3 +653,17 @@
+ _mdns_init_session = avahi_mdns_init_session; + _mdns_publish = avahi_mdns_publish; + _mdns_browse = avahi_mdns_browse; + _mdns_stop = avahi_mdns_stop; + _mdns_set_buddy_icon_data = avahi_mdns_set_buddy_icon_data; + _mdns_init_buddy = avahi_mdns_init_buddy; + _mdns_delete_buddy = avahi_mdns_delete_buddy; + _mdns_retrieve_buddy_icon = avahi_mdns_retrieve_buddy_icon; --- a/libpurple/protocols/bonjour/mdns_common.c Tue Dec 29 00:37:08 2020 -0600
+++ b/libpurple/protocols/bonjour/mdns_common.c Thu Dec 31 22:00:36 2020 -0600
@@ -19,11 +19,23 @@
-#include "mdns_interface.h"
+/**************************** + * mdns_interface functions * + ****************************/ +mdns_init_session_func *_mdns_init_session = NULL; +mdns_publish_func *_mdns_publish = NULL; +mdns_browse_func *_mdns_browse = NULL; +mdns_stop_func *_mdns_stop = NULL; +mdns_set_buddy_icon_data_func *_mdns_set_buddy_icon_data = NULL; +mdns_init_buddy_func *_mdns_init_buddy = NULL; +mdns_delete_buddy_func *_mdns_delete_buddy = NULL; +mdns_retrieve_buddy_icon_func *_mdns_retrieve_buddy_icon = NULL; * Allocate space for the dns-sd data.
--- a/libpurple/protocols/bonjour/mdns_common.h Tue Dec 29 00:37:08 2020 -0600
+++ b/libpurple/protocols/bonjour/mdns_common.h Thu Dec 31 22:00:36 2020 -0600
@@ -59,4 +59,34 @@
void bonjour_dns_sd_set_jid(PurpleAccount *account, const char *hostname);
+/**************************** + * mdns_interface functions * + ****************************/ +typedef gboolean mdns_init_session_func(BonjourDnsSd *data); +extern mdns_init_session_func *_mdns_init_session; +typedef gboolean mdns_publish_func(BonjourDnsSd *data, PublishType type, GSList *records); +extern mdns_publish_func *_mdns_publish; +typedef gboolean mdns_browse_func(BonjourDnsSd *data); +extern mdns_browse_func *_mdns_browse; +typedef void mdns_stop_func(BonjourDnsSd *data); +extern mdns_stop_func *_mdns_stop; +typedef gboolean mdns_set_buddy_icon_data_func(BonjourDnsSd *data, gconstpointer avatar_data, gsize avatar_len); +extern mdns_set_buddy_icon_data_func *_mdns_set_buddy_icon_data; +typedef void mdns_init_buddy_func(BonjourBuddy *buddy); +extern mdns_init_buddy_func *_mdns_init_buddy; +typedef void mdns_delete_buddy_func(BonjourBuddy *buddy); +extern mdns_delete_buddy_func *_mdns_delete_buddy; +typedef void mdns_retrieve_buddy_icon_func(BonjourBuddy* buddy); +extern mdns_retrieve_buddy_icon_func *_mdns_retrieve_buddy_icon; +gboolean mdns_available(void); #endif /* PURPLE_BONJOUR_MDNS_COMMON_H */
--- a/libpurple/protocols/bonjour/mdns_dns_sd.c Tue Dec 29 00:37:08 2020 -0600
+++ b/libpurple/protocols/bonjour/mdns_dns_sd.c Thu Dec 31 22:00:36 2020 -0600
@@ -23,13 +23,13 @@
-#include "mdns_interface.h"
#include "dns_sd_proxy.h"
+#include "mdns_dns_sd.h" static GSList *pending_buddies = NULL;
@@ -467,7 +467,9 @@
* mdns_interface functions *
****************************/
-gboolean _mdns_init_session(BonjourDnsSd *data) {
+dns_sd_mdns_init_session(BonjourDnsSd *data) data->mdns_impl_data = g_new0(Win32SessionImplData, 1);
bonjour_dns_sd_set_jid(data->account, g_get_host_name());
@@ -475,7 +477,9 @@
-gboolean _mdns_publish(BonjourDnsSd *data, PublishType type, GSList *records) {
+dns_sd_mdns_publish(BonjourDnsSd *data, PublishType type, GSList *records) DNSServiceErrorType errorCode = kDNSServiceErr_NoError;
@@ -536,7 +540,9 @@
-gboolean _mdns_browse(BonjourDnsSd *data) {
+dns_sd_mdns_browse(BonjourDnsSd *data) DNSServiceErrorType errorCode;
Win32SessionImplData *idata = data->mdns_impl_data;
DNSServiceRef browser_sr;
@@ -560,7 +566,9 @@
-void _mdns_stop(BonjourDnsSd *data) {
+dns_sd_mdns_stop(BonjourDnsSd *data) Win32SessionImplData *idata = data->mdns_impl_data;
@@ -583,7 +591,9 @@
data->mdns_impl_data = NULL;
-gboolean _mdns_set_buddy_icon_data(BonjourDnsSd *data, gconstpointer avatar_data, gsize avatar_len) {
+dns_sd_mdns_set_buddy_icon_data(BonjourDnsSd *data, gconstpointer avatar_data, gsize avatar_len) Win32SessionImplData *idata = data->mdns_impl_data;
DNSServiceErrorType errorCode = kDNSServiceErr_NoError;
@@ -611,11 +621,15 @@
-void _mdns_init_buddy(BonjourBuddy *buddy) {
+dns_sd_mdns_init_buddy(BonjourBuddy *buddy) buddy->mdns_impl_data = g_new0(Win32BuddyImplData, 1);
-void _mdns_delete_buddy(BonjourBuddy *buddy) {
+dns_sd_mdns_delete_buddy(BonjourBuddy *buddy) Win32BuddyImplData *idata = buddy->mdns_impl_data;
g_return_if_fail(idata != NULL);
@@ -637,7 +651,9 @@
buddy->mdns_impl_data = NULL;
-void _mdns_retrieve_buddy_icon(BonjourBuddy* buddy) {
+dns_sd_mdns_retrieve_buddy_icon(BonjourBuddy* buddy) Win32BuddyImplData *idata = buddy->mdns_impl_data;
char svc_name[kDNSServiceMaxDomainName];
@@ -670,6 +686,23 @@
purple_debug_error("bonjour", "Unable to query buddy icon record for %s. (%d)\n", buddy->name, errorCode);
+dns_sd_mdns_available(void) + if (!dns_sd_available()) { + _mdns_init_session = dns_sd_mdns_init_session; + _mdns_publish = dns_sd_mdns_publish; + _mdns_browse = dns_sd_mdns_browse; + _mdns_stop = dns_sd_mdns_stop; + _mdns_set_buddy_icon_data = dns_sd_mdns_set_buddy_icon_data; + _mdns_init_buddy = dns_sd_mdns_init_buddy; + _mdns_delete_buddy = dns_sd_mdns_delete_buddy; + _mdns_retrieve_buddy_icon = dns_sd_mdns_retrieve_buddy_icon; --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/bonjour/mdns_dns_sd.h Thu Dec 31 22:00:36 2020 -0600
@@ -0,0 +1,25 @@
+ * Purple - Internet Messaging Library + * Copyright (C) Pidgin Developers <devel@pidgin.im> + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses/>. +gboolean dns_sd_mdns_available(void); --- a/libpurple/protocols/bonjour/mdns_interface.h Tue Dec 29 00:37:08 2020 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Library General Public License for more details.
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, USA.
-#ifndef PURPLE_BONJOUR_MDNS_INTERFACE_H
-#define PURPLE_BONJOUR_MDNS_INTERFACE_H
-gboolean _mdns_init_session(BonjourDnsSd *data);
-gboolean _mdns_publish(BonjourDnsSd *data, PublishType type, GSList *records);
-gboolean _mdns_browse(BonjourDnsSd *data);
-void _mdns_stop(BonjourDnsSd *data);
-gboolean _mdns_set_buddy_icon_data(BonjourDnsSd *data, gconstpointer avatar_data, gsize avatar_len);
-void _mdns_init_buddy(BonjourBuddy *buddy);
-void _mdns_delete_buddy(BonjourBuddy *buddy);
-void _mdns_retrieve_buddy_icon(BonjourBuddy* buddy);
-#endif /* PURPLE_BONJOUR_MDNS_INTERFACE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/bonjour/mdns_win32.c Thu Dec 31 22:00:36 2020 -0600
@@ -0,0 +1,40 @@
+ * Purple - Internet Messaging Library + * Copyright (C) Pidgin Developers <devel@pidgin.im> + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses/>. +#include "mdns_common.h" +#include "mdns_dns_sd.h" +/**************************** + * mdns_interface functions * + ****************************/ + if (dns_sd_mdns_available()) { --- a/libpurple/protocols/bonjour/meson.build Tue Dec 29 00:37:08 2020 -0600
+++ b/libpurple/protocols/bonjour/meson.build Thu Dec 31 22:00:36 2020 -0600
@@ -7,7 +7,6 @@
@@ -16,7 +15,10 @@
- BONJOUR_SOURCES += ['dns_sd_proxy.c', 'mdns_dns_sd.c']
+ 'dns_sd_proxy.c', 'dns_sd_proxy.h', 'mdns_dns_sd.c', 'mdns_dns_sd.h', bonjour_link_args = ['-lnetapi32']
BONJOUR_SOURCES += ['mdns_avahi.c']