]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
m3u parser: add EXT-X-KEY tag parsing
authorJaroslav Kysela <perex@perex.cz>
Fri, 20 Nov 2015 08:43:17 +0000 (09:43 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 20 Nov 2015 08:54:36 +0000 (09:54 +0100)
src/misc/m3u.c

index 1ea0cac1c164aa6221b808210adcfbb410a3751e..36383f49fd76016165353d8d21c187dbe7024f74 100644 (file)
@@ -41,6 +41,8 @@ static char *get_m3u_str(char *data, char **res, int *last)
     *last = *data;
     *data = '\0';
     data++;
+    while (*last && *data == ',')
+      data++;
   }
   *res = data;
   return p;
@@ -121,7 +123,7 @@ htsmsg_t *parse_m3u
   const char *multi_name;
   int delim;
   htsmsg_t *m = htsmsg_create_map();
-  htsmsg_t *item = NULL, *l = NULL, *t;
+  htsmsg_t *item = NULL, *l = NULL, *t, *key = NULL;
   char buf[512];
 
   while (*data && *data <= ' ') data++;
@@ -209,15 +211,24 @@ multi:
           if (*data != ',') break;
         }
       }
-      if (item == NULL)
-        item = htsmsg_create_map();
-      htsmsg_add_msg(item, multi_name, t);
+      if (strcmp(multi_name, "x-key") == 0) {
+        htsmsg_destroy(key);
+        key = t;
+      } else {
+        if (item == NULL)
+          item = htsmsg_create_map();
+        htsmsg_add_msg(item, multi_name, t);
+      }
       data = until_eol(data);
       continue;
     } else if (strncmp(data, "#EXT-X-MEDIA:", 13) == 0) {
       data += 13;
       multi_name = "x-media";
       goto multi;
+    } else if (strncmp(data, "#EXT-X-KEY:", 11) == 0) {
+      data += 11;
+      multi_name = "x-key";
+      goto multi;
     } else if (strncmp(data, "#EXT-X-ENDLIST", 14) == 0) {
       htsmsg_add_bool(m, "x-endlist", 1);
       data = until_eol(data + 14);
@@ -264,11 +275,14 @@ multi:
     if (item) {
       if (l == NULL)
         l = htsmsg_create_list();
+      if (key)
+        htsmsg_add_msg(item, "x-key", htsmsg_copy(key));
       htsmsg_add_msg(l, NULL, item);
       item = NULL;
     }
   }
 
+  htsmsg_destroy(key);
   if (l == NULL)
     l = htsmsg_create_list();
   htsmsg_add_msg(m, "items", l);