* set the correct server options from the preset data,
authorDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Sat, 19 May 2007 16:03:30 +0000 (16:03 +0000)
committerDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Sat, 19 May 2007 16:03:30 +0000 (16:03 +0000)
  and set the right port number as well; i restructured the code a bit,
  the problem was that (apparently) the easy setup wizard did not set the
  port number; also, modest-presets confused && and & for bitwise-and
  somehow
* add explicit port number argument to modest_account_mgr_add_server_account

pmo-trunk-r1921

src/maemo/easysetup/modest-easysetup-wizard.c
src/maemo/easysetup/modest-presets.c
src/maemo/easysetup/modest-presets.h
src/maemo/modest-connection-specific-smtp-window.c
src/modest-account-mgr-helpers.h
src/modest-account-mgr.c
src/modest-account-mgr.h

index ed848a3..0578ec6 100644 (file)
@@ -1312,6 +1312,7 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled)
        /* Note: We need something as default for the ModestTransportStoreProtocol* values, 
         * or modest_account_mgr_add_server_account will fail. */
        gchar* servername_incoming = NULL;
+       guint serverport_incoming = 0;
        ModestTransportStoreProtocol protocol_incoming = MODEST_PROTOCOL_STORE_POP;
        ModestConnectionProtocol protocol_security_incoming = MODEST_PROTOCOL_CONNECTION_NORMAL;
        ModestAuthProtocol protocol_authentication_incoming = MODEST_PROTOCOL_AUTH_NONE;
@@ -1319,26 +1320,31 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled)
        /* Get details from the specified presets: */
        gchar* provider_id = easysetup_provider_combo_box_get_active_provider_id (
                EASYSETUP_PROVIDER_COMBO_BOX (self->combo_account_serviceprovider));
-       if(provider_id) {
+       if (provider_id) {
                /* Use presets: */
-               
                servername_incoming = modest_presets_get_server (priv->presets, provider_id, 
                                                                 TRUE /* incoming */);
                
-               ModestPresetsServerType servertype_incoming = modest_presets_get_info_server_type (priv->presets, provider_id, 
+               ModestPresetsServerType servertype_incoming = modest_presets_get_info_server_type (priv->presets,
+                                                                                                  provider_id, 
+                                                                                                  TRUE /* incoming */);
+               ModestPresetsSecurity security_incoming = modest_presets_get_info_server_security (priv->presets,
+                                                                                                  provider_id, 
                                                                                                   TRUE /* incoming */);
+
+               g_warning ("security incoming: %x", security_incoming);
                
-       
                /* We don't check for SMTP here as that is impossible for an incoming server. */
-               if (servertype_incoming == MODEST_PRESETS_SERVER_TYPE_IMAP)
+               if (servertype_incoming == MODEST_PRESETS_SERVER_TYPE_IMAP) {
                        protocol_incoming = MODEST_PROTOCOL_STORE_IMAP;
-               else if (servertype_incoming == MODEST_PRESETS_SERVER_TYPE_POP)
+                       serverport_incoming =
+                               (security_incoming & MODEST_PRESETS_SECURITY_SECURE_INCOMING_ALTERNATE_PORT) ? 993 : 143; 
+               } else if (servertype_incoming == MODEST_PRESETS_SERVER_TYPE_POP) {
                        protocol_incoming = MODEST_PROTOCOL_STORE_POP;
+                       serverport_incoming =
+                               (security_incoming & MODEST_PRESETS_SECURITY_SECURE_INCOMING_ALTERNATE_PORT) ? 995 : 110; 
+               }
                                
-               ModestPresetsSecurity security_incoming = modest_presets_get_info_server_security (priv->presets, provider_id, 
-                                                                                                  TRUE /* incoming */);
-                       
-               
                if (security_incoming & MODEST_PRESETS_SECURITY_SECURE_INCOMING)
                        protocol_security_incoming = MODEST_PROTOCOL_CONNECTION_SSL; /* TODO: Is this what we want? */
                
@@ -1363,7 +1369,6 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled)
                protocol_authentication_incoming = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->checkbox_incoming_auth)) 
                        ? MODEST_PROTOCOL_AUTH_CRAMMD5
                        : MODEST_PROTOCOL_AUTH_PASSWORD;
