diff mcabber/libjabber/rate.c @ 417:c3ae9251c197

Sync libjabber with upstream Sync with jabberd-1.4.4.
author Mikael Berthe <mikael@lilotux.net>
date Thu, 01 Sep 2005 23:29:21 +0200
parents ec86d759ed54
children
line wrap: on
line diff
--- a/mcabber/libjabber/rate.c	Thu Sep 01 21:18:19 2005 +0200
+++ b/mcabber/libjabber/rate.c	Thu Sep 01 23:29:21 2005 +0200
@@ -13,8 +13,29 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  *
- *  Jabber
- *  Copyright (C) 1998-1999 The Jabber Team http://jabber.org/
+ * Copyrights
+ *
+ * Portions created by or assigned to Jabber.com, Inc. are
+ * Copyright (c) 1999-2002 Jabber.com, Inc.  All Rights Reserved.  Contact
+ * information for Jabber.com, Inc. is available at http://www.jabber.com/.
+ *
+ * Portions Copyright (c) 1998-1999 Jeremie Miller.
+ *
+ * Acknowledgements
+ *
+ * Special thanks to the Jabber Open Source Contributors for their
+ * suggestions and support of Jabber.
+ *
+ */
+
+/**
+ * create a new instance of jlimit that is used to limit events
+ *
+ * limit the events to maxp points per maxt seconds
+ *
+ * @param maxt time interval (in seconds) after which the points are cleared
+ * @param maxp maximum number of points available for the time interval given in maxt
+ * @return new instance of jlimit (has to be freed with jlimit_free if not used anymore)
  */
 
 #include "jabber.h"
@@ -35,15 +56,31 @@
     return r;
 }
 
+/**
+ * free a jlimit instance
+ *
+ * @param r the jlimit instance that should be freed
+ */
 void jlimit_free(jlimit r)
 {
     if(r != NULL)
     {
-	if(r->key != NULL) free(r->key);
-	pool_free(r->p);
+        if(r->key != NULL) free(r->key);
+        pool_free(r->p);
     }
 }
 
+/**
+ * update/check a key in a jlimit instance
+ *
+ * Each jlimit instance can track many limits (that have the same setup).
+ * The limit is selected by the key, which can be an IP address.
+ *
+ * @param r the jlimit instance
+ * @param key for which key the limit should be checked
+ * @param points how many points of the limit should be consumed
+ * @return 1 if limit reached, 0 if we are still within the rate limit
+ */
 int jlimit_check(jlimit r, char *key, int points)
 {
     int now = time(NULL);
@@ -53,15 +90,15 @@
     /* make sure we didn't go over the time frame or get a null/new key */
     if((now - r->start) > r->maxt || key == NULL || j_strcmp(key,r->key) != 0)
     { /* start a new key */
-	free(r->key);
-	if(key != NULL)
-	  /* We use strdup instead of pstrdup since r->key needs to be free'd before
-	     and more often than the rest of the rlimit structure */
-	    r->key = strdup(key);
-	else
-	    r->key = NULL;
-	r->start = now;
-	r->points = 0;
+        free(r->key);
+        if(key != NULL)
+          /* We use strdup instead of pstrdup since r->key needs to be free'd before
+             and more often than the rest of the rlimit structure */
+            r->key = strdup(key);
+        else
+            r->key = NULL;
+        r->start = now;
+        r->points = 0;
     }
 
     r->points += points;
@@ -69,7 +106,7 @@
     /* if we're within the time frame and over the point limit */
     if(r->points > r->maxp && (now - r->start) < r->maxt)
     {
-	return 1; /* we don't reset the rate here, so that it remains rated until the time runs out */
+        return 1; /* we don't reset the rate here, so that it remains rated until the time runs out */
     }
 
     return 0;