/* +-----------------+------------------------------------------------------------+ | FUNCION | RtaRevAnul::ProcessIt | +-----------------+------------------------------------------------------------+ | DESCRIPCION | Proceso del objeto | | | | +-----------------+------------------------------------------------------------+ */ int RtaRevAnul::ProcessIt() { int len; int ret; str_sel_cadata term_data; trxAnulHeap heap_data; char msgrta[300]; char idHeap[20]; char aux_str1[100]; int iCont; Queue EQueue; trxRevHeap heap_reve; /* Obtiene los datos de la caja en funcion de la caja del centro autorizador */ strcpy(term_data.nro_caj_ca, IsoMsg->GetField(41)); ret=ObtCaCaj(&term_data); if (ret!=OK) { /* Loguea el mensaje en caso de error */ LogAlarm.Put(0, "RtaRevAnul: ERROR (%d) al obtener datos de la caja [%s]\n", ret, term_data.nro_caj_ca); return NOOK; } /* Obtiene los datos del heap */ sprintf(idHeap,"%2.2s%3.3s%5.5s%8.8s", term_data.nro_ca, term_data.nro_suc, term_data.nro_caj, IsoMsg->GetField(11)); LogAlarm.Put(0, "RtaRevAnul: Extrayendo datos del heap [%s]\n", idHeap); ret=Heap.GetData(idHeap,(char *)&heap_reve, sizeof(heap_reve)); if (ret==NOOK) { LogAlarm.Put(0, "RtaRevAnul: Transaccion no existe en Heap [%s]\n", idHeap); return NOOK; } else { LogAlarm.Put(0, "RtaRevAnul: Reenvio a RevTrxRta\n"); Cfg.GetItem("VisaDaemon", "QueueID", aux_str1); if ( EQueue.Open(atoi(aux_str1)) == OK ) { Heap.PutData(idHeap,(char *)&heap_reve, sizeof(heap_reve)); EQueue.SendMsg(EVENT_SNDREVERSO_RTA, szMsjeISO, iLMsjeISO); } } LogAlarm.Put(0, "RtaRevAnul: Evento finalizado\n"); return OK; }
/* +-----------------+------------------------------------------------------------+ | FUNCION | EchoTest::EnviarMsg | +-----------------+------------------------------------------------------------+ | DESCRIPCION | Envia un mensaje por la cola administrativa | | | | +-----------------+------------------------------------------------------------+ */ int EchoTest::EnviarMsg(int orig_pid, char *msg, int len) { Queue AQueue; int iRet; char msgString[500]; char auxString1[100]; /* Abre cola de mensajes administrativos */ Cfg.GetItem("AdminDaemon", "QueueID", auxString1); iRet = AQueue.Open(atol(auxString1)); if (iRet==OK) { /* Envia mensaje */ memset(msgString, 0, sizeof(msgString)); memcpy(msgString, msg, len); iRet = AQueue.SendMsg(orig_pid, msgString, len); } if (iRet) { LogAlarm.Put(0, "EchoTest: ERROR al enviar mensaje por cola administrativa\n"); } return iRet; }
/* +-----------------+------------------------------------------------------------+ | FUNCION | init | +-----------------+------------------------------------------------------------+ | DESCRIPCION | Inicia las estructuras y memoria compartida | | | | +-----------------+------------------------------------------------------------+ */ int init() { int ret; int cont; int max_entries; char aux_str1[100]; char aux_str2[100]; /* Configura las seƱales de terminacion */ signal(SIGINT, shut_down); signal(SIGTERM, shut_down); /* Obtiene el nombre del archivo de log */ Cfg.GetItem("TimeOutDaemon", "LogName", aux_str1); LogAlarm.Open(aux_str1); /* Setea el nivel de log */ Cfg.GetItem("TimeOutDaemon", "LogLevel", aux_str1); LogAlarm.SetLevel(atoi(aux_str1)); /* Loguea hora de comienzo */ LogAlarm.Put( 0,"TimeOutDaemon::init(): Comienzo [%s] - %s", NUM_VERSION, currentTimeLog()); /* Obtiene la cantidad maxima de entradas en la cola */ Cfg.GetItem("TimeOutDaemon", "MaxEntries", aux_str1); max_entries=atoi(aux_str1); /* Obtiene la cantidad maxima de entradas en la tabla de PIDs */ Cfg.GetItem("PIDTable", "ShMemID", aux_str1); Cfg.GetItem("PIDTable", "MaxEntries", aux_str2); /* Abre tabla de PIDs */ LogAlarm.Put(0, "TimeOutDaemon::init(): Abre tabla de PIDs [%s] [%s]\n", aux_str1, aux_str2); while (PTable.Open(atoi(aux_str1), atoi(aux_str2))==NOOK) { if (PTable.GetErrno()!=ENOENT) { LogAlarm.Put(0, "TimeOutDaemon::init(): Error (%d)!!\n", PTable.GetErrno()); exit(1); } } /* Pone el pid en la tabla */ LogAlarm.Put(0, "TimeOutDaemon::init(): Adding PID to PID table...\n"); ret=PTable.PutPid(getpid()); if (ret==NOOK) { LogAlarm.Put(0, "TimeOutDaemon::init(): Error (%d)!!\n", PTable.GetErrno()); exit(1); } /* Obtiene los identificadores y permisos de la cola de timeout */ Cfg.GetItem("TimeOutDaemon", "ShMemID", aux_str1); Cfg.GetItem("TimeOutDaemon", "ShMemPerms", aux_str2); /* Crea cola de timeout */ LogAlarm.Put(0, "TimeOutDaemon::init(): Creando area de memoria compartida para la Timeout_Queue\n"); ret=timeout_queue.Create(atoi(aux_str1), max_entries, atoi(aux_str2)); if (ret==NOOK) { LogAlarm.Put(0, "TimeOutDaemon::init(): Error (%d) al crear area para la Timeout_Queue \n", timeout_queue.GetErrno()); } /* Obtiene identificador de la cola de eventos */ Cfg.GetItem("VisaDaemon", "QueueID", aux_str1); /* Abre cola de eventos */ LogAlarm.Put(0, "TimeOutDaemon::init(): Abriendo cola de eventos...\n"); ret= EQueue.Open(atoi(aux_str1)); if (ret==NOOK) { LogAlarm.Put(1, "TimeOutDaemon::init(): Error (%d) al abrir cola de eventos!!\n", EQueue.GetErrno()); return NOOK; } return OK; }