diff options
Diffstat (limited to 'src/lib/ndpi_main.c')
-rw-r--r-- | src/lib/ndpi_main.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 53242d988..7b582b347 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -10580,16 +10580,38 @@ ndpi_risk_info* ndpi_risk2severity(ndpi_risk_enum risk) { /* ******************************************************************** */ char *ndpi_hostname_sni_set(struct ndpi_flow_struct *flow, - const u_int8_t *value, size_t value_len) { + const u_int8_t *value, size_t value_len, + int normalize) { char *dst; size_t len, i; len = ndpi_min(value_len, sizeof(flow->host_server_name) - 1); dst = flow->host_server_name; - for(i = 0; i < len; i++) - dst[i] = tolower(value[value_len - len + i]); - dst[i] = '\0'; + if(!normalize) { + memcpy(dst,&value[value_len - len],len); + dst[len] = '\0'; + } else { + for(i = 0; i < len; i++) { + char c = value[value_len - len + i]; + if(!c) break; + if(normalize & NDPI_HOSTNAME_NORM_LC) c = tolower(c); + if(normalize & NDPI_HOSTNAME_NORM_REPLACE_IC) { + if (c == '\t') c = ' '; + if (ndpi_isprint(c) == 0) + c = '?'; + } + dst[i] = c; + } + + dst[i] = '\0'; + if(normalize & NDPI_HOSTNAME_NORM_STRIP_EOLSP) { + /* Removing spaces at the end of a line */ + while(i > 0 && dst[i-1] == ' ') + dst[--i] = '\0'; + } + } + return dst; } |