char *s;
htsbuf_queue_init(&q, 0);
for (arg = argv; *arg; arg++) {
- htsbuf_append(&q, *arg, strlen(*arg));
+ htsbuf_append_str(&q, *arg);
if (arg[1])
htsbuf_append(&q, " ", 1);
}
if(esc != NULL) {
htsbuf_append(hq, s, c - s - 1);
- htsbuf_append(hq, esc, strlen(esc));
+ htsbuf_append_str(hq, esc);
s = c;
}
if(esc != NULL) {
htsbuf_append(hq, s, c - s - 1);
- htsbuf_append(hq, esc, strlen(esc));
+ htsbuf_append_str(hq, esc);
s = c;
}
case HMF_BOOL:
s = f->hmf_bool ? "true" : "false";
- htsbuf_append(hq, s, strlen(s));
+ htsbuf_append_str(hq, s);
break;
case HMF_S64:
snprintf(buf, sizeof(buf), "%" PRId64, f->hmf_s64);
- htsbuf_append(hq, buf, strlen(buf));
+ htsbuf_append_str(hq, buf);
break;
case HMF_DBL:
my_double2str(buf, sizeof(buf), f->hmf_dbl);
- htsbuf_append(hq, buf, strlen(buf));
+ htsbuf_append_str(hq, buf);
break;
default:
http_ver2str(hc->hc_version), rc, http_rc2str(rc));
if (hc->hc_version != RTSP_VERSION_1_0){
- htsbuf_qprintf(&hdrs, "Server: HTS/tvheadend\r\n");
+ htsbuf_append_str(&hdrs, "Server: HTS/tvheadend\r\n");
if (config.cors_origin && config.cors_origin[0]) {
htsbuf_qprintf(&hdrs, "Access-Control-Allow-Origin: %s\r\n", config.cors_origin);
- htsbuf_qprintf(&hdrs, "Access-Control-Allow-Methods: POST, GET, OPTIONS\r\n");
- htsbuf_qprintf(&hdrs, "Access-Control-Allow-Headers: x-requested-with\r\n");
+ htsbuf_append_str(&hdrs, "Access-Control-Allow-Methods: POST, GET, OPTIONS\r\n");
+ htsbuf_append_str(&hdrs, "Access-Control-Allow-Headers: x-requested-with\r\n");
}
}
if(maxage == 0) {
if (hc->hc_version != RTSP_VERSION_1_0)
- htsbuf_qprintf(&hdrs, "Cache-Control: no-cache\r\n");
+ htsbuf_append_str(&hdrs, "Cache-Control: no-cache\r\n");
} else if (maxage > 0) {
time(&t);
}
if(rc == HTTP_STATUS_UNAUTHORIZED)
- htsbuf_qprintf(&hdrs, "WWW-Authenticate: Basic realm=\"tvheadend\"\r\n");
+ htsbuf_append_str(&hdrs, "WWW-Authenticate: Basic realm=\"tvheadend\"\r\n");
if (hc->hc_logout_cookie == 1) {
- htsbuf_qprintf(&hdrs, "Set-Cookie: logout=1; Path=\"/logout\"\r\n");
+ htsbuf_append_str(&hdrs, "Set-Cookie: logout=1; Path=\"/logout\"\r\n");
} else if (hc->hc_logout_cookie == 2) {
- htsbuf_qprintf(&hdrs, "Set-Cookie: logout=0; Path=\"/logout'\"; expires=Thu, 01 Jan 1970 00:00:00 GMT\r\n");
+ htsbuf_append_str(&hdrs, "Set-Cookie: logout=0; Path=\"/logout'\"; expires=Thu, 01 Jan 1970 00:00:00 GMT\r\n");
}
if (hc->hc_version != RTSP_VERSION_1_0)
if(contentlen > 0)
htsbuf_qprintf(&hdrs, "Content-Length: %"PRId64"\r\n", contentlen);
else if(contentlen == INT64_MIN)
- htsbuf_qprintf(&hdrs, "Content-Length: 0\r\n");
+ htsbuf_append_str(&hdrs, "Content-Length: 0\r\n");
if(range) {
htsbuf_qprintf(&hdrs, "Accept-Ranges: %s\r\n", "bytes");
if(hc->hc_session && !sess)
htsbuf_qprintf(&hdrs, "Session: %s\r\n", hc->hc_session);
- htsbuf_qprintf(&hdrs, "\r\n");
+ htsbuf_append_str(&hdrs, "\r\n");
tcp_write_queue(hc->hc_fd, &hdrs);
}
htsbuf_qprintf(&hc->hc_reply, "<P><A HREF=\"%s/\">Default Login</A></P>",
tvheadend_webroot ? tvheadend_webroot : "");
- htsbuf_qprintf(&hc->hc_reply, "</BODY></HTML>\r\n");
+ htsbuf_append_str(&hc->hc_reply, "</BODY></HTML>\r\n");
http_send_reply(hc, error, "text/html", NULL, NULL, 0);
} else {
int first = 1;
htsbuf_queue_init(&hq, 0);
if (!external && tvheadend_webroot && location[0] == '/')
- htsbuf_append(&hq, tvheadend_webroot, strlen(tvheadend_webroot));
- htsbuf_append(&hq, location, strlen(location));
+ htsbuf_append_str(&hq, tvheadend_webroot);
+ htsbuf_append_str(&hq, location);
TAILQ_FOREACH(ra, req_args, link) {
if (!first)
htsbuf_append(&hq, "&", 1);
free(wcmd);
return -EINVAL;
}
- htsbuf_append(&q, s, strlen(s));
+ htsbuf_append_str(&q, s);
htsbuf_append(&q, " ", 1);
if (path == NULL || path[0] == '\0')
path = "/";
- htsbuf_append(&q, path, strlen(path));
+ htsbuf_append_str(&q, path);
if (query && query[0] != '\0') {
htsbuf_append(&q, "?", 1);
- htsbuf_append(&q, query, strlen(query));
+ htsbuf_append_str(&q, query);
}
htsbuf_append(&q, " ", 1);
s = http_ver2str(hc->hc_version);
htsbuf_queue_flush(&q);
goto error;
}
- htsbuf_append(&q, s, strlen(s));
+ htsbuf_append_str(&q, s);
htsbuf_append(&q, "\r\n", 2);
if (header) {
TAILQ_FOREACH(h, header, link) {
- htsbuf_append(&q, h->key, strlen(h->key));
+ htsbuf_append_str(&q, h->key);
htsbuf_append(&q, ": ", 2);
- htsbuf_append(&q, h->val, strlen(h->val));
+ htsbuf_append_str(&q, h->val);
htsbuf_append(&q, "\r\n", 2);
if (strcasecmp(h->key, "Connection") == 0 &&
strcasecmp(h->val, "close") == 0)
unsigned long mono = getmonoclock();
int dvbt, dvbc;
- htsbuf_qprintf(q, "v=0\r\n");
+ htsbuf_append_str(q, "v=0\r\n");
htsbuf_qprintf(q, "o=- %lu %lu IN %s %s\r\n",
rs ? (unsigned long)rs->nsession : mono - 123,
mono,
htsbuf_append(q, "\r\n", 1);
pthread_mutex_unlock(&global_lock);
- htsbuf_qprintf(q, "t=0 0\r\n");
+ htsbuf_append_str(q, "t=0 0\r\n");
}
static void
char buf[4096];
htsbuf_qprintf(q, "a=control:stream=%d\r\n", rs->stream);
- htsbuf_qprintf(q, "a=tool:tvheadend\r\n");
- htsbuf_qprintf(q, "m=video 0 RTP/AVP 33\r\n");
+ htsbuf_append_str(q, "a=tool:tvheadend\r\n");
+ htsbuf_append_str(q, "m=video 0 RTP/AVP 33\r\n");
if (strchr(rtsp_ip, ':'))
- htsbuf_qprintf(q, "c=IN IP6 ::0\r\n");
+ htsbuf_append_str(q, "c=IN IP6 ::0\r\n");
else
- htsbuf_qprintf(q, "c=IN IP4 0.0.0.0\r\n");
+ htsbuf_append_str(q, "c=IN IP4 0.0.0.0\r\n");
if (rs->state == STATE_PLAY) {
satip_rtp_status((void *)(intptr_t)rs->stream, buf, sizeof(buf));
htsbuf_qprintf(q, "a=fmtp:33 %s\r\n", buf);
- htsbuf_qprintf(q, "a=sendonly\r\n");
+ htsbuf_append_str(q, "a=sendonly\r\n");
} else {
- htsbuf_qprintf(q, "a=fmtp:33\r\n");
- htsbuf_qprintf(q, "a=inactive\r\n");
+ htsbuf_append_str(q, "a=fmtp:33\r\n");
+ htsbuf_append_str(q, "a=inactive\r\n");
}
}
usn2, (long)satip_server_bootid);
htsbuf_queue_init(&q, 0);
- htsbuf_append(&q, buf, strlen(buf));
+ htsbuf_append_str(&q, buf);
upnp_send(&q, NULL, attempt * 11, 1);
htsbuf_queue_flush(&q);
}
satip_server_deviceid);
htsbuf_queue_init(&q, 0);
- htsbuf_append(&q, buf, strlen(buf));
+ htsbuf_append_str(&q, buf);
upnp_send(&q, NULL, attempt * 11, 1);
htsbuf_queue_flush(&q);
}
satip_server_conf.satip_uuid, (long)satip_server_bootid);
htsbuf_queue_init(&q, 0);
- htsbuf_append(&q, buf, strlen(buf));
+ htsbuf_append_str(&q, buf);
if (deviceid)
htsbuf_qprintf(&q, "DEVICEID.SES.COM: %s", deviceid);
htsbuf_append(&q, "\r\n", 2);
extjs_load(htsbuf_queue_t *hq, const char *script, ...)
{
va_list ap;
- htsbuf_qprintf(hq, "<script type=\"text/javascript\" src=\"");
+ htsbuf_append_str(hq, "<script type=\"text/javascript\" src=\"");
va_start(ap, script);
htsbuf_vqprintf(hq, script, ap);
va_end(ap);
- htsbuf_qprintf(hq, "\"></script>\n");
+ htsbuf_append_str(hq, "\"></script>\n");
}
/**
{
va_list ap;
- htsbuf_qprintf(hq, "<link rel=\"stylesheet\" type=\"text/css\" href=\"");
+ htsbuf_append_str(hq, "<link rel=\"stylesheet\" type=\"text/css\" href=\"");
va_start(ap, css);
htsbuf_vqprintf(hq, css, ap);
va_end(ap);
- htsbuf_qprintf(hq, "\"/>\n");
+ htsbuf_append_str(hq, "\"/>\n");
}
/**
{
va_list ap;
- htsbuf_qprintf(hq, "<script type=\"text/javascript\">\n");
+ htsbuf_append_str(hq, "<script type=\"text/javascript\">\n");
va_start(ap, fmt);
htsbuf_vqprintf(hq, fmt, ap);
va_end(ap);
- htsbuf_qprintf(hq, "\n</script>\n");
+ htsbuf_append_str(hq, "\n</script>\n");
}
/**
{
htsbuf_queue_t *hq = &hc->hc_reply;
- htsbuf_qprintf(hq, "<html>\n");
- htsbuf_qprintf(hq, "<head>\n");
+ htsbuf_append_str(hq, "<html>\n");
+ htsbuf_append_str(hq, "<head>\n");
- htsbuf_qprintf(hq, "<meta name=\"apple-itunes-app\" content=\"app-id=638900112\">\n");
+ htsbuf_append_str(hq, "<meta name=\"apple-itunes-app\" content=\"app-id=638900112\">\n");
if (tvheadend_webui_debug) {
");
- htsbuf_qprintf(hq,
+ htsbuf_append_str(hq,
"<style type=\"text/css\">\n"
"html, body {\n"
"\tfont:normal 12px verdana;\n"
"\tmargin:5px;\n"
"}\n"
"</style>\n"
- "<title>%s</title>\n"
+ "<title>");
+ htsbuf_append_str(hq, config.server_name);
+ htsbuf_append_str(hq,
+ "</title>\n"
"</head>\n"
"<body>\n"
"<div id=\"systemlog\"></div>\n"
- "</body></html>\n",
- config.server_name);
+ "</body></html>\n");
http_output_html(hc);
return 0;
{
htsbuf_queue_t *hq = &hc->hc_reply;
- htsbuf_qprintf(hq, "<!DOCTYPE html>\n");
- htsbuf_qprintf(hq, "<html>\n");
- htsbuf_qprintf(hq, "<head>\n");
- htsbuf_qprintf(hq, "<title>%s</title>\n", config.server_name);
+ htsbuf_append_str(hq, "<!DOCTYPE html>\n");
+ htsbuf_append_str(hq, "<html>\n");
+ htsbuf_append_str(hq, "<head>\n");
+ htsbuf_append_str(hq, "<title>");
+ htsbuf_append_str(hq, config.server_name);
+ htsbuf_append_str(hq, "</title>\n");
if (tvheadend_webui_debug) {
extjs_exec(hq, "Ext.onReady(tv.app.init, tv.app);");
- htsbuf_qprintf(hq, "</head>\n");
- htsbuf_qprintf(hq, "<body></body>\n");
- htsbuf_qprintf(hq, "</html>\n");
+ htsbuf_append_str(hq, "</head>\n");
+ htsbuf_append_str(hq, "<body></body>\n");
+ htsbuf_append_str(hq, "</html>\n");
http_output_html(hc);
const char *svcname, const char *logo,
const char *epgid, access_t *access)
{
- htsbuf_qprintf(hq, "#EXTINF:-1");
+ htsbuf_append_str(hq, "#EXTINF:-1");
if (logo) {
if (strncmp(logo, "imagecache/", 11) == 0)
htsbuf_qprintf(hq, " logo=\"%s/%s\"", hostpath, logo);
const char *url_remain, const char *profile,
const char *svcname)
{
- htsbuf_qprintf(hq, "#SERVICE 1:0:0:0:0:0:0:0:0:0:");
+ htsbuf_append_str(hq, "#SERVICE 1:0:0:0:0:0:0:0:0:0:");
htsbuf_append_and_escape_url(hq, hostpath);
htsbuf_append_and_escape_url(hq, url_remain);
htsbuf_qprintf(hq, "&profile=%s:%s\n", profile, svcname);
name = channel_get_name(ch);
logo = channel_get_icon(ch);
snprintf(buf, sizeof(buf), "/stream/channelid/%d", channel_get_id(ch));
- htsbuf_qprintf(hq, "#EXTINF:-1");
+ htsbuf_append_str(hq, "#EXTINF:-1");
if (logo) {
if (strncmp(logo, "imagecache/", 11) == 0)
htsbuf_qprintf(hq, " logo=%s/%s", hostpath, logo);
if (pltype == PLAYLIST_M3U) {
- htsbuf_qprintf(hq, "#EXTM3U\n");
+ htsbuf_append_str(hq, "#EXTM3U\n");
http_m3u_playlist_add(hq, hostpath, buf, profile, name,
channel_get_icon(channel),
channel_get_suuid(channel),
qsort(chlist, count, sizeof(channel_t *), http_channel_playlist_cmp);
if (pltype == PLAYLIST_M3U)
- htsbuf_qprintf(hq, "#EXTM3U\n");
+ htsbuf_append_str(hq, "#EXTM3U\n");
else if (pltype == PLAYLIST_E2)
htsbuf_qprintf(hq, "#NAME %s\n", tag->ct_name);
for (idx = 0; idx < count; idx++) {
chlist = NULL;
}
- htsbuf_qprintf(hq, pltype == PLAYLIST_E2 ? "#NAME Tvheadend Channels\n" : "#EXTM3U\n");
+ htsbuf_append_str(hq, pltype == PLAYLIST_E2 ? "#NAME Tvheadend Channels\n" : "#EXTM3U\n");
for (idx = 0; idx < count; idx++) {
ct = ctlist[idx];
qsort(chlist, count, sizeof(channel_t *), http_channel_playlist_cmp);
- htsbuf_qprintf(hq, pltype == PLAYLIST_E2 ? "#NAME Tvheadend Channels\n" : "#EXTM3U\n");
+ htsbuf_append_str(hq, pltype == PLAYLIST_E2 ? "#NAME Tvheadend Channels\n" : "#EXTM3U\n");
for (idx = 0; idx < count; idx++) {
ch = chlist[idx];
hq = &hc->hc_reply;
hostpath = http_get_hostpath(hc);
- htsbuf_qprintf(hq, "#EXTM3U\n");
+ htsbuf_append_str(hq, "#EXTM3U\n");
LIST_FOREACH(de, &dvrentries, de_global_link) {
fsize = dvr_get_filesize(de);
if(!fsize)
bandwidth = ((8*fsize) / (durration*1024.0));
strftime(buf, sizeof(buf), "%FT%T%z", localtime_r(&(de->de_start), &tm));
- htsbuf_qprintf(hq, "#EXTM3U\n");
+ htsbuf_append_str(hq, "#EXTM3U\n");
htsbuf_qprintf(hq, "#EXTINF:%"PRItime_t",%s\n", durration, lang_str_get(de->de_title, NULL));
htsbuf_qprintf(hq, "#EXT-X-TARGETDURATION:%"PRItime_t"\n", durration);