Seulement dans vdrpylib-0.2/vdr: channel.py Seulement dans vdrpylib-0.2-dr/vdr: Channel.py diff -ru vdrpylib-0.2/vdr/svdrp.py vdrpylib-0.2-dr/vdr/svdrp.py --- vdrpylib-0.2/vdr/svdrp.py 2002-11-24 19:27:46.000000000 +0100 +++ vdrpylib-0.2-dr/vdr/svdrp.py 2003-07-10 13:52:30.000000000 +0200 @@ -23,6 +23,7 @@ import string import telnetlib import time +import socket import channel import recording @@ -31,7 +32,11 @@ # SVDRP constants SVDRP_PORT=2001 -class SVDRP(telnetlib.Telnet): +CR='\r' +LF='\n' +CRLF=CR+LF + +class SVDRP: """A wrapper for VDR's SVDRP interface. An SVDRP object represents a telnet session to a VDR instance. @@ -43,14 +48,18 @@ protocol manually. """ def __init__(self, host = None, port = SVDRP_PORT): - if host is None: - telnetlib.Telnet.__init__(self) - else: - telnetlib.Telnet.__init__(self, host, port) - # consume all output - result = '' - while not result: - result = self.read_very_eager() + self.sock = None + self._debugging = 0 + self.open('localhost') + + #if host is None: + # telnetlib.Telnet.__init__(self) + #else: + # telnetlib.Telnet.__init__(self, host, port) + # # consume all output + # result = '' + # while not result: + # result = self.read_very_eager() def open(self, host, port = SVDRP_PORT): @@ -61,8 +70,38 @@ Don't try to reopen an already connected instance. """ - telnetlib.Telnet.open(self, host, port) - + #for res in socket.getaddrinfo(self.host, self.port, 0, socket.SOCK_STREAM): + # af, socktype, proto, canonname, sa = res + # try: + self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.sock.connect((host,port)) + # except socket.error, msg: + # if self.sock: + # self.sock.close() + # self.sock = None + # continue + # break + if not self.sock: + raise socket.error, msg + print "On va passe le makefile" + self.file = self.sock.makefile('rb') + self._welcome = self._getresp() + #telnetlib.Telnet.open(self, host, port) + + + def _getline(self): + line = self.file.readline() + if self._debugging > 1: print '*get*', `line` + if not line: raise error_proto('-ERR EOF') + octets = len(line) + # server can send any combination of CR & LF + # however, 'readline()' returns lines ending in LF + # so only possibilities are ...LF, ...CRLF, CR...LF + if line[-2:] == CRLF: + return line[:-2], octets + if line[0] == CR: + return line[1:-1], octets + return line[:-1], octets def read_reply(self): """Read a SVDRP-style reply. @@ -75,16 +114,28 @@ a 3-digit number followed by a blank, followed by arbitrary text and a terminating newline. """ - pat = re.compile('^\d\d\d .*\n', re.M) - reply = '' - buffer = self.read_very_eager() - while not pat.search(buffer): - reply = reply + buffer - time.sleep(0.2) - buffer = self.read_very_eager() - reply = reply + buffer + #pat = re.compile('^\d\d\d .*\n', re.M) + #reply = '' + #buffer = self.read_very_eager() + #while not pat.search(buffer): + # reply = reply + buffer + # time.sleep(0.2) + # buffer = self.read_very_eager() + #reply = reply + buffer + reply, octets = self._getline() return reply + def _getresp(self): + resp, o = self._getline() + if self._debugging > 1: print '*resp*', `resp` + #c = resp[:1] + #if c != '+': + # raise error_proto(resp) + return resp + + def write(self, line): + if self._debugging > 1: print '*put*', `line` + self.sock.sendall('%s%s' % (line, CRLF)) def write_cmd(self, cmd): """Send text to the server and return its reply. @@ -100,7 +151,7 @@ return '' if cmd[-1] != '\n': cmd = cmd + '\n' - self.read_very_eager() + #self.read_very_eager() self.write(cmd) return self.read_reply() @@ -202,8 +253,9 @@ print 'pute returned: ' + result return 0 - for ch in channels: + for ch in channels.values(): self.write(ch.getepgstr()) + print ch.getepgstr() self.write('.\n') result = self.read_reply() diff -ru vdrpylib-0.2/vdr/vdr.py vdrpylib-0.2-dr/vdr/vdr.py --- vdrpylib-0.2/vdr/vdr.py 2002-11-24 19:44:36.000000000 +0100 +++ vdrpylib-0.2-dr/vdr/vdr.py 2003-07-10 00:21:18.000000000 +0200 @@ -22,7 +22,7 @@ import os.path import re -import channel +import Channel import event import recording import svdrp @@ -258,7 +258,7 @@ line = line.strip() if len(line) > 0 and line[0] != ':': counter = counter + 1 - c = channel.Channel(line, counter) + c = Channel.Channel(line, counter) if chans.has_key(c.sid): chans[c.sid].indexes.append(counter) else: @@ -298,12 +298,12 @@ if line[0] == 'C': # channel start tokens = line.split(None, 2) - ch_sid = int(tokens[1]) + ch_sid = tokens[1] if self.channels.has_key(ch_sid): channel = self.channels[ch_sid] else: - channel = channel.Channel() + channel = Channel.Channel() channel.sid = ch_sid channel.name = tokens[2] elif line[0] == 'E':