Mercurial > pidgin
comparison libpurple/protocols/bonjour/mdns_common.c @ 18845:09f52521ff5b
Fix bonjour buddy icons to work with iChat.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Wed, 08 Aug 2007 18:14:46 +0000 |
parents | 7bf6b9a70b41 |
children | 1787e601aafc |
comparison
equal
deleted
inserted
replaced
18843:7bf6b9a70b41 | 18845:09f52521ff5b |
---|---|
65 | 65 |
66 /* Update our text record with the new status */ | 66 /* Update our text record with the new status */ |
67 _mdns_publish(data, PUBLISH_UPDATE); /* <--We must control the errors */ | 67 _mdns_publish(data, PUBLISH_UPDATE); /* <--We must control the errors */ |
68 } | 68 } |
69 | 69 |
70 void | 70 /** |
71 bonjour_dns_sd_buddy_icon_data_set(BonjourDnsSd *data) { | 71 * Retrieve the buddy icon blob |
72 PurpleStoredImage *img = purple_buddy_icons_find_account_icon(data->account); | 72 */ |
73 gconstpointer avatar_data; | 73 void bonjour_dns_sd_retrieve_buddy_icon(BonjourBuddy* buddy) { |
74 gsize avatar_len; | 74 _mdns_retrieve_retrieve_buddy_icon(buddy); |
75 gchar *enc; | |
76 int i; | |
77 unsigned char hashval[20]; | |
78 char *p, hash[41]; | |
79 | |
80 g_return_if_fail(img != NULL); | |
81 | |
82 avatar_data = purple_imgstore_get_data(img); | |
83 avatar_len = purple_imgstore_get_size(img); | |
84 | |
85 enc = purple_base64_encode(avatar_data, avatar_len); | |
86 | |
87 purple_cipher_digest_region("sha1", avatar_data, | |
88 avatar_len, sizeof(hashval), | |
89 hashval, NULL); | |
90 | |
91 purple_imgstore_unref(img); | |
92 | |
93 p = hash; | |
94 for(i=0; i<20; i++, p+=2) | |
95 snprintf(p, 3, "%02x", hashval[i]); | |
96 | |
97 g_free(data->phsh); | |
98 data->phsh = g_strdup(hash); | |
99 | |
100 g_free(enc); | |
101 | |
102 /* Update our TXT record */ | |
103 _mdns_publish(data, PUBLISH_UPDATE); | |
104 } | 75 } |
105 | 76 |
106 void | 77 void |
107 bonjour_dns_sd_update_buddy_icon(BonjourDnsSd *data) { | 78 bonjour_dns_sd_update_buddy_icon(BonjourDnsSd *data) { |
108 PurpleStoredImage *img; | 79 PurpleStoredImage *img; |
112 gsize avatar_len; | 83 gsize avatar_len; |
113 | 84 |
114 avatar_data = purple_imgstore_get_data(img); | 85 avatar_data = purple_imgstore_get_data(img); |
115 avatar_len = purple_imgstore_get_size(img); | 86 avatar_len = purple_imgstore_get_size(img); |
116 | 87 |
117 _mdns_set_buddy_icon_data(data, avatar_data, avatar_len); | 88 if (_mdns_set_buddy_icon_data(data, avatar_data, avatar_len)) { |
89 int i; | |
90 gchar *enc; | |
91 char *p, hash[41]; | |
92 unsigned char hashval[20]; | |
93 | |
94 enc = purple_base64_encode(avatar_data, avatar_len); | |
95 | |
96 purple_cipher_digest_region("sha1", avatar_data, | |
97 avatar_len, sizeof(hashval), | |
98 hashval, NULL); | |
99 | |
100 p = hash; | |
101 for(i=0; i<20; i++, p+=2) | |
102 snprintf(p, 3, "%02x", hashval[i]); | |
103 | |
104 g_free(data->phsh); | |
105 data->phsh = g_strdup(hash); | |
106 | |
107 g_free(enc); | |
108 | |
109 /* Update our TXT record */ | |
110 _mdns_publish(data, PUBLISH_UPDATE); | |
111 } | |
118 | 112 |
119 purple_imgstore_unref(img); | 113 purple_imgstore_unref(img); |
120 } else { | 114 } else { |
121 /* We need to do this regardless of whether data->phsh is set so that we | 115 /* We need to do this regardless of whether data->phsh is set so that we |
122 * cancel any icons that are currently in the process of being set */ | 116 * cancel any icons that are currently in the process of being set */ |