comparison libpurple/protocols/bonjour/bonjour.c @ 32672:3828a61c44da

A boring and large patch so I can merge heads.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Fri, 23 Dec 2011 08:21:58 +0000
parents 99ca503ea087
children
comparison
equal deleted inserted replaced
32671:0e69949b3e61 32672:3828a61c44da
49 49
50 const char * 50 const char *
51 bonjour_get_jid(PurpleAccount *account) 51 bonjour_get_jid(PurpleAccount *account)
52 { 52 {
53 PurpleConnection *conn = purple_account_get_connection(account); 53 PurpleConnection *conn = purple_account_get_connection(account);
54 BonjourData *bd = conn->proto_data; 54 BonjourData *bd = purple_connection_get_protocol_data(conn);
55 return bd->jid; 55 return bd->jid;
56 } 56 }
57 57
58 static void 58 static void
59 bonjour_removeallfromlocal(PurpleConnection *conn, PurpleGroup *bonjour_group) 59 bonjour_removeallfromlocal(PurpleConnection *conn, PurpleGroup *bonjour_group)
100 "http://d.pidgin.im/BonjourWindows for more information.")); 100 "http://d.pidgin.im/BonjourWindows for more information."));
101 return; 101 return;
102 } 102 }
103 #endif /* _WIN32 */ 103 #endif /* _WIN32 */
104 104
105 gc->flags |= PURPLE_CONNECTION_HTML; 105 purple_connection_set_flags(gc, PURPLE_CONNECTION_HTML);
106 gc->proto_data = bd = g_new0(BonjourData, 1); 106 bd = g_new0(BonjourData, 1);
107 purple_connection_set_protocol_data(gc, bd);
107 108
108 /* Start waiting for jabber connections (iChat style) */ 109 /* Start waiting for jabber connections (iChat style) */
109 bd->jabber_data = g_new0(BonjourJabber, 1); 110 bd->jabber_data = g_new0(BonjourJabber, 1);
110 bd->jabber_data->socket = -1; 111 bd->jabber_data->socket = -1;
111 bd->jabber_data->socket6 = -1; 112 bd->jabber_data->socket6 = -1;
155 156
156 static void 157 static void
157 bonjour_close(PurpleConnection *connection) 158 bonjour_close(PurpleConnection *connection)
158 { 159 {
159 PurpleGroup *bonjour_group; 160 PurpleGroup *bonjour_group;
160 BonjourData *bd = connection->proto_data; 161 BonjourData *bd = purple_connection_get_protocol_data(connection);
161 162
162 bonjour_group = purple_find_group(BONJOUR_GROUP_NAME); 163 bonjour_group = purple_find_group(BONJOUR_GROUP_NAME);
163 164
164 /* Remove all the bonjour buddies */ 165 /* Remove all the bonjour buddies */
165 bonjour_removeallfromlocal(connection, bonjour_group); 166 bonjour_removeallfromlocal(connection, bonjour_group);
190 } 191 }
191 192
192 if (bd != NULL) 193 if (bd != NULL)
193 g_free(bd->jid); 194 g_free(bd->jid);
194 g_free(bd); 195 g_free(bd);
195 connection->proto_data = NULL; 196 purple_connection_set_protocol_data(connection, NULL);
196 } 197 }
197 198
198 static const char * 199 static const char *
199 bonjour_list_icon(PurpleAccount *account, PurpleBuddy *buddy) 200 bonjour_list_icon(PurpleAccount *account, PurpleBuddy *buddy)
200 { 201 {
202 } 203 }
203 204
204 static int 205 static int
205 bonjour_send_im(PurpleConnection *connection, const char *to, const char *msg, PurpleMessageFlags flags) 206 bonjour_send_im(PurpleConnection *connection, const char *to, const char *msg, PurpleMessageFlags flags)
206 { 207 {
208 BonjourData *bd = purple_connection_get_protocol_data(connection);
209
207 if(!to || !msg) 210 if(!to || !msg)
208 return 0; 211 return 0;
209 212
210 return bonjour_jabber_send_message(((BonjourData*)(connection->proto_data))->jabber_data, to, msg); 213 return bonjour_jabber_send_message(bd->jabber_data, to, msg);
211 } 214 }
212 215
213 static void 216 static void
214 bonjour_set_status(PurpleAccount *account, PurpleStatus *status) 217 bonjour_set_status(PurpleAccount *account, PurpleStatus *status)
215 { 218 {
218 PurplePresence *presence; 221 PurplePresence *presence;
219 const char *message, *bonjour_status; 222 const char *message, *bonjour_status;
220 gchar *stripped; 223 gchar *stripped;
221 224
222 gc = purple_account_get_connection(account); 225 gc = purple_account_get_connection(account);
223 bd = gc->proto_data; 226 bd = purple_connection_get_protocol_data(gc);
224 presence = purple_account_get_presence(account); 227 presence = purple_account_get_presence(account);
225 228
226 message = purple_status_get_attr_string(status, "message"); 229 message = purple_status_get_attr_string(status, "message");
227 if (message == NULL) 230 if (message == NULL)
228 message = ""; 231 message = "";
251 * Bonjour manages buddies for you, and adding someone locally by 254 * Bonjour manages buddies for you, and adding someone locally by
252 * hand is stupid. Perhaps we should change libpurple not to allow adding 255 * hand is stupid. Perhaps we should change libpurple not to allow adding
253 * if there is no add_buddy callback. 256 * if there is no add_buddy callback.
254 */ 257 */
255 static void 258 static void
256 bonjour_fake_add_buddy(PurpleConnection *pc, PurpleBuddy *buddy, PurpleGroup *group) { 259 bonjour_fake_add_buddy(PurpleConnection *pc, PurpleBuddy *buddy, PurpleGroup *group, const char *message) {
257 purple_debug_error("bonjour", "Buddy '%s' manually added; removing. " 260 purple_debug_error("bonjour", "Buddy '%s' manually added; removing. "
258 "Bonjour buddies must be discovered and not manually added.\n", 261 "Bonjour buddies must be discovered and not manually added.\n",
259 purple_buddy_get_name(buddy)); 262 purple_buddy_get_name(buddy));
260 263
261 /* I suppose we could alert the user here, but it seems unnecessary. */ 264 /* I suppose we could alert the user here, but it seems unnecessary. */
304 } 307 }
305 308
306 static void 309 static void
307 bonjour_convo_closed(PurpleConnection *connection, const char *who) 310 bonjour_convo_closed(PurpleConnection *connection, const char *who)
308 { 311 {
309 PurpleBuddy *buddy = purple_find_buddy(connection->account, who); 312 PurpleBuddy *buddy = purple_find_buddy(purple_connection_get_account(connection), who);
310 BonjourBuddy *bb; 313 BonjourBuddy *bb;
311 314
312 if (buddy == NULL || (bb = purple_buddy_get_protocol_data(buddy)) == NULL) 315 if (buddy == NULL || (bb = purple_buddy_get_protocol_data(buddy)) == NULL)
313 { 316 {
314 /* 317 /*
323 } 326 }
324 327
325 static 328 static
326 void bonjour_set_buddy_icon(PurpleConnection *conn, PurpleStoredImage *img) 329 void bonjour_set_buddy_icon(PurpleConnection *conn, PurpleStoredImage *img)
327 { 330 {
328 BonjourData *bd = conn->proto_data; 331 BonjourData *bd = purple_connection_get_protocol_data(conn);
329 bonjour_dns_sd_update_buddy_icon(bd->dns_sd_data); 332 bonjour_dns_sd_update_buddy_icon(bd->dns_sd_data);
330 } 333 }
331 334
332 335
333 static char * 336 static char *
434 } 437 }
435 438
436 static void 439 static void
437 bonjour_group_buddy(PurpleConnection *connection, const char *who, const char *old_group, const char *new_group) 440 bonjour_group_buddy(PurpleConnection *connection, const char *who, const char *old_group, const char *new_group)
438 { 441 {
439 PurpleBuddy *buddy = purple_find_buddy(connection->account, who); 442 PurpleBuddy *buddy = purple_find_buddy(purple_connection_get_account(connection), who);
440 443
441 bonjour_do_group_change(buddy, new_group); 444 bonjour_do_group_change(buddy, new_group);
442 445
443 } 446 }
444 447
459 } 462 }
460 463
461 static gboolean 464 static gboolean
462 bonjour_can_receive_file(PurpleConnection *connection, const char *who) 465 bonjour_can_receive_file(PurpleConnection *connection, const char *who)
463 { 466 {
464 PurpleBuddy *buddy = purple_find_buddy(connection->account, who); 467 PurpleBuddy *buddy = purple_find_buddy(purple_connection_get_account(connection), who);
465 468
466 return (buddy != NULL && purple_buddy_get_protocol_data(buddy) != NULL); 469 return (buddy != NULL && purple_buddy_get_protocol_data(buddy) != NULL);
467 } 470 }
468 471
469 static gboolean 472 static gboolean
479 482
480 static PurplePlugin *my_protocol = NULL; 483 static PurplePlugin *my_protocol = NULL;
481 484
482 static PurplePluginProtocolInfo prpl_info = 485 static PurplePluginProtocolInfo prpl_info =
483 { 486 {
487 sizeof(PurplePluginProtocolInfo), /* struct_size */
484 OPT_PROTO_NO_PASSWORD, 488 OPT_PROTO_NO_PASSWORD,
485 NULL, /* user_splits */ 489 NULL, /* user_splits */
486 NULL, /* protocol_options */ 490 NULL, /* protocol_options */
487 {"png,gif,jpeg", 0, 0, 96, 96, 65535, PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */ 491 {"png,gif,jpeg", 0, 0, 96, 96, 65535, PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */
488 bonjour_list_icon, /* list_icon */ 492 bonjour_list_icon, /* list_icon */
519 NULL, /* chat_whisper */ 523 NULL, /* chat_whisper */
520 NULL, /* chat_send */ 524 NULL, /* chat_send */
521 NULL, /* keepalive */ 525 NULL, /* keepalive */
522 NULL, /* register_user */ 526 NULL, /* register_user */
523 NULL, /* get_cb_info */ 527 NULL, /* get_cb_info */
524 NULL, /* get_cb_away */
525 NULL, /* alias_buddy */ 528 NULL, /* alias_buddy */
526 bonjour_group_buddy, /* group_buddy */ 529 bonjour_group_buddy, /* group_buddy */
527 bonjour_rename_group, /* rename_group */ 530 bonjour_rename_group, /* rename_group */
528 NULL, /* buddy_free */ 531 NULL, /* buddy_free */
529 bonjour_convo_closed, /* convo_closed */ 532 bonjour_convo_closed, /* convo_closed */
544 NULL, /* send_raw */ 547 NULL, /* send_raw */
545 NULL, /* roomlist_room_serialize */ 548 NULL, /* roomlist_room_serialize */
546 NULL, /* unregister_user */ 549 NULL, /* unregister_user */
547 NULL, /* send_attention */ 550 NULL, /* send_attention */
548 NULL, /* get_attention_types */ 551 NULL, /* get_attention_types */
549 sizeof(PurplePluginProtocolInfo), /* struct_size */
550 NULL, /* get_account_text_table */ 552 NULL, /* get_account_text_table */
551 NULL, /* initiate_media */ 553 NULL, /* initiate_media */
552 NULL, /* get_media_caps */ 554 NULL, /* get_media_caps */
553 NULL, /* get_moods */ 555 NULL, /* get_moods */
554 NULL, /* set_public_alias */ 556 NULL, /* set_public_alias */
555 NULL, /* get_public_alias */ 557 NULL /* get_public_alias */
556 NULL, /* add_buddy_with_invite */
557 NULL /* add_buddies_with_invite */
558 }; 558 };
559 559
560 static PurplePluginInfo info = 560 static PurplePluginInfo info =
561 { 561 {
562 PURPLE_PLUGIN_MAGIC, 562 PURPLE_PLUGIN_MAGIC,