Browse Source

split parse_header()

auth
clowwindy 11 years ago
parent
commit
2306add1df
  1. 23
      shadowsocks/asyncdns.py

23
shadowsocks/asyncdns.py

@ -164,14 +164,13 @@ def parse_record(data, offset, question=False):
return nlen + 4, (name, None, record_type, record_class, None, None) return nlen + 4, (name, None, record_type, record_class, None, None)
def parse_response(data): def parse_header(data):
try:
if len(data) >= 12: if len(data) >= 12:
header = struct.unpack('!HBBHHHH', data[:12]) header = struct.unpack('!HBBHHHH', data[:12])
# res_id = header[0] res_id = header[0]
# res_qr = header[1] & 128 res_qr = header[1] & 128
res_tc = header[1] & 2 res_tc = header[1] & 2
# res_ra = header[2] & 128 res_ra = header[2] & 128
res_rcode = header[2] & 15 res_rcode = header[2] & 15
# assert res_tc == 0 # assert res_tc == 0
# assert res_rcode in [0, 3] # assert res_rcode in [0, 3]
@ -179,6 +178,20 @@ def parse_response(data):
res_ancount = header[4] res_ancount = header[4]
res_nscount = header[5] res_nscount = header[5]
res_arcount = header[6] res_arcount = header[6]
return (res_id, res_qr, res_tc, res_ra, res_rcode, res_qdcount,
res_ancount, res_nscount, res_arcount)
return None
def parse_response(data):
try:
if len(data) >= 12:
header = parse_header(data)
if not header:
return None
res_id, res_qr, res_tc, res_ra, res_rcode, res_qdcount, \
res_ancount, res_nscount, res_arcount = header
qds = [] qds = []
ans = [] ans = []
offset = 12 offset = 12

Loading…
Cancel
Save