-               
        }
        
        /* First we add the 2 server accounts, and then we add the account that uses them.
@@ -1377,6 +1382,7 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled)
        gboolean created = modest_account_mgr_add_server_account (self->account_manager,
                                                                  store_name,
                                                                  servername_incoming,
+                                                                 serverport_incoming,
                                                                  username, password,
                                                                  protocol_incoming,
                                                                  protocol_security_incoming,
@@ -1407,13 +1413,15 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled)
        ModestTransportStoreProtocol protocol_outgoing = MODEST_PROTOCOL_STORE_POP;
        ModestConnectionProtocol protocol_security_outgoing = MODEST_PROTOCOL_CONNECTION_NORMAL;
        ModestAuthProtocol protocol_authentication_outgoing = MODEST_PROTOCOL_AUTH_NONE;
+       guint serverport_outgoing = 0;
        
-       if(provider_id) {
+       if (provider_id) {
                /* Use presets: */
                servername_outgoing = modest_presets_get_server (priv->presets, provider_id, 
                                                                 FALSE /* incoming */);
                        
-               ModestPresetsServerType servertype_outgoing = modest_presets_get_info_server_type (priv->presets, provider_id, 
+               ModestPresetsServerType servertype_outgoing = modest_presets_get_info_server_type (priv->presets,
+                                                                                                  provider_id, 
                                                                                                   FALSE /* incoming */);
                
                /* Note: We need something as default, or modest_account_mgr_add_server_account will fail. */
@@ -1426,10 +1434,12 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled)
                                                                 FALSE /* incoming */);
                        
                protocol_security_outgoing = MODEST_PROTOCOL_CONNECTION_NORMAL;
-               if (security_outgoing & MODEST_PRESETS_SECURITY_SECURE_SMTP)
+               if (security_outgoing & MODEST_PRESETS_SECURITY_SECURE_SMTP) {
                        protocol_security_outgoing = MODEST_PROTOCOL_CONNECTION_SSL; /* TODO: Is this what we want? */
-               
-               protocol_authentication_outgoing = MODEST_PROTOCOL_AUTH_NONE;
+                       serverport_outgoing = 465;
+                       protocol_authentication_outgoing = MODEST_PROTOCOL_AUTH_PASSWORD;
+               } else
+                       protocol_authentication_outgoing = MODEST_PROTOCOL_AUTH_NONE;
                /* TODO: There is no SMTP authentication enum for presets. */
        }
        else {
@@ -1453,6 +1463,7 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled)
        created = modest_account_mgr_add_server_account (self->account_manager,
                                                         transport_name,
                                                         servername_outgoing,
+                                                        serverport_outgoing,
                                                         username, password,
                                                         protocol_outgoing,
                                                         protocol_security_outgoing,
@@ -1507,5 +1518,3 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled)
 
        return result;
 }
-
-
index 572b9e5..0a6df35 100644 (file)
 #include <config.h>
 #endif
 
