From 6dcf1f3fbab782804339db5a3fe8cd0c88c07795 Mon Sep 17 00:00:00 2001
From: lucaderi <deri@ntop.org>
Date: Thu, 4 Oct 2018 21:36:46 +0200
Subject: [PATCH 6/9] Backported ndpi_protocol2id

---
 src/include/ndpi_api.h | 17 +++++++++++++++--
 src/lib/ndpi_main.c    | 17 +++++++++++++++++
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h
index 56c5436..ccbad73 100644
--- a/src/include/ndpi_api.h
+++ b/src/include/ndpi_api.h
@@ -274,7 +274,7 @@ extern "C" {
    */
   u_int16_t ndpi_get_flow_masterprotocol(struct ndpi_detection_module_struct *ndpi_struct,
 					 struct ndpi_flow_struct *flow);
-  
+
   /**
    * API call that is called internally by ndpi_detection_process_packet or by apps
    * that want to avoid calling ndpi_detection_process_packet as they have already
@@ -432,6 +432,19 @@ extern "C" {
   char* ndpi_protocol2name(struct ndpi_detection_module_struct *ndpi_mod,
 			   ndpi_protocol proto, char *buf, u_int buf_len);
 
+  /**
+   * Same as ndpi_protocol2name() with the difference that the numeric protocol
+   * name is returned
+   *
+   * @par     ndpi_mod      = the detection module
+   * @par     proto         = the struct ndpi_protocol contain the protocols name
+   * @par     buf           = the buffer to write the name of the protocols
+   * @par     buf_len       = the length of the buffer
+   * @return  the buffer contains the master_protocol and protocol name
+   *
+   */
+  char* ndpi_protocol2id(struct ndpi_detection_module_struct *ndpi_mod,
+                         ndpi_protocol proto, char *buf, u_int buf_len);
   /**
    * Write the protocol name in the buffer -buf- as master_protocol.protocol (number)
    *
@@ -746,7 +759,7 @@ extern "C" {
   u_int ndpi_get_ndpi_num_custom_protocols(struct ndpi_detection_module_struct *ndpi_mod);
   u_int ndpi_get_ndpi_detection_module_size();
   void ndpi_set_log_level(struct ndpi_detection_module_struct *ndpi_mod, u_int l);
-  
+
   /**
    * Add a string to match to an automata
    *
diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c
index 33ccbb1..e1cf577 100644
--- a/src/lib/ndpi_main.c
+++ b/src/lib/ndpi_main.c
@@ -5319,6 +5319,23 @@ ndpi_protocol ndpi_guess_undetected_protocol(struct ndpi_detection_module_struct
 
 /* ****************************************************** */
 
+char* ndpi_protocol2id(struct ndpi_detection_module_struct *ndpi_mod,
+		       ndpi_protocol proto, char *buf, u_int buf_len) {
+  if((proto.master_protocol != NDPI_PROTOCOL_UNKNOWN)
+     && (proto.master_protocol != proto.app_protocol)) {
+    if(proto.app_protocol != NDPI_PROTOCOL_UNKNOWN)
+      snprintf(buf, buf_len, "%u.%u",
+               proto.master_protocol, proto.app_protocol);
+    else
+      snprintf(buf, buf_len, "%u", proto.master_protocol);
+  } else
+    snprintf(buf, buf_len, "%u", proto.app_protocol);
+
+  return(buf);
+}
+
+/* ****************************************************** */
+
 char* ndpi_protocol2name(struct ndpi_detection_module_struct *ndpi_mod,
 			 ndpi_protocol proto, char *buf, u_int buf_len) {
   if((proto.master_protocol != NDPI_PROTOCOL_UNKNOWN)
-- 
2.19.1

