From 98400f65e29778cdf1cc602133917e284a500bf3 Mon Sep 17 00:00:00 2001 From: Pedro Alvarez Date: Mon, 24 Feb 2020 18:55:25 +0000 Subject: [PATCH] Changed hss ue_ctx map to use unique pointers. --- srsepc/hdr/hss/hss.h | 2 +- srsepc/src/hss/hss.cc | 50 +++++++++++++++++++------------------------ 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/srsepc/hdr/hss/hss.h b/srsepc/hdr/hss/hss.h index 6b05a4ecf..5543da699 100644 --- a/srsepc/hdr/hss/hss.h +++ b/srsepc/hdr/hss/hss.h @@ -112,7 +112,7 @@ private: bool set_auth_algo(std::string auth_algo); bool read_db_file(std::string db_file); bool write_db_file(std::string db_file); - const std::unique_ptr& get_ue_ctx(uint64_t imsi); + hss_ue_ctx_t* get_ue_ctx(uint64_t imsi); std::string hex_string(uint8_t* hex, int size); diff --git a/srsepc/src/hss/hss.cc b/srsepc/src/hss/hss.cc index 2630c553d..9d2fbd3f2 100644 --- a/srsepc/src/hss/hss.cc +++ b/srsepc/src/hss/hss.cc @@ -114,8 +114,8 @@ bool hss::read_db_file(std::string db_filename) m_hss_log->console("See 'srsepc/user_db.csv.example' for an example.\n\n"); return false; } - hss_ue_ctx_t* ue_ctx = new hss_ue_ctx_t; - ue_ctx->name = split[0]; + std::unique_ptr ue_ctx = std::unique_ptr(new hss_ue_ctx_t); + ue_ctx->name = split[0]; if (split[1] == std::string("xor")) { ue_ctx->algo = HSS_ALGO_XOR; } else if (split[1] == std::string("mil")) { @@ -168,7 +168,7 @@ bool hss::read_db_file(std::string db_filename) return false; } } - m_imsi_to_ue_ctx.insert(std::pair(ue_ctx->imsi, ue_ctx)); + m_imsi_to_ue_ctx.insert(std::pair >(ue_ctx->imsi, std::move(ue_ctx))); } } @@ -256,15 +256,15 @@ bool hss::write_db_file(std::string db_filename) bool hss::gen_auth_info_answer(uint64_t imsi, uint8_t* k_asme, uint8_t* autn, uint8_t* rand, uint8_t* xres) { - hss_ue_ctx_t* ue_ctx = NULL; - bool ret = get_ue_ctx(imsi, &ue_ctx); - if (ret == false) { + hss_ue_ctx_t* ue_ctx = get_ue_ctx(imsi); + if (ue_ctx == nullptr) { m_hss_log->console("User not found at HSS. IMSI: %015" PRIu64 "\n", imsi); m_hss_log->error("User not found at HSS. IMSI: %015" PRIu64 "\n", imsi); return false; } + bool ret = false; // FIXME switch (ue_ctx->algo) { case HSS_ALGO_XOR: ret = gen_auth_info_answer_xor(imsi, k_asme, autn, rand, xres); @@ -459,15 +459,15 @@ bool hss::get_k_amf_opc_sqn(uint64_t imsi, uint8_t* k, uint8_t* amf, uint8_t* op bool hss::resync_sqn(uint64_t imsi, uint8_t* auts) { - hss_ue_ctx_t* ue_ctx = NULL; - bool ret = get_ue_ctx(imsi, &ue_ctx); - if (ret == false) { + hss_ue_ctx_t* ue_ctx = get_ue_ctx(imsi); + if (ue_ctx == nullptr) { m_hss_log->console("User not found at HSS. IMSI: %015" PRIu64 "\n", imsi); m_hss_log->error("User not found at HSS. IMSI: %015" PRIu64 "\n", imsi); return false; } + bool ret = false; //FIXME switch (ue_ctx->algo) { case HSS_ALGO_XOR: ret = resync_sqn_xor(imsi, auts); @@ -548,9 +548,8 @@ bool hss::resync_sqn_milenage(uint64_t imsi, uint8_t* auts) void hss::increment_ue_sqn(uint64_t imsi) { - hss_ue_ctx_t* ue_ctx = NULL; - bool ret = get_ue_ctx(imsi, &ue_ctx); - if (ret == false) { + hss_ue_ctx_t* ue_ctx = get_ue_ctx(imsi); + if (ue_ctx == nullptr) { return; } @@ -592,9 +591,8 @@ void hss::increment_sqn(uint8_t* sqn, uint8_t* next_sqn) void hss::increment_seq_after_resync(uint64_t imsi) { // This function only increment the SEQ part of the SQN for resynchronization purpose - hss_ue_ctx_t* ue_ctx = NULL; - bool ret = get_ue_ctx(imsi, &ue_ctx); - if (ret == false) { + hss_ue_ctx_t* ue_ctx = get_ue_ctx(imsi); + if (ue_ctx == nullptr) { return; } @@ -627,9 +625,8 @@ void hss::increment_seq_after_resync(uint64_t imsi) void hss::set_sqn(uint64_t imsi, uint8_t* sqn) { - hss_ue_ctx_t* ue_ctx = NULL; - bool ret = get_ue_ctx(imsi, &ue_ctx); - if (ret == false) { + hss_ue_ctx_t* ue_ctx = get_ue_ctx(imsi); + if (ue_ctx == nullptr) { return; } memcpy(ue_ctx->sqn, sqn, 6); @@ -637,9 +634,8 @@ void hss::set_sqn(uint64_t imsi, uint8_t* sqn) void hss::set_last_rand(uint64_t imsi, uint8_t* rand) { - hss_ue_ctx_t* ue_ctx = NULL; - bool ret = get_ue_ctx(imsi, &ue_ctx); - if (ret == false) { + hss_ue_ctx_t* ue_ctx = get_ue_ctx(imsi); + if (ue_ctx == nullptr) { return; } memcpy(ue_ctx->last_rand, rand, 16); @@ -647,9 +643,8 @@ void hss::set_last_rand(uint64_t imsi, uint8_t* rand) void hss::get_last_rand(uint64_t imsi, uint8_t* rand) { - hss_ue_ctx_t* ue_ctx = NULL; - bool ret = get_ue_ctx(imsi, &ue_ctx); - if (ret == false) { + hss_ue_ctx_t* ue_ctx = get_ue_ctx(imsi); + if (ue_ctx == nullptr) { return; } memcpy(rand, ue_ctx->last_rand, 16); @@ -663,16 +658,15 @@ void hss::gen_rand(uint8_t rand_[16]) return; } -const std::unique_ptr& hss::get_ue_ctx(uint64_t imsi) +hss_ue_ctx_t* hss::get_ue_ctx(uint64_t imsi) { std::map >::iterator ue_ctx_it = m_imsi_to_ue_ctx.find(imsi); if (ue_ctx_it == m_imsi_to_ue_ctx.end()) { m_hss_log->info("User not found. IMSI: %015" PRIu64 "\n", imsi); - return false; + return nullptr; } - *ue_ctx = ue_ctx_it->second; - return true; + return ue_ctx_it->second.get(); } /* Helper functions*/