X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-protocol-info.c;h=18a2b3a5d6b932bb5c32734784e43f5530c47ceb;hp=89baa117d6f140284170eac751a0389b6b87fef7;hb=a3966167004d901791014719da71326403dbdf3e;hpb=4cb4c045267ce527e256baedd0f4c304f54cbdda diff --git a/src/modest-protocol-info.c b/src/modest-protocol-info.c index 89baa11..18a2b3a 100644 --- a/src/modest-protocol-info.c +++ b/src/modest-protocol-info.c @@ -31,10 +31,11 @@ #include /* strcmp */ #include #include - +#include +#include typedef struct { - ModestProtocol proto; + gint proto; const gchar* name; const gchar* display_name; } ProtocolInfo; @@ -56,50 +57,22 @@ static const ProtocolInfo ConnectionProtocolMap[] = { { MODEST_PROTOCOL_CONNECTION_TLS_OP, "tls-op", N_("TLS when possible") } /* op stands for optional */ }; -static const ProtocolInfo AuthProtocolMap[] = { - { MODEST_PROTOCOL_AUTH_NONE, "none", N_("None") }, - { MODEST_PROTOCOL_AUTH_PASSWORD, "password", N_("Password") }, - { MODEST_PROTOCOL_AUTH_CRAMMD5, "cram-md5", N_("Cram MD5") } -}; +/* FIXME: these names must match those of tny_camel_account_get_supported_secure_auth */ +static const ProtocolInfo AuthProtocolMap[] = { + { MODEST_PROTOCOL_AUTH_NONE, MODEST_ACCOUNT_AUTH_MECH_VALUE_NONE, N_("None") }, + { MODEST_PROTOCOL_AUTH_PASSWORD, MODEST_ACCOUNT_AUTH_MECH_VALUE_PASSWORD, N_("Password") }, + { MODEST_PROTOCOL_AUTH_CRAMMD5, MODEST_ACCOUNT_AUTH_MECH_VALUE_CRAMMD5, N_("Cram MD5") } +}; -static const ProtocolInfo* -get_map (ModestProtocolType proto_type, guint *size) +static ModestPairList* +get_protocol_pair_list (const ProtocolInfo* map, guint size) { - const ProtocolInfo *map = NULL; - - switch (proto_type) { - case MODEST_TRANSPORT_STORE_PROTOCOL: - map = TransportStoreProtocolMap; - *size = G_N_ELEMENTS(TransportStoreProtocolMap); - break; - case MODEST_CONNECTION_PROTOCOL: - map = ConnectionProtocolMap; - *size = G_N_ELEMENTS(ConnectionProtocolMap); - break; - case MODEST_AUTH_PROTOCOL: - map = AuthProtocolMap; - *size = G_N_ELEMENTS(AuthProtocolMap); - break; - default: - g_printerr ("modest: invalide protocol type %d", proto_type); - } - return map; -} - + g_return_val_if_fail (map, NULL); -ModestPairList* -modest_protocol_info_get_protocol_pair_list (ModestProtocolType proto_type) -{ - const ProtocolInfo *map; - ModestPairList *proto_list = NULL; - guint size; + ModestPairList *proto_list = NULL; int i; - - map = get_map (proto_type, &size); - g_return_val_if_fail (map, NULL); - for (i = 0; i != size; ++i) { const ProtocolInfo info = map[i]; proto_list = g_slist_append (proto_list, @@ -111,41 +84,91 @@ modest_protocol_info_get_protocol_pair_list (ModestProtocolType proto_type) return proto_list; } +static gint +get_protocol_by_name (const ProtocolInfo* map, + guint size, + const gchar* query_name, + gint default_value, + gboolean case_sensitive) +{ + guint i; + + g_return_val_if_fail (map, default_value); + g_return_val_if_fail (query_name, default_value); + + for(i = 0; i < size; ++i) + if (modest_text_utils_utf8_strcmp (map[i].name, query_name, + !case_sensitive) == 0) + return map[i].proto; + + return default_value; +} -ModestProtocol -modest_protocol_info_get_protocol (const gchar* name, ModestProtocolType proto_type) +ModestPairList* +modest_protocol_info_get_transport_store_protocol_pair_list (void) { - const ProtocolInfo *map; - guint size; - int i; + return get_protocol_pair_list (TransportStoreProtocolMap, + G_N_ELEMENTS(TransportStoreProtocolMap)); +} + +ModestPairList* +modest_protocol_info_get_auth_protocol_pair_list (void) +{ + return get_protocol_pair_list (AuthProtocolMap, + G_N_ELEMENTS(AuthProtocolMap)); +} + +ModestPairList* +modest_protocol_info_get_connection_protocol_pair_list (void) +{ + return get_protocol_pair_list (ConnectionProtocolMap, + G_N_ELEMENTS(ConnectionProtocolMap)); +} - g_return_val_if_fail (name, MODEST_PROTOCOL_UNKNOWN); +ModestTransportStoreProtocol +modest_protocol_info_get_transport_store_protocol (const gchar* name) +{ + g_return_val_if_fail (name, MODEST_PROTOCOL_TRANSPORT_STORE_UNKNOWN); - map = get_map (proto_type, &size); - g_return_val_if_fail (map, MODEST_PROTOCOL_UNKNOWN); + return get_protocol_by_name(TransportStoreProtocolMap, + G_N_ELEMENTS(TransportStoreProtocolMap), + name, + MODEST_PROTOCOL_TRANSPORT_STORE_UNKNOWN, + TRUE); +} - for (i = 0; i != size; ++i) { - const ProtocolInfo info = map[i]; - if (strcmp(name, info.name) == 0) - return info.proto; - } +ModestAuthProtocol +modest_protocol_info_get_auth_protocol (const gchar* name) +{ + g_return_val_if_fail (name, MODEST_PROTOCOL_AUTH_NONE); - return MODEST_PROTOCOL_UNKNOWN; + return get_protocol_by_name(AuthProtocolMap, + G_N_ELEMENTS(AuthProtocolMap), + name, + MODEST_PROTOCOL_AUTH_NONE, + FALSE); } +ModestConnectionProtocol +modest_protocol_info_get_connection_protocol (const gchar* name) +{ + g_return_val_if_fail (name, MODEST_PROTOCOL_CONNECTION_NORMAL); + + return get_protocol_by_name(ConnectionProtocolMap, + G_N_ELEMENTS(ConnectionProtocolMap), + name, + MODEST_PROTOCOL_CONNECTION_NORMAL, + FALSE); +} /* get either the name or the display_name for the protocol */ static const gchar* -get_protocol_string (ModestProtocol proto, gboolean get_name, ModestProtocolType proto_type) +get_protocol_string (gint proto, const ProtocolInfo* map, guint size, gboolean get_name) { - const ProtocolInfo *map; - guint size; - int i; - - map = get_map (proto_type, &size); g_return_val_if_fail (map, NULL); + int i; for (i = 0; i != size; ++i) { ProtocolInfo info = map[i]; if (info.proto == proto) @@ -155,16 +178,24 @@ get_protocol_string (ModestProtocol proto, gboolean get_name, ModestProtocolType } const gchar* -modest_protocol_info_get_protocol_name (ModestProtocol proto, ModestProtocolType proto_type) +modest_protocol_info_get_transport_store_protocol_name (ModestTransportStoreProtocol proto) { - return get_protocol_string (proto, TRUE, proto_type); + return get_protocol_string (proto, TransportStoreProtocolMap, + G_N_ELEMENTS(TransportStoreProtocolMap), TRUE); } +const gchar* +modest_protocol_info_get_auth_protocol_name (ModestAuthProtocol proto) +{ + return get_protocol_string (proto, AuthProtocolMap, + G_N_ELEMENTS(AuthProtocolMap), TRUE); +} const gchar* -modest_protocol_info_get_protocol_display_name (ModestProtocol proto, ModestProtocolType proto_type) +modest_protocol_info_get_connection_protocol_name (ModestAuthProtocol proto) { - return get_protocol_string (proto, FALSE, proto_type); + return get_protocol_string (proto, ConnectionProtocolMap, + G_N_ELEMENTS(ConnectionProtocolMap), TRUE); } @@ -183,4 +214,14 @@ modest_protocol_info_protocol_is_store (ModestTransportStoreProtocol proto) proto == MODEST_PROTOCOL_STORE_POP || proto == MODEST_PROTOCOL_STORE_IMAP; } +gboolean +modest_protocol_info_is_secure(ModestConnectionProtocol protocol) +{ + return (protocol == MODEST_PROTOCOL_CONNECTION_SSL || + protocol == MODEST_PROTOCOL_CONNECTION_TLS); +} +gboolean modest_protocol_info_auth_is_secure(ModestAuthProtocol protocol) +{ + return (protocol == MODEST_PROTOCOL_AUTH_CRAMMD5); +}