Parser

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值