summaryrefslogtreecommitdiff
path: root/plugins/streamdev/streamdev-cvs/server/connectionIGMP.c
diff options
context:
space:
mode:
authorkwacker <vdr@w-i-r.com>2010-04-11 13:46:11 +0200
committerkwacker <vdr@w-i-r.com>2010-04-11 13:46:11 +0200
commit9b144d30e0ea8ce900c37b96ba2cbdda14b0ae88 (patch)
tree3a52de029f950dcd9f9856a53fd67abef8519e68 /plugins/streamdev/streamdev-cvs/server/connectionIGMP.c
parent9cd931834ecadbf5efefdf484abb966e9248ebbb (diff)
downloadx-vdr-9b144d30e0ea8ce900c37b96ba2cbdda14b0ae88.tar.gz
x-vdr-9b144d30e0ea8ce900c37b96ba2cbdda14b0ae88.tar.bz2
Burn 0.2.0-beta3 und Streamdev mit Paches aktualisiert
Diffstat (limited to 'plugins/streamdev/streamdev-cvs/server/connectionIGMP.c')
-rw-r--r--plugins/streamdev/streamdev-cvs/server/connectionIGMP.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/plugins/streamdev/streamdev-cvs/server/connectionIGMP.c b/plugins/streamdev/streamdev-cvs/server/connectionIGMP.c
new file mode 100644
index 0000000..dc08798
--- /dev/null
+++ b/plugins/streamdev/streamdev-cvs/server/connectionIGMP.c
@@ -0,0 +1,64 @@
+/*
+ * $Id: connectionIGMP.c,v 1.1 2009/02/13 10:39:22 schmirl Exp $
+ */
+
+#include <ctype.h>
+
+#include "server/connectionIGMP.h"
+#include "server/server.h"
+#include "server/setup.h"
+#include <vdr/channels.h>
+
+cConnectionIGMP::cConnectionIGMP(const char* Name, int ClientPort, eStreamType StreamType) :
+ cServerConnection(Name, SOCK_DGRAM),
+ m_LiveStreamer(NULL),
+ m_ClientPort(ClientPort),
+ m_StreamType(StreamType)
+{
+}
+
+cConnectionIGMP::~cConnectionIGMP()
+{
+ delete m_LiveStreamer;
+}
+
+bool cConnectionIGMP::Start(cChannel *Channel, in_addr_t Dst)
+{
+ if (Channel != NULL) {
+ cDevice *device = GetDevice(Channel, 0);
+ if (device != NULL) {
+ device->SwitchChannel(Channel, false);
+ struct in_addr ip;
+ ip.s_addr = Dst;
+ if (Connect(inet_ntoa(ip), m_ClientPort)) {
+ m_LiveStreamer = new cStreamdevLiveStreamer(0);
+ if (m_LiveStreamer->SetChannel(Channel, m_StreamType)) {
+ m_LiveStreamer->SetDevice(device);
+ if (!SetDSCP())
+ LOG_ERROR_STR("unable to set DSCP sockopt");
+ Dprintf("streamer start\n");
+ m_LiveStreamer->Start(this);
+ return true;
+ }
+ else
+ esyslog("streamdev-server IGMP: SetDevice failed");
+ DELETENULL(m_LiveStreamer);
+ }
+ else
+ esyslog("streamdev-server IGMP: Connect failed: %m");
+ }
+ else
+ esyslog("streamdev-server IGMP: GetDevice failed");
+ }
+ else
+ esyslog("streamdev-server IGMP: Channel not found");
+ return false;
+}
+
+void cConnectionIGMP::Stop()
+{
+ if (m_LiveStreamer) {
+ m_LiveStreamer->Stop();
+ DELETENULL(m_LiveStreamer);
+ }
+}