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 /epgsearchtools.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 'epgsearchtools.c')
-rw-r--r-- | epgsearchtools.c | 85 |
1 files changed, 84 insertions, 1 deletions
diff --git a/epgsearchtools.c b/epgsearchtools.c index 3f542e9..bca9bc2 100644 --- a/epgsearchtools.c +++ b/epgsearchtools.c @@ -26,6 +26,8 @@ The project's page is at http://winni.vdr-developer.org/epgsearch #include <fstream> #include <iostream> #include <ctype.h> +#include <netdb.h> +#include <arpa/inet.h> #include "uservars.h" #include "epgsearchtools.h" @@ -579,7 +581,7 @@ bool SendViaSVDRP(cString SVDRPcmd) else { cmdbuf = SVDRPcmd; - cSVDRPClient client(EPGSearchConfig.SVDRPPort); + cSVDRPClient client; if (!client.SendCmd(*cmdbuf)) { LogFile.eSysLog("command '%s' failed", *cmdbuf); @@ -1048,3 +1050,84 @@ std::string GetCodeset() return "ISO-8859-15"; #endif } + +/* Read a line from a socket */ +ssize_t Readline(int sockd, char *vptr, size_t maxlen) { + size_t n, rc; + char c, *buffer; + + buffer = vptr; + + for ( n = 1; n < maxlen; n++ ) { + + if ( (rc = read(sockd, &c, 1)) == 1 ) { + *buffer++ = c; + if ( c == '\n' ) + break; + } + else if ( rc == 0 ) { + if ( n == 1 ) + return 0; + else + break; + } + else { + if ( errno == EINTR ) + continue; + return -1; + } + } + + *buffer = 0; + return n; +} + +/* Write a line to a socket */ +ssize_t Writeline(int sockd, const char *vptr, size_t n) { + size_t nleft; + size_t nwritten; + const char *buffer; + + buffer = vptr; + nleft = n; + + while ( nleft > 0 ) { + if ( (nwritten = write(sockd, buffer, nleft)) <= 0 ) { + if ( errno == EINTR ) + nwritten = 0; + else + return -1; + } + nleft -= nwritten; + buffer += nwritten; + } + + return n; +} + +long getAddrFromString(const char* hostnameOrIp, struct sockaddr_in* addr) +{ + unsigned long ip; + + struct hostent * he; + + if(hostnameOrIp==NULL || addr==NULL) + return -1; + + ip=inet_addr(hostnameOrIp); + + if(ip!=INADDR_NONE) + { + addr->sin_addr.s_addr=ip; + return 0; + } + else + { + he=gethostbyname(hostnameOrIp); + if(he==NULL) + return -1; + else + memcpy(&(addr->sin_addr),he->h_addr_list[0],4); + return 0; + } +} |