From bfbca5bc96225476778f5fca785ee3e832fd6468 Mon Sep 17 00:00:00 2001 From: "roberto@sirius" Date: Wed, 20 Oct 2010 21:56:51 +0200 Subject: [PATCH] ping plugin --- plugins/admin/admin_plugin.c | 28 ++++++++++++ plugins/ping/ping_plugin.c | 68 ++++++++++++++++++++++++++++ plugins/ping/uwsgiplugin.py | 5 ++ plugins/python/.python_plugin.c.swp | Bin 16384 -> 0 bytes 4 files changed, 101 insertions(+) create mode 100644 plugins/admin/admin_plugin.c create mode 100644 plugins/ping/ping_plugin.c create mode 100644 plugins/ping/uwsgiplugin.py delete mode 100644 plugins/python/.python_plugin.c.swp 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 7197237d360618d98a47c559271319de272204b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI3Uu+{s9mfX>p`pDN_0%5agf!<9cN^Dn{vZ{4QH#P|F0tg;#`XoBuGMO@9^2cj zcbEMW$BhD1f>x@K5Px0}2t=O{91;?5m3V+Y^dAUbS|J{IX@QCt#8Y3m9^aXr^{(wW zm*xQpX{>&_@yze{o0;#-&d$vGwimZboAh(VWrEKq2>IU6ep5d6$WgO0V}*-^)Gf(367c3nqa^f9u-LCDFu`QCs5!N z`Rwx2B6mEWJ4a7HaP0&!l#5b8DWDWk3Md7X0!jg;fKosy@c*hn=*^I?q4FP=4d~13 zhsLhA<;Rohdt>?U%lxNh`nzNKw`Bf6rq^WwNjd+K`OnJyH^%bslIdsVwJa-~_{(H< zQ3@yplmbctrGQdEDWDWk3Md7X0!jg;fKuQP1&kIUk0E`D@2BzpKiU8P{eD9J23`ig z06z!Mg0F)$Faut}Zv=h<+Tby8FZkmrLS6tB@Bn!CUP9gkFM{uYEl>p;;2!Y$J%s!S z{1AK#ya1jD&w*udH~90%33&^=32uUCz#iy>DtH*20S|!(!3_AvEFpgae*nJ+5jYDz z1s(>s?DJOR#throLuA><|S1Moa>Kns|l3M%09;M3rr zI2?H!+ys5l0`uSk_&56XC2#Xo&+-e}fKm395{ zYPr1n#q!!y^l>VF>7fUqZ#f+uKM%2uZJX(_-wK%?YBI(LaNew5t2EQndv4@}$0&1c zYqgwuv0cL+I-O@u%W5A{-`Z-UnQ5?R1Yz3D^H#gX+Vt9&8|x)qSRN7SYALH++d7t9 zB6M2!SoK8ZJ68V6^-Aj78aQdQvlZVgRhnz{T73=wZ;;uA1sbq0@~Gi?R1O3}W-Z4G z^|<_9!w!SF9CKWxtmwI$dj3CVTRG|3Szi-)*aZK~Adp&nm0-Bx5X z4I?#VL8$k{*SR^mk9xv-G@YJ%oK~)t%RHORBClsyjvjV>X0$MpYlEivvk@BT+I1F= zG!5qbH%)rqw?gJdp>Vi-HFC_*aviV;O%dWK!KjSj!$|w3l+h|D4sD+?t?vz_QIecoC*n;v9X3u9y{ zY=L6VvzarjOQy+5Id>T2hus#5Ydn^i@4LR1>tR}TO>K^MQeu!?`7l41)E@&oNl&ga z3qwXm(E^MOx2?&3nWOoMme5D&@*zbfJ(-s=Cwej|Gr1~Jb zLzjLgC>D!PI=P{$C^flpxyWO8thj@07vbVCbQjMi+?dyY0^M9|Zs=R9_0{@% z1Ghl#fF7(I5;=2Yj|JvA*|_}sl&}P$6LI&&+!D_)2ZfOmoyfN3Bof4h5lrT7V~5dr zUc%ZS9h+V}1M0mfWP7nZ7cj^%;&yazASeFeOt$M+kS!>@z;9;%OJYjN-{?xlw?}rnwW)`~vjG$R@MZ>Rhfnwgx&(7rTOG&s*?eI7mKV3G5sT^C#Fv6arPh5<|?G`sU` z&t!OdxK41GyRgwyo7h>-&GN$Q;#l)y8H5-<`$}Z_td(g2npv)5vB>WWy;PCwA~a)U zv4jlXuH(iLYpd}X@q!Cck|*NS3SF#Tg!AwY%6S7QzB|=Ct$*!0nz1$N>mAFlxlygu zR+}56zG4=HdSUm22H|1}?~^#EE$6fA)S@qLjLO8AOGUhXNNK1uywPXSPi`PfO1U@SdP!nd3Gh5gXryd>V_N0;Mk$MnYz?GLe}hUYEru zaKU&Hqq!M35e%