diff --git a/octoserve/http.c b/octoserve/http.c index 3db539d..3f17445 100644 --- a/octoserve/http.c +++ b/octoserve/http.c @@ -67,6 +67,7 @@ char xmldesc[] = "\r\n" "/\r\n" "%s\r\n" + "/channellist.lua?select=m3u\r\n" "\r\n" "\r\n" "\r\n"; diff --git a/octoserve/var/www/channellist.lua b/octoserve/var/www/channellist.lua new file mode 100644 index 0000000..f6cf075 --- /dev/null +++ b/octoserve/var/www/channellist.lua @@ -0,0 +1,100 @@ +#!/usr/bin/lua + +local db = require("DataBase") + +local host = os.getenv("HTTP_HOST") +local proto = os.getenv("SERVER_PROTOCOL") +local query = os.getenv("QUERY_STRING") +local method = os.getenv("REQUEST_METHOD") +local clength = os.getenv("CONTENT_LENGTH") +local ctype = os.getenv("CONTENT_TYPE") + +function http_print(s) + if s then + io.stdout:write(tostring(s).."\r\n") + else + io.stdout:write("\r\n") + end +end + +if #arg> 0 then + method="GET" + query="select=m3u" + proto = "HTTP/1.0" +end + +function SendError(err,desc) + http_print(proto.." "..err) + http_print("Content-Type: text/html") + http_print() + local file = io.open("e404.html") + if file then + local tmp = file:read("*a") + tmp = string.gsub(tmp,"404 Not Found",err .. " " .. desc) + http_print(tmp) + file:close() + end +end + +function CreateM3U(host,SourceList) + local m3u = "#EXTM3U".."\n" + + for _,f in pairs(SourceList) do + if f.system == "dvbs" or f.system == "dvbs2" then + for _,c in ipairs(f.ChannelList) do + m3u = m3u .. "#EXTINF:0,"..f.title.." - "..c.title.."\n" + .. "rtsp://"..host..":554/?src="..f.src.."&"..c.request.."\n" + end + else + for _,c in ipairs(f.ChannelList) do + m3u = m3u .. "#EXTINF:0,"..f.title.." - "..c.title.."\n" + .. "rtsp://"..host..":554/?src="..c.request.."\n" + end + end + end + return m3u +end + +local SourceList = {} + +for _,f in ipairs(db.SourceList) do + f.ChannelList = {} + SourceList[f.refid] = f +end + +for _,c in ipairs(db.ChannelList) do + local f = SourceList[c.refid] + if f then + table.insert(f.ChannelList,c) + end +end + +if method == "GET" then + local filename = nil + local subtype = nil + local data = nil + + if string.match(query,"select=m3u") then + filename = "channellist.m3u" + subtype = "m3u" + data = CreateM3U("10.0.4.24",SourceList) + end + + if data then + http_print(proto.." 200" ) + http_print("Pragma: no-cache") + http_print("Cache-Control: no-cache") + http_print("Content-Type: text/"..subtype) + if filename then + http_print('Content-Disposition: filename="'..filename..'"') + end + http_print(string.format("Content-Length: %d",#data)) + http_print() + http_print(data) + else + SendError("404","not found") + end + +else + SendError("500","What") +end