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 */