/**
 * 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);
}
Пример #2
0
/**
 * 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);
}