/**
 * called on Data Record arrival
 */
void IpfixDbWriter::onDataRecord(IpfixDataRecord* record)
{
	// only treat non-Options Data Records (although we cannot be sure that there is a Flow inside)
	if((record->templateInfo->setId != TemplateInfo::NetflowTemplate) 
		&& (record->templateInfo->setId != TemplateInfo::IpfixTemplate) 
		&& (record->templateInfo->setId != TemplateInfo::IpfixDataTemplate)) {
		record->removeReference();
		return;
	}
	
	processDataDataRecord(*record->sourceID.get(), *record->templateInfo.get(), 
			record->dataLength, record->data);

	record->removeReference();
}
/**
 * called on Data Record arrival
 */
void IpfixDbWriterMongo::onDataRecord(IpfixDataRecord* record)
{
	// only treat non-Options Data Records (although we cannot be sure that there is a Flow inside)
	if((record->templateInfo->setId != TemplateInfo::NetflowTemplate)
		&& (record->templateInfo->setId != TemplateInfo::IpfixTemplate)
		&& (record->templateInfo->setId != TemplateInfo::IpfixDataTemplate)) {
		record->removeReference();
		return;
	}

	msg(MSG_DEBUG, "IpfixDbWriterMongo: Data record received will be passed for processing");
	processDataDataRecord(*record->sourceID.get(), *record->templateInfo.get(),
			record->dataLength, record->data);

	record->removeReference();
}
/**
 *	function receive the  when callback is started
 */
void IpfixDbWriter::onDataRecord(IpfixDataRecord* record)
{
    // convert templateInfo to dataTemplateInfo
    IpfixRecord::DataTemplateInfo dataTemplateInfo;
    dataTemplateInfo.templateId = 0;
    dataTemplateInfo.preceding = 0;
    dataTemplateInfo.freePointers = false; // don't free the given pointers, as they are taken from a different structure
    dataTemplateInfo.fieldCount = record->templateInfo->fieldCount; /**< number of regular fields */
    dataTemplateInfo.fieldInfo = record->templateInfo->fieldInfo; /**< array of FieldInfos describing each of these fields */
    dataTemplateInfo.dataCount = 0; /**< number of fixed-value fields */
    dataTemplateInfo.dataInfo = NULL; /**< array of FieldInfos describing each of these fields */
    dataTemplateInfo.data = NULL; /**< data start pointer for fixed-value fields */
    dataTemplateInfo.userData = record->templateInfo->userData; /**< pointer to a field that can be used by higher-level modules */

    DPRINTF("receiveRec calls receiveDataRec");

    processDataDataRecord(record->sourceID.get(), &dataTemplateInfo, record->dataLength, record->data);
}
/**
 *	function receive the DataRecord or DataDataRecord when callback is started
 */
void IpfixDbWriter::onDataDataRecord(IpfixDataDataRecord* record)
{
    processDataDataRecord(record->sourceID.get(), record->dataTemplateInfo.get(),
                          record->dataLength, record->data);
}