|
|
@ -275,17 +275,20 @@ int websocket_http_response(struct websocket_conn *wc, int status, const char *c |
|
|
ilog(LOG_ERR, "Failed to write HTTP response headers: %s", err); |
|
|
ilog(LOG_ERR, "Failed to write HTTP response headers: %s", err); |
|
|
return -1; |
|
|
return -1; |
|
|
} |
|
|
} |
|
|
|
|
|
const char *websocket_http_complete(struct websocket_conn *wc, int status, const char *content_type, |
|
|
|
|
|
ssize_t content_length, const char *content) |
|
|
|
|
|
{ |
|
|
|
|
|
if (websocket_http_response(wc, status, content_type, content_length)) |
|
|
|
|
|
return "Failed to write response HTTP headers"; |
|
|
|
|
|
if (websocket_write_http(wc, content, 1)) |
|
|
|
|
|
return "Failed to write pong response"; |
|
|
|
|
|
return NULL; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static const char *websocket_http_ping(struct websocket_message *wm) { |
|
|
static const char *websocket_http_ping(struct websocket_message *wm) { |
|
|
ilog(LOG_DEBUG, "Respoding to GET /ping"); |
|
|
ilog(LOG_DEBUG, "Respoding to GET /ping"); |
|
|
|
|
|
|
|
|
if (websocket_http_response(wm->wc, 200, "text/plain", 5)) |
|
|
|
|
|
return "Failed to write response HTTP headers"; |
|
|
|
|
|
if (websocket_write_http(wm->wc, "pong\n", 1)) |
|
|
|
|
|
return "Failed to write pong response"; |
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
|
return websocket_http_complete(wm->wc, 200, "text/plain", 5, "pong\n"); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -328,12 +331,7 @@ static const char *websocket_http_metrics(struct websocket_message *wm) { |
|
|
g_string_append_printf(outp, " %s\n", m->value_short); |
|
|
g_string_append_printf(outp, " %s\n", m->value_short); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (websocket_http_response(wm->wc, 200, "text/plain", outp->len)) |
|
|
|
|
|
return "Failed to write response HTTP headers"; |
|
|
|
|
|
if (websocket_write_http(wm->wc, outp->str, 1)) |
|
|
|
|
|
return "Failed to write metrics response"; |
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
|
return websocket_http_complete(wm->wc, 200, "text/plain", outp->len, outp->str); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -365,12 +363,7 @@ static const char *websocket_http_cli(struct websocket_message *wm) { |
|
|
|
|
|
|
|
|
size_t len = websocket_queue_len(wm->wc); |
|
|
size_t len = websocket_queue_len(wm->wc); |
|
|
|
|
|
|
|
|
if (websocket_http_response(wm->wc, 200, "text/plain", len)) |
|
|
|
|
|
return "Failed to write response HTTP headers"; |
|
|
|
|
|
if (websocket_write_http(wm->wc, NULL, 1)) |
|
|
|
|
|
return "Failed to write pong response"; |
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
|
return websocket_http_complete(wm->wc, 200, "text/plain", len, NULL); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -430,10 +423,9 @@ static const char *websocket_http_ng(struct websocket_message *wm) { |
|
|
str cmd; |
|
|
str cmd; |
|
|
str_init_len(&cmd, wm->body->str, wm->body->len); |
|
|
str_init_len(&cmd, wm->body->str, wm->body->len); |
|
|
|
|
|
|
|
|
if (control_ng_process(&cmd, &wm->wc->endpoint, addr, websocket_ng_send_http, wm->wc)) { |
|
|
|
|
|
websocket_http_response(wm->wc, 500, "text/plain", 6); |
|
|
|
|
|
websocket_write_http(wm->wc, "error\n", 1); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (control_ng_process(&cmd, &wm->wc->endpoint, addr, websocket_ng_send_http, wm->wc)) |
|
|
|
|
|
websocket_http_complete(wm->wc, 600, "text/plain", 6, "error\n"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
return NULL; |
|
|
} |
|
|
} |
|
|
@ -458,8 +450,7 @@ static int websocket_http_get(struct websocket_conn *wc) { |
|
|
|
|
|
|
|
|
if (!handler) { |
|
|
if (!handler) { |
|
|
ilog(LOG_WARN, "Unhandled HTTP GET URI: '%s'", uri); |
|
|
ilog(LOG_WARN, "Unhandled HTTP GET URI: '%s'", uri); |
|
|
websocket_http_response(wm->wc, 404, "text/plain", 10); |
|
|
|
|
|
websocket_write_http(wm->wc, "not found\n", 1); |
|
|
|
|
|
|
|
|
websocket_http_complete(wm->wc, 404, "text/plain", 10, "not found\n"); |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -526,8 +517,7 @@ static int websocket_http_body(struct websocket_conn *wc, const char *body, size |
|
|
|
|
|
|
|
|
if (!handler) { |
|
|
if (!handler) { |
|
|
ilog(LOG_WARN, "Unhandled HTTP POST URI: '%s'", wm->uri); |
|
|
ilog(LOG_WARN, "Unhandled HTTP POST URI: '%s'", wm->uri); |
|
|
websocket_http_response(wm->wc, 404, "text/plain", 10); |
|
|
|
|
|
websocket_write_http(wm->wc, "not found\n", 1); |
|
|
|
|
|
|
|
|
websocket_http_complete(wm->wc, 404, "text/plain", 10, "not found\n"); |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|