#!/usr/bin/env python import SocketServer import socket import os import time src=('localhost', 2002) dst=("localhost", 2001) linelen=100 overflow=dict() def read_line(f, who): if not overflow.has_key(f): overflow[f]='' s=overflow[f] while True: i=s.find('\n') if i>-1: data=s[:(i+1)] overflow[f]=s[(i+1):] break d=f.recv(1024) if not d: data=s overflow[f]='' break s+=d l=len(data) #print '<-- %s: %d %s' % (who, l, data) return data def write_line(f, data, who): f.sendall(data) l=len(data) #print '--> %s: %d %s' % (who, l, data) class MyClientHandler(SocketServer.BaseRequestHandler): def handle(self): #print "connect from: " + `self.client_address` epg=self.request vdr=socket.socket(socket.AF_INET, socket.SOCK_STREAM) vdr.connect(dst) # connecting to vdr while 1: try: data = read_line(vdr, "vdr") if not data: break write_line(epg, data, "epg4vdr") if data.startswith('354'): #print "sending EPG to vdr" sending=True while sending: data = read_line(epg, "epg4vdr") if not data or data=='.\n': data='.\n' sending=False cvt=data.decode('utf-8', 'ignore').encode('iso8859-1','ignore') write_line(vdr, cvt, "vdr") #print "--> vdr : epgs done" else: data = read_line(epg, "epg4vdr") if not data: break #print(u'' + data.decode('utf-8').encode('iso8859-1').decode('utf-8')) #print data.decode('utf-8').encode('iso8859-1','ignore') #print data.encode('utf-8') #print data.decode('utf-8') #cvt=data.decode('utf-8', 'ignore').encode('iso8859-1','ignore') write_line(vdr, data, "vdr") except KeyboardInterrupt: break vdr.shutdown(socket.SHUT_RDWR) vdr.close() epg.close() # make a threaded server, listen/handle clients forever try: server = SocketServer.TCPServer(src, MyClientHandler) server.serve_forever() except KeyboardInterrupt: server.server_close()