|
@@ -915,24 +915,27 @@ static void send_http_error(struct mg_connection *conn, int status,
|
|
int len = 0;
|
|
int len = 0;
|
|
|
|
|
|
conn->status_code = status;
|
|
conn->status_code = status;
|
|
- buf[0] = '\0';
|
|
|
|
-
|
|
|
|
- // Errors 1xx, 204 and 304 MUST NOT send a body
|
|
|
|
- if (status > 199 && status != 204 && status != 304) {
|
|
|
|
- len = mg_snprintf(conn, buf, sizeof(buf), "Error %d: %s", status, reason);
|
|
|
|
- buf[len++] = '\n';
|
|
|
|
|
|
+ if (conn->ctx->callbacks.http_error == NULL ||
|
|
|
|
+ conn->ctx->callbacks.http_error(conn, status)) {
|
|
|
|
+ buf[0] = '\0';
|
|
|
|
+
|
|
|
|
+ // Errors 1xx, 204 and 304 MUST NOT send a body
|
|
|
|
+ if (status > 199 && status != 204 && status != 304) {
|
|
|
|
+ len = mg_snprintf(conn, buf, sizeof(buf), "Error %d: %s", status, reason);
|
|
|
|
+ buf[len++] = '\n';
|
|
|
|
+
|
|
|
|
+ va_start(ap, fmt);
|
|
|
|
+ len += mg_vsnprintf(conn, buf + len, sizeof(buf) - len, fmt, ap);
|
|
|
|
+ va_end(ap);
|
|
|
|
+ }
|
|
|
|
+ DEBUG_TRACE(("[%s]", buf));
|
|
|
|
|
|
- va_start(ap, fmt);
|
|
|
|
- len += mg_vsnprintf(conn, buf + len, sizeof(buf) - len, fmt, ap);
|
|
|
|
- va_end(ap);
|
|
|
|
|
|
+ mg_printf(conn, "HTTP/1.1 %d %s\r\n"
|
|
|
|
+ "Content-Length: %d\r\n"
|
|
|
|
+ "Connection: %s\r\n\r\n", status, reason, len,
|
|
|
|
+ suggest_connection_header(conn));
|
|
|
|
+ conn->num_bytes_sent += mg_printf(conn, "%s", buf);
|
|
}
|
|
}
|
|
- DEBUG_TRACE(("[%s]", buf));
|
|
|
|
-
|
|
|
|
- mg_printf(conn, "HTTP/1.1 %d %s\r\n"
|
|
|
|
- "Content-Length: %d\r\n"
|
|
|
|
- "Connection: %s\r\n\r\n", status, reason, len,
|
|
|
|
- suggest_connection_header(conn));
|
|
|
|
- conn->num_bytes_sent += mg_printf(conn, "%s", buf);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
#if defined(_WIN32) && !defined(__SYMBIAN32__)
|
|
#if defined(_WIN32) && !defined(__SYMBIAN32__)
|