From 90a64ca87f7bdc2c9176484c325f69b82622fe81 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 13 Dec 2015 14:46:27 +0100 Subject: [PATCH] gluon-status-page-api: use sse-multiplex --- package/gluon-status-page-api/Makefile | 8 ++--- .../www/cgi-bin/dyn/neighbours-batadv | 7 +++++ .../www/cgi-bin/dyn/neighbours-nodeinfo | 8 ++++- .../status-page/www/cgi-bin/dyn/stations | 15 ++++++++++ .../status-page/www/cgi-bin/dyn/statistics | 6 ++-- .../src/neighbours-batadv.c | 2 +- package/gluon-status-page-api/src/stations.c | 29 ++----------------- 7 files changed, 41 insertions(+), 34 deletions(-) create mode 100755 package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-batadv create mode 100755 package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/stations mode change 100755 => 100644 package/gluon-status-page-api/src/neighbours-batadv.c mode change 100755 => 100644 package/gluon-status-page-api/src/stations.c diff --git a/package/gluon-status-page-api/Makefile b/package/gluon-status-page-api/Makefile index 91a7095a..46c9e7d2 100644 --- a/package/gluon-status-page-api/Makefile +++ b/package/gluon-status-page-api/Makefile @@ -12,7 +12,7 @@ define Package/gluon-status-page-api SECTION:=gluon CATEGORY:=Gluon TITLE:=API for gluon-status-page - DEPENDS:=+gluon-core +uhttpd +gluon-neighbour-info +gluon-announced +libiwinfo +libjson-c + DEPENDS:=+gluon-core +uhttpd +sse-multiplex +gluon-neighbour-info +gluon-announced +libiwinfo +libjson-c endef define Build/Prepare @@ -21,9 +21,9 @@ define Build/Prepare endef define Package/gluon-status-page-api/install - $(INSTALL_DIR) $(1)/lib/gluon/status-page/www/cgi-bin/dyn - $(INSTALL_BIN) $(PKG_BUILD_DIR)/neighbours-batadv $(1)/lib/gluon/status-page/www/cgi-bin/dyn/ - $(INSTALL_BIN) $(PKG_BUILD_DIR)/stations $(1)/lib/gluon/status-page/www/cgi-bin/dyn/ + $(INSTALL_DIR) $(1)/lib/gluon/status-page/providers + $(INSTALL_BIN) $(PKG_BUILD_DIR)/neighbours-batadv $(1)/lib/gluon/status-page/providers/ + $(INSTALL_BIN) $(PKG_BUILD_DIR)/stations $(1)/lib/gluon/status-page/providers/ $(CP) ./files/* $(1)/ endef diff --git a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-batadv b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-batadv new file mode 100755 index 00000000..075e8b8b --- /dev/null +++ b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-batadv @@ -0,0 +1,7 @@ +#!/bin/sh + +echo 'Access-Control-Allow-Origin: *' + +CMD='exec /lib/gluon/status-page/providers/neighbours-batadv' + +exec /usr/sbin/sse-multiplex "$CMD" diff --git a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo index 4420570e..657f17e5 100755 --- a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo +++ b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo @@ -1,7 +1,13 @@ #!/bin/sh +badrequest() { + echo 'Status: 400 Bad Request' + echo + exit 1 +} + echo 'Access-Control-Allow-Origin: *' -batctl if | cut -d: -f1 | grep -qxF "$QUERY_STRING" || exit 1 +batctl if | cut -d: -f1 | grep -qxF "$QUERY_STRING" || badrequest exec /usr/bin/gluon-neighbour-info -s neighbour -i "$QUERY_STRING" -d ff02::2:1001 -p 1001 -r nodeinfo diff --git a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/stations b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/stations new file mode 100755 index 00000000..258122fb --- /dev/null +++ b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/stations @@ -0,0 +1,15 @@ +#!/bin/sh + +badrequest() { + echo 'Status: 400 Bad Request' + echo + exit 1 +} + +echo 'Access-Control-Allow-Origin: *' + +batctl if | cut -d: -f1 | grep -qxF "$QUERY_STRING" || badrequest + +CMD="exec /lib/gluon/status-page/providers/stations '$QUERY_STRING'" + +exec /usr/sbin/sse-multiplex "$CMD" diff --git a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/statistics b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/statistics index 637c8bc6..ef0dd3d8 100755 --- a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/statistics +++ b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/statistics @@ -1,5 +1,7 @@ #!/bin/sh -echo "Access-Control-Allow-Origin: *" +echo 'Access-Control-Allow-Origin: *' -exec gluon-neighbour-info -s "" -l -d ::1 -p 1001 -t 3 -r statistics +CMD='exec gluon-neighbour-info -s "" -l -d ::1 -p 1001 -t 3 -r statistics' + +exec /usr/sbin/sse-multiplex "$CMD" diff --git a/package/gluon-status-page-api/src/neighbours-batadv.c b/package/gluon-status-page-api/src/neighbours-batadv.c old mode 100755 new mode 100644 index a386b5e0..1fd62eaf --- a/package/gluon-status-page-api/src/neighbours-batadv.c +++ b/package/gluon-status-page-api/src/neighbours-batadv.c @@ -50,8 +50,8 @@ static json_object *neighbours(void) { int main(void) { struct json_object *obj; - printf("Access-Control-Allow-Origin: *\n"); printf("Content-type: text/event-stream\n\n"); + fflush(stdout); while (1) { obj = neighbours(); diff --git a/package/gluon-status-page-api/src/stations.c b/package/gluon-status-page-api/src/stations.c old mode 100755 new mode 100644 index 9cae3680..13288827 --- a/package/gluon-status-page-api/src/stations.c +++ b/package/gluon-status-page-api/src/stations.c @@ -1,15 +1,10 @@ #include #include #include -#include #include #include #include -#define STR(x) #x -#define XSTR(x) STR(x) - -#define BATIF_PREFIX "/sys/class/net/bat0/lower_" static struct json_object *get_stations(const struct iwinfo_ops *iw, const char *ifname) { int len; @@ -45,34 +40,16 @@ static void badrequest() { exit(1); } -bool interface_is_valid(const char *ifname) { - if (strlen(ifname) > IF_NAMESIZE) - return false; - - if (strchr(ifname, '/') != NULL) - return false; - - char *path = alloca(1 + strlen(BATIF_PREFIX) + strlen(ifname)); - sprintf(path, "%s%s", BATIF_PREFIX, ifname); - - return access(path, F_OK) == 0; -} - -int main(void) { - char *ifname = getenv("QUERY_STRING"); - - if (ifname == NULL) - badrequest(); - - if (!interface_is_valid(ifname)) +int main(int argc, char *argv[]) { + if (argc != 2) badrequest(); + const char *ifname = argv[1]; const struct iwinfo_ops *iw = iwinfo_backend(ifname); if (iw == NULL) badrequest(); - printf("Access-Control-Allow-Origin: *\n"); printf("Content-type: text/event-stream\n\n"); while (true) {