/** * Internal function that goes through every property specified in the PHP.ini * file and for each of the properties checks that such property exists in the * data set properties array. If a property exists, then a corresponding value * is added to the array that will be returned to PHP. If a property does not * exist, then a "Switch Data Set" message is returned as the property value * @param returnArray a pointer to the Zend array to store results in. */ void buildArray(zval *returnArray) { char* propertyName; char *valueString; char* methodString; int propertyIndex; int valueCount; int valueIndex; int32_t sigRank; for(propertyIndex = 0; propertyIndex < FIFTYONE_G(ws)->dataSet->requiredPropertyCount; propertyIndex++) { propertyName = (char*)fiftyoneDegreesGetPropertyName( FIFTYONE_G(ws)->dataSet, *(FIFTYONE_G(ws)->dataSet->requiredProperties + propertyIndex)); valueCount = fiftyoneDegreesSetValues(FIFTYONE_G(ws), propertyIndex); if (valueCount == 1) { valueString = (char*)fiftyoneDegreesGetValueName( FIFTYONE_G(ws)->dataSet, *FIFTYONE_G(ws)->values); add_assoc_string(returnArray, propertyName, valueString, 1); } else if (valueCount > 1) { zval* valueArray; ALLOC_INIT_ZVAL(valueArray); array_init(valueArray); add_assoc_zval(returnArray, propertyName, valueArray); for(valueIndex = 0; valueIndex < valueCount; valueIndex++) { valueString = (char*)fiftyoneDegreesGetValueName( FIFTYONE_G(ws)->dataSet, *(FIFTYONE_G(ws)->values + valueIndex)); add_next_index_string(valueArray, valueString, 1); } } } // Add signature rank information. sigRank = fiftyoneDegreesGetSignatureRank(FIFTYONE_G(ws)); // SignatureRank is obsolete and will be removed in future versions. // Use Rank instead. add_assoc_long(returnArray, "SignatureRank", sigRank); add_assoc_long(returnArray, "Rank", sigRank); add_assoc_long(returnArray, "Difference", FIFTYONE_G(ws)->difference); // Add method that was used for detection to the results array. switch(FIFTYONE_G(ws)->method){ case NONE: methodString = "None"; break; case EXACT: methodString = "Exact"; break; case NUMERIC: methodString = "Numeric"; break; case NEAREST: methodString = "Nearest"; break; case CLOSEST: methodString = "Closest"; break; default: methodString = "Unknown"; break; } add_assoc_string(returnArray, "Method", methodString, 1); addDeviceIdToArray(returnArray); }
/** * Returns the Rank of the signature found. * See * <a href="https://51degrees.com/support/documentation/pattern" * target="_parent">https://51degrees.com/support/documentation/pattern</a> * for more details. * @returns the Rank of the signature found as a string */ int Match::getRank() { return fiftyoneDegreesGetSignatureRank(ws); }