]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/audio/zuke/icy.c
zuke: treat toggle as play in stopped state
[plan9front.git] / sys / src / cmd / audio / zuke / icy.c
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include "plist.h"
5 #include "icy.h"
6
7 int
8 icyfill(Meta *m)
9 {
10         char *s, *s0, *e, *p, *path, *d;
11         int f, n;
12
13         path = strdup(m->path);
14         s = strchr(path, ':')+3;
15         if((e = strchr(s, '/')) != nil)
16                 *e++ = 0;
17         if((p = strchr(s, ':')) != nil)
18                 *p = '!';
19         p = smprint("tcp!%s", s);
20         free(path);
21         f = -1;
22         if((d = netmkaddr(p, "tcp", "80")) != nil)
23                 f = dial(d, nil, nil, nil);
24         free(p);
25         if(f < 0)
26                 return -1;
27         fprint(f, "GET /%s HTTP/0.9\r\nIcy-MetaData: 1\r\n\r\n", e ? e : "");
28         s0 = malloc(4096);
29         if((n = readn(f, s0, 4095)) > 0){
30                 s0[n] = 0;
31                 for(s = s0; s = strchr(s, '\n');){
32                         s++;
33                         if(strncmp(s, "icy-name:", 9) == 0 && (e = strchr(s, '\r')) != nil){
34                                 *e = 0;
35                                 m->artist[0] = strdup(s+9);
36                                 m->numartist = 1;
37                                 s = e+1;
38                         }else if(strncmp(s, "icy-url:", 8) == 0 && (e = strchr(s, '\r')) != nil){
39                                 *e = 0;
40                                 m->title = strdup(s+8);
41                                 s = e+1;
42                         }
43                 }
44         }
45         free(s0);
46         close(f);
47
48         return n > 0 ? 0 : -1;
49 }