vdr-plugin-satip/discover.h

114 lines
3.9 KiB
C
Raw Normal View History

2014-03-08 12:07:47 +01:00
/*
* discover.h: SAT>IP plugin for the Video Disk Recorder
*
* See the README file for copyright information and how to reach the author.
*
*/
#ifndef __SATIP_DISCOVER_H
#define __SATIP_DISCOVER_H
#include <curl/curl.h>
#include <vdr/thread.h>
#include <vdr/tools.h>
2015-03-22 17:51:39 +01:00
#include "common.h"
2014-11-29 14:37:21 +01:00
#include "discoverif.h"
2014-11-16 23:23:20 +01:00
#include "msearch.h"
#include "server.h"
2014-03-08 12:07:47 +01:00
#include "socket.h"
class cSatipDiscoverServer : public cListObject {
private:
int ipPortM;
int quirkM;
cString srcAddressM;
cString ipAddressM;
cString descriptionM;
cString modelM;
2016-07-23 21:40:01 +02:00
cString filtersM;
public:
cSatipDiscoverServer(const char *srcAddressP, const char *ipAddressP, const int ipPortP, const char *modelP, const char *filtersP, const char *descriptionP, const int quirkP)
{
srcAddressM = srcAddressP; ipAddressM = ipAddressP; ipPortM = ipPortP; modelM = modelP; filtersM = filtersP; descriptionM = descriptionP; quirkM = quirkP;
}
int IpPort(void) { return ipPortM; }
int Quirk(void) { return quirkM; }
const char *SrcAddress(void) { return *srcAddressM; }
const char *IpAddress(void) { return *ipAddressM; }
const char *Model(void) { return *modelM; }
2016-07-23 21:40:01 +02:00
const char *Filters(void) { return *filtersM; }
const char *Description(void) { return *descriptionM; }
};
class cSatipDiscoverServers : public cList<cSatipDiscoverServer> {
};
2014-11-29 14:37:21 +01:00
class cSatipDiscover : public cThread, public cSatipDiscoverIf {
2014-03-08 12:07:47 +01:00
private:
enum {
2015-03-25 23:28:17 +01:00
eSleepTimeoutMs = 500, // in milliseconds
eConnectTimeoutMs = 1500, // in milliseconds
eProbeTimeoutMs = 2000, // in milliseconds
eProbeIntervalMs = 60000, // in milliseconds
eCleanupTimeoutMs = 124000 // in milliseoonds
2014-03-08 12:07:47 +01:00
};
static cSatipDiscover *instanceS;
static size_t HeaderCallback(char *ptrP, size_t sizeP, size_t nmembP, void *dataP);
2015-03-22 17:51:39 +01:00
static size_t DataCallback(char *ptrP, size_t sizeP, size_t nmembP, void *dataP);
2014-11-09 19:32:08 +01:00
static int DebugCallback(CURL *handleP, curl_infotype typeP, char *dataP, size_t sizeP, void *userPtrP);
2014-03-08 12:07:47 +01:00
cMutex mutexM;
cSatipMemoryBuffer headerBufferM;
2015-03-22 17:51:39 +01:00
cSatipMemoryBuffer dataBufferM;
2014-11-16 23:23:20 +01:00
cSatipMsearch msearchM;
cStringList probeUrlListM;
2014-03-08 12:07:47 +01:00
CURL *handleM;
cCondWait sleepM;
cTimeMs probeIntervalM;
2014-11-17 21:33:38 +01:00
cSatipServers serversM;
void Activate(void);
void Deactivate(void);
int ParseRtspPort(void);
void ParseDeviceInfo(const char *addrP, const int portP);
void AddServer(const char *srcAddrP, const char *addrP, const int portP, const char *modelP, const char *filtersP, const char *descP, const int quirkP);
2014-11-16 23:23:20 +01:00
void Fetch(const char *urlP);
2014-03-08 12:07:47 +01:00
// constructor
cSatipDiscover();
// to prevent copy constructor and assignment
cSatipDiscover(const cSatipDiscover&);
cSatipDiscover& operator=(const cSatipDiscover&);
protected:
virtual void Action(void);
public:
static cSatipDiscover *GetInstance(void);
static bool Initialize(cSatipDiscoverServers *serversP);
2014-03-08 12:07:47 +01:00
static void Destroy(void);
virtual ~cSatipDiscover();
void TriggerScan(void) { probeIntervalM.Set(0); }
int GetServerCount(void);
cSatipServer *AssignServer(int deviceIdP, int sourceP, int transponderP, int systemP);
2015-01-15 22:33:51 +01:00
cSatipServer *GetServer(int sourceP);
cSatipServer *GetServer(cSatipServer *serverP);
2014-03-08 12:07:47 +01:00
cSatipServers *GetServers(void);
cString GetServerString(cSatipServer *serverP);
void ActivateServer(cSatipServer *serverP, bool onOffP);
void AttachServer(cSatipServer *serverP, int deviceIdP, int transponderP);
void DetachServer(cSatipServer *serverP, int deviceIdP, int transponderP);
2015-01-15 22:33:51 +01:00
bool IsServerQuirk(cSatipServer *serverP, int quirkP);
bool HasServerCI(cSatipServer *serverP);
2015-01-15 22:33:51 +01:00
cString GetServerAddress(cSatipServer *serverP);
cString GetSourceAddress(cSatipServer *serverP);
int GetServerPort(cSatipServer *serverP);
2014-03-08 12:07:47 +01:00
cString GetServerList(void);
int NumProvidedSystems(void);
2014-11-29 14:37:21 +01:00
// for internal discover interface
public:
virtual void SetUrl(const char *urlP);
2014-03-08 12:07:47 +01:00
};
#endif // __SATIP_DISCOVER_H