HEX
Server: Apache/2.4.34 (Red Hat) OpenSSL/1.0.2k-fips
System: Linux WORDPRESS 3.10.0-1160.118.1.el7.x86_64 #1 SMP Thu Apr 4 03:33:23 EDT 2024 x86_64
User: digital (1020)
PHP: 7.2.24
Disabled: NONE
Upload Files
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(&reg_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(&reg_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);
}