void 
event_callback( SaEvtSubscriptionIdT subscription_id,
		const SaEvtEventHandleT event_handle,
		const SaSizeT event_data_size)
{
	SaAisErrorT result;
	SaUint8T priority;
	SaTimeT retention_time;
	SaNameT publisher_name = {0, {0}};
	SaTimeT publish_time;
	SaEvtEventIdT event_id;
	int i;

	printf("event_callback called\n");
	printf("sub ID: %x\n", subscription_id);
	printf("event_handle %llx\n", (unsigned long long)event_handle);
	printf("event data size %llu\n", (unsigned long long)event_data_size);

	evt_pat_get_array.patternsNumber = 4;
	result = saEvtEventAttributesGet(event_handle,
			&evt_pat_get_array,	/* patterns */
			&priority,		/* priority */
			&retention_time,	/* retention time */
			&publisher_name,	/* publisher name */
			&publish_time,		/* publish time */
			&event_id		/* event_id */
			);
	if (result != SA_AIS_OK) {
		printf("event get attr result(2): %d\n", result);
		goto evt_free;
	}
	printf("pattern array count: %llu\n",
		(unsigned long long)evt_pat_get_array.patternsNumber);
	for (i = 0; i < evt_pat_get_array.patternsNumber; i++) {
		printf( "pattern %d =\"%s\"\n", i,
				  evt_pat_get_array.patterns[i].pattern);
	}

	printf("priority: 0x%x\n", priority);
	printf("retention: %llx\n", (unsigned long long)retention_time);
	printf("publisher name content: \"%s\"\n", publisher_name.value); 
	printf("event id: %llx\n", (unsigned long long)event_id);
evt_free:
	result = saEvtEventFree(event_handle);
	printf("event free result: %d\n", result);
}
void tet_saEvtEventAttributesGet(SaEvtEventHandleT *ptrEventHandle)
{
  static int try_again_count;
  int character,length=0,pCount=0;

  SaEvtEventPatternArrayT *ptrPatternArray=
    (SaEvtEventPatternArrayT *)malloc(sizeof(SaEvtEventPatternArrayT));

  memset(ptrPatternArray,'\0',(sizeof(SaEvtEventPatternArrayT)));

  SaNameT *getPublishName=(SaNameT *)malloc(sizeof(SaNameT));

  memset(getPublishName,'\0',(sizeof(SaNameT)));

  ptrPatternArray->allocatedNumber=gl_allocatedNumber;
  ptrPatternArray->patterns=
    (SaEvtEventPatternT *)malloc((sizeof(SaEvtEventPatternT))*gl_allocatedNumber);

  memset(ptrPatternArray->patterns,'\0',
               sizeof(SaEvtEventPatternT)*gl_allocatedNumber);

  printf("\n\n******************************\n");

  printf("\nEvent Patterns\n");

  while(pCount<gl_allocatedNumber)
    {
      ptrPatternArray->patterns[pCount].allocatedSize=gl_patternLength;
      ptrPatternArray->patterns[pCount].patternSize=gl_patternLength;
      ptrPatternArray->patterns[pCount].pattern=
        (SaUint8T *)malloc(gl_patternLength);

      memset(ptrPatternArray->patterns[pCount].pattern,'\0',
                   sizeof(gl_patternLength));
      pCount++;
    }

  gl_rc=saEvtEventAttributesGet(*ptrEventHandle,ptrPatternArray,&gl_priority,
                                &gl_retentionTime,getPublishName,
                                &gl_publishTime,&gl_evtId);
  WHILE_TRY_AGAIN(gl_rc)
    {
      ++try_again_count;
      if(try_again_count==MAX_NUM_TRY_AGAINS)
      {
        printf("\n Attributes Get API Crossed Max Try Agains: exiting \n");
        break;
      }
      RETRY_SLEEP; 
      gl_rc=saEvtEventAttributesGet(*ptrEventHandle,ptrPatternArray,
                                    &gl_priority,
                                    &gl_retentionTime,getPublishName,
                                    &gl_publishTime,&gl_evtId);
      if(gl_rc==SA_AIS_OK)
        printf("\n EventAttibute Get Try Again Count = %d\n",try_again_count);
    }
  /*resultSuccess("saEvtEventAttributesGet() invoked",gl_rc);*/

  if(gl_rc==1)
    {
      printf("\nNumber of patterns retrieved : %llu\n\n",
             ptrPatternArray->allocatedNumber);
      pCount=0;
      while(pCount<ptrPatternArray->allocatedNumber)
        {
          printf("Pattern Size: %llu\n",
                 ptrPatternArray->patterns[pCount].patternSize);
          character=ptrPatternArray->patterns[pCount].pattern[length];
          printf("Pattern: ");

          while(((character>=65&&character<=91)
                 ||(character>=97&&character<=123))
                &&length<ptrPatternArray->patterns[pCount].patternSize)
            {
              printf("%c",ptrPatternArray->patterns[pCount].pattern[length]);
              length++;
              if(length<ptrPatternArray->patterns[pCount].patternSize)
                {
                  character=ptrPatternArray->patterns[pCount].pattern[length];
                }
            }

          length=0;
          pCount++;
          printf("\n\n");
        }
    }

  printf("\nEvent Attributes retrieved : \n");
  printf("\nPriority: %d",gl_priority);
  printf("\nRetention Time: %llu",gl_retentionTime);
  printf("\nPublisher Name: %s",getPublishName->value);
  printf("\nPublish Time: %llu",gl_publishTime);
  printf("\nEvent Id: %llu\n",gl_evtId);
  printf("\n******************************\n"); 
  if(gl_b03_flag) 
  {
    gl_rc = saEvtEventPatternFree(*ptrEventHandle,ptrPatternArray->patterns);
    result("saEvtEventPatternFree() from a DeliverCallback()",
             SA_AIS_OK);
  }
}