|
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 :)
|