* 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)
* 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)
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'
*/
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);
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;
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;