diff options
author | Andrzej Zaborowski <andrew.zaborowski@intel.com> | 2009-12-17 18:22:05 +0100 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-12-17 21:45:38 -0600 |
commit | a964411180fa9e0a7a219f830fa2f2ff3ef52ea3 (patch) | |
tree | ffed65bdf03a6f8ac099be02e5919739ddfb8fdb | |
parent | 9c688fff68db3faea93f2da2fb6751cb509ee364 (diff) | |
download | ofono-a964411180fa9e0a7a219f830fa2f2ff3ef52ea3.tar.bz2 |
Add utility for checking if CBS topic is in range
-rw-r--r-- | src/smsutil.c | 22 | ||||
-rw-r--r-- | src/smsutil.h | 2 |
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); |