X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=odmr.c;h=d495e9cd0223713270710c20acb0a601c75f4178;hb=e4dd196b137223195739b9e0f50ec2a8a02b3534;hp=c007b185c50d1ad283838fa9fe29a40cff565c27;hpb=366eb7b3a91d53282f0b1007913a55be236a322e;p=~andy%2Ffetchmail diff --git a/odmr.c b/odmr.c index c007b185..d495e9cd 100644 --- a/odmr.c +++ b/odmr.c @@ -16,7 +16,6 @@ #include #endif #include -#include #ifdef HAVE_NET_SELECT_H /* AIX needs this */ #include #endif @@ -28,6 +27,7 @@ #include #include "i18n.h" #include "fetchmail.h" +#include "sdump.h" #include "smtp.h" #include "socket.h" @@ -36,7 +36,8 @@ static int odmr_ok (int sock, char *argbuf) { int ok; - ok = SMTP_ok(sock); + (void)argbuf; + ok = SMTP_ok(sock, SMTP_MODE, TIMEOUT_DEFAULT); if (ok == SM_UNRECOVERABLE) return(PS_PROTOCOL); else @@ -52,7 +53,8 @@ static int odmr_getrange(int sock, struct query *ctl, const char *id, char buf [MSGBUFSIZE+1]; struct idlist *qnp; /* pointer to Q names */ - if ((ok = SMTP_ehlo(sock, fetchmailhost, + (void)id; + if ((ok = SMTP_ehlo(sock, SMTP_MODE, fetchmailhost, ctl->server.esmtp_name, ctl->server.esmtp_password, &opts))) { @@ -125,9 +127,12 @@ static int odmr_getrange(int sock, struct query *ctl, const char *id, report(stderr, GT_("Authentication required.\n")); return(PS_AUTHFAIL); - default: - report(stderr, GT_("Unknown ODMR error %d\n"), atoi(buf)); - return(PS_PROTOCOL); + default: { + char *t = sdump(buf, strlen(buf)); + report(stderr, GT_("Unknown ODMR error \"%s\"\n"), t); + xfree(t); + return(PS_PROTOCOL); + } } /* @@ -137,7 +142,7 @@ static int odmr_getrange(int sock, struct query *ctl, const char *id, * instead, we'll use select(2) to watch the read sides of both * sockets and just throw their data at each other. */ - if ((smtp_sock = smtp_open(ctl)) == -1) + if ((smtp_sock = smtp_setup(ctl)) == -1) return(PS_SOCKET); else { @@ -147,7 +152,6 @@ static int odmr_getrange(int sock, struct query *ctl, const char *id, { fd_set readfds; struct timeval timeout; - char buf[MSGBUFSIZE]; FD_ZERO(&readfds); FD_SET(sock, &readfds); @@ -184,7 +188,8 @@ static int odmr_getrange(int sock, struct query *ctl, const char *id, if (!doing_smtp_data && !strncmp(buf, "354", 3)) { doing_smtp_data = 1; - report(stdout, "receiving message data\n"); + if (outlevel > O_SILENT) + report(stdout, GT_("receiving message data\n")); } else if (doing_smtp_data) doing_smtp_data = 0; @@ -208,28 +213,25 @@ static int odmr_logout(int sock, struct query *ctl) return(PS_SUCCESS); } -const static struct method odmr = +static const struct method odmr = { "ODMR", /* ODMR protocol */ -#if INET6_ENABLE - "odmr", /* standard SMTP port */ - "odmrs", /* ssl SMTP port */ -#else /* INET6_ENABLE */ - 366, /* standard SMTP port */ - 2366, /* ssl SMTP port (BOGUS! RANDOM VALUE) */ -#endif /* INET6_ENABLE */ + "odmr", /* standard ODMR port */ + "odmrs", /* ssl ODMR port */ FALSE, /* this is not a tagged protocol */ FALSE, /* this does not use a message delimiter */ odmr_ok, /* parse command response */ NULL, /* no need to get authentication */ odmr_getrange, /* initialize message sending */ NULL, /* we cannot get a list of sizes */ + NULL, /* we cannot get a list of sizes of subsets */ NULL, /* how do we tell a message is old? */ NULL, /* no way to fetch headers */ NULL, /* no way to fetch body */ NULL, /* no message trailer */ NULL, /* how to delete a message */ NULL, /* how to mark a message as seen */ + NULL, /* no mailbox support */ odmr_logout, /* log out, we're done */ FALSE, /* no, we can't re-poll */ }; @@ -248,7 +250,7 @@ int doODMR (struct query *ctl) return(PS_SYNTAX); } if (ctl->mailboxes->id) { - fprintf(stderr, GT_("Option --remote is not supported with ODMR\n")); + fprintf(stderr, GT_("Option --folder is not supported with ODMR\n")); return(PS_SYNTAX); } if (check_only) {