From fcb857e50830a0860655a2f86807e2b8dc2b2bd9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Leroy?= <frederic.leroy@b-com.com>
Date: Tue, 23 Aug 2016 11:58:29 +0200
Subject: [PATCH] refactor(conf2uedata): add parse_Xplmn() to read *plmns

---
 openair3/NAS/TOOLS/conf2uedata.c | 172 ++++++-------------------------
 openair3/NAS/TOOLS/conf2uedata.h |   8 +-
 2 files changed, 37 insertions(+), 143 deletions(-)

diff --git a/openair3/NAS/TOOLS/conf2uedata.c b/openair3/NAS/TOOLS/conf2uedata.c
index 804c8aecdba..a9eb8ef797e 100644
--- a/openair3/NAS/TOOLS/conf2uedata.c
+++ b/openair3/NAS/TOOLS/conf2uedata.c
@@ -227,11 +227,10 @@ int parse_plmns(config_setting_t *all_plmn_setting) {
 }
 
 int parse_ue_plmn_param(config_setting_t *ue_setting, int user_id, const char **h) {
-	int rc = EXIT_SUCCESS;
+	int nb_errors = 0;
 	const char *hplmn;
-	config_setting_t *setting = NULL;
-	rc = config_setting_lookup_string(ue_setting, HPLMN, h);
-	if (rc != 1) {
+
+	if ( config_setting_lookup_string(ue_setting, HPLMN, h) != 1 ) {
 		printf("Check HPLMN section for UE%d. Exiting\n", user_id);
 		return EXIT_FAILURE;
 	}
@@ -241,147 +240,41 @@ int parse_ue_plmn_param(config_setting_t *ue_setting, int user_id, const char **
 				user_id);
 		return EXIT_FAILURE;
 	}
-	setting = config_setting_get_member(ue_setting, UCPLMN);
-	if (setting == NULL) {
-		printf("Check UCPLMN section for UE%d. Exiting\n", user_id);
-		return EXIT_FAILURE;
-	}
-	rc = fill_ucplmn(setting, user_id);
-	if (rc != EXIT_SUCCESS) {
-		printf("Check UCPLMN section for UE%d. Exiting\n", user_id);
-		return EXIT_FAILURE;
-	}
-	setting = config_setting_get_member(ue_setting, OPLMN);
-	if (setting == NULL) {
-		printf("Check OPLMN section for UE%d. Exiting\n", user_id);
-		return EXIT_FAILURE;
-	}
-	rc = fill_oplmn(setting, user_id);
-	if (rc != EXIT_SUCCESS) {
-		printf("Check OPLMN section for UE%d. Exiting\n", user_id);
-		return EXIT_FAILURE;
-	}
-	setting = config_setting_get_member(ue_setting, OCPLMN);
-	if (setting == NULL) {
-		printf("Check OCPLMN section for UE%d. Exiting\n", user_id);
-		return EXIT_FAILURE;
-	}
-	rc = fill_ocplmn(setting, user_id);
-	if (rc != EXIT_SUCCESS) {
-		printf("Check OCPLMN section for UE%d. Exiting\n", user_id);
-		return EXIT_FAILURE;
-	}
-	setting = config_setting_get_member(ue_setting, FPLMN);
-	if (setting == NULL) {
-		printf("Check FPLMN section for UE%d. Exiting\n", user_id);
-		return EXIT_FAILURE;
-	}
-	rc = fill_fplmn(setting, user_id);
-	if (rc != EXIT_SUCCESS) {
-		printf("Check FPLMN section for UE%d. Exiting\n", user_id);
-		return EXIT_FAILURE;
-	}
-	setting = config_setting_get_member(ue_setting, EHPLMN);
-	if (setting == NULL) {
-		printf("Check EHPLMN section for UE%d. Exiting\n", user_id);
-		return EXIT_FAILURE;
-	}
-	rc = fill_ehplmn(setting, user_id);
-	if (rc != EXIT_SUCCESS) {
-		printf("Check EHPLMN section for UE%d. Exiting\n", user_id);
+
+	if ( parse_Xplmn(ue_setting, UCPLMN, user_id, &ucplmn_nb, &ucplmn) == EXIT_FAILURE )
+		nb_errors++;
+	if ( parse_Xplmn(ue_setting, OPLMN, user_id, &oplmn_nb, &oplmn) == EXIT_FAILURE )
+		nb_errors++;
+	if ( parse_Xplmn(ue_setting, OCPLMN, user_id, &ocplmn_nb, &ocplmn) == EXIT_FAILURE )
+		nb_errors++;
+	if ( parse_Xplmn(ue_setting, FPLMN, user_id, &fplmn_nb, &fplmn) == EXIT_FAILURE )
+		nb_errors++;
+	if ( parse_Xplmn(ue_setting, EHPLMN, user_id, &ehplmn_nb, &ehplmn) == EXIT_FAILURE )
+		nb_errors++;
+
+	if ( nb_errors > 0 )
 		return EXIT_FAILURE;
-	}
 	return EXIT_SUCCESS;
 }
 
