/** * 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); }
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)); } }
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; }
// 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; }