summaryrefslogtreecommitdiff
path: root/server/streamdev-server.c
diff options
context:
space:
mode:
authorFrank Schmirler <vdr@schmirler.de>2010-12-02 09:48:23 +0100
committerFrank Schmirler <vdr@schmirler.de>2010-12-02 09:48:23 +0100
commit11b22d9f33d50f20cba1eaee2aadb55d3580d879 (patch)
tree5c4e7fe1046bd9cc1ef7a7b21abe118f43689902 /server/streamdev-server.c
parent435f01649c2ee8c23c21e0680d0a39e773008549 (diff)
downloadvdr-plugin-streamdev-11b22d9f33d50f20cba1eaee2aadb55d3580d879.tar.gz
vdr-plugin-streamdev-11b22d9f33d50f20cba1eaee2aadb55d3580d879.tar.bz2
Streamdev 0.5.0-rc1
Diffstat (limited to 'server/streamdev-server.c')
-rw-r--r--server/streamdev-server.c143
1 files changed, 143 insertions, 0 deletions
diff --git a/server/streamdev-server.c b/server/streamdev-server.c
new file mode 100644
index 0000000..8e9f979
--- /dev/null
+++ b/server/streamdev-server.c
@@ -0,0 +1,143 @@
+/*
+ * streamdev.c: A plugin for the Video Disk Recorder
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id: streamdev-server.c,v 1.1.2.1 2010/06/14 10:40:20 schmirl Exp $
+ */
+
+#include <getopt.h>
+#include <vdr/tools.h>
+#include "streamdev-server.h"
+#include "server/setup.h"
+#include "server/server.h"
+#include "server/suspend.h"
+
+#if !defined(APIVERSNUM) || APIVERSNUM < 10509
+#error "VDR-1.5.9 API version or greater is required!"
+#endif
+
+const char *cPluginStreamdevServer::DESCRIPTION = trNOOP("VDR Streaming Server");
+
+cPluginStreamdevServer::cPluginStreamdevServer(void)
+{
+}
+
+cPluginStreamdevServer::~cPluginStreamdevServer()
+{
+ free(opt_auth);
+ free(opt_remux);
+}
+
+const char *cPluginStreamdevServer::Description(void)
+{
+ return tr(DESCRIPTION);
+}
+
+const char *cPluginStreamdevServer::CommandLineHelp(void)
+{
+ // return a string that describes all known command line options.
+ return
+ " -a <LOGIN:PASSWORD>, --auth=<LOGIN:PASSWORD> Credentials for HTTP authentication.\n"
+ " -r <CMD>, --remux=<CMD> Define an external command for remuxing.\n"
+ ;
+}
+
+bool cPluginStreamdevServer::ProcessArgs(int argc, char *argv[])
+{
+ // implement command line argument processing here if applicable.
+ static const struct option long_options[] = {
+ { "auth", required_argument, NULL, 'a' },
+ { "remux", required_argument, NULL, 'r' },
+ { NULL, 0, NULL, 0 }
+ };
+
+ int c;
+ while((c = getopt_long(argc, argv, "a:r:", long_options, NULL)) != -1) {
+ switch (c) {
+ case 'a':
+ {
+ if (opt_auth)
+ free(opt_auth);
+ int l = strlen(optarg);
+ cBase64Encoder Base64((uchar*) optarg, l, l * 4 / 3 + 3);
+ const char *s = Base64.NextLine();
+ if (s)
+ opt_auth = strdup(s);
+ }
+ break;
+ case 'r':
+ if (opt_remux)
+ free(opt_remux);
+ opt_remux = strdup(optarg);
+ break;
+ default:
+ return false;
+ }
+ }
+ return true;
+}
+
+bool cPluginStreamdevServer::Start(void)
+{
+ I18nRegister(PLUGIN_NAME_I18N);
+ if (!StreamdevHosts.Load(STREAMDEVHOSTSPATH, true, true)) {
+ esyslog("streamdev-server: error while loading %s", STREAMDEVHOSTSPATH);
+ fprintf(stderr, "streamdev-server: error while loading %s\n", STREAMDEVHOSTSPATH);
+ if (access(STREAMDEVHOSTSPATH, F_OK) != 0) {
+ fprintf(stderr, " Please install streamdevhosts.conf into the path "
+ "printed above. Without it\n"
+ " no client will be able to access your streaming-"
+ "server. An example can be\n"
+ " found together with this plugin's sources.\n");
+ }
+ return false;
+ }
+ if (!opt_remux)
+ opt_remux = strdup(DEFAULT_EXTERNREMUX);
+
+ cStreamdevServer::Initialize();
+
+ return true;
+}
+
+void cPluginStreamdevServer::Stop(void)
+{
+ cStreamdevServer::Destruct();
+}
+
+cString cPluginStreamdevServer::Active(void)
+{
+ if (cStreamdevServer::Active())
+ {
+ static const char *Message = NULL;
+ if (!Message) Message = tr("Streaming active");
+ return Message;
+ }
+ return NULL;
+}
+
+const char *cPluginStreamdevServer::MainMenuEntry(void)
+{
+ if (StreamdevServerSetup.SuspendMode == smOffer && !cSuspendCtl::IsActive())
+ return tr("Suspend Live TV");
+ return NULL;
+}
+
+cOsdObject *cPluginStreamdevServer::MainMenuAction(void)
+{
+ cControl::Launch(new cSuspendCtl);
+ return NULL;
+}
+
+cMenuSetupPage *cPluginStreamdevServer::SetupMenu(void)
+{
+ return new cStreamdevServerMenuSetupPage;
+}
+
+bool cPluginStreamdevServer::SetupParse(const char *Name, const char *Value)
+{
+ return StreamdevServerSetup.SetupParse(Name, Value);
+}
+
+VDRPLUGINCREATOR(cPluginStreamdevServer); // Don't touch this!