Mercurial > pidgin.yaz
comparison libpurple/protocols/bonjour/mdns_howl.c @ 17739:c96b085ddf5c
Clean up Bonjour service publishing and improve XEP-0174 compliance.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Tue, 05 Jun 2007 22:13:10 +0000 |
parents | d7b50cac1c7a |
children | c921f901c7ea |
comparison
equal
deleted
inserted
replaced
17738:bca2780f7669 | 17739:c96b085ddf5c |
---|---|
111 g_free(buddy->phsh); | 111 g_free(buddy->phsh); |
112 buddy->phsh = g_strdup(value); | 112 buddy->phsh = g_strdup(value); |
113 } else if (strcmp(key, "msg") == 0) { | 113 } else if (strcmp(key, "msg") == 0) { |
114 g_free(buddy->msg); | 114 g_free(buddy->msg); |
115 buddy->msg = g_strdup(value); | 115 buddy->msg = g_strdup(value); |
116 } | 116 } |
117 } | 117 } |
118 } | 118 } |
119 | 119 |
120 if (!bonjour_buddy_check(buddy)) | 120 if (!bonjour_buddy_check(buddy)) |
121 { | 121 { |
196 _mdns_publish(BonjourDnsSd *data, PublishType type) | 196 _mdns_publish(BonjourDnsSd *data, PublishType type) |
197 { | 197 { |
198 sw_text_record dns_data; | 198 sw_text_record dns_data; |
199 sw_result publish_result = SW_OKAY; | 199 sw_result publish_result = SW_OKAY; |
200 char portstring[6]; | 200 char portstring[6]; |
201 const char *jid, *aim, *email; | |
201 | 202 |
202 /* Fill the data for the service */ | 203 /* Fill the data for the service */ |
203 if (sw_text_record_init(&dns_data) != SW_OKAY) | 204 if (sw_text_record_init(&dns_data) != SW_OKAY) |
204 { | 205 { |
205 purple_debug_error("bonjour", "Unable to initialize the data for the mDNS.\n"); | 206 purple_debug_error("bonjour", "Unable to initialize the data for the mDNS.\n"); |
207 } | 208 } |
208 | 209 |
209 /* Convert the port to a string */ | 210 /* Convert the port to a string */ |
210 snprintf(portstring, sizeof(portstring), "%d", data->port_p2pj); | 211 snprintf(portstring, sizeof(portstring), "%d", data->port_p2pj); |
211 | 212 |
212 /* Publish standard records */ | 213 jid = purple_account_get_string(data->account, "jid", NULL); |
213 sw_text_record_add_key_and_string_value(dns_data, "txtvers", data->txtvers); | 214 aim = purple_account_get_string(data->account, "AIM", NULL); |
214 sw_text_record_add_key_and_string_value(dns_data, "version", data->version); | 215 email = purple_account_get_string(data->account, "email", NULL); |
216 | |
217 /* We should try to follow XEP-0174, but some clients have "issues", so we humor them. | |
218 * See http://telepathy.freedesktop.org/wiki/SalutInteroperability | |
219 */ | |
220 | |
221 /* Needed by iChat */ | |
222 sw_text_record_add_key_and_string_value(dns_data, "txtvers", "1"); | |
223 /* Needed by Gaim/Pidgin <= 2.0.1 (remove at some point) */ | |
215 sw_text_record_add_key_and_string_value(dns_data, "1st", data->first); | 224 sw_text_record_add_key_and_string_value(dns_data, "1st", data->first); |
225 /* Needed by Gaim/Pidgin <= 2.0.1 (remove at some point) */ | |
216 sw_text_record_add_key_and_string_value(dns_data, "last", data->last); | 226 sw_text_record_add_key_and_string_value(dns_data, "last", data->last); |
227 /* Needed by Adium */ | |
217 sw_text_record_add_key_and_string_value(dns_data, "port.p2pj", portstring); | 228 sw_text_record_add_key_and_string_value(dns_data, "port.p2pj", portstring); |
218 sw_text_record_add_key_and_string_value(dns_data, "phsh", data->phsh); | 229 /* Needed by iChat, Gaim/Pidgin <= 2.0.1 */ |
219 sw_text_record_add_key_and_string_value(dns_data, "status", data->status); | 230 sw_text_record_add_key_and_string_value(dns_data, "status", data->status); |
231 /* Currently always set to "!" since we don't support AV and wont ever be in a conference */ | |
220 sw_text_record_add_key_and_string_value(dns_data, "vc", data->vc); | 232 sw_text_record_add_key_and_string_value(dns_data, "vc", data->vc); |
221 | 233 sw_text_record_add_key_and_string_value(dns_data, "ver", VERSION); |
222 /* Publish extra records */ | 234 if (email != NULL && *email != '\0') |
223 if ((data->email != NULL) && (*data->email != '\0')) | 235 sw_text_record_add_key_and_string_value(dns_data, "email", email); |
224 sw_text_record_add_key_and_string_value(dns_data, "email", data->email); | 236 if (jid != NULL && *jid != '\0') |
225 | 237 sw_text_record_add_key_and_string_value(dns_data, "jid", jid); |
226 if ((data->jid != NULL) && (*data->jid != '\0')) | 238 /* Nonstandard, but used by iChat */ |
227 sw_text_record_add_key_and_string_value(dns_data, "jid", data->jid); | 239 if (aim != NULL && *aim != '\0') |
228 | 240 sw_text_record_add_key_and_string_value(dns_data, "AIM", aim); |
229 if ((data->AIM != NULL) && (*data->AIM != '\0')) | 241 if (data->msg != NULL && *data->msg != '\0') |
230 sw_text_record_add_key_and_string_value(dns_data, "AIM", data->AIM); | |
231 | |
232 if ((data->msg != NULL) && (*data->msg != '\0')) | |
233 sw_text_record_add_key_and_string_value(dns_data, "msg", data->msg); | 242 sw_text_record_add_key_and_string_value(dns_data, "msg", data->msg); |
243 if (data->phsh != NULL && *data->phsh != '\0') | |
244 sw_text_record_add_key_and_string_value(dns_data, "phsh", data->phsh); | |
245 | |
246 /* TODO: ext, nick, node */ | |
234 | 247 |
235 /* Publish the service */ | 248 /* Publish the service */ |
236 switch (type) | 249 switch (type) |
237 { | 250 { |
238 case PUBLISH_START: | 251 case PUBLISH_START: |
239 publish_result = sw_discovery_publish(data->session, 0, data->name, ICHAT_SERVICE, NULL, | 252 publish_result = sw_discovery_publish(data->session, 0, purple_account_get_username(data->account), ICHAT_SERVICE, NULL, |
240 NULL, data->port_p2pj, sw_text_record_bytes(dns_data), sw_text_record_len(dns_data), | 253 NULL, data->port_p2pj, sw_text_record_bytes(dns_data), sw_text_record_len(dns_data), |
241 _publish_reply, NULL, &data->session_id); | 254 _publish_reply, NULL, &data->session_id); |
242 break; | 255 break; |
243 case PUBLISH_UPDATE: | 256 case PUBLISH_UPDATE: |
244 publish_result = sw_discovery_publish_update(data->session, data->session_id, | 257 publish_result = sw_discovery_publish_update(data->session, data->session_id, |