X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodest-presets.c;h=f0bc264dcebb113307cc1737ece7e0b55ec6dd20;hb=b423ecffd69d4977323e97d0e7959dc31979a017;hp=86492087009a29002d7a063d139916d2d92a289a;hpb=6c19d78bf76e50b7cafcca340104313a5879da5f;p=modest diff --git a/src/modest-presets.c b/src/modest-presets.c index 8649208..f0bc264 100644 --- a/src/modest-presets.c +++ b/src/modest-presets.c @@ -79,6 +79,37 @@ modest_presets_new (const gchar *presetfile) return presets; } +/* cluster mcc's, based on the list + * http://en.wikipedia.org/wiki/Mobile_country_code + * + * This function will return the "effective mcc", which is the + * normalized mcc for a country - ie. even if the there are multiple + * entries for the United States with various mcc's, this function will + * always return 310, even if the real mcc parsed would be 314. + */ +static int +effective_mcc (gint mcc) +{ + switch (mcc) { + case 405: return 404; /* india */ + case 441: return 440; /* japan */ + case 348: /* NOTE: see below */ + case 235: return 234; /* united kingdom */ + case 289: return 282; /* georgia */ + case 549: /* NOTE: see below */ + case 311: + case 312: + case 313: + case 314: + case 315: + case 316: return 310; /* united states */ + default: return mcc; + } + /* NOTE: 348 for UK and 549 for US are not correct, but we do + a workaround here as changing operator-wizard package is + more difficult */ +} + gchar** modest_presets_get_providers (ModestPresets *self, guint mcc, gboolean include_globals, gchar ***provider_ids) @@ -89,7 +120,7 @@ modest_presets_get_providers (ModestPresets *self, guint mcc, gchar **filtered_ids = NULL; GError *err = NULL; guint i, j, len; - + g_return_val_if_fail (self && self->keyfile, NULL); /* Get all the provider IDs: */ @@ -103,19 +134,19 @@ modest_presets_get_providers (ModestPresets *self, guint mcc, if(provider_id) { gchar* name = g_key_file_get_string(self->keyfile, provider_id, MODEST_PRESETS_KEY_NAME, NULL); - + /* Be forgiving of missing names. * If we use NULL then we will null-terminate the array. */ if(!name) name = g_strdup(""); - - all_providers[i] = name; + + all_providers[i] = name; } else all_providers[i] = NULL; }; - + /* return *all* providers? */ /* if (mcc == 0 && include_globals) { @@ -123,7 +154,7 @@ modest_presets_get_providers (ModestPresets *self, guint mcc, return all_providers; } */ - + /* nope: filter them */ filtered = g_new0(gchar*, len + 1); /* Provider names. */ @@ -139,25 +170,26 @@ modest_presets_get_providers (ModestPresets *self, guint mcc, g_strfreev (all_provider_ids); g_strfreev (filtered); g_strfreev (filtered_ids); - + g_printerr ("modest: error parsing keyfile: %s\n", err->message); g_error_free (err); - + return NULL; } - - if (this_mcc == mcc || (this_mcc == 0 && include_globals)) { + + if (this_mcc == mcc || + effective_mcc (this_mcc) == effective_mcc (mcc) || + (this_mcc == 0 && include_globals)) { filtered[j] = all_providers[i]; filtered_ids[j] = all_provider_ids[i]; ++j; filtered[j] = NULL; /* the array must be NULL-terminated */ filtered_ids[j] = NULL; /* the array must be NULL-terminated */ - + all_providers[i] = NULL; /* g_strfreev: leave it alone */ all_provider_ids[i] = NULL; /* g_strfreev: leave it alone */ } } - g_strfreev (all_providers); g_strfreev (all_provider_ids); @@ -233,7 +265,7 @@ modest_presets_get_info_server_type (ModestPresets *self, g_free (val); /* debug: */ -/* g_message ("provider id: %s, server type: %d", provider_id, info); */ +/* g_debug ("provider id: %s, server type: %d", provider_id, info); */ return protocol_type; } @@ -252,11 +284,13 @@ modest_presets_get_info_server_security (ModestPresets *self, const gchar *provi val = g_key_file_get_string (self->keyfile, provider_id, MODEST_PRESETS_KEY_INCOMING, NULL); if (val) { - g_free (val); + g_free (val); val = g_key_file_get_string (self->keyfile, provider_id, MODEST_PRESETS_KEY_INCOMING_SECURITY, NULL); - if (val && ((strcmp (val, "1") == 0) || (strcmp (val, "2") == 0))) { + if (val && strcmp (val, "1") == 0) { + protocol_type = MODEST_PROTOCOLS_CONNECTION_TLS; + } else if (val && strcmp (val, "2") == 0) { protocol_type = MODEST_PROTOCOLS_CONNECTION_SSL; } else if (val && (strcmp (val, "tls") == 0)) { protocol_type = MODEST_PROTOCOLS_CONNECTION_TLS; @@ -270,10 +304,9 @@ modest_presets_get_info_server_security (ModestPresets *self, const gchar *provi MODEST_PRESETS_KEY_OUTGOING, NULL); if (val) { g_free (val); - + val = g_key_file_get_string (self->keyfile, provider_id, MODEST_PRESETS_KEY_SECURE_SMTP, NULL); - /* printf("debug: %s: provider_id=%s, secure-smtp val=%s\n", __FUNCTION__, provider_id, val); */ if (val && strcmp(val,"true") == 0) protocol_type = MODEST_PROTOCOLS_CONNECTION_SSL; else if (val && strcmp (val, "ssl") == 0)