diff options
author | Frank Schmirler <vdr@schmirler.de> | 2010-12-02 09:43:13 +0100 |
---|---|---|
committer | Frank Schmirler <vdr@schmirler.de> | 2010-12-02 09:43:13 +0100 |
commit | 7254a6752808830d5fc133e5362da6c47f3f84ff (patch) | |
tree | 673cc17f88ba80f8a67debb54f85ea100cde9ae5 /server/connectionIGMP.c | |
parent | 31df0eaf8e49bc1cfea755bd88f3dd795c8f1ace (diff) | |
download | vdr-plugin-streamdev-7254a6752808830d5fc133e5362da6c47f3f84ff.tar.gz vdr-plugin-streamdev-7254a6752808830d5fc133e5362da6c47f3f84ff.tar.bz2 |
Snapshot 2009-06-11
Diffstat (limited to 'server/connectionIGMP.c')
-rw-r--r-- | server/connectionIGMP.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/server/connectionIGMP.c b/server/connectionIGMP.c new file mode 100644 index 0000000..dc08798 --- /dev/null +++ b/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); + } +} |