nat: Start inspecting every message coming from the BSC for the IMSI

Return early in case the IMSI was already checked, if not we need
to look at the connection and check if the message could contain a
imsi we want/need to filter.
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h
index 0c9af91..6b2a099 100644
--- a/openbsc/include/openbsc/bsc_nat.h
+++ b/openbsc/include/openbsc/bsc_nat.h
@@ -243,6 +243,8 @@
  */
 int bsc_nat_filter_sccp_cr(struct bsc_connection *bsc, struct msgb *msg,
 			   struct bsc_nat_parsed *, int *con_type);
+int bsc_nat_filter_dt(struct bsc_connection *bsc, struct msgb *msg,
+		      struct sccp_connections *con, struct bsc_nat_parsed *parsed);
 
 /**
  * SCCP patching and handling
diff --git a/openbsc/src/nat/bsc_nat.c b/openbsc/src/nat/bsc_nat.c
index 31009bb..c7d97aa 100644
--- a/openbsc/src/nat/bsc_nat.c
+++ b/openbsc/src/nat/bsc_nat.c
@@ -731,9 +731,17 @@
 		case SCCP_MSG_TYPE_IT:
 			con = patch_sccp_src_ref_to_msc(msg, parsed, bsc);
 			if (con) {
-				con_bsc = con->bsc;
-				con_msc = con->msc_con;
-				con_filter = con->con_local;
+				filter = bsc_nat_filter_dt(bsc, msg, con, parsed);
+				if (filter == 0) {
+					con_bsc = con->bsc;
+					con_msc = con->msc_con;
+					con_filter = con->con_local;
+				} else {
+					LOGP(DNAT, LOGL_ERROR, "Should drop the connection.\n");
+					con_bsc = con->bsc;
+					con_msc = con->msc_con;
+					con_filter = con->con_local;
+				}
 			}
 			break;
 		case SCCP_MSG_TYPE_RLC:
diff --git a/openbsc/src/nat/bsc_nat_utils.c b/openbsc/src/nat/bsc_nat_utils.c
index e81a1e8..7387b51 100644
--- a/openbsc/src/nat/bsc_nat_utils.c
+++ b/openbsc/src/nat/bsc_nat_utils.c
@@ -431,6 +431,15 @@
 	}
 }
 
+int bsc_nat_filter_dt(struct bsc_connection *bsc, struct msgb *msg,
+		      struct sccp_connections *con, struct bsc_nat_parsed *parsed)
+{
+	if (con->imsi_checked)
+		return 0;
+
+	return 0;
+}
+
 void bsc_parse_reg(void *ctx, regex_t *reg, char **imsi, int argc, const char **argv)
 {
 	if (*imsi) {