Refactor EONS to have lac / non-lac versions
authorDenis Kenzior <denkenz@gmail.com>
Tue, 14 Jul 2009 18:47:22 +0000 (13:47 -0500)
committerDenis Kenzior <denkenz@gmail.com>
Tue, 14 Jul 2009 20:45:06 +0000 (15:45 -0500)
PNN/OPL database has fields which provide global operator naming,
or specific to a cell range.  The cell range can only be obtained
if the operator is the current one.

src/simutil.c
src/simutil.h

index 2b22c32..3f00b1b 100644 (file)
@@ -328,9 +328,10 @@ static gint opl_operator_compare(gconstpointer a, gconstpointer b)
 {
 }
 
-struct sim_eons_operator_info *sim_eons_lookup(struct sim_eons *eons,
-                                               const char *mcc,
-                                               const char *mnc, guint16 lac)
+static struct sim_eons_operator_info *
+       sim_eons_lookup_common(struct sim_eons *eons,
+                               const char *mcc, const char *mnc,
+                               gboolean have_lac, guint16 lac)
 {
        GSList *l;
        const struct opl_operator *opl;
@@ -352,6 +353,9 @@ struct sim_eons_operator_info *sim_eons_lookup(struct sim_eons *eons,
                if (opl->lac_tac_low == 0 && opl->lac_tac_high == 0xfffe)
                        break;
 
+               if (have_lac == FALSE)
+                       continue;
+
                if ((lac >= opl->lac_tac_low) && (lac <= opl->lac_tac_high))
                        break;
        }
@@ -367,3 +371,18 @@ struct sim_eons_operator_info *sim_eons_lookup(struct sim_eons *eons,
 
        return &eons->pnn_list[opl->id - 1];
 }
+
+struct sim_eons_operator_info *sim_eons_lookup(struct sim_eons *eons,
+                                               const char *mcc,
+                                               const char *mnc)
+{
+       return sim_eons_lookup_common(eons, mcc, mnc, FALSE, 0);
+}
+
+struct sim_eons_operator_info *sim_eons_lookup_with_lac(struct sim_eons *eons,
+                                                       const char *mcc,
+                                                       const char *mnc,
+                                                       guint16 lac)
+{
+       return sim_eons_lookup_common(eons, mcc, mnc, TRUE, lac);
+}
index dcabc37..fb0a1b8 100644 (file)
@@ -56,9 +56,13 @@ gboolean sim_eons_pnn_is_empty(struct sim_eons *eons);
 void sim_eons_add_opl_record(struct sim_eons *eons,
                                const guint8 *tlv, int length);
 void sim_eons_optimize(struct sim_eons *eons);
+struct sim_eons_operator_info *sim_eons_lookup_with_lac(struct sim_eons *eons,
+                                                       const char *mcc,
+                                                       const char *mnc,
+                                                       guint16 lac);
 struct sim_eons_operator_info *sim_eons_lookup(struct sim_eons *eons,
                                                const char *mcc,
-                                               const char *mnc, guint16 lac);
+                                               const char *mnc);
 void sim_eons_free(struct sim_eons *eons);
 
 struct sim_spdi *sim_spdi_new(const guint8 *tlv, int length);