source: roaraudio/libroar/meta.c @ 236:5cb71dafc234

Last change on this file since 236:5cb71dafc234 was 236:5cb71dafc234, checked in by phi, 16 years ago

added meta tag ENCODEDBY as alias of ENCODER

File size: 4.3 KB
Line 
1//meta.c:
2
3#include "libroar.h"
4
5/*
6
7grep ^'#define ROAR_META_TYPE_' meta.h | cut -d' ' -f2 | while read line; do printf ' {%-30s     "%-16s},\n' $line, $(echo $line | cut -d_ -f4)\"; done
8
9*/
10
11struct {
12 int    id;
13 char * name;
14} _libroar_meta_typelist[] = {
15 {ROAR_META_TYPE_NONE,               "NONE"           },
16 {ROAR_META_TYPE_TITLE,              "TITLE"          },
17 {ROAR_META_TYPE_ALBUM,              "ALBUM"          },
18 {ROAR_META_TYPE_AUTOR,              "AUTOR"          },
19 {ROAR_META_TYPE_ARTIST,             "ARTIST"         },
20 {ROAR_META_TYPE_VERSION,            "VERSION"        },
21 {ROAR_META_TYPE_DATE,               "DATE"           },
22 {ROAR_META_TYPE_LICENSE,            "LICENSE"        },
23 {ROAR_META_TYPE_TRACKNUMBER,        "TRACKNUMBER"    },
24 {ROAR_META_TYPE_ORGANIZATION,       "ORGANIZATION"   },
25 {ROAR_META_TYPE_DESCRIPTION,        "DESCRIPTION"    },
26 {ROAR_META_TYPE_GENRE,              "GENRE"          },
27 {ROAR_META_TYPE_LOCATION,           "LOCATION"       },
28 {ROAR_META_TYPE_CONTACT,            "CONTACT"        },
29 {ROAR_META_TYPE_STREAMURL,          "STREAMURL"      },
30 {ROAR_META_TYPE_HOMEPAGE,           "HOMEPAGE"       },
31 {ROAR_META_TYPE_THUMBNAIL,          "THUMBNAIL"      },
32 {ROAR_META_TYPE_LENGTH,             "LENGTH"         },
33 {ROAR_META_TYPE_COMMENT,            "COMMENT"        },
34 {ROAR_META_TYPE_OTHER,              "OTHER"          },
35 {ROAR_META_TYPE_FILENAME,           "FILENAME"       },
36 {ROAR_META_TYPE_FILEURL,            "FILEURL"        },
37 {ROAR_META_TYPE_SERVER,             "SERVER"         },
38 {ROAR_META_TYPE_DURATION,           "DURATION"       },
39 {ROAR_META_TYPE_WWW,                "WWW"            },
40 {ROAR_META_TYPE_WOAF,               "WOAF"           },
41 {ROAR_META_TYPE_ENCODER,            "ENCODER"        },
42 {ROAR_META_TYPE_ENCODEDBY,          "ENCODEDBY"      },
43 
44 {-1, "EOL"}
45};
46
47char * roar_meta_strtype(int type) {
48 int i;
49 static char name[24];
50
51 for (i = 0; _libroar_meta_typelist[i].id != -1; i++)
52  if ( _libroar_meta_typelist[i].id == type ) {
53   strcpy(name, _libroar_meta_typelist[i].name);
54   return name;
55  }
56
57 return NULL;
58}
59
60int    roar_meta_inttype(char * type) {
61 int i;
62
63 for (i = 0; _libroar_meta_typelist[i].id != -1; i++)
64  if ( strcasecmp(_libroar_meta_typelist[i].name, type) == 0 ) {
65   return _libroar_meta_typelist[i].id;
66  }
67
68 return -1;
69}
70
71int roar_stream_meta_set (struct roar_connection * con, struct roar_stream * s, int mode, struct roar_meta * meta) {
72 struct roar_message m;
73 int len;
74
75 memset(&m, 0, sizeof(struct roar_message)); // make valgrind happy!
76
77 m.cmd     = ROAR_CMD_SET_META;
78 m.stream  = s->id;
79// m.datalen = len;
80
81 m.data[0] = 0;
82 m.data[1] = mode;
83 m.data[2] = meta->type;
84
85 m.data[3] = strlen(meta->key);
86 m.data[4] = len = strlen(meta->value);
87
88 if ( len > 255 )
89  return -1;
90
91 m.datalen = 5 + m.data[3] + m.data[4];
92 if ( m.datalen > LIBROAR_BUFFER_MSGDATA )
93  return -1;
94
95 strncpy(&(m.data[5]), meta->key, ROAR_META_MAX_NAMELEN);
96 strncpy(&(m.data[5+m.data[3]]), meta->value, len);
97
98 if ( roar_req(con, &m, NULL) == -1 )
99  return -1;
100
101 if ( m.cmd == ROAR_CMD_OK )
102  return 0;
103 return -1;
104}
105
106int roar_stream_meta_get (struct roar_connection * con, struct roar_stream * s, struct roar_meta * meta) {
107 struct roar_message m;
108 char * c;
109
110 m.cmd     = ROAR_CMD_GET_META;
111 m.stream  = s->id;
112// m.datalen = len;
113
114 m.data[0] = 0;
115 m.data[1] = meta->type;
116 m.datalen = 2;
117
118 if ( roar_req(con, &m, NULL) == -1 )
119  return -1;
120
121 if ( m.cmd != ROAR_CMD_OK )
122  return -1;
123
124 if ( m.datalen < 2 )
125  return -1;
126
127 if ( m.data[0] != 0 )
128  return -1;
129
130 if ( (c = malloc(((unsigned) m.data[1]) + 1)) == NULL )
131  return -1;
132
133 strncpy(c, &(m.data[2]), (unsigned) m.data[1]);
134 c[(unsigned) m.data[1]] = 0;
135
136 meta->value  = c;
137 meta->key[0] = 0;
138
139 return 0;
140}
141
142int roar_stream_meta_list (struct roar_connection * con, struct roar_stream * s, int * types, size_t len) {
143 int i;
144 struct roar_message m;
145
146 m.cmd     = ROAR_CMD_LIST_META;
147 m.stream  = s->id;
148
149 m.data[0] = 0;
150 m.datalen = 1;
151
152 if ( roar_req(con, &m, NULL) == -1 )
153  return -1;
154
155 if ( m.cmd != ROAR_CMD_OK )
156  return -1;
157
158 if ( m.datalen < 1 )
159  return -1;
160
161 if ( m.data[0] != 0 )
162  return -1;
163
164 if ( len < (m.datalen - 1 ) )
165  return -1;
166
167 for (i = 1; i < m.datalen; i++)
168  types[i-1] = (unsigned) m.data[i];
169
170 return m.datalen - 1;
171}
172
173int roar_meta_free (struct roar_meta * meta) {
174 if ( meta->value )
175  free(meta->value);
176
177 return 0;
178}
179
180//ll
Note: See TracBrowser for help on using the repository browser.