bool HlaFedAmb::ReadDataIxnParameters( const RTI::ParameterHandleValuePairSet& theParameters, HlaDataIxnInfo& dataIxnInfo) { HlaVariableDatumSetInfo& vdsInfo = dataIxnInfo.variableDatumSetInfo; unsigned i; for (i = 0; i < theParameters.size(); i++) { RTI::ParameterHandle ph = theParameters.getHandle(i); RTI::ULong size = theParameters.getValueLength(i); if (ph == m_dataOriginatingEntityHandle) { // Not used. } else if (ph == m_dataReceivingEntityHandle) { // Not used. } else if (ph == m_dataRequestIdentifierHandle) { // Not used. } else if (ph == m_dataFixedDatumsHandle) { // Not used. } else if (ph == m_dataVariableDatumSetHandle) { if (size > g_hlaVariableDatumSetBufSize) { if (m_debug) { cout << "FED: Ignoring Data interaction containing" " large VariableDatumSet parameter" << endl; } return false; } char variableDatumSet[g_hlaVariableDatumSetBufSize]; theParameters.getValue(i, variableDatumSet, size); // NumberOfVariableDatums, DatumID, DatumLength. // Converted to host-byte-order. unsigned vdsOffset = 0; HlaCopyFromOffsetAndNtoh( &vdsInfo.numberOfVariableDatums, variableDatumSet, vdsOffset, sizeof(vdsInfo.numberOfVariableDatums)); if (vdsInfo.numberOfVariableDatums != 1) { if (m_debug) { cout << "FED: Ignoring Data interaction where" " NumberOfVariableDatums != 1" << endl; } return false; } HlaVariableDatumInfo& vdInfo = vdsInfo.variableDatumsInfo[0]; HlaCopyFromOffsetAndNtoh( &vdInfo.datumId, variableDatumSet, vdsOffset, sizeof(vdInfo.datumId)); HlaCopyFromOffsetAndNtoh( &vdInfo.datumLength, variableDatumSet, vdsOffset, sizeof(vdInfo.datumLength)); if (vdInfo.datumLength % 8 != 0) { if (m_debug) { cout << "FED: Ignoring Data interaction where" " DatumLength is not a multiple of 8" << endl; } return false; } unsigned datumLengthInBytes = vdInfo.datumLength / 8; if (datumLengthInBytes > g_hlaDatumValueBufSize) { if (m_debug) { cout << "FED: Ignoring Data interaction containing" " large DatumValue field" << endl; } return false; } // DatumValue. // Left in network-byte-order. HlaCopyFromOffset( vdInfo.datumValue, variableDatumSet, vdsOffset, datumLengthInBytes); } else { HlaReportError("Unknown parameter handle", __FILE__, __LINE__); } }//for// return true; }