summaryrefslogtreecommitdiff
path: root/server/componentIGMP.h
diff options
context:
space:
mode:
authorschmirl <schmirl>2009-02-13 10:39:20 +0000
committerschmirl <schmirl>2009-02-13 10:39:20 +0000
commit78410ea5761eab03a7bc33852e85621594df7254 (patch)
tree38b0238e9797d4ab97fee50c822518ff460def16 /server/componentIGMP.h
parentc26b89f9c287d64915b94cc56fb0e4e709d235a4 (diff)
downloadvdr-plugin-streamdev-78410ea5761eab03a7bc33852e85621594df7254.tar.gz
vdr-plugin-streamdev-78410ea5761eab03a7bc33852e85621594df7254.tar.bz2
Added IGMP multicast server
Modified Files: CONTRIBUTORS HISTORY Makefile README po/de_DE.po po/fi_FI.po po/fr_FR.po po/it_IT.po po/ru_RU.po server/component.c server/component.h server/connection.c server/connection.h server/livefilter.c server/server.c server/setup.c server/setup.h server/streamer.c server/streamer.h streamdev/streamdevhosts.conf tools/socket.c tools/socket.h Added Files: patches/vdr-cap_net_raw.diff server/componentIGMP.c server/componentIGMP.h server/connectionIGMP.c server/connectionIGMP.h
Diffstat (limited to 'server/componentIGMP.h')
-rw-r--r--server/componentIGMP.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/server/componentIGMP.h b/server/componentIGMP.h
new file mode 100644
index 0000000..09d8fde
--- /dev/null
+++ b/server/componentIGMP.h
@@ -0,0 +1,62 @@
+/*
+ * $Id: componentIGMP.h,v 1.1 2009/02/13 10:39:22 schmirl Exp $
+ */
+
+#ifndef VDR_STREAMDEV_IGMPSERVER_H
+#define VDR_STREAMDEV_IGMPSERVER_H
+
+#include <sys/time.h>
+#include <time.h>
+#include <vdr/thread.h>
+#include "server/component.h"
+
+class cConnectionIGMP;
+class cMulticastGroup;
+
+class cComponentIGMP: public cServerComponent, public cThread {
+private:
+ char m_ReadBuffer[2048];
+ cList<cMulticastGroup> m_Groups;
+ in_addr_t m_BindIp;
+ int m_MaxChannelNumber;
+ struct timeval m_GeneralQueryTimer;
+ int m_StartupQueryCount;
+ bool m_Querier;
+ cCondWait m_CondWait;
+
+ cMulticastGroup* FindGroup(in_addr_t Group) const;
+
+ /* Add or remove local host to multicast group */
+ bool IGMPMembership(in_addr_t Group, bool Add = true);
+ void IGMPSendQuery(in_addr_t Group, int Timeout);
+
+ cServerConnection* ProcessMessage(struct igmp *Igmp, in_addr_t Group, in_addr_t Sender);
+
+ void IGMPStartGeneralQueryTimer();
+ void IGMPStartOtherQuerierPresentTimer();
+ void IGMPSendGeneralQuery();
+
+ void IGMPStartTimer(cMulticastGroup* Group, in_addr_t Member);
+ void IGMPStartV1HostTimer(cMulticastGroup* Group);
+ void IGMPStartTimerAfterLeave(cMulticastGroup* Group, unsigned int MaxResponseTime);
+ void IGMPStartRetransmitTimer(cMulticastGroup* Group);
+ void IGMPClearRetransmitTimer(cMulticastGroup* Group);
+ void IGMPSendGroupQuery(cMulticastGroup* Group);
+ void IGMPStartMulticast(cMulticastGroup* Group);
+ void IGMPStopMulticast(cMulticastGroup* Group);
+
+ virtual void Action();
+
+protected:
+ virtual cServerConnection *NewClient(void);
+
+public:
+ virtual bool Initialize(void);
+ virtual void Destruct(void);
+ virtual cServerConnection* Accept(void);
+
+ cComponentIGMP(void);
+ ~cComponentIGMP(void);
+};
+
+#endif // VDR_STREAMDEV_IGMPSERVER_H