comparison src/protocols/rendezvous/mdns.c @ 8594:f3b928825a72

[gaim-migrate @ 9345] Some minor rendezvous changes. You still shouldn't use this yet, it has a long way to go. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Tue, 06 Apr 2004 05:16:02 +0000
parents 9aa6017da568
children 219e9638e8f3
comparison
equal deleted inserted replaced
8593:ba075b939aa6 8594:f3b928825a72
341 if (!g_hash_table_lookup(ret, key)) 341 if (!g_hash_table_lookup(ret, key))
342 g_hash_table_insert(ret, key, g_strdup(value)); 342 g_hash_table_insert(ret, key, g_strdup(value));
343 else 343 else
344 g_free(key); 344 g_free(key);
345 } 345 }
346
347 return ret;
348 }
349
350 /*
351 *
352 *
353 */
354 static ResourceRecordSRV *
355 mdns_read_rr_rdata_srv(const char *data, int datalen, int offset, unsigned short rdlength)
356 {
357 ResourceRecordSRV *ret = NULL;
358 int endoffset = offset + rdlength;
359
360 if (offset + 7 > endoffset)
361 return NULL;
362
363 ret = g_malloc(sizeof(ResourceRecordSRV));
364
365 /* Read in the priority */
366 ret->priority = util_get16(&data[offset]);
367 offset += 2;
368
369 /* Read in the weight */
370 ret->weight = util_get16(&data[offset]);
371 offset += 2;
372
373 /* Read in the port */
374 ret->port = util_get16(&data[offset]);
375 offset += 2;
376
377 /* Read in the target name */
378 /*
379 * XXX - RFC2782 says it's not supposed to be an alias...
380 * but it was in the packet capture I looked at from iChat.
381 */
382 ret->target = mdns_read_name(data, datalen, offset);
346 383
347 return ret; 384 return ret;
348 } 385 }
349 386
350 /* 387 /*
382 419
383 case RENDEZVOUS_RRTYPE_TXT: 420 case RENDEZVOUS_RRTYPE_TXT:
384 ret[i].rdata = mdns_read_rr_rdata_txt(data, datalen, *offset, ret[i].rdlength); 421 ret[i].rdata = mdns_read_rr_rdata_txt(data, datalen, *offset, ret[i].rdlength);
385 break; 422 break;
386 423
424 case RENDEZVOUS_RRTYPE_SRV:
425 ret[i].rdata = mdns_read_rr_rdata_srv(data, datalen, *offset, ret[i].rdlength);
426 break;
427
387 default: 428 default:
388 ret[i].rdata = NULL; 429 ret[i].rdata = NULL;
389 break; 430 break;
390 } 431 }
391 *offset += ret[i].rdlength; 432 *offset += ret[i].rdlength;
401 DNSPacket * 442 DNSPacket *
402 mdns_read(int fd) 443 mdns_read(int fd)
403 { 444 {
404 DNSPacket *ret = NULL; 445 DNSPacket *ret = NULL;
405 int i; /* Current position in datagram */ 446 int i; /* Current position in datagram */
406 //char data[512]; 447 /* char data[512]; */ /* XXX - Find out what to use as a maximum incoming UDP packet size */
407 char data[10096]; 448 char data[10096];
408 int datalen; 449 int datalen;
409 struct sockaddr_in addr; 450 struct sockaddr_in addr;
410 socklen_t addrlen; 451 socklen_t addrlen;
411 452