Mercurial > pidgin.yaz
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 |