Mercurial > pidgin.yaz
comparison src/protocols/napster/mdns.h @ 8486:538f4d0faf1d
[gaim-migrate @ 9221]
Don't use this, it's doesn't work, it's buggy, and it has security
problems. I just don't want to pull a Sean Egan and delete everthing
I have so far.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 23 Mar 2004 03:39:06 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
8485:db4a125edd7b | 8486:538f4d0faf1d |
---|---|
1 /** | |
2 * @file mdns.h Multicast DNS connection code used by rendezvous. | |
3 * | |
4 * gaim | |
5 * | |
6 * Gaim is the legal property of its developers, whose names are too numerous | |
7 * to list here. Please refer to the COPYRIGHT file distributed with this | |
8 * source distribution. | |
9 * | |
10 * This program is free software; you can redistribute it and/or modify | |
11 * it under the terms of the GNU General Public License as published by | |
12 * the Free Software Foundation; either version 2 of the License, or | |
13 * (at your option) any later version. | |
14 * | |
15 * This program is distributed in the hope that it will be useful, | |
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 * GNU General Public License for more details. | |
19 * | |
20 * You should have received a copy of the GNU General Public License | |
21 * along with this program; if not, write to the Free Software | |
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
23 * | |
24 */ | |
25 | |
26 #ifndef _MDNS_H_ | |
27 #define _MDNS_H_ | |
28 | |
29 #include <errno.h> | |
30 #include <string.h> | |
31 #include <arpa/inet.h> | |
32 #include <netinet/in.h> | |
33 #include <sys/socket.h> | |
34 #include <sys/types.h> | |
35 | |
36 #include "debug.h" | |
37 | |
38 /* | |
39 * Some #define's stolen from libfaim. Used to put | |
40 * binary data (bytes, shorts and ints) into an array. | |
41 */ | |
42 #define util_put8(buf, data) ((*(buf) = (unsigned char)(data)&0xff),1) | |
43 #define util_put16(buf, data) ( \ | |
44 (*(buf) = (unsigned char)((data)>>8)&0xff), \ | |
45 (*((buf)+1) = (unsigned char)(data)&0xff), \ | |
46 2) | |
47 #define util_put32(buf, data) ( \ | |
48 (*((buf)) = (unsigned char)((data)>>24)&0xff), \ | |
49 (*((buf)+1) = (unsigned char)((data)>>16)&0xff), \ | |
50 (*((buf)+2) = (unsigned char)((data)>>8)&0xff), \ | |
51 (*((buf)+3) = (unsigned char)(data)&0xff), \ | |
52 4) | |
53 #define util_get8(buf) ((*(buf))&0xff) | |
54 #define util_get16(buf) ((((*(buf))<<8)&0xff00) + ((*((buf)+1)) & 0xff)) | |
55 #define util_get32(buf) ((((*(buf))<<24)&0xff000000) + \ | |
56 (((*((buf)+1))<<16)&0x00ff0000) + \ | |
57 (((*((buf)+2))<< 8)&0x0000ff00) + \ | |
58 (((*((buf)+3) )&0x000000ff))) | |
59 | |
60 /* | |
61 * Merriam-Webster's | |
62 */ | |
63 #define RENDEZVOUS_RRTYPE_A 1 | |
64 #define RENDEZVOUS_RRTYPE_NS 2 | |
65 #define RENDEZVOUS_RRTYPE_CNAME 5 | |
66 #define RENDEZVOUS_RRTYPE_NULL 10 | |
67 #define RENDEZVOUS_RRTYPE_PTR 12 | |
68 #define RENDEZVOUS_RRTYPE_TXT 16 | |
69 | |
70 /* | |
71 * Express for Men's | |
72 */ | |
73 typedef struct _Header { | |
74 unsigned short id; | |
75 unsigned short flags; | |
76 unsigned short numquestions; | |
77 unsigned short numanswers; | |
78 unsigned short numauthority; | |
79 unsigned short numadditional; | |
80 } Header; | |
81 | |
82 typedef struct _Question { | |
83 gchar *name; | |
84 unsigned short type; | |
85 unsigned short class; | |
86 } Question; | |
87 | |
88 typedef struct ResourceRecord { | |
89 gchar *name; | |
90 unsigned short type; | |
91 unsigned short class; | |
92 int ttl; | |
93 unsigned short rdlength; | |
94 void *rdata; | |
95 } ResourceRecord; | |
96 | |
97 typedef struct _DNSPacket { | |
98 Header header; | |
99 Question *questions; | |
100 ResourceRecord *answers; | |
101 ResourceRecord *authority; | |
102 ResourceRecord *additional; | |
103 } DNSPacket; | |
104 | |
105 /* | |
106 * Bring in 'Da Noise, Bring in 'Da Functions | |
107 */ | |
108 | |
109 /** | |
110 * Create a multicast socket that can be used for sending and | |
111 * receiving multicast DNS packets. The socket joins the | |
112 * link-local multicast group (224.0.0.251). | |
113 * | |
114 * @return The file descriptor of the new socket, or -1 if | |
115 * there was an error establishing the socket. | |
116 */ | |
117 int mdns_establish_socket(); | |
118 | |
119 /** | |
120 * Send a multicast DNS query for the given domain across the given | |
121 * socket. | |
122 * | |
123 * @param fd The file descriptor of a pre-established socket to | |
124 * be used for sending the outgoing mDNS query. | |
125 * @param domain This is the domain name you wish to query. It should | |
126 * be of the format "_presence._tcp.local" for example. | |
127 * @return 0 if sucessful. | |
128 */ | |
129 int mdns_query(int fd, const char *domain); | |
130 | |
131 /** | |
132 * | |
133 * | |
134 */ | |
135 DNSPacket *mdns_read(int fd); | |
136 | |
137 /** | |
138 * Free a DNSPacket structure. | |
139 * | |
140 * @param dns The DNSPacket that you want to free. | |
141 */ | |
142 void mdns_free(DNSPacket *dns); | |
143 | |
144 #endif /* _MDNS_H_ */ |