summaryrefslogtreecommitdiff
path: root/svdrpclient.h
diff options
context:
space:
mode:
authorhorchi <vdr@jwendel.de>2017-03-05 16:39:28 +0100
committerhorchi <vdr@jwendel.de>2017-03-05 16:39:28 +0100
commite2a48d8701f91b8e24fbe9e99e91eb72a87bb749 (patch)
tree726f70554b4ca985a09ef6e30a7fdc8df089993c /svdrpclient.h
downloadvdr-epg-daemon-e2a48d8701f91b8e24fbe9e99e91eb72a87bb749.tar.gz
vdr-epg-daemon-e2a48d8701f91b8e24fbe9e99e91eb72a87bb749.tar.bz2
git init1.1.103
Diffstat (limited to 'svdrpclient.h')
-rw-r--r--svdrpclient.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/svdrpclient.h b/svdrpclient.h
new file mode 100644
index 0000000..ffd104c
--- /dev/null
+++ b/svdrpclient.h
@@ -0,0 +1,142 @@
+/*
+ * connection.h: SVDRP connection
+ *
+ * See the README file for copyright information and how to reach the author.
+ */
+
+#ifndef __SVDRP_CLIENT_H_
+#define __SVDRP_CLIENT_H_
+
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <stdint.h> // uint_64_t
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef VDR_PLUGIN
+# include <vdr/tools.h>
+#else
+
+//***************************************************************************
+//
+//***************************************************************************
+
+class cListObject {
+private:
+ cListObject *prev, *next;
+public:
+ cListObject(void);
+ virtual ~cListObject();
+ virtual int Compare(const cListObject /*&ListObject*/) const { return 0; }
+ ///< Must return 0 if this object is equal to ListObject, a positive value
+ ///< if it is "greater", and a negative value if it is "smaller".
+ void Append(cListObject *Object);
+ void Insert(cListObject *Object);
+ void Unlink(void);
+ int Index(void) const;
+ cListObject *Prev(void) const { return prev; }
+ cListObject *Next(void) const { return next; }
+};
+
+class cListBase {
+protected:
+ cListObject *objects, *lastObject;
+ cListBase(void);
+ int count;
+public:
+ virtual ~cListBase();
+ void Add(cListObject *Object, cListObject *After = NULL);
+ void Ins(cListObject *Object, cListObject *Before = NULL);
+ void Del(cListObject *Object, bool DeleteObject = true);
+ virtual void Move(int From, int To);
+ void Move(cListObject *From, cListObject *To);
+ virtual void Clear(void);
+ cListObject *Get(int Index) const;
+ int Count(void) const { return count; }
+ void Sort(void);
+};
+
+template<class T> class cList : public cListBase {
+public:
+ T *Get(int Index) const { return (T *)cListBase::Get(Index); }
+ T *First(void) const { return (T *)objects; }
+ T *Last(void) const { return (T *)lastObject; }
+ T *Prev(const T *object) const { return (T *)object->cListObject::Prev(); } // need to call cListObject's members to
+ T *Next(const T *object) const { return (T *)object->cListObject::Next(); } // avoid ambiguities in case of a "list of lists"
+};
+
+class cFile {
+private:
+ static bool files[];
+ static int maxFiles;
+ int f;
+public:
+ cFile(void);
+ ~cFile();
+ operator int () { return f; }
+ bool Open(const char *FileName, int Flags, mode_t Mode = DEFFILEMODE);
+ bool Open(int FileDes);
+ void Close();
+ bool IsOpen(void) { return f >= 0; }
+ bool Ready(bool Wait = true);
+ static bool AnyFileReady(int FileDes = -1, int TimeoutMs = 1000);
+ static bool FileReady(int FileDes, int TimeoutMs = 1000);
+ static bool FileReadyForWriting(int FileDes, int TimeoutMs = 1000);
+};
+
+#endif // VDR_PLUGIN
+
+
+//***************************************************************************
+// Line
+//***************************************************************************
+
+class cLine : public cListObject
+{
+ public:
+
+ cLine(const char *s) { line = s ? strdup(s) : 0; };
+ virtual ~cLine() { if (line) free(line); };
+
+ const char* Text() { return line; }
+ int Length() { return strlen(line); }
+
+ private:
+
+ char* line;
+};
+
+//***************************************************************************
+// SVDRP Client
+//***************************************************************************
+
+class cSvdrpClient
+{
+ private:
+
+ char* ip;
+ int port;
+ cFile file;
+ char* buffer;
+ int bufSize;
+
+ int connect();
+ int readLine(int timeoutMs);
+
+ public:
+
+ cSvdrpClient(const char *aIp, int aPort);
+ virtual ~cSvdrpClient();
+
+ int open();
+ void close(int sendQuit = yes);
+ void abort();
+
+ int send(const char* cmd, int reconnect = true);
+ int receive(cList<cLine>* list = 0, int timeoutMs = 20 * 1000);
+};
+
+//***************************************************************************
+#endif // __SVDRP_CLIENT_H_