def process(self): log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='start') # Veo si esta autorizado y actualizo el uid bd = BDSPY(Config['MODO']['modo']) if not bd.check_auth(self.dlgid, self.uid): self.response = 'NOT_ALLOWED' self.send_response() return # Leo toda la configuracion desde la BD en un dict bd = BD(modo=Config['MODO']['modo'], dlgid=self.dlgid) dcnf = bd.read_dlg_conf() if dcnf == {}: log(module=__name__, function='process', dlgid=self.dlgid, msg='ERROR: No hay datos en la BD') self.response = 'ERROR' self.send_response() return # Proceso c/modulo d = self.PV_process_conf_parametros_base(dcnf) self.PV_process_conf_parametros_analog(dcnf) self.PV_process_conf_parametros_digital(dcnf) self.PV_process_conf_parametros_counter(dcnf) self.PV_process_conf_parametros_doutput(dcnf) # Actualizo la BD con los datos. # Creo un registo inicialiado en la redis. bd.bdr.update(self.dlgid, d) redis_db = Redis(self.dlgid).create_rcd() self.send_response() return
def process(self): ''' Define la logica de procesar los frames de INIT:GENERAL PLOAD=CLASS:GLOBAL;NACH:5;NDCH:3;NCNT:3;SIMPWD:DEFAULT;IMEI:860585004367917;SIMID:895980161423091055;CSQ:87;WRST:0x00;BASE:0x32;AN:0xCB;DG:0x1A;CNT:0x47;RG:0xF7;PSE:0x73;OUT:0xB2 Leo toda la configuracion en un dict y luego lo paso a los diferentes modulos que calculan los ckecksum de c/seccion. Si algun checksum no coincide voy agregandolo a la respuesta al server. ''' log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='start') # Veo si esta autorizado y actualizo el uid uid = self.payload_dict.get('UID', '0000') log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='DEBUG dlgid={0},uid={1}'.format(self.dlgid, uid)) if uid != '000': log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='DEBUG UID Not default'.format(self.dlgid, uid)) bd = BDSPY(modo=Config['MODO']['modo']) if not bd.check_auth(self.dlgid, uid): self.response_pload += ':NOT_ALLOWED' self.send_response() return ''' La configuracion del dlg de la base de datos ya fue leida en la clase superior RAW_INIT y se encuentra en self.dlgbdconf_dict ''' # Parametros administrativos: simpwd = self.payload_dict.get('SIMPWD', 'ERROR') wrst = self.payload_dict.get('WRST', 'ERROR') d = dict() try: d['IPADDRESS'] = cgi.escape(os.environ["REMOTE_ADDR"]) except: d['IPADDRESS'] = '0.0.0.0' d['RCVDLINE'] = os.environ['QUERY_STRING'] d['FIRMWARE'] = self.version d['IMEI'] = self.payload_dict.get('IMEI', 'ERROR') d['CSQ'] = self.payload_dict.get('CSQ', 'ERROR') d['SIMID'] = self.payload_dict.get('SIMID', 'ERROR') d['COMMITED_CONF'] = 0 # Actualizo la BD con estos datos. bd = BD(modo=Config['MODO']['modo'], dlgid=self.dlgid) bd.bdr.update(self.dlgid, d) # Creo un registo inicialiado en la redis. redis_db = Redis(self.dlgid).create_rcd() # Analizo los checksums individuales # Checksum parametros base #log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT',msg='DEBUG_base') a = int(self.payload_dict.get('BASE', '0'), 16) b = self.PV_checksum_base(self.dlgbdconf_dict) log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='CKS_BASE: dlg={0}, bd={1}'.format(hex(a), hex(b))) if a != b: self.response_pload += ';BASE' # checksum parametros analog #log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='DEBUG_analog') a = int(self.payload_dict.get('AN', '0'), 16) b = self.PV_checksum_analog(self.dlgbdconf_dict) log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='CKS_AN: dlg={0}, bd={1}'.format(hex(a), hex(b))) if a != b: self.response_pload += ';ANALOG' # chechsum parametros digital a = int(self.payload_dict.get('DG', '0'), 16) b = self.PV_checksum_digital(self.dlgbdconf_dict) log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='CKS_DG: dlg={0}, bd={1}'.format(hex(a), hex(b))) if a != b: self.response_pload += ';DIGITAL' # chechsum parametros contadores a = int(self.payload_dict.get('CNT', '0'), 16) b = self.PV_checksum_counters(self.dlgbdconf_dict) log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='CKS_CNT: dlg={0}, bd={1}'.format(hex(a), hex(b))) if a != b: self.response_pload += ';COUNTERS' # chechsum parametros range a = int(self.payload_dict.get('RG', '0'), 16) b = self.PV_checksum_range(self.dlgbdconf_dict) log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='CKS_RANGE: dlg={0}, bd={1}'.format(hex(a), hex(b))) if a != b: self.response_pload += ';RANGE' # chechsum parametros psensor a = int(self.payload_dict.get('PSE', '0'), 16) b = self.PV_checksum_psensor(self.dlgbdconf_dict) log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='CKS_PSENS: dlg={0}, bd={1}'.format(hex(a), hex(b))) if a != b: self.response_pload += ';PSENSOR' # chechsum parametros aplicacion a = int(self.payload_dict.get('APP', '0'), 16) b = self.PV_checksum_aplicacion(self.dlgbdconf_dict) log(module=__name__, function='process', dlgid=self.dlgid, level='SELECT', msg='CKS_APP: dlg={0}, bd={1}'.format(hex(a), hex(b))) if a != b: self.response_pload += ';APLICACION' self.send_response() return