Fri, 08 Jun 2007 06:04:06 +0000
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
| 11477 | 1 | /* |
| 15884 | 2 | * purple - Bonjour Protocol Plugin |
| 11477 | 3 | * |
| 15884 | 4 | * Purple is the legal property of its developers, whose names are too numerous |
| 11477 | 5 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 6 | * source distribution. | |
| 7 | * | |
| 8 | * This program is free software; you can redistribute it and/or modify | |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 12 | * | |
| 13 | * This program is distributed in the hope that it will be useful, | |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | * GNU General Public License for more details. | |
| 17 | * | |
| 18 | * You should have received a copy of the GNU General Public License | |
| 19 | * along with this program; if not, write to the Free Software | |
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 21 | */ | |
| 22 | #include <glib.h> | |
|
12003
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
23 | #ifndef _WIN32 |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
24 | #include <pwd.h> |
|
12003
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
25 | #else |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
26 | #define UNICODE |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
27 | #include <windows.h> |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
28 | #include <lm.h> |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
29 | #endif |
| 11477 | 30 | |
| 31 | #include "internal.h" | |
|
13061
ab3ef8e402e4
[gaim-migrate @ 15423]
Mark Doliner <markdoliner@pidgin.im>
parents:
12970
diff
changeset
|
32 | |
| 11477 | 33 | #include "account.h" |
| 34 | #include "accountopt.h" | |
|
13061
ab3ef8e402e4
[gaim-migrate @ 15423]
Mark Doliner <markdoliner@pidgin.im>
parents:
12970
diff
changeset
|
35 | #include "debug.h" |
|
ab3ef8e402e4
[gaim-migrate @ 15423]
Mark Doliner <markdoliner@pidgin.im>
parents:
12970
diff
changeset
|
36 | #include "util.h" |
| 11477 | 37 | #include "version.h" |
| 38 | ||
| 39 | #include "bonjour.h" | |
|
17596
45f6190fe54a
This is a patch from Chris Davies to make Bonjour work on Windows using the Apple Bonjour framework. It turns out that the actual DNS-SD library is (3 clause) BSD licensed, so we can use it.
Daniel Atallah <datallah@pidgin.im>
parents:
16961
diff
changeset
|
40 | #include "mdns_common.h" |
| 11477 | 41 | #include "jabber.h" |
| 42 | #include "buddy.h" | |
| 43 | ||
|
12339
9333237efc4f
[gaim-migrate @ 14643]
Mark Doliner <markdoliner@pidgin.im>
parents:
12216
diff
changeset
|
44 | /* |
|
9333237efc4f
[gaim-migrate @ 14643]
Mark Doliner <markdoliner@pidgin.im>
parents:
12216
diff
changeset
|
45 | * TODO: Should implement an add_buddy callback that removes the buddy |
|
9333237efc4f
[gaim-migrate @ 14643]
Mark Doliner <markdoliner@pidgin.im>
parents:
12216
diff
changeset
|
46 | * from the local list. Bonjour manages buddies for you, and |
|
13061
ab3ef8e402e4
[gaim-migrate @ 15423]
Mark Doliner <markdoliner@pidgin.im>
parents:
12970
diff
changeset
|
47 | * adding someone locally by hand is stupid. Or, maybe even better, |
|
ab3ef8e402e4
[gaim-migrate @ 15423]
Mark Doliner <markdoliner@pidgin.im>
parents:
12970
diff
changeset
|
48 | * if a PRPL does not have an add_buddy callback then do not allow |
|
ab3ef8e402e4
[gaim-migrate @ 15423]
Mark Doliner <markdoliner@pidgin.im>
parents:
12970
diff
changeset
|
49 | * users to add buddies. |
|
12339
9333237efc4f
[gaim-migrate @ 14643]
Mark Doliner <markdoliner@pidgin.im>
parents:
12216
diff
changeset
|
50 | */ |
|
9333237efc4f
[gaim-migrate @ 14643]
Mark Doliner <markdoliner@pidgin.im>
parents:
12216
diff
changeset
|
51 | |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
52 | static char *default_firstname; |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
53 | static char *default_lastname; |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
54 | static char *default_hostname; |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
55 | |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
56 | static void |
| 15884 | 57 | bonjour_removeallfromlocal(PurpleConnection *gc) |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
58 | { |
| 15884 | 59 | PurpleAccount *account = purple_connection_get_account(gc); |
| 60 | PurpleBuddyList *blist; | |
|
15983
31740b53ecd3
Fix some reads of invalid memory when shutting down bonjour when there
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
61 | PurpleBlistNode *gnode, *cnode, *cnodenext, *bnode, *bnodenext; |
| 15884 | 62 | PurpleBuddy *buddy; |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
63 | |
| 15884 | 64 | blist = purple_get_blist(); |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
65 | if (blist == NULL) |
|
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
66 | return; |
|
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
67 | |
|
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
68 | /* Go through and remove all buddies that belong to this account */ |
|
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
69 | for (gnode = blist->root; gnode; gnode = gnode->next) |
|
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
70 | { |
| 15884 | 71 | if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
72 | continue; |
|
15983
31740b53ecd3
Fix some reads of invalid memory when shutting down bonjour when there
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
73 | for (cnode = gnode->child; cnode; cnode = cnodenext) |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
74 | { |
|
15983
31740b53ecd3
Fix some reads of invalid memory when shutting down bonjour when there
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
75 | cnodenext = cnode->next; |
| 15884 | 76 | if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
77 | continue; |
|
15983
31740b53ecd3
Fix some reads of invalid memory when shutting down bonjour when there
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
78 | for (bnode = cnode->child; bnode; bnode = bnodenext) |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
79 | { |
|
15983
31740b53ecd3
Fix some reads of invalid memory when shutting down bonjour when there
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
80 | bnodenext = bnode->next; |
| 15884 | 81 | if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
82 | continue; |
| 15884 | 83 | buddy = (PurpleBuddy *)bnode; |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
84 | if (buddy->account != account) |
|
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
85 | continue; |
| 15884 | 86 | purple_prpl_got_user_status(account, buddy->name, "offline", NULL); |
| 87 | purple_blist_remove_buddy(buddy); | |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
88 | } |
|
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
89 | } |
|
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
90 | } |
|
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
91 | } |
|
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
92 | |
|
12443
ad94864144f8
[gaim-migrate @ 14750]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12339
diff
changeset
|
93 | static void |
| 15884 | 94 | bonjour_login(PurpleAccount *account) |
| 11477 | 95 | { |
| 15884 | 96 | PurpleConnection *gc = purple_account_get_connection(account); |
|
17632
b27a15168d33
Improve Bonjour error handling when there are errors "connecting".
Daniel Atallah <datallah@pidgin.im>
parents:
17608
diff
changeset
|
97 | PurpleGroup *bonjour_group; |
|
b27a15168d33
Improve Bonjour error handling when there are errors "connecting".
Daniel Atallah <datallah@pidgin.im>
parents:
17608
diff
changeset
|
98 | BonjourData *bd; |
| 15884 | 99 | PurpleStatus *status; |
| 100 | PurplePresence *presence; | |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
101 | |
| 15884 | 102 | gc->flags |= PURPLE_CONNECTION_HTML; |
|
17632
b27a15168d33
Improve Bonjour error handling when there are errors "connecting".
Daniel Atallah <datallah@pidgin.im>
parents:
17608
diff
changeset
|
103 | gc->proto_data = bd = g_new0(BonjourData, 1); |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
104 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11718
diff
changeset
|
105 | /* Start waiting for jabber connections (iChat style) */ |
| 11477 | 106 | bd->jabber_data = g_new(BonjourJabber, 1); |
| 13971 | 107 | bd->jabber_data->port = BONJOUR_DEFAULT_PORT_INT; |
| 11477 | 108 | bd->jabber_data->account = account; |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
109 | |
| 11477 | 110 | if (bonjour_jabber_start(bd->jabber_data) == -1) { |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11718
diff
changeset
|
111 | /* Send a message about the connection error */ |
| 15884 | 112 | purple_connection_error(gc, _("Unable to listen for incoming IM connections\n")); |
| 11477 | 113 | return; |
| 114 | } | |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
115 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11718
diff
changeset
|
116 | /* Connect to the mDNS daemon looking for buddies in the LAN */ |
| 11477 | 117 | bd->dns_sd_data = bonjour_dns_sd_new(); |
| 15884 | 118 | bd->dns_sd_data->first = g_strdup(purple_account_get_string(account, "first", default_firstname)); |
| 119 | bd->dns_sd_data->last = g_strdup(purple_account_get_string(account, "last", default_lastname)); | |
| 13971 | 120 | bd->dns_sd_data->port_p2pj = bd->jabber_data->port; |
|
17608
795ce8e3d44e
Clean up Bonjour service publishing and improve XEP-0174 compliance.
Daniel Atallah <datallah@pidgin.im>
parents:
17596
diff
changeset
|
121 | /* Not engaged in AV conference */ |
|
795ce8e3d44e
Clean up Bonjour service publishing and improve XEP-0174 compliance.
Daniel Atallah <datallah@pidgin.im>
parents:
17596
diff
changeset
|
122 | bd->dns_sd_data->vc = g_strdup("!"); |
|
11834
9c0104f0b8c3
[gaim-migrate @ 14125]
Mark Doliner <markdoliner@pidgin.im>
parents:
11829
diff
changeset
|
123 | |
| 15884 | 124 | status = purple_account_get_active_status(account); |
| 125 | presence = purple_account_get_presence(account); | |
| 126 | if (purple_presence_is_available(presence)) | |
|
11834
9c0104f0b8c3
[gaim-migrate @ 14125]
Mark Doliner <markdoliner@pidgin.im>
parents:
11829
diff
changeset
|
127 | bd->dns_sd_data->status = g_strdup("avail"); |
| 15884 | 128 | else if (purple_presence_is_idle(presence)) |
|
11834
9c0104f0b8c3
[gaim-migrate @ 14125]
Mark Doliner <markdoliner@pidgin.im>
parents:
11829
diff
changeset
|
129 | bd->dns_sd_data->status = g_strdup("away"); |
|
9c0104f0b8c3
[gaim-migrate @ 14125]
Mark Doliner <markdoliner@pidgin.im>
parents:
11829
diff
changeset
|
130 | else |
|
9c0104f0b8c3
[gaim-migrate @ 14125]
Mark Doliner <markdoliner@pidgin.im>
parents:
11829
diff
changeset
|
131 | bd->dns_sd_data->status = g_strdup("dnd"); |
| 15884 | 132 | bd->dns_sd_data->msg = g_strdup(purple_status_get_attr_string(status, "message")); |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
133 | |
| 11477 | 134 | bd->dns_sd_data->account = account; |
|
11927
f9ede13499d0
[gaim-migrate @ 14218]
Mark Doliner <markdoliner@pidgin.im>
parents:
11841
diff
changeset
|
135 | if (!bonjour_dns_sd_start(bd->dns_sd_data)) |
|
f9ede13499d0
[gaim-migrate @ 14218]
Mark Doliner <markdoliner@pidgin.im>
parents:
11841
diff
changeset
|
136 | { |
| 15884 | 137 | purple_connection_error(gc, _("Unable to establish connection with the local mDNS server. Is it running?")); |
|
11927
f9ede13499d0
[gaim-migrate @ 14218]
Mark Doliner <markdoliner@pidgin.im>
parents:
11841
diff
changeset
|
138 | return; |
|
f9ede13499d0
[gaim-migrate @ 14218]
Mark Doliner <markdoliner@pidgin.im>
parents:
11841
diff
changeset
|
139 | } |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
140 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11718
diff
changeset
|
141 | /* Create a group for bonjour buddies */ |
| 15884 | 142 | bonjour_group = purple_group_new(BONJOUR_GROUP_NAME); |
| 143 | purple_blist_add_group(bonjour_group, NULL); | |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
144 | |
| 15884 | 145 | /* Show the buddy list by telling Purple we have already connected */ |
| 146 | purple_connection_set_state(gc, PURPLE_CONNECTED); | |
| 11477 | 147 | } |
| 148 | ||
|
12443
ad94864144f8
[gaim-migrate @ 14750]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12339
diff
changeset
|
149 | static void |
| 15884 | 150 | bonjour_close(PurpleConnection *connection) |
| 11477 | 151 | { |
| 15884 | 152 | PurpleGroup *bonjour_group; |
|
17632
b27a15168d33
Improve Bonjour error handling when there are errors "connecting".
Daniel Atallah <datallah@pidgin.im>
parents:
17608
diff
changeset
|
153 | BonjourData *bd = connection->proto_data; |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
154 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11718
diff
changeset
|
155 | /* Stop looking for buddies in the LAN */ |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
156 | if (bd->dns_sd_data != NULL) |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
157 | { |
| 11477 | 158 | bonjour_dns_sd_stop(bd->dns_sd_data); |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
159 | bonjour_dns_sd_free(bd->dns_sd_data); |
| 11477 | 160 | } |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
161 | |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
162 | if (bd->jabber_data != NULL) |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
163 | { |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
164 | /* Stop waiting for conversations */ |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
165 | bonjour_jabber_stop(bd->jabber_data); |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
166 | g_free(bd->jabber_data); |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
167 | } |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
168 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11718
diff
changeset
|
169 | /* Remove all the bonjour buddies */ |
|
11691
d46ace30ec7e
[gaim-migrate @ 13977]
Mark Doliner <markdoliner@pidgin.im>
parents:
11539
diff
changeset
|
170 | bonjour_removeallfromlocal(connection); |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
171 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11718
diff
changeset
|
172 | /* Delete the bonjour group */ |
| 15884 | 173 | bonjour_group = purple_find_group(BONJOUR_GROUP_NAME); |
| 13063 | 174 | if (bonjour_group != NULL) |
| 15884 | 175 | purple_blist_remove_group(bonjour_group); |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
176 | |
| 11477 | 177 | } |
| 178 | ||
|
12443
ad94864144f8
[gaim-migrate @ 14750]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12339
diff
changeset
|
179 | static const char * |
| 15884 | 180 | bonjour_list_icon(PurpleAccount *account, PurpleBuddy *buddy) |
| 11477 | 181 | { |
| 182 | return BONJOUR_ICON_NAME; | |
| 183 | } | |
| 184 | ||
|
12443
ad94864144f8
[gaim-migrate @ 14750]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12339
diff
changeset
|
185 | static int |
| 15884 | 186 | bonjour_send_im(PurpleConnection *connection, const char *to, const char *msg, PurpleMessageFlags flags) |
| 11477 | 187 | { |
| 188 | if(!to || !msg) | |
| 189 | return 0; | |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
190 | |
|
11693
1a42a66ca0f8
[gaim-migrate @ 13979]
Mark Doliner <markdoliner@pidgin.im>
parents:
11691
diff
changeset
|
191 | return bonjour_jabber_send_message(((BonjourData*)(connection->proto_data))->jabber_data, to, msg); |
| 11477 | 192 | } |
| 193 | ||
|
12443
ad94864144f8
[gaim-migrate @ 14750]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12339
diff
changeset
|
194 | static void |
| 15884 | 195 | bonjour_set_status(PurpleAccount *account, PurpleStatus *status) |
| 11477 | 196 | { |
| 15884 | 197 | PurpleConnection *gc; |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
198 | BonjourData *bd; |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
199 | gboolean disconnected; |
| 15884 | 200 | PurpleStatusType *type; |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
201 | int primitive; |
| 15884 | 202 | PurplePresence *presence; |
|
11841
85773b4974fe
[gaim-migrate @ 14132]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11839
diff
changeset
|
203 | const char *message, *bonjour_status; |
|
13061
ab3ef8e402e4
[gaim-migrate @ 15423]
Mark Doliner <markdoliner@pidgin.im>
parents:
12970
diff
changeset
|
204 | gchar *stripped; |
| 11477 | 205 | |
| 15884 | 206 | gc = purple_account_get_connection(account); |
|
11839
bb7002373bb6
[gaim-migrate @ 14130]
Mark Doliner <markdoliner@pidgin.im>
parents:
11837
diff
changeset
|
207 | bd = gc->proto_data; |
| 15884 | 208 | disconnected = purple_account_is_disconnected(account); |
| 209 | type = purple_status_get_type(status); | |
| 210 | primitive = purple_status_type_get_primitive(type); | |
| 211 | presence = purple_account_get_presence(account); | |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
212 | |
| 15884 | 213 | message = purple_status_get_attr_string(status, "message"); |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
214 | if (message == NULL) |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
215 | message = ""; |
| 15884 | 216 | stripped = purple_markup_strip_html(message); |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
217 | |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
218 | /* |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
219 | * The three possible status for Bonjour are |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
220 | * -available ("avail") |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
221 | * -idle ("away") |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
222 | * -away ("dnd") |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
223 | * Each of them can have an optional message. |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
224 | */ |
| 15884 | 225 | if (purple_presence_is_available(presence)) |
|
11841
85773b4974fe
[gaim-migrate @ 14132]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11839
diff
changeset
|
226 | bonjour_status = "avail"; |
| 15884 | 227 | else if (purple_presence_is_idle(presence)) |
|
11841
85773b4974fe
[gaim-migrate @ 14132]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11839
diff
changeset
|
228 | bonjour_status = "away"; |
|
11835
da95d476b481
[gaim-migrate @ 14126]
Mark Doliner <markdoliner@pidgin.im>
parents:
11834
diff
changeset
|
229 | else |
|
11841
85773b4974fe
[gaim-migrate @ 14132]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11839
diff
changeset
|
230 | bonjour_status = "dnd"; |
| 11477 | 231 | |
|
13061
ab3ef8e402e4
[gaim-migrate @ 15423]
Mark Doliner <markdoliner@pidgin.im>
parents:
12970
diff
changeset
|
232 | bonjour_dns_sd_send_status(bd->dns_sd_data, bonjour_status, stripped); |
|
ab3ef8e402e4
[gaim-migrate @ 15423]
Mark Doliner <markdoliner@pidgin.im>
parents:
12970
diff
changeset
|
233 | g_free(stripped); |
| 11477 | 234 | } |
| 235 | ||
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
236 | static GList * |
| 15884 | 237 | bonjour_status_types(PurpleAccount *account) |
| 11477 | 238 | { |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
239 | GList *status_types = NULL; |
| 15884 | 240 | PurpleStatusType *type; |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
241 | |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
242 | g_return_val_if_fail(account != NULL, NULL); |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
243 | |
| 15884 | 244 | type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
245 | BONJOUR_STATUS_ID_AVAILABLE, |
|
12595
8108c22aa723
[gaim-migrate @ 14925]
Richard Laager <rlaager@pidgin.im>
parents:
12489
diff
changeset
|
246 | NULL, TRUE, TRUE, FALSE, |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
247 | "message", _("Message"), |
| 15884 | 248 | purple_value_new(PURPLE_TYPE_STRING), NULL); |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
249 | status_types = g_list_append(status_types, type); |
| 11477 | 250 | |
| 15884 | 251 | type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY, |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
252 | BONJOUR_STATUS_ID_AWAY, |
|
12595
8108c22aa723
[gaim-migrate @ 14925]
Richard Laager <rlaager@pidgin.im>
parents:
12489
diff
changeset
|
253 | NULL, TRUE, TRUE, FALSE, |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
254 | "message", _("Message"), |
| 15884 | 255 | purple_value_new(PURPLE_TYPE_STRING), NULL); |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
256 | status_types = g_list_append(status_types, type); |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
257 | |
| 15884 | 258 | type = purple_status_type_new_full(PURPLE_STATUS_OFFLINE, |
|
12658
4aa7a873628d
[gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents:
12650
diff
changeset
|
259 | BONJOUR_STATUS_ID_OFFLINE, |
|
4aa7a873628d
[gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents:
12650
diff
changeset
|
260 | NULL, TRUE, TRUE, FALSE); |
|
4aa7a873628d
[gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents:
12650
diff
changeset
|
261 | status_types = g_list_append(status_types, type); |
|
4aa7a873628d
[gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents:
12650
diff
changeset
|
262 | |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
263 | return status_types; |
| 11477 | 264 | } |
| 265 | ||
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
266 | static void |
| 15884 | 267 | bonjour_convo_closed(PurpleConnection *connection, const char *who) |
| 11477 | 268 | { |
| 15884 | 269 | PurpleBuddy *buddy = purple_find_buddy(connection->account, who); |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
270 | |
|
11966
ad12fc2943ca
[gaim-migrate @ 14258]
Mark Doliner <markdoliner@pidgin.im>
parents:
11927
diff
changeset
|
271 | if (buddy == NULL) |
|
12595
8108c22aa723
[gaim-migrate @ 14925]
Richard Laager <rlaager@pidgin.im>
parents:
12489
diff
changeset
|
272 | { |
|
11966
ad12fc2943ca
[gaim-migrate @ 14258]
Mark Doliner <markdoliner@pidgin.im>
parents:
11927
diff
changeset
|
273 | /* |
|
ad12fc2943ca
[gaim-migrate @ 14258]
Mark Doliner <markdoliner@pidgin.im>
parents:
11927
diff
changeset
|
274 | * This buddy is not in our buddy list, and therefore does not really |
|
ad12fc2943ca
[gaim-migrate @ 14258]
Mark Doliner <markdoliner@pidgin.im>
parents:
11927
diff
changeset
|
275 | * exist, so we won't have any data about them. |
|
ad12fc2943ca
[gaim-migrate @ 14258]
Mark Doliner <markdoliner@pidgin.im>
parents:
11927
diff
changeset
|
276 | */ |
|
ad12fc2943ca
[gaim-migrate @ 14258]
Mark Doliner <markdoliner@pidgin.im>
parents:
11927
diff
changeset
|
277 | return; |
|
12595
8108c22aa723
[gaim-migrate @ 14925]
Richard Laager <rlaager@pidgin.im>
parents:
12489
diff
changeset
|
278 | } |
|
11966
ad12fc2943ca
[gaim-migrate @ 14258]
Mark Doliner <markdoliner@pidgin.im>
parents:
11927
diff
changeset
|
279 | |
|
17660
23c712d0a795
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <datallah@pidgin.im>
parents:
17632
diff
changeset
|
280 | bonjour_jabber_close_conversation(buddy); |
| 11477 | 281 | } |
| 282 | ||
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
283 | static char * |
| 15884 | 284 | bonjour_status_text(PurpleBuddy *buddy) |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
285 | { |
| 15884 | 286 | PurplePresence *presence; |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
287 | |
| 15884 | 288 | presence = purple_buddy_get_presence(buddy); |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
289 | |
| 15884 | 290 | if (purple_presence_is_online(presence) && !purple_presence_is_available(presence)) |
|
15872
d4506f8656ab
Mark "Away" for translation
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15524
diff
changeset
|
291 | return g_strdup(_("Away")); |
|
12339
9333237efc4f
[gaim-migrate @ 14643]
Mark Doliner <markdoliner@pidgin.im>
parents:
12216
diff
changeset
|
292 | |
|
9333237efc4f
[gaim-migrate @ 14643]
Mark Doliner <markdoliner@pidgin.im>
parents:
12216
diff
changeset
|
293 | return NULL; |
| 11477 | 294 | } |
| 295 | ||
|
12970
c2f3b4dcf711
[gaim-migrate @ 15323]
Richard Laager <rlaager@pidgin.im>
parents:
12943
diff
changeset
|
296 | static void |
| 15884 | 297 | bonjour_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean full) |
| 11477 | 298 | { |
| 15884 | 299 | PurplePresence *presence; |
| 300 | PurpleStatus *status; | |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
301 | const char *status_description; |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
302 | const char *message; |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
303 | |
| 15884 | 304 | presence = purple_buddy_get_presence(buddy); |
| 305 | status = purple_presence_get_active_status(presence); | |
| 306 | message = purple_status_get_attr_string(status, "message"); | |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
307 | |
| 15884 | 308 | if (purple_presence_is_available(presence)) |
| 309 | status_description = purple_status_get_name(status); | |
| 310 | else if (purple_presence_is_idle(presence)) | |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
311 | status_description = _("Idle"); |
|
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
312 | else |
| 15884 | 313 | status_description = purple_status_get_name(status); |
|
11496
0f61069a4a3f
[gaim-migrate @ 13740]
Mark Doliner <markdoliner@pidgin.im>
parents:
11477
diff
changeset
|
314 | |
| 15884 | 315 | purple_notify_user_info_add_pair(user_info, _("Status"), status_description); |
|
11519
abb61e69b1cf
[gaim-migrate @ 13764]
Mark Doliner <markdoliner@pidgin.im>
parents:
11515
diff
changeset
|
316 | if (message != NULL) |
| 15884 | 317 | purple_notify_user_info_add_pair(user_info, _("Message"), message); |
| 11477 | 318 | } |
| 319 | ||
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
320 | static gboolean |
| 15884 | 321 | plugin_unload(PurplePlugin *plugin) |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
322 | { |
|
17660
23c712d0a795
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <datallah@pidgin.im>
parents:
17632
diff
changeset
|
323 | /* These shouldn't happen here because they are allocated in _init() */ |
|
23c712d0a795
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <datallah@pidgin.im>
parents:
17632
diff
changeset
|
324 | |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
325 | g_free(default_firstname); |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
326 | g_free(default_lastname); |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
327 | g_free(default_hostname); |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
328 | |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
329 | return TRUE; |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
330 | } |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
331 | |
| 15884 | 332 | static PurplePlugin *my_protocol = NULL; |
| 11477 | 333 | |
| 15884 | 334 | static PurplePluginProtocolInfo prpl_info = |
| 11477 | 335 | { |
| 336 | OPT_PROTO_NO_PASSWORD, | |
| 337 | NULL, /* user_splits */ | |
| 338 | NULL, /* protocol_options */ | |
| 15884 | 339 | /* {"png", 0, 0, 96, 96, 0, PURPLE_ICON_SCALE_DISPLAY}, */ /* icon_spec */ |
| 13971 | 340 | NO_BUDDY_ICONS, /* not yet */ /* icon_spec */ |
| 11477 | 341 | bonjour_list_icon, /* list_icon */ |
|
15872
d4506f8656ab
Mark "Away" for translation
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15524
diff
changeset
|
342 | NULL, /* list_emblem */ |
| 11477 | 343 | bonjour_status_text, /* status_text */ |
| 344 | bonjour_tooltip_text, /* tooltip_text */ | |
| 345 | bonjour_status_types, /* status_types */ | |
| 346 | NULL, /* blist_node_menu */ | |
| 347 | NULL, /* chat_info */ | |
| 348 | NULL, /* chat_info_defaults */ | |
| 349 | bonjour_login, /* login */ | |
| 350 | bonjour_close, /* close */ | |
| 351 | bonjour_send_im, /* send_im */ | |
| 352 | NULL, /* set_info */ | |
| 353 | NULL, /* send_typing */ | |
| 354 | NULL, /* get_info */ | |
| 355 | bonjour_set_status, /* set_status */ | |
| 356 | NULL, /* set_idle */ | |
| 357 | NULL, /* change_passwd */ | |
| 358 | NULL, /* add_buddy */ | |
| 359 | NULL, /* add_buddies */ | |
| 360 | NULL, /* remove_buddy */ | |
| 361 | NULL, /* remove_buddies */ | |
| 362 | NULL, /* add_permit */ | |
| 363 | NULL, /* add_deny */ | |
| 364 | NULL, /* rem_permit */ | |
| 365 | NULL, /* rem_deny */ | |
| 366 | NULL, /* set_permit_deny */ | |
| 367 | NULL, /* join_chat */ | |
| 368 | NULL, /* reject_chat */ | |
| 369 | NULL, /* get_chat_name */ | |
| 370 | NULL, /* chat_invite */ | |
| 371 | NULL, /* chat_leave */ | |
| 372 | NULL, /* chat_whisper */ | |
| 373 | NULL, /* chat_send */ | |
| 374 | NULL, /* keepalive */ | |
| 375 | NULL, /* register_user */ | |
| 376 | NULL, /* get_cb_info */ | |
| 377 | NULL, /* get_cb_away */ | |
| 378 | NULL, /* alias_buddy */ | |
| 379 | NULL, /* group_buddy */ | |
| 380 | NULL, /* rename_group */ | |
| 381 | NULL, /* buddy_free */ | |
| 382 | bonjour_convo_closed, /* convo_closed */ | |
| 383 | NULL, /* normalize */ | |
| 384 | NULL, /* set_buddy_icon */ | |
| 385 | NULL, /* remove_group */ | |
| 386 | NULL, /* get_cb_real_name */ | |
| 387 | NULL, /* set_chat_topic */ | |
| 388 | NULL, /* find_blist_chat */ | |
| 389 | NULL, /* roomlist_get_list */ | |
| 390 | NULL, /* roomlist_cancel */ | |
| 391 | NULL, /* roomlist_expand_category */ | |
| 392 | NULL, /* can_receive_file */ | |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
12003
diff
changeset
|
393 | NULL, /* send_file */ |
|
12607
4622f0adedf4
[gaim-migrate @ 14943]
Mark Doliner <markdoliner@pidgin.im>
parents:
12595
diff
changeset
|
394 | NULL, /* new_xfer */ |
|
12650
ca70a14f4994
[gaim-migrate @ 14988]
Mark Doliner <markdoliner@pidgin.im>
parents:
12607
diff
changeset
|
395 | NULL, /* offline_message */ |
|
12607
4622f0adedf4
[gaim-migrate @ 14943]
Mark Doliner <markdoliner@pidgin.im>
parents:
12595
diff
changeset
|
396 | NULL, /* whiteboard_prpl_ops */ |
|
15217
53af6e98dfff
[gaim-migrate @ 17941]
Mark Doliner <markdoliner@pidgin.im>
parents:
14604
diff
changeset
|
397 | NULL, /* send_raw */ |
|
53af6e98dfff
[gaim-migrate @ 17941]
Mark Doliner <markdoliner@pidgin.im>
parents:
14604
diff
changeset
|
398 | NULL, /* roomlist_room_serialize */ |
|
16776
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
399 | |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
400 | /* padding */ |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
401 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
402 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
403 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
404 | NULL |
| 11477 | 405 | }; |
| 406 | ||
| 15884 | 407 | static PurplePluginInfo info = |
| 11477 | 408 | { |
| 15884 | 409 | PURPLE_PLUGIN_MAGIC, |
| 410 | PURPLE_MAJOR_VERSION, | |
| 411 | PURPLE_MINOR_VERSION, | |
| 412 | PURPLE_PLUGIN_PROTOCOL, /**< type */ | |
| 11477 | 413 | NULL, /**< ui_requirement */ |
| 414 | 0, /**< flags */ | |
| 415 | NULL, /**< dependencies */ | |
| 15884 | 416 | PURPLE_PRIORITY_DEFAULT, /**< priority */ |
| 11477 | 417 | |
| 418 | "prpl-bonjour", /**< id */ | |
| 419 | "Bonjour", /**< name */ | |
| 420 | VERSION, /**< version */ | |
| 421 | /** summary */ | |
| 422 | N_("Bonjour Protocol Plugin"), | |
| 423 | /** description */ | |
| 424 | N_("Bonjour Protocol Plugin"), | |
| 425 | NULL, /**< author */ | |
| 15884 | 426 | PURPLE_WEBSITE, /**< homepage */ |
| 11477 | 427 | |
| 428 | NULL, /**< load */ | |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
429 | plugin_unload, /**< unload */ |
| 11477 | 430 | NULL, /**< destroy */ |
| 431 | ||
| 432 | NULL, /**< ui_info */ | |
| 433 | &prpl_info, /**< extra_info */ | |
| 434 | NULL, /**< prefs_info */ | |
|
16776
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
435 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
436 | |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
437 | /* padding */ |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
438 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
439 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
15996
diff
changeset
|
440 | NULL, |
| 11477 | 441 | NULL |
| 442 | }; | |
| 443 | ||
| 444 | static void | |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
445 | initialize_default_account_values() |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
446 | { |
|
13192
77a782e38011
[gaim-migrate @ 15554]
Mark Doliner <markdoliner@pidgin.im>
parents:
13076
diff
changeset
|
447 | #ifdef _WIN32 |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
448 | char *fullname = NULL; |
|
13192
77a782e38011
[gaim-migrate @ 15554]
Mark Doliner <markdoliner@pidgin.im>
parents:
13076
diff
changeset
|
449 | #else |
|
77a782e38011
[gaim-migrate @ 15554]
Mark Doliner <markdoliner@pidgin.im>
parents:
13076
diff
changeset
|
450 | struct passwd *info; |
|
77a782e38011
[gaim-migrate @ 15554]
Mark Doliner <markdoliner@pidgin.im>
parents:
13076
diff
changeset
|
451 | const char *fullname = NULL; |
|
77a782e38011
[gaim-migrate @ 15554]
Mark Doliner <markdoliner@pidgin.im>
parents:
13076
diff
changeset
|
452 | #endif |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
453 | char *splitpoint = NULL; |
|
16823
c505ca263924
The last name from /etc/passwd may have additional comma-delimited data which we should ignore when determining the default Bonjour name. Fixes #477
Evan Schoenberg <evands@pidgin.im>
parents:
16799
diff
changeset
|
454 | char *tmp; |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
455 | char hostname[255]; |
|
13192
77a782e38011
[gaim-migrate @ 15554]
Mark Doliner <markdoliner@pidgin.im>
parents:
13076
diff
changeset
|
456 | |
|
12003
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
457 | #ifndef _WIN32 |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
458 | /* Try to figure out the user's real name */ |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
459 | info = getpwuid(getuid()); |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
460 | if ((info != NULL) && (info->pw_gecos != NULL) && (info->pw_gecos[0] != '\0')) |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
461 | fullname = info->pw_gecos; |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
462 | else if ((info != NULL) && (info->pw_name != NULL) && (info->pw_name[0] != '\0')) |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
463 | fullname = info->pw_name; |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
464 | else if (((fullname = getlogin()) != NULL) && (fullname[0] != '\0')) |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
465 | ; |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
466 | else |
| 15996 | 467 | fullname = _("Purple Person"); |
|
13076
84dfc467ddbd
[gaim-migrate @ 15437]
Mark Doliner <markdoliner@pidgin.im>
parents:
13063
diff
changeset
|
468 | /* Make sure fullname is valid UTF-8. If not, try to convert it. */ |
|
84dfc467ddbd
[gaim-migrate @ 15437]
Mark Doliner <markdoliner@pidgin.im>
parents:
13063
diff
changeset
|
469 | if (!g_utf8_validate(fullname, -1, NULL)) |
|
84dfc467ddbd
[gaim-migrate @ 15437]
Mark Doliner <markdoliner@pidgin.im>
parents:
13063
diff
changeset
|
470 | { |
|
84dfc467ddbd
[gaim-migrate @ 15437]
Mark Doliner <markdoliner@pidgin.im>
parents:
13063
diff
changeset
|
471 | gchar *tmp; |
|
84dfc467ddbd
[gaim-migrate @ 15437]
Mark Doliner <markdoliner@pidgin.im>
parents:
13063
diff
changeset
|
472 | tmp = g_locale_to_utf8(fullname, -1, NULL, NULL, NULL); |
|
84dfc467ddbd
[gaim-migrate @ 15437]
Mark Doliner <markdoliner@pidgin.im>
parents:
13063
diff
changeset
|
473 | if ((tmp == NULL) || (*tmp == '\0')) |
|
15498
2ee3112b6f24
This should be the last of the string changes
Sean Egan <seanegan@pidgin.im>
parents:
15444
diff
changeset
|
474 | fullname = _("Purple Person"); |
|
13076
84dfc467ddbd
[gaim-migrate @ 15437]
Mark Doliner <markdoliner@pidgin.im>
parents:
13063
diff
changeset
|
475 | } |
|
84dfc467ddbd
[gaim-migrate @ 15437]
Mark Doliner <markdoliner@pidgin.im>
parents:
13063
diff
changeset
|
476 | |
|
12003
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
477 | #else |
| 15884 | 478 | FARPROC myNetUserGetInfo = wpurple_find_and_loadproc("Netapi32.dll", |
|
12003
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
479 | "NetUserGetInfo"); |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
480 | |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
481 | if (myNetUserGetInfo) { |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
482 | LPUSER_INFO_10 user_info = NULL; |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
483 | LPSERVER_INFO_100 server_info = NULL; |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
484 | wchar_t *servername = NULL; |
|
17596
45f6190fe54a
This is a patch from Chris Davies to make Bonjour work on Windows using the Apple Bonjour framework. It turns out that the actual DNS-SD library is (3 clause) BSD licensed, so we can use it.
Daniel Atallah <datallah@pidgin.im>
parents:
16961
diff
changeset
|
485 | wchar_t username[UNLEN + 1]; |
|
45f6190fe54a
This is a patch from Chris Davies to make Bonjour work on Windows using the Apple Bonjour framework. It turns out that the actual DNS-SD library is (3 clause) BSD licensed, so we can use it.
Daniel Atallah <datallah@pidgin.im>
parents:
16961
diff
changeset
|
486 | DWORD dwLenUsername = UNLEN + 1; |
| 15884 | 487 | FARPROC myNetServerEnum = wpurple_find_and_loadproc( |
|
12003
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
488 | "Netapi32.dll", "NetServerEnum"); |
| 15884 | 489 | FARPROC myNetApiBufferFree = wpurple_find_and_loadproc( |
|
12003
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
490 | "Netapi32.dll", "NetApiBufferFree"); |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
491 | |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
492 | if (myNetServerEnum && myNetApiBufferFree) { |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
493 | DWORD dwEntriesRead = 0; |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
494 | DWORD dwTotalEntries = 0; |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
495 | DWORD dwResumeHandle = 0; |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
496 | |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
497 | NET_API_STATUS nStatus = (myNetServerEnum)(NULL, 100, |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
498 | &server_info, MAX_PREFERRED_LENGTH, |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
499 | &dwEntriesRead, &dwTotalEntries, |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
500 | SV_TYPE_DOMAIN_CTRL, NULL, &dwResumeHandle); |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
501 | |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
502 | if ((nStatus == NERR_Success |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
503 | || nStatus == ERROR_MORE_DATA) |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
504 | && dwEntriesRead > 0) { |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
505 | servername = server_info->sv100_name; |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
506 | } else { |
| 15884 | 507 | purple_debug_warning("bonjour", "Unable to look up domain controller. NET_API_STATUS = %d, Entries Read = %d, Total Entries = %d\n", nStatus, dwEntriesRead, dwTotalEntries); |
|
12003
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
508 | } |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
509 | } |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
510 | |
|
17596
45f6190fe54a
This is a patch from Chris Davies to make Bonjour work on Windows using the Apple Bonjour framework. It turns out that the actual DNS-SD library is (3 clause) BSD licensed, so we can use it.
Daniel Atallah <datallah@pidgin.im>
parents:
16961
diff
changeset
|
511 | if (!GetUserNameW((LPWSTR) &username, &dwLenUsername)) { |
| 15884 | 512 | purple_debug_warning("bonjour", |
|
12003
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
513 | "Unable to look up username\n"); |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
514 | } |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
515 | |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
516 | if (username != NULL && *username != '\0' |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
517 | && (myNetUserGetInfo)(servername, username, 10, |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
518 | &user_info) == NERR_Success) { |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
519 | if (user_info != NULL) { |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
520 | fullname = g_utf16_to_utf8( |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
521 | user_info->usri10_full_name, |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
522 | -1, NULL, NULL, NULL); |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
523 | } |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
524 | } |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
525 | if (user_info != NULL) |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
526 | (myNetApiBufferFree)(user_info); |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
527 | if (server_info != NULL) |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
528 | (myNetApiBufferFree)(server_info); |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
529 | } |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
530 | |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
531 | if (!fullname) |
|
15498
2ee3112b6f24
This should be the last of the string changes
Sean Egan <seanegan@pidgin.im>
parents:
15444
diff
changeset
|
532 | fullname = g_strdup(_("Purple Person")); |
|
12003
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
533 | #endif |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
534 | |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
535 | /* Split the real name into a first and last name */ |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
536 | splitpoint = strchr(fullname, ' '); |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
537 | if (splitpoint != NULL) |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
538 | { |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
539 | default_firstname = g_strndup(fullname, splitpoint - fullname); |
|
16823
c505ca263924
The last name from /etc/passwd may have additional comma-delimited data which we should ignore when determining the default Bonjour name. Fixes #477
Evan Schoenberg <evands@pidgin.im>
parents:
16799
diff
changeset
|
540 | tmp = &splitpoint[1]; |
|
c505ca263924
The last name from /etc/passwd may have additional comma-delimited data which we should ignore when determining the default Bonjour name. Fixes #477
Evan Schoenberg <evands@pidgin.im>
parents:
16799
diff
changeset
|
541 | |
|
c505ca263924
The last name from /etc/passwd may have additional comma-delimited data which we should ignore when determining the default Bonjour name. Fixes #477
Evan Schoenberg <evands@pidgin.im>
parents:
16799
diff
changeset
|
542 | /* The last name may be followed by a comma and additional data. |
|
c505ca263924
The last name from /etc/passwd may have additional comma-delimited data which we should ignore when determining the default Bonjour name. Fixes #477
Evan Schoenberg <evands@pidgin.im>
parents:
16799
diff
changeset
|
543 | * Only use the last name itself. |
|
c505ca263924
The last name from /etc/passwd may have additional comma-delimited data which we should ignore when determining the default Bonjour name. Fixes #477
Evan Schoenberg <evands@pidgin.im>
parents:
16799
diff
changeset
|
544 | */ |
|
c505ca263924
The last name from /etc/passwd may have additional comma-delimited data which we should ignore when determining the default Bonjour name. Fixes #477
Evan Schoenberg <evands@pidgin.im>
parents:
16799
diff
changeset
|
545 | splitpoint = strchr(tmp, ','); |
|
c505ca263924
The last name from /etc/passwd may have additional comma-delimited data which we should ignore when determining the default Bonjour name. Fixes #477
Evan Schoenberg <evands@pidgin.im>
parents:
16799
diff
changeset
|
546 | if (splitpoint != NULL) |
|
17596
45f6190fe54a
This is a patch from Chris Davies to make Bonjour work on Windows using the Apple Bonjour framework. It turns out that the actual DNS-SD library is (3 clause) BSD licensed, so we can use it.
Daniel Atallah <datallah@pidgin.im>
parents:
16961
diff
changeset
|
547 | default_lastname = g_strndup(tmp, splitpoint - tmp); |
|
16823
c505ca263924
The last name from /etc/passwd may have additional comma-delimited data which we should ignore when determining the default Bonjour name. Fixes #477
Evan Schoenberg <evands@pidgin.im>
parents:
16799
diff
changeset
|
548 | else |
|
c505ca263924
The last name from /etc/passwd may have additional comma-delimited data which we should ignore when determining the default Bonjour name. Fixes #477
Evan Schoenberg <evands@pidgin.im>
parents:
16799
diff
changeset
|
549 | default_lastname = g_strdup(tmp); |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
550 | } |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
551 | else |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
552 | { |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
553 | default_firstname = g_strdup(fullname); |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
554 | default_lastname = g_strdup(""); |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
555 | } |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
556 | |
|
12003
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
557 | #ifdef _WIN32 |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
558 | g_free(fullname); |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
559 | #endif |
|
6f6cbf74cb27
[gaim-migrate @ 14296]
Daniel Atallah <datallah@pidgin.im>
parents:
11984
diff
changeset
|
560 | |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
561 | /* Try to figure out a good host name to use */ |
|
13972
50b7226d8519
[gaim-migrate @ 16408]
Mark Doliner <markdoliner@pidgin.im>
parents:
13971
diff
changeset
|
562 | /* TODO: Avoid 'localhost,' if possible */ |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
563 | if (gethostname(hostname, 255) != 0) { |
| 15996 | 564 | purple_debug_warning("bonjour", "Error when getting host name: %s. Using \"localhost.\"\n", |
| 565 | strerror(errno)); | |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
566 | strcpy(hostname, "localhost"); |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
567 | } |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
568 | default_hostname = g_strdup(hostname); |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
569 | } |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
570 | |
|
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
571 | static void |
| 15884 | 572 | init_plugin(PurplePlugin *plugin) |
| 11477 | 573 | { |
| 15884 | 574 | PurpleAccountUserSplit *split; |
| 575 | PurpleAccountOption *option; | |
| 11477 | 576 | |
|
11984
0ac04d1651b6
[gaim-migrate @ 14277]
Mark Doliner <markdoliner@pidgin.im>
parents:
11966
diff
changeset
|
577 | initialize_default_account_values(); |
| 11477 | 578 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11718
diff
changeset
|
579 | /* Creating the user splits */ |
| 15884 | 580 | split = purple_account_user_split_new(_("Hostname"), default_hostname, '@'); |
| 11477 | 581 | prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
582 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11718
diff
changeset
|
583 | /* Creating the options for the protocol */ |
| 15884 | 584 | option = purple_account_option_string_new(_("First name"), "first", default_firstname); |
| 11477 | 585 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 586 | ||
| 15884 | 587 | option = purple_account_option_string_new(_("Last name"), "last", default_lastname); |
| 11477 | 588 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 589 | ||
| 15884 | 590 | option = purple_account_option_string_new(_("E-mail"), "email", ""); |
| 11477 | 591 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
11539
fbabe3f89777
[gaim-migrate @ 13794]
Mark Doliner <markdoliner@pidgin.im>
parents:
11519
diff
changeset
|
592 | |
| 15884 | 593 | option = purple_account_option_string_new(_("AIM Account"), "AIM", ""); |
| 13968 | 594 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 595 | ||
|
16961
b6955f946f8f
s/Jabber/XMPP in user-visible places.
Richard Laager <rlaager@pidgin.im>
parents:
16823
diff
changeset
|
596 | option = purple_account_option_string_new(_("XMPP Account"), "jid", ""); |
| 13968 | 597 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 598 | ||
| 11477 | 599 | my_protocol = plugin; |
| 600 | } | |
| 601 | ||
| 15884 | 602 | PURPLE_INIT_PLUGIN(bonjour, init_plugin, info); |