/**
 * Test the content of an alarm notification
 * Strategy: Set up a subscription and send a notification.
 *           Check it.
 */
void alarmNotificationTest(void)
{
    SaNtfAlarmNotificationFilterT          myAlarmFilter;
    subscriptionId = 1;

    rc = SA_AIS_OK;

    resetCounters();

    safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , SA_AIS_OK);
    safassert(saNtfSelectionObjectGet(ntfHandle, &selectionObject) , SA_AIS_OK);

    /* Set up the filters and subscription */
    safassert(saNtfAlarmNotificationFilterAllocate(
        ntfHandle,
        &myAlarmFilter,
        0,
        0,
        0,
        0,
        0,
        2,
        0), SA_AIS_OK);
    /* Set perceived severities */
    myAlarmFilter.perceivedSeverities[0] = SA_NTF_SEVERITY_WARNING;
    myAlarmFilter.perceivedSeverities[1] = SA_NTF_SEVERITY_CLEARED;

    /* Initialize filter handles */
    myNotificationFilterHandles.alarmFilterHandle =
        myAlarmFilter.notificationFilterHandle;
    myNotificationFilterHandles.attributeChangeFilterHandle = 0;
    myNotificationFilterHandles.objectCreateDeleteFilterHandle = 0;
    myNotificationFilterHandles.securityAlarmFilterHandle = 0;
    myNotificationFilterHandles.stateChangeFilterHandle = 0;

    safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles,
                                         subscriptionId),
                                         SA_AIS_OK);

    /* Create a notification and send it */
	safassert(saNtfAlarmNotificationAllocate(
			ntfHandle,
			&myAlarmNotification,
			0,
			(SaUint16T)(strlen(DEFAULT_ADDITIONAL_TEXT) + 1),
			0,
			0,
			0,
			0,
			SA_NTF_ALLOC_SYSTEM_LIMIT), SA_AIS_OK);

	fillHeader(&myAlarmNotification.notificationHeader);

    /* determine perceived severity */
    *(myAlarmNotification.perceivedSeverity) = SA_NTF_SEVERITY_WARNING;

    /* set probable cause*/
    *(myAlarmNotification.probableCause) = SA_NTF_BANDWIDTH_REDUCED;
    *myAlarmNotification.trend = SA_NTF_TREND_MORE_SEVERE;
    myAlarmNotification.thresholdInformation->thresholdValueType = SA_NTF_VALUE_UINT32;
    myAlarmNotification.thresholdInformation->thresholdValue.uint32Val = 600;
    myAlarmNotification.thresholdInformation->thresholdHysteresis.uint32Val = 100;
    myAlarmNotification.thresholdInformation->observedValue.uint32Val = 567;
    myAlarmNotification.thresholdInformation->armTime = SA_TIME_UNKNOWN;

    safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), SA_AIS_OK);
	 poll_until_received(ntfHandle, *myAlarmNotification.notificationHeader.notificationId);
    if(ntfRecieved.alarmFilterHandle != 1 ||
    		ntfRecieved.attributeChangeFilterHandle != 0 ||
    		ntfRecieved.objectCreateDeleteFilterHandle !=0 ||
    		ntfRecieved.securityAlarmFilterHandle != 0 ||
    		ntfRecieved.stateChangeFilterHandle != 0) safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK);

    safassert(saNtfNotificationFree(myAlarmNotification.notificationHandle) , SA_AIS_OK);
    safassert(saNtfNotificationFilterFree(myAlarmFilter.notificationFilterHandle), SA_AIS_OK);

    safassert(saNtfNotificationUnsubscribe(subscriptionId), SA_AIS_OK);
    safassert(saNtfFinalize(ntfHandle), SA_AIS_OK);

    /* Allocated in fillInDefaultValues() */
    free(myNotificationParams.additionalText);
    if(errors) rc = SA_AIS_ERR_FAILED_OPERATION;
    test_validate(rc, SA_AIS_OK);
}
	void PropertiesWindow::initialize( PropertyHolder* object )
	{
        // Fill header text fields with name and description
        fillHeader(object);

        // Get the property set of the object
        PropertyRecordPtr props = object->getAllProperties();

        int row = 0;
        //  Iterate through all properties and add a row for
        //  every Entry
        for (PropertyRecord::PropertyRecordMap::const_iterator propIter = props->begin();
            propIter != props->end(); propIter++ )
        {
            CeGuiString key = propIter->first;

            if (key == "description" || key == "name" )
                continue;

            // Check for Int
            if (propIter->second.isInt() )
            {
                addPropertyInt(propIter->second, mMainTable, key );
            }
            // Check for IntPair
            else if (propIter->second.isIntPair() )
            {
                addPropertyIntPair(propIter->second, mMainTable, key);
                int rowCount = mMainTable->getRowCount();
                mMainTable->addRow(rowCount);
                mMainTable->setItem(new ListboxTextItem(""), 0, rowCount);
            }
            // Check for IntTriple
            else if (propIter->second.isIntTriple() )
            {
                addPropertyIntTriple(propIter->second, mMainTable, key);
                int rowCount = mMainTable->getRowCount();
                mMainTable->addRow(rowCount);
                mMainTable->setItem(new ListboxTextItem(""), 0, rowCount);
            }
            // Check for String
            else if (propIter->second.isString() )
            {
                addPropertyString(propIter->second, mMainTable, key);
            }
            // Check for Bool
            else if (propIter->second.isBool() )
            {
                addPropertyBool(propIter->second, mMainTable, key);
            }
            // Check for Real
            else if (propIter->second.isReal() )
            {
                addPropertyReal(propIter->second, mMainTable, key);
            }
            // Check for Vector3
            else if (propIter->second.isVector3() )
            {
                addPropertyArray3(propIter->second, mMainTable, key);
                int rowCount = mMainTable->getRowCount();
                mMainTable->addRow(rowCount);
                mMainTable->setItem(new ListboxTextItem(""), 0, rowCount);
            }
            // Check for Quaternion
            else if (propIter->second.isQuaternion() )
            {
                addPropertyQuaternion(propIter->second, mMainTable, key);
                int rowCount = mMainTable->getRowCount();
                mMainTable->addRow(rowCount);
                mMainTable->setItem(new ListboxTextItem(""), 0, rowCount);
            }
            // Check for Array
            else if (propIter->second.isArray() )
            {
                addPropertyArray(propIter->second, key);
            }
        }

        mMainTable->autoSizeColumnHeader(0);
        mMainTable->autoSizeColumnHeader(1);
        mMainTable->autoSizeColumnHeader(2);

	}
