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 {