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