]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/conn.c
New configuration option "OperServerMode".
[ngircd-alex.git] / src / ngircd / conn.c
index 6a9c25f12420fbb6e4473e5809ebbf86302cb36f..ba874f8a71bd5f57b9b13595677494f88c6b9d80 100644 (file)
@@ -16,7 +16,7 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: conn.c,v 1.140 2004/10/20 13:47:32 alex Exp $";
+static char UNUSED id[] = "$Id: conn.c,v 1.143 2005/01/19 23:33:54 alex Exp $";
 
 #include "imp.h"
 #include <assert.h>
@@ -529,7 +529,7 @@ va_dcl
 #else
        va_start( ap );
 #endif
-       if( vsnprintf( buffer, COMMAND_LEN - 2, Format, ap ) == COMMAND_LEN - 2 )
+       if( vsnprintf( buffer, COMMAND_LEN - 2, Format, ap ) >= COMMAND_LEN - 2 )
        {
                Log( LOG_CRIT, "Text too long to send (connection %d)!", Idx );
                Conn_Close( Idx, "Text too long to send!", NULL, FALSE );
@@ -632,6 +632,9 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformClient )
        {
                /* Conn_Close() has been called recursively for this link;
                 * probabe reason: Try_Write() failed  -- see below. */
+#ifdef DEBUG
+               Log( LOG_DEBUG, "Recursive request to close connection: %d", Idx );
+#endif
                return;
        }
 
@@ -727,6 +730,10 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformClient )
 
        /* Clean up connection structure (=free it) */
        Init_Conn_Struct( Idx );
+
+#ifdef DEBUG
+       Log( LOG_DEBUG, "Shutdown of connection %d completed.", Idx );
+#endif
 } /* Conn_Close */
 
 
@@ -1005,32 +1012,17 @@ New_Connection( INT Sock )
                        return;
                }
 
-               /* zunaechst realloc() versuchen; wenn das scheitert, malloc() versuchen
-                * und Daten ggf. "haendisch" umkopieren. (Haesslich! Eine wirklich
-                * dynamische Verwaltung waere wohl _deutlich_ besser ...) */
                ptr = (POINTER *)realloc( My_Connections, sizeof( CONNECTION ) * new_size );
                if( ! ptr )
                {
-                       /* realloc() ist fehlgeschlagen. Nun malloc() probieren: */
-                       ptr = (POINTER *)malloc( sizeof( CONNECTION ) * new_size );
-                       if( ! ptr )
-                       {
-                               /* Offenbar steht kein weiterer Sepeicher zur Verfuegung :-( */
-                               Log( LOG_EMERG, "Can't allocate memory! [New_Connection]" );
-                               Simple_Message( new_sock, "ERROR: Internal error" );
-                               close( new_sock );
-                               return;
-                       }
-
-                       /* Struktur umkopieren ... */
-                       memcpy( ptr, My_Connections, sizeof( CONNECTION ) * Pool_Size );
-
-#ifdef DEBUG
-                       Log( LOG_DEBUG, "Allocated new connection pool for %ld items (%ld bytes). [malloc()/memcpy()]", new_size, sizeof( CONNECTION ) * new_size );
-#endif
+                       Log( LOG_EMERG, "Can't allocate memory! [New_Connection]" );
+                       Simple_Message( new_sock, "ERROR: Internal error" );
+                       close( new_sock );
+                       return;
                }
+
 #ifdef DEBUG
-               else Log( LOG_DEBUG, "Allocated new connection pool for %ld items (%ld bytes). [realloc()]", new_size, sizeof( CONNECTION ) * new_size );
+               Log( LOG_DEBUG, "Allocated new connection pool for %ld items (%ld bytes). [realloc()]", new_size, sizeof( CONNECTION ) * new_size );
 #endif
 
                /* Adjust pointer to new block */
@@ -1276,22 +1268,20 @@ Handle_Buffer( CONN_ID Idx )
                                /* Mit dem letzten Befehl wurde Socket-Kompression aktiviert.
                                 * Evtl. schon vom Socket gelesene Daten in den Unzip-Puffer
                                 * umkopieren, damit diese nun zunaechst entkomprimiert werden */
+                               if( My_Connections[Idx].rdatalen > ZREADBUFFER_LEN )
                                {
-                                       if( My_Connections[Idx].rdatalen > ZREADBUFFER_LEN )
-                                       {
-                                               /* Hupsa! Soviel Platz haben wir aber gar nicht! */
-                                               Log( LOG_ALERT, "Can't move receive buffer: No space left in unzip buffer (need %d bytes)!", My_Connections[Idx].rdatalen );
-                                               return FALSE;
-                                       }
-                                       memcpy( My_Connections[Idx].zip.rbuf, My_Connections[Idx].rbuf, My_Connections[Idx].rdatalen );
-                                       My_Connections[Idx].zip.rdatalen = My_Connections[Idx].rdatalen;
-                                       My_Connections[Idx].rdatalen = 0;
-#ifdef DEBUG
-                                       Log( LOG_DEBUG, "Moved already received data (%d bytes) to uncompression buffer.", My_Connections[Idx].zip.rdatalen );
-#endif
+                                       /* Hupsa! Soviel Platz haben wir aber gar nicht! */
+                                       Log( LOG_ALERT, "Can't move receive buffer: No space left in unzip buffer (need %d bytes)!", My_Connections[Idx].rdatalen );
+                                       return FALSE;
                                }
+                               memcpy( My_Connections[Idx].zip.rbuf, My_Connections[Idx].rbuf, My_Connections[Idx].rdatalen );
+                               My_Connections[Idx].zip.rdatalen = My_Connections[Idx].rdatalen;
+                               My_Connections[Idx].rdatalen = 0;
+#ifdef DEBUG
+                               Log( LOG_DEBUG, "Moved already received data (%d bytes) to uncompression buffer.", My_Connections[Idx].zip.rdatalen );
+#endif /* DEBUG */
                        }
-#endif
+#endif /* ZLIB */
                }
 
                if( action ) result = TRUE;