0.8.9claws18
[claws.git] / src / plugins / spamassassin / libspamc.h
index 3ea33f2..1d7b4d0 100644 (file)
@@ -1,20 +1,17 @@
-#ifndef LIBSPAMC_H
-#define LIBSPAMC_H 1
-
-#include "../config.h"
-#include <sys/types.h>
-#include <sys/socket.h>
-
 /*
  * This code is copyright 2001 by Craig Hughes
  * Conversion to a thread-safe shared library copyright 2002 Liam Widdowson
  * Portions copyright 2002 by Brad Jorsch
- * It is licensed for use with SpamAssassin according to the terms of the
- * Perl Artistic License
- * The text of this license is included in the SpamAssassin distribution in
- * the file named "License"
+ * It is licensed under the same license as Perl itself.  The text of this
+ * license is included in the SpamAssassin distribution in the file named
+ * "License".
  */
+#ifndef LIBSPAMC_H
+#define LIBSPAMC_H 1
 
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
 #include <stdio.h>
 
 #define EX_ISSPAM       1
@@ -26,8 +23,9 @@
 #define SPAMC_RAW_MODE       0
 #define SPAMC_BSMTP_MODE     1
 
-#define SPAMC_SAFE_FALLBACK  1<<30
-#define SPAMC_CHECK_ONLY     1<<31
+#define SPAMC_USE_SSL       1<<27
+#define SPAMC_SAFE_FALLBACK  1<<28
+#define SPAMC_CHECK_ONLY     1<<29
 
 /* Aug 14, 2002 bj: A struct for storing a message-in-progress */
 typedef enum {
@@ -41,6 +39,7 @@ typedef enum {
 struct message {
     /* Set before passing the struct on! */
     int max_len;  /* messages larger than this will return EX_TOOBIG */
+    int timeout;  /* timeout for read() system calls */
 
     /* Filled in by message_read */
     message_type_t type;
@@ -82,6 +81,22 @@ int message_filter(const struct sockaddr *addr, char *username, int flags, struc
  * else an error EX. */
 int lookup_host(const char *hostname, int port, struct sockaddr *a);
 
+/* Pass the message through one of a set of spamd's. This variant will handle
+ * multiple spamd machines; if a connect failure occurs, it will fail-over to
+ * the next one in the struct hostent. Otherwise identical to message_filter().
+ */
+int message_filter_with_failover (const struct hostent *hent, int port, char
+    *username, int flags, struct message *m);
+
+/* Convert the host into a struct hostent, for use with
+ * message_filter_with_failover() above. Returns EX_OK on success, or else an
+ * error EX.  Note that the data filled into hent is from gethostbyname()'s
+ * static storage, so any call to gethostbyname() between
+ * lookup_host_for_failover() and message_filter_with_failover() will overwrite
+ * this.  Take a copy, and use that instead, if you think a call may occur in
+ * your code, or library code that you use (such as syslog()). */
+int lookup_host_for_failover(const char *hostname, struct hostent *hent);
+
 /* Dump the message. If there is any data in the message (typically, m->type
  * will be MESSAGE_ERROR) it will be message_writed. Then, fd_in will be piped
  * to fd_out intol EOF. This is particularly useful if you get back an