-#define MODEST_PRESETS_KEY_NAME              "Name"
-#define MODEST_PRESETS_KEY_DOMAIN            "Domain"
-#define MODEST_PRESETS_KEY_MCC               "MCC"
-#define MODEST_PRESETS_KEY_INCOMING          "IncomingMailServer"
-#define MODEST_PRESETS_KEY_OUTGOING          "OutgoingMailServer"
-#define MODEST_PRESETS_KEY_MAILBOX_TYPE      "MailboxType"
-#define MODEST_PRESETS_KEY_MAILBOX_TYPE_POP  "pop"
-#define MODEST_PRESETS_KEY_MAILBOX_TYPE_IMAP "imap"
-#define MODEST_PRESETS_KEY_APOP              "APOPSecureLogin"
-#define MODEST_PRESETS_KEY_SECURE_SMTP       "SecureSMTP"
-#define MODEST_PRESETS_KEY_TRUE                     "true"
-
-/** An efficient way to store the info for each provider.
- */
-typedef enum _ModestPresetsInfo {
-       /* two bits for the server type */
-       MODEST_PRESETS_INFO_NONE             = 0x0000,
-       MODEST_PRESETS_INFO_IMAP             = 0x0001,
-       MODEST_PRESETS_INFO_POP              = 0x0002,
-       MODEST_PRESETS_INFO_SMTP             = 0x0003,
-
-       /* one bit for each of these */
-       MODEST_PRESETS_INFO_APOP             = 0x0004,
-       MODEST_PRESETS_INFO_SECURE_SMTP      = 0x0008,
-       MODEST_PRESETS_INFO_SECURE_INCOMING  = 0x000f   
-} ModestPresetsInfo;
-
-/**
- * modest_presets_get_info:
- * @self: a valid ModestPresets instance
- * @provider_id: ID of the provider 
- * @incoming_server: get the incoming mailserver if TRUE, get the
- * outgoing server otherwise
- *
- * get information about some incoming or outgoing mailserver
- *
- * Returns: a ModestPresetsInfo with the required information
- */
-static ModestPresetsInfo
-modest_presets_get_info (ModestPresets *self, const gchar *provider_id, gboolean incoming_server);
+#define MODEST_PRESETS_KEY_NAME                "Name"
+#define MODEST_PRESETS_KEY_DOMAIN              "Domain"
+#define MODEST_PRESETS_KEY_MCC                 "MCC"
+#define MODEST_PRESETS_KEY_INCOMING            "IncomingMailServer"
+#define MODEST_PRESETS_KEY_INCOMING_SECURITY   "IncomingSecurity"
+#define MODEST_PRESETS_KEY_OUTGOING            "OutgoingMailServer"
+#define MODEST_PRESETS_KEY_MAILBOX_TYPE        "MailboxType"
+#define MODEST_PRESETS_KEY_APOP                "APOPSecureLogin"
+#define MODEST_PRESETS_KEY_SECURE_SMTP         "SecureSMTP"
                                                    
 
 ModestPresets*
@@ -207,8 +176,9 @@ modest_presets_get_server (ModestPresets *self, const gchar *provider_id,
                                      NULL);
 }
 
