v0.0.4
This commit is contained in:
21
src/osfp.c
21
src/osfp.c
@@ -6,11 +6,13 @@
|
||||
#include "osfp_log.h"
|
||||
|
||||
#define OSFP_DEFAULT_RESULT_BUFLEN_MAX 512
|
||||
#define OSFP_LOWEST_SCORE_LIMIT 20
|
||||
|
||||
static struct osfp_result *osfp_result_build(struct osfp_os_class_score *os_class_score)
|
||||
{
|
||||
int i;
|
||||
unsigned int tmp_score;
|
||||
unsigned int sum_score;
|
||||
unsigned int likely_score;
|
||||
enum osfp_os_class_id likely_os_class;
|
||||
struct osfp_result *result;
|
||||
@@ -22,6 +24,7 @@ static struct osfp_result *osfp_result_build(struct osfp_os_class_score *os_clas
|
||||
|
||||
likely_score = 0;
|
||||
likely_os_class = OSFP_OS_CLASS_OTHERS;
|
||||
sum_score = 0;
|
||||
|
||||
for (i = 0; i < OSFP_OS_CLASS_MAX; i++) {
|
||||
tmp_score = os_class_score->scores[i];
|
||||
@@ -31,27 +34,37 @@ static struct osfp_result *osfp_result_build(struct osfp_os_class_score *os_clas
|
||||
likely_os_class = i;
|
||||
}
|
||||
result->detail.scores[i] = tmp_score;
|
||||
sum_score += tmp_score;
|
||||
}
|
||||
|
||||
if (sum_score) {
|
||||
for (i = 0; i < OSFP_OS_CLASS_MAX; i++) {
|
||||
result->detail.possibility[i] = OSFP_PERCENTILE * result->detail.scores[i] / sum_score;
|
||||
}
|
||||
}
|
||||
|
||||
result->likely_score = likely_score;
|
||||
result->likely_os_class = likely_os_class;
|
||||
result->likely_possibility = result->detail.possibility[likely_os_class];
|
||||
|
||||
if (likely_score < 10) {
|
||||
if (likely_score < OSFP_LOWEST_SCORE_LIMIT) {
|
||||
result->likely_os_class = OSFP_OS_CLASS_OTHERS;
|
||||
result->likely_score = 0;
|
||||
result->likely_possibility = 0;
|
||||
} else {
|
||||
for (i = 0; i < OSFP_OS_CLASS_MAX; i++) {
|
||||
if (likely_os_class == i) {
|
||||
continue;
|
||||
}
|
||||
if (likely_score == os_class_score->scores[i]) {
|
||||
if (likely_os_class == OSFP_OS_CLASS_LINUX && os_class_score->scores[i] == OSFP_OS_CLASS_ANDROID) {
|
||||
if (likely_os_class == OSFP_OS_CLASS_LINUX && i == OSFP_OS_CLASS_ANDROID) {
|
||||
continue;
|
||||
} else if (likely_os_class == OSFP_OS_CLASS_MAC_OS && os_class_score->scores[i] == OSFP_OS_CLASS_IOS) {
|
||||
} else if (likely_os_class == OSFP_OS_CLASS_MAC_OS && i == OSFP_OS_CLASS_IOS) {
|
||||
continue;
|
||||
} else {
|
||||
result->likely_os_class = OSFP_OS_CLASS_UNKNOWN;
|
||||
result->likely_score = 0;
|
||||
result->likely_possibility = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -103,6 +116,7 @@ char *osfp_result_score_detail_export(struct osfp_result *result)
|
||||
if (os_score) {
|
||||
cJSON_AddStringToObject(os_score, "name", osfp_os_class_id_to_name(result->likely_os_class));
|
||||
cJSON_AddNumberToObject(os_score, "score", result->likely_score);
|
||||
//cJSON_AddNumberToObject(os_score, "possibility", result->likely_possibility);
|
||||
}
|
||||
|
||||
array = cJSON_AddArrayToObject(root, "detail");
|
||||
@@ -112,6 +126,7 @@ char *osfp_result_score_detail_export(struct osfp_result *result)
|
||||
if (os_score) {
|
||||
cJSON_AddStringToObject(os_score, "name", osfp_os_class_id_to_name(i));
|
||||
cJSON_AddNumberToObject(os_score, "score", result->detail.scores[i]);
|
||||
//cJSON_AddNumberToObject(os_score, "possibility", result->detail.possibility[i]);
|
||||
cJSON_AddItemToArray(array, os_score);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user