removed dead code.
authorNot Zed <NotZed@Ximian.com>
Mon, 15 Sep 2003 23:21:16 +0000 (23:21 +0000)
committerMichael Zucci <zucchi@src.gnome.org>
Mon, 15 Sep 2003 23:21:16 +0000 (23:21 +0000)
2003-09-15  Not Zed  <NotZed@Ximian.com>

        * providers/imapp/camel-imapp-store.c (store_resp_list)
        (imap_login, try_sasl, imap_try_authenticate): removed dead code.

        * providers/imapp/camel-imapp-stream.c: return -1 if stream not
        set.

        * providers/imapp/camel-imapp-engine.c (iterate_completion): put
        done request on the done queue, so all requests are always
        somewhere.
        (camel_imapp_engine_command_free): just spit warnings of active
        messages being freed, but abort if the item isn't in any list.
        Also remove the node from its list before going on.
        (iterate_untagged, iterate_continuation, iterate_completion):
        staticifiy.

        * providers/imapp/camel-imapp-provider.c
        (camel_imapp_module_init): move camel_exception_setup call here.

        * providers/imapp/camel-imapp-driver.c
        (camel_imapp_driver_get_type): remove execption setup here, it
        isn't early enough.
        (camel_imapp_driver_list): handle exceptions.

camel/ChangeLog
camel/providers/imapp/camel-imapp-driver.c
camel/providers/imapp/camel-imapp-engine.c
camel/providers/imapp/camel-imapp-engine.h
camel/providers/imapp/camel-imapp-provider.c
camel/providers/imapp/camel-imapp-store.c
camel/providers/imapp/camel-imapp-stream.c

index 66a7e8f..7f898f9 100644 (file)
@@ -1,3 +1,28 @@
+2003-09-15  Not Zed  <NotZed@Ximian.com>
+
+       * providers/imapp/camel-imapp-store.c (store_resp_list)
+       (imap_login, try_sasl, imap_try_authenticate): removed dead code.
+
+       * providers/imapp/camel-imapp-stream.c: return -1 if stream not
+       set.
+
+       * providers/imapp/camel-imapp-engine.c (iterate_completion): put
+       done request on the done queue, so all requests are always
+       somewhere.
+       (camel_imapp_engine_command_free): just spit warnings of active
+       messages being freed, but abort if the item isn't in any list.
+       Also remove the node from its list before going on.
+       (iterate_untagged, iterate_continuation, iterate_completion):
+       staticifiy.
+
+       * providers/imapp/camel-imapp-provider.c
+       (camel_imapp_module_init): move camel_exception_setup call here.
+
+       * providers/imapp/camel-imapp-driver.c
+       (camel_imapp_driver_get_type): remove execption setup here, it
+       isn't early enough.
+       (camel_imapp_driver_list): handle exceptions.
+
 2003-09-12  Jeffrey Stedfast  <fejj@ximian.com>
 
        * providers/local/camel-mbox-folder.c
index f9daced..b0644dc 100644 (file)
@@ -69,10 +69,6 @@ camel_imapp_driver_get_type (void)
                        NULL,
                        (CamelObjectInitFunc) object_init,
                        (CamelObjectFinalizeFunc) object_finalise);
-
-               /* blah ... could just use it in object setup? */
-               /* TEMPORARY */
-               camel_exception_setup();
        }
        
        return type;