-int fill_ucplmn(config_setting_t* setting, int user_id) {
-	int rc;
-	ucplmn_nb = config_setting_length(setting);
-	ucplmn = malloc(ucplmn_nb * sizeof(int));
-	for (int i = 0; i < ucplmn_nb; i++) {
-		const char *mccmnc = config_setting_get_string_elem(setting, i);
-		if (mccmnc == NULL) {
-			printf("Check UCPLMN section for UE%d. Exiting\n", user_id);
-			return EXIT_FAILURE;
-		}
-		rc = get_plmn_index(mccmnc);
-		if (rc == -1) {
-			printf("The PLMN %s is not defined in PLMN section. Exiting...\n",
-					mccmnc);
-			return EXIT_FAILURE;
-		}
-		ucplmn[i] = rc;
-	}
-	return EXIT_SUCCESS;
-}
-int fill_oplmn(config_setting_t* setting, int user_id) {
-	int rc;
-	oplmn_nb = config_setting_length(setting);
-	oplmn = malloc(oplmn_nb * sizeof(int));
-	for (int i = 0; i < oplmn_nb; i++) {
-		const char *mccmnc = config_setting_get_string_elem(setting, i);
-		if (mccmnc == NULL) {
-			printf("Check OPLMN section for UE%d. Exiting\n", user_id);
-			return EXIT_FAILURE;
-		}
-		rc = get_plmn_index(mccmnc);
-		if (rc == -1) {
-			printf("The PLMN %s is not defined in PLMN section. Exiting...\n",
-					mccmnc);
-			return EXIT_FAILURE;
-		}
-		oplmn[i] = rc;
-	}
-	return EXIT_SUCCESS;
-}
-int fill_ocplmn(config_setting_t* setting, int user_id) {
-	int rc;
-	ocplmn_nb = config_setting_length(setting);
-	ocplmn = malloc(ocplmn_nb * sizeof(int));
-	for (int i = 0; i < ocplmn_nb; i++) {
-		const char *mccmnc = config_setting_get_string_elem(setting, i);
-		if (mccmnc == NULL) {
-			printf("Check OCPLMN section for UE%d. Exiting\n", user_id);
-			return EXIT_FAILURE;
-		}
-		rc = get_plmn_index(mccmnc);
-		if (rc == -1) {
-			printf("The PLMN %s is not defined in PLMN section. Exiting...\n",
-					mccmnc);
-			return EXIT_FAILURE;
-		}
-		ocplmn[i] = rc;
-	}
-	return EXIT_SUCCESS;
-}
-int fill_fplmn(config_setting_t* setting, int user_id) {
+int parse_Xplmn(config_setting_t *ue_setting, const char *section,
+               int user_id, int *plmns_count, int **plmns ) {
 	int rc;
-	fplmn_nb = config_setting_length(setting);
-	fplmn = malloc(fplmn_nb * sizeof(int));
-	for (int i = 0; i < fplmn_nb; i++) {
-		const char *mccmnc = config_setting_get_string_elem(setting, i);
-		if (mccmnc == NULL) {
-			printf("Check FPLMN section for UE%d. Exiting\n", user_id);
-			return EXIT_FAILURE;
-		}
-		rc = get_plmn_index(mccmnc);
-		if (rc == -1) {
-			printf("The PLMN %s is not defined in PLMN section. Exiting...\n",
-					mccmnc);
-			return EXIT_FAILURE;
-		}
-		fplmn[i] = rc;
+	int item_count;
+	config_setting_t *setting;
+
+	setting = config_setting_get_member(ue_setting, section);
+	if (setting == NULL) {
+		printf("Check %s section for UE%d. Exiting\n", section, user_id);
+		return EXIT_FAILURE;
 	}
-	return EXIT_SUCCESS;
-}
-int fill_ehplmn(config_setting_t* setting, int user_id) {
-	int rc;
-	ehplmn_nb = config_setting_length(setting);
-	ehplmn = malloc(ehplmn_nb * sizeof(int));
-	for (int i = 0; i < ehplmn_nb; i++) {
+
+	item_count = config_setting_length(setting);
+	int *datas = malloc(item_count * sizeof(int));
+	for (int i = 0; i < item_count; i++) {
 		const char *mccmnc = config_setting_get_string_elem(setting, i);
 		if (mccmnc == NULL) {
-			printf("Check EHPLMN section for UE%d. Exiting\n", user_id);
+			printf("Check %s section for UE%d. Exiting\n", section, user_id);
 			return EXIT_FAILURE;
 		}
 		rc = get_plmn_index(mccmnc);
@@ -390,8 +283,11 @@ int fill_ehplmn(config_setting_t* setting, int user_id) {
 					mccmnc);
 			return EXIT_FAILURE;
 		}
-		ehplmn[i] = rc;
+		datas[i] = rc;
 	}
+
+	*plmns_count = item_count;
+	*plmns = datas;
 	return EXIT_SUCCESS;
 }
 
diff --git a/openair3/NAS/TOOLS/conf2uedata.h b/openair3/NAS/TOOLS/conf2uedata.h
index ed74ccf288b..9fd1cb53a93 100644
--- a/openair3/NAS/TOOLS/conf2uedata.h
+++ b/openair3/NAS/TOOLS/conf2uedata.h
@@ -69,10 +69,8 @@ int parse_plmn_param(config_setting_t *plmn_setting, int index);
 int parse_plmns(config_setting_t *all_plmn_setting);
 int get_plmn_index(const char * mccmnc);
 int parse_ue_plmn_param(config_setting_t *ue_setting, int user_id, const char **hplmn);
-int fill_ucplmn(config_setting_t* setting, int use_id);
-int fill_oplmn(config_setting_t* setting, int use_id);
-int fill_ocplmn(config_setting_t* setting, int use_id);
-int fill_fplmn(config_setting_t* setting, int use_id);
-int fill_ehplmn(config_setting_t* setting, int use_id);
+int parse_Xplmn(config_setting_t *ue_setting, const char *section,
+               int user_id, int *plmns_count, int **plmns );
+
 
 #endif // _CONF2UEDATA_H
-- 
GitLab