]> source.dussan.org Git - rspamd.git/commitdiff
Add parsing of multiple upstreams string.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 29 Oct 2014 13:58:33 +0000 (13:58 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 29 Oct 2014 13:58:33 +0000 (13:58 +0000)
src/libutil/upstream.c
src/libutil/upstream.h

index 43f2bcfcc2acb7a0c2f80e9e854cc2ad6c1a584f..5b86628b271b4186e34d16c1f6809013087c0216 100644 (file)
@@ -329,6 +329,33 @@ rspamd_upstreams_add_upstream (struct upstream_list *ups,
        return TRUE;
 }
 
+gboolean
+rspamd_upstreams_parse_line (struct upstream_list *ups,
+               const gchar *str, guint16 def_port, void *data)
+{
+       const gchar *end = str + strlen (str), *p = str;
+       const gchar *separators = ";, \n\r\t";
+       gchar *tmp;
+       guint len;
+       gboolean ret = FALSE;
+
+       while (p < end) {
+               len = strcspn (p, separators);
+               if (len > 0) {
+                       tmp = g_malloc (len + 1);
+                       rspamd_strlcpy (tmp, p, len + 1);
+                       if (rspamd_upstreams_add_upstream (ups, tmp, def_port, data)) {
+                               ret = TRUE;
+                       }
+               }
+               p += len + 1;
+               /* Skip separators */
+               p += strspn (p, separators) + 1;
+       }
+
+       return ret;
+}
+
 void
 rspamd_upstreams_destroy (struct upstream_list *ups)
 {
index cc4462878ac9832eacdd849ec8dd3a06fbabb765..a5e3715f9fcd2fcc65ce366f9458f5a21f36e8a3 100644 (file)
@@ -51,10 +51,11 @@ struct upstream_list* rspamd_upstreams_create (void);
  * @param ups
  */
 void rspamd_upstreams_destroy (struct upstream_list *ups);
+
 /**
  * Add upstream from the string
  * @param ups upstream list
- * @param str string in format "name[:port[:priority]]
+ * @param str string in format "name[:port[:priority]]"
  * @param def_port default port number
  * @param data optional userdata
  * @return TRUE if upstream has been added
@@ -62,6 +63,17 @@ void rspamd_upstreams_destroy (struct upstream_list *ups);
 gboolean rspamd_upstreams_add_upstream (struct upstream_list *ups,
                const gchar *str, guint16 def_port, void *data);
 
+/**
+ * Add multiple upstreams from comma, semicolon or space separated line
+ * @param ups upstream list
+ * @param str string in format "(<ups>([<sep>+]<ups>)*)+"
+ * @param def_port default port number
+ * @param data optional userdata
+ * @return TRUE if **any** of upstreams has been added
+ */
+gboolean rspamd_upstreams_parse_line (struct upstream_list *ups,
+               const gchar *str, guint16 def_port, void *data);
+
 /**
  * Returns the current IP address of the upstream
  * @param up