[network-manager-applet/aleksander/mobile-providers: 7/19] libnm-gtk: new 'nma_mobile_providers_find_for_sid()' method
- From: Aleksander Morgado <aleksm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [network-manager-applet/aleksander/mobile-providers: 7/19] libnm-gtk: new 'nma_mobile_providers_find_for_sid()' method
- Date: Wed, 28 Nov 2012 14:25:10 +0000 (UTC)
commit 39815c0c2d782d42b1c64988bcff89a4009e1e43
Author: Aleksander Morgado <aleksander lanedo com>
Date: Fri Nov 23 13:38:27 2012 +0100
libnm-gtk: new 'nma_mobile_providers_find_for_sid()' method
This new method of the API takes care of looking for a specific
'NMAMobileProvider' given a SID integer.
Originally developed as 'find_provider_for_sid()' in
'src/applet-device-cdma.c'.
src/applet-device-cdma.c | 46 +++++-----------------------------
src/libnm-gtk/nm-mobile-providers.c | 42 +++++++++++++++++++++++++++++++
src/libnm-gtk/nm-mobile-providers.h | 2 +
3 files changed, 51 insertions(+), 39 deletions(-)
---
diff --git a/src/applet-device-cdma.c b/src/applet-device-cdma.c
index f081256..cfec847 100644
--- a/src/applet-device-cdma.c
+++ b/src/applet-device-cdma.c
@@ -707,43 +707,6 @@ signal_reply (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
#define SERVING_SYSTEM_TYPE (dbus_g_type_get_struct ("GValueArray", G_TYPE_UINT, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INVALID))
-static char *
-find_provider_for_sid (GHashTable *table, guint32 sid)
-{
- GHashTableIter iter;
- gpointer value;
- GSList *piter, *siter;
- char *name = NULL;
-
- if (sid == 0)
- return NULL;
-
- g_hash_table_iter_init (&iter, table);
- /* Search through each country */
- while (g_hash_table_iter_next (&iter, NULL, &value) && !name) {
- NMACountryInfo *country_info = value;
-
- /* Search through each country's providers */
- for (piter = nma_country_info_get_providers (country_info);
- piter && !name;
- piter = g_slist_next (piter)) {
- NMAMobileProvider *provider = piter->data;
-
- /* Search through CDMA SID list */
- for (siter = nma_mobile_provider_get_cdma_sid (provider);
- siter;
- siter = g_slist_next (siter)) {
- if (GPOINTER_TO_UINT (siter->data) == sid) {
- name = g_strdup (nma_mobile_provider_get_name (provider));
- break;
- }
- }
- }
- }
-
- return name;
-}
-
static void
serving_system_reply (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
{
@@ -768,9 +731,14 @@ serving_system_reply (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_dat
if (new_sid && (new_sid != info->sid)) {
info->sid = new_sid;
if (info->country_infos) {
+ NMAMobileProvider *provider;
+
g_free (info->provider_name);
- info->provider_name = NULL;
- info->provider_name = find_provider_for_sid (info->country_infos, new_sid);
+
+ provider = nma_mobile_providers_find_for_sid (info->country_infos, new_sid);
+ info->provider_name = (provider ?
+ g_strdup (nma_mobile_provider_get_name (provider)) :
+ NULL);
}
} else if (!new_sid) {
info->sid = 0;
diff --git a/src/libnm-gtk/nm-mobile-providers.c b/src/libnm-gtk/nm-mobile-providers.c
index aeadb2d..c4b25b8 100644
--- a/src/libnm-gtk/nm-mobile-providers.c
+++ b/src/libnm-gtk/nm-mobile-providers.c
@@ -1156,3 +1156,45 @@ nma_mobile_providers_find_for_mcc_mnc (GHashTable *country_infos,
return provider_match_2mnc;
}
+
+/**
+ * nma_mobile_providers_find_for_sid:
+ * @country_infos: (element-type utf8 NMGtk.CountryInfo) (transfer none): the table of country infos.
+ * @sid: the SID to look for.
+ *
+ * Returns: (transfer none): a #NMAMobileProvider.
+ */
+NMAMobileProvider *
+nma_mobile_providers_find_for_sid (GHashTable *country_infos,
+ guint32 sid)
+{
+ GHashTableIter iter;
+ gpointer value;
+ GSList *piter, *siter;
+
+ if (sid == 0)
+ return NULL;
+
+ g_hash_table_iter_init (&iter, country_infos);
+ /* Search through each country */
+ while (g_hash_table_iter_next (&iter, NULL, &value)) {
+ NMACountryInfo *country_info = value;
+
+ /* Search through each country's providers */
+ for (piter = nma_country_info_get_providers (country_info);
+ piter;
+ piter = g_slist_next (piter)) {
+ NMAMobileProvider *provider = piter->data;
+
+ /* Search through CDMA SID list */
+ for (siter = nma_mobile_provider_get_cdma_sid (provider);
+ siter;
+ siter = g_slist_next (siter)) {
+ if (GPOINTER_TO_UINT (siter->data) == sid)
+ return provider;
+ }
+ }
+ }
+
+ return NULL;
+}
diff --git a/src/libnm-gtk/nm-mobile-providers.h b/src/libnm-gtk/nm-mobile-providers.h
index 50a8cf3..98febc2 100644
--- a/src/libnm-gtk/nm-mobile-providers.h
+++ b/src/libnm-gtk/nm-mobile-providers.h
@@ -107,5 +107,7 @@ GHashTable *nma_mobile_providers_parse (const gchar *country_c
void nma_mobile_providers_dump (GHashTable *country_infos);
NMAMobileProvider *nma_mobile_providers_find_for_mcc_mnc (GHashTable *country_infos,
const gchar *mccmnc);
+NMAMobileProvider *nma_mobile_providers_find_for_sid (GHashTable *country_infos,
+ guint32 sid);
#endif /* NM_MOBILE_PROVIDERS_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]