source: roaraudio/libroar/meta.c @ 102:c130ed86ee1d

Last change on this file since 102:c130ed86ee1d was 102:c130ed86ee1d, checked in by phi, 16 years ago

added roar_stream_meta_get()

File size: 1.4 KB
Line 
1//meta.c:
2
3#include "libroar.h"
4
5int roar_stream_meta_set (struct roar_connection * con, struct roar_stream * s, int mode, struct roar_meta * meta) {
6 struct roar_message m;
7 int len;
8
9 m.cmd     = ROAR_CMD_SET_META;
10 m.stream  = s->id;
11// m.datalen = len;
12
13 m.data[0] = 0;
14 m.data[1] = mode;
15 m.data[2] = meta->type;
16
17 m.data[3] = strlen(meta->key);
18 m.data[4] = len = strlen(meta->value);
19
20 if ( len > 255 )
21  return -1;
22
23 m.datalen = 5 + m.data[3] + m.data[4];
24 if ( m.datalen > LIBROAR_BUFFER_MSGDATA )
25  return -1;
26
27 strncpy(&(m.data[5]), meta->key, ROAR_META_MAX_NAMELEN);
28 strncpy(&(m.data[5+m.data[3]]), meta->value, len);
29
30 if ( roar_req(con, &m, NULL) == -1 )
31  return -1;
32
33 if ( m.cmd == ROAR_CMD_OK )
34  return 0;
35 return -1;
36}
37
38int roar_stream_meta_get (struct roar_connection * con, struct roar_stream * s, struct roar_meta * meta) {
39 struct roar_message m;
40 char * c;
41
42 m.cmd     = ROAR_CMD_SET_META;
43 m.stream  = s->id;
44// m.datalen = len;
45
46 m.data[0] = 0;
47 m.data[1] = meta->type;
48 m.datalen = 2;
49
50 if ( m.cmd != ROAR_CMD_OK )
51  return -1;
52
53 if ( m.datalen < 2 )
54  return -1;
55
56 if ( m.data[0] != 0 )
57  return -1;
58
59 if ( (c = malloc(((unsigned) m.data[1]) + 1)) == NULL )
60  return -1;
61
62 strncpy(c, &(m.data[2]), (unsigned) m.data[1]);
63 c[(unsigned) m.data[1]] = 0;
64
65 meta->value  = c;
66 meta->key[0] = 0;
67
68 return 0;
69}
70
71int roar_meta_free (struct roar_meta * meta) {
72 if ( meta->value )
73  free(meta->value);
74
75 return 0;
76}
77
78//ll
Note: See TracBrowser for help on using the repository browser.