Пример #3
0
void readAndSendEventRamdisk(char *headerLinkFilename) {
  static int errorCounter=0;
  AnitaEventHeader_t *theHeader;
  GenericHeader_t *gHdr;
  int retVal;
  char waveFilename[FILENAME_MAX];
  char headerFilename[FILENAME_MAX];
  char currentTouchname[FILENAME_MAX];
  char currentLOSTouchname[FILENAME_MAX];
  char justFile[FILENAME_MAX];
  unsigned int thisEventNumber;
    
  sprintf(justFile,"%s",basename(headerLinkFilename));
  sscanf(justFile,"hd_%u.dat",&thisEventNumber);
  sprintf(headerFilename,"%s/hd_%d.dat",eventTelemDirs[currentPri], 
	  thisEventNumber);
  sprintf(waveFilename,"%s/psev_%d.dat",eventTelemDirs[currentPri], 
	  thisEventNumber);
    
  sprintf(currentTouchname,"%s.sipd",headerFilename);
  sprintf(currentLOSTouchname,"%s.losd",headerFilename);

  if(checkFileExists(currentTouchname)) 
    return;
  touchFile(currentLOSTouchname);
  //Removing headerLinkFilename
  //  fprintf(stderr,"Removing %s\n",headerLinkFilename);
  unlink(headerLinkFilename);



  //First check if there is room for the header
  if((LOS_MAX_BYTES-numBytesInBuffer)<sizeof(AnitaEventHeader_t))
    doWrite();

    
  //     Next load header 
  theHeader=(AnitaEventHeader_t*) &losBuffer[numBytesInBuffer]; 
  retVal=fillHeader(theHeader,headerFilename); 
  theHeader->gHdr.packetNumber=getLosNumber();
  numBytesInBuffer+=sizeof(AnitaEventHeader_t);

    
  if(retVal<0) {
    unlink(headerFilename);
    unlink(waveFilename);
    unlink(currentLOSTouchname);
    //Bollocks
    return;
  }
    
  thisEventNumber=theHeader->eventNumber;
    

  //Now get event file
  sprintf(headerFilename,"%s/hd_%d.dat",eventTelemDirs[currentPri], 
	  thisEventNumber);
  sprintf(waveFilename,"%s/ev_%d.dat",eventTelemDirs[currentPri], 
	  thisEventNumber);


  retVal=genericReadOfFile(eventBuffer,waveFilename,MAX_EVENT_SIZE);
  if(retVal<0) {
    fprintf(stderr,"Problem reading %s\n",waveFilename);
    unlink(headerFilename);
    unlink(waveFilename);
    unlink(currentLOSTouchname);
	
    //Bollocks
    return;
  }


  //Okay so now the buffer either contains EncodedSurfPacketHeader_t or
  // it contains EncodedPedSubbedSurfPacketHeader_t
  gHdr = (GenericHeader_t*) &eventBuffer[0];
  switch(gHdr->code) {
  case PACKET_BD:
    if(sendWavePackets) 
      retVal=sendRawWaveformPackets(retVal);
    else
      retVal=sendRawSurfPackets(retVal);
    break;
  case PACKET_PED_SUBBED_EVENT:
    if(sendWavePackets)
      retVal=sendPedSubbedWaveformPackets(retVal);
    else 
      retVal=sendPedSubbedSurfPackets(retVal);
    break;
  case PACKET_ENC_EVENT_WRAPPER:
    retVal=sendEncodedSurfPackets(retVal);
    break;
  case PACKET_ENC_PEDSUB_EVENT_WRAPPER:
    if(sendWavePackets)
      retVal=sendEncodedPedSubbedWavePackets(retVal);
    else 
      retVal=sendEncodedPedSubbedSurfPackets(retVal);
    break;
  default:
    if(errorCounter<100) {
      syslog(LOG_ERR,"Don't know what to do with packet %d -- %s (Message %d of 100)\n",gHdr->code,packetCodeAsString(gHdr->code),errorCounter);
      errorCounter++;
    }
    fprintf(stderr,"Don't know what to do with packet %d -- %s (file %s, size %d)\n",gHdr->code,packetCodeAsString(gHdr->code),waveFilename,retVal);
  }
	
  if(printToScreen && verbosity>1) 
    printf("Removing files %s\t%s\n",headerFilename,waveFilename);

  if(!checkFileExists(currentTouchname)) {
    unlink(headerFilename);
    unlink(waveFilename);
    unlink(currentLOSTouchname);
  }
  else {
    printf("Not removing %s because checkFileExists == %d\n",
	   headerFilename,checkFileExists(currentTouchname));
  }
    
}
Пример #4
0
int readAndSendEventRamdisk(char *headerLinkFilename) {
    static int errorCounter=0;
    AnitaEventHeader_t *theHeader;
    GenericHeader_t *gHdr;
    int retVal;
    char currentTouchname[FILENAME_MAX];
    char currentLOSTouchname[FILENAME_MAX];
    char waveFilename[FILENAME_MAX];
    char headerFilename[FILENAME_MAX];
//    char crapBuffer[FILENAME_MAX];
    char justFile[FILENAME_MAX];
    unsigned int thisEventNumber;
    

    //First up we test if the link still exists
    if(!checkFileExists(headerLinkFilename))
      return 0;
    
    retVal=snprintf(justFile,sizeof(justFile),"%s",basename(headerLinkFilename));
    if(retVal<0) {
      syslog(LOG_ERR,"Error using snprintf -- %s",strerror(errno));
    }
    retVal=sscanf(justFile,"hd_%u.dat",&thisEventNumber);
    if(retVal<=0) {
      syslog(LOG_ERR,"Error reading eventNumber from %s",justFile);
      thisEventNumber=0;
    }

    if(thisEventNumber==0) {
      printf("Why is this zero -- %s\n",headerLinkFilename);
    }

    retVal=snprintf(headerFilename,sizeof(headerFilename),"%s/hd_%d.dat",eventTelemDirs[currentPri],thisEventNumber);
    if(retVal<0) {
      syslog(LOG_ERR,"Error using snprintf -- %s",strerror(errno));
    }

    retVal=snprintf(waveFilename,sizeof(waveFilename),"%s/hd_%d.dat",eventTelemDirs[currentPri], thisEventNumber);
    if(retVal<0) {
      syslog(LOG_ERR,"Error using snprintf -- %s",strerror(errno));
    }

    retVal=snprintf(currentTouchname,sizeof(currentTouchname),"%s.sipd",headerFilename);
    if(retVal<0) {
      syslog(LOG_ERR,"Error using snprintf -- %s",strerror(errno));
    }

    retVal=snprintf(currentLOSTouchname,sizeof(currentLOSTouchname),"%s.losd",headerFilename);
    if(retVal<0) {
      syslog(LOG_ERR,"Error using snprintf -- %s",strerror(errno));
    }
    
    
    if(checkFileExists(currentLOSTouchname)) 
      return 0;
    touchFile(currentTouchname);
//    printf("%s\n",headerLinkFilename);
    removeFile(headerLinkFilename);

//     Next load header 
    theHeader=(AnitaEventHeader_t*) &theBuffer[0]; 
    retVal=fillHeader(theHeader,headerFilename); 
        
    if(retVal<0) {
//	syslog(LOG_ERR,"Problem with %s",headerFilename);
      retVal=snprintf(headerFilename,sizeof(headerFilename),"%s/hd_%d.dat",eventTelemDirs[currentPri],thisEventNumber);
      if(retVal<0) {
	syslog(LOG_ERR,"Error using snprintf -- %s",strerror(errno));
      }
      
      unlink(currentTouchname);
      unlink(headerFilename);
      unlink(waveFilename);
      
      //Bollocks
      return 0;
    }
    
    
    theHeader->gHdr.packetNumber=getOpenportNumber();
    retVal = openportWrite((unsigned char*)theHeader,sizeof(AnitaEventHeader_t),0);
    if(retVal<0) {
	//Problem sending data
	syslog(LOG_ERR,"Problem sending file %s over Openport\n",headerFilename);
	fprintf(stderr,"Problem sending file %s over Openport\n",headerFilename);	
    }
    eventDataSent+=sizeof(AnitaEventHeader_t);
    
    
    thisEventNumber=theHeader->eventNumber;
    

    //Now get event file
    retVal=snprintf(headerFilename,sizeof(headerFilename),"%s/hd_%d.dat",eventTelemDirs[currentPri], thisEventNumber);
    if(retVal<0) {
      syslog(LOG_ERR,"Error using snprintf -- %s",strerror(errno));
    }
    retVal=snprintf(waveFilename,sizeof(waveFilename),"%s/ev_%d.dat",eventTelemDirs[currentPri], thisEventNumber);
    if(retVal<0) {
      syslog(LOG_ERR,"Error using snprintf -- %s",strerror(errno));
    }


    retVal=genericReadOfFile((unsigned char*)theBuffer,waveFilename,MAX_EVENT_SIZE);
    if(retVal<0) {
	fprintf(stderr,"Problem reading %s\n",waveFilename);
	syslog(LOG_ERR,"Problem reading %s\n",waveFilename);

//	unlink(headerLinkFilename);
	unlink(headerFilename);
	unlink(waveFilename);	
	unlink(currentTouchname);
	//Bollocks
	return 0;
    }


    //Okay so now the buffer either contains EncodedSurfPacketHeader_t or
    // it contains EncodedPedSubbedSurfPacketHeader_t
    gHdr = (GenericHeader_t*) &theBuffer[0];
    switch(gHdr->code) {
	case PACKET_BD:
	    if(sendWavePackets)
		retVal=sendRawWaveformPackets(retVal);
	    else 
		retVal=sendRawSurfPackets(retVal);
	    break;
	case PACKET_PED_SUBBED_EVENT:
	    if(sendWavePackets)
		retVal=sendPedSubbedWaveformPackets(retVal);
	    else
		retVal=sendPedSubbedSurfPackets(retVal);
	    break;
	case PACKET_ENC_EVENT_WRAPPER:
	    retVal=sendEncodedSurfPackets(retVal);
	    break;
	case PACKET_ENC_PEDSUB_EVENT_WRAPPER:
	    if(!sendWavePackets) {
		retVal=sendEncodedPedSubbedSurfPackets(retVal);
	    }
	    else {
		retVal=sendEncodedPedSubbedWavePackets(retVal);
	    }
	    break;
	default:
	    if(errorCounter<100) {
		syslog(LOG_ERR,"Don't know what to do with packet %d -- %s (Message %d of 100)\n",gHdr->code,packetCodeAsString(gHdr->code),errorCounter);
		errorCounter++;
	    }
	    fprintf(stderr,"Don't know what to do with packet %d -- %s\n",gHdr->code,packetCodeAsString(gHdr->code));
    }
    


    
    if(printToScreen && verbosity>1) 
	printf("Removing files %s\t%s\n%s\n",headerFilename,waveFilename,
	       headerLinkFilename);
	        
    if(!checkFileExists(currentLOSTouchname)) {
//	unlink(headerLinkFilename);
	unlink(headerFilename);
	unlink(waveFilename);
	unlink(currentTouchname);
    }
    else {
	sleep(1);
//	unlink(headerLinkFilename);
	unlink(headerFilename);
	unlink(waveFilename);
	unlink(currentTouchname);
	unlink(currentLOSTouchname);
    }

    return 1;

}
Пример #5
0
// Processes response from server
int getHostContent(int sockfd, char *cb, int CBUFLEN){

// Process header
char header[MAXBUF] = { 0 };
fillHeader(header, sockfd);

int respValid;
respValid = checkResponse(header);

int chunkLen = 0;
int chunkedFlag = checkChunked(header);
int contentLength;
if (chunkedFlag == 0){
  contentLength = getConLen(header);
}
else {
  int chunkLen = getChunkLen(sockfd);
}

// Add header to message
char * fullMessage = calloc(1, strlen(header));
strcat(fullMessage, header);

// HANDLE CHUNK DATA
if (chunkedFlag == 1){
  int chunkSize = chunkLen;
  while (chunkSize != 0){
  // realloc handle code adapted from:
  // http://stackoverflow.com/questions/27589846/dynamic-arrays-using-realloc-without-memory-leaks
    void * tmp = (char *) realloc(fullMessage, (strlen(fullMessage)+chunkSize));
    if (NULL == tmp)
    {
      printf("%s\n", "Out of memory.");
    }
    else
    {
      fullMessage = tmp;
    }

    int received = 0;

    while (received < chunkSize-1){

      char tempBuf[chunkSize];
      memset(tempBuf, 0, chunkSize);

      int tmp_rec = 0;
      tmp_rec = recv(sockfd, tempBuf, chunkSize-received, 0);
      received += tmp_rec;
      strcat(fullMessage, tempBuf);
    }
    char nlbuf[2];
    recv(sockfd, nlbuf, 2, 0);
    chunkSize = getChunkLen(sockfd);
  }
}
else {
  // HANDLE NON-CHUNKED DATA
  // realloc handle code adapted from:
  // http://stackoverflow.com/questions/27589846/dynamic-arrays-using-realloc-without-memory-leaks
  void * tmp = (char *) realloc(fullMessage, (strlen(fullMessage)+contentLength));
  if (NULL == tmp)
  {
    printf("%s\n", "Out of memory.");
  }
  else
  {
    fullMessage = tmp;
  }

  int received = 0;
  int n;
  int rec = 0;
  char tempBuf[256];
  memset(tempBuf, 0, 256);

  while ((n = recv(sockfd, tempBuf, 255, 0) > 0) || strlen(fullMessage)-strlen(header) < contentLength){
      strcat(fullMessage, tempBuf);
      rec += n;
      memset(tempBuf, 0, 256);
  }
}

if (strlen(fullMessage) > CBUFLEN){
  cb = (char *) realloc(cb, strlen(fullMessage));
}
  strcpy(cb, fullMessage);
  free(fullMessage);
  close(sockfd);

  return respValid;
}