-gchar *                   modest_presets_get_domain      (ModestPresets *self,
-                                                         const gchar *provider_id)
+gchar *
+modest_presets_get_domain      (ModestPresets *self,
+                               const gchar *provider_id)
 {      
        g_return_val_if_fail (self && self->keyfile, NULL);
        g_return_val_if_fail (provider_id, NULL);
@@ -219,99 +189,105 @@ gchar *                   modest_presets_get_domain      (ModestPresets *self,
 }              
 
 
-ModestPresetsInfo
-modest_presets_get_info (ModestPresets *self, const gchar *provider_id, gboolean incoming_server)
+
+
+ModestPresetsServerType
+modest_presets_get_info_server_type (ModestPresets *self,
+                                    const gchar *provider_id,
+                                    gboolean incoming_server)
 {
-       ModestPresetsInfo info = 0;
+       ModestPresetsServerType info = MODEST_PRESETS_SERVER_TYPE_NONE;
        gchar *val = NULL;
        
        g_return_val_if_fail (self && self->keyfile, 0);
 
-       if(incoming_server) {
+       if (incoming_server) {
                val = g_key_file_get_string (self->keyfile, provider_id,
-                                               MODEST_PRESETS_KEY_INCOMING, NULL);
-               if (val) {
-                       g_free (val);
-                       val = g_key_file_get_string (self->keyfile, provider_id,
-                                                    MODEST_PRESETS_KEY_MAILBOX_TYPE, NULL);
-                       if (strcmp (val, MODEST_PRESETS_KEY_MAILBOX_TYPE_POP) == 0)
-                               info |= MODEST_PRESETS_INFO_POP;
-                       if (strcmp (val, MODEST_PRESETS_KEY_MAILBOX_TYPE_IMAP) == 0)
-                               info |= MODEST_PRESETS_INFO_IMAP;
-                       g_free (val);
+                                            MODEST_PRESETS_KEY_INCOMING, NULL);
+               if (!val)
+                       return info;
+               
+               g_free (val);
+               val = g_key_file_get_string (self->keyfile, provider_id,
+                                            MODEST_PRESETS_KEY_MAILBOX_TYPE,NULL);
+               if (val && strcmp (val, "pop") == 0)
+                       info = MODEST_PRESETS_SERVER_TYPE_POP;
+               if (val && strcmp (val, "imap") == 0)
+                       info = MODEST_PRESETS_SERVER_TYPE_IMAP;
+       } else {
+               val = g_key_file_get_string (self->keyfile, provider_id,
+                                            MODEST_PRESETS_KEY_OUTGOING, NULL);
+               if (!val)
+                       return info;
+               info = MODEST_PRESETS_SERVER_TYPE_SMTP;
+       }
+       g_free (val);
+
+       /* debug: */
+/*     g_message ("provider id: %s, server type: %d", provider_id, info); */
+       return info;
+}
+
+
+
+ModestPresetsSecurity
+modest_presets_get_info_server_security (ModestPresets *self, const gchar *provider_id,
+                                        gboolean incoming_server)
+{
+       ModestPresetsSecurity info = MODEST_PRESETS_SECURITY_NONE;
+       gchar *val = NULL;
        
+       g_return_val_if_fail (self && self->keyfile, MODEST_PRESETS_SECURITY_NONE);
+
+       if (incoming_server) {
+               val = g_key_file_get_string (self->keyfile, provider_id,
+                                            MODEST_PRESETS_KEY_INCOMING, NULL);
+               if (val) {
+                       g_free (val);   
                        val = g_key_file_get_string (self->keyfile, provider_id,
                                                     MODEST_PRESETS_KEY_APOP, NULL);
-                       if (val && strcmp(val, MODEST_PRESETS_KEY_TRUE) == 0)
-                               info |= MODEST_PRESETS_INFO_APOP;
+                       if (val && strcmp(val, "true") == 0)
+                               info |= MODEST_PRESETS_SECURITY_APOP;
                        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) 
+                               info |= MODEST_PRESETS_SECURITY_SECURE_INCOMING;
+                       if (val && strcmp (val, "2") == 0) {
+                               info |= MODEST_PRESETS_SECURITY_SECURE_INCOMING;
+                               info |= MODEST_PRESETS_SECURITY_SECURE_INCOMING_ALTERNATE_PORT;
+                       }
+                       g_free (val);
                }
-       }
-       else /* outgoing: */ {
+       } else /* outgoing: */ {
                val = g_key_file_get_string (self->keyfile, provider_id,
                                             MODEST_PRESETS_KEY_OUTGOING, NULL);
                if (val) {
                        g_free (val);
-                       info |= MODEST_PRESETS_INFO_SMTP;
+                       info |= MODEST_PRESETS_SECURITY_SECURE_SMTP;
                        
                        val = g_key_file_get_string (self->keyfile, provider_id,
                                                     MODEST_PRESETS_KEY_SECURE_SMTP, NULL);
-                       if (val && strcmp(val,MODEST_PRESETS_KEY_TRUE) == 0)
-                               info |= MODEST_PRESETS_INFO_SECURE_SMTP;
+                       if (val && strcmp(val,"true") == 0)
+                               info |= MODEST_PRESETS_SECURITY_SECURE_SMTP;
                        g_free(val);
                }
        }
 
-       return info;
-}
-
-ModestPresetsServerType
-modest_presets_get_info_server_type (ModestPresets *self,
-                                                   const gchar *provider_id,
-                                                   gboolean incoming_server)
-{
-       ModestPresetsInfo info = modest_presets_get_info (self, provider_id, incoming_server);
-
-       /* The server type is stored in the first 2 bits: */
-       info = info & 0x03;
-       
-       /* Convert from the internal enum to the public enum: */
-       if(info == MODEST_PRESETS_INFO_IMAP)
-               return MODEST_PRESETS_SERVER_TYPE_IMAP;
-       else if(info == MODEST_PRESETS_INFO_POP)
-               return MODEST_PRESETS_SERVER_TYPE_POP;
-       else if(info == MODEST_PRESETS_INFO_SMTP)
-               return MODEST_PRESETS_SERVER_TYPE_SMTP;
-       else
-               return MODEST_PRESETS_SERVER_TYPE_NONE;
-}
+       /* debug */
+/*     g_message ("provider id: %s, apop:%s, secure-incoming:%s, altport: %s, secure-smtp: %s", */
+/*                provider_id, */
+/*                info & MODEST_PRESETS_SECURITY_APOP ? "yes" : "no", */
+/*                info & MODEST_PRESETS_SECURITY_SECURE_INCOMING ? "yes" : "no", */
+/*                info & MODEST_PRESETS_SECURITY_SECURE_INCOMING_ALTERNATE_PORT ? "yes" : "no", */
+/*                info & MODEST_PRESETS_SECURITY_SECURE_SMTP ? "yes" : "no"); */
 
-ModestPresetsSecurity
-modest_presets_get_info_server_security (ModestPresets *self,
-                                                   const gchar *provider_id,
-                                                   gboolean incoming_server)
-{
-       ModestPresetsInfo info = modest_presets_get_info (self, provider_id, incoming_server);
-
-       /* The security flags are stored in all except the first 4 bits: */
-       info = info && !0x04;
-       
-       /* Convert from the internal flags to the public flags: */
-       ModestPresetsSecurity security = MODEST_PRESETS_SECURITY_NONE;
-       if(info && MODEST_PRESETS_INFO_APOP)
-               security = security | MODEST_PRESETS_SECURITY_APOP;
-               
-       if(info && MODEST_PRESETS_INFO_SECURE_SMTP)
-               security = security | MODEST_PRESETS_SECURITY_SECURE_SMTP;
-               
-       if(info && MODEST_PRESETS_INFO_SECURE_INCOMING)
-               security = security | MODEST_PRESETS_SECURITY_SECURE_INCOMING;
-
-       return security;
+       return info;
 }
 
                                                        
-       
+
        
 void
 modest_presets_destroy (ModestPresets *self)
index 7e602e0..a047f6e 100644 (file)
@@ -39,7 +39,7 @@ struct _ModestPresets {
 typedef struct _ModestPresets ModestPresets;
 
 typedef enum _ModestPresetsServerType {
-       MODEST_PRESETS_SERVER_TYPE_NONE,
+       MODEST_PRESETS_SERVER_TYPE_NONE,                      
        MODEST_PRESETS_SERVER_TYPE_IMAP,
        MODEST_PRESETS_SERVER_TYPE_POP,
        MODEST_PRESETS_SERVER_TYPE_SMTP
@@ -48,10 +48,12 @@ typedef enum _ModestPresetsServerType {
 /** These are flags, which should be ORed.
  */
 typedef enum _ModestPresetsSecurity {
-       MODEST_PRESETS_SECURITY_NONE = 0,
-       MODEST_PRESETS_SECURITY_APOP = 1 << 0,
-       MODEST_PRESETS_SECURITY_SECURE_SMTP = 1 << 1,
-       MODEST_PRESETS_SECURITY_SECURE_INCOMING = 1 << 2
+       MODEST_PRESETS_SECURITY_NONE                           = 0,                           
+       MODEST_PRESETS_SECURITY_APOP                           = 1 << 0,
+       MODEST_PRESETS_SECURITY_SECURE_SMTP                    = 1 << 1, /* if set, port will be 465
+                                                                         * instead of 25 */
+       MODEST_PRESETS_SECURITY_SECURE_INCOMING                = 1 << 2,
+       MODEST_PRESETS_SECURITY_SECURE_INCOMING_ALTERNATE_PORT = 1 << 3, /* POP3S=>995, IMAPS=>993 */
 } ModestPresetsSecurity;
 
 /* typedef enum _ModestPresetsInfo ModestPresetsInfo; */
@@ -114,7 +116,7 @@ gchar *                   modest_presets_get_server      (ModestPresets *self,
  */
 gchar *                   modest_presets_get_domain      (ModestPresets *self,
                                                          const gchar *provider_id);
-                                                         
+
 /**
  * modest_presets_get_info_server_type:
  * @self: a valid ModestPresets instance
index ebbfe08..cd4623d 100644 (file)
@@ -427,12 +427,12 @@ modest_connection_specific_smtp_window_save_server_accounts (ModestConnectionSpe
                                g_free (name_start);
                                
                                success = modest_account_mgr_add_server_account (priv->account_manager,
-                                       server_account_name,
-                                       data->hostname,
-                                       data->username, data->password,
-                                       MODEST_PROTOCOL_TRANSPORT_SMTP,
-                                       data->security,
-                                       data->secure_auth);
+                                                                                server_account_name,
+                                                                                data->hostname, 0,
+                                                                                data->username, data->password,
+                                                                                MODEST_PROTOCOL_TRANSPORT_SMTP,
+                                                                                data->security,
+                                                                                data->secure_auth);
                                        
                                /* associate the specific server account with this connection for this account: */
                                success = success && modest_account_mgr_set_connection_specific_smtp (
index 8b69d2c..f04d78f 100644 (file)
@@ -48,7 +48,7 @@ typedef struct {
        ModestTransportStoreProtocol    proto; /*< The store or transport. Not ORed. */
        gchar            *password;
        time_t            last_updated;
-       gint             port; /* Or 0, if the default should be used. */
+       gint              port; /* Or 0, if the default should be used. */
        ModestAuthProtocol   secure_auth;
        ModestConnectionProtocol   security;
 } ModestServerAccountData;
index 44b09a2..fde5cc4 100644 (file)
@@ -305,6 +305,7 @@ modest_account_mgr_add_account (ModestAccountMgr *self,
 gboolean
 modest_account_mgr_add_server_account (ModestAccountMgr * self,
                                       const gchar * name, const gchar *hostname,
+                                      guint portnumber,
                                       const gchar * username, const gchar * password,
                                       ModestTransportStoreProtocol proto,
                                       ModestConnectionProtocol security,
@@ -380,6 +381,20 @@ modest_account_mgr_add_server_account (ModestAccountMgr * self,
        if (!ok)
                goto cleanup;
 
+
+       /* portnumber */
+       key = _modest_account_mgr_get_account_keyname (name, MODEST_ACCOUNT_PORT, TRUE);
+       ok = modest_conf_set_int (priv->modest_conf, key, portnumber, &err);
+       if (err) {
+               g_printerr ("modest: failed to set %s: %s\n", key, err->message);
+               g_error_free (err);
+               ok = FALSE;
+       }
+       g_free (key);
+       if (!ok)
+               goto cleanup;
+
+       
        /* auth mechanism */
        key = _modest_account_mgr_get_account_keyname (name, MODEST_ACCOUNT_AUTH_MECH, TRUE);
        ok = modest_conf_set_string (priv->modest_conf, key,
index 3241b72..e37ea39 100644 (file)
@@ -107,6 +107,7 @@ gboolean        modest_account_mgr_add_account    (ModestAccountMgr *self,
  * @self: a ModestAccountMgr instance
  * @name: name (id) of the account, which is a valid UTF8 string that does not contain '/'
  * @hostname: the hostname
+ * @portnumber: the portnumber, or 0 for default
  * @username: the username
  * @password: the password
  * @proto:    the protocol (imap, smtp, ...) used for this account
@@ -121,6 +122,7 @@ gboolean        modest_account_mgr_add_account    (ModestAccountMgr *self,
 gboolean modest_account_mgr_add_server_account    (ModestAccountMgr *self,
                                                   const gchar *name,
                                                   const gchar *hostname,
+                                                  const guint portnumber,
                                                   const gchar *username,
                                                   const gchar *password,
                                                   ModestTransportStoreProtocol proto,