pidgin.next.minor: 8490194d: Finished moving to api for bonjour
grim at pidgin.im
grim at pidgin.im
Thu Oct 30 23:45:37 EDT 2008
-----------------------------------------------------------------
Revision: 8490194de528b3aa4c7fb94ddc2c204f54b0f4d5
Ancestor: 4adceb089924503f9d143beefb3ca54898ec3cb2
Author: grim at pidgin.im
Date: 2008-10-31T01:22:53
Branch: im.pidgin.pidgin.next.minor
URL: http://d.pidgin.im/viewmtn/revision/info/8490194de528b3aa4c7fb94ddc2c204f54b0f4d5
Modified files:
libpurple/protocols/bonjour/bonjour_ft.c
libpurple/protocols/bonjour/jabber.c
libpurple/protocols/bonjour/mdns_avahi.c
ChangeLog:
Finished moving to api for bonjour
-------------- next part --------------
============================================================
--- libpurple/protocols/bonjour/bonjour_ft.c 655f82b2b35b210d3fce3d3675088eaeb79e3a1f
+++ libpurple/protocols/bonjour/bonjour_ft.c 201c2e4880a0f2ad75fcbf0260ccacd129293e59
@@ -386,10 +386,9 @@ bonjour_xfer_init(PurpleXfer *xfer)
buddy = purple_find_buddy(xfer->account, xfer->who);
/* this buddy is offline. */
- if (buddy == NULL || buddy->proto_data == NULL)
+ if (buddy == NULL || (bb = purple_buddy_get_protocol_data(buddy)) == NULL)
return;
- bb = (BonjourBuddy *)buddy->proto_data;
/* Assume it is the first IP. We could do something like keep track of which one is in use or something. */
if (bb->ips)
xf->buddy_ip = g_strdup(bb->ips->data);
@@ -410,6 +409,7 @@ xep_si_parse(PurpleConnection *pc, xmlno
const char *type, *id;
BonjourData *bd;
PurpleXfer *xfer;
+ const gchar *name = NULL;
if(pc == NULL || packet == NULL || pb == NULL)
return;
@@ -419,6 +419,8 @@ xep_si_parse(PurpleConnection *pc, xmlno
purple_debug_info("bonjour", "xep-si-parse.\n");
+ name = purple_buddy_get_name(pb);
+
type = xmlnode_get_attrib(packet, "type");
id = xmlnode_get_attrib(packet, "id");
if(type) {
@@ -446,31 +448,34 @@ xep_si_parse(PurpleConnection *pc, xmlno
/* TODO: Make sure that it is advertising a bytestreams transfer */
- bonjour_xfer_receive(pc, id, sid, pb->name, filesize, filename, XEP_BYTESTREAMS);
+ bonjour_xfer_receive(pc, id, sid, name, filesize, filename, XEP_BYTESTREAMS);
parsed_receive = TRUE;
}
if (!parsed_receive) {
+ BonjourData *bd = purple_connection_get_protocol_data(pc);
+
purple_debug_info("bonjour", "rejecting unrecognized si SET offer.\n");
- xep_ft_si_reject((BonjourData *)pc->proto_data, id, pb->name, "403", "cancel");
+ xep_ft_si_reject(bd, id, name, "403", "cancel");
/*TODO: Send Cancel (501) */
}
} else if(!strcmp(type, "result")) {
purple_debug_info("bonjour", "si offer Message type - RESULT.\n");
- xfer = bonjour_si_xfer_find(bd, id, pb->name);
+ xfer = bonjour_si_xfer_find(bd, id, name);
if(xfer == NULL) {
+ BonjourData *bd = purple_connection_get_protocol_data(pc);
purple_debug_info("bonjour", "xfer find fail.\n");
- xep_ft_si_reject((BonjourData *)pc->proto_data, id, pb->name, "403", "cancel");
+ xep_ft_si_reject(bd, id, name, "403", "cancel");
} else
bonjour_bytestreams_init(xfer);
} else if(!strcmp(type, "error")) {
purple_debug_info("bonjour", "si offer Message type - ERROR.\n");
- xfer = bonjour_si_xfer_find(bd, id, pb->name);
+ xfer = bonjour_si_xfer_find(bd, id, name);
if(xfer == NULL)
purple_debug_info("bonjour", "xfer find fail.\n");
@@ -498,7 +503,7 @@ xep_bytestreams_parse(PurpleConnection *
purple_debug_info("bonjour", "xep-bytestreams-parse.\n");
type = xmlnode_get_attrib(packet, "type");
- from = pb->name;
+ from = purple_buddy_get_name(pb);
query = xmlnode_get_child(packet,"query");
if(type) {
if(!strcmp(type, "set")) {
@@ -838,8 +843,10 @@ bonjour_bytestreams_connect(PurpleXfer *
static void
bonjour_bytestreams_connect(PurpleXfer *xfer, PurpleBuddy *pb)
{
+ PurpleAccount *account = NULL;
XepXfer *xf;
char dstaddr[41];
+ const gchar *name = NULL;
unsigned char hashval[20];
char *p;
int i;
@@ -853,7 +860,10 @@ bonjour_bytestreams_connect(PurpleXfer *
if(!xf)
return;
- p = g_strdup_printf("%s%s%s", xf->sid, pb->name, purple_account_get_username(pb->account));
+ name = purple_buddy_get_name(pb);
+ account = purple_buddy_get_account(pb);
+
+ p = g_strdup_printf("%s%s%s", xf->sid, name, purple_account_get_username(account));
purple_cipher_digest_region("sha1", (guchar *)p, strlen(p),
sizeof(hashval), hashval, NULL);
g_free(p);
============================================================
--- libpurple/protocols/bonjour/jabber.c 11233ea49ef6419e39bb1dd414b237b556f52d49
+++ libpurple/protocols/bonjour/jabber.c c887dceaf76dcd5276b740de04b636e20f54785c
@@ -240,17 +240,21 @@ _match_buddies_by_address(gpointer key,
_match_buddies_by_address(gpointer key, gpointer value, gpointer data)
{
PurpleBuddy *pb = value;
+ PurpleAccount *account = NULL;
+ BonjourBuddy *bb = NULL;
struct _match_buddies_by_address_t *mbba = data;
+ account = purple_buddy_get_account(pb);
+ bb = purple_buddy_get_protocol_data(pb);
+
/*
* If the current PurpleBuddy's data is not null and the PurpleBuddy's account
* is the same as the account requesting the check then continue to determine
* whether one of the buddies IPs matches the target IP.
*/
- if (mbba->jdata->account == pb->account && pb->proto_data != NULL)
+ if (mbba->jdata->account == account && bb != NULL)
{
const char *ip;
- BonjourBuddy *bb = pb->proto_data;
GSList *tmp = bb->ips;
while(tmp) {
@@ -268,7 +272,7 @@ _send_data_write_cb(gpointer data, gint
_send_data_write_cb(gpointer data, gint source, PurpleInputCondition cond)
{
PurpleBuddy *pb = data;
- BonjourBuddy *bb = pb->proto_data;
+ BonjourBuddy *bb = purple_buddy_get_protocol_data(pb);
BonjourJabberConversation *bconv = bb->conversation;
int ret, writelen;
@@ -285,13 +289,16 @@ _send_data_write_cb(gpointer data, gint
if (ret < 0 && errno == EAGAIN)
return;
else if (ret <= 0) {
- PurpleConversation *conv;
+ PurpleConversation *conv = NULL;
+ PurpleAccount *account = NULL;
const char *error = g_strerror(errno);
purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n",
purple_buddy_get_name(pb), error ? error : "(null)");
- conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account);
+ account = purple_buddy_get_account(pb);
+
+ conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account);
if (conv != NULL)
purple_conversation_write(conv, NULL,
_("Unable to send message."),
@@ -310,7 +317,7 @@ _send_data(PurpleBuddy *pb, char *messag
{
gint ret;
int len = strlen(message);
- BonjourBuddy *bb = pb->proto_data;
+ BonjourBuddy *bb = purple_buddy_get_protocol_data(pb);
BonjourJabberConversation *bconv = bb->conversation;
/* If we're not ready to actually send, append it to the buffer */
@@ -328,13 +335,16 @@ _send_data(PurpleBuddy *pb, char *messag
if (ret == -1 && errno == EAGAIN)
ret = 0;
else if (ret <= 0) {
- PurpleConversation *conv;
+ PurpleConversation *conv = NULL;
+ PurpleAccount *account = NULL;
const char *error = g_strerror(errno);
purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n",
purple_buddy_get_name(pb), error ? error : "(null)");
- conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account);
+ account = purple_buddy_get_account(pb);
+
+ conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account);
if (conv != NULL)
purple_conversation_write(conv, NULL,
_("Unable to send message."),
@@ -386,9 +396,11 @@ _client_socket_handler(gpointer data, gi
purple_debug_warning("bonjour", "receive error: %s\n", err ? err : "(null)");
bonjour_jabber_close_conversation(bconv);
- if (bconv->pb != NULL && bconv->pb->proto_data != NULL) {
- BonjourBuddy *bb = bconv->pb->proto_data;
- bb->conversation = NULL;
+ if (bconv->pb != NULL) {
+ BonjourBuddy *bb = purple_buddy_get_protocol_data(bconv->pb);
+
+ if(bb != NULL)
+ bb->conversation = NULL;
}
/* I guess we really don't need to notify the user.
@@ -396,7 +408,8 @@ _client_socket_handler(gpointer data, gi
}
return;
} else if (len == 0) { /* The other end has closed the socket */
- purple_debug_warning("bonjour", "Connection closed (without stream end) by %s.\n", (bconv->pb && bconv->pb->name) ? bconv->pb->name : "(unknown)");
+ const gchar *name = purple_buddy_get_name(bconv->pb);
+ purple_debug_warning("bonjour", "Connection closed (without stream end) by %s.\n", (name) ? name : "(unknown)");
bonjour_jabber_stream_ended(bconv);
return;
} else {
@@ -415,15 +428,19 @@ void bonjour_jabber_stream_ended(Bonjour
}
void bonjour_jabber_stream_ended(BonjourJabberConversation *bconv) {
+ const gchar *name = NULL;
+
+ if(bconv->pb != NULL)
+ name = purple_buddy_get_name(bconv->pb);
- purple_debug_info("bonjour", "Recieved conversation close notification from %s.\n", bconv->pb ? bconv->pb->name : "(unknown)");
+ purple_debug_info("bonjour", "Recieved conversation close notification from %s.\n", name ? name : "(unknown)");
/* Inform the user that the conversation has been closed */
if (bconv != NULL) {
BonjourBuddy *bb = NULL;
if(bconv->pb != NULL)
- bb = bconv->pb->proto_data;
+ bb = purple_buddy_get_protocol_data(bconv->pb);
#if 0
if(bconv->pb != NULL) {
PurpleConversation *conv;
@@ -469,7 +486,7 @@ _start_stream(gpointer data, gint source
BonjourBuddy *bb = NULL;
if(bconv->pb) {
- bb = bconv->pb->proto_data;
+ bb = purple_buddy_get_protocol_data(bconv->pb);
bname = purple_buddy_get_name(bconv->pb);
}
@@ -747,17 +764,20 @@ _connected_to_buddy(gpointer data, gint
_connected_to_buddy(gpointer data, gint source, const gchar *error)
{
PurpleBuddy *pb = data;
- BonjourBuddy *bb = pb->proto_data;
+ BonjourBuddy *bb = purple_buddy_get_protocol_data(pb);
bb->conversation->connect_data = NULL;
if (source < 0) {
- PurpleConversation *conv;
+ PurpleConversation *conv = NULL;
+ PurpleAccount *account = NULL;
purple_debug_error("bonjour", "Error connecting to buddy %s at %s:%d error: %s\n",
purple_buddy_get_name(pb), bb->conversation->ip, bb->port_p2pj, error ? error : "(null)");
- conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account);
+ account = purple_buddy_get_account(pb);
+
+ conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account);
if (conv != NULL)
purple_conversation_write(conv, NULL,
_("Unable to send the message, the conversation couldn't be started."),
@@ -770,12 +790,15 @@ _connected_to_buddy(gpointer data, gint
if (!bonjour_jabber_send_stream_init(bb->conversation, source)) {
const char *err = g_strerror(errno);
- PurpleConversation *conv;
+ PurpleConversation *conv = NULL;
+ PurpleAccount *account = NULL;
purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n",
purple_buddy_get_name(pb), bb->conversation->ip, bb->port_p2pj, err ? err : "(null)");
- conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account);
+ account = purple_buddy_get_account(pb);
+
+ conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account);
if (conv != NULL)
purple_conversation_write(conv, NULL,
_("Unable to send the message, the conversation couldn't be started."),
@@ -795,14 +818,14 @@ bonjour_jabber_conv_match_by_name(Bonjou
void
bonjour_jabber_conv_match_by_name(BonjourJabberConversation *bconv) {
- PurpleBuddy *pb;
+ PurpleBuddy *pb = NULL;
+ BonjourBuddy *bb = NULL;
g_return_if_fail(bconv->ip != NULL);
g_return_if_fail(bconv->pb == NULL);
pb = purple_find_buddy(bconv->account, bconv->buddy_name);
- if (pb && pb->proto_data) {
- BonjourBuddy *bb = pb->proto_data;
+ if (pb && (bb = purple_buddy_get_protocol_data(pb))) {
const char *ip;
GSList *tmp = bb->ips;
@@ -860,7 +883,7 @@ bonjour_jabber_conv_match_by_ip(BonjourJ
purple_debug_error("bonjour", "More than one buddy matched for ip %s.\n", bconv->ip);
else {
PurpleBuddy *pb = mbba->matched_buddies->data;
- BonjourBuddy *bb = pb->proto_data;
+ BonjourBuddy *bb = purple_buddy_get_protocol_data(pb);
purple_debug_info("bonjour", "Matched buddy %s to incoming conversation using IP (%s)\n",
purple_buddy_get_name(pb), bconv->ip);
@@ -900,12 +923,10 @@ _find_or_start_conversation(BonjourJabbe
g_return_val_if_fail(to != NULL, NULL);
pb = purple_find_buddy(jdata->account, to);
- if (pb == NULL || pb->proto_data == NULL)
+ if (pb == NULL || (bb = purple_buddy_get_protocol_data(pb)) == NULL)
/* You can not send a message to an offline buddy */
return NULL;
- bb = (BonjourBuddy *) pb->proto_data;
-
/* Check if there is a previously open conversation */
if (bb->conversation == NULL)
{
@@ -952,7 +973,7 @@ bonjour_jabber_send_message(BonjourJabbe
int ret;
pb = _find_or_start_conversation(jdata, to);
- if (pb == NULL || pb->proto_data == NULL) {
+ if (pb == NULL || (bb = purple_buddy_get_protocol_data(pb)) == NULL) {
purple_debug_info("bonjour", "Can't send a message to an offline buddy (%s).\n", to);
/* You can not send a message to an offline buddy */
return -10000;
@@ -960,8 +981,6 @@ bonjour_jabber_send_message(BonjourJabbe
purple_markup_html_to_xhtml(body, &xhtml, &message);
- bb = pb->proto_data;
-
message_node = xmlnode_new("message");
xmlnode_set_attrib(message_node, "to", bb->name);
xmlnode_set_attrib(message_node, "from", purple_account_get_username(jdata->account));
@@ -1011,7 +1030,7 @@ async_bonjour_jabber_close_conversation(
/* Disconnect this conv. from the buddy here so it can't be disposed of twice.*/
if(bconv->pb != NULL) {
- BonjourBuddy *bb = bconv->pb->proto_data;
+ BonjourBuddy *bb = purple_buddy_get_protocol_data(bconv->pb);
if (bb->conversation == bconv)
bb->conversation = NULL;
}
@@ -1040,7 +1059,7 @@ bonjour_jabber_close_conversation(Bonjou
tmp_next = xfers->next;
/* We only need to cancel this if it hasn't actually started transferring. */
/* This will change if we ever support IBB transfers. */
- if (strcmp(xfer->who, bconv->pb->name) == 0
+ if (strcmp(xfer->who, purple_buddy_get_name(bconv->pb)) == 0
&& (purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_NOT_STARTED
|| purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_UNKNOWN)) {
purple_xfer_cancel_remote(xfer);
@@ -1099,7 +1118,7 @@ bonjour_jabber_stop(BonjourJabber *jdata
buddies = purple_find_buddies(jdata->account, NULL);
for (l = buddies; l; l = l->next) {
- BonjourBuddy *bb = ((PurpleBuddy*) l->data)->proto_data;
+ BonjourBuddy *bb = purple_buddy_get_protocol_data((PurpleBuddy*) l->data);
if (bb != NULL) {
bonjour_jabber_close_conversation(bb->conversation);
bb->conversation = NULL;
@@ -1168,11 +1187,14 @@ check_if_blocked(PurpleBuddy *pb)
if(pb == NULL)
return FALSE;
- acc = pb->account;
+ acc = purple_buddy_get_account(pb);
for(l = acc->deny; l != NULL; l = l->next) {
- if(!purple_utf8_strcasecmp(pb->name, (char *)l->data)) {
- purple_debug_info("bonjour", "%s has been blocked by %s.\n", pb->name, acc->username);
+ const gchar *name = purple_buddy_get_name(pb);
+ const gchar *username = purple_account_get_username(acc);
+
+ if(!purple_utf8_strcasecmp(name, (char *)l->data)) {
+ purple_debug_info("bonjour", "%s has been blocked by %s.\n", name, username);
blocked = TRUE;
break;
}
@@ -1189,8 +1211,10 @@ xep_iq_parse(xmlnode *packet, PurpleConn
return;
if(connection == NULL) {
- if(pb->account != NULL)
- connection = (pb->account)->gc;
+ PurpleAccount *account = purple_buddy_get_account(pb);
+
+ if(account != NULL)
+ connection = purple_account_get_connection(account);
}
if(check_if_blocked(pb))
============================================================
--- libpurple/protocols/bonjour/mdns_avahi.c f03a348aa05fdaa5894fd4f7832e1d931d5d52ec
+++ libpurple/protocols/bonjour/mdns_avahi.c db17ca09d1710a5fca1a86f188898664d02c298d
@@ -124,7 +124,7 @@ _resolver_callback(AvahiServiceResolver
g_return_if_fail(r != NULL);
pb = purple_find_buddy(account, name);
- bb = (pb != NULL) ? pb->proto_data : NULL;
+ bb = (pb != NULL) ? purple_buddy_get_protocol_data(pb) : NULL;
switch (event) {
case AVAHI_RESOLVER_FAILURE:
@@ -252,7 +252,7 @@ _browser_callback(AvahiServiceBrowser *b
purple_debug_info("bonjour", "_browser_callback - Remove service\n");
pb = purple_find_buddy(account, name);
if (pb != NULL) {
- BonjourBuddy *bb = pb->proto_data;
+ BonjourBuddy *bb = purple_buddy_get_protocol_data(pb);
AvahiBuddyImplData *b_impl;
GSList *l;
AvahiSvcResolverData *rd_search;
More information about the Commits
mailing list