From: Anthony B. <ant...@us...> - 2002-04-23 06:04:33
|
Update of /cvsroot/pydns/pydns/DNS In directory usw-pr-cvs1:/tmp/cvs-serv19657 Modified Files: Base.py Log Message: attempt to refactor the DNSRequest.req method a little. after doing a bit of this, I've decided to bite the bullet and just rewrite the puppy. will be checkin in some design notes, then unit tests and then writing the sod. Index: Base.py =================================================================== RCS file: /cvsroot/pydns/pydns/DNS/Base.py,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** Base.py 19 Mar 2002 13:05:02 -0000 1.11 --- Base.py 23 Apr 2002 06:04:27 -0000 1.12 *************** *** 10,15 **** """ ! import socket ! import string import Type,Class,Opcode import asyncore --- 10,14 ---- """ ! import socket, string, types, time import Type,Class,Opcode import asyncore *************** *** 31,34 **** --- 30,35 ---- continue fields=string.split(line) + if len(fields) == 0: + continue if fields[0]=='domain': defaults['domain']=fields[1] *************** *** 62,66 **** if not name and self.defaults.has_key('name'): args['name'] = self.defaults['name'] ! if type(name) is type(""): args['name']=name else: --- 63,67 ---- if not name and self.defaults.has_key('name'): args['name'] = self.defaults['name'] ! if type(name) is types.StringType: args['name']=name else: *************** *** 74,78 **** else: args[i]=defaults[i] ! if type(args['server']) == type(''): args['server'] = [args['server']] self.args=args --- 75,79 ---- else: args[i]=defaults[i] ! if type(args['server']) == types.StringType: args['server'] = [args['server']] self.args=args *************** *** 147,151 **** rd = self.args['rd'] server=self.args['server'] ! if type(self.args['qtype']) == type('foo'): try: qtype = getattr(Type, string.upper(self.args['qtype'])) --- 148,152 ---- rd = self.args['rd'] server=self.args['server'] ! if type(self.args['qtype']) == types.StringType: try: qtype = getattr(Type, string.upper(self.args['qtype'])) *************** *** 163,166 **** --- 164,168 ---- #print 'QTYPE %d(%s)' % (qtype, Type.typestr(qtype)) m = Lib.Mpacker() + # jesus. keywords and default args would be good. TODO. m.addHeader(0, 0, opcode, 0, 0, rd, 0, 0, 0, *************** *** 169,209 **** self.request = m.getbuf() if protocol == 'udp': ! self.response=None ! self.socketInit(socket.AF_INET, socket.SOCK_DGRAM) ! for self.ns in server: ! try: ! #self.s.connect((self.ns, self.port)) ! self.conn() ! self.time_start=time.time() ! if not self.async: ! self.s.send(self.request) ! self.response=self.processUDPReply() ! #except socket.error: ! except None: ! continue ! break ! if not self.response: ! if not self.async: ! raise DNSError,'no working nameservers found' ! else: ! self.response=None ! for self.ns in server: ! try: ! self.socketInit(socket.AF_INET, socket.SOCK_STREAM) ! self.time_start=time.time() ! self.conn() ! self.s.send(Lib.pack16bit(len(self.request)) + ! self.request) ! self.s.shutdown(1) ! self.response=self.processTCPReply() ! except socket.error: ! continue ! break ! if not self.response: ! raise DNSError,'no working nameservers found' ! if not self.async: ! return self.response else: return None #class DnsAsyncRequest(DnsRequest): --- 171,219 ---- self.request = m.getbuf() if protocol == 'udp': ! self.sendUDPRequest(server) else: + self.sendTCPRequest(server) + if self.async: return None + else: + return self.response + + def sendUDPRequest(self, server): + "refactor me" + self.response=None + self.socketInit(socket.AF_INET, socket.SOCK_DGRAM) + for self.ns in server: + try: + # TODO. Handle timeouts &c correctly (RFC) + #self.s.connect((self.ns, self.port)) + self.conn() + self.time_start=time.time() + if not self.async: + self.s.send(self.request) + self.response=self.processUDPReply() + #except socket.error: + except None: + continue + break + if not self.response: + if not self.async: + raise DNSError,'no working nameservers found' + + def sendTCPRequest(self, server): + " do the work of sending a TCP request " + self.response=None + for self.ns in server: + try: + self.socketInit(socket.AF_INET, socket.SOCK_STREAM) + self.time_start=time.time() + self.conn() + self.s.send(Lib.pack16bit(len(self.request))+self.request) + self.s.shutdown(1) + self.response=self.processTCPReply() + except socket.error: + continue + break + if not self.response: + raise DNSError,'no working nameservers found' #class DnsAsyncRequest(DnsRequest): *************** *** 243,246 **** --- 253,261 ---- # # $Log$ + # Revision 1.12 2002/04/23 06:04:27 anthonybaxter + # attempt to refactor the DNSRequest.req method a little. after doing a bit + # of this, I've decided to bite the bullet and just rewrite the puppy. will + # be checkin in some design notes, then unit tests and then writing the sod. + # # Revision 1.11 2002/03/19 13:05:02 anthonybaxter # converted to class based exceptions (there goes the python1.4 compatibility :) |