def cdata(request): ''' 设备向服务器的http:://xxx/cdata请求 ''' network_monitor(request) try: from mysite import authorize_fun language=request.REQUEST.get('language',None) #---获得语言参数 authorize_fun.check_push_device(language) #---连接设备数量控制 device = check_device(request, True) #---检测、验证当前发出请求的设备 if device is None: return unknown_device_response() else: if device.deviceType==POSDEVICE:#消费机 from mysite.pos.posdevview import pos_cdata ret = pos_cdata(request) return device_response_write(ret) elif device.deviceType in ['ACP', 'ACD']:#控制器or一体机: from mysite.iaccess.push_comm_center import acc_cdata ret = acc_cdata(request) return device_response_write(ret) if request.REQUEST.has_key('action'): return ok_response(device) elif request.method == 'GET': return cdata_get(request,device) elif request.method == 'POST': try: return cdata_post(request, device) # resp =cdata_post(request, device) # return device_response_write(resp) except Exception, e: return erro_response(e) else:
def devpost(request): ''' http://xxx/devicecmd 设备返回设备命令执行结果的请求 ''' from commen_utils import parse_posts network_monitor(request) device = check_device(request) #---检测、验证当前发出请求的设备 if device is None: return unknown_device_response() else: if request.method == 'GET': pass elif request.method == 'POST': try: rd = request.raw_post_data if settings.ENCRYPT: #---解密 try: import lzo rawData = lzo.bufferDecrypt(rd, device.sn) except: rawData = rd else: rawData = rd try: data0 = rawData.decode("gb18030") #---解码 except: data0 = rawData rets = {} pdata = parse_posts(data0) #---解析,结果为字典的数组 for apost in pdata: #[CMD,ID,Return] id = int(apost["ID"]) # 命令ID ret = apost["Return"] #命令执行返回值 if apost["CMD"] == "INFO":#更新设备信息 parse_dev_info(device, apost['Content']) device.save() rets[id] = ret elif (apost["CMD"] == "GetFile" or apost["CMD"] == "Shell") and ret > 0: check_upload_file(request, apost) rets[id] = ret elif apost["CMD"] == "VERIFY SUM" and ret > 0: #考勤校对 check_att_sum(apost,device) rets[id] = ret elif apost["CMD"] == "PutFile": check_upgradefile(id,apost,device,ret) post_check_update(device,[ret]) #立即单独更新此处理的开始指针 #rets[id] = ret else:#默认情况下CMD为DATA rets[id] = ret if len(rets) > 0: update_cmds(device, rets) return device_response_write("OK") except: device_response_write("") else: return unknown_data_response(device)
def post_photo(request): ''' http://xxx/fdata 设备采集现场图片并上传到服务器 ''' network_monitor(request) device = check_device(request) if device is None: return unknown_device_response() else: try: pin = request.REQUEST.get("PIN", "") pin = pin.split(".")[0].split("-") dt = pin[0] if len(pin) == 2: #Success Picture pin = pin[1] else: pin = "" d = request.raw_post_data if "CMD=uploadphoto" in d: d = d.split("CMD=uploadphoto")[1][1:] if "CMD=realupload" in d: d = d.split("CMD=realupload")[1][1:] if len(d) > 0: if 0 and SYNC_MODEL: save_attphoto( "%s/%s/%s" % (device.sn, dt[:4], dt[4:8]) + "/" + format_pin(pin) + "_" + dt[8:] + ".jpg", d, "picture") else: from mysite.iclock.models import Transaction save_model_file( Transaction, "%s/%s/%s" % (device.sn, dt[:4], dt[4:8]) + "/" + format_pin(pin) + "_" + dt[8:] + ".jpg", d, "picture") else: return device_response_write("No photo data!\n") if request.REQUEST.has_key('PhotoStamp'): if SYNC_MODEL: device.photo_stamp = request.REQUEST['PhotoStamp'] device.set('photo_stamp') #####更新考勤照片时间戳 else: DevLog(SN=device, Cnt=1, OP=u"PICTURE", Object=pin, OpTime=datetime.datetime.now()).save() device.photo_stamp = request.REQUEST['PhotoStamp'] device.save() #check_and_save_cache(device) except: pass return device_response_write("OK\n")
def cdata_get_pin(request, device): ''' 请求中 带人员PIN参数时的处理 返回人员基本信息和指纹模板信息、删除人员 涉及 http参数:pin、save ''' resp = "" # save = request.REQUEST.has_key('save') and (request.REQUEST['save'] in ['1', 'Y', 'y', 'yes', 'YES']) or False pin = request.REQUEST.get('PIN', '') card = request.REQUEST.get('Card', '') Expect = request.REQUEST.get('Expect', '') emp = None if len(pin) > 0: emp = get_emp(pin) elif len(card) > 0: emp = get_emp_from_card(card_to_num(card)) if emp: emp_info = emp_info_data(emp) if Expect == "FACE": f = face_data(emp, device) elif Expect == "USER": f = "" else: f = fingerprint_data(emp, device.Fpversion) cc = emp_info + f try: resp += cc.encode("gb18030") except: resp += cc.decode("utf-8").encode("gb18030") # if not save: # delete_emp_data(emp.pin()) return device_response_write(resp) else: return ok_response()
def cdata_post(request, device): ''' 处理设备的POST请求 涉及http参数: "raw_post_data"、stamp_name ''' raw_Data = request.raw_post_data if not raw_Data: raw_Data = request.META['raw_post_data'] from setting_proccess import pre_proccess rawData = pre_proccess(raw_Data) # request.raw_post_data = rawData # post_urlPara_handlers.action() ######################服务器端验证功能 Auty = request.REQUEST.get('AuthType', None) if Auty: from new_push import verification res = verification(request,device,Auty) return res stamp = get_requet_list(request) if stamp: stamp_key = stamp[0] stamp_val = stamp[1] ret = make_cmd_data(request,device,stamp_key,stamp_val,rawData) return device_response_write(ret) else: return unknown_response()
def getreq(request): ''' http://xxx/getrequest 设备读取服务器上存储的命令 ''' network_monitor(request) try: resp = "" #---要直接发送的内容 device = check_device(request, True) #---检测、验证当前发出请求的设备 if device is None: return unknown_device_response() else: if request.method == 'GET': if SYNC_MODEL: return sync_getreq_get(request, device) else: return getreq_get(request, device) elif request.method == 'POST': pass else: return unknown_data_response(device) # 自动升级固件功能 # ...... except Exception, e: import traceback traceback.print_exc() resp = u"%s" % e return device_response_write(resp)
def cdata_get(request,device): ''' 返回用户信息或者设备信息 ''' if request.REQUEST.has_key('PIN'): return cdata_get_pin(request, device) else: deal_pushver(request,device) resp =cdata_get_options(device) return device_response_write(resp)
def cdata(request): ''' 设备向服务器的http:://xxx/cdata请求 ''' from protocol_content import POSDEVICE network_monitor(request) try: device_type = request.REQUEST.get('devicetype') #设备类型参数 pos_device_type = request.REQUEST.get('device_type', None) #兼容ID消费固件,后期统一使用devicetype if (device_type == POSDEVICE or pos_device_type == POSDEVICE): #ID消费机 from mysite.pos.pos_id.posdevview import pos_cdata if get_option("POS_ID"): resp = pos_cdata(request) else: #防止IC消费软件,连接ID消费机 from protocol_content import pos_return resp = pos_return() return device_response_write(resp) else: device = check_device(request, True, True) #---检测、验证当前发出请求的设备 if device is None: return unknown_device_response() else: if device.deviceType in ['ACP', 'ACD']: #控制器or一体机: from mysite.iaccess.push_comm_center import acc_cdata ret = acc_cdata(request) return device_response_write(ret) if request.REQUEST.has_key('action'): return ok_response(device) elif request.method == 'GET': return cdata_get(request, device) elif request.method == 'POST': try: return cdata_post(request, device) # resp =cdata_post(request, device) # return device_response_write(resp) except Exception, e: return erro_response(e) else: return unknown_data_response(device)
def getreq_get(request,device): ''' 获取设备命令 处理请求中带有设备INFO信息 ''' info = request.GET.get("INFO", "") if info: update_device_info(device,info) resp = fetch_cmds(device) print 'getting cmds=============',resp deal_device_active(device) if settings.ENCRYPT: import lzo resp = lzo.bufferEncrypt(resp + "\n", device.sn) return device_response_write(resp)
def sync_getreq_get(request, device): ''' 获取设备命令 处理请求中带有设备INFO信息 ''' dt_now = datetime.datetime.now() str_now = dt_now.strftime(time_fmt) device.last_activity = str_now device.set('last_activity') # 设备每次请求命令时更新最后访问时间 info = request.GET.get("INFO", "") if info: update_device_info(device, info) resp = device.fetch_cmds() if develop_model: print 'Getting cmds=============\n', resp if ENCRYPT: import lzo resp = lzo.bufferEncrypt(resp + "\n", device.sn) return device_response_write(resp)
def cdata_get_pin(request, device): ''' 请求中 带人员PIN参数时的处理 返回人员基本信息和指纹模板信息、删除人员 涉及 http参数:pin、save ''' resp = "" pin = request.REQUEST['PIN'] #pin = format_pin(pin) try: emp = Employee(pin).get() emp_info = emp.get_info() emp_fp = '' #emp.get_fp() cc = emp_info + emp_fp try: resp += cc.encode("gb18030") except: resp += cc.decode("utf-8").encode("gb18030") return device_response_write(resp) except ObjectDoesNotExist: #---人员不存在 return none_response()
def cdata_get(request, device): ''' 返回用户信息或者设备信息 ''' if request.REQUEST.has_key('PIN') or request.REQUEST.has_key('Card'): '''异地考勤入口''' return cdata_get_pin(request, device) else: '''服务器下发机器信息(如设备上传标识位)''' if SYNC_MODEL: alg_ver = "1.0" if request.REQUEST.has_key('pushver'): alg_ver = request.REQUEST.get('pushver') device.alg_ver = alg_ver device.set("alg_ver") ########更新设备版本 resp = device.get_option() else: deal_pushver(request, device) resp = cdata_get_options(device) return device_response_write(resp)
def cdata_get_pin(request, device): ''' 请求中 带人员PIN参数时的处理 返回人员基本信息和指纹模板信息、删除人员 涉及 http参数:pin、save ''' resp="" # save = request.REQUEST.has_key('save') and (request.REQUEST['save'] in ['1', 'Y', 'y', 'yes', 'YES']) or False pin = request.REQUEST['PIN'] emp = get_emp(pin) if emp: emp_info = emp_info_data(emp) fp = fingerprint_data(emp,device.Fpversion) cc = emp_info + fp try: resp += cc.encode("gb18030") except: resp += cc.decode("utf-8").encode("gb18030") # if not save: # delete_emp_data(emp.pin()) return device_response_write(resp) else: return none_response()
def getreq(request): ''' http://xxx/getrequest 设备读取服务器上存储的命令 ''' network_monitor(request) try: resp = "" #---要直接发送的内容 device = check_device(request, True) #---检测、验证当前发出请求的设备 if device is None: return unknown_device_response() else: if request.method == 'GET': return getreq_get(request,device) elif request.method == 'POST': pass else: return unknown_data_response(device) # 自动升级固件功能 # ...... except Exception, e: import traceback;traceback.print_exc() resp = u"%s" % e return device_response_write(resp)