@@ -475,7 +471,7 @@ camel_imapp_driver_fetch(CamelIMAPPDriver *id, CamelIMAPPFolder *folder, const c
 GPtrArray *
 camel_imapp_driver_list(CamelIMAPPDriver *id, const char *name, guint32 flags)
 {
-       CamelIMAPPCommand *ic;
+       CamelIMAPPCommand * volatile ic;
        GPtrArray *res;
 
        g_assert(id->list_commands == NULL);
@@ -490,23 +486,47 @@ camel_imapp_driver_list(CamelIMAPPDriver *id, const char *name, guint32 flags)
 
        id->list_result = g_ptr_array_new();
        id->list_flags = flags;
-       ic = camel_imapp_engine_command_new(id->engine, "LIST", NULL, "LIST \"\" %f", name[0]?name:"%");
-       camel_imapp_engine_command_queue(id->engine, ic);
-       while (ic) {
-               while (camel_imapp_engine_iterate(id->engine, ic)>0)
-                       ;
+       CAMEL_TRY {
+               ic = camel_imapp_engine_command_new(id->engine, "LIST", NULL, "LIST \"\" %f", name[0]?name:"%");
+               camel_imapp_engine_command_queue(id->engine, ic);
+               while (ic) {
+                       while (camel_imapp_engine_iterate(id->engine, ic)>0)
+                               ;
+                       camel_imapp_engine_command_free(id->engine, ic);
+
+                       if (id->list_commands) {
+                               GSList *top = id->list_commands;
+                               
+                               id->list_commands = top->next;
+                               ic = top->data;
+                               g_slist_free_1(top);
+                       } else {
+                               ic = NULL;
+                       }
+               }
+       } CAMEL_CATCH(e) {
+               GSList *top = id->list_commands;
+               int i;
+
                camel_imapp_engine_command_free(id->engine, ic);
 
-               if (id->list_commands) {
-                       GSList *top = id->list_commands;
+               while (top) {
+                       GSList *topn = top->next;
 
-                       id->list_commands = top->next;
-                       ic = top->data;
+                       camel_imapp_engine_command_free(id->engine, ic);
                        g_slist_free_1(top);
-               } else {
-                       ic = NULL;
+                       top = topn;
                }
-       }
+               id->list_commands = NULL;
+
+               res = id->list_result;
+               for (i=0;i<res->len;i++)
+                       imap_free_list(res->pdata[i]);
+               g_ptr_array_free(res, TRUE);
+               id->list_result = NULL;
+
+               camel_exception_throw_ex(e);
+       } CAMEL_DONE;
 
        res = id->list_result;
        id->list_result = NULL;
index f6cfcbf..df14903 100644 (file)
@@ -43,6 +43,7 @@ object_init(CamelIMAPPEngine *ie, CamelIMAPPEngineClass *ieclass)
        ie->handlers = g_hash_table_new(g_str_hash, g_str_equal);
        e_dlist_init(&ie->active);
        e_dlist_init(&ie->queue);
+       e_dlist_init(&ie->done);
 
        ie->tagprefix = ieclass->tagprefix;
        ieclass->tagprefix++;
@@ -339,7 +340,7 @@ camel_imapp_engine_skip(CamelIMAPPEngine *imap)
 }
 
 /* handle any untagged responses */
-int
+static int
 iterate_untagged(CamelIMAPPEngine *imap)
 {
        unsigned int id, len;
@@ -535,6 +536,7 @@ iterate_completion(CamelIMAPPEngine *imap, unsigned char *token)
                printf("%p: removing command from qwueue, we were at '%s'\n", ic, ic->current->data);
                printf("%p: removing command\n", ic);
                e_dlist_remove((EDListNode *)ic);
+               e_dlist_addtail(&imap->done, (EDListNode *)ic);
                if (imap->literal == ic)
                        imap->literal = NULL;
                ic->status = imap_parse_status(imap->stream);
@@ -559,6 +561,7 @@ iterate_completion(CamelIMAPPEngine *imap, unsigned char *token)
                ic = imap->literal;
                                /* set the command complete with a failure code? */
                e_dlist_remove((EDListNode *)ic);
+               e_dlist_addtail(&imap->done, (EDListNode *)ic);
                imap->literal = NULL;
        }
        
@@ -660,21 +663,42 @@ camel_imapp_engine_command_free (CamelIMAPPEngine *imap, CamelIMAPPCommand *ic)
        /* maybe we should just have another queue to keep them? */
        {
                CamelIMAPPCommand *iw;
+               int found = 0;
 
                iw = (CamelIMAPPCommand *)imap->active.head;
                while (iw->next) {
-                       if (iw == ic)
-                               abort();
+                       if (iw == ic) {
+                               found = 1;
+                               g_warning("command '%s' still in active queue", iw->name);
+                               break;
+                       }
                        iw = iw->next;
                }
                iw = (CamelIMAPPCommand *)imap->queue.head;
                while (iw->next) {
-                       if (iw == ic)
-                               abort();
+                       if (iw == ic) {
+                               found = 1;
+                               g_warning("command '%s' still in waiting queue", iw->name);
+                               break;
+                       }
+                       iw = iw->next;
+               }
+               iw = (CamelIMAPPCommand *)imap->done.head;
+               while (iw->next) {
+                       if (iw == ic) {
+                               found = 1;
+                               break;
+                       }
                        iw = iw->next;
                }
+               if (!found) {
+                       g_warning("command '%s' not found anywhere", ic->name);
+                       abort();
+               }
        }
 
+       e_dlist_remove((EDListNode *)ic);
+
        if (ic->mem)
                camel_object_unref((CamelObject *)ic->mem);
        imap_free_status(ic->status);
index 6db9968..5f74d06 100644 (file)
@@ -115,6 +115,7 @@ struct _CamelIMAPPEngine {
        CamelIMAPPCommand *literal;/* current literal op */
        EDList active;          /* active queue */
        EDList queue;           /* outstanding queue */
+       EDList done;            /* done queue, awaiting reclamation */
 
        /* keep track of running a select */
        struct _CamelIMAPPSelectResponse *select_response;
index 4abc633..6b0cdd2 100644 (file)
@@ -74,6 +74,8 @@ CamelServiceAuthType camel_imapp_password_authtype = {
 void
 camel_imapp_module_init(CamelSession *session)
 {
+       extern void camel_exception_setup(void);
+
        imapp_provider.object_types[CAMEL_PROVIDER_STORE] = camel_imapp_store_get_type();
        imapp_provider.url_hash = camel_url_hash;
        imapp_provider.url_equal = camel_url_equal;
@@ -81,6 +83,10 @@ camel_imapp_module_init(CamelSession *session)
        imapp_provider.authtypes = g_list_prepend(imapp_provider.authtypes, camel_sasl_authtype_list(FALSE));
        imapp_provider.authtypes = g_list_prepend(imapp_provider.authtypes, &camel_imapp_password_authtype);
 
+       /* blah ... could just use it in object setup? */
+       /* TEMPORARY */
+       camel_exception_setup();
+
        camel_session_register_provider(session, &imapp_provider);
 }
 
index ae02bcb..9123102 100644 (file)
@@ -337,203 +337,6 @@ imap_query_auth_types (CamelService *service, CamelException *ex)
        return types;
 }
 
-#if 0
-static int
-try_sasl(CamelIMAPPStore *store, const char *mech, CamelException *ex)
-{
-       CamelIMAPPStream *stream = store->engine->stream;
-       unsigned char *line, *resp;
-       CamelSasl *sasl;
-       unsigned int len;
-       int ret;
-
-       sasl = camel_sasl_new("imap", mech, (CamelService *)store);
-       if (sasl == NULL) {
-               camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-                                    _("Unable to connect to POP server.\n"
-                                      "No support for requested "
-                                      "authentication mechanism."));
-               return -1;
-       }
-
-       if (camel_stream_printf((CamelStream *)stream, "AUTH %s\r\n", mech) == -1)
-               goto ioerror;
-
-       while (1) {
-               if (camel_imapp_stream_line(stream, &line, &len) == -1)
-                       goto ioerror;
-               if (strncmp(line, "+OK", 3) == 0)
-                       break;
-               if (strncmp(line, "-ERR", 4) == 0) {
-                       camel_exception_setv(ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-                                            _("SASL `%s' Login failed: %s"), mech, line);
-                       goto done;
-               }
-               /* If we dont get continuation, or the sasl object's run out of work, or we dont get a challenge,
-                  its a protocol error, so fail, and try reset the server */
-               if (strncmp(line, "+ ", 2) != 0
-                   || camel_sasl_authenticated(sasl)
-                   || (resp = camel_sasl_challenge_base64(sasl, line+2, ex)) == NULL) {
-                       camel_stream_printf((CamelStream *)stream, "*\r\n");
-                       camel_imapp_stream_line(stream, &line, &len);
-                       camel_exception_setv(ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-                                            _("SASL Protocol error"));
-                       goto done;
-               }
-
-               ret = camel_stream_printf((CamelStream *)stream, "%s\r\n", resp);
-               g_free(resp);
-               if (ret == -1)
-                       goto ioerror;
-
-       }
-       camel_object_unref((CamelObject *)sasl);
-       return 0;
-
-ioerror:
-       camel_exception_setv(ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-                            _("I/O Error: %s"), strerror(errno));
-done:
-       camel_object_unref((CamelObject *)sasl);
-       return -1;
-}
-
-static gboolean
-imap_try_authenticate (CamelService *service, const char *errmsg, CamelException *ex)
-{
-       CamelIMAPPStore *store = (CamelIMAPPStore *)service;
-       CamelIMAPPCommand *pcu = NULL, *pcp = NULL;
-       int status;
-       
-       /* override, testing only */
-       /*printf("Forcing authmech to 'login'\n");
-       service->url->authmech = g_strdup("LOGIN");*/
-
-       if (!service->url->passwd) {
-               char *prompt;
-               
-               prompt = g_strdup_printf (_("%sPlease enter the POP password for %s@%s"),
-                                         errmsg ? errmsg : "",
-                                         service->url->user,
-                                         service->url->host);
-               service->url->passwd = camel_session_get_password (camel_service_get_session (service),
-                                                                  prompt, TRUE, service, "password", ex);
-               g_free (prompt);
-               if (!service->url->passwd)
-                       return FALSE;
-       }
-
-       if (!service->url->authmech) {
-               /* pop engine will take care of pipelining ability */
-               pcu = camel_imapp_engine_command_new(store->engine, 0, NULL, NULL, "USER %s\r\n", service->url->user);
-               pcp = camel_imapp_engine_command_new(store->engine, 0, NULL, NULL, "PASS %s\r\n", service->url->passwd);
-       } else if (strcmp(service->url->authmech, "+APOP") == 0 && store->engine->apop) {
-               char *secret, md5asc[33], *d;
-               unsigned char md5sum[16], *s;
-               
-               secret = alloca(strlen(store->engine->apop)+strlen(service->url->passwd)+1);
-               sprintf(secret, "%s%s",  store->engine->apop, service->url->passwd);
-               md5_get_digest(secret, strlen (secret), md5sum);
-
-               for (s = md5sum, d = md5asc; d < md5asc + 32; s++, d += 2)
-                       sprintf (d, "%.2x", *s);
-               
-               pcp = camel_imapp_engine_command_new(store->engine, 0, NULL, NULL, "APOP %s %s\r\n", service->url->user, md5asc);
-       } else {
-               CamelServiceAuthType *auth;
-               GList *l;
-
-               l = store->engine->auth;
-               while (l) {
-                       auth = l->data;
-                       if (strcmp(auth->authproto, service->url->authmech) == 0)
-                               return try_sasl(store, service->url->authmech, ex) == -1;
-                       l = l->next;
-               }
-
-               camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-                                    _("Unable to connect to POP server.\n"
-                                      "No support for requested "
-                                      "authentication mechanism."));
-               return FALSE;
-       }
-       
-       while ((status = camel_imapp_engine_iterate (store->engine, pcp)) > 0)
-               ;
-       
-       if (pcp->state != CAMEL_IMAPP_COMMAND_OK) {
-               if (status == -1)
-                       camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-                                             _("Unable to connect to POP server.\nError sending password: %s"),
-                                             errno ? g_strerror (errno) : _("Unknown error"));
-               else
-                       camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-                                             _("Unable to connect to POP server.\nError sending password: %s"),
-                                             store->engine->line);
-       }
-       camel_imapp_engine_command_free(store->engine, pcp);
-
-       if (pcu)
-               camel_imapp_engine_command_free(store->engine, pcu);
-
-       return status;
-}
-#endif
-
-static gboolean
-imap_login(CamelService *service, char *msg)
-{
-       CamelIMAPPStore *store = (CamelIMAPPStore *)service;
-       CamelIMAPPCommand * volatile ic = NULL;
-
-       /* override, testing only */
-       /*printf("Forcing authmech to 'login'\n");
-       service->url->authmech = g_strdup("LOGIN");*/
-
-       CAMEL_TRY {
-               if (!service->url->passwd) {
-                       char *prompt;
-                       CamelException *ex = camel_exception_new();
-               
-                       prompt = g_strdup_printf (_("%sPlease enter the IMAP password for %s@%s"),
-                                                 msg?msg:"",
-                                                 service->url->user,
-                                                 service->url->host);
-                       service->url->passwd = camel_session_get_password(camel_service_get_session(service), prompt, FALSE, TRUE, service, "password", ex);
-                       g_free (prompt);
-                       if (camel_exception_is_set(ex))
-                               camel_exception_throw_ex(ex);
-               }
-
-               if (service->url->authmech) {
-                       CamelSasl *sasl = camel_sasl_new("imap", service->url->authmech, service);
-
-                       if (sasl == NULL)
-                               camel_exception_throw(1, "unsupported authentication mechanism: %s", service->url->authmech);
-                       ic = camel_imapp_engine_command_new(store->driver->engine, "AUTHENTICATE", NULL, "AUTHENTICATE %A", sasl);
-                       camel_object_unref((CamelObject *)sasl);
-               } else {
-                       ic = camel_imapp_engine_command_new(store->driver->engine, "LOGIN", NULL, "LOGIN %s %s", service->url->user, service->url->passwd);
-               }
-
-               camel_imapp_engine_command_queue(store->driver->engine, ic);
-               while (camel_imapp_engine_iterate(store->driver->engine, ic) > 0)
-                       ;
-
-               if (ic->status->result != IMAP_OK)
-                       camel_exception_throw(CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE, "Login failed: %s", ic->status->text);
-       } CAMEL_CATCH(ex) {
-               if (ic)
-                       camel_imapp_engine_command_free(store->driver->engine, ic);
-               camel_exception_throw_ex(ex);
-       } CAMEL_DONE;
-
-       if (ic)
-               camel_imapp_engine_command_free(store->driver->engine, ic);
-
-       return TRUE;
-}
-
 static void
 store_get_pass(CamelIMAPPStore *store)
 {
@@ -977,24 +780,6 @@ imap_create_folder(CamelStore *store, const char *parent_name, const char *folde
 }
 
 /* ********************************************************************** */
-
-static int store_resp_list(CamelIMAPPEngine *ie, guint32 id, void *data)
-{
-       struct _list_info *linfo;
-       CamelIMAPPStore *istore = data;
-
-       linfo = imap_parse_list(ie->stream);
-       printf("store list:  '%s' ('%c')\n", linfo->name, linfo->separator);
-       if (istore->pending_list)
-               g_ptr_array_add(istore->pending_list, linfo);
-       else {
-               g_warning("unexpected list response\n");
-               imap_free_list(linfo);
-       }
-
-       return camel_imapp_engine_skip(ie);
-}
-
 #if 0
 static int store_resp_fetch(CamelIMAPPEngine *ie, guint32 id, void *data)
 {
index a9567bf..20876be 100644 (file)
@@ -70,9 +70,9 @@ stream_fill(CamelIMAPPStream *is)
                }
        }
 
-       printf("camel_imapp_read: 0\n");
+       printf("camel_imapp_read: -1\n");
 
-       return 0;
+       return -1;
 }
 
 static ssize_t