-int send_request(connection_t *c, const char *format, ...)
-{
- va_list args;
- char buffer[MAXBUFSIZE];
- int len, request;
-
-cp
- /* Use vsnprintf instead of vasprintf: faster, no memory
- fragmentation, cleanup is automatic, and there is a limit on the
- input buffer anyway */
-
- va_start(args, format);
- len = vsnprintf(buffer, MAXBUFSIZE, format, args);
- request = va_arg(args, int);
- va_end(args);
-
- if(len < 0 || len > MAXBUFSIZE-1)
- {
- syslog(LOG_ERR, _("Output buffer overflow while sending %s to %s (%s)"), request_name[request], c->name, c->hostname);
- return -1;
- }
-
- if(debug_lvl >= DEBUG_PROTOCOL)
- {
- if(debug_lvl >= DEBUG_META)
- syslog(LOG_DEBUG, _("Sending %s to %s (%s): %s"), request_name[request], c->name, c->hostname, buffer);
- else
- syslog(LOG_DEBUG, _("Sending %s to %s (%s)"), request_name[request], c->name, c->hostname);
- }
-
- buffer[len++] = '\n';
-cp
- return send_meta(c, buffer, len);
+bool send_request(connection_t *c, const char *format, ...) {
+ va_list args;
+ char buffer[MAXBUFSIZE];
+ int len, request = 0;
+
+ /* Use vsnprintf instead of vxasprintf: faster, no memory
+ fragmentation, cleanup is automatic, and there is a limit on the
+ input buffer anyway */
+
+ va_start(args, format);
+ len = vsnprintf(buffer, sizeof(buffer), format, args);
+ buffer[sizeof(buffer) - 1] = 0;
+ va_end(args);
+
+ if(len < 0 || (size_t)len > sizeof(buffer) - 1) {
+ logger(LOG_ERR, "Output buffer overflow while sending request to %s (%s)",
+ c->name, c->hostname);
+ return false;
+ }
+
+ ifdebug(PROTOCOL) {
+ sscanf(buffer, "%d", &request);
+ ifdebug(META)
+ logger(LOG_DEBUG, "Sending %s to %s (%s): %s",
+ request_name[request], c->name, c->hostname, buffer);
+ else
+ logger(LOG_DEBUG, "Sending %s to %s (%s)", request_name[request],
+ c->name, c->hostname);
+ }
+
+ buffer[len++] = '\n';
+
+ if(c == everyone) {
+ broadcast_meta(NULL, buffer, len);
+ return true;
+ } else {
+ return send_meta(c, buffer, len);
+ }
+}
+
+void forward_request(connection_t *from) {
+ int request;
+
+ ifdebug(PROTOCOL) {
+ sscanf(from->buffer, "%d", &request);
+ ifdebug(META)
+ logger(LOG_DEBUG, "Forwarding %s from %s (%s): %s",
+ request_name[request], from->name, from->hostname,
+ from->buffer);
+ else
+ logger(LOG_DEBUG, "Forwarding %s from %s (%s)",
+ request_name[request], from->name, from->hostname);
+ }
+
+ from->buffer[from->reqlen - 1] = '\n';
+
+ broadcast_meta(from, from->buffer, from->reqlen);