diff options
author | Christian Wieninger <cwieninger (at) gmx (dot) de> | 2009-10-29 20:03:01 +0100 |
---|---|---|
committer | Christian Wieninger <cwieninger (at) gmx (dot) de> | 2009-10-29 20:03:01 +0100 |
commit | ac4560560513d838450e86c25611d950cefc44ee (patch) | |
tree | 647eb69cf384142a7313e8b957ec90708226a0a5 /uservars.c | |
parent | 06ca46d943e3d7bbf315fcfb8c4653523fae66de (diff) | |
download | vdr-plugin-epgsearch-ac4560560513d838450e86c25611d950cefc44ee.tar.gz vdr-plugin-epgsearch-ac4560560513d838450e86c25611d950cefc44ee.tar.bz2 |
extended internal variable syntax with 'connect'
Diffstat (limited to 'uservars.c')
-rw-r--r-- | uservars.c | 43 |
1 files changed, 43 insertions, 0 deletions
@@ -26,6 +26,8 @@ The project's page is at http://winni.vdr-developer.org/epgsearch #include "epgsearchcats.h" #include "epgsearchtools.h" #include "log.h" +#include <sys/socket.h> +#include <netdb.h> cUserVars UserVars; @@ -46,6 +48,8 @@ string cUserVar::Evaluate(const cEvent* e, bool escapeStrings) string result; if (IsShellCmd()) result = EvaluateShellCmd(e); + else if (IsConnectCmd()) + result = EvaluateConnectCmd(e); else if (IsCondExpr()) result = EvaluateCondExpr(e); else @@ -81,6 +85,45 @@ string cUserVar::EvaluateShellCmd(const cEvent* e) return result; } +#define MAX_LINE 1000 +string cUserVar::EvaluateConnectCmd(const cEvent* e) +{ + if (varparser.connectAddr == "") return ""; + + int conn_s; /* connection socket */ + struct sockaddr_in servaddr; /* socket address structure */ + char buffer[MAX_LINE]; /* character buffer */ + + if ( (conn_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) + { + LogFile.eSysLog("Error creating listening socket"); + return ""; + } + + memset(&servaddr, 0, sizeof(varparser.connectAddr.c_str())); + servaddr.sin_family = AF_INET; + servaddr.sin_port = htons(varparser.connectPort); + + if (getAddrFromString(varparser.connectAddr.c_str(), &servaddr) != 0) + { + LogFile.eSysLog("Invalid remote address"); + return ""; + } + + if ( connect(conn_s, (struct sockaddr *) &servaddr, sizeof(servaddr) ) < 0 ) + { + LogFile.eSysLog("Error calling connect()"); + return ""; + } + + sprintf(buffer, "%s\n", varparser.cmdArgs.c_str()); + Writeline(conn_s, buffer, strlen(buffer)); + Readline(conn_s, buffer, MAX_LINE-1); + + close(conn_s); + return buffer; +} + string cUserVar::EvaluateCondExpr(const cEvent* e, bool escapeStrings) { string condresult = ""; |