summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrzej Zaborowski <andrew.zaborowski@intel.com>2009-12-17 18:22:05 +0100
committerDenis Kenzior <denkenz@gmail.com>2009-12-17 21:45:38 -0600
commita964411180fa9e0a7a219f830fa2f2ff3ef52ea3 (patch)
treeffed65bdf03a6f8ac099be02e5919739ddfb8fdb
parent9c688fff68db3faea93f2da2fb6751cb509ee364 (diff)
downloadofono-a964411180fa9e0a7a219f830fa2f2ff3ef52ea3.tar.bz2
Add utility for checking if CBS topic is in range
-rw-r--r--src/smsutil.c22
-rw-r--r--src/smsutil.h2
2 files changed, 23 insertions, 1 deletions
diff --git a/src/smsutil.c b/src/smsutil.c
index c27e9377..0323484d 100644
--- a/src/smsutil.c
+++ b/src/smsutil.c
@@ -3509,7 +3509,7 @@ out:
return TRUE;
}
-static GSList *cbs_optimize_ranges(GSList *ranges)
+GSList *cbs_optimize_ranges(GSList *ranges)
{
struct cbs_topic_range *range;
unsigned char bitmap[125];
@@ -3666,3 +3666,23 @@ char *cbs_topic_ranges_to_string(GSList *ranges)
return ret;
}
+
+static gint cbs_topic_compare(gconstpointer a, gconstpointer b)
+{
+ const struct cbs_topic_range *range = a;
+ unsigned short topic = GPOINTER_TO_UINT(b);
+
+ if (topic >= range->min && topic <= range->max)
+ return 0;
+
+ return 1;
+}
+
+gboolean cbs_topic_in_range(unsigned int topic, GSList *ranges)
+{
+ if (!ranges)
+ return FALSE;
+
+ return g_slist_find_custom(ranges, GUINT_TO_POINTER(topic),
+ cbs_topic_compare) != NULL;
+}
diff --git a/src/smsutil.h b/src/smsutil.h
index 858fc84c..10774dca 100644
--- a/src/smsutil.h
+++ b/src/smsutil.h
@@ -494,3 +494,5 @@ void cbs_assembly_location_changed(struct cbs_assembly *assembly, gboolean plmn,
char *cbs_topic_ranges_to_string(GSList *ranges);
GSList *cbs_extract_topic_ranges(const char *ranges);
+GSList *cbs_optimize_ranges(GSList *ranges);
+gboolean cbs_topic_in_range(unsigned int topic, GSList *ranges);