X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-protocol-info.c;h=684a5982c832013ee8306ccef49aa44c2fdf186f;hp=4856897daa35b2ed053e02bc64deab30d1fcb889;hb=6255ab89afea92ce0b2e911b4cbdd49c070ad890;hpb=ef4b0de9684e73696469b8154adbfcb3605e620c diff --git a/src/modest-protocol-info.c b/src/modest-protocol-info.c index 4856897..684a598 100644 --- a/src/modest-protocol-info.c +++ b/src/modest-protocol-info.c @@ -31,130 +31,159 @@ #include /* strcmp */ #include #include - +#include +#include typedef struct { - ModestProtocol proto; + gint proto; const gchar* name; const gchar* display_name; } ProtocolInfo; -static const ProtocolInfo ProtocolMap[] = { +static const ProtocolInfo TransportStoreProtocolMap[] = { { MODEST_PROTOCOL_TRANSPORT_SENDMAIL, "sendmail", N_("Sendmail") }, { MODEST_PROTOCOL_TRANSPORT_SMTP, "smtp", N_("SMTP Server") }, { MODEST_PROTOCOL_STORE_POP, "pop", N_("POP3") }, { MODEST_PROTOCOL_STORE_IMAP, "imap", N_("IMAPv4") }, { MODEST_PROTOCOL_STORE_MAILDIR, "maildir", N_("Maildir") }, - { MODEST_PROTOCOL_STORE_MBOX, "mbox", N_("MBox") }, + { MODEST_PROTOCOL_STORE_MBOX, "mbox", N_("MBox") } +}; - { MODEST_PROTOCOL_SECURITY_SSL, "ssl", N_("SSL") }, - { MODEST_PROTOCOL_SECURITY_TLS, "tls", N_("TLS") }, +static const ProtocolInfo SupportedStoreProtocolMap[] = { + { MODEST_PROTOCOL_STORE_POP, "pop", N_("POP3") }, + { MODEST_PROTOCOL_STORE_IMAP, "imap", N_("IMAPv4") }, +}; - { MODEST_PROTOCOL_AUTH_NONE, "none", N_("none") }, - { MODEST_PROTOCOL_AUTH_PASSWORD, "password", N_("Password") } +static const ProtocolInfo ConnectionProtocolMap[] = { + { MODEST_PROTOCOL_CONNECTION_NORMAL, "none", N_("None") }, + { MODEST_PROTOCOL_CONNECTION_SSL, "ssl", N_("SSL") }, + { MODEST_PROTOCOL_CONNECTION_TLS, "tls", N_("TLS") }, + { MODEST_PROTOCOL_CONNECTION_TLS_OP, "tls-op", N_("TLS when possible") } + /* op stands for optional */ }; -const guint PROTOCOL_MAP_SIZE = sizeof(ProtocolMap)/sizeof(ProtocolInfo); -GSList* -modest_protocol_info_get_protocol_list (ModestProtocolType type) +/* 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 ModestPairList* +get_protocol_pair_list (const ProtocolInfo* map, guint size) { - GSList *proto_list = NULL; + g_return_val_if_fail (map, NULL); + + ModestPairList *proto_list = NULL; int i; - - g_return_val_if_fail (type > MODEST_PROTOCOL_TYPE_UNKNOWN && - type < MODEST_PROTOCOL_TYPE_NUM, - NULL); - - for (i = 0; i != PROTOCOL_MAP_SIZE; ++i) { - ProtocolInfo info = (ProtocolInfo)ProtocolMap[i]; - if (modest_protocol_info_get_protocol_type(info.proto) == type) - proto_list = g_slist_append (proto_list, GINT_TO_POINTER(info.proto)); + for (i = 0; i != size; ++i) { + const ProtocolInfo info = map[i]; + proto_list = g_slist_append (proto_list, + (gpointer)modest_pair_new( + (gpointer)info.name, + (gpointer)info.display_name, + FALSE)); } 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; +} ModestPairList* -modest_protocol_info_get_protocol_pair_list (ModestProtocolType type) +modest_protocol_info_get_transport_store_protocol_pair_list (void) { - ModestPairList *proto_list = NULL; - int i; - - g_return_val_if_fail (type > MODEST_PROTOCOL_TYPE_UNKNOWN && type < MODEST_PROTOCOL_TYPE_NUM, - NULL); - - for (i = 0; i != PROTOCOL_MAP_SIZE; ++i) { - ProtocolInfo info = (ProtocolInfo)ProtocolMap[i]; - if (modest_protocol_info_get_protocol_type(info.proto) == type) - proto_list = g_slist_append (proto_list, - (gpointer)modest_pair_new( - (gpointer)info.name, - (gpointer)info.display_name, - FALSE)); - } - return proto_list; + return get_protocol_pair_list (TransportStoreProtocolMap, + G_N_ELEMENTS(TransportStoreProtocolMap)); } - -ModestProtocolType -modest_protocol_info_get_protocol_type (ModestProtocol proto) +ModestPairList* +modest_protocol_info_get_supported_store_protocol_pair_list (void) { - switch (proto) { - case MODEST_PROTOCOL_TRANSPORT_SENDMAIL: - case MODEST_PROTOCOL_TRANSPORT_SMTP: - return MODEST_PROTOCOL_TYPE_TRANSPORT; - - case MODEST_PROTOCOL_STORE_POP: - case MODEST_PROTOCOL_STORE_IMAP: - case MODEST_PROTOCOL_STORE_MAILDIR: - case MODEST_PROTOCOL_STORE_MBOX: - return MODEST_PROTOCOL_TYPE_STORE; - - case MODEST_PROTOCOL_SECURITY_SSL: - case MODEST_PROTOCOL_SECURITY_TLS: - return MODEST_PROTOCOL_TYPE_SECURITY; - - case MODEST_PROTOCOL_AUTH_NONE: - case MODEST_PROTOCOL_AUTH_PASSWORD: - return MODEST_PROTOCOL_TYPE_AUTH; - - default: - g_return_val_if_reached (MODEST_PROTOCOL_TYPE_UNKNOWN); - } + return get_protocol_pair_list (SupportedStoreProtocolMap, + G_N_ELEMENTS(SupportedStoreProtocolMap)); } -ModestProtocol -modest_protocol_info_get_protocol (const gchar* name) +ModestPairList* +modest_protocol_info_get_auth_protocol_pair_list (void) { - int i; - g_return_val_if_fail (name, MODEST_PROTOCOL_UNKNOWN); + return get_protocol_pair_list (AuthProtocolMap, + G_N_ELEMENTS(AuthProtocolMap)); +} - for (i = 0; i != PROTOCOL_MAP_SIZE; ++i) { - ProtocolInfo info = (ProtocolInfo)ProtocolMap[i]; - if (strcmp(name, info.name) == 0) - return info.proto; - } +ModestPairList* +modest_protocol_info_get_connection_protocol_pair_list (void) +{ + return get_protocol_pair_list (ConnectionProtocolMap, + G_N_ELEMENTS(ConnectionProtocolMap)); +} + +ModestTransportStoreProtocol +modest_protocol_info_get_transport_store_protocol (const gchar* name) +{ + g_return_val_if_fail (name, MODEST_PROTOCOL_TRANSPORT_STORE_UNKNOWN); - return MODEST_PROTOCOL_UNKNOWN; + return get_protocol_by_name(TransportStoreProtocolMap, + G_N_ELEMENTS(TransportStoreProtocolMap), + name, + MODEST_PROTOCOL_TRANSPORT_STORE_UNKNOWN, + TRUE); } +ModestAuthProtocol +modest_protocol_info_get_auth_protocol (const gchar* name) +{ + g_return_val_if_fail (name, MODEST_PROTOCOL_AUTH_NONE); + + 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) +get_protocol_string (gint proto, const ProtocolInfo* map, guint size, gboolean get_name) { - int i; - g_return_val_if_fail (modest_protocol_info_get_protocol_type(proto) != - MODEST_PROTOCOL_TYPE_UNKNOWN, NULL); + g_return_val_if_fail (map, NULL); - for (i = 0; i != PROTOCOL_MAP_SIZE; ++i) { - ProtocolInfo info = (ProtocolInfo)ProtocolMap[i]; + int i; + for (i = 0; i != size; ++i) { + ProtocolInfo info = map[i]; if (info.proto == proto) return get_name ? info.name : info.display_name; } @@ -162,27 +191,50 @@ get_protocol_string (ModestProtocol proto, gboolean get_name) } const gchar* -modest_protocol_info_get_protocol_name (ModestProtocol proto) +modest_protocol_info_get_transport_store_protocol_name (ModestTransportStoreProtocol proto) { - return get_protocol_string (proto, TRUE); + 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) +modest_protocol_info_get_connection_protocol_name (ModestAuthProtocol proto) { - return get_protocol_string (proto, FALSE); + return get_protocol_string (proto, ConnectionProtocolMap, + G_N_ELEMENTS(ConnectionProtocolMap), TRUE); } gboolean -modest_protocol_info_protocol_is_local_store (ModestProtocol proto) +modest_protocol_info_protocol_is_local_store (ModestTransportStoreProtocol proto) { - g_return_val_if_fail (modest_protocol_info_get_protocol_type (proto) != - MODEST_PROTOCOL_TYPE_UNKNOWN, FALSE); - - /* may add MH later */ return proto == MODEST_PROTOCOL_STORE_MBOX || proto == MODEST_PROTOCOL_STORE_MAILDIR; } + +gboolean +modest_protocol_info_protocol_is_store (ModestTransportStoreProtocol proto) +{ + return proto == MODEST_PROTOCOL_STORE_MBOX || proto == MODEST_PROTOCOL_STORE_MAILDIR || + 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); +}