about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2012-01-04 21:39:46 +0100
committerAlexander Barton <alex@barton.de>2012-01-04 21:39:46 +0100
commitb24d645ca183194b0158cd7bba1e0c1f468a7de9 (patch)
tree2e2d8bd1863839b90af9322f4fbe3d56a6886265
parent1bb2fbedcc975aa6e424fd201f59a178a03d45b0 (diff)
downloadngircd-b24d645ca183194b0158cd7bba1e0c1f468a7de9.tar.gz
ngircd-b24d645ca183194b0158cd7bba1e0c1f468a7de9.zip
Conn_SetPenalty(): Add new "penalty time" on each function call
Until now, the penalty time has only been set when longer as the
already set one, so it didn't accumulate.

And add documentation for and clean up code in Conn_SetPenalty() and
Conn_ResetPenalty() functions.
-rw-r--r--src/ngircd/conn-func.c51
1 files changed, 36 insertions, 15 deletions
diff --git a/src/ngircd/conn-func.c b/src/ngircd/conn-func.c
index 8b0b6f71..32001f08 100644
--- a/src/ngircd/conn-func.c
+++ b/src/ngircd/conn-func.c
@@ -65,35 +65,56 @@ Conn_LastPing( CONN_ID Idx )
 } /* Conn_LastPing */
 
 
+/**
+ * Add "penalty time" for a connection.
+ *
+ * During the "penalty time" the socket is ignored completely, no new data
+ * is read. This function only increases the penalty, it is not possible to
+ * decrease the penalty time.
+ *
+ * @param Idex Connection index.
+ * @param Seconds Seconds to add.
+ * @see Conn_ResetPenalty
+ */
 GLOBAL void
-Conn_SetPenalty( CONN_ID Idx, time_t Seconds )
+Conn_SetPenalty(CONN_ID Idx, time_t Seconds)
 {
-	/* set Penalty-Delay for a socket.
-	 * during the penalty, the socket is ignored completely, no new
-	 * data is read. This function only increases the penalty, it is
-	 * not possible to decrease the penalty time.
-	 */
 	time_t t;
-	
-	assert( Idx > NONE );
-	assert( Seconds >= 0 );
 
-	t = time( NULL ) + Seconds;
-	if (t > My_Connections[Idx].delaytime)
+	assert(Idx > NONE);
+	assert(Seconds >= 0);
+
+	t = time(NULL);
+	if (My_Connections[Idx].delaytime < t)
 		My_Connections[Idx].delaytime = t;
 
+	My_Connections[Idx].delaytime += Seconds;
+
 #ifdef DEBUG
-	Log(LOG_DEBUG, "Add penalty time on connection %d: %ld second(s).",
-			Idx, (long)Seconds);
+	Log(LOG_DEBUG,
+	    "Add penalty time on connection %d: %ld second%s, total %ld second%s.",
+	    Idx, (long)Seconds, Seconds != 1 ? "s" : "",
+	    My_Connections[Idx].delaytime - t,
+	    My_Connections[Idx].delaytime - t != 1 ? "s" : "");
 #endif
 } /* Conn_SetPenalty */
 
 
+/**
+ * Reset the "penalty time" for one connection.
+ *
+ * @param Idx Connection index.
+ * @see Conn_SetPenalty
+ */
 GLOBAL void
-Conn_ResetPenalty( CONN_ID Idx )
+Conn_ResetPenalty(CONN_ID Idx)
 {
-	assert( Idx > NONE );
+	assert(Idx > NONE);
+
 	My_Connections[Idx].delaytime = 0;
+#ifdef DEBUG
+	Log(LOG_DEBUG, "Penalty time on connection %d has been reset.");
+#endif
 } /* Conn_ResetPenalty */