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