shithub: zuke

ref: 108260c329f31c919d3ce9f4eb7a51dd88a32919
dir: /icy.c/

View raw version
int
icyfill(Meta *m)
{
	char *s, *e, *p, *path, *d;
	int f, r, n;

	path = strdup(m->path);
	s = strchr(path, ':')+3;
	if((e = strchr(s, '/')) != nil)
		*e++ = 0;
	if((p = strchr(s, ':')) != nil)
		*p = '!';
	p = smprint("tcp!%s", s);
	free(path);
	d = netmkaddr(p, "tcp", "80");
	free(p);
	if((f = dial(d, nil, nil, nil)) < 0)
		return -1;
	fprint(f, "GET /%s HTTP/0.9\r\nIcy-MetaData: 1\r\n\r\n", e ? e : "");
	s = malloc(4096);
	for(r = 0; r < 4096; r += n){
		if((n = read(f, s+r, 4096-r)) < 1)
			break;
	}
	s[r] = 0;
	for(; s = strchr(s, '\n');){
		s++;
		if(strncmp(s, "icy-name:", 9) == 0 && (e = strchr(s, '\r')) != nil){
			*e = 0;
			m->artist[0] = strdup(s+9);
			m->numartist = 1;
			s = e+1;
		}else if(strncmp(s, "icy-url:", 8) == 0 && (e = strchr(s, '\r')) != nil){
			*e = 0;
			m->title = strdup(s+8);
			s = e+1;
		}
	}
	close(f);

	return 0;
}