diff --git a/plugins/admin/admin_plugin.c b/plugins/admin/admin_plugin.c new file mode 100644 index 00000000..504a5801 --- /dev/null +++ b/plugins/admin/admin_plugin.c @@ -0,0 +1,28 @@ +/* uwsgi ADMIN|10 */ +int uwsgi_request_admin(struct wsgi_request *wsgi_req) { + uint32_t opt_value = 0; + int i; + + if (wsgi_req->uh.pktsize >= 4) { + memcpy(&opt_value, wsgi_req->buffer, 4); + // TODO: check endianess ? + } + + uwsgi_log( "setting internal option %d to %d\n", wsgi_req->uh.modifier2, opt_value); + uwsgi.shared->options[wsgi_req->uh.modifier2] = opt_value; + + // ACK + wsgi_req->uh.modifier1 = 255; + wsgi_req->uh.pktsize = 0; + wsgi_req->uh.modifier2 = 1; + + i = write(wsgi_req->poll.fd, wsgi_req, 4); + if (i != 4) { + uwsgi_error("write()"); + } + + + + return UWSGI_OK; +} + diff --git a/plugins/ping/ping_plugin.c b/plugins/ping/ping_plugin.c new file mode 100644 index 00000000..fa570b24 --- /dev/null +++ b/plugins/ping/ping_plugin.c @@ -0,0 +1,68 @@ + +{"ping", required_argument, 0, LONG_ARGS_PING}, +{"ping-timeout", required_argument, 0, LONG_ARGS_PING_TIMEOUT}, + + +void ping() { + + struct uwsgi_header uh; + struct pollfd uwsgi_poll; + + // use a 3 secs timeout by default + if (!uwsgi.ping_timeout) uwsgi.ping_timeout = 3 ; + + uwsgi_poll.fd = uwsgi_connect(uwsgi.ping, uwsgi.ping_timeout); + if (uwsgi_poll.fd < 0) { + exit(1); + } + + uh.modifier1 = UWSGI_MODIFIER_PING; + uh.pktsize = 0; + uh.modifier2 = 0; + if (write(uwsgi_poll.fd, &uh, 4) != 4) { + uwsgi_error("write()"); + exit(2); + } + uwsgi_poll.events = POLLIN; + if (!uwsgi_parse_response(&uwsgi_poll, uwsgi.ping_timeout, &uh, NULL)) { + exit(1); + } + else { + if (uh.pktsize > 0) { + exit(2); + } + else { + exit(0); + } + } + +} + + +/* uwsgi PING|100 */ +int uwsgi_request_ping(struct wsgi_request *wsgi_req) { + char len; + + uwsgi_log( "PING\n"); + wsgi_req->uh.modifier2 = 1; + wsgi_req->uh.pktsize = 0; + + len = strlen(uwsgi.shared->warning_message); + if (len > 0) { + // TODO: check endianess ? + wsgi_req->uh.pktsize = len; + } + if (write(wsgi_req->poll.fd, wsgi_req, 4) != 4) { + uwsgi_error("write()"); + } + + if (len > 0) { + if (write(wsgi_req->poll.fd, uwsgi.shared->warning_message, len) + != len) { + uwsgi_error("write()"); + } + } + + return UWSGI_OK; +} + diff --git a/plugins/ping/uwsgiplugin.py b/plugins/ping/uwsgiplugin.py new file mode 100644 index 00000000..eb589c96 --- /dev/null +++ b/plugins/ping/uwsgiplugin.py @@ -0,0 +1,5 @@ +NAME='ping' +CFLAGS = [] +LDFLAGS = [] +LIBS = [] +GCC_LIST = ['ping_plugin'] diff --git a/plugins/python/.python_plugin.c.swp b/plugins/python/.python_plugin.c.swp deleted file mode 100644 index 7197237d..00000000 Binary files a/plugins/python/.python_plugin.c.swp and /dev/null differ