File: //opt/OV/OpC/examples/copcagtapi/itoagtmsitest.c
/* -*-C-*-
********************************************************************************
*
* File: itoagtmsitest.c
* Description: This file contains an example program on how to use the
* HP OpenView VantagePoint Operations Message Stream Interface
* Package: HP OpenView VantagePoint Operations
*
* (c) Copyright Hewlett-Packard Co. 1993 - 2008
*
********************************************************************************
*/
#include <stdio.h>
#include <string.h>
#include <opcapi.h>
#include <locale.h>
#include <time.h>
/* module body */
/*-------------*/
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef TRUE
#define TRUE (1)
#endif
/*
*----------------------------------------------------------------------------
* Function: display_severity
* --------------------------
*
* Description:
* Converts an VPO severity value into a string
*
* Parameters:
* sev VPO numeric severity value
*
* Return values:
* none.
*
*----------------------------------------------------------------------------
*/
static char * display_severity (sev)
long sev;
{
switch(sev)
{
case OPC_SEV_NORMAL:
return("Normal");
case OPC_SEV_WARNING:
return("Warning");
case OPC_SEV_MINOR:
return("Minor");
case OPC_SEV_MAJOR:
return("Major");
case OPC_SEV_CRITICAL:
return("Critical");
case OPC_SEV_UNKNOWN:
default:
return("Unknown");
}
}
/*
*----------------------------------------------------------------------------
* Function: display_msg
* ----------------------
*
* Description:
* Displays an VPO message
*
* Parameters:
* data VPO date structure to be displayed
*
* Return values:
* none.
*
*----------------------------------------------------------------------------
*/
static void display_msg (data)
opcdata data;
{
time_t time_val;
printf("Node name = %s\n",
opcdata_get_str(data, OPCDATA_NODENAME));
time_val = opcdata_get_long(data, OPCDATA_CREATION_TIME);
printf("Time created = %s", (long) ctime(&time_val));
time_val = opcdata_get_long(data, OPCDATA_RECEIVE_TIME);
printf("Time received = %s", (long) ctime(&time_val));
printf("Msg. Type = %s\n",
opcdata_get_str(data, OPCDATA_MSGTYPE));
printf("Message group = %s\n",
opcdata_get_str(data, OPCDATA_GROUP));
printf("Object = %s\n",
opcdata_get_str(data, OPCDATA_OBJECT));
printf("Application = %s\n",
opcdata_get_str(data, OPCDATA_APPLICATION));
printf("Severity = %s\n",
display_severity(opcdata_get_long(data, OPCDATA_SEVERITY)));
printf("Auto action node name = %s\n",
opcdata_get_str(data, OPCDATA_AACTION_NODE));
printf("Auto action call = %s\n",
opcdata_get_str(data, OPCDATA_AACTION_CALL));
printf("Auto action annotation = %d\n",
opcdata_get_long(data, OPCDATA_AACTION_ANNOTATE));
printf("Auto action acknowledge = %d\n",
opcdata_get_long(data, OPCDATA_AACTION_ACK));
printf("Op action node name = %s\n",
opcdata_get_str(data, OPCDATA_OPACTION_NODE));
printf("Op action call = %s\n",
opcdata_get_str(data, OPCDATA_OPACTION_CALL));
printf("Op action annotation = %d\n",
opcdata_get_long(data, OPCDATA_OPACTION_ANNOTATE));
printf("Op action acknowledge = %d\n",
opcdata_get_long(data, OPCDATA_OPACTION_ACK));
printf("Log only = %d\n",
opcdata_get_long(data, OPCDATA_MSG_LOG_ONLY));
printf("Unmatched = %d\n",
opcdata_get_long(data, OPCDATA_UNMATCHED));
printf("TT = %d\n",
opcdata_get_long(data, OPCDATA_TROUBLETICKET));
printf("Ack. on TT = %d\n",
opcdata_get_long(data, OPCDATA_TROUBLETICKET_ACK));
printf("Do notification = %d\n",
opcdata_get_long(data, OPCDATA_NOTIFICATION));
printf("Instruction : type %d, tag >%s<, parms >%s<\n",
opcdata_get_long(data, OPCDATA_INSTR_IF_TYPE),
opcdata_get_str(data, OPCDATA_INSTR_IF),
opcdata_get_str(data, OPCDATA_INSTR_PAR));
printf("Msg source = %s\n",
opcdata_get_str(data, OPCDATA_MSGSRC));
printf("Text = %s\n",
opcdata_get_str(data, OPCDATA_MSGTEXT));
printf("Orig. msg text = %s\n",
opcdata_get_str(data, OPCDATA_ORIGMSGTEXT));
}
/*
*----------------------------------------------------------------------------
* Function: getstring
* ----------------------
*
* Description:
* Reads a string from stdin
*
* Parameters:
* buflen max. length of buffer
*
* Return values:
* none.
*
*----------------------------------------------------------------------------
*/
static void getstring(buf, buflen)
char *buf;
int buflen;
{
char *pz;
fgets(buf, buflen, stdin);
if ((pz = (char*)strchr(buf, '\n')) != NULL )
{
*pz = '\0';
}
}
/*
*----------------------------------------------------------------------------
* Function: main
* --------------
*
* Description:
* Prints a menu and reacts for the user input
*
*----------------------------------------------------------------------------
*/
main ()
{
int fexit;
opcdata msg;
opcregcond reg_cond;
char buf[512];
int interface_type;
char instance[14];
int mode;
int max_entries;
int interface_id;
long cond_id;
long sev = 0;
int ret;
setlocale(LC_ALL,"");
for ( fexit = FALSE ; fexit == FALSE; )
{
printf ("\n\n");
printf (" Open / Close\n");
printf (" ------------\n");
printf (" o ..... Open MSI\n");
printf (" c ..... Close MSI\n");
printf ("\n");
printf (" Register\n");
printf (" --------\n");
printf (" e ..... Register RegCond\n");
printf (" a ..... Register For All Messages\n");
printf (" u ..... Unregister RegCond\n");
printf (" v ..... Unregister For All Messages\n");
printf ("\n");
printf (" Read / Write\n");
printf (" ------------\n");
printf (" w ..... Write Message\n");
printf (" r ..... Read Message\n");
printf (" m ..... Read-Modify-Write Message\n");
printf ("\n");
printf (" q ..... quit\n");
do
{
printf ("\n>>> ");
fgets(buf, 512, stdin);
}
while (strpbrk (buf, "oceauvwrmq") == NULL);
printf("\n");
switch(*buf)
{
/* Open an instance of the Message Stream Interface */
case 'o':
printf ("Type 1 = AGT-MSI-read, 2 = AGT-MSI-readwrite, 3 = AGT-MSI-write: ");
fgets(buf, 512, stdin);
switch(atoi(buf))
{
case 1:
interface_type = OPCAGTIF_EXTMSGPROC_READ;
break;
case 2:
interface_type = OPCAGTIF_EXTMSGPROC_READWRITE;
break;
case 3:
interface_type = OPCAGTIF_EXTMSGPROC_WRITE;
break;
default:
fprintf(stderr, "Invalid MSI type\n");
continue;
}
printf("Instance Name: ");
getstring(instance, 14);
printf("Mode: ");
mode = 0;
printf(" - OPCIF_ALWAYS / OPCIF_AGT_RUNNING (0/1) ");
fgets(buf, 512, stdin);
mode |= (atoi(buf) == 0 ? OPCIF_ALWAYS : OPCIF_AGT_RUNNING);
printf(" - OPCIF_READ_WAIT / OPCIF_READ_NOWAIT (0/1) ");
fgets(buf, 512, stdin);
mode |= (atoi(buf) == 0 ? OPCIF_READ_WAIT : OPCIF_READ_NOWAIT);
printf(" - OPCIF_CLOSE_FORWARD / OPCIF_CLOSE_DISCARD (0/1) ");
fgets(buf, 512, stdin);
mode |= (atoi(buf) == 0 ? OPCIF_CLOSE_FORWARD : OPCIF_CLOSE_DISCARD);
printf("max_entries: ");
fgets(buf, 512, stdin);
max_entries = atoi(buf);
if ((ret = opcif_open(interface_type, instance, mode, max_entries,
&interface_id)) == OPC_ERR_OK)
{
printf("\nreturned interface_id: %d\n", interface_id);
}
else
{
fprintf(stderr, "ERROR: opcif_open() = %s\n", opcdata_report_error (ret));
}
break;
/* Close an open MSI instance */
case 'c':
printf("interface_id: ");
scanf("%d", &interface_id);
if ((ret = opcif_close(interface_id)) != OPC_ERR_OK)
{
fprintf(stderr, "ERROR: opcif_close() = %s\n", opcdata_report_error (ret));
}
break;
/* Register with registration condition */
case 'e':
printf("interface_id: ");
fgets(buf, 512, stdin);
interface_id = atoi(buf);
if (opcreg_create(®_cond) != OPC_ERR_OK)
{
fprintf(stderr, "Can't create reg_cond\n");
continue;
}
printf("application: ");
getstring(buf, 512);
if (*buf != '\0')
{
opcreg_set_str(reg_cond, OPCREG_APPLICATION, buf);
}
printf("msggroup: ");
getstring(buf, 512);
if (*buf != '\0')
{
opcreg_set_str(reg_cond, OPCREG_GROUP, buf);
}
printf("msg type: ");
getstring(buf, 512);
if (*buf != '\0')
{
opcreg_set_str(reg_cond, OPCREG_MSGTYPE, buf);
}
printf("node name: ");
getstring(buf, 512);
if (*buf != '\0')
{
opcreg_set_str(reg_cond, OPCREG_NODENAME, buf);
}
printf("object: ");
getstring(buf, 512);
if (*buf != '\0')
{
opcreg_set_str(reg_cond, OPCREG_OBJECT, buf);
}
printf("severity [u(nknown), n(ormal), w(arning), ");
printf("m(inor), ma(j)or, c(ritical) + combinations]: ");
getstring(buf, 512);
if (*buf != '\0')
{
sev = 0;
if (strchr(buf, 'u') != NULL)
{
sev |= OPC_SEV_UNKNOWN;
}
if (strchr(buf, 'n') != NULL)
{
sev |= OPC_SEV_NORMAL;
}
if (strchr(buf, 'w') != NULL)
{
sev |= OPC_SEV_WARNING;
}
if (strchr(buf, 'm') != NULL)
{
sev |= OPC_SEV_MINOR;
}
if (strchr(buf, 'j') != NULL)
{
sev |= OPC_SEV_MAJOR;
}
if (strchr(buf, 'c') != NULL)
{
sev |= OPC_SEV_CRITICAL;
}
opcreg_set_long(reg_cond, OPCREG_SEVERITY, sev);
}
if ((ret = opcif_register(interface_id, reg_cond, &cond_id))
== OPC_ERR_OK)
{
printf("\nreturned cond_id: %ld\n", cond_id);
}
else
{
fprintf(stderr, "ERROR: opcif_register() = %s\n", opcdata_report_error (ret));
}
opcreg_free(®_cond);
break;
/* Register for all messages without registration condition */
case 'a':
printf("interface_id: ");
scanf("%d", &interface_id);
if ((ret = opcif_register(interface_id, NULL, &cond_id))
== OPC_ERR_OK)
{
printf("\nreturned cond_id: %ld\n", cond_id);
}
else
{
fprintf(stderr, "ERROR: opcif_register() = %s\n", opcdata_report_error (ret));
}
break;
/* Unregister registration condition */
case 'u':
printf("interface_id: ");
scanf("%d", &interface_id);
printf("cond_id: ");
scanf("%ld", &cond_id);
if ((ret = opcif_unregister(interface_id, cond_id)) != OPC_ERR_OK)
{
fprintf(stderr, "ERROR: opcif_unregister() = %s\n", opcdata_report_error (ret));
}
break;
/* Unregister for all messages */
case 'v':
printf("interface_id: ");
scanf("%d", &interface_id);
if ((ret = opcif_unregister(interface_id, 0)) != OPC_ERR_OK)
{
fprintf(stderr, "ERROR: opcif_unregister() = %s\n", opcdata_report_error (ret));
}
break;
/* Write message into open MSI */
case 'w':
printf("interface_id: ");
fgets(buf, 512, stdin);
interface_id = atoi(buf);
if (opcdata_create(OPCDATA_MSG, &msg) != OPC_ERR_OK)
{
fprintf(stderr, "Can't create opcdata structure\n");
continue;
}
if (opcdata_set_long(msg, OPCDATA_CREATION_TIME, time(NULL))
!= OPC_ERR_OK)
{
fprintf(stderr, "Can't set creation time\n");
}
printf("Message Text: ");
getstring(buf, 512);
if (opcdata_set_str(msg, OPCDATA_MSGTEXT, buf)
!= OPC_ERR_OK)
{
fprintf(stderr, "Can't set attribute OPCDATA_MSGTEXT\n");
}
printf("application: ");
getstring(buf, 512);
if (opcdata_set_str(msg, OPCDATA_APPLICATION, buf)
!= OPC_ERR_OK)
{
fprintf(stderr, "Can't set attribute OPCDATA_APPLICATION\n");
}
printf("msggroup: ");
getstring(buf, 512);
if (opcdata_set_str(msg, OPCDATA_GROUP, buf)
!= OPC_ERR_OK)
{
fprintf(stderr, "Can't set attribute OPCDATA_GROUP\n");
}
printf("msg type: ");
getstring(buf, 512);
if (opcdata_set_str(msg, OPCDATA_MSGTYPE, buf)
!= OPC_ERR_OK)
{
fprintf(stderr, "Can't set attribute OPCDATA_MSGTYPE\n");
}
printf("node name: ");
getstring(buf, 512);
if (opcdata_set_str(msg, OPCDATA_NODENAME, buf)
!= OPC_ERR_OK)
{
fprintf(stderr, "Can't set attribute OPCDATA_NODENAME\n");
}
printf("object: ");
getstring(buf, 512);
if (opcdata_set_str(msg, OPCDATA_OBJECT, buf)
!= OPC_ERR_OK)
{
fprintf(stderr, "Can't set attribute OPCDATA_OBJECT\n");
}
printf("severity [u(nknown), n(ormal), w(arning), m(inor), ");
printf("ma(j)or, c(ritical)]: ");
getstring(buf, 512);
switch(*buf)
{
case 'u':
sev = OPC_SEV_UNKNOWN;
break;
case 'n':
sev = OPC_SEV_NORMAL;
break;
case 'w':
sev = OPC_SEV_WARNING;
break;
case 'm':
sev = OPC_SEV_MINOR;
break;
case 'j':
sev = OPC_SEV_MAJOR;
break;
case 'c':
sev = OPC_SEV_CRITICAL;
break;
default:
sev = OPC_SEV_NORMAL;
}
if (opcdata_set_long(msg, OPCDATA_SEVERITY, sev)
!= OPC_ERR_OK)
{
fprintf(stderr, "Can't set attribute OPCDATA_SEVERITY\n");
}
ret = opcif_write (interface_id, msg);
printf ("\nopcif_write() = %s\n", opcdata_report_error (ret));
opcdata_free(&msg);
break;
/* Read message from open MSI instance */
case 'r':
printf("interface_id: ");
fgets(buf, 512, stdin);
interface_id = atoi(buf);
if (opcdata_create(OPCDATA_EMPTY, &msg) != OPC_ERR_OK)
{
fprintf(stderr, "Can't create opcdata structure\n");
continue;
}
if ((ret = opcif_read(interface_id, msg)) == OPC_ERR_OK)
{
display_msg(msg);
}
else
{
fprintf(stderr, "ERROR: opcif_read() = %s\n", opcdata_report_error (ret));
}
opcdata_free(&msg);
break;
/* Read, modify and write message from MSI instance */
case 'm':
printf("interface_id: ");
fgets(buf, 512, stdin);
interface_id = atoi(buf);
if (opcdata_create(OPCDATA_EMPTY, &msg) != OPC_ERR_OK)
{
fprintf(stderr, "Can't create opcdata structure\n");
continue;
}
if ((ret = opcif_read(interface_id, msg)) == OPC_ERR_OK)
{
display_msg(msg);
printf("Message Text: ");
getstring(buf, 512);
if (strlen(buf) > 0)
{
if (opcdata_set_str(msg, OPCDATA_MSGTEXT, buf)
!= OPC_ERR_OK)
{
fprintf(stderr,
"Can't set attribute OPCDATA_MSGTEXT\n");
}
}
ret = opcif_write (interface_id, msg);
printf ("\nopcif_write() = %s\n", opcdata_report_error (ret));
}
else
{
fprintf(stderr, "ERROR: opcif_read() = %s\n", opcdata_report_error (ret));
}
opcdata_free(&msg);
break;
/* Good bye */
case 'q':
fexit = TRUE;
break;
default:
;
}
}
exit(0);
}