1 /*
2  * Copyright (C) 2004,2005 Charles Schmidt <cschmidt2@emich.edu>
3  * Copyright (C) 2006 INDT
4  *  Andre Moreira Magalhaes <andre.magalhaes@indt.org.br>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA*
19  */
20 
21 #ifndef __DMAP_STRUCTURE_H__
22 #define __DMAP_STRUCTURE_H__
23 
24 #include <glib.h>
25 #include <glib-object.h>
26 
27 G_BEGIN_DECLS typedef enum
28 {
29 	DMAP_CC_INVALID = 0,
30 	DMAP_RAW,		/* The RAW type does not use a content code.
31 				 * Instead of:
32 				 * CCCC BYTECOUNT DATA
33 				 * RAW sends:
34 				 * DATA
35 				 */
36 	DMAP_CC_MDCL,
37 	DMAP_CC_MSTT,
38 	DMAP_CC_MIID,
39 	DMAP_CC_MINM,
40 	DMAP_CC_MIKD,
41 	DMAP_CC_MPER,
42 	DMAP_CC_MCON,
43 	DMAP_CC_MCTI,
44 	DMAP_CC_MPCO,
45 	DMAP_CC_MSTS,
46 	DMAP_CC_MIMC,
47 	DMAP_CC_MCTC,
48 	DMAP_CC_MRCO,
49 	DMAP_CC_MTCO,
50 	DMAP_CC_MLCL,
51 	DMAP_CC_MLIT,
52 	DMAP_CC_MBCL,
53 	DMAP_CC_MSRV,
54 	DMAP_CC_MSAU,
55 	DMAP_CC_MSLR,
56 	DMAP_CC_MPRO,
57 	DMAP_CC_MSAL,
58 	DMAP_CC_MSUP,
59 	DMAP_CC_MSPI,
60 	DMAP_CC_MSEX,
61 	DMAP_CC_MSBR,
62 	DMAP_CC_MSQY,
63 	DMAP_CC_MSIX,
64 	DMAP_CC_MSRS,
65 	DMAP_CC_MSTM,
66 	DMAP_CC_MSDC,
67 	DMAP_CC_MCCR,
68 	DMAP_CC_MCNM,
69 	DMAP_CC_MCNA,
70 	DMAP_CC_MCTY,
71 	DMAP_CC_MLOG,
72 	DMAP_CC_MLID,
73 	DMAP_CC_MUPD,
74 	DMAP_CC_MUSR,
75 	DMAP_CC_MUTY,
76 	DMAP_CC_MUDL,
77 	DMAP_CC_MSMA,
78 	DMAP_CC_FQUESCH,
79 
80 	DMAP_CC_APRO,
81 	DMAP_CC_AVDB,
82 	DMAP_CC_ABRO,
83 	DMAP_CC_ABAL,
84 	DMAP_CC_ABAR,
85 	DMAP_CC_ABCP,
86 	DMAP_CC_ABGN,
87 	DMAP_CC_ADBS,
88 	DMAP_CC_ASAL,
89 	DMAP_CC_ASAI,
90 	DMAP_CC_ASAA,
91 	DMAP_CC_ASAR,
92 	DMAP_CC_ASBT,
93 	DMAP_CC_ASBR,
94 	DMAP_CC_ASCM,
95 	DMAP_CC_ASCO,
96 	DMAP_CC_ASDA,
97 	DMAP_CC_ASDM,
98 	DMAP_CC_ASDC,
99 	DMAP_CC_ASDN,
100 	DMAP_CC_ASDB,
101 	DMAP_CC_ASEQ,
102 	DMAP_CC_ASFM,
103 	DMAP_CC_ASGN,
104 	DMAP_CC_ASDT,
105 	DMAP_CC_ASRV,
106 	DMAP_CC_ASSR,
107 	DMAP_CC_ASSZ,
108 	DMAP_CC_ASST,
109 	DMAP_CC_ASSP,
110 	DMAP_CC_ASTM,
111 	DMAP_CC_ASTC,
112 	DMAP_CC_ASTN,
113 	DMAP_CC_ASUR,
114 	DMAP_CC_ASYR,
115 	DMAP_CC_ASDK,
116 	DMAP_CC_ASUL,
117 	DMAP_CC_ASSU,
118 	DMAP_CC_ASSA,
119 	DMAP_CC_APLY,
120 	DMAP_CC_ABPL,
121 	DMAP_CC_APSO,
122 	DMAP_CC_PRSV,
123 	DMAP_CC_ARIF,
124 	DMAP_CC_MSAS,
125 	DMAP_CC_AGRP,
126 	DMAP_CC_AGAL,
127 	DMAP_CC_ASCP,
128 	DMAP_CC_PPRO,
129 	DMAP_CC_PASP,
130 	DMAP_CC_PFDT,
131 	DMAP_CC_PICD,
132 	DMAP_CC_PIMF,
133 	DMAP_CC_PFMT,
134 	DMAP_CC_PIFS,
135 	DMAP_CC_PLSZ,
136 	DMAP_CC_PHGT,
137 	DMAP_CC_PWTH,
138 	DMAP_CC_PRAT,
139 	DMAP_CC_PCMT,
140 	DMAP_CC_PRET,
141 
142 	/* iTunes 6.02+ */
143 	DMAP_CC_AESV,
144 	DMAP_CC_AEHV,
145 
146 	DMAP_CC_AESP,
147 	DMAP_CC_AEPP,
148 	DMAP_CC_AEPS,
149 	DMAP_CC_AESG,
150 	DMAP_CC_AEMK,
151 	DMAP_CC_AEFP,
152 
153 	/* DACP */
154 	DMAP_CC_CMPA,
155 	DMAP_CC_CMNM,
156 	DMAP_CC_CMTY,
157 	DMAP_CC_CMPG,
158 
159 	DMAP_CC_CACI,
160 	DMAP_CC_CAPS,
161 	DMAP_CC_CASH,
162 	DMAP_CC_CARP,
163 	DMAP_CC_CAAS,
164 	DMAP_CC_CAAR,
165 	DMAP_CC_CAIA,
166 	DMAP_CC_CANP,
167 	DMAP_CC_CANN,
168 	DMAP_CC_CANA,
169 	DMAP_CC_CANL,
170 	DMAP_CC_CANG,
171 	DMAP_CC_CANT,
172 	DMAP_CC_CASP,
173 	DMAP_CC_CASS,
174 	DMAP_CC_CAST,
175 	DMAP_CC_CASU,
176 	DMAP_CC_CASG,
177 	DMAP_CC_CACR,
178 
179 	DMAP_CC_CMCP,
180 	DMAP_CC_CMGT,
181 	DMAP_CC_CMIK,
182 	DMAP_CC_CMSP,
183 	DMAP_CC_CMST,
184 	DMAP_CC_CMSV,
185 	DMAP_CC_CMSR,
186 	DMAP_CC_CMMK,
187 	DMAP_CC_CMVO,
188 
189 	DMAP_CC_CMPR,
190 	DMAP_CC_CAPR,
191 	DMAP_CC_AEFR,
192 	DMAP_CC_CAOV,
193 	DMAP_CC_CMRL,
194 	DMAP_CC_CAHP,
195 	DMAP_CC_CAIV,
196 	DMAP_CC_CAVC
197 } DMAPContentCode;
198 
199 typedef struct _DMAPStructureItem DMAPStructureItem;
200 
201 struct _DMAPStructureItem
202 {
203 	DMAPContentCode content_code;
204 	GValue content;
205 	guint32 size;
206 };
207 
208 GNode *dmap_structure_add (GNode * parent, DMAPContentCode cc, ...);
209 gchar *dmap_structure_serialize (GNode * structure, guint * length);
210 GNode *dmap_structure_parse (const gchar * buf, gint buf_length);
211 DMAPStructureItem *dmap_structure_find_item (GNode * structure,
212 					     DMAPContentCode code);
213 GNode *dmap_structure_find_node (GNode * structure, DMAPContentCode code);
214 void dmap_structure_print (GNode * structure);
215 void dmap_structure_destroy (GNode * structure);
216 guint dmap_structure_get_size (GNode * structure);
217 void dmap_structure_increase_by_predicted_size (GNode * structure,
218 						guint size);
219 
220 typedef enum
221 {
222 	DMAP_TYPE_BYTE = 0x0001,
223 	DMAP_TYPE_SIGNED_INT = 0x0002,
224 	DMAP_TYPE_SHORT = 0x0003,
225 	DMAP_TYPE_INT = 0x0005,
226 	DMAP_TYPE_INT64 = 0x0007,
227 	DMAP_TYPE_STRING = 0x0009,
228 	DMAP_TYPE_DATE = 0x000A,
229 	DMAP_TYPE_VERSION = 0x000B,
230 	DMAP_TYPE_CONTAINER = 0x000C,
231 	DMAP_TYPE_POINTER = 0x002A
232 } DMAPType;
233 
234 typedef struct _DMAPContentCodeDefinition DMAPContentCodeDefinition;
235 
236 struct _DMAPContentCodeDefinition
237 {
238 	DMAPContentCode code;
239 	gint32 int_code;
240 	const gchar *name;
241 	const gchar *string;
242 	DMAPType type;
243 };
244 
245 const DMAPContentCodeDefinition * dmap_content_codes (guint * number);
246 gint32 dmap_content_code_string_as_int32 (const gchar * str);
247 const gchar *dmap_content_code_name (DMAPContentCode code);
248 DMAPType dmap_content_code_dmap_type (DMAPContentCode code);
249 const gchar *dmap_content_code_string (DMAPContentCode code);
250 
251 DMAPContentCode dmap_content_code_read_from_buffer (const gchar * buf);
252 
253 G_END_DECLS
254 #endif
255