conveter.py
#!/usr/bin/python-
# -*- coding: UTF-8 -*-
class Converter(object):
# to make the respond value can be analyze in hex
def toHexStr(self,s):
strv=""
for x in s:
if ord(x)<=15:
strv+="0"+hex(ord(x))
else :
strv+=hex(ord(x))
strv=strv.replace("0x", "")
return strv
# to get the checksum
def toInt(self,s):
value=0
for x in range(0,len(s)):
if s[len(s)-1-x]=="0":
value+=0*16**x
elif s[len(s)-1-x]=="1":
value+=1*16**x
elif s[len(s)-1-x]=="2":
value+=2*16**x
elif s[len(s)-1-x]=="3":
value+=3*16**x
elif s[len(s)-1-x]=="4":
value+=4*16**x
elif s[len(s)-1-x]=="5":
value+=5*16**x
elif s[len(s)-1-x]=="6":
value+=6*16**x
elif s[len(s)-1-x]=="7":
value+=7*16**x
elif s[len(s)-1-x]=="8":
value+=8*16**x
elif s[len(s)-1-x]=="9":
value+=9*16**x
elif s[len(s)-1-x]=="a":
value+=10*16**x
elif s[len(s)-1-x]=="b":
value+=11*16**x
elif s[len(s)-1-x]=="c":
value+=12*16**x
elif s[len(s)-1-x]=="d":
value+=13*16**x
elif s[len(s)-1-x]=="e":
value+=14*16**x
elif s[len(s)-1-x]=="f":
value+=15*16**x
return value
Parser.py
#!/usr/bin/python-
# -*- coding: UTF-8 -*-
import sys
sys.path.append("c:/Users/Administrator/Desktop/JERE/project/client/")
from converter import Converter
class MyParser(object):
def __init__(self,respond):
self.__respond=respond
def formatCheck(self):
msg=self.__respond
if msg[0]=="\x7E" and msg[len(msg)-1]=="\x7E":
if len(msg)>=34:
dataLengthStr=msg[28:32]
converter=Converter()
dataLength=converter.toInt(converter.toHexStr(dataLengthStr))
if dataLength>0:
if len(msg)==(34+dataLength):
cbody=msg[1:len(msg)-2]
testValueFeedback=msg[len(msg)-2]
intvalue=0
for c in cbody:
intvalue+=ord(c)
testValueOriginalString=hex(intvalue)
testValueString=testValueOriginalString[len(testValueOriginalString)-2:len(testValueOriginalString)]
testValue=chr(Converter().toInt(testValueString))
if testValueFeedback==testValue:
command=msg[25:28]
if command=="\x21\x02\x00":
return (True,True,False,"","","Password Incorrect")
elif command=="\x21\x03\x00":
return (True,True,False,"","","Check Failed")
elif command=="\x21\x04\x00":
return (True,True,False,"","","Ip Incorrect")
elif command=="\x21\x01\x00":
return (True,True,False,"","","Ok")
else:
return (True,True,True,"",msg[32:(32+dataLength)],"")
else :
return (False,False,False,"ChecksumErrorNData","","")
else :
return (False,False,False,"DataLengthErrorNData","","")
else :
if len(msg)==34:
cbody=msg[1:len(msg)-3]
testValueFeedback=msg[len(msg)-2]
intvalue=0
for c in cbody:
intvalue+=ord(c)
testValueOriginalString=hex(intvalue)
testValueString=testValueOriginalString[len(testValueOriginalString)-2:len(testValueOriginalString)]
testValue=chr(Converter().toInt(testValueString))
if testValueFeedback==testValue:
command=msg[25:28]
if command=="\x21\x02\x00":
return (True,False,False,"","NoData","Password Incorrect")
elif command=="\x21\x03\x00":
return (True,False,False,"","NoData","Check Failed")
elif command=="\x21\x04\x00":
return (True,False,False,"","NoData","Ip Incorrect")
elif command=="\x21\x01\x00":
return (True,False,False,"","NoData","Ok")
else:
return (True,False,True,"","NoData","")
else :
return (False,False,False,"ChecksumErrorNData","","")
else :
return (False,False,False,"DataLengthErrorYData","","")
else :
return (False,False,False,"DataLengthError","","")
else :
return (False,False,False,"BegingAndDataError","","")
def check(self):
result=self.formatCheck()
if result[0]==True:
if result[2]==True:
if result[1]==True:
return (True,result[4])
else:
return (True,"NoData"+result[4])
else:
return (False,result[5])
else :
return (False,result[3])