diff options
author | schmirl <schmirl> | 2009-02-13 10:39:40 +0000 |
---|---|---|
committer | schmirl <schmirl> | 2009-02-13 10:39:40 +0000 |
commit | e3599df3083ec6aa9b8656589a171e2c5d3d7e7a (patch) | |
tree | 875d67c52b228d945bf95e640ef57f1270319f72 /server/componentIGMP.h | |
parent | fa06a6068bd47868fe65b24af8f0a469ae6b46a6 (diff) | |
download | vdr-plugin-streamdev-e3599df3083ec6aa9b8656589a171e2c5d3d7e7a.tar.gz vdr-plugin-streamdev-e3599df3083ec6aa9b8656589a171e2c5d3d7e7a.tar.bz2 |
Added IGMP Multicast server
Modified Files:
Tag: v0_4
CONTRIBUTORS HISTORY Makefile README i18n.c 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:
Tag: v0_4
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.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/server/componentIGMP.h b/server/componentIGMP.h new file mode 100644 index 0000000..ee78aa1 --- /dev/null +++ b/server/componentIGMP.h @@ -0,0 +1,62 @@ +/* + * $Id: componentIGMP.h,v 1.1.2.2 2009/02/13 10:39:42 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 |