Index: server/connectionHTTP.h
===================================================================
RCS file: /var/cvsroot/streamdev/server/connectionHTTP.h,v
retrieving revision 1.4
diff -u -r1.4 connectionHTTP.h
--- server/connectionHTTP.h 2 Apr 2007 10:32:34 -0000 1.4
+++ server/connectionHTTP.h 3 Apr 2007 16:07:18 -0000
@@ -25,6 +25,7 @@
enum eHTTPJob {
hjTransfer,
hjListing,
+ hjListing_m3u,
};
std::string m_Request;
Index: server/connectionHTTP.c
===================================================================
RCS file: /var/cvsroot/streamdev/server/connectionHTTP.c,v
retrieving revision 1.10
diff -u -r1.10 connectionHTTP.c
--- server/connectionHTTP.c 26 Jan 2006 19:40:18 -0000 1.10
+++ server/connectionHTTP.c 3 Apr 2007 16:07:18 -0000
@@ -57,6 +57,12 @@
&& Respond("
VDR Channel Listing")
&& Respond("");
+ case hjListing_m3u:
+ return Respond("HTTP/1.0 200 OK")
+ && Respond("Content-Type: text/plain")
+ && Respond("")
+ && Respond("#EXTM3U");
+
case hjTransfer:
if (m_Channel == NULL) {
DeferClose();
@@ -141,6 +147,23 @@
m_ListChannel = Channels.Next(m_ListChannel);
break;
+ case hjListing_m3u:
+ if (m_ListChannel == NULL) {
+ DeferClose();
+ m_Status = hsFinished;
+ return;
+ }
+
+ line = (std::string)"#EXTINF:0," + (const char *)itoa(m_ListChannel->Number()) + " "
+ + m_ListChannel->Name() + "\r\n" + "http://"
+ + LocalIp() + ":" + (const char*)itoa(StreamdevServerSetup.HTTPServerPort) + "/TS/"
+ + (const char*)m_ListChannel->GetChannelID().ToString();
+
+ if (!Respond(line.c_str()))
+ DeferClose();
+ m_ListChannel = Channels.Next(m_ListChannel);
+ break;
+
case hjTransfer:
Dprintf("streamer start\n");
m_LiveStreamer->Start(this);
@@ -188,6 +211,9 @@
if (filespec == "" || filespec.substr(0, 12) == "channels.htm") {
m_ListChannel = Channels.First();
m_Job = hjListing;
+ } else if (filespec.substr(0, 12) == "channels.m3u") {
+ m_ListChannel = Channels.First();
+ m_Job = hjListing_m3u;
} else if ((chan = ChannelFromString(filespec.c_str(), &apid)) != NULL) {
m_Channel = chan;
m_Apid = apid;