114 lines
3.4 KiB
C
114 lines
3.4 KiB
C
|
/****************************************************************
|
||
|
* *
|
||
|
* Copyright 2001, 2011 Fidelity Information Services, Inc *
|
||
|
* *
|
||
|
* This source code contains the intellectual property *
|
||
|
* of its copyright holder(s), and is made available *
|
||
|
* under a license. If you do not know the terms of *
|
||
|
* the license, please stop and do not read further. *
|
||
|
* *
|
||
|
****************************************************************/
|
||
|
|
||
|
#include "mdef.h"
|
||
|
|
||
|
#include <errno.h>
|
||
|
#include "gtm_string.h"
|
||
|
#include "gtm_stdio.h"
|
||
|
|
||
|
#include "gtm_event_log.h"
|
||
|
#include "rtnhdr.h"
|
||
|
#include "lv_val.h" /* needed for "fgncal.h" */
|
||
|
#include "fgncal.h"
|
||
|
#include "io.h"
|
||
|
#include "iosp.h"
|
||
|
#include "gtmmsg.h"
|
||
|
#include "trans_log_name.h"
|
||
|
#include "error.h"
|
||
|
#include "gtm_logicals.h"
|
||
|
|
||
|
#define MAXARGSIZE 1024
|
||
|
|
||
|
static boolean_t gtm_do_event_log = FALSE;
|
||
|
static fgnfnc gtm_event_log_func;
|
||
|
static void_ptr_t gtm_event_log_handle;
|
||
|
|
||
|
int gtm_event_log_init(void)
|
||
|
{
|
||
|
/* External log initializations */
|
||
|
|
||
|
mstr name, trans_name;
|
||
|
char log_name[MAX_TRANS_NAME_LEN],
|
||
|
shared_lib[MAX_TRANS_NAME_LEN],
|
||
|
log_func[MAX_TRANS_NAME_LEN];
|
||
|
int status, index, save_errno;
|
||
|
char print_msg[1024], *args;
|
||
|
|
||
|
error_def(ERR_EVENTLOGERR);
|
||
|
error_def(ERR_TEXT);
|
||
|
|
||
|
if (gtm_do_event_log) /* Already initialized */
|
||
|
return(SS_NORMAL);
|
||
|
name.len = SIZEOF(GTM_EVENT_LOG_LIB_ENV) - 1;
|
||
|
name.addr = GTM_EVENT_LOG_LIB_ENV;
|
||
|
if (SS_NORMAL != (status = TRANS_LOG_NAME(&name, &trans_name, log_name, SIZEOF(log_name), do_sendmsg_on_log2long))
|
||
|
|| (0 == trans_name.len))
|
||
|
return(status);
|
||
|
memcpy(shared_lib, trans_name.addr, trans_name.len);
|
||
|
shared_lib[trans_name.len] = '\0';
|
||
|
if (NULL == (gtm_event_log_handle = fgn_getpak(shared_lib, INFO)))
|
||
|
{
|
||
|
SPRINTF(print_msg, "Could not open shared library specified in %s - %s. No event logging done",
|
||
|
GTM_EVENT_LOG_LIB_ENV, shared_lib);
|
||
|
gtm_putmsg(VARLSTCNT(6) ERR_EVENTLOGERR, 0, ERR_TEXT, 2, LEN_AND_STR(print_msg));
|
||
|
return(-1);
|
||
|
}
|
||
|
#ifdef GTM_EVENT_LOG_HARDCODE_RTN_NAME
|
||
|
trans_name.len = SIZEOF(GTM_EVENT_LOG_RTN) - 1;
|
||
|
trans_name.addr = GTM_EVENT_LOG_RTN;
|
||
|
#else
|
||
|
name.len = SIZEOF(GTM_EVENT_LOG_RTN_ENV) - 1;
|
||
|
name.addr = GTM_EVENT_LOG_RTN_ENV;
|
||
|
if (SS_NORMAL != (status = TRANS_LOG_NAME(&name, &trans_name, log_name, SIZEOF(log_name), do_sendmsg_on_log2long))
|
||
|
|| (0 == trans_name.len))
|
||
|
{
|
||
|
SPRINTF(print_msg, "%s not set or null. No event logging done", GTM_EVENT_LOG_RTN_ENV);
|
||
|
gtm_putmsg(VARLSTCNT(6) ERR_EVENTLOGERR, 0, ERR_TEXT, 2, LEN_AND_STR(print_msg));
|
||
|
return(status);
|
||
|
}
|
||
|
#endif
|
||
|
memcpy(log_func, trans_name.addr, trans_name.len);
|
||
|
log_func[trans_name.len] = '\0';
|
||
|
|
||
|
if (NULL == (gtm_event_log_func = fgn_getrtn(gtm_event_log_handle, &trans_name, INFO)))
|
||
|
{
|
||
|
#ifdef GTM_EVENT_LOG_HARDCODE_RTN_NAME
|
||
|
SPRINTF(print_msg, "Could not find function %s in shared library %s. No event logging done",
|
||
|
log_func, shared_lib);
|
||
|
#else
|
||
|
SPRINTF(print_msg,
|
||
|
"Could not find function specified in %s - %s in shared library %s. No event logging done",
|
||
|
GTM_EVENT_LOG_RTN_ENV, log_func, shared_lib);
|
||
|
#endif
|
||
|
gtm_putmsg(VARLSTCNT(6) ERR_EVENTLOGERR, 0, ERR_TEXT, 2, LEN_AND_STR(print_msg));
|
||
|
return(-1);
|
||
|
}
|
||
|
|
||
|
gtm_do_event_log = TRUE;
|
||
|
return(SS_NORMAL);
|
||
|
}
|
||
|
|
||
|
int gtm_event_log_close(void)
|
||
|
{
|
||
|
if (gtm_do_event_log)
|
||
|
fgn_closepak(gtm_event_log_handle, INFO);
|
||
|
gtm_do_event_log = FALSE;
|
||
|
return(SS_NORMAL);
|
||
|
}
|
||
|
|
||
|
int gtm_event_log(int argc, char *category, char *code, char *msg)
|
||
|
{
|
||
|
if (gtm_do_event_log)
|
||
|
gtm_event_log_func(argc, category, code, msg);
|
||
|
return(SS_NORMAL);
|
||
|
}
|