61
62
def argparse(self,name,args):
62
63
if not name and self.defaults.has_key('name'):
63
64
args['name'] = self.defaults['name']
64
if type(name) is type(""):
65
if type(name) is types.StringType:
146
147
opcode = self.args['opcode']
147
148
rd = self.args['rd']
148
149
server=self.args['server']
149
if type(self.args['qtype']) == type('foo'):
150
if type(self.args['qtype']) == types.StringType:
151
152
qtype = getattr(Type, string.upper(self.args['qtype']))
152
153
except AttributeError:
163
164
#print 'QTYPE %d(%s)' % (qtype, Type.typestr(qtype))
164
165
m = Lib.Mpacker()
166
# jesus. keywords and default args would be good. TODO.
166
168
0, opcode, 0, 0, rd, 0, 0, 0,
168
170
m.addQuestion(qname, qtype, Class.IN)
169
171
self.request = m.getbuf()
170
172
if protocol == 'udp':
172
self.socketInit(socket.AF_INET, socket.SOCK_DGRAM)
173
for self.ns in server:
175
#self.s.connect((self.ns, self.port))
177
self.time_start=time.time()
179
self.s.send(self.request)
180
self.response=self.processUDPReply()
181
#except socket.error:
185
if not self.response:
173
self.sendUDPRequest(server)
175
self.sendTCPRequest(server)
181
def sendUDPRequest(self, server):
184
self.socketInit(socket.AF_INET, socket.SOCK_DGRAM)
185
for self.ns in server:
187
# TODO. Handle timeouts &c correctly (RFC)
188
#self.s.connect((self.ns, self.port))
190
self.time_start=time.time()
186
191
if not self.async:
187
raise DNSError,'no working nameservers found'
190
for self.ns in server:
192
self.socketInit(socket.AF_INET, socket.SOCK_STREAM)
193
self.time_start=time.time()
195
self.s.send(Lib.pack16bit(len(self.request)) +
198
self.response=self.processTCPReply()
202
if not self.response:
192
self.s.send(self.request)
193
self.response=self.processUDPReply()
194
#except socket.error:
198
if not self.response:
203
200
raise DNSError,'no working nameservers found'
202
def sendTCPRequest(self, server):
203
" do the work of sending a TCP request "
205
for self.ns in server:
207
self.socketInit(socket.AF_INET, socket.SOCK_STREAM)
208
self.time_start=time.time()
210
self.s.send(Lib.pack16bit(len(self.request))+self.request)
212
self.response=self.processTCPReply()
216
if not self.response:
217
raise DNSError,'no working nameservers found'
209
219
#class DnsAsyncRequest(DnsRequest):
210
220
class DnsAsyncRequest(DnsRequest,asyncore.dispatcher_with_send):
244
254
# $Log: Base.py,v $
255
# Revision 1.12 2002/04/23 06:04:27 anthonybaxter
256
# attempt to refactor the DNSRequest.req method a little. after doing a bit
257
# of this, I've decided to bite the bullet and just rewrite the puppy. will
258
# be checkin in some design notes, then unit tests and then writing the sod.
245
260
# Revision 1.11 2002/03/19 13:05:02 anthonybaxter
246
261
# converted to class based exceptions (there goes the python1.4 compatibility :)