ref: c87b8ced7e890bc8f961f5095133ff32afc5b490
parent: fdbf31f12cf811f66a123fa5abcd87b68ec771b7
author: Sigrid Haflínudóttir <ftrvxmtrx@gmail.com>
date: Wed Jun 10 14:47:24 EDT 2020
mkplist: query IceCast metadata
--- /dev/null
+++ b/icy.c
@@ -1,0 +1,39 @@
+int
+icyfill(Meta *m)
+{
+ char *s, *e, *p, *d, tmp[128];
+ int f, r, n;
+
+ s = strchr(m->path, ':')+3;
+ if((e = strchr(s, '/')) != nil)
+ *e++ = 0;
+ if((p = strchr(s, ':')) != nil)
+ *p = '!';
+ sprint(tmp, "tcp!%s", s);
+ d = netmkaddr(tmp, "tcp", "80");
+ 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;
+}
--- a/mkplist.c
+++ b/mkplist.c
@@ -3,6 +3,7 @@
#include <bio.h>
#include <tags.h>
#include "plist.h"
+#include "icy.c"
enum
{
@@ -301,6 +302,8 @@
curr->title = argv[i];
curr->path = argv[i];
curr->filefmt = "";
+ if(icyfill(curr) != 0)
+ fprint(2, "%s: %r\n", argv[i]);
}else{
dir = strdup(argv[i]);
scan(&dir, 0);