Serve favicon over http.
authorEmil Mikulic <emikulic@gmail.com>
Mon, 28 Mar 2016 02:24:35 +0000 (13:24 +1100)
committerEmil Mikulic <emikulic@gmail.com>
Mon, 28 Mar 2016 02:35:49 +0000 (13:35 +1100)
.gitignore
Makefile.in
http.c
release.sh
test_headers.sh

index 4162958..63f0899 100644 (file)
@@ -15,3 +15,4 @@ darkstat
 darkstat.8
 graphjs.h
 stylecss.h
 darkstat.8
 graphjs.h
 stylecss.h
+favicon.h
index 0e16ce5..e993ed0 100644 (file)
@@ -1,7 +1,7 @@
 # vim:set ts=8 sw=8 sts=8 noet:
 #
 # darkstat 3
 # vim:set ts=8 sw=8 sts=8 noet:
 #
 # darkstat 3
-# copyright (c) 2001-2014 Emil Mikulic.
+# copyright (c) 2001-2016 Emil Mikulic.
 #
 # You may use, modify and redistribute this file under the terms of the
 # GNU General Public License version 2. (see COPYING.GPL)
 #
 # You may use, modify and redistribute this file under the terms of the
 # GNU General Public License version 2. (see COPYING.GPL)
@@ -49,6 +49,7 @@ str.c
 OBJS = $(SRCS:%.c=%.o)
 
 STATICHS = \
 OBJS = $(SRCS:%.c=%.o)
 
 STATICHS = \
+favicon.h      \
 stylecss.h     \
 graphjs.h
 
 stylecss.h     \
 graphjs.h
 
@@ -77,15 +78,17 @@ depend: config.status $(STATICHS)
        ./config.status
        rm -f Makefile.in.old
 
        ./config.status
        rm -f Makefile.in.old
 
-graphjs.h: static/graph.js
+favicon.h: static/favicon.png
+       (echo -n "static const "; cd static && xxd -i favicon.png | grep -v len) >$@
+
+graphjs.h: static/graph.js c-ify
        $(AM_V_CIFY)
        $(AM_V_at)./c-ify graph_js <static/graph.js >$@
 
        $(AM_V_CIFY)
        $(AM_V_at)./c-ify graph_js <static/graph.js >$@
 
-stylecss.h: static/style.css
+stylecss.h: static/style.css c-ify
        $(AM_V_CIFY)
        $(AM_V_at)./c-ify style_css <static/style.css >$@
 
        $(AM_V_CIFY)
        $(AM_V_at)./c-ify style_css <static/style.css >$@
 
-$(STATICHS): c-ify
 c-ify: static/c-ify.c
        $(AM_V_HOSTCC)
        $(AM_V_at)$(HOSTCC) $(HOSTCFLAGS) static/c-ify.c -o $@
 c-ify: static/c-ify.c
        $(AM_V_HOSTCC)
        $(AM_V_at)$(HOSTCC) $(HOSTCFLAGS) static/c-ify.c -o $@
@@ -140,7 +143,7 @@ hosts_db.o: hosts_db.c cdefs.h conv.h decode.h addr.h dns.h err.h \
 hosts_sort.o: hosts_sort.c cdefs.h err.h hosts_db.h addr.h
 html.o: html.c config.h str.h cdefs.h html.h opt.h
 http.o: http.c cdefs.h config.h conv.h err.h graph_db.h hosts_db.h addr.h \
 hosts_sort.o: hosts_sort.c cdefs.h err.h hosts_db.h addr.h
 html.o: html.c config.h str.h cdefs.h html.h opt.h
 http.o: http.c cdefs.h config.h conv.h err.h graph_db.h hosts_db.h addr.h \
- http.h now.h queue.h str.h stylecss.h graphjs.h
+ http.h now.h queue.h str.h stylecss.h graphjs.h favicon.h
 localip.o: localip.c addr.h bsd.h config.h conv.h err.h cdefs.h localip.h \
  now.h
 ncache.o: ncache.c conv.h err.h cdefs.h ncache.h tree.h bsd.h config.h
 localip.o: localip.c addr.h bsd.h config.h conv.h err.h cdefs.h localip.h \
  now.h
 ncache.o: ncache.c conv.h err.h cdefs.h ncache.h tree.h bsd.h config.h
diff --git a/http.c b/http.c
index bd44ff7..f1c93d8 100644 (file)
--- a/http.c
+++ b/http.c
@@ -1,5 +1,5 @@
 /* darkstat 3
 /* darkstat 3
- * copyright (c) 2001-2014 Emil Mikulic.
+ * copyright (c) 2001-2016 Emil Mikulic.
  *
  * http.c: embedded webserver.
  * This borrows a lot of code from darkhttpd.
  *
  * http.c: embedded webserver.
  * This borrows a lot of code from darkhttpd.
@@ -44,6 +44,7 @@ static const char mime_type_xml[] = "text/xml";
 static const char mime_type_html[] = "text/html; charset=us-ascii";
 static const char mime_type_css[] = "text/css";
 static const char mime_type_js[] = "text/javascript";
 static const char mime_type_html[] = "text/html; charset=us-ascii";
 static const char mime_type_css[] = "text/css";
 static const char mime_type_js[] = "text/javascript";
+static const char mime_type_png[] = "image/png";
 static const char encoding_identity[] = "identity";
 static const char encoding_gzip[] = "gzip";
 
 static const char encoding_identity[] = "identity";
 static const char encoding_gzip[] = "gzip";
 
@@ -561,6 +562,20 @@ static_graph_js(struct connection *conn)
     conn->mime_type = mime_type_js;
 }
 
     conn->mime_type = mime_type_js;
 }
 
+/* ---------------------------------------------------------------------------
+ * Web interface: favicon.
+ */
+static void
+static_favicon(struct connection *conn)
+{
+#include "favicon.h"
+
+    conn->reply = (char*)favicon_png;
+    conn->reply_length = sizeof(favicon_png);
+    conn->reply_dont_free = 1;
+    conn->mime_type = mime_type_png;
+}
+
 /* ---------------------------------------------------------------------------
  * gzip a reply, if requested and possible.  Don't bother with a minimum
  * length requirement, I've never seen a page fail to compress.
 /* ---------------------------------------------------------------------------
  * gzip a reply, if requested and possible.  Don't bother with a minimum
  * length requirement, I've never seen a page fail to compress.
@@ -677,7 +692,10 @@ static void process_get(struct connection *conn)
         static_style_css(conn);
     else if (strcmp(safe_url, "/graph.js") == 0)
         static_graph_js(conn);
         static_style_css(conn);
     else if (strcmp(safe_url, "/graph.js") == 0)
         static_graph_js(conn);
-    else {
+    else if (strcmp(safe_url, "/favicon.ico") == 0) {
+        /* serves a PNG instead of an ICO, might cause problems for IE6 */
+        static_favicon(conn);
+    } else {
         default_reply(conn, 404, "Not Found",
             "The page you requested could not be found.");
         free(safe_url);
         default_reply(conn, 404, "Not Found",
             "The page you requested could not be found.");
         free(safe_url);
index ab19bef..4dad0ce 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 #
 # release.sh: script to roll a release tarball of darkstat.
 #!/bin/sh
 #
 # release.sh: script to roll a release tarball of darkstat.
-# copyright (c) 2006-2013 Emil Mikulic.
+# copyright (c) 2006-2016 Emil Mikulic.
 #
 # This is for developer use only and lives in the repo but
 # shouldn't end up in a tarball.
 #
 # This is for developer use only and lives in the repo but
 # shouldn't end up in a tarball.
@@ -56,6 +56,7 @@ dns.h \
 err.c \
 err.h \
 export-format.txt \
 err.c \
 err.h \
 export-format.txt \
+favicon.h \
 graph_db.c \
 graph_db.h \
 graphjs.h \
 graph_db.c \
 graph_db.h \
 graphjs.h \
index 73f9fdf..d137ad9 100755 (executable)
@@ -11,7 +11,7 @@ check_deps() {
   # dependencies, and be able to be included multiple times.
   src=_test_hdr.c
   obj=_test_hdr.o
   # dependencies, and be able to be included multiple times.
   src=_test_hdr.c
   obj=_test_hdr.o
-  files=`ls *.h | fgrep -v -e graphjs.h -e stylecss.h`
+  files=`ls *.h | fgrep -v -e graphjs.h -e stylecss.h -e favicon.h`
 
   for f in $files; do
     echo " * $f"
 
   for f in $files; do
     echo " * $f"