aboutsummaryrefslogtreecommitdiffstats
path: root/pop3.c
diff options
context:
space:
mode:
Diffstat (limited to 'pop3.c')
-rw-r--r--pop3.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/pop3.c b/pop3.c
index c3b2da60..b898986b 100644
--- a/pop3.c
+++ b/pop3.c
@@ -186,7 +186,41 @@ int *countp, *newp;
return(0);
}
+static int *pop3_getsizes(socket, count)
+/* capture the sizes of all messages */
+int socket;
+int count;
+{
+ int ok, *sizes;
+
+ if ((ok = gen_transact(socket, "LIST")) != 0)
+ return((int *)NULL);
+ else if ((sizes = (int *)malloc(sizeof(int) * count)) == (int *)NULL)
+ return((int *)NULL);
+ else
+ {
+ char buf [POPBUFSIZE+1];
+
+ while (SockGets(socket, buf, sizeof(buf)) >= 0)
+ {
+ int num, size;
+
+ if (outlevel == O_VERBOSE)
+ fprintf(stderr,"%s\n",buf);
+ if (buf[0] == '.')
+ break;
+ else if (sscanf(buf, "%d %d", &num, &size) == 2)
+ sizes[num - 1] = size;
+ else
+ sizes[num - 1] = -1;
+ }
+
+ return(sizes);
+ }
+}
+
static int pop3_is_old(socket, queryctl, num)
+/* is the goiven message old? */
int socket;
struct hostrec *queryctl;
int num;
@@ -240,6 +274,7 @@ const static struct method pop3 =
pop3_ok, /* parse command response */
pop3_getauth, /* get authorization */
pop3_getrange, /* query range of messages */
+ pop3_getsizes, /* we can get a list of sizes */
pop3_is_old, /* how do we tell a message is old? */
pop3_fetch, /* request given message */
NULL, /* no message trailer */