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