📄 ospstatistics.c
字号:
*ospvElem = OSPPXMLElemNew(OSPPMsgGetElemName(ospeElemTNOneWayDelay), ""); if(*ospvElem == OSPC_OSNULL) { errorcode = OSPC_ERR_XML_NO_ELEMENT; } if(errorcode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew( (const unsigned char *)OSPPMsgGetAttrName(ospeAttrCritical), (const unsigned char *)"False"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(*ospvElem, attr); attr = OSPC_OSNULL; } else { errorcode = OSPC_ERR_XML_NO_ATTR; } } } /* Minimum */ if(errorcode== OSPC_ERR_NO_ERROR) { errorcode = OSPPMsgNumToElement(OSPPStatisticsGetOneWayMinimum(ospvStatistics), (const unsigned char *)OSPPMsgGetElemName(ospeElemTNMinimum), &elem); if(errorcode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew( (const unsigned char *)OSPPMsgGetAttrName(ospeAttrCritical), (const unsigned char *)"False"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(elem, attr); attr = OSPC_OSNULL; } else { errorcode = OSPC_ERR_XML_NO_ATTR; } if (errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } /* Mean */ if(errorcode== OSPC_ERR_NO_ERROR) { errorcode = OSPPMsgNumToElement(OSPPStatisticsGetOneWayMean(ospvStatistics), (const unsigned char *)OSPPMsgGetElemName(ospeElemTNMean), &elem); if(errorcode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew( (const unsigned char *)OSPPMsgGetAttrName(ospeAttrCritical), (const unsigned char *)"False"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(elem, attr); attr = OSPC_OSNULL; } else { errorcode = OSPC_ERR_XML_NO_ATTR; } if (errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } /* Variance */ if(errorcode== OSPC_ERR_NO_ERROR) { errorcode = OSPPMsgFloatToElement(OSPPStatisticsGetOneWayVariance(ospvStatistics), (const unsigned char *)OSPPMsgGetElemName(ospeElemTNVariance), &elem); if(errorcode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew( (const unsigned char *)OSPPMsgGetAttrName(ospeAttrCritical), (const unsigned char *)"False"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(elem, attr); attr = OSPC_OSNULL; } else { errorcode = OSPC_ERR_XML_NO_ATTR; } if (errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } /* Samples */ if(errorcode== OSPC_ERR_NO_ERROR) { errorcode = OSPPMsgNumToElement(OSPPStatisticsGetOneWaySamples(ospvStatistics), (const unsigned char *)OSPPMsgGetElemName(ospeElemTNSamples), &elem); if(errorcode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew( (const unsigned char *)OSPPMsgGetAttrName(ospeAttrCritical), (const unsigned char *)"False"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(elem, attr); attr = OSPC_OSNULL; } else { errorcode = OSPC_ERR_XML_NO_ATTR; } if (errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } /* clean up */ if(attr != OSPC_OSNULL) { OSPM_FREE(attr); attr = OSPC_OSNULL; } if(elem != OSPC_OSNULL) { OSPM_FREE(elem); elem = OSPC_OSNULL; } return errorcode;}/* RoundTrip to Element */intOSPPStatisticsRoundTripToElement( OSPTSTATISTICS *ospvStatistics, OSPTXMLELEM **ospvElem){ int errorcode = OSPC_ERR_NO_ERROR; OSPTXMLELEM *elem = OSPC_OSNULL; OSPTXMLATTR *attr = OSPC_OSNULL; if(ospvElem == OSPC_OSNULL) { errorcode = OSPC_ERR_XML_NO_ELEMENT; } if(ospvStatistics == OSPC_OSNULL) { errorcode = OSPC_ERR_DATA_NO_STATS; } if(errorcode == OSPC_ERR_NO_ERROR) { *ospvElem = OSPPXMLElemNew(OSPPMsgGetElemName(ospeElemTNRoundTripDelay), ""); if(*ospvElem == OSPC_OSNULL) { errorcode = OSPC_ERR_XML_NO_ELEMENT; } if(errorcode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew( (const unsigned char *)OSPPMsgGetAttrName(ospeAttrCritical), (const unsigned char *)"False"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(*ospvElem, attr); attr = OSPC_OSNULL; } else { errorcode = OSPC_ERR_XML_NO_ATTR; } } } /* Minimum */ if(errorcode== OSPC_ERR_NO_ERROR) { errorcode = OSPPMsgNumToElement(OSPPStatisticsGetRoundTripMinimum(ospvStatistics), (const unsigned char *)OSPPMsgGetElemName(ospeElemTNMinimum), &elem); if(errorcode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew( (const unsigned char *)OSPPMsgGetAttrName(ospeAttrCritical), (const unsigned char *)"False"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(elem, attr); attr = OSPC_OSNULL; } else { errorcode = OSPC_ERR_XML_NO_ATTR; } if (errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } /* Mean */ if(errorcode== OSPC_ERR_NO_ERROR) { errorcode = OSPPMsgNumToElement(OSPPStatisticsGetRoundTripMean(ospvStatistics), (const unsigned char *)OSPPMsgGetElemName(ospeElemTNMean), &elem); if(errorcode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew( (const unsigned char *)OSPPMsgGetAttrName(ospeAttrCritical), (const unsigned char *)"False"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(elem, attr); attr = OSPC_OSNULL; } else { errorcode = OSPC_ERR_XML_NO_ATTR; } if (errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } /* Variance */ if(errorcode== OSPC_ERR_NO_ERROR) { errorcode = OSPPMsgFloatToElement(OSPPStatisticsGetRoundTripVariance(ospvStatistics), (const unsigned char *)OSPPMsgGetElemName(ospeElemTNVariance), &elem); if(errorcode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew( (const unsigned char *)OSPPMsgGetAttrName(ospeAttrCritical), (const unsigned char *)"False"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(elem, attr); attr = OSPC_OSNULL; } else { errorcode = OSPC_ERR_XML_NO_ATTR; } if (errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } /* Samples */ if(errorcode== OSPC_ERR_NO_ERROR) { errorcode = OSPPMsgNumToElement(OSPPStatisticsGetRoundTripSamples(ospvStatistics), (const unsigned char *)OSPPMsgGetElemName(ospeElemTNSamples), &elem); if(errorcode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew( (const unsigned char *)OSPPMsgGetAttrName(ospeAttrCritical), (const unsigned char *)"False"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(elem, attr); attr = OSPC_OSNULL; } else { errorcode = OSPC_ERR_XML_NO_ATTR; } if (errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } /* clean up */ if(attr != OSPC_OSNULL) { OSPM_FREE(attr); attr = OSPC_OSNULL; } if(elem != OSPC_OSNULL) { OSPM_FREE(elem); elem = OSPC_OSNULL; } return errorcode;}/* Report statistics for this transaction. */intOSPPStatisticsReportUsage( OSPTSTATISTICS **ospvStatistics, /* In - pter to place for stats struct */ unsigned ospvLossPacketsSent, /* In */ signed ospvLossFractionSent, /* In */ unsigned ospvLossPacketsReceived, /* In */ signed ospvLossFractionReceived /* In */){ int errorcode = OSPC_ERR_NO_ERROR; /* if LossFractionSent and received vars are negative, no statistics are * reported. * Just return with no error */ if(ospvLossFractionSent >= 0) { if(*ospvStatistics == OSPC_OSNULL) { *ospvStatistics = OSPPStatisticsNew(); if(*ospvStatistics == OSPC_OSNULL) { errorcode = OSPC_ERR_TRAN_STATS_NEW_FAIL; } } if(errorcode == OSPC_ERR_NO_ERROR) { OSPPStatisticsSetSentStatistics(*ospvStatistics, ospvLossPacketsSent, ospvLossFractionSent); } } if(errorcode == OSPC_ERR_NO_ERROR) { if(ospvLossFractionReceived >= 0) { if(*ospvStatistics == OSPC_OSNULL) { *ospvStatistics = OSPPStatisticsNew(); if(*ospvStatistics == OSPC_OSNULL) { errorcode = OSPC_ERR_TRAN_STATS_NEW_FAIL; } } if(errorcode == OSPC_ERR_NO_ERROR) { OSPPStatisticsSetReceivedStatistics(*ospvStatistics, ospvLossPacketsReceived, ospvLossFractionReceived); } } } if((errorcode != OSPC_ERR_NO_ERROR) && (*ospvStatistics != OSPC_OSNULL)) { OSPPStatisticsDelete(ospvStatistics); } return errorcode;}/* Set Received statistics */voidOSPPStatisticsSetReceivedStatistics( OSPTSTATISTICS *ospvStatistics, unsigned ospvLossPacketsReceived, signed ospvLossFractionReceived){ if(ospvStatistics != OSPC_OSNULL) { ospvStatistics->ospmHasReceivedStats = OSPC_TRUE; ospvStatistics->ospmLossPacketsReceived = ospvLossPacketsReceived; ospvStatistics->ospmLossFractionReceived = ospvLossFractionReceived; } return;}/* Set Sent statistics */voidOSPPStatisticsSetSentStatistics( OSPTSTATISTICS *ospvStatistics, unsigned ospvLossPacketsSent, signed ospvLossFractionSent){ if(ospvStatistics != OSPC_OSNULL) { ospvStatistics->ospmHasSentStats = OSPC_TRUE; ospvStatistics->ospmLossPacketsSent = ospvLossPacketsSent; ospvStatistics->ospmLossFractionSent = ospvLossFractionSent; } return;}/* Create xml element from statistics structure */intOSPPStatisticsToElement( OSPTSTATISTICS *ospvStatistics, OSPTXMLELEM **ospvElem){ int errorcode = OSPC_ERR_NO_ERROR; OSPTXMLELEM *elem = OSPC_OSNULL; OSPTXMLATTR *attr = OSPC_OSNULL; if(ospvStatistics == OSPC_OSNULL) { errorcode = OSPC_ERR_DATA_NO_STATS; } if(ospvElem == OSPC_OSNULL) { errorcode = OSPC_ERR_XML_NO_ELEMENT; } if(errorcode == OSPC_ERR_NO_ERROR) { /* create the Statistics element as the parent */ *ospvElem = OSPPXMLElemNew(OSPPMsgGetElemName(ospeElemTNStatistics), ""); if(*ospvElem == OSPC_OSNULL) { errorcode = OSPC_ERR_XML_NO_ELEMENT; } else { attr = OSPPXMLAttrNew( (const unsigned char *)OSPPMsgGetAttrName(ospeAttrCritical), (const unsigned char *)"False"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(*ospvElem, attr); attr = OSPC_OSNULL; } else { errorcode = OSPC_ERR_XML_NO_ATTR; } } } /* Now add the children */ /* First LossSent */ if(errorcode == OSPC_ERR_NO_ERROR) { if(OSPPStatisticsHasLossSent(ospvStatistics)) { errorcode = OSPPStatisticsLossSentToElement(ospvStatistics, &elem); if(errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } /* LossReceived */ if(errorcode == OSPC_ERR_NO_ERROR) { if(OSPPStatisticsHasLossReceived(ospvStatistics)) { errorcode = OSPPStatisticsLossReceivedToElement(ospvStatistics, &elem); if(errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } /* OneWay */ if(errorcode == OSPC_ERR_NO_ERROR) { if(OSPPStatisticsHasOneWay(ospvStatistics)) { errorcode = OSPPStatisticsOneWayToElement(ospvStatistics, &elem); if(errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } /* RoundTrip */ if(errorcode == OSPC_ERR_NO_ERROR) { if(OSPPStatisticsHasRoundTrip(ospvStatistics)) { errorcode = OSPPStatisticsRoundTripToElement(ospvStatistics, &elem); if(errorcode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); elem = OSPC_OSNULL; } } } if(errorcode != OSPC_ERR_NO_ERROR) { if(*ospvElem!= OSPC_OSNULL) { OSPPXMLElemDelete(ospvElem); } } if(elem != OSPC_OSNULL) { OSPPXMLElemDelete(&elem); } if(attr != OSPC_OSNULL) { OSPPXMLAttrDelete(&attr); } return errorcode;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -