Mercurial > pidgin
comparison libpurple/protocols/bonjour/mdns_win32.c @ 18859:c1546f6c0432
Yay for code reuse.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Fri, 10 Aug 2007 01:29:48 +0000 |
parents | f773aa054dca |
children | 649ac48fce1d |
comparison
equal
deleted
inserted
replaced
18858:f773aa054dca | 18859:c1546f6c0432 |
---|---|
241 gboolean _mdns_init_session(BonjourDnsSd *data) { | 241 gboolean _mdns_init_session(BonjourDnsSd *data) { |
242 data->mdns_impl_data = g_new0(Win32SessionImplData, 1); | 242 data->mdns_impl_data = g_new0(Win32SessionImplData, 1); |
243 return TRUE; | 243 return TRUE; |
244 } | 244 } |
245 | 245 |
246 gboolean _mdns_publish(BonjourDnsSd *data, PublishType type) { | 246 gboolean _mdns_publish(BonjourDnsSd *data, PublishType type, GSList *records) { |
247 TXTRecordRef dns_data; | 247 TXTRecordRef dns_data; |
248 char portstring[6]; | |
249 gboolean ret = TRUE; | 248 gboolean ret = TRUE; |
250 const char *jid, *aim, *email; | 249 DNSServiceErrorType set_ret = kDNSServiceErr_NoError; |
251 DNSServiceErrorType set_ret; | |
252 Win32SessionImplData *idata = data->mdns_impl_data; | 250 Win32SessionImplData *idata = data->mdns_impl_data; |
253 | 251 |
254 g_return_val_if_fail(idata != NULL, FALSE); | 252 g_return_val_if_fail(idata != NULL, FALSE); |
255 | 253 |
256 TXTRecordCreate(&dns_data, 256, NULL); | 254 TXTRecordCreate(&dns_data, 256, NULL); |
257 | 255 |
258 /* Convert the port to a string */ | 256 while (records) { |
259 snprintf(portstring, sizeof(portstring), "%d", data->port_p2pj); | 257 PurpleKeyValuePair *kvp = records->data; |
260 | 258 set_ret = TXTRecordSetValue(&dns_data, kvp->key, strlen(kvp->value), kvp->value); |
261 jid = purple_account_get_string(data->account, "jid", NULL); | 259 if (set_ret != kDNSServiceErr_NoError) |
262 aim = purple_account_get_string(data->account, "AIM", NULL); | 260 break; |
263 email = purple_account_get_string(data->account, "email", NULL); | 261 records = records->next; |
264 | 262 } |
265 /* We should try to follow XEP-0174, but some clients have "issues", so we humor them. | |
266 * See http://telepathy.freedesktop.org/wiki/SalutInteroperability | |
267 */ | |
268 | |
269 /* Needed by iChat */ | |
270 set_ret = TXTRecordSetValue(&dns_data, "txtvers", 1, "1"); | |
271 /* Needed by Gaim/Pidgin <= 2.0.1 (remove at some point) */ | |
272 if (set_ret == kDNSServiceErr_NoError) | |
273 set_ret = TXTRecordSetValue(&dns_data, "1st", strlen(data->first), data->first); | |
274 /* Needed by Gaim/Pidgin <= 2.0.1 (remove at some point) */ | |
275 if (set_ret == kDNSServiceErr_NoError) | |
276 set_ret = TXTRecordSetValue(&dns_data, "last", strlen(data->last), data->last); | |
277 /* Needed by Adium */ | |
278 if (set_ret == kDNSServiceErr_NoError) | |
279 set_ret = TXTRecordSetValue(&dns_data, "port.p2pj", strlen(portstring), portstring); | |
280 /* Needed by iChat, Gaim/Pidgin <= 2.0.1 */ | |
281 if (set_ret == kDNSServiceErr_NoError) | |
282 set_ret = TXTRecordSetValue(&dns_data, "status", strlen(data->status), data->status); | |
283 if (set_ret == kDNSServiceErr_NoError) | |
284 set_ret = TXTRecordSetValue(&dns_data, "ver", strlen(VERSION), VERSION); | |
285 /* Currently always set to "!" since we don't support AV and wont ever be in a conference */ | |
286 if (set_ret == kDNSServiceErr_NoError) | |
287 set_ret = TXTRecordSetValue(&dns_data, "vc", strlen(data->vc), data->vc); | |
288 if (set_ret == kDNSServiceErr_NoError && email != NULL && *email != '\0') | |
289 set_ret = TXTRecordSetValue(&dns_data, "email", strlen(email), email); | |
290 if (set_ret == kDNSServiceErr_NoError && jid != NULL && *jid != '\0') | |
291 set_ret = TXTRecordSetValue(&dns_data, "jid", strlen(jid), jid); | |
292 /* Nonstandard, but used by iChat */ | |
293 if (set_ret == kDNSServiceErr_NoError && aim != NULL && *aim != '\0') | |
294 set_ret = TXTRecordSetValue(&dns_data, "AIM", strlen(aim), aim); | |
295 if (set_ret == kDNSServiceErr_NoError && data->msg != NULL && *data->msg != '\0') | |
296 set_ret = TXTRecordSetValue(&dns_data, "msg", strlen(data->msg), data->msg); | |
297 if (set_ret == kDNSServiceErr_NoError && data->phsh != NULL && *data->phsh != '\0') | |
298 set_ret = TXTRecordSetValue(&dns_data, "phsh", strlen(data->phsh), data->phsh); | |
299 | |
300 /* TODO: ext, nick, node */ | |
301 | 263 |
302 if (set_ret != kDNSServiceErr_NoError) { | 264 if (set_ret != kDNSServiceErr_NoError) { |
303 purple_debug_error("bonjour", "Unable to allocate memory for text record.\n"); | 265 purple_debug_error("bonjour", "Unable to allocate memory for text record.\n"); |
304 ret = FALSE; | 266 ret = FALSE; |
305 } else { | 267 } else { |