Enlightenment CVS committal
Author : tsauerbeck
Project : misc
Module : embrace
Dir : misc/embrace/src/plugins/pop3
Modified Files:
pop3.c
Log Message:
The POP3 plugin will now tell you about connection problems. ERR messages from the
server will be put on stderr now
===================================================================
RCS file: /cvsroot/enlightenment/misc/embrace/src/plugins/pop3/pop3.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- pop3.c 31 Mar 2004 18:28:47 -0000 1.4
+++ pop3.c 9 Apr 2004 10:21:37 -0000 1.5
@@ -1,5 +1,5 @@
/*
- * $Id: pop3.c,v 1.4 2004/03/31 18:28:47 tsauerbeck Exp $
+ * $Id: pop3.c,v 1.5 2004/04/09 10:21:37 tsauerbeck Exp $
*
* Copyright (C) 2004 Embrace project.
*
@@ -28,6 +28,15 @@
#include <embrace_plugin.h>
+typedef enum {
+ STATE_DISCONNECTED,
+ STATE_CONNECTED,
+ STATE_SERVER_READY,
+ STATE_USER_OK,
+ STATE_PASS_OK,
+ STATE_STAT_OK
+} State;
+
#define IDENT "EMBRACE_POP3_PLUGIN"
#define MAX_INTERVAL 300
@@ -35,20 +44,12 @@
{
Ecore_Con_Event_Server_Add *ev = event;
MailBox *mb;
- char buf[256];
- int len;
if (strcmp ((char *) udata, IDENT))
return 1;
mb = ecore_con_server_data_get (ev->server);
-
- /* now login to the server */
- len = snprintf (buf, sizeof (buf), "USER %s\r\nPASS %s\r\n",
- (char *) mailbox_property_get (mb, "user"),
- (char *) mailbox_property_get (mb, "pass"));
-
- ecore_con_server_send (ev->server, buf, len);
+ mailbox_property_set (mb, "state", (void *) STATE_CONNECTED);
return 0;
}
@@ -57,37 +58,89 @@
{
Ecore_Con_Event_Server_Data *ev = event;
MailBox *mb;
- char buf[2048];
+ State state;
+ char inbuf[2048], outbuf[256];
int num = 0, size = 0, len;
if (strcmp ((char *) udata, IDENT))
return 1;
mb = ecore_con_server_data_get (ev->server);
+ state = (State) mailbox_property_get (mb, "state");
/* take the data and make a NUL-terminated string out of it */
- len = sizeof (buf) - 1;
+ len = sizeof (inbuf) - 1;
len = MIN(len, ev->size);
- memcpy (buf, ev->data, len);
- buf[len] = 0;
+ memcpy (inbuf, ev->data, len);
+ inbuf[len] = 0;
+ embrace_strstrip (inbuf);
- /* check for the STAT response */
- if (sscanf (buf, "+OK %i %i", &num, &size) == 2) {
- mailbox_unseen_set (mb, num);
- mailbox_total_set (mb, num);
+ if (!strncmp (inbuf, "-ERR", 4)) {
+ fprintf (stderr, "[pop3] error: %s\n", &inbuf[5]);
+ return 0;
+ } else if (strncmp (inbuf, "+OK", 3)) {
+ assert (false);
+ return 0;
+ }
- ecore_con_server_send (ev->server, "QUIT", 4);
- ecore_con_server_del (ev->server);
+ mailbox_property_set (mb, "state", (void *) ++state);
- return 0;
+ switch (state) {
+ case STATE_DISCONNECTED:
+ case STATE_CONNECTED:
+ assert (false);
+ break;
+ case STATE_SERVER_READY:
+ len = snprintf (outbuf, sizeof (outbuf), "USER %s\r\n",
+ (char *) mailbox_property_get (mb, "user"));
+ ecore_con_server_send (ev->server, outbuf, len);
+ break;
+ case STATE_USER_OK:
+ len = snprintf (outbuf, sizeof (outbuf), "PASS %s\r\n",
+ (char *) mailbox_property_get (mb, "pass"));
+ ecore_con_server_send (ev->server, outbuf, len);
+ break;
+ case STATE_PASS_OK:
+ len = snprintf (outbuf, sizeof (outbuf), "STAT\r\n");
+ ecore_con_server_send (ev->server, outbuf, len);
+ break;
+ case STATE_STAT_OK:
+ if (sscanf (inbuf, "+OK %i %i", &num, &size) == 2) {
+ mailbox_unseen_set (mb, num);
+ mailbox_total_set (mb, num);
+
+ ecore_con_server_send (ev->server, "QUIT", 4);
+ ecore_con_server_del (ev->server);
+ }
+
+ break;
}
- if (!strncmp (buf, "+OK", 3)) {
- len = snprintf (buf, sizeof (buf), "STAT\r\n");
- ecore_con_server_send (ev->server, buf, len);
+ return 0;
+}
+
+static int on_server_del (void *udata, int type, void *event)
+{
+ Ecore_Con_Event_Server_Del *ev = event;
+ MailBox *mb;
+ char *host;
+
+ if (strcmp ((char *) udata, IDENT))
+ return 1;
+
+ mb = ecore_con_server_data_get (ev->server);
+ host = (char *) mailbox_property_get (mb, "host");
+
+ if (mailbox_property_get (mb, "state") == STATE_DISCONNECTED)
+ fprintf (stderr, "[pop3] cannot connect to '%s'\n", host);
+ else {
+ mailbox_property_set (mb, "state", STATE_DISCONNECTED);
+ fprintf (stderr, "[pop3] lost connection to '%s'\n", host);
}
+ ecore_con_server_del (ev->server);
+
return 0;
}
@@ -104,10 +157,11 @@
assert (port);
#ifdef HAVE_OPENSSL
- if ((int) mailbox_property_get (mb, "ssl"))
+ if (mailbox_property_get (mb, "ssl"))
type |= ECORE_CON_USE_SSL;
#endif
+ mailbox_property_set (mb, "state", STATE_DISCONNECTED);
ecore_con_server_connect (type, host, port, mb);
return true;
@@ -226,6 +280,8 @@
on_server_add, IDENT);
ecore_event_handler_add (ECORE_CON_EVENT_SERVER_DATA,
on_server_data, IDENT);
+ ecore_event_handler_add (ECORE_CON_EVENT_SERVER_DEL,
+ on_server_del, IDENT);
return true;
}
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs