+ /* Ende der Anfrage wurde gefunden */
+ *ptr = '\0';
+ len = ( ptr - My_Connections[Idx].rbuf ) + delta;
+ if( len > ( COMMAND_LEN - 1 ))
+ {
+ /* Eine Anfrage darf(!) nicht laenger als 512 Zeichen
+ * (incl. CR+LF!) werden; vgl. RFC 2812. Wenn soetwas
+ * empfangen wird, wird der Client disconnectiert. */
+ Log( LOG_ERR, "Request too long (connection %d): %d bytes (max. %d expected)!", Idx, My_Connections[Idx].rdatalen, COMMAND_LEN - 1 );
+ Conn_Close( Idx, NULL, "Request too long", true );
+ return false;
+ }
+
+#ifdef ZLIB
+ /* merken, ob Stream bereits komprimiert wird */
+ old_z = My_Connections[Idx].options & CONN_ZIP;
+#endif
+
+ if( len > delta )
+ {
+ /* Es wurde ein Request gelesen */
+ My_Connections[Idx].msg_in++;
+ if( ! Parse_Request( Idx, My_Connections[Idx].rbuf )) return false;
+ else action = true;
+ }
+
+ /* Puffer anpassen */
+ My_Connections[Idx].rdatalen -= len;
+ memmove( My_Connections[Idx].rbuf, My_Connections[Idx].rbuf + len, My_Connections[Idx].rdatalen );
+
+#ifdef ZLIB
+ if(( ! old_z ) && ( My_Connections[Idx].options & CONN_ZIP ) && ( My_Connections[Idx].rdatalen > 0 ))
+ {
+ /* 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 )
+ {
+ /* 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 /* ZLIB */