+ buffer[len++] = '\n';
+cp
+ return send_meta(cl, buffer, len);
+}
+
+int receive_request(connection_t *cl)
+{
+ int request;
+cp
+ if(sscanf(cl->buffer, "%d", &request) == 1)
+ {
+ if((request < 0) || (request >= LAST) || (request_handlers[request] == NULL))
+ {
+ if(debug_lvl >= DEBUG_META)
+ syslog(LOG_DEBUG, _("Unknown request from %s (%s): %s"),
+ cl->name, cl->hostname, cl->buffer);
+ else
+ syslog(LOG_ERR, _("Unknown request from %s (%s)"),
+ cl->name, cl->hostname);
+
+ return -1;
+ }
+ else
+ {
+ if(debug_lvl >= DEBUG_PROTOCOL)
+ {
+ if(debug_lvl >= DEBUG_META)
+ syslog(LOG_DEBUG, _("Got %s from %s (%s): %s"),
+ request_name[request], cl->name, cl->hostname, cl->buffer);
+ else
+ syslog(LOG_DEBUG, _("Got %s from %s (%s)"),
+ request_name[request], cl->name, cl->hostname);
+ }
+ }
+
+ if((cl->allow_request != ALL) && (cl->allow_request != request))
+ {
+ syslog(LOG_ERR, _("Unauthorized request from %s (%s)"), cl->name, cl->hostname);
+ return -1;
+ }
+
+ if(request_handlers[request](cl))
+ /* Something went wrong. Probably scriptkiddies. Terminate. */
+ {
+ syslog(LOG_ERR, _("Error while processing %s from %s (%s)"),
+ request_name[request], cl->name, cl->hostname);
+ return -1;
+ }
+ }
+ else