From: Holger Hans Peter Freyther <[email protected]>

In the upcoming authentication improvements it is nice to
separate the finding of the config from the post-allow
handling of it.
---
 openbsc/include/openbsc/bsc_nat.h        |  1 +
 openbsc/src/osmo-bsc_nat/bsc_nat.c       | 32 +++++++++++++-------------------
 openbsc/src/osmo-bsc_nat/bsc_nat_utils.c | 18 ++++++++++++++++++
 3 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/openbsc/include/openbsc/bsc_nat.h 
b/openbsc/include/openbsc/bsc_nat.h
index ae940b3..6921441 100644
--- a/openbsc/include/openbsc/bsc_nat.h
+++ b/openbsc/include/openbsc/bsc_nat.h
@@ -319,6 +319,7 @@ struct bsc_nat_ussd_con {
 /* create and init the structures */
 struct bsc_config *bsc_config_alloc(struct bsc_nat *nat, const char *token);
 struct bsc_config *bsc_config_num(struct bsc_nat *nat, int num);
+struct bsc_config *bsc_config_by_token(struct bsc_nat *nat, const char *token, 
int len);
 void bsc_config_free(struct bsc_config *);
 void bsc_config_add_lac(struct bsc_config *cfg, int lac);
 void bsc_config_del_lac(struct bsc_config *cfg, int lac);
diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat.c 
b/openbsc/src/osmo-bsc_nat/bsc_nat.c
index 537001e..2f186b2 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_nat.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_nat.c
@@ -980,27 +980,21 @@ static void ipaccess_auth_bsc(struct tlv_parsed *tvp, 
struct bsc_connection *bsc
                return;
        }

-       llist_for_each_entry(conf, &bsc->nat->bsc_configs, entry) {
-               /*
-                * Add the '\0' of the token for the memcmp, the IPA messages
-                * for some reason added null termination.
-                */
-               const int token_len = strlen(conf->token) + 1;
-
-               if (token_len == len && memcmp(conf->token, token, token_len) 
== 0) {
-                       
rate_ctr_inc(&conf->stats.ctrg->ctr[BCFG_CTR_NET_RECONN]);
-                       bsc->authenticated = 1;
-                       bsc->cfg = conf;
-                       osmo_timer_del(&bsc->id_timeout);
-                       LOGP(DNAT, LOGL_NOTICE, "Authenticated bsc nr: %d on fd 
%d\n",
-                            conf->nr, bsc->write_queue.bfd.fd);
-                       start_ping_pong(bsc);
-                       return;
-               }
+       conf = bsc_config_by_token(bsc->nat, token, len);
+       if (!conf) {
+               LOGP(DNAT, LOGL_ERROR,
+                       "No bsc found for token '%s' on fd: %d.\n", token,
+                       bsc->write_queue.bfd.fd);
+               return;
        }

-       LOGP(DNAT, LOGL_ERROR, "No bsc found for token '%s' on fd: %d.\n", 
token,
-            bsc->write_queue.bfd.fd);
+       rate_ctr_inc(&conf->stats.ctrg->ctr[BCFG_CTR_NET_RECONN]);
+       bsc->authenticated = 1;
+       bsc->cfg = conf;
+       osmo_timer_del(&bsc->id_timeout);
+       LOGP(DNAT, LOGL_NOTICE, "Authenticated bsc nr: %d on fd %d\n",
+               conf->nr, bsc->write_queue.bfd.fd);
+       start_ping_pong(bsc);
 }

 static void handle_con_stats(struct nat_sccp_connection *con)
diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_utils.c 
b/openbsc/src/osmo-bsc_nat/bsc_nat_utils.c
index d95227d..d7ec545 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_nat_utils.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_nat_utils.c
@@ -180,6 +180,24 @@ struct bsc_config *bsc_config_alloc(struct bsc_nat *nat, 
const char *token)
        return conf;
 }

+struct bsc_config *bsc_config_by_token(struct bsc_nat *nat, const char *token, 
int len)
+{
+       struct bsc_config *conf;
+
+       llist_for_each_entry(conf, &nat->bsc_configs, entry) {
+               /*
+                * Add the '\0' of the token for the memcmp, the IPA messages
+                * for some reason added null termination.
+                */
+               const int token_len = strlen(conf->token) + 1;
+
+               if (token_len == len && memcmp(conf->token, token, token_len) 
== 0)
+                       return conf;
+       }
+
+       return NULL;
+}
+
 void bsc_config_free(struct bsc_config *cfg)
 {
        llist_del(&cfg->entry);
-- 
2.3.5

Reply via email to