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; -}