URL_FLAG_NOHTML}
};
+/* Hash table implementation */
+__KHASH_IMPL (rspamd_url_hash, kh_inline,struct rspamd_url *, char, false,
+ rspamd_url_hash, rspamd_urls_cmp);
+__KHASH_IMPL (rspamd_url_host_hash, kh_inline,struct rspamd_url *, char, false,
+ rspamd_url_host_hash, rspamd_urls_host_cmp);
+
struct url_callback_data {
const gchar *begin;
gchar *url_str;
return TRUE;
}
-guint
+inline guint
rspamd_url_hash (gconstpointer u)
{
const struct rspamd_url *url = u;
return 0;
}
-guint
+inline guint
rspamd_url_host_hash (gconstpointer u)
{
const struct rspamd_url *url = u;
return 0;
}
-guint
+inline guint
rspamd_email_hash (gconstpointer u)
{
const struct rspamd_url *url = u;
}
/* Compare two emails for building emails tree */
-gboolean
+inline gboolean
rspamd_emails_cmp (gconstpointer a, gconstpointer b)
{
const struct rspamd_url *u1 = a, *u2 = b;
return FALSE;
}
-gboolean
+inline gboolean
rspamd_urls_cmp (gconstpointer a, gconstpointer b)
{
const struct rspamd_url *u1 = a, *u2 = b;
return r == 0;
}
-gboolean
+inline gboolean
rspamd_urls_host_cmp (gconstpointer a, gconstpointer b)
{
const struct rspamd_url *u1 = a, *u2 = b;
return ret;
}
+
+
+bool
+rspamd_url_set_add_or_increase (khash_t (rspamd_url_hash) *set,
+ struct rspamd_url *u)
+{
+ khiter_t k;
+ gint r;
+
+ k = kh_put (rspamd_url_hash, set, u, &r);
+
+ if (r == 0) {
+ struct rspamd_url *ex = kh_key (set, k);
+
+ ex->count ++;
+
+ return false;
+ }
+
+ return true;
+}
+
+bool
+rspamd_url_set_has (khash_t (rspamd_url_hash) *set, struct rspamd_url *u)
+{
+ khiter_t k;
+
+ k = kh_get (rspamd_url_hash, set, u);
+
+ if (k == kh_end (set)) {
+ return false;
+ }
+
+ return true;
+}
\ No newline at end of file
#include "config.h"
#include "mem_pool.h"
+#include "khash.h"
#include "fstring.h"
#ifdef __cplusplus
*/
enum rspamd_url_protocol rspamd_url_protocol_from_string (const gchar *str);
+/* Defines sets of urls indexed by url as is */
+KHASH_DECLARE (rspamd_url_hash, struct rspamd_url *, char);
+KHASH_DECLARE (rspamd_url_host_hash, struct rspamd_url *, char);
+
+/* Convenience functions for url sets */
+/**
+ * Add an url to set or increase the existing url count
+ * @param set
+ * @param u
+ * @return true if a new url has been added
+ */
+bool rspamd_url_set_add_or_increase (khash_t (rspamd_url_hash) *set,
+ struct rspamd_url *u);
+/**
+ * Checks if a url is in set
+ * @param set
+ * @param u
+ * @return
+ */
+bool rspamd_url_set_has (khash_t (rspamd_url_hash) *set, struct rspamd_url *u);
+
#ifdef __cplusplus
}
#endif