You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ph...@apache.org on 2018/01/02 18:28:36 UTC

[41/51] [partial] nifi-minifi-cpp git commit: MINIFICPP-351: Remove Civetweb third party directory

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/README.rst
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/README.rst b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/README.rst
deleted file mode 100644
index 5b1b147..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/README.rst
+++ /dev/null
@@ -1,76 +0,0 @@
-==================
-Eventloop examples
-==================
-
-Overview and usage
-==================
-
-A few examples on how an event loop can be implemented with Duktape, mainly
-illlustrating how the Duktape interface works (not how event loops should be
-built otherwise).
-
-To test (Linux only, perhaps other Unix)::
-
-  $ make
-  $ ./evloop curses-timers.js     # run with Ecmascript eventloop
-  $ ./evloop -c curses-timers.js  # run with C eventloop
-
-Implementation approaches
-=========================
-
-There are several approaches to implementation timers.  Here we demonstrate
-two main approaches:
-
-1. Using a C eventloop which calls into Javascript.  All the event loop state
-   like timers, sockets, etc, is held in C structures.
-   (See ``c_eventloop.c`` and ``c_eventloop.js``.)
-
-2. Using an Ecmascript eventloop which never returns.  All the event loop state
-   can be managed with Ecmascript code instead of C structures.  The Ecmascript
-   eventloop calls a Duktape/C helper to do the lowest level poll() call.
-   (See ``ecma_eventloop.js``.)
-
-Services provided
-=================
-
-The event loop API provided by both examples is the same, and includes:
-
-* Timers: setTimeout, clearTimeout, setInterval, clearInterval
-
-* Sockets: simple network sockets
-
-In addition there are a few synchronous API bindings which are not event loop
-related:
-
-* File I/O
-
-* Curses, for doing beautiful character graphics
-
-Limitations
-===========
-
-This is **not** a production quality event loop.  This is on purpose, to
-keep the example somewhat simple.  Some shortcomings include:
-
-* A production quality event loop would track its internal state (active
-  timers and sockets) much more efficiently.  In general memory usage and
-  code footprint can be reduced.
-
-* Buffer churn caused by allocating a new buffer for every socket read
-  should be eliminated by reusing buffers where appropriate.  Although
-  churn doesn't increase memory footprint with reference counting, it
-  is slower than reusing buffers and might increase memory fragmentation.
-
-* There is no way to suspend reading or writing in the example.  Adding
-  them is straightforward: the poll set needs to be managed dynamically.
-
-* The example uses poll() while one should use epoll() on Linux, kqueue()
-  on BSD systems, etc.
-
-* Timers are not very accurate, e.g. setInterval() does not try to guarantee
-  a steady schedule.  Instead, the next interval is scheduled after the
-  current callback has finished.  This is not the best behavior for some
-  environments, but avoids bunching callbacks.
-
-* Error handling is mostly missing.  Debug prints don't interact well
-  with curses.

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/basic-test.js
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/basic-test.js b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/basic-test.js
deleted file mode 100644
index 04b3392..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/basic-test.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- *  A few basic tests
- */
-
-var count = 0;
-var intervalId;
-
-setTimeout(function (x) { print('timer 1', x); }, 1234, 'foo');
-setTimeout('print("timer 2");', 4321);
-setTimeout(function () { print('timer 3'); }, 2345);
-intervalId = setInterval(function (x, y) {
-    print('interval', ++count, x, y);
-    if (count >= 10) {
-        clearInterval(intervalId);
-    }
-}, 400, 'foo', 'bar');
-

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/c_eventloop.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/c_eventloop.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/c_eventloop.c
deleted file mode 100644
index 75d768b..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/c_eventloop.c
+++ /dev/null
@@ -1,618 +0,0 @@
-/*
- *  C eventloop example.
- *
- *  Timer management is similar to eventloop.js but implemented in C.
- *  In particular, timer insertion is an O(n) operation; in a real world
- *  eventloop based on a heap insertion would be O(log N).
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h>
-#include <sys/time.h>
-#include <poll.h>
-
-#include "duktape.h"
-
-#define  MAX_TIMERS             4096     /* this is quite excessive for embedded use, but good for testing */
-#define  MIN_DELAY              1.0
-#define  MIN_WAIT               1.0
-#define  MAX_WAIT               60000.0
-#define  MAX_EXPIRYS            10
-
-#define  MAX_FDS                256
-
-typedef struct {
-	int64_t id;       /* numeric ID (returned from e.g. setTimeout); zero if unused */
-	double target;    /* next target time */
-	double delay;     /* delay/interval */
-	int oneshot;      /* oneshot=1 (setTimeout), repeated=0 (setInterval) */
-	int removed;      /* timer has been requested for removal */
-
-	/* The callback associated with the timer is held in the "global stash",
-	 * in <stash>.eventTimers[String(id)].  The references must be deleted
-	 * when a timer struct is deleted.
-	 */
-} ev_timer;
-
-/* Active timers.  Dense list, terminates to end of list or first unused timer.
- * The list is sorted by 'target', with lowest 'target' (earliest expiry) last
- * in the list.  When a timer's callback is being called, the timer is moved
- * to 'timer_expiring' as it needs special handling should the user callback
- * delete that particular timer.
- */
-static ev_timer timer_list[MAX_TIMERS];
-static ev_timer timer_expiring;
-static int timer_count;  /* last timer at timer_count - 1 */
-static int64_t timer_next_id = 1;
-
-/* Socket poll state. */
-static struct pollfd poll_list[MAX_FDS];
-static int poll_count = 0;
-
-/* Misc */
-static int exit_requested = 0;
-
-/* Get Javascript compatible 'now' timestamp (millisecs since 1970). */
-static double get_now(void) {
-	struct timeval tv;
-	int rc;
-
-	rc = gettimeofday(&tv, NULL);
-	if (rc != 0) {
-		/* Should never happen, so return whatever. */
-		return 0.0;
-	}
-	return ((double) tv.tv_sec) * 1000.0 + ((double) tv.tv_usec) / 1000.0;
-}
-
-static ev_timer *find_nearest_timer(void) {
-	/* Last timer expires first (list is always kept sorted). */
-	if (timer_count <= 0) {
-		return NULL;
-	}
-	return timer_list + timer_count - 1;
-}
-
-/* Bubble last timer on timer list backwards until it has been moved to
- * its proper sorted position (based on 'target' time).
- */
-static void bubble_last_timer(void) {
-	int i;
-	int n = timer_count;
-	ev_timer *t;
-	ev_timer tmp;
-
-	for (i = n - 1; i > 0; i--) {
-		/* Timer to bubble is at index i, timer to compare to is
-		 * at i-1 (both guaranteed to exist).
-		 */
-		t = timer_list + i;
-		if (t->target <= (t-1)->target) {
-			/* 't' expires earlier than (or same time as) 't-1', so we're done. */
-			break;
-		} else {
-			/* 't' expires later than 't-1', so swap them and repeat. */
-			memcpy((void *) &tmp, (void *) (t - 1), sizeof(ev_timer));
-			memcpy((void *) (t - 1), (void *) t, sizeof(ev_timer));
-			memcpy((void *) t, (void *) &tmp, sizeof(ev_timer));
-		}
-	}
-}
-
-static void expire_timers(duk_context *ctx) {
-	ev_timer *t;
-	int sanity = MAX_EXPIRYS;
-	double now;
-	int rc;
-
-	/* Because a user callback can mutate the timer list (by adding or deleting
-	 * a timer), we expire one timer and then rescan from the end again.  There
-	 * is a sanity limit on how many times we do this per expiry round.
-	 */
-
-	duk_push_global_stash(ctx);
-	duk_get_prop_string(ctx, -1, "eventTimers");
-
-	/* [ ... stash eventTimers ] */
-
-	now = get_now();
-	while (sanity-- > 0) {
-		/*
-		 *  If exit has been requested, exit without running further
-		 *  callbacks.
-		 */
-
-		if (exit_requested) {
-#if 0
-			fprintf(stderr, "exit requested, exiting timer expiry loop\n");
-			fflush(stderr);
-#endif
-			break;
-		}
-
-		/*
-		 *  Expired timer(s) still exist?
-		 */
-
-		if (timer_count <= 0) {
-			break;
-		}
-		t = timer_list + timer_count - 1;
-		if (t->target > now) {
-			break;
-		}
-
-		/*
-		 *  Move the timer to 'expiring' for the duration of the callback.
-		 *  Mark a one-shot timer deleted, compute a new target for an interval.
-		 */
-
-		memcpy((void *) &timer_expiring, (void *) t, sizeof(ev_timer));
-		memset((void *) t, 0, sizeof(ev_timer));
-		timer_count--;
-		t = &timer_expiring;
-
-		if (t->oneshot) {
-			t->removed = 1;
-		} else {
-			t->target = now + t->delay;  /* XXX: or t->target + t->delay? */
-		}
-
-		/*
-		 *  Call timer callback.  The callback can operate on the timer list:
-		 *  add new timers, remove timers.  The callback can even remove the
-		 *  expired timer whose callback we're calling.  However, because the
-		 *  timer being expired has been moved to 'timer_expiring', we don't
-		 *  need to worry about the timer's offset changing on the timer list.
-		 */
-
-#if 0
-		fprintf(stderr, "calling user callback for timer id %d\n", (int) t->id);
-		fflush(stderr);
-#endif
-
-		duk_push_number(ctx, (double) t->id);
-		duk_get_prop(ctx, -2);  /* -> [ ... stash eventTimers func ] */
-		rc = duk_pcall(ctx, 0 /*nargs*/);  /* -> [ ... stash eventTimers retval ] */
-		if (rc != 0) {
-#if 0
-			fprintf(stderr, "timer callback failed for timer %d: %s\n", (int) t->id, duk_to_string(ctx, -1));
-			fflush(stderr);
-#endif
-		}
-		duk_pop(ctx);    /* ignore errors for now -> [ ... stash eventTimers ] */
-
-		if (t->removed) {
-			/* One-shot timer (always removed) or removed by user callback. */
-#if 0
-			fprintf(stderr, "deleting callback state for timer %d\n", (int) t->id);
-			fflush(stderr);
-#endif
-			duk_push_number(ctx, (double) t->id);
-			duk_del_prop(ctx, -2);
-		} else {
-			/* Interval timer, not removed by user callback.  Queue back to
-			 * timer list and bubble to its final sorted position.
-			 */
-#if 0
-			fprintf(stderr, "queueing timer %d back into active list\n", (int) t->id);
-			fflush(stderr);
-#endif
-			if (timer_count >= MAX_TIMERS) {
-				duk_error(ctx, DUK_ERR_RANGE_ERROR, "out of timer slots");
-			}
-			memcpy((void *) (timer_list + timer_count), (void *) t, sizeof(ev_timer));
-			timer_count++;
-			bubble_last_timer();
-		}
-	}
-
-	memset((void *) &timer_expiring, 0, sizeof(ev_timer));
-
-	duk_pop_2(ctx);  /* -> [ ... ] */
-}
-
-static void compact_poll_list(void) {
-	int i, j, n;
-
-	/* i = input index
-	 * j = output index (initially same as i)
-	 */
-
-	n = poll_count;
-	for (i = 0, j = 0; i < n; i++) {
-		struct pollfd *pfd = poll_list + i;
-		if (pfd->fd == 0) {
-			/* keep output index the same */
-#if 0
-			fprintf(stderr, "remove pollfd (index %d): fd=%d, events=%d, revents=%d\n",
-			        i, pfd->fd, pfd->events, pfd->revents),
-			fflush(stderr);
-#endif
-
-			continue;
-		}
-#if 0
-		fprintf(stderr, "keep pollfd (index %d -> %d): fd=%d, events=%d, revents=%d\n",
-		        i, j, pfd->fd, pfd->events, pfd->revents),
-		fflush(stderr);
-#endif
-		if (i != j) {
-			/* copy only if indices have diverged */
-			memcpy((void *) (poll_list + j), (void *) (poll_list + i), sizeof(struct pollfd));
-		}
-		j++;
-	}
-
-	if (j < poll_count) {
-		/* zeroize unused entries for sanity */
-		memset((void *) (poll_list + j), 0, (poll_count - j) * sizeof(struct pollfd));
-	}
-
-	poll_count = j;
-}
-
-int eventloop_run(duk_context *ctx) {
-	ev_timer *t;
-	double now;
-	double diff;
-	int timeout;
-	int rc;
-	int i, n;
-	int idx_eventloop;
-	int idx_fd_handler;
-
-	/* The Ecmascript poll handler is passed through EventLoop.fdPollHandler
-	 * which c_eventloop.js sets before we come here.
-	 */
-	duk_push_global_object(ctx);
-	duk_get_prop_string(ctx, -1, "EventLoop");
-	duk_get_prop_string(ctx, -1, "fdPollHandler");  /* -> [ global EventLoop fdPollHandler ] */
-	idx_fd_handler = duk_get_top_index(ctx);
-	idx_eventloop = idx_fd_handler - 1;
-
-	for (;;) {
-		/*
-		 *  Expire timers.
-		 */
-
-		expire_timers(ctx);
-
-		/*
-		 *  If exit requested, bail out as fast as possible.
-		 */
-
-		if (exit_requested) {
-#if 0
-			fprintf(stderr, "exit requested, exiting event loop\n");
-			fflush(stderr);
-#endif
-			break;
-		}
-
-		/*
-		 *  Compact poll list by removing pollfds with fd == 0.
-		 */
-
-		compact_poll_list();
-
-		/*
-		 *  Determine poll() timeout (as close to poll() as possible as
-		 *  the wait is relative).
-		 */
-
-		now = get_now();
-		t = find_nearest_timer();
-		if (t) {
-			diff = t->target - now;
-			if (diff < MIN_WAIT) {
-				diff = MIN_WAIT;
-			} else if (diff > MAX_WAIT) {
-				diff = MAX_WAIT;
-			}
-			timeout = (int) diff;  /* clamping ensures that fits */
-		} else {
-			if (poll_count == 0) {
-#if 0
-				fprintf(stderr, "no timers and no sockets to poll, exiting\n");
-				fflush(stderr);
-#endif
-				break;
-			}
-			timeout = (int) MAX_WAIT;
-		}
-
-		/*
-		 *  Poll for activity or timeout.
-		 */
-
-#if 0
-		fprintf(stderr, "going to poll, timeout %d ms, pollfd count %d\n", timeout, poll_count);
-		fflush(stderr);
-#endif
-
-		rc = poll(poll_list, poll_count, timeout);
-#if 0
-		fprintf(stderr, "poll rc: %d\n", rc);
-		fflush(stderr);
-#endif
-		if (rc < 0) {
-			/* error */
-		} else if (rc == 0) {
-			/* timeout */
-		} else {
-			/* 'rc' fds active */
-		}
-
-		/*
-		 *  Check socket activity, handle all sockets.  Handling is offloaded to
-		 *  Ecmascript code (fd + revents).
-		 *
-		 *  If FDs are removed from the poll list while we're processing callbacks,
-		 *  the entries are simply marked unused (fd set to 0) without actually
-		 *  removing them from the poll list.  This ensures indices are not
-		 *  disturbed.  The poll list is compacted before next poll().
-		 */
-
-		n = (rc == 0 ? 0 : poll_count);  /* if timeout, no need to check pollfd */
-		for (i = 0; i < n; i++) {
-			struct pollfd *pfd = poll_list + i;
-
-			if (pfd->fd == 0) {
-				/* deleted, perhaps by previous callback */
-				continue;
-			}
-
-			if (pfd->revents) {
-#if 0
-				fprintf(stderr, "fd %d has revents: %d\n", (int) pfd->fd, (int) pfd->revents);
-				fflush(stderr);
-#endif
-				duk_dup(ctx, idx_fd_handler);
-				duk_dup(ctx, idx_eventloop);
-				duk_push_int(ctx, pfd->fd);
-				duk_push_int(ctx, pfd->revents);
-				rc = duk_pcall_method(ctx, 2 /*nargs*/);
-				if (rc) {
-#if 0
-					fprintf(stderr, "fd callback failed for fd %d: %s\n", (int) pfd->fd, duk_to_string(ctx, -1));
-					fflush(stderr);
-#endif
-				}
-				duk_pop(ctx);
-
-				pfd->revents = 0;
-			}
-
-		}
-	}
-
-	duk_pop_n(ctx, 3);
-
-	return 0;
-}
-
-static int create_timer(duk_context *ctx) {
-	double delay;
-	int oneshot;
-	int idx;
-	int64_t timer_id;
-	double now;
-	ev_timer *t;
-
-	now = get_now();
-
-	/* indexes:
-	 *   0 = function (callback)
-	 *   1 = delay
-	 *   2 = boolean: oneshot
-	 */
-
-	delay = duk_require_number(ctx, 1);
-	if (delay < MIN_DELAY) {
-		delay = MIN_DELAY;
-	}
-	oneshot = duk_require_boolean(ctx, 2);
-
-	if (timer_count >= MAX_TIMERS) {
-		duk_error(ctx, DUK_ERR_RANGE_ERROR, "out of timer slots");
-	}
-	idx = timer_count++;
-	timer_id = timer_next_id++;
-	t = timer_list + idx;
-
-	memset((void *) t, 0, sizeof(ev_timer));
-	t->id = timer_id;
-	t->target = now + delay;
-	t->delay = delay;
-	t->oneshot = oneshot;
-	t->removed = 0;
-
-	/* Timer is now at the last position; use swaps to "bubble" it to its
-	 * correct sorted position.
-	 */
-
-	bubble_last_timer();
-
-	/* Finally, register the callback to the global stash 'eventTimers' object. */
-
-	duk_push_global_stash(ctx);
-	duk_get_prop_string(ctx, -1, "eventTimers");  /* -> [ func delay oneshot stash eventTimers ] */
-	duk_push_number(ctx, (double) timer_id);
-	duk_dup(ctx, 0);
-	duk_put_prop(ctx, -3);  /* eventTimers[timer_id] = callback */
-
-	/* Return timer id. */
-
-	duk_push_number(ctx, (double) timer_id);
-#if 0
-	fprintf(stderr, "created timer id: %d\n", (int) timer_id);
-	fflush(stderr);
-#endif
-	return 1;
-}
-
-static int delete_timer(duk_context *ctx) {
-	int i, n;
-	int64_t timer_id;
-	ev_timer *t;
-	int found = 0;
-
-	/* indexes:
-	 *   0 = timer id
-	 */
-
-	timer_id = (int64_t) duk_require_number(ctx, 0);
-
-	/*
-	 *  Unlike insertion, deletion needs a full scan of the timer list
-	 *  and an expensive remove.  If no match is found, nothing is deleted.
-	 *  Caller gets a boolean return code indicating match.
-	 *
-	 *  When a timer is being expired and its user callback is running,
-	 *  the timer has been moved to 'timer_expiring' and its deletion
-	 *  needs special handling: just mark it to-be-deleted and let the
-	 *  expiry code remove it.
-	 */
-
-	t = &timer_expiring;
-	if (t->id == timer_id) {
-		t->removed = 1;
-		duk_push_true(ctx);
-#if 0
-		fprintf(stderr, "deleted expiring timer id: %d\n", (int) timer_id);
-		fflush(stderr);
-#endif
-		return 1;
-	}
-
-	n = timer_count;
-	for (i = 0; i < n; i++) {
-		t = timer_list + i;
-		if (t->id == timer_id) {
-			found = 1;
-
-			/* Shift elements downwards to keep the timer list dense
-			 * (no need if last element).
-			 */
-			if (i < timer_count - 1) {
-				memmove((void *) t, (void *) (t + 1), (timer_count - i - 1) * sizeof(ev_timer));
-			}
-
-			/* Zero last element for clarity. */
-			memset((void *) (timer_list + n - 1), 0, sizeof(ev_timer));
-
-			/* Update timer_count. */
-			timer_count--;
-
-			/* The C state is now up-to-date, but we still need to delete
-			 * the timer callback state from the global 'stash'.
-			 */
-
-			duk_push_global_stash(ctx);
-			duk_get_prop_string(ctx, -1, "eventTimers");  /* -> [ timer_id stash eventTimers ] */
-			duk_push_number(ctx, (double) timer_id);
-			duk_del_prop(ctx, -2);  /* delete eventTimers[timer_id] */
-
-#if 0
-			fprintf(stderr, "deleted timer id: %d\n", (int) timer_id);
-			fflush(stderr);
-#endif
-			break;
-		}
-	}
-
-#if 0
-	if (!found) {
-		fprintf(stderr, "trying to delete timer id %d, but not found; ignoring\n", (int) timer_id);
-		fflush(stderr);
-	}
-#endif
-
-	duk_push_boolean(ctx, found);
-	return 1;
-}
-
-static int listen_fd(duk_context *ctx) {
-	int fd = duk_require_int(ctx, 0);
-	int events = duk_require_int(ctx, 1);
-	int i, n;
-	struct pollfd *pfd;
-
-#if 0
-	fprintf(stderr, "listen_fd: fd=%d, events=%d\n", fd, events);
-	fflush(stderr);
-#endif
-	/* events == 0 means stop listening to the FD */
-
-	n = poll_count;
-	for (i = 0; i < n; i++) {
-		pfd = poll_list + i;
-		if (pfd->fd == fd) {
-#if 0
-			fprintf(stderr, "listen_fd: fd found at index %d\n", i);
-			fflush(stderr);
-#endif
-			if (events == 0) {
-				/* mark to-be-deleted, cleaned up by next poll */
-				pfd->fd = 0;
-			} else {
-				pfd->events = events;
-			}
-			return 0;
-		}
-	}
-
-	/* not found, append to list */
-#if 0
-	fprintf(stderr, "listen_fd: fd not found on list, add new entry\n");
-	fflush(stderr);
-#endif
-
-	if (poll_count >= MAX_FDS) {
-		duk_error(ctx, DUK_ERR_ERROR, "out of fd slots");
-	}
-
-	pfd = poll_list + poll_count;
-	pfd->fd = fd;
-	pfd->events = events;
-	pfd->revents = 0;
-	poll_count++;
-
-	return 0;
-}
-
-static int request_exit(duk_context *ctx) {
-	(void) ctx;
-	exit_requested = 1;
-	return 0;
-}
-
-static duk_function_list_entry eventloop_funcs[] = {
-	{ "createTimer", create_timer, 3 },
-	{ "deleteTimer", delete_timer, 1 },
-	{ "listenFd", listen_fd, 2 },
-	{ "requestExit", request_exit, 0 },
-	{ NULL, NULL, 0 }
-};
-
-void eventloop_register(duk_context *ctx) {
-	memset((void *) timer_list, 0, MAX_TIMERS * sizeof(ev_timer));
-	memset((void *) &timer_expiring, 0, sizeof(ev_timer));
-	memset((void *) poll_list, 0, MAX_FDS * sizeof(struct pollfd));
-
-	/* Set global 'EventLoop'. */
-	duk_push_global_object(ctx);
-	duk_push_object(ctx);
-	duk_put_function_list(ctx, -1, eventloop_funcs);
-	duk_put_prop_string(ctx, -2, "EventLoop");
-	duk_pop(ctx);
-
-	/* Initialize global stash 'eventTimers'. */
-	duk_push_global_stash(ctx);
-	duk_push_object(ctx);
-	duk_put_prop_string(ctx, -2, "eventTimers");
-	duk_pop(ctx);
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/c_eventloop.js
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/c_eventloop.js b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/c_eventloop.js
deleted file mode 100644
index b9e2d63..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/c_eventloop.js
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- *  C eventloop example (c_eventloop.c).
- *
- *  Ecmascript code to initialize the exposed API (setTimeout() etc) when
- *  using the C eventloop.
- *
- *  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Timers
- */
-
-/*
- *  Timer API
- */
-
-function setTimeout(func, delay) {
-    var cb_func;
-    var bind_args;
-    var timer_id;
-
-    if (typeof delay !== 'number') {
-        throw new TypeError('delay is not a number');
-    }
-
-    if (typeof func === 'string') {
-        // Legacy case: callback is a string.
-        cb_func = eval.bind(this, func);
-    } else if (typeof func !== 'function') {
-        throw new TypeError('callback is not a function/string');
-    } else if (arguments.length > 2) {
-        // Special case: callback arguments are provided.
-        bind_args = Array.prototype.slice.call(arguments, 2);  // [ arg1, arg2, ... ]
-        bind_args.unshift(this);  // [ global(this), arg1, arg2, ... ]
-        cb_func = func.bind.apply(func, bind_args);
-    } else {
-        // Normal case: callback given as a function without arguments.
-        cb_func = func;
-    }
-
-    timer_id = EventLoop.createTimer(cb_func, delay, true /*oneshot*/);
-
-    return timer_id;
-}
-
-function clearTimeout(timer_id) {
-    if (typeof timer_id !== 'number') {
-        throw new TypeError('timer ID is not a number');
-    }
-    var success = EventLoop.deleteTimer(timer_id);  /* retval ignored */
-}
-
-function setInterval(func, delay) {
-    var cb_func;
-    var bind_args;
-    var timer_id;
-
-    if (typeof delay !== 'number') {
-        throw new TypeError('delay is not a number');
-    }
-
-    if (typeof func === 'string') {
-        // Legacy case: callback is a string.
-        cb_func = eval.bind(this, func);
-    } else if (typeof func !== 'function') {
-        throw new TypeError('callback is not a function/string');
-    } else if (arguments.length > 2) {
-        // Special case: callback arguments are provided.
-        bind_args = Array.prototype.slice.call(arguments, 2);  // [ arg1, arg2, ... ]
-        bind_args.unshift(this);  // [ global(this), arg1, arg2, ... ]
-        cb_func = func.bind.apply(func, bind_args);
-    } else {
-        // Normal case: callback given as a function without arguments.
-        cb_func = func;
-    }
-
-    timer_id = EventLoop.createTimer(cb_func, delay, false /*oneshot*/);
-
-    return timer_id;
-}
-
-function clearInterval(timer_id) {
-    if (typeof timer_id !== 'number') {
-        throw new TypeError('timer ID is not a number');
-    }
-    EventLoop.deleteTimer(timer_id);
-}
-
-function requestEventLoopExit() {
-    EventLoop.requestExit();
-}
-
-/*
- *  Socket handling
- *
- *  Ideally this would be implemented more in C than here for more speed
- *  and smaller footprint: C code would directly maintain the callback state
- *  and such.
- *
- *  Also for more optimal I/O, the buffer churn caused by allocating and
- *  freeing a lot of buffer values could be eliminated by reusing buffers.
- *  Socket reads would then go into a pre-allocated buffer, for instance.
- */
-
-EventLoop.socketListening = {};
-EventLoop.socketReading = {};
-EventLoop.socketConnecting = {};
-
-EventLoop.fdPollHandler = function(fd, revents) {
-    var data;
-    var cb;
-    var rc;
-    var acc_res;
-
-    //print('activity on fd', fd, 'revents', revents);
-
-    if (revents & Poll.POLLIN) {
-        cb = this.socketReading[fd];
-        if (cb) {
-            data = Socket.read(fd);  // no size control now
-            //print('READ', Duktape.enc('jx', data));
-            if (data.length === 0) {
-                this.close(fd);
-                return;
-            }
-            cb(fd, data);
-        } else {
-            cb = this.socketListening[fd];
-            if (cb) {
-                acc_res = Socket.accept(fd);
-                //print('ACCEPT:', Duktape.enc('jx', acc_res));
-                cb(acc_res.fd, acc_res.addr, acc_res.port);
-            } else {
-                //print('UNKNOWN');
-            }
-        }
-    }
-
-    if (revents & Poll.POLLOUT) {
-        // Connected
-        cb = this.socketConnecting[fd];
-        if (cb) {
-            delete this.socketConnecting[fd];
-            cb(fd);
-        }
-    }
-
-    if ((revents & ~(Poll.POLLIN | Poll.POLLOUT)) !== 0) {
-        //print('unexpected revents, close fd');
-        this.close(fd);
-    }
-}
-
-EventLoop.server = function(address, port, cb_accepted) {
-    var fd = Socket.createServerSocket(address, port);
-    this.socketListening[fd] = cb_accepted;
-    this.listenFd(fd, Poll.POLLIN);
-}
-
-EventLoop.connect = function(address, port, cb_connected) {
-    var fd = Socket.connect(address, port);
-    this.socketConnecting[fd] = cb_connected;
-    this.listenFd(fd, Poll.POLLOUT);
-}
-
-EventLoop.close = function(fd) {
-    EventLoop.listenFd(fd, 0);
-    delete this.socketListening[fd];
-    delete this.socketReading[fd];
-    delete this.socketConnecting[fd];
-    Socket.close(fd);
-}
-
-EventLoop.setReader = function(fd, cb_read) {
-    this.socketReading[fd] = cb_read;
-    this.listenFd(fd, Poll.POLLIN);
-}
-
-EventLoop.write = function(fd, data) {
-    // This simple example doesn't have support for write blocking / draining
-    var rc = Socket.write(fd, Duktape.Buffer(data));
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/client-socket-test.js
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/client-socket-test.js b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/client-socket-test.js
deleted file mode 100644
index ff87784..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/client-socket-test.js
+++ /dev/null
@@ -1,24 +0,0 @@
-
-var HOST = 'localhost';
-var PORT = 80;
-var EXIT_TIMEOUT = 300e3;
-
-print('automatic exit after ' + (EXIT_TIMEOUT / 1e3) + ' seconds');
-setTimeout(function () {
-    print('exit timer');
-    EventLoop.requestExit();
-}, EXIT_TIMEOUT);
-
-EventLoop.connect(HOST, PORT, function (fd) {
-    print('connected to ' + HOST + ':' + PORT + ', fd', fd);
-    EventLoop.setReader(fd, function (fd, data) {
-        print('read from fd', fd);
-        print(data);
-        EventLoop.close(fd);
-    });
-    EventLoop.write(fd, "GET / HTTP/1.1\r\n" +
-                        "Host: " + HOST + "\r\n" +
-                        "User-Agent: client-socket-test.js\r\n" +
-                        "\r\n");
-});
-

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/curses-timers.js
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/curses-timers.js b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/curses-timers.js
deleted file mode 100644
index 4508665..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/curses-timers.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- *  Test using timers and intervals with curses.
- */
-
-if (typeof Ncurses !== 'object') {
-    throw new Error('Ncurses required');
-}
-
-function fillScreen(ch) {
-    var size, w, h;
-    var i, j;
-
-    size = Ncurses.getmaxyx();
-    h = size[0];
-    w = size[1];
-
-    for (i = 0; i < h; i++) {
-        for (j = 0; j < w; j++) {
-            Ncurses.mvprintw(i, j, ch);
-        }
-    }
-    Ncurses.refresh();
-}
-
-function main() {
-    var i, j;
-    var counters = [];
-    var size, w, h;
-
-    Ncurses.initscr();
-    size = Ncurses.getmaxyx();
-    h = size[0];
-    w = size[1];
-
-    fillScreen('.');
-
-    setInterval(function () {
-        Ncurses.mvprintw(1, 4, new Date().toISOString());
-        Ncurses.refresh();
-    }, 1000);
-
-    function addCounter(row, index, interval) {
-        counters[index] = 0;
-        setInterval(function () {
-            counters[index]++;
-            Ncurses.mvprintw(row, 4, '' + Date.now() + ' ' + counters[index]);
-            Ncurses.refresh();
-        }, interval);
-    }
-
-    function addRandomChar(row, col, interval) {
-        setTimeout(function () {
-            Ncurses.mvprintw(row, col, String.fromCharCode(Math.random() * 64 + 0x20));
-            Ncurses.refresh();
-        }, interval);
-    }
-
-    for (i = 0; i < h - 5; i++) {
-        addCounter(3 + i, i, 363 * i + 400);
-    }
-
-    /* Here the inserts take a lot of time because the underlying timer manager
-     * data structure has O(n) insertion performance.
-     */
-    for (i = 0; i < h - 5; i++) {
-        for (j = 0; j < w - 50; j++) {
-            // Math.exp(0)...Math.exp(8) is an uneven distribution between 1...~2980.
-            addRandomChar(3 + i, 28 + j, 58000 - Math.exp(Math.random() * 8) * 20);
-        }
-    }
-
-    setTimeout(function () {
-        Ncurses.endwin();
-        Ncurses.delscreen();
-        requestEventLoopExit();
-    }, 120e3);
-}
-
-main();

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/ecma_eventloop.js
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/ecma_eventloop.js b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/ecma_eventloop.js
deleted file mode 100644
index bad4e4d..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/ecma_eventloop.js
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- *  Pure Ecmascript eventloop example.
- *
- *  Timer state handling is inefficient in this trivial example.  Timers are
- *  kept in an array sorted by their expiry time which works well for expiring
- *  timers, but has O(n) insertion performance.  A better implementation would
- *  use a heap or some other efficient structure for managing timers so that
- *  all operations (insert, remove, get nearest timer) have good performance.
- *
- *  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Timers
- */
-
-/*
- *  Event loop
- *
- *  Timers are sorted by 'target' property which indicates expiry time of
- *  the timer.  The timer expiring next is last in the array, so that
- *  removals happen at the end, and inserts for timers expiring in the
- *  near future displace as few elements in the array as possible.
- */
-
-EventLoop = {
-    // timers
-    timers: [],         // active timers, sorted (nearest expiry last)
-    expiring: null,     // set to timer being expired (needs special handling in clearTimeout/clearInterval)
-    nextTimerId: 1,
-    minimumDelay: 1,
-    minimumWait: 1,
-    maximumWait: 60000,
-    maxExpirys: 10,
-
-    // sockets
-    socketListening: {},  // fd -> callback
-    socketReading: {},    // fd -> callback
-    socketConnecting: {}, // fd -> callback
-
-    // misc
-    exitRequested: false
-};
-
-EventLoop.dumpState = function() {
-    print('TIMER STATE:');
-    this.timers.forEach(function(t) {
-        print('    ' + Duktape.enc('jx', t));
-    });
-    if (this.expiring) {
-        print('    EXPIRING: ' + Duktape.enc('jx', this.expiring));
-    }
-}
-
-// Get timer with lowest expiry time.  Since the active timers list is
-// sorted, it's always the last timer.
-EventLoop.getEarliestTimer = function() {
-    var timers = this.timers;
-    n = timers.length;
-    return (n > 0 ? timers[n - 1] : null);
-}
-
-EventLoop.getEarliestWait = function() {
-    var t = this.getEarliestTimer();
-    return (t ? t.target - Date.now() : null);
-}
-
-EventLoop.insertTimer = function(timer) {
-    var timers = this.timers;
-    var i, n, t;
-
-    /*
-     *  Find 'i' such that we want to insert *after* timers[i] at index i+1.
-     *  If no such timer, for-loop terminates with i-1, and we insert at -1+1=0.
-     */
-
-    n = timers.length;
-    for (i = n - 1; i >= 0; i--) {
-        t = timers[i];
-        if (timer.target <= t.target) {
-            // insert after 't', to index i+1
-            break;
-        }
-    }
-
-    timers.splice(i + 1 /*start*/, 0 /*deleteCount*/, timer);
-}
-
-// Remove timer/interval with a timer ID.  The timer/interval can reside
-// either on the active list or it may be an expired timer (this.expiring)
-// whose user callback we're running when this function gets called.
-EventLoop.removeTimerById = function(timer_id) {
-    var timers = this.timers;
-    var i, n, t;
-
-    t = this.expiring;
-    if (t) {
-        if (t.id === timer_id) {
-            // Timer has expired and we're processing its callback.  User
-            // callback has requested timer deletion.  Mark removed, so
-            // that the timer is not reinserted back into the active list.
-            // This is actually a common case because an interval may very
-            // well cancel itself.
-            t.removed = true;
-            return;
-        }
-    }
-
-    n = timers.length;
-    for (i = 0; i < n; i++) {
-        t = timers[i];
-        if (t.id === timer_id) {
-            // Timer on active list: mark removed (not really necessary, but
-            // nice for dumping), and remove from active list.
-            t.removed = true;
-            this.timers.splice(i /*start*/, 1 /*deleteCount*/);
-            return;
-        }
-    }
-
-   // no such ID, ignore
-}
-
-EventLoop.processTimers = function() {
-    var now = Date.now();
-    var timers = this.timers;
-    var sanity = this.maxExpirys;
-    var n, t;
-
-    /*
-     *  Here we must be careful with mutations: user callback may add and
-     *  delete an arbitrary number of timers.
-     *
-     *  Current solution is simple: check whether the timer at the end of
-     *  the list has expired.  If not, we're done.  If it has expired,
-     *  remove it from the active list, record it in this.expiring, and call
-     *  the user callback.  If user code deletes the this.expiring timer,
-     *  there is special handling which just marks the timer deleted so
-     *  it won't get inserted back into the active list.
-     *
-     *  This process is repeated at most maxExpirys times to ensure we don't
-     *  get stuck forever; user code could in principle add more and more
-     *  already expired timers.
-     */
-
-    while (sanity-- > 0) {
-        // If exit requested, don't call any more callbacks.  This allows
-        // a callback to do cleanups and request exit, and can be sure that
-        // no more callbacks are processed.
-
-        if (this.exitRequested) {
-            //print('exit requested, exit');
-            break;
-        }
-
-        // Timers to expire?
-
-        n = timers.length;
-        if (n <= 0) {
-            break;
-        }
-        t = timers[n - 1];
-        if (now <= t.target) {
-            // Timer has not expired, and no other timer could have expired
-            // either because the list is sorted.
-            break;
-        }
-        timers.pop();
-
-        // Remove the timer from the active list and process it.  The user
-        // callback may add new timers which is not a problem.  The callback
-        // may also delete timers which is not a problem unless the timer
-        // being deleted is the timer whose callback we're running; this is
-        // why the timer is recorded in this.expiring so that clearTimeout()
-        // and clearInterval() can detect this situation.
-
-        if (t.oneshot) {
-            t.removed = true;  // flag for removal
-        } else {
-            t.target = now + t.delay;
-        }
-        this.expiring = t;
-        try {
-            t.cb();
-        } catch (e) {
-            print('timer callback failed, ignored: ' + e);
-        }
-        this.expiring = null;
-
-        // If the timer was one-shot, it's marked 'removed'.  If the user callback
-        // requested deletion for the timer, it's also marked 'removed'.  If the
-        // timer is an interval (and is not marked removed), insert it back into
-        // the timer list.
-
-        if (!t.removed) {
-            // Reinsert interval timer to correct sorted position.  The timer
-            // must be an interval timer because one-shot timers are marked
-            // 'removed' above.
-            this.insertTimer(t);
-        }
-    }
-}
-
-EventLoop.run = function() {
-    var wait;
-    var POLLIN = Poll.POLLIN;
-    var POLLOUT = Poll.POLLOUT;
-    var poll_set;
-    var poll_count;
-    var fd;
-    var t, rev;
-    var rc;
-    var acc_res;
-
-    for (;;) {
-        /*
-         *  Process expired timers.
-         */
-
-        this.processTimers();
-        //this.dumpState();
-
-        /*
-         *  Exit check (may be requested by a user callback)
-         */
-
-        if (this.exitRequested) {
-            //print('exit requested, exit');
-            break;
-        }
-
-        /*
-         *  Create poll socket list.  This is a very naive approach.
-         *  On Linux, one could use e.g. epoll() and manage socket lists
-         *  incrementally.
-         */
-
-        poll_set = {};
-        poll_count = 0;
-        for (fd in this.socketListening) {
-            poll_set[fd] = { events: POLLIN, revents: 0 };
-            poll_count++;
-        }
-        for (fd in this.socketReading) {
-            poll_set[fd] = { events: POLLIN, revents: 0 };
-            poll_count++;
-        }
-        for (fd in this.socketConnecting) {
-            poll_set[fd] = { events: POLLOUT, revents: 0 };
-            poll_count++;
-        }
-        //print(new Date(), 'poll_set IN:', Duktape.enc('jx', poll_set));
-
-        /*
-         *  Wait timeout for timer closest to expiry.  Since the poll
-         *  timeout is relative, get this as close to poll() as possible.
-         */
-
-        wait = this.getEarliestWait();
-        if (wait === null) {
-            if (poll_count === 0) {
-                print('no active timers and no sockets to poll, exit');
-                break;
-            } else {
-                wait = this.maximumWait;
-            }
-        } else {
-            wait = Math.min(this.maximumWait, Math.max(this.minimumWait, wait));
-        }
-
-        /*
-         *  Do the actual poll.
-         */
-
-        try {
-            Poll.poll(poll_set, wait);
-        } catch (e) {
-            // Eat errors silently.  When resizing curses window an EINTR
-            // happens now.
-        }
-
-        /*
-         *  Process all sockets so that nothing is left unhandled for the
-         *  next round.
-         */
-
-        //print(new Date(), 'poll_set OUT:', Duktape.enc('jx', poll_set));
-        for (fd in poll_set) {
-            t = poll_set[fd];
-            rev = t.revents;
-
-            if (rev & POLLIN) {
-                cb = this.socketReading[fd];
-                if (cb) {
-                    data = Socket.read(fd);  // no size control now
-                    //print('READ', Duktape.enc('jx', data));
-                    if (data.length === 0) {
-                        //print('zero read for fd ' + fd + ', closing forcibly');
-                        rc = Socket.close(fd);  // ignore result
-                        delete this.socketListening[fd];
-                        delete this.socketReading[fd];
-                    } else {
-                        cb(fd, data);
-                    }
-                } else {
-                    cb = this.socketListening[fd];
-                    if (cb) {
-                        acc_res = Socket.accept(fd);
-                        //print('ACCEPT:', Duktape.enc('jx', acc_res));
-                        cb(acc_res.fd, acc_res.addr, acc_res.port);
-                    } else {
-                        //print('UNKNOWN');
-                    }
-                }
-            }
-
-            if (rev & POLLOUT) {
-                cb = this.socketConnecting[fd];
-                if (cb) {
-                    delete this.socketConnecting[fd];
-                    cb(fd);
-                } else {
-                    //print('UNKNOWN POLLOUT');
-                }
-            }
-
-            if ((rev & ~(POLLIN | POLLOUT)) !== 0) {
-                //print('revents ' + t.revents + ' for fd ' + fd + ', closing forcibly');
-                rc = Socket.close(fd);  // ignore result
-                delete this.socketListening[fd];
-                delete this.socketReading[fd];
-            }
-        }
-    }
-}
-
-EventLoop.requestExit = function() {
-    this.exitRequested = true;
-}
-
-EventLoop.server = function(address, port, cb_accepted) {
-    var fd = Socket.createServerSocket(address, port);
-    this.socketListening[fd] = cb_accepted;
-}
-
-EventLoop.connect = function(address, port, cb_connected) {
-    var fd = Socket.connect(address, port);
-    this.socketConnecting[fd] = cb_connected;
-}
-
-EventLoop.close = function(fd) {
-    delete this.socketReading[fd];
-    delete this.socketListening[fd];
-}
-
-EventLoop.setReader = function(fd, cb_read) {
-    this.socketReading[fd] = cb_read;
-}
-
-EventLoop.write = function(fd, data) {
-    // This simple example doesn't have support for write blocking / draining
-    var rc = Socket.write(fd, Duktape.Buffer(data));
-}
-
-/*
- *  Timer API
- *
- *  These interface with the singleton EventLoop.
- */
-
-function setTimeout(func, delay) {
-    var cb_func;
-    var bind_args;
-    var timer_id;
-    var evloop = EventLoop;
-
-    if (typeof delay !== 'number') {
-        throw new TypeError('delay is not a number');
-    }
-    delay = Math.max(evloop.minimumDelay, delay);
-
-    if (typeof func === 'string') {
-        // Legacy case: callback is a string.
-        cb_func = eval.bind(this, func);
-    } else if (typeof func !== 'function') {
-        throw new TypeError('callback is not a function/string');
-    } else if (arguments.length > 2) {
-        // Special case: callback arguments are provided.
-        bind_args = Array.prototype.slice.call(arguments, 2);  // [ arg1, arg2, ... ]
-        bind_args.unshift(this);  // [ global(this), arg1, arg2, ... ]
-        cb_func = func.bind.apply(func, bind_args);
-    } else {
-        // Normal case: callback given as a function without arguments.
-        cb_func = func;
-    }
-
-    timer_id = evloop.nextTimerId++;
-
-    evloop.insertTimer({
-        id: timer_id,
-        oneshot: true,
-        cb: cb_func,
-        delay: delay,
-        target: Date.now() + delay
-    });
-
-    return timer_id;
-}
-
-function clearTimeout(timer_id) {
-    var evloop = EventLoop;
-
-    if (typeof timer_id !== 'number') {
-        throw new TypeError('timer ID is not a number');
-    }
-    evloop.removeTimerById(timer_id);
-}
-
-function setInterval(func, delay) {
-    var cb_func;
-    var bind_args;
-    var timer_id;
-    var evloop = EventLoop;
-
-    if (typeof delay !== 'number') {
-        throw new TypeError('delay is not a number');
-    }
-    delay = Math.max(evloop.minimumDelay, delay);
-
-    if (typeof func === 'string') {
-        // Legacy case: callback is a string.
-        cb_func = eval.bind(this, func);
-    } else if (typeof func !== 'function') {
-        throw new TypeError('callback is not a function/string');
-    } else if (arguments.length > 2) {
-        // Special case: callback arguments are provided.
-        bind_args = Array.prototype.slice.call(arguments, 2);  // [ arg1, arg2, ... ]
-        bind_args.unshift(this);  // [ global(this), arg1, arg2, ... ]
-        cb_func = func.bind.apply(func, bind_args);
-    } else {
-        // Normal case: callback given as a function without arguments.
-        cb_func = func;
-    }
-
-    timer_id = evloop.nextTimerId++;
-
-    evloop.insertTimer({
-        id: timer_id,
-        oneshot: false,
-        cb: cb_func,
-        delay: delay,
-        target: Date.now() + delay
-    });
-
-    return timer_id;
-}
-
-function clearInterval(timer_id) {
-    var evloop = EventLoop;
-
-    if (typeof timer_id !== 'number') {
-        throw new TypeError('timer ID is not a number');
-    }
-    evloop.removeTimerById(timer_id);
-}
-
-/* custom call */
-function requestEventLoopExit() {
-    EventLoop.requestExit();
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/fileio.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/fileio.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/fileio.c
deleted file mode 100644
index df94cd4..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/fileio.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *  File I/O binding example.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "duktape.h"
-
-static int fileio_readfile(duk_context *ctx) {
-	const char *filename = duk_to_string(ctx, 0);
-	FILE *f = NULL;
-	long len;
-	void *buf;
-	size_t got;
-
-	if (!filename) {
-		goto error;
-	}
-
-	f = fopen(filename, "rb");
-	if (!f) {
-		goto error;
-	}
-
-	if (fseek(f, 0, SEEK_END) != 0) {
-		goto error;
-	}
-
-	len = ftell(f);
-
-	if (fseek(f, 0, SEEK_SET) != 0) {
-		goto error;
-	}
-
-	buf = duk_push_fixed_buffer(ctx, (size_t) len);
-
-	got = fread(buf, 1, len, f);
-	if (got != (size_t) len) {
-		goto error;
-	}
-
-	fclose(f);
-	f = NULL;
-
-	return 1;
-
- error:
-	if (f) {
-		fclose(f);
-	}
-
-	return DUK_RET_ERROR;
-}
-
-static duk_function_list_entry fileio_funcs[] = {
-	{ "readfile", fileio_readfile, 1 },
-	{ NULL, NULL, 0 }
-};
-
-void fileio_register(duk_context *ctx) {
-	/* Set global 'FileIo'. */
-	duk_push_global_object(ctx);
-	duk_push_object(ctx);
-	duk_put_function_list(ctx, -1, fileio_funcs);
-	duk_put_prop_string(ctx, -2, "FileIo");
-	duk_pop(ctx);
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/main.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/main.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/main.c
deleted file mode 100644
index 7627921..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/main.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- *  Main for evloop command line tool.
- *
- *  Runs a given script from file or stdin inside an eventloop.  The
- *  script can then access setTimeout() etc.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#ifndef NO_SIGNAL
-#include <signal.h>
-#endif
-
-#include "duktape.h"
-
-extern void poll_register(duk_context *ctx);
-extern void ncurses_register(duk_context *ctx);
-extern void socket_register(duk_context *ctx);
-extern void fileio_register(duk_context *ctx);
-extern void eventloop_register(duk_context *ctx);
-extern int eventloop_run(duk_context *ctx);  /* Duktape/C function, safe called */
-
-static int c_evloop = 0;
-
-#ifndef NO_SIGNAL
-static void my_sighandler(int x) {
-	fprintf(stderr, "Got signal %d\n", x);
-	fflush(stderr);
-}
-static void set_sigint_handler(void) {
-	(void) signal(SIGINT, my_sighandler);
-}
-#endif  /* NO_SIGNAL */
-
-/* Print error to stderr and pop error. */
-static void print_error(duk_context *ctx, FILE *f) {
-	if (duk_is_object(ctx, -1) && duk_has_prop_string(ctx, -1, "stack")) {
-		/* XXX: print error objects specially */
-		/* XXX: pcall the string coercion */
-		duk_get_prop_string(ctx, -1, "stack");
-		if (duk_is_string(ctx, -1)) {
-			fprintf(f, "%s\n", duk_get_string(ctx, -1));
-			fflush(f);
-			duk_pop_2(ctx);
-			return;
-		} else {
-			duk_pop(ctx);
-		}
-	}
-	duk_to_string(ctx, -1);
-	fprintf(f, "%s\n", duk_get_string(ctx, -1));
-	fflush(f);
-	duk_pop(ctx);
-}
-
-int wrapped_compile_execute(duk_context *ctx) {
-	int comp_flags = 0;
-	int rc;
-
-	/* Compile input and place it into global _USERCODE */
-	duk_compile(ctx, comp_flags);
-	duk_push_global_object(ctx);
-	duk_insert(ctx, -2);  /* [ ... global func ] */
-	duk_put_prop_string(ctx, -2, "_USERCODE");
-	duk_pop(ctx);
-#if 0
-	printf("compiled usercode\n");
-#endif
-
-	/* Start a zero timer which will call _USERCODE from within
-	 * the event loop.
-	 */
-	fprintf(stderr, "set _USERCODE timer\n");
-	fflush(stderr);
-	duk_eval_string(ctx, "setTimeout(function() { _USERCODE(); }, 0);");
-	duk_pop(ctx);
-
-	/* Finally, launch eventloop.  This call only returns after the
-	 * eventloop terminates.
-	 */
-	if (c_evloop) {
-		fprintf(stderr, "calling eventloop_run()\n");
-		fflush(stderr);
-		rc = duk_safe_call(ctx, eventloop_run, 0 /*nargs*/, 1 /*nrets*/);
-		if (rc != 0) {
-			fprintf(stderr, "eventloop_run() failed: %s\n", duk_to_string(ctx, -1));
-			fflush(stderr);
-		}
-		duk_pop(ctx);
-	} else {
-		fprintf(stderr, "calling EventLoop.run()\n");
-		fflush(stderr);
-		duk_eval_string(ctx, "EventLoop.run();");
-		duk_pop(ctx);
-	}
-
-	return 0;
-}
-
-int handle_fh(duk_context *ctx, FILE *f, const char *filename) {
-	char *buf = NULL;
-	int len;
-	int got;
-	int rc;
-	int retval = -1;
-
-	if (fseek(f, 0, SEEK_END) < 0) {
-		goto error;
-	}
-	len = (int) ftell(f);
-	if (fseek(f, 0, SEEK_SET) < 0) {
-		goto error;
-	}
-	buf = (char *) malloc(len);
-	if (!buf) {
-		goto error;
-	}
-
-	got = fread((void *) buf, (size_t) 1, (size_t) len, f);
-
-	duk_push_lstring(ctx, buf, got);
-	duk_push_string(ctx, filename);
-
-	free(buf);
-	buf = NULL;
-
-	rc = duk_safe_call(ctx, wrapped_compile_execute, 2 /*nargs*/, 1 /*nret*/);
-	if (rc != DUK_EXEC_SUCCESS) {
-		print_error(ctx, stderr);
-		goto error;
-	} else {
-		duk_pop(ctx);
-		retval = 0;
-	}
-	/* fall thru */
-
- error:
-	if (buf) {
-		free(buf);
-	}
-	return retval;
-}
-
-int handle_file(duk_context *ctx, const char *filename) {
-	FILE *f = NULL;
-	int retval;
-
-	f = fopen(filename, "rb");
-	if (!f) {
-		fprintf(stderr, "failed to open source file: %s\n", filename);
-		fflush(stderr);
-		goto error;
-	}
-
-	retval = handle_fh(ctx, f, filename);
-
-	fclose(f);
-	return retval;
-
- error:
-	return -1;
-}
-
-int handle_stdin(duk_context *ctx) {
-	int retval;
-
-	retval = handle_fh(ctx, stdin, "stdin");
-
-	return retval;
-}
-
-int main(int argc, char *argv[]) {
-	duk_context *ctx = NULL;
-	int retval = 0;
-	const char *filename = NULL;
-	int i;
-
-#ifndef NO_SIGNAL
-	set_sigint_handler();
-
-	/* This is useful at the global level; libraries should avoid SIGPIPE though */
-	/*signal(SIGPIPE, SIG_IGN);*/
-#endif
-
-	for (i = 1; i < argc; i++) {
-		char *arg = argv[i];
-		if (!arg) {
-			goto usage;
-		}
-		if (strcmp(arg, "-c") == 0) {
-			c_evloop = 1;
-		} else if (strlen(arg) > 1 && arg[0] == '-') {
-			goto usage;
-		} else {
-			if (filename) {
-				goto usage;
-			}
-			filename = arg;
-		}
-	}
-	if (!filename) {
-		goto usage;
-	}
-
-	ctx = duk_create_heap_default();
-
-	poll_register(ctx);
-	ncurses_register(ctx);
-	socket_register(ctx);
-	fileio_register(ctx);
-
-	if (c_evloop) {
-		fprintf(stderr, "Using C based eventloop (omit -c to use Ecmascript based eventloop)\n");
-		fflush(stderr);
-
-		eventloop_register(ctx);
-		duk_eval_file(ctx, "c_eventloop.js");
-	} else {
-		fprintf(stderr, "Using Ecmascript based eventloop (give -c to use C based eventloop)\n");
-		fflush(stderr);
-
-		duk_eval_file(ctx, "ecma_eventloop.js");
-	}
-
-	fprintf(stderr, "Executing code from: '%s'\n", filename);
-	fflush(stderr);
-
-	if (strcmp(filename, "-") == 0) {
-		if (handle_stdin(ctx) != 0) {
-			retval = 1;
-			goto cleanup;
-		}
-	} else {
-		if (handle_file(ctx, filename) != 0) {
-			retval = 1;
-			goto cleanup;
-		}
-	}
-
- cleanup:
-	if (ctx) {
-		duk_destroy_heap(ctx);
-	}
-
-	return retval;
-
- usage:
-	fprintf(stderr, "Usage: evloop [-c] <filename>\n");
-	fprintf(stderr, "\n");
-	fprintf(stderr, "Uses an Ecmascript based eventloop (ecma_eventloop.js) by default.\n");
-	fprintf(stderr, "If -c option given, uses a C based eventloop (c_eventloop.{c,js}).\n");
-	fprintf(stderr, "If <filename> is '-', the entire STDIN executed.\n");
-	fflush(stderr);
-	exit(1);
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/ncurses.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/ncurses.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/ncurses.c
deleted file mode 100644
index 7734fcc..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/ncurses.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- *  Ncurses bindings example.
- *
- *  VALGRIND NOTE: when you use ncurses, there seems to be no way to get a
- *  clean valgrind run.  Even if ncurses state is properly shut down, there
- *  will still be some residual leaks.
- *
- *  Debian: install libncurses5-dev
- */
-
-#include <curses.h>
-#include "duktape.h"
-
-static int ncurses_initscr(duk_context *ctx) {
-	WINDOW *win;
-
-	win = initscr();
-	duk_push_pointer(ctx, (void *) win);
-	return 1;
-}
-
-static int ncurses_endwin(duk_context *ctx) {
-	int rc;
-
-	rc = endwin();
-	duk_push_int(ctx, rc);
-	return 1;
-}
-
-static int ncurses_delscreen(duk_context *ctx) {
-	/* XXX: no screen management now */
-	(void) ctx;
-	return 0;
-}
-
-static int ncurses_getmaxyx(duk_context *ctx) {
-	int row, col;
-
-	getmaxyx(stdscr, row, col);
-
-	duk_push_array(ctx);
-	duk_push_int(ctx, row);
-	duk_put_prop_index(ctx, -2, 0);
-	duk_push_int(ctx, col);
-	duk_put_prop_index(ctx, -2, 1);
-	return 1;
-}
-
-static int ncurses_printw(duk_context *ctx) {
-	int rc;
-	const char *str;
-
-	str = duk_to_string(ctx, 0);
-	rc = printw("%s", str);
-	duk_push_int(ctx, rc);
-	return 1;
-}
-
-static int ncurses_mvprintw(duk_context *ctx) {
-	int y = duk_to_int(ctx, 0);
-	int x = duk_to_int(ctx, 1);
-	const char *str = duk_to_string(ctx, 2);
-	int rc;
-
-	rc = mvprintw(y, x, "%s", str);
-	duk_push_int(ctx, rc);
-	return 1;
-}
-
-static int ncurses_refresh(duk_context *ctx) {
-	int rc;
-
-	rc = refresh();
-	duk_push_int(ctx, rc);
-	return 1;
-}
-
-static int ncurses_getch(duk_context *ctx) {
-	int rc;
-
-	rc = getch();
-	duk_push_int(ctx, rc);
-	return 1;
-}
-
-static duk_function_list_entry ncurses_funcs[] = {
-	{ "initscr", ncurses_initscr, 0 },
-	{ "endwin", ncurses_endwin, 0 },
-	{ "delscreen", ncurses_delscreen, 0 },
-	{ "getmaxyx", ncurses_getmaxyx, 0 },
-	{ "printw", ncurses_printw, 1 },
-	{ "mvprintw", ncurses_mvprintw, 3 },
-	{ "refresh", ncurses_refresh, 0 },
-	{ "getch", ncurses_getch, 0 },
-	{ NULL, NULL, 0 }
-};
-
-void ncurses_register(duk_context *ctx) {
-	/* Set global 'Ncurses'. */
-	duk_push_global_object(ctx);
-	duk_push_object(ctx);
-	duk_put_function_list(ctx, -1, ncurses_funcs);
-	duk_put_prop_string(ctx, -2, "Ncurses");
-	duk_pop(ctx);
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/poll.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/poll.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/poll.c
deleted file mode 100644
index c78745d..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/poll.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- *  C wrapper for poll().
- */
-
-#define _GNU_SOURCE
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <poll.h>
-#include <time.h>
-
-#include "duktape.h"
-
-static int poll_poll(duk_context *ctx) {
-	int timeout = duk_to_int(ctx, 1);
-	int i, n, nchanged;
-	int fd, rc;
-	struct pollfd fds[20];
-	struct timespec ts;
-
-	memset(fds, 0, sizeof(fds));
-
-	n = 0;
-	duk_enum(ctx, 0, 0 /*enum_flags*/);
-	while (duk_next(ctx, -1, 0)) {
-		if ((size_t) n >= sizeof(fds) / sizeof(struct pollfd)) {
-			return -1;
-		}
-
-		/* [... enum key] */
-		duk_dup_top(ctx);  /* -> [... enum key key] */
-		duk_get_prop(ctx, 0);  /* -> [... enum key val] */
-		fd = duk_to_int(ctx, -2);
-
-		duk_push_string(ctx, "events");
-		duk_get_prop(ctx, -2);  /* -> [... enum key val events] */
-
-		fds[n].fd = fd;
-		fds[n].events = duk_to_int(ctx, -1);
-		fds[n].revents = 0;
-
-		duk_pop_n(ctx, 3);  /* -> [... enum] */
-
-		n++;
-	}
-	/* leave enum on stack */
-
-	memset(&ts, 0, sizeof(ts));
-	ts.tv_nsec = (timeout % 1000) * 1000000;
-	ts.tv_sec = timeout / 1000;
-
-	/*rc = ppoll(fds, n, &ts, NULL);*/
-	rc = poll(fds, n, timeout);
-	if (rc < 0) {
-		duk_error(ctx, DUK_ERR_ERROR, "%s (errno=%d)", strerror(errno), errno);
-	}
-
-	duk_push_array(ctx);
-	nchanged = 0;
-	for (i = 0; i < n; i++) {
-		/* update revents */
-
-		if (fds[i].revents) {
-			duk_push_int(ctx, fds[i].fd);  /* -> [... retarr fd] */
-			duk_put_prop_index(ctx, -2, nchanged);
-			nchanged++;
-		}
-
-		duk_push_int(ctx, fds[i].fd);  /* -> [... retarr key] */
-		duk_get_prop(ctx, 0);  /* -> [... retarr val] */
-		duk_push_string(ctx, "revents");
-		duk_push_int(ctx, fds[i].revents);  /* -> [... retarr val "revents" fds[i].revents] */
-		duk_put_prop(ctx, -3);  /* -> [... retarr val] */
-		duk_pop(ctx);
-	}
-
-	/* [retarr] */
-
-	return 1;
-}
-
-static duk_function_list_entry poll_funcs[] = {
-	{ "poll", poll_poll, 2 },
-	{ NULL, NULL, 0 }
-};
-
-static duk_number_list_entry poll_consts[] = {
-	{ "POLLIN", (double) POLLIN },
-	{ "POLLPRI", (double) POLLPRI },
-	{ "POLLOUT", (double) POLLOUT },
-#if 0
-	/* Linux 2.6.17 and upwards, requires _GNU_SOURCE etc, not added
-	 * now because we don't use it.
-	 */
-	{ "POLLRDHUP", (double) POLLRDHUP },
-#endif
-	{ "POLLERR", (double) POLLERR },
-	{ "POLLHUP", (double) POLLHUP },
-	{ "POLLNVAL", (double) POLLNVAL },
-	{ NULL, 0.0 }
-};
-
-void poll_register(duk_context *ctx) {
-	/* Set global 'Poll' with functions and constants. */
-	duk_push_global_object(ctx);
-	duk_push_object(ctx);
-	duk_put_function_list(ctx, -1, poll_funcs);
-	duk_put_number_list(ctx, -1, poll_consts);
-	duk_put_prop_string(ctx, -2, "Poll");
-	duk_pop(ctx);
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/server-socket-test.js
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/server-socket-test.js b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/server-socket-test.js
deleted file mode 100644
index 68510af..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/server-socket-test.js
+++ /dev/null
@@ -1,34 +0,0 @@
-
-var HOST = 'localhost'
-var PORT = 12345;
-var EXIT_TIMEOUT = 300e3;
-
-print('automatic exit after ' + (EXIT_TIMEOUT / 1e3) + ' seconds');
-setTimeout(function () {
-    print('exit timer');
-    EventLoop.requestExit();
-}, EXIT_TIMEOUT);
-
-print('listen on ' + HOST + ':' + PORT);
-EventLoop.server(HOST, PORT, function (fd, addr, port) {
-    print('new connection on fd ' + fd + ' from ' + addr + ':' + port);
-    EventLoop.setReader(fd, function (fd, data) {
-        var b, i, n, x;
-
-        // Handle socket data carefully: if you convert it to a string,
-        // it may not be valid UTF-8 etc.  Here we operate on the data
-        // directly in the buffer.
-
-        b = data.valueOf();  // ensure we get a plain buffer
-        n = b.length;
-        for (i = 0; i < n; i++) {
-            x = b[i];
-            if (x >= 0x61 && x <= 0x7a) {
-                b[i] = x - 0x20;  // uppercase
-            }
-        }
-
-        print('read data on fd ' + fd + ', length ' + data.length);
-        EventLoop.write(fd, data);
-    });
-});

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/socket.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/socket.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/socket.c
deleted file mode 100644
index a1587fa..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eventloop/socket.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- *  TCP sockets binding example.
- */
-
-#define _GNU_SOURCE
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <netdb.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <time.h>
-
-#include "duktape.h"
-
-#define  ERROR_FROM_ERRNO(ctx)  do { \
-		duk_error(ctx, DUK_ERR_ERROR, "%s (errno=%d)", strerror(errno), errno); \
-	} while (0)
-
-static void set_nonblocking(duk_context *ctx, int fd) {
-	int rc;
-	int flags;
-
-	rc = fcntl(fd, F_GETFL);
-	if (rc < 0) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-	flags = rc;
-
-	flags |= O_NONBLOCK;
-
-	rc = fcntl(fd, F_SETFL, flags);
-	if (rc < 0) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-}
-
-static void set_reuseaddr(duk_context *ctx, int fd) {
-	int val;
-	int rc;
-
-	val = 1;
-	rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const void *) &val, sizeof(val));
-	if (rc != 0) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-}
-
-#ifdef __APPLE__
-static void set_nosigpipe(duk_context *ctx, int fd) {
-	int val;
-	int rc;
-
-	val = 1;
-	rc = setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, (const void *) &val, sizeof(val));
-	if (rc != 0) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-}
-#endif
-
-static int socket_create_server_socket(duk_context *ctx) {
-	const char *addr = duk_to_string(ctx, 0);
-	int port = duk_to_int(ctx, 1);
-	int sock;
-	struct sockaddr_in sockaddr;
-	struct hostent *ent;
-	struct in_addr **addr_list;
-	struct in_addr *addr_inet;
-	int i;
-	int rc;
-
-	sock = socket(AF_INET, SOCK_STREAM, 0);
-	if (sock < 0) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-
-	set_nonblocking(ctx, sock);
-	set_reuseaddr(ctx, sock);
-#ifdef __APPLE__
-	set_nosigpipe(ctx, sock);
-#endif
-
-	ent = gethostbyname(addr);
-	if (!ent) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-
-	addr_list = (struct in_addr **) ent->h_addr_list;
-	addr_inet = NULL;
-	for (i = 0; addr_list[i]; i++) {
-		addr_inet = addr_list[i];
-		break;
-	}
-	if (!addr_inet) {
-		duk_error(ctx, DUK_ERR_ERROR, "cannot resolve %s", addr);
-	}
-
-	memset(&sockaddr, 0, sizeof(sockaddr));
-	sockaddr.sin_family = AF_INET;
-	sockaddr.sin_port = htons(port);
-	sockaddr.sin_addr = *addr_inet;
-
-	rc = bind(sock, (const struct sockaddr *) &sockaddr, sizeof(sockaddr));
-	if (rc < 0) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-
-	rc = listen(sock, 10 /*backlog*/);
-	if (rc < 0) {
-		(void) close(sock);
-		ERROR_FROM_ERRNO(ctx);
-	}
-
-	duk_push_int(ctx, sock);
-	return 1;
-}
-
-static int socket_close(duk_context *ctx) {
-	int sock = duk_to_int(ctx, 0);
-	int rc;
-
-	rc = close(sock);
-	if (rc < 0) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-	return 0;
-}
-
-static int socket_accept(duk_context *ctx) {
-	int sock = duk_to_int(ctx, 0);
-	int rc;
-	struct sockaddr_in addr;
-	socklen_t addrlen;
-
-	memset(&addr, 0, sizeof(addr));
-	addr.sin_family = AF_INET;
-	addrlen = sizeof(addr);
-
-	rc = accept(sock, (struct sockaddr *) &addr, &addrlen);
-	if (rc < 0) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-
-	set_nonblocking(ctx, sock);
-#ifdef __APPLE__
-	set_nosigpipe(ctx, sock);
-#endif
-
-	if (addrlen == sizeof(addr)) {
-		uint32_t tmp = ntohl(addr.sin_addr.s_addr);
-
-		duk_push_object(ctx);
-
-		duk_push_string(ctx, "fd");
-		duk_push_int(ctx, rc);
-		duk_put_prop(ctx, -3);
-		duk_push_string(ctx, "addr");
-		duk_push_sprintf(ctx, "%d.%d.%d.%d", ((tmp >> 24) & 0xff), ((tmp >> 16) & 0xff), ((tmp >> 8) & 0xff), (tmp & 0xff));
-		duk_put_prop(ctx, -3);
-		duk_push_string(ctx, "port");
-		duk_push_int(ctx, ntohs(addr.sin_port));
-		duk_put_prop(ctx, -3);
-
-		return 1;
-	}
-
-	return 0;
-}
-
-static int socket_connect(duk_context *ctx) {
-	const char *addr = duk_to_string(ctx, 0);
-	int port = duk_to_int(ctx, 1);
-	int sock;
-	struct sockaddr_in sockaddr;
-	struct hostent *ent;
-	struct in_addr **addr_list;
-	struct in_addr *addr_inet;
-	int i;
-	int rc;
-
-	sock = socket(AF_INET, SOCK_STREAM, 0);
-	if (sock < 0) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-
-	set_nonblocking(ctx, sock);
-#ifdef __APPLE__
-	set_nosigpipe(ctx, sock);
-#endif
-
-	ent = gethostbyname(addr);
-	if (!ent) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-
-	addr_list = (struct in_addr **) ent->h_addr_list;
-	addr_inet = NULL;
-	for (i = 0; addr_list[i]; i++) {
-		addr_inet = addr_list[i];
-		break;
-	}
-	if (!addr_inet) {
-		duk_error(ctx, DUK_ERR_ERROR, "cannot resolve %s", addr);
-	}
-
-	memset(&sockaddr, 0, sizeof(sockaddr));
-	sockaddr.sin_family = AF_INET;
-	sockaddr.sin_port = htons(port);
-	sockaddr.sin_addr = *addr_inet;
-
-	rc = connect(sock, (const struct sockaddr *) &sockaddr, (socklen_t) sizeof(sockaddr));
-	if (rc < 0) {
-		if (errno == EINPROGRESS) {
-#if 0
-			fprintf(stderr, "connect() returned EINPROGRESS as expected, need to poll writability\n");
-			fflush(stderr);
-#endif
-		} else {
-			ERROR_FROM_ERRNO(ctx);
-		}
-	}
-
-	duk_push_int(ctx, sock);
-	return 1;
-}
-
-static int socket_read(duk_context *ctx) {
-	int sock = duk_to_int(ctx, 0);
-	char readbuf[1024];
-	int rc;
-	void *data;
-
-	rc = recvfrom(sock, (void *) readbuf, sizeof(readbuf), 0, NULL, NULL);
-	if (rc < 0) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-
-	data = duk_push_fixed_buffer(ctx, rc);
-	memcpy(data, readbuf, rc);
-	return 1;
-}
-
-static int socket_write(duk_context *ctx) {
-	int sock = duk_to_int(ctx, 0);
-	const char *data;
-	size_t len;
-	ssize_t rc;
-
-	data = duk_to_buffer(ctx, 1, &len);
-
-	/* MSG_NOSIGNAL: avoid SIGPIPE */
-#ifdef __APPLE__
-	rc = sendto(sock, (void *) data, len, 0, NULL, 0);
-#else
-	rc = sendto(sock, (void *) data, len, MSG_NOSIGNAL, NULL, 0);
-#endif
-	if (rc < 0) {
-		ERROR_FROM_ERRNO(ctx);
-	}
-
-	duk_push_int(ctx, rc);
-	return 1;
-}
-
-static duk_function_list_entry socket_funcs[] = {
-	{ "createServerSocket", socket_create_server_socket, 2 },
-	{ "close", socket_close, 1 },
-	{ "accept", socket_accept, 1 },
-	{ "connect", socket_connect, 2 },
-	{ "read", socket_read, 1 },
-	{ "write", socket_write, 2 },
-	{ NULL, NULL, 0 }
-};
-
-void socket_register(duk_context *ctx) {
-	/* Set global 'Socket'. */
-	duk_push_global_object(ctx);
-	duk_push_object(ctx);
-	duk_put_function_list(ctx, -1, socket_funcs);
-	duk_put_prop_string(ctx, -2, "Socket");
-	duk_pop(ctx);
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/README.rst
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/README.rst b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/README.rst
deleted file mode 100644
index 1933094..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/README.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-===========================
-Duktape guide example files
-===========================
-
-Examples used in the Duktape guide.

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/fib.js
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/fib.js b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/fib.js
deleted file mode 100644
index 2b2982f..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/fib.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// fib.js
-function fib(n) {
-    if (n == 0) { return 0; }
-    if (n == 1) { return 1; }
-    return fib(n-1) + fib(n-2);
-}
-
-function test() {
-    var res = [];
-    for (i = 0; i < 20; i++) {
-        res.push(fib(i));
-    }
-    print(res.join(' '));
-}
-
-test();

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/prime.js
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/prime.js b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/prime.js
deleted file mode 100644
index 8959754..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/prime.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// prime.js
-
-// Pure Ecmascript version of low level helper
-function primeCheckEcmascript(val, limit) {
-    for (var i = 2; i <= limit; i++) {
-        if ((val % i) == 0) { return false; }
-    }
-    return true;
-}
-
-// Select available helper at load time
-var primeCheckHelper = (this.primeCheckNative || primeCheckEcmascript);
-
-// Check 'val' for primality
-function primeCheck(val) {
-    if (val == 1 || val == 2) { return true; }
-    var limit = Math.ceil(Math.sqrt(val));
-    while (limit * limit < val) { limit += 1; }
-    return primeCheckHelper(val, limit);
-}
-
-// Find primes below one million ending in '9999'.
-function primeTest() {
-    var res = [];
-
-    print('Have native helper: ' + (primeCheckHelper !== primeCheckEcmascript));
-    for (var i = 1; i < 1000000; i++) {
-        if (primeCheck(i) && (i % 10000) == 9999) { res.push(i); }
-    } 
-    print(res.join(' '));
-}
-

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/primecheck.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/primecheck.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/primecheck.c
deleted file mode 100644
index 36fa5d6..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/primecheck.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* primecheck.c */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "duktape.h"
-
-static duk_ret_t native_prime_check(duk_context *ctx) {
-    int val = duk_require_int(ctx, 0);
-    int lim = duk_require_int(ctx, 1);
-    int i;
-
-    for (i = 2; i <= lim; i++) {
-        if (val % i == 0) {
-            duk_push_false(ctx);
-            return 1;
-        }
-    }
-
-    duk_push_true(ctx);
-    return 1;
-}
-
-int main(int argc, const char *argv[]) {
-    duk_context *ctx = NULL;
-
-    ctx = duk_create_heap_default();
-    if (!ctx) {
-        printf("Failed to create a Duktape heap.\n");
-        exit(1);
-    }
-
-    duk_push_global_object(ctx);
-    duk_push_c_function(ctx, native_prime_check, 2 /*nargs*/);
-    duk_put_prop_string(ctx, -2, "primeCheckNative");
-
-    if (duk_peval_file(ctx, "prime.js") != 0) {
-        printf("Error: %s\n", duk_safe_to_string(ctx, -1));
-        goto finished;
-    }
-    duk_pop(ctx);  /* ignore result */
-
-    duk_get_prop_string(ctx, -1, "primeTest");
-    if (duk_pcall(ctx, 0) != 0) {
-        printf("Error: %s\n", duk_safe_to_string(ctx, -1));
-    }
-    duk_pop(ctx);  /* ignore result */
-
- finished:
-    duk_destroy_heap(ctx);
-
-    exit(0);
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/process.js
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/process.js b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/process.js
deleted file mode 100644
index 62b5011..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/process.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// process.js
-function processLine(line) {
-    return line.trim()
-        .replace(/[<>&"'\u0000-\u001F\u007E-\uFFFF]/g, function(x) {
-            // escape HTML characters
-            return '&#' + x.charCodeAt(0) + ';'
-         })
-        .replace(/\*(.*?)\*/g, function(x, m) {
-            // automatically bold text between stars
-            return '<b>' + m + '</b>';
-         });
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/processlines.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/processlines.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/processlines.c
deleted file mode 100644
index f91bdff..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/processlines.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* processlines.c */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "duktape.h"
-
-int main(int argc, const char *argv[]) {
-    duk_context *ctx = NULL;
-    char line[4096];
-    char idx;
-    int ch;
-
-    ctx = duk_create_heap_default();
-    if (!ctx) {
-        printf("Failed to create a Duktape heap.\n");
-        exit(1);
-    }
-
-    if (duk_peval_file(ctx, "process.js") != 0) {
-        printf("Error: %s\n", duk_safe_to_string(ctx, -1));
-        goto finished;
-    }
-    duk_pop(ctx);  /* ignore result */
-
-    memset(line, 0, sizeof(line));
-    idx = 0;
-    for (;;) {
-        if (idx >= sizeof(line)) {
-            printf("Line too long\n");
-            exit(1);
-        }
-
-        ch = fgetc(stdin);
-        if (ch == 0x0a) {
-            line[idx++] = '\0';
-
-            duk_push_global_object(ctx);
-            duk_get_prop_string(ctx, -1 /*index*/, "processLine");
-            duk_push_string(ctx, line);
-            if (duk_pcall(ctx, 1 /*nargs*/) != 0) {
-                printf("Error: %s\n", duk_safe_to_string(ctx, -1));
-            } else {
-                printf("%s\n", duk_safe_to_string(ctx, -1));
-            }
-            duk_pop(ctx);  /* pop result/error */
-
-            idx = 0;
-        } else if (ch == EOF) {
-            break;
-        } else {
-            line[idx++] = (char) ch;
-        }
-    }
-
- finished:
-    duk_destroy_heap(ctx);
-
-    exit(0);
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/uppercase.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/uppercase.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/uppercase.c
deleted file mode 100644
index 03d0869..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/guide/uppercase.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* uppercase.c */
-#include <stdio.h>
-#include <stdlib.h>
-#include "duktape.h"
-
-static int dummy_upper_case(duk_context *ctx) {
-    size_t sz;
-    const char *val = duk_require_lstring(ctx, 0, &sz);
-    size_t i;
-
-    /* We're going to need 'sz' additional entries on the stack. */
-    duk_require_stack(ctx, sz);
-
-    for (i = 0; i < sz; i++) {
-        char ch = val[i];
-        if (ch >= 'a' && ch <= 'z') {
-            ch = ch - 'a' + 'A';
-        }
-        duk_push_lstring(ctx, (const char *) &ch, 1);
-    }
-
-    duk_concat(ctx, sz);
-    return 1;
-}
-
-int main(int argc, char *argv[]) {
-    duk_context *ctx;
-
-    if (argc < 2) { exit(1); }
-
-    ctx = duk_create_heap_default();
-    if (!ctx) { exit(1); }
-
-    duk_push_c_function(ctx, dummy_upper_case, 1);
-    duk_push_string(ctx, argv[1]);
-    duk_call(ctx, 1);
-    printf("%s -> %s\n", argv[1], duk_to_string(ctx, -1));
-    duk_pop(ctx);
-
-    duk_destroy_heap(ctx);
-    return 0;
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/hello/README.rst
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/hello/README.rst b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/hello/README.rst
deleted file mode 100644
index 7afef53..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/hello/README.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-===================
-Hello world example
-===================
-
-Very simple example, most useful for compilation tests.

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/hello/hello.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/hello/hello.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/hello/hello.c
deleted file mode 100644
index 9113d2f..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/hello/hello.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *  Very simple example program
- */
-
-#include "duktape.h"
-
-int adder(duk_context *ctx) {
-	int i;
-	int n = duk_get_top(ctx);  /* #args */
-	double res = 0.0;
-
-	for (i = 0; i < n; i++) {
-		res += duk_to_number(ctx, i);
-	}
-
-	duk_push_number(ctx, res);
-	return 1;  /* one return value */
-}
-
-int main(int argc, char *argv[]) {
-	duk_context *ctx = duk_create_heap_default();
-
-	(void) argc; (void) argv;  /* suppress warning */
-
-	duk_eval_string(ctx, "print('Hello world!');");
-
-	duk_push_global_object(ctx);
-	duk_push_c_function(ctx, adder, DUK_VARARGS);
-	duk_put_prop_string(ctx, -2, "adder");
-	duk_pop(ctx);  /* pop global */
-
-	duk_eval_string(ctx, "print('2+3=' + adder(2, 3));");
-	duk_pop(ctx);  /* pop eval result */
-
-	duk_destroy_heap(ctx);
-
-	return 0;
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/jxpretty/README.rst
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/jxpretty/README.rst b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/jxpretty/README.rst
deleted file mode 100644
index 5ab43a8..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/jxpretty/README.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-================
-Jxpretty example
-================
-
-Simple command line utility to pretty print JSON in the JX format.

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/jxpretty/jxpretty.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/jxpretty/jxpretty.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/jxpretty/jxpretty.c
deleted file mode 100644
index 1e483ef..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/jxpretty/jxpretty.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *  Pretty print JSON from stdin into indented JX.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "duktape.h"
-
-static duk_ret_t do_jxpretty(duk_context *ctx) {
-	FILE *f = stdin;
-	char buf[4096];
-	size_t ret;
-
-	for (;;) {
-		if (ferror(f)) {
-			duk_error(ctx, DUK_ERR_ERROR, "ferror() on stdin");
-		}
-		if (feof(f)) {
-			break;
-		}
-
-		ret = fread(buf, 1, sizeof(buf), f);
-#if 0
-		fprintf(stderr, "Read: %ld\n", (long) ret);
-		fflush(stderr);
-#endif
-		if (ret == 0) {
-			break;
-		}
-
-		duk_require_stack(ctx, 1);
-		duk_push_lstring(ctx, (const char *) buf, ret);
-	}
-
-	duk_concat(ctx, duk_get_top(ctx));
-
-	duk_eval_string(ctx, "(function (v) { print(Duktape.enc('jx', JSON.parse(v), null, 4)); })");
-	duk_insert(ctx, -2);
-	duk_call(ctx, 1);
-
-	return 0;
-}
-
-int main(int argc, char *argv[]) {
-	duk_context *ctx;
-	duk_int_t rc;
-
-	/* suppress warnings */
-	(void) argc;
-	(void) argv;
-
-	ctx = duk_create_heap_default();
-
-	rc = duk_safe_call(ctx, do_jxpretty, 0 /*nargs*/, 1 /*nrets*/);
-	if (rc) {
-		fprintf(stderr, "ERROR: %s\n", duk_safe_to_string(ctx, -1));
-		fflush(stderr);
-	}
-
-	duk_destroy_heap(ctx);
-
-	return 0;
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/sandbox/README.rst
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/sandbox/README.rst b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/sandbox/README.rst
deleted file mode 100644
index 24df0a2..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/sandbox/README.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-===============
-Sandbox example
-===============
-
-Very simple, minimal sandboxing example.

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/sandbox/sandbox.c
----------------------------------------------------------------------
diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/sandbox/sandbox.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/sandbox/sandbox.c
deleted file mode 100644
index 915faa9..0000000
--- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/sandbox/sandbox.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- *  Sandboxing example
- *
- *  Uses custom memory allocation functions which keep track of total amount
- *  of memory allocated, imposing a maximum total allocation size.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "duktape.h"
-
-/*
- *  Memory allocator which backs to standard library memory functions but
- *  keeps a small header to track current allocation size.
- *
- *  Many other sandbox allocation models are useful, e.g. preallocated pools.
- */
-
-typedef struct {
-	/* The double value in the union is there to ensure alignment is
-	 * good for IEEE doubles too.  In many 32-bit environments 4 bytes
-	 * would be sufficiently aligned and the double value is unnecessary.
-	 */
-	union {
-		size_t sz;
-		double d;
-	} u;
-} alloc_hdr;
-
-static size_t total_allocated = 0;
-static size_t max_allocated = 256 * 1024;  /* 256kB sandbox */
-
-static void sandbox_dump_memstate(void) {
-#if 0
-	fprintf(stderr, "Total allocated: %ld\n", (long) total_allocated);
-	fflush(stderr);
-#endif
-}
-
-static void *sandbox_alloc(void *udata, duk_size_t size) {
-	alloc_hdr *hdr;
-
-	(void) udata;  /* Suppress warning. */
-
-	if (size == 0) {
-		return NULL;
-	}
-
-	if (total_allocated + size > max_allocated) {
-		fprintf(stderr, "Sandbox maximum allocation size reached, %ld requested in sandbox_alloc\n",
-		        (long) size);
-		fflush(stderr);
-		return NULL;
-	}
-
-	hdr = (alloc_hdr *) malloc(size + sizeof(alloc_hdr));
-	if (!hdr) {
-		return NULL;
-	}
-	hdr->u.sz = size;
-	total_allocated += size;
-	sandbox_dump_memstate();
-	return (void *) (hdr + 1);
-}
-
-static void *sandbox_realloc(void *udata, void *ptr, duk_size_t size) {
-	alloc_hdr *hdr;
-	size_t old_size;
-	void *t;
-
-	(void) udata;  /* Suppress warning. */
-
-	/* Handle the ptr-NULL vs. size-zero cases explicitly to minimize
-	 * platform assumptions.  You can get away with much less in specific
-	 * well-behaving environments.
-	 */
-
-	if (ptr) {
-		hdr = (alloc_hdr *) (((char *) ptr) - sizeof(alloc_hdr));
-		old_size = hdr->u.sz;
-
-		if (size == 0) {
-			total_allocated -= old_size;
-			free((void *) hdr);
-			sandbox_dump_memstate();
-			return NULL;
-		} else {
-			if (total_allocated - old_size + size > max_allocated) {
-				fprintf(stderr, "Sandbox maximum allocation size reached, %ld requested in sandbox_realloc\n",
-				        (long) size);
-				fflush(stderr);
-				return NULL;
-			}
-
-			t = realloc((void *) hdr, size + sizeof(alloc_hdr));
-			if (!t) {
-				return NULL;
-			}
-			hdr = (alloc_hdr *) t;
-			total_allocated -= old_size;
-			total_allocated += size;
-			hdr->u.sz = size;
-			sandbox_dump_memstate();
-			return (void *) (hdr + 1);
-		}
-	} else {
-		if (size == 0) {
-			return NULL;
-		} else {
-			if (total_allocated + size > max_allocated) {
-				fprintf(stderr, "Sandbox maximum allocation size reached, %ld requested in sandbox_realloc\n",
-				        (long) size);
-				fflush(stderr);
-				return NULL;
-			}
-
-			hdr = (alloc_hdr *) malloc(size + sizeof(alloc_hdr));
-			if (!hdr) {
-				return NULL;
-			}
-			hdr->u.sz = size;
-			total_allocated += size;
-			sandbox_dump_memstate();
-			return (void *) (hdr + 1);
-		}
-	}
-}
-
-static void sandbox_free(void *udata, void *ptr) {
-	alloc_hdr *hdr;
-
-	(void) udata;  /* Suppress warning. */
-
-	if (!ptr) {
-		return;
-	}
-	hdr = (alloc_hdr *) (((char *) ptr) - sizeof(alloc_hdr));
-	total_allocated -= hdr->u.sz;
-	free((void *) hdr);
-	sandbox_dump_memstate();
-}
-
-/*
- *  Sandbox setup and test
- */
-
-static duk_ret_t do_sandbox_test(duk_context *ctx) {
-	FILE *f;
-	char buf[4096];
-	size_t ret;
-	const char *globobj;
-
-	/*
-	 *  Setup sandbox
-	 */
-
-	globobj =
-		"({\n"
-		"    print: print,\n"
-		"    Math: {\n"
-		"        max: Math.max\n"
-		"    }\n"
-		"})\n";
-#if 1
-	fprintf(stderr, "Sandbox global object:\n----------------\n%s----------------\n", globobj);
-	fflush(stderr);
-#endif
-	duk_eval_string(ctx, globobj);
-	duk_set_global_object(ctx);
-
-	/*
-	 *  Execute code from specified file
-	 */
-
-	f = fopen(duk_require_string(ctx, -1), "rb");
-	if (!f) {
-		duk_error(ctx, DUK_ERR_ERROR, "failed to open file");
-	}
-
-	for (;;) {
-		if (ferror(f)) {
-			fclose(f);
-			duk_error(ctx, DUK_ERR_ERROR, "ferror when reading file");
-		}
-		if (feof(f)) {
-			break;
-		}
-
-		ret = fread(buf, 1, sizeof(buf), f);
-		if (ret == 0) {
-			break;
-		}
-
-		duk_push_lstring(ctx, (const char *) buf, ret);
-	}
-
-	duk_concat(ctx, duk_get_top(ctx) - 1);  /* -1 for filename */
-
-	/* -> [ ... filename source ] */
-
-	duk_insert(ctx, -2);
-
-	/* -> [ ... source filename ] */
-
-	duk_compile(ctx, 0 /*flags*/);  /* Compile as program */
-	duk_call(ctx, 0 /*nargs*/);
-
-	return 0;
-}
-
-/*
- *  Main
- */
-
-static void sandbox_fatal(duk_context *ctx, duk_errcode_t code, const char *msg) {
-	(void) ctx;  /* Suppress warning. */
-	fprintf(stderr, "FATAL %ld: %s\n", (long) code, (msg ? msg : "no message"));
-	fflush(stderr);
-	exit(1);  /* must not return */
-}
-
-int main(int argc, char *argv[]) {
-	duk_context *ctx;
-	duk_int_t rc;
-
-	if (argc < 2) {
-		fprintf(stderr, "Usage: sandbox <test.js>\n");
-		fflush(stderr);
-		exit(1);
-	}
-
-	ctx = duk_create_heap(sandbox_alloc,
-	                      sandbox_realloc,
-	                      sandbox_free,
-	                      NULL,
-	                      sandbox_fatal);
-
-	duk_push_string(ctx, argv[1]);
-	rc = duk_safe_call(ctx, do_sandbox_test, 1 /*nargs*/, 1 /*nrets*/);
-	if (rc) {
-		fprintf(stderr, "ERROR: %s\n", duk_safe_to_string(ctx, -1));
-		fflush(stderr);
-	}
-
-	duk_destroy_heap(ctx);
-
-	/* Should be zero. */
-	fprintf(stderr, "Final allocation: %ld\n", (long) total_allocated);
-	fflush(stderr);
-
-	return 1;
-}