]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
http: add http_arg_get_query() fcn
authorJaroslav Kysela <perex@perex.cz>
Sat, 2 Dec 2017 17:55:44 +0000 (18:55 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sat, 2 Dec 2017 17:55:44 +0000 (18:55 +0100)
src/http.c
src/http.h
src/input/mpegts/iptv/iptv_auto.c

index b6ef09bd59659194729b3d67ba833cfb07d07625..f5e5d5d0c3a1957e9f3761e8c4693fa4ae55831a 100644 (file)
@@ -1487,7 +1487,7 @@ http_arg_remove(struct http_arg_list *list, struct http_arg *arg)
  * Delete all arguments associated with a connection
  */
 void
-http_arg_flush(struct http_arg_list *list)
+http_arg_flush(http_arg_list_t *list)
 {
   http_arg_t *ra;
   while((ra = TAILQ_FIRST(list)) != NULL)
@@ -1499,7 +1499,7 @@ http_arg_flush(struct http_arg_list *list)
  * Find an argument associated with a connection
  */
 char *
-http_arg_get(struct http_arg_list *list, const char *name)
+http_arg_get(http_arg_list_t *list, const char *name)
 {
   http_arg_t *ra;
   TAILQ_FOREACH(ra, list, link)
@@ -1549,6 +1549,34 @@ http_arg_set(struct http_arg_list *list, const char *key, const char *val)
   ra->val = val ? strdup(val) : NULL;
 }
 
+/*
+ *
+ */
+char *
+http_arg_get_query(http_arg_list_t *args)
+{
+  htsbuf_queue_t q;
+  http_arg_t *ra;
+  char *r;
+
+  if (http_args_empty(args))
+    return NULL;
+  htsbuf_queue_init(&q, 0);
+  htsbuf_queue_init(&q, 0);
+  TAILQ_FOREACH(ra, args, link) {
+    if (!htsbuf_empty(&q))
+      htsbuf_append(&q, "&", 1);
+    htsbuf_append_and_escape_url(&q, ra->key);
+    if (ra->val) {
+      htsbuf_append(&q, "=", 1);
+      htsbuf_append_and_escape_url(&q, ra->val);
+    }
+  }
+  r = htsbuf_to_string(&q);
+  htsbuf_queue_flush(&q);
+  return r;
+}
+
 /*
  * Split a string in components delimited by 'delimiter'
  */
index a35c6094a8dfbb54f0a75b063af436dea06aefe4..6c66a863bb2f28eb38dd4f82ae99a6bd5b342268 100644 (file)
@@ -190,20 +190,22 @@ int http_str2cmd(const char *str);
 const char *http_ver2str(int val);
 int http_str2ver(const char *str);
 
-static inline void http_arg_init(struct http_arg_list *list)
+static inline void http_arg_init(http_arg_list_t *list)
 {
   TAILQ_INIT(list);
 }
 
-void http_arg_remove(struct http_arg_list *list, struct http_arg *arg);
-void http_arg_flush(struct http_arg_list *list);
+void http_arg_remove(http_arg_list_t *list, struct http_arg *arg);
+void http_arg_flush(http_arg_list_t *list);
 
-char *http_arg_get(struct http_arg_list *list, const char *name);
-char *http_arg_get_remove(struct http_arg_list *list, const char *name);
+char *http_arg_get(http_arg_list_t *list, const char *name);
+char *http_arg_get_remove(http_arg_list_t *list, const char *name);
 
-void http_arg_set(struct http_arg_list *list, const char *key, const char *val);
+void http_arg_set(http_arg_list_t *list, const char *key, const char *val);
 
-static inline int http_args_empty(const struct http_arg_list *list) { return TAILQ_EMPTY(list); }
+char *http_arg_get_query(http_arg_list_t *list);
+
+static inline int http_args_empty(const http_arg_list_t *list) { return TAILQ_EMPTY(list); }
 
 int http_tokenize(char *buf, char **vec, int vecsize, int delimiter);
 
index 1cad3a601f7d34916944db755907d37dec934e65..0048401696a7a3fa06c1963e9b1a9327e937554f 100644 (file)
@@ -80,7 +80,6 @@ iptv_auto_network_process_m3u_item(iptv_network_t *in,
   int change, epgcfg;
   http_arg_list_t args;
   http_arg_t *ra1, *ra2, *ra2_next;
-  htsbuf_queue_t q;
   size_t l;
   int64_t chnum2, vlcprog;
   const char *url, *name, *logo, *epgid, *tags;
@@ -164,22 +163,7 @@ iptv_auto_network_process_m3u_item(iptv_network_t *in,
           http_arg_remove(&args, ra2);
       }
     free(u.query);
-    u.query = NULL;
-    if (!http_args_empty(&args)) {
-      htsbuf_queue_init(&q, 0);
-      TAILQ_FOREACH(ra1, &args, link) {
-        if (!htsbuf_empty(&q))
-          htsbuf_append(&q, "&", 1);
-        htsbuf_append_and_escape_url(&q, ra1->key);
-        if (ra1->val) {
-          htsbuf_append(&q, "=", 1);
-          htsbuf_append_and_escape_url(&q, ra1->val);
-        }
-      }
-      free(u.query);
-      u.query = htsbuf_to_string(&q);
-      htsbuf_queue_flush(&q);
-    }
+    u.query = http_arg_get_query(&args);
     http_arg_flush(&args);
     if (!urlrecompose(&u))
       url = u.raw;