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/cpp-exceptions/README.rst ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/cpp-exceptions/README.rst b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/cpp-exceptions/README.rst deleted file mode 100644 index bbc26a0..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/cpp-exceptions/README.rst +++ /dev/null @@ -1,29 +0,0 @@ -========================================= -C++ exceptions for long control transfers -========================================= - -Normally Duktape uses ``setjmp()`` / ``longjmp()`` or their variants for -internal long control transfers. One downside of these functions is that -C++ automatic destructors (scope-based resource management, SBRM, a special -case of RAII) in Duktape/C functions won't be executed which is awkward for -C++ programmers. - -When ``DUK_USE_CPP_EXCEPTIONS`` (``DUK_OPT_CPP_EXCEPTIONS``) is defined, and -both Duktape and application code is compiled using a C++ compiler, Duktape -uses C++ ``try-catch`` and ``throw`` for internal long control transfers. -This allows automatic destructors to run as expected. The config option is -not enabled by default because C++ exceptions are sometimes disabled even -when a C++ compiler is used (e.g. for performance reasons). - -The ``cpp_exceptions.cpp`` example illustrates how C++ exceptions can be -used in Duktape/C functions at the moment: - -* Duktape uses C++ try/catch/throw internally; this is not visible to user - code directly. - -* Automatic destructors (scope-based resource management) work as expected. - -* C++ exceptions can be used in Duktape/C functions normally, but user - exceptions must be caught before they reach Duktape. If this is not - done, such exceptions are caught by Duktape and converted to API errors - (in other words, they won't propagate "through" Duktape at the moment).
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/cpp-exceptions/cpp_exceptions.cpp ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/cpp-exceptions/cpp_exceptions.cpp b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/cpp-exceptions/cpp_exceptions.cpp deleted file mode 100644 index 6fb3194..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/cpp-exceptions/cpp_exceptions.cpp +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Example of how to use DUK_USE_CPP_EXCEPTIONS to support automatic - * variables (e.g. destructor calls) in Duktape/C functions. - * - * Compile with -DDUK_OPT_CPP_EXCEPTIONS: - * - * $ g++ -otest -DDUK_OPT_CPP_EXCEPTIONS -I<duktape_dist>/src/ \ - * <duktape_dist>/src/duktape.c cpp_exceptions.cpp -lm - * - * or ensure duk_config.h has DUK_USE_CPP_EXCEPTIONS enabled using - * genconfig. When executed you should see something like: - * - * $ ./test - * my_class instance created - * my_class instance destroyed <== destructor gets called - * --> rc=1 (SyntaxError: parse error (line 1)) - * [...] - * - * Duktape uses a custom exception class (duk_internal_exception) which - * doesn't inherit from any base class, so that catching any base classes - * in user code won't accidentally catch exceptions thrown by Duktape. - */ - -#if !defined(__cplusplus) -#error compile using a c++ compiler -#endif - -#include <stdio.h> -#include <exception> -#include "duktape.h" - -#if defined(__cplusplus) && (__cplusplus >= 201103L) -#define NOEXCEPT noexcept -#else -#define NOEXCEPT throw() -#endif - -/* - * Example class with a destructor - */ - -class my_class { - public: - my_class(); - ~my_class(); -}; - -my_class::my_class() { - printf("my_class instance created\n"); -} - -my_class::~my_class() { - printf("my_class instance destroyed\n"); -} - -/* - * SyntaxError caused by eval exits Duktape/C function but destructors - * are executed. - */ - -duk_ret_t test1(duk_context *ctx) { - my_class myclass; - - duk_eval_string(ctx, "aiee="); - - return 0; -} - -/* - * You can use C++ exceptions inside Duktape/C functions for your own - * purposes but you should catch them before they propagate to Duktape. - */ - -duk_ret_t test2(duk_context *ctx) { - my_class myclass; - - try { - throw 123; - } catch (int myvalue) { - printf("Caught: %d\n", myvalue); - } - - return 0; -} - -/* - * If you let your own C++ exceptions propagate out of a Duktape/C function - * it will be caught by Duktape and considered a programming error. Duktape - * will catch the exception and convert it to a Duktape error. - * - * This may be allowed in a later version once all the implications have been - * worked out. - */ - -duk_ret_t test3(duk_context *ctx) { - my_class myclass; - - throw 123; /* ERROR: exception propagated to Duktape */ - - return 0; -} - -/* - * Same as above, but if the exception inherits from std::exception, it's - * "what()" will be included in the error message. - */ - -class my_exception : public std::exception { - virtual const char *what() const NOEXCEPT { - return "my_exception"; - } -}; - -duk_ret_t test4(duk_context *ctx) { - my_class myclass; - my_exception myexc; - - throw myexc; /* ERROR: exception propagated to Duktape */ - - return 0; -} - -/* - * Same as above, but if the exception inherits from std::exception with - * a NULL what(). Duktape will describe the error as 'unknown' if so. - */ - -class my_exception2 : public std::exception { - virtual const char *what() const NOEXCEPT { - return NULL; - } -}; - -duk_ret_t test5(duk_context *ctx) { - my_class myclass; - my_exception2 myexc; - - throw myexc; /* ERROR: exception propagated to Duktape */ - - return 0; -} - -int main(int argc, char *argv[]) { - duk_context *ctx = duk_create_heap_default(); - duk_int_t rc; - - (void) argc; (void) argv; /* suppress warning */ - - printf("*** test1 - duk_pcall()\n"); - duk_push_c_function(ctx, test1, 0); - rc = duk_pcall(ctx, 0); - printf("--> rc=%ld (%s)\n", (long) rc, duk_safe_to_string(ctx, -1)); - duk_pop(ctx); - printf("\n"); - - printf("*** test1 - duk_safe_call()\n"); - rc = duk_safe_call(ctx, test1, 0, 1); - printf("--> rc=%ld (%s)\n", (long) rc, duk_safe_to_string(ctx, -1)); - duk_pop(ctx); - printf("\n"); - - printf("*** test1 - ecmascript try-catch\n"); - duk_push_c_function(ctx, test1, 0); - duk_put_global_string(ctx, "test1"); - duk_eval_string_noresult(ctx, - "try {\n" - " test1();\n" - "} catch (e) {\n" - " print(e.stack || e);\n" - "}\n"); - printf("\n"); - - printf("*** test2 - duk_pcall()\n"); - duk_push_c_function(ctx, test2, 0); - rc = duk_pcall(ctx, 0); - printf("--> rc=%ld (%s)\n", (long) rc, duk_safe_to_string(ctx, -1)); - duk_pop(ctx); - printf("\n"); - - printf("*** test2 - duk_safe_call()\n"); - rc = duk_safe_call(ctx, test2, 0, 1); - printf("--> rc=%ld (%s)\n", (long) rc, duk_safe_to_string(ctx, -1)); - duk_pop(ctx); - printf("\n"); - - printf("*** test2 - ecmascript try-catch\n"); - duk_push_c_function(ctx, test2, 0); - duk_put_global_string(ctx, "test2"); - duk_eval_string_noresult(ctx, - "try {\n" - " test2();\n" - "} catch (e) {\n" - " print(e.stack || e);\n" - "}\n"); - printf("\n"); - - printf("*** test3 - duk_pcall()\n"); - duk_push_c_function(ctx, test3, 0); - rc = duk_pcall(ctx, 0); - printf("--> rc=%ld (%s)\n", (long) rc, duk_safe_to_string(ctx, -1)); - duk_pop(ctx); - printf("\n"); - - printf("*** test3 - duk_safe_call()\n"); - rc = duk_safe_call(ctx, test3, 0, 1); - printf("--> rc=%ld (%s)\n", (long) rc, duk_safe_to_string(ctx, -1)); - duk_pop(ctx); - printf("\n"); - - printf("*** test3 - ecmascript try-catch\n"); - duk_push_c_function(ctx, test3, 0); - duk_put_global_string(ctx, "test3"); - duk_eval_string_noresult(ctx, - "try {\n" - " test3();\n" - "} catch (e) {\n" - " print(e.stack || e);\n" - "}\n"); - printf("\n"); - - printf("*** test4 - duk_pcall()\n"); - duk_push_c_function(ctx, test4, 0); - rc = duk_pcall(ctx, 0); - printf("--> rc=%ld (%s)\n", (long) rc, duk_safe_to_string(ctx, -1)); - duk_pop(ctx); - printf("\n"); - - printf("*** test4 - duk_safe_call()\n"); - rc = duk_safe_call(ctx, test4, 0, 1); - printf("--> rc=%ld (%s)\n", (long) rc, duk_safe_to_string(ctx, -1)); - duk_pop(ctx); - printf("\n"); - - printf("*** test4 - ecmascript try-catch\n"); - duk_push_c_function(ctx, test4, 0); - duk_put_global_string(ctx, "test4"); - duk_eval_string_noresult(ctx, - "try {\n" - " test4();\n" - "} catch (e) {\n" - " print(e.stack || e);\n" - "}\n"); - printf("\n"); - - printf("*** test5 - duk_pcall()\n"); - duk_push_c_function(ctx, test5, 0); - rc = duk_pcall(ctx, 0); - printf("--> rc=%ld (%s)\n", (long) rc, duk_safe_to_string(ctx, -1)); - duk_pop(ctx); - printf("\n"); - - printf("*** test5 - duk_safe_call()\n"); - rc = duk_safe_call(ctx, test5, 0, 1); - printf("--> rc=%ld (%s)\n", (long) rc, duk_safe_to_string(ctx, -1)); - duk_pop(ctx); - printf("\n"); - - printf("*** test5 - ecmascript try-catch\n"); - duk_push_c_function(ctx, test5, 0); - duk_put_global_string(ctx, "test5"); - duk_eval_string_noresult(ctx, - "try {\n" - " test5();\n" - "} catch (e) {\n" - " print(e.stack || e);\n" - "}\n"); - printf("\n"); - - printf("*** done\n"); - - 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/debug-trans-dvalue/README.rst ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/README.rst b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/README.rst deleted file mode 100644 index 86b2bb5..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/README.rst +++ /dev/null @@ -1,8 +0,0 @@ -=========================================================== -Debug transport with local debug protocol encoding/decoding -=========================================================== - -This example implements a debug transport which decodes/encodes the Duktape -debug protocol locally into a more easy to use C interface, which is useful -for debug clients implemented locally on the target. The example also -demonstrates how to trial parse dvalues in C. 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/debug-trans-dvalue/duk_trans_dvalue.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/duk_trans_dvalue.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/duk_trans_dvalue.c deleted file mode 100644 index 8470a5f..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/duk_trans_dvalue.c +++ /dev/null @@ -1,1239 +0,0 @@ -/* - * Example debug transport with a local debug message encoder/decoder. - * - * Provides a "received dvalue" callback for a fully parsed dvalue (user - * code frees dvalue) and a "cooperate" callback for e.g. UI integration. - * There are a few other callbacks. See test.c for usage examples. - * - * This transport implementation is not multithreaded which means that: - * - * - Callbacks to "received dvalue" callback come from the Duktape thread, - * either during normal execution or from duk_debugger_cooperate(). - * - * - Calls into duk_trans_dvalue_send() must be made from the callbacks - * provided (e.g. "received dvalue" or "cooperate") which use the active - * Duktape thread. - * - * - The only exception to this is when Duktape is idle: you can then call - * duk_trans_dvalue_send() from any thread (only one thread at a time). - * When you next call into Duktape or call duk_debugger_cooperate(), the - * queued data will be read and processed by Duktape. - * - * There are functions for creating and freeing values; internally they use - * malloc() and free() for memory management. Duktape heap alloc functions - * are not used to minimize disturbances to the Duktape heap under debugging. - * - * Doesn't depend on C99 types; assumes "int" is at least 32 bits, and makes - * a few assumptions about format specifiers. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "duktape.h" -#include "duk_trans_dvalue.h" - -/* Define to enable debug prints to stderr. */ -#if 0 -#define DEBUG_PRINTS -#endif - -/* Define to enable error prints to stderr. */ -#if 1 -#define ERROR_PRINTS -#endif - -/* - * Dvalue handling - */ - -duk_dvalue *duk_dvalue_alloc(void) { - duk_dvalue *dv = (duk_dvalue *) malloc(sizeof(duk_dvalue)); - if (dv) { - memset((void *) dv, 0, sizeof(duk_dvalue)); - dv->buf = NULL; - } - return dv; -} - -void duk_dvalue_free(duk_dvalue *dv) { - if (dv) { - free(dv->buf); /* tolerates NULL */ - dv->buf = NULL; - free(dv); - } -} - -static void duk__dvalue_bufesc(duk_dvalue *dv, char *buf, size_t maxbytes, int stresc) { - size_t i, limit; - - *buf = (char) 0; - limit = dv->len > maxbytes ? maxbytes : dv->len; - for (i = 0; i < limit; i++) { - unsigned char c = dv->buf[i]; - if (stresc) { - if (c >= 0x20 && c <= 0x7e && c != (char) '"' && c != (char) '\'') { - sprintf(buf, "%c", c); - buf++; - } else { - sprintf(buf, "\\x%02x", (unsigned int) c); - buf += 4; - } - } else { - sprintf(buf, "%02x", (unsigned int) c); - buf += 2; - } - } - if (dv->len > maxbytes) { - sprintf(buf, "..."); - buf += 3; - } -} - -/* Caller must provide a buffer at least DUK_DVALUE_TOSTRING_BUFLEN in size. */ -void duk_dvalue_to_string(duk_dvalue *dv, char *buf) { - char hexbuf[32 * 4 + 4]; /* 32 hex encoded or \xXX escaped bytes, possible "...", NUL */ - - if (!dv) { - sprintf(buf, "NULL"); - return; - } - - switch (dv->tag) { - case DUK_DVALUE_EOM: - sprintf(buf, "EOM"); - break; - case DUK_DVALUE_REQ: - sprintf(buf, "REQ"); - break; - case DUK_DVALUE_REP: - sprintf(buf, "REP"); - break; - case DUK_DVALUE_ERR: - sprintf(buf, "ERR"); - break; - case DUK_DVALUE_NFY: - sprintf(buf, "NFY"); - break; - case DUK_DVALUE_INTEGER: - sprintf(buf, "%d", dv->i); - break; - case DUK_DVALUE_STRING: - duk__dvalue_bufesc(dv, hexbuf, 32, 1); - sprintf(buf, "str:%ld:\"%s\"", (long) dv->len, hexbuf); - break; - case DUK_DVALUE_BUFFER: - duk__dvalue_bufesc(dv, hexbuf, 32, 0); - sprintf(buf, "buf:%ld:%s", (long) dv->len, hexbuf); - break; - case DUK_DVALUE_UNUSED: - sprintf(buf, "undefined"); - break; - case DUK_DVALUE_UNDEFINED: - sprintf(buf, "undefined"); - break; - case DUK_DVALUE_NULL: - sprintf(buf, "null"); - break; - case DUK_DVALUE_TRUE: - sprintf(buf, "true"); - break; - case DUK_DVALUE_FALSE: - sprintf(buf, "false"); - break; - case DUK_DVALUE_NUMBER: - if (fpclassify(dv->d) == FP_ZERO) { - if (signbit(dv->d)) { - sprintf(buf, "-0"); - } else { - sprintf(buf, "0"); - } - } else { - sprintf(buf, "%lg", dv->d); - } - break; - case DUK_DVALUE_OBJECT: - duk__dvalue_bufesc(dv, hexbuf, 32, 0); - sprintf(buf, "obj:%d:%s", (int) dv->i, hexbuf); - break; - case DUK_DVALUE_POINTER: - duk__dvalue_bufesc(dv, hexbuf, 32, 0); - sprintf(buf, "ptr:%s", hexbuf); - break; - case DUK_DVALUE_LIGHTFUNC: - duk__dvalue_bufesc(dv, hexbuf, 32, 0); - sprintf(buf, "lfunc:%04x:%s", (unsigned int) dv->i, hexbuf); - break; - case DUK_DVALUE_HEAPPTR: - duk__dvalue_bufesc(dv, hexbuf, 32, 0); - sprintf(buf, "heapptr:%s", hexbuf); - break; - default: - sprintf(buf, "unknown:%d", (int) dv->tag); - } -} - -duk_dvalue *duk_dvalue_make_tag(int tag) { - duk_dvalue *dv = duk_dvalue_alloc(); - if (!dv) { return NULL; } - dv->tag = tag; - return dv; -} - -duk_dvalue *duk_dvalue_make_tag_int(int tag, int intval) { - duk_dvalue *dv = duk_dvalue_alloc(); - if (!dv) { return NULL; } - dv->tag = tag; - dv->i = intval; - return dv; -} - -duk_dvalue *duk_dvalue_make_tag_double(int tag, double dblval) { - duk_dvalue *dv = duk_dvalue_alloc(); - if (!dv) { return NULL; } - dv->tag = tag; - dv->d = dblval; - return dv; -} - -duk_dvalue *duk_dvalue_make_tag_data(int tag, const char *buf, size_t len) { - unsigned char *p; - duk_dvalue *dv = duk_dvalue_alloc(); - if (!dv) { return NULL; } - /* Alloc size is len + 1 so that a NUL terminator is always - * guaranteed which is convenient, e.g. you can printf() the - * value safely. - */ - p = (unsigned char *) malloc(len + 1); - if (!p) { - free(dv); - return NULL; - } - memcpy((void *) p, (const void *) buf, len); - p[len] = (unsigned char) 0; - dv->tag = tag; - dv->buf = p; - dv->len = len; - return dv; -} - -duk_dvalue *duk_dvalue_make_tag_int_data(int tag, int intval, const char *buf, size_t len) { - duk_dvalue *dv = duk_dvalue_make_tag_data(tag, buf, len); - if (!dv) { return NULL; } - dv->i = intval; - return dv; -} - -/* - * Dvalue transport handling - */ - -static void duk__trans_dvalue_double_byteswap(duk_trans_dvalue_ctx *ctx, volatile unsigned char *p) { - unsigned char t; - - /* Portable IEEE double byteswap. Relies on runtime detection of - * host endianness. - */ - - if (ctx->double_byteorder == 0) { - /* little endian */ - t = p[0]; p[0] = p[7]; p[7] = t; - t = p[1]; p[1] = p[6]; p[6] = t; - t = p[2]; p[2] = p[5]; p[5] = t; - t = p[3]; p[3] = p[4]; p[4] = t; - } else if (ctx->double_byteorder == 1) { - /* big endian: ok as is */ - ; - } else { - /* mixed endian */ - t = p[0]; p[0] = p[3]; p[3] = t; - t = p[1]; p[1] = p[2]; p[2] = t; - t = p[4]; p[4] = p[7]; p[7] = t; - t = p[5]; p[5] = p[6]; p[6] = t; - } -} - -static unsigned int duk__trans_dvalue_parse_u32(duk_trans_dvalue_ctx *ctx, unsigned char *p) { - /* Integers are network endian, read back into host format in - * a portable manner. - */ - (void) ctx; - return (((unsigned int) p[0]) << 24) + - (((unsigned int) p[1]) << 16) + - (((unsigned int) p[2]) << 8) + - (((unsigned int) p[3]) << 0); -} - -static int duk__trans_dvalue_parse_i32(duk_trans_dvalue_ctx *ctx, unsigned char *p) { - /* Portable sign handling, doesn't assume 'int' is exactly 32 bits - * like a direct cast would. - */ - unsigned int tmp = duk__trans_dvalue_parse_u32(ctx, p); - if (tmp & 0x80000000UL) { - return -((int) ((tmp ^ 0xffffffffUL) + 1UL)); - } else { - return tmp; - } -} - -static unsigned int duk__trans_dvalue_parse_u16(duk_trans_dvalue_ctx *ctx, unsigned char *p) { - /* Integers are network endian, read back into host format. */ - (void) ctx; - return (((unsigned int) p[0]) << 8) + - (((unsigned int) p[1]) << 0); -} - -static double duk__trans_dvalue_parse_double(duk_trans_dvalue_ctx *ctx, unsigned char *p) { - /* IEEE doubles are network endian, read back into host format. */ - volatile union { - double d; - unsigned char b[8]; - } u; - memcpy((void *) u.b, (const void *) p, 8); - duk__trans_dvalue_double_byteswap(ctx, u.b); - return u.d; -} - -static unsigned char *duk__trans_dvalue_encode_u32(duk_trans_dvalue_ctx *ctx, unsigned char *p, unsigned int val) { - /* Integers are written in network endian format. */ - (void) ctx; - *p++ = (unsigned char) ((val >> 24) & 0xff); - *p++ = (unsigned char) ((val >> 16) & 0xff); - *p++ = (unsigned char) ((val >> 8) & 0xff); - *p++ = (unsigned char) (val & 0xff); - return p; -} - -static unsigned char *duk__trans_dvalue_encode_i32(duk_trans_dvalue_ctx *ctx, unsigned char *p, int val) { - return duk__trans_dvalue_encode_u32(ctx, p, (unsigned int) val & 0xffffffffUL); -} - -static unsigned char *duk__trans_dvalue_encode_u16(duk_trans_dvalue_ctx *ctx, unsigned char *p, unsigned int val) { - /* Integers are written in network endian format. */ - (void) ctx; - *p++ = (unsigned char) ((val >> 8) & 0xff); - *p++ = (unsigned char) (val & 0xff); - return p; -} - -static unsigned char *duk__trans_dvalue_encode_double(duk_trans_dvalue_ctx *ctx, unsigned char *p, double val) { - /* IEEE doubles are written in network endian format. */ - volatile union { - double d; - unsigned char b[8]; - } u; - u.d = val; - duk__trans_dvalue_double_byteswap(ctx, u.b); - memcpy((void *) p, (const void *) u.b, 8); - p += 8; - return p; -} - -static unsigned char *duk__trans_buffer_ensure(duk_trans_buffer *dbuf, size_t space) { - size_t avail; - size_t used; - size_t new_size; - void *new_alloc; - - used = dbuf->write_offset; - avail = dbuf->alloc_size - dbuf->write_offset; - - if (avail >= space) { - if (avail - space > 256) { - /* Too big, resize so that we reclaim memory if we have just - * received a large string/buffer value. - */ - goto do_realloc; - } - } else { - /* Too small, resize. */ - goto do_realloc; - } - - return dbuf->base + dbuf->write_offset; - - do_realloc: - new_size = used + space + 256; /* some extra to reduce resizes */ - new_alloc = realloc(dbuf->base, new_size); - if (new_alloc) { - dbuf->base = (unsigned char *) new_alloc; - dbuf->alloc_size = new_size; -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: resized buffer %p to %ld bytes, read_offset=%ld, write_offset=%ld\n", - __func__, (void *) dbuf, (long) new_size, (long) dbuf->read_offset, (long) dbuf->write_offset); - fflush(stderr); -#endif - return dbuf->base + dbuf->write_offset; - } else { - return NULL; - } -} - -/* When read_offset is large enough, "rebase" buffer by deleting already - * read data and updating offsets. - */ -static void duk__trans_buffer_rebase(duk_trans_buffer *dbuf) { - if (dbuf->read_offset > 64) { -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: rebasing buffer %p, read_offset=%ld, write_offset=%ld\n", - __func__, (void *) dbuf, (long) dbuf->read_offset, (long) dbuf->write_offset); - fflush(stderr); -#endif - if (dbuf->write_offset > dbuf->read_offset) { - memmove((void *) dbuf->base, (const void *) (dbuf->base + dbuf->read_offset), dbuf->write_offset - dbuf->read_offset); - } - dbuf->write_offset -= dbuf->read_offset; - dbuf->read_offset = 0; - } -} - -duk_trans_dvalue_ctx *duk_trans_dvalue_init(void) { - volatile union { - double d; - unsigned char b[8]; - } u; - duk_trans_dvalue_ctx *ctx = NULL; - - ctx = (duk_trans_dvalue_ctx *) malloc(sizeof(duk_trans_dvalue_ctx)); - if (!ctx) { goto fail; } - memset((void *) ctx, 0, sizeof(duk_trans_dvalue_ctx)); - ctx->received = NULL; - ctx->cooperate = NULL; - ctx->handshake = NULL; - ctx->detached = NULL; - ctx->send_buf.base = NULL; - ctx->recv_buf.base = NULL; - - ctx->send_buf.base = malloc(256); - if (!ctx->send_buf.base) { goto fail; } - ctx->send_buf.alloc_size = 256; - - ctx->recv_buf.base = malloc(256); - if (!ctx->recv_buf.base) { goto fail; } - ctx->recv_buf.alloc_size = 256; - - /* IEEE double byte order, detect at run time (could also use - * preprocessor defines but that's verbose to make portable). - * - * >>> struct.unpack('>d', '1122334455667788'.decode('hex')) - * (3.841412024471731e-226,) - * >>> struct.unpack('>d', '8877665544332211'.decode('hex')) - * (-7.086876636573014e-268,) - * >>> struct.unpack('>d', '4433221188776655'.decode('hex')) - * (3.5294303071877444e+20,) - */ - u.b[0] = 0x11; u.b[1] = 0x22; u.b[2] = 0x33; u.b[3] = 0x44; - u.b[4] = 0x55; u.b[5] = 0x66; u.b[6] = 0x77; u.b[7] = 0x88; - if (u.d < 0.0) { - ctx->double_byteorder = 0; /* little endian */ - } else if (u.d < 1.0) { - ctx->double_byteorder = 1; /* big endian */ - } else { - ctx->double_byteorder = 2; /* mixed endian (arm) */ - } -#if defined(DEBUG_PRINTS) - fprintf(stderr, "double endianness test value is %lg -> byteorder %d\n", - u.d, ctx->double_byteorder); - fflush(stderr); -#endif - - return ctx; - - fail: - if (ctx) { - free(ctx->recv_buf.base); /* tolerates NULL */ - free(ctx->send_buf.base); /* tolerates NULL */ - free(ctx); - } - return NULL; -} - -void duk_trans_dvalue_free(duk_trans_dvalue_ctx *ctx) { - if (ctx) { - free(ctx->send_buf.base); /* tolerates NULL */ - free(ctx->recv_buf.base); /* tolerates NULL */ - free(ctx); - } -} - -void duk_trans_dvalue_send(duk_trans_dvalue_ctx *ctx, duk_dvalue *dv) { - unsigned char *p; - - /* Convert argument dvalue into Duktape debug protocol format. - * Literal constants are used here for the debug protocol, - * e.g. initial byte 0x02 is REP, see doc/debugger.rst. - */ - -#if defined(DEBUG_PRINTS) - { - char buf[DUK_DVALUE_TOSTRING_BUFLEN]; - duk_dvalue_to_string(dv, buf); - fprintf(stderr, "%s: sending dvalue: %s\n", __func__, buf); - fflush(stderr); - } -#endif - - switch (dv->tag) { - case DUK_DVALUE_EOM: { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1); - if (!p) { goto alloc_error; } - *p++ = 0x00; - ctx->send_buf.write_offset += 1; - break; - } - case DUK_DVALUE_REQ: { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1); - if (!p) { goto alloc_error; } - *p++ = 0x01; - ctx->send_buf.write_offset += 1; - break; - } - case DUK_DVALUE_REP: { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1); - if (!p) { goto alloc_error; } - *p++ = 0x02; - ctx->send_buf.write_offset += 1; - break; - } - case DUK_DVALUE_ERR: { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1); - if (!p) { goto alloc_error; } - *p++ = 0x03; - ctx->send_buf.write_offset += 1; - break; - } - case DUK_DVALUE_NFY: { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1); - if (!p) { goto alloc_error; } - *p++ = 0x04; - ctx->send_buf.write_offset += 1; - break; - } - case DUK_DVALUE_INTEGER: { - int i = dv->i; - if (i >= 0 && i <= 63) { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1); - if (!p) { goto alloc_error; } - *p++ = (unsigned char) (0x80 + i); - ctx->send_buf.write_offset += 1; - } else if (i >= 0 && i <= 16383L) { - p = duk__trans_buffer_ensure(&ctx->send_buf, 2); - if (!p) { goto alloc_error; } - *p++ = (unsigned char) (0xc0 + (i >> 8)); - *p++ = (unsigned char) (i & 0xff); - ctx->send_buf.write_offset += 2; - } else if (i >= -0x80000000L && i <= 0x7fffffffL) { /* Harmless warning on some platforms (re: range) */ - p = duk__trans_buffer_ensure(&ctx->send_buf, 5); - if (!p) { goto alloc_error; } - *p++ = 0x10; - p = duk__trans_dvalue_encode_i32(ctx, p, i); - ctx->send_buf.write_offset += 5; - } else { - goto dvalue_error; - } - break; - } - case DUK_DVALUE_STRING: { - size_t i = dv->len; - if (i <= 0x1fUL) { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1 + i); - if (!p) { goto alloc_error; } - *p++ = (unsigned char) (0x60 + i); - memcpy((void *) p, (const void *) dv->buf, i); - p += i; - ctx->send_buf.write_offset += 1 + i; - } else if (i <= 0xffffUL) { - p = duk__trans_buffer_ensure(&ctx->send_buf, 3 + i); - if (!p) { goto alloc_error; } - *p++ = 0x12; - p = duk__trans_dvalue_encode_u16(ctx, p, (unsigned int) i); - memcpy((void *) p, (const void *) dv->buf, i); - p += i; - ctx->send_buf.write_offset += 3 + i; - } else if (i <= 0xffffffffUL) { - p = duk__trans_buffer_ensure(&ctx->send_buf, 5 + i); - if (!p) { goto alloc_error; } - *p++ = 0x11; - p = duk__trans_dvalue_encode_u32(ctx, p, (unsigned int) i); - memcpy((void *) p, (const void *) dv->buf, i); - p += i; - ctx->send_buf.write_offset += 5 + i; - } else { - goto dvalue_error; - } - break; - } - case DUK_DVALUE_BUFFER: { - size_t i = dv->len; - if (i <= 0xffffUL) { - p = duk__trans_buffer_ensure(&ctx->send_buf, 3 + i); - if (!p) { goto alloc_error; } - *p++ = 0x14; - p = duk__trans_dvalue_encode_u16(ctx, p, (unsigned int) i); - memcpy((void *) p, (const void *) dv->buf, i); - p += i; - ctx->send_buf.write_offset += 3 + i; - } else if (i <= 0xffffffffUL) { - p = duk__trans_buffer_ensure(&ctx->send_buf, 5 + i); - if (!p) { goto alloc_error; } - *p++ = 0x13; - p = duk__trans_dvalue_encode_u32(ctx, p, (unsigned int) i); - memcpy((void *) p, (const void *) dv->buf, i); - p += i; - ctx->send_buf.write_offset += 5 + i; - } else { - goto dvalue_error; - } - break; - } - case DUK_DVALUE_UNUSED: { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1); - if (!p) { goto alloc_error; } - *p++ = 0x15; - ctx->send_buf.write_offset += 1; - break; - } - case DUK_DVALUE_UNDEFINED: { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1); - if (!p) { goto alloc_error; } - *p++ = 0x16; - ctx->send_buf.write_offset += 1; - break; - } - case DUK_DVALUE_NULL: { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1); - if (!p) { goto alloc_error; } - *p++ = 0x17; - ctx->send_buf.write_offset += 1; - break; - } - case DUK_DVALUE_TRUE: { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1); - if (!p) { goto alloc_error; } - *p++ = 0x18; - ctx->send_buf.write_offset += 1; - break; - } - case DUK_DVALUE_FALSE: { - p = duk__trans_buffer_ensure(&ctx->send_buf, 1); - if (!p) { goto alloc_error; } - *p++ = 0x19; - ctx->send_buf.write_offset += 1; - break; - } - case DUK_DVALUE_NUMBER: { - p = duk__trans_buffer_ensure(&ctx->send_buf, 9); - if (!p) { goto alloc_error; } - *p++ = 0x1a; - p = duk__trans_dvalue_encode_double(ctx, p, dv->d); - ctx->send_buf.write_offset += 9; - break; - } - case DUK_DVALUE_OBJECT: { - size_t i = dv->len; - if (i <= 0xffUL && dv->i >= 0 && dv->i <= 0xffL) { - p = duk__trans_buffer_ensure(&ctx->send_buf, 3 + i); - if (!p) { goto alloc_error; } - *p++ = 0x1b; - *p++ = (unsigned char) dv->i; - *p++ = (unsigned char) i; - memcpy((void *) p, (const void *) dv->buf, i); - ctx->send_buf.write_offset += 3 + i; - } else { - goto dvalue_error; - } - break; - } - case DUK_DVALUE_POINTER: { - size_t i = dv->len; - if (i <= 0xffUL) { - p = duk__trans_buffer_ensure(&ctx->send_buf, 2 + i); - if (!p) { goto alloc_error; } - *p++ = 0x1c; - *p++ = (unsigned char) i; - memcpy((void *) p, (const void *) dv->buf, i); - ctx->send_buf.write_offset += 2 + i; - } else { - goto dvalue_error; - } - break; - } - case DUK_DVALUE_LIGHTFUNC: { - size_t i = dv->len; - if (i <= 0xffUL && dv->i >= 0 && dv->i <= 0xffffL) { - p = duk__trans_buffer_ensure(&ctx->send_buf, 4 + i); - if (!p) { goto alloc_error; } - *p++ = 0x1d; - p = duk__trans_dvalue_encode_u16(ctx, p, (unsigned int) dv->i); - *p++ = (unsigned char) i; - memcpy((void *) p, (const void *) dv->buf, i); - ctx->send_buf.write_offset += 4 + i; - } else { - goto dvalue_error; - } - break; - } - case DUK_DVALUE_HEAPPTR: { - size_t i = dv->len; - if (i <= 0xffUL) { - p = duk__trans_buffer_ensure(&ctx->send_buf, 2 + i); - if (!p) { goto alloc_error; } - *p++ = 0x1e; - *p++ = (unsigned char) i; - memcpy((void *) p, (const void *) dv->buf, i); - ctx->send_buf.write_offset += 2 + i; - } else { - goto dvalue_error; - } - break; - } - default: { - goto dvalue_error; - } - } /* end switch */ - - return; - - dvalue_error: -#if defined(ERROR_PRINTS) - fprintf(stderr, "%s: internal error, argument dvalue is invalid\n", __func__); - fflush(stdout); -#endif - return; - - alloc_error: -#if defined(ERROR_PRINTS) - fprintf(stderr, "%s: internal error, failed to allocate space for write\n", __func__); - fflush(stdout); -#endif - return; -} - -static void duk__trans_dvalue_send_and_free(duk_trans_dvalue_ctx *ctx, duk_dvalue *dv) { - if (!dv) { return; } - duk_trans_dvalue_send(ctx, dv); - duk_dvalue_free(dv); -} - -void duk_trans_dvalue_send_eom(duk_trans_dvalue_ctx *ctx) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag(DUK_DVALUE_EOM)); -} - -void duk_trans_dvalue_send_req(duk_trans_dvalue_ctx *ctx) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag(DUK_DVALUE_REQ)); -} - -void duk_trans_dvalue_send_rep(duk_trans_dvalue_ctx *ctx) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag(DUK_DVALUE_REP)); -} - -void duk_trans_dvalue_send_err(duk_trans_dvalue_ctx *ctx) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag(DUK_DVALUE_ERR)); -} - -void duk_trans_dvalue_send_nfy(duk_trans_dvalue_ctx *ctx) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag(DUK_DVALUE_NFY)); -} - -void duk_trans_dvalue_send_integer(duk_trans_dvalue_ctx *ctx, int val) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag_int(DUK_DVALUE_INTEGER, val)); -} - -void duk_trans_dvalue_send_string(duk_trans_dvalue_ctx *ctx, const char *str) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag_data(DUK_DVALUE_STRING, str, strlen(str))); -} - -void duk_trans_dvalue_send_lstring(duk_trans_dvalue_ctx *ctx, const char *str, size_t len) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag_data(DUK_DVALUE_STRING, str, len)); -} - -void duk_trans_dvalue_send_buffer(duk_trans_dvalue_ctx *ctx, const char *buf, size_t len) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag_data(DUK_DVALUE_BUFFER, buf, len)); -} - -void duk_trans_dvalue_send_unused(duk_trans_dvalue_ctx *ctx) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag(DUK_DVALUE_UNUSED)); -} - -void duk_trans_dvalue_send_undefined(duk_trans_dvalue_ctx *ctx) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag(DUK_DVALUE_UNDEFINED)); -} - -void duk_trans_dvalue_send_null(duk_trans_dvalue_ctx *ctx) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag(DUK_DVALUE_NULL)); -} - -void duk_trans_dvalue_send_true(duk_trans_dvalue_ctx *ctx) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag(DUK_DVALUE_TRUE)); -} - -void duk_trans_dvalue_send_false(duk_trans_dvalue_ctx *ctx) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag(DUK_DVALUE_FALSE)); -} - -void duk_trans_dvalue_send_number(duk_trans_dvalue_ctx *ctx, double val) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag_double(DUK_DVALUE_NUMBER, val)); -} - -void duk_trans_dvalue_send_object(duk_trans_dvalue_ctx *ctx, int classnum, const char *ptr_data, size_t ptr_len) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag_int_data(DUK_DVALUE_OBJECT, classnum, ptr_data, ptr_len)); -} - -void duk_trans_dvalue_send_pointer(duk_trans_dvalue_ctx *ctx, const char *ptr_data, size_t ptr_len) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag_data(DUK_DVALUE_POINTER, ptr_data, ptr_len)); -} - -void duk_trans_dvalue_send_lightfunc(duk_trans_dvalue_ctx *ctx, int lf_flags, const char *ptr_data, size_t ptr_len) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag_int_data(DUK_DVALUE_LIGHTFUNC, lf_flags, ptr_data, ptr_len)); -} - -void duk_trans_dvalue_send_heapptr(duk_trans_dvalue_ctx *ctx, const char *ptr_data, size_t ptr_len) { - duk__trans_dvalue_send_and_free(ctx, duk_dvalue_make_tag_data(DUK_DVALUE_HEAPPTR, ptr_data, ptr_len)); -} - -void duk_trans_dvalue_send_req_cmd(duk_trans_dvalue_ctx *ctx, int cmd) { - duk_trans_dvalue_send_req(ctx); - duk_trans_dvalue_send_integer(ctx, cmd); -} - -static duk_dvalue *duk__trans_trial_parse_dvalue(duk_trans_dvalue_ctx *ctx) { - unsigned char *p; - size_t len; - unsigned char ib; - duk_dvalue *dv; - size_t datalen; - - p = ctx->recv_buf.base + ctx->recv_buf.read_offset; - len = ctx->recv_buf.write_offset - ctx->recv_buf.read_offset; - - if (len == 0) { - return NULL; - } - ib = p[0]; - -#if defined(DEBUG_PRINTS) - { - size_t i; - fprintf(stderr, "%s: parsing dvalue, window:", __func__); - for (i = 0; i < 16; i++) { - if (i < len) { - fprintf(stderr, " %02x", (unsigned int) p[i]); - } else { - fprintf(stderr, " ??"); - } - } - fprintf(stderr, " (length %ld, read_offset %ld, write_offset %ld, alloc_size %ld)\n", - (long) len, (long) ctx->recv_buf.read_offset, (long) ctx->recv_buf.write_offset, - (long) ctx->recv_buf.alloc_size); - fflush(stderr); - } -#endif - - if (ib <= 0x1fU) { - /* 0x00 ... 0x1f */ - switch (ib) { - case 0x00: { - ctx->recv_buf.read_offset += 1; - dv = duk_dvalue_make_tag(DUK_DVALUE_EOM); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x01: { - ctx->recv_buf.read_offset += 1; - dv = duk_dvalue_make_tag(DUK_DVALUE_REQ); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x02: { - ctx->recv_buf.read_offset += 1; - dv = duk_dvalue_make_tag(DUK_DVALUE_REP); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x03: { - ctx->recv_buf.read_offset += 1; - dv = duk_dvalue_make_tag(DUK_DVALUE_ERR); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x04: { - ctx->recv_buf.read_offset += 1; - dv = duk_dvalue_make_tag(DUK_DVALUE_NFY); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x10: { - int intval; - if (len < 5) { goto partial; } - intval = duk__trans_dvalue_parse_i32(ctx, p + 1); - ctx->recv_buf.read_offset += 5; - dv = duk_dvalue_make_tag_int(DUK_DVALUE_INTEGER, intval); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x11: { - if (len < 5) { goto partial; } - datalen = (size_t) duk__trans_dvalue_parse_u32(ctx, p + 1); - if (len < 5 + datalen) { goto partial; } - ctx->recv_buf.read_offset += 5 + datalen; - dv = duk_dvalue_make_tag_data(DUK_DVALUE_STRING, (const char *) (p + 5), datalen); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x12: { - if (len < 3) { goto partial; } - datalen = (size_t) duk__trans_dvalue_parse_u16(ctx, p + 1); - if (len < 3 + datalen) { goto partial; } - ctx->recv_buf.read_offset += 3 + datalen; - dv = duk_dvalue_make_tag_data(DUK_DVALUE_STRING, (const char *) (p + 3), datalen); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x13: { - if (len < 5) { goto partial; } - datalen = (size_t) duk__trans_dvalue_parse_u32(ctx, p + 1); - if (len < 5 + datalen) { goto partial; } - ctx->recv_buf.read_offset += 5 + datalen; - dv = duk_dvalue_make_tag_data(DUK_DVALUE_BUFFER, (const char *) (p + 5), datalen); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x14: { - if (len < 3) { goto partial; } - datalen = (size_t) duk__trans_dvalue_parse_u16(ctx, p + 1); - if (len < 3 + datalen) { goto partial; } - ctx->recv_buf.read_offset += 3 + datalen; - dv = duk_dvalue_make_tag_data(DUK_DVALUE_BUFFER, (const char *) (p + 3), datalen); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x15: { - ctx->recv_buf.read_offset += 1; - dv = duk_dvalue_make_tag(DUK_DVALUE_UNUSED); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x16: { - ctx->recv_buf.read_offset += 1; - dv = duk_dvalue_make_tag(DUK_DVALUE_UNDEFINED); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x17: { - ctx->recv_buf.read_offset += 1; - dv = duk_dvalue_make_tag(DUK_DVALUE_NULL); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x18: { - ctx->recv_buf.read_offset += 1; - dv = duk_dvalue_make_tag(DUK_DVALUE_TRUE); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x19: { - ctx->recv_buf.read_offset += 1; - dv = duk_dvalue_make_tag(DUK_DVALUE_FALSE); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x1a: { - double dblval; - if (len < 9) { goto partial; } - dblval = duk__trans_dvalue_parse_double(ctx, p + 1); - ctx->recv_buf.read_offset += 9; - dv = duk_dvalue_make_tag_double(DUK_DVALUE_NUMBER, dblval); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x1b: { - int classnum; - if (len < 3) { goto partial; } - datalen = (size_t) p[2]; - if (len < 3 + datalen) { goto partial; } - classnum = (int) p[1]; - ctx->recv_buf.read_offset += 3 + datalen; - dv = duk_dvalue_make_tag_int_data(DUK_DVALUE_OBJECT, classnum, (const char *) (p + 3), datalen); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x1c: { - if (len < 2) { goto partial; } - datalen = (size_t) p[1]; - if (len < 2 + datalen) { goto partial; } - ctx->recv_buf.read_offset += 2 + datalen; - dv = duk_dvalue_make_tag_data(DUK_DVALUE_POINTER, (const char *) (p + 2), datalen); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x1d: { - int lf_flags; - if (len < 4) { goto partial; } - datalen = (size_t) p[3]; - if (len < 4 + datalen) { goto partial; } - lf_flags = (int) duk__trans_dvalue_parse_u16(ctx, p + 1); - ctx->recv_buf.read_offset += 4 + datalen; - dv = duk_dvalue_make_tag_int_data(DUK_DVALUE_LIGHTFUNC, lf_flags, (const char *) (p + 4), datalen); - if (!dv) { goto alloc_error; } - return dv; - } - case 0x1e: { - if (len < 2) { goto partial; } - datalen = (size_t) p[1]; - if (len < 2 + datalen) { goto partial; } - ctx->recv_buf.read_offset += 2 + datalen; - dv = duk_dvalue_make_tag_data(DUK_DVALUE_HEAPPTR, (const char *) (p + 2), datalen); - if (!dv) { goto alloc_error; } - return dv; - } - default: { - goto format_error; - } - } /* end switch */ - } else if (ib <= 0x5fU) { - /* 0x20 ... 0x5f */ - goto format_error; - } else if (ib <= 0x7fU) { - /* 0x60 ... 0x7f */ - datalen = (size_t) (ib - 0x60U); - if (len < 1 + datalen) { goto partial; } - ctx->recv_buf.read_offset += 1 + datalen; - dv = duk_dvalue_make_tag_data(DUK_DVALUE_STRING, (const char *) (p + 1), datalen); - if (!dv) { goto alloc_error; } - return dv; - } else if (ib <= 0xbfU) { - /* 0x80 ... 0xbf */ - int intval; - intval = (int) (ib - 0x80U); - ctx->recv_buf.read_offset += 1; - dv = duk_dvalue_make_tag_int(DUK_DVALUE_INTEGER, intval); - if (!dv) { goto alloc_error; } - return dv; - } else { - /* 0xc0 ... 0xff */ - int intval; - if (len < 2) { goto partial; } - intval = (((int) (ib - 0xc0U)) << 8) + (int) p[1]; - ctx->recv_buf.read_offset += 2; - dv = duk_dvalue_make_tag_int(DUK_DVALUE_INTEGER, intval); - if (!dv) { goto alloc_error; } - return dv; - } - - /* never here */ - - partial: - return NULL; - - alloc_error: -#if defined(ERROR_PRINTS) - fprintf(stderr, "%s: internal error, cannot allocate space for dvalue\n", __func__); - fflush(stdout); -#endif - return NULL; - - format_error: -#if defined(ERROR_PRINTS) - fprintf(stderr, "%s: internal error, dvalue format error\n", __func__); - fflush(stdout); -#endif - return NULL; -} - -static duk_dvalue *duk__trans_trial_parse_handshake(duk_trans_dvalue_ctx *ctx) { - unsigned char *p; - size_t len; - duk_dvalue *dv; - size_t i; - - p = ctx->recv_buf.base + ctx->recv_buf.read_offset; - len = ctx->recv_buf.write_offset - ctx->recv_buf.read_offset; - - for (i = 0; i < len; i++) { - if (p[i] == 0x0a) { - /* Handshake line is returned as a dvalue for convenience; it's - * not actually a part of the dvalue phase of the protocol. - */ - ctx->recv_buf.read_offset += i + 1; - dv = duk_dvalue_make_tag_data(DUK_DVALUE_STRING, (const char *) p, i); - if (!dv) { goto alloc_error; } - return dv; - } - } - - return NULL; - - alloc_error: -#if defined(ERROR_PRINTS) - fprintf(stderr, "%s: internal error, cannot allocate space for handshake line\n", __func__); - fflush(stdout); -#endif - return NULL; -} - -static void duk__trans_call_cooperate(duk_trans_dvalue_ctx *ctx, int block) { - if (ctx->cooperate) { - ctx->cooperate(ctx, block); - } -} - -static void duk__trans_call_received(duk_trans_dvalue_ctx *ctx, duk_dvalue *dv) { - if (ctx->received) { - ctx->received(ctx, dv); - } -} - -static void duk__trans_call_handshake(duk_trans_dvalue_ctx *ctx, const char *line) { - if (ctx->handshake) { - ctx->handshake(ctx, line); - } -} - -static void duk__trans_call_detached(duk_trans_dvalue_ctx *ctx) { - if (ctx->detached) { - ctx->detached(ctx); - } -} - -/* - * Duktape callbacks - */ - -duk_size_t duk_trans_dvalue_read_cb(void *udata, char *buffer, duk_size_t length) { - duk_trans_dvalue_ctx *ctx = (duk_trans_dvalue_ctx *) udata; - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: %p %p %ld\n", __func__, udata, (void *) buffer, (long) length); - fflush(stderr); -#endif - - duk__trans_call_cooperate(ctx, 0); - - for (;;) { - size_t avail, now; - - avail = (size_t) (ctx->send_buf.write_offset - ctx->send_buf.read_offset); - if (avail == 0) { - /* Must cooperate until user callback provides data. From - * Duktape's perspective we MUST block until data is received. - */ - duk__trans_call_cooperate(ctx, 1); - } else { - now = avail; - if (now > length) { - now = length; - } - memcpy((void *) buffer, (const void *) (ctx->send_buf.base + ctx->send_buf.read_offset), now); - duk__trans_buffer_rebase(&ctx->send_buf); - ctx->send_buf.read_offset += now; - return now; - } - } -} - -duk_size_t duk_trans_dvalue_write_cb(void *udata, const char *buffer, duk_size_t length) { - duk_trans_dvalue_ctx *ctx = (duk_trans_dvalue_ctx *) udata; - unsigned char *p; - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: %p %p %ld\n", __func__, udata, (void *) buffer, (long) length); - fflush(stderr); -#endif - - duk__trans_call_cooperate(ctx, 0); - - /* Append data. */ - duk__trans_buffer_rebase(&ctx->recv_buf); - p = duk__trans_buffer_ensure(&ctx->recv_buf, length); - memcpy((void *) p, (const void *) buffer, (size_t) length); - ctx->recv_buf.write_offset += length; - - /* Trial parse handshake line or dvalue(s). */ - if (!ctx->handshake_done) { - duk_dvalue *dv = duk__trans_trial_parse_handshake(ctx); - if (dv) { - /* Handshake line is available for caller for the - * duration of the callback, and must not be freed - * by the caller. - */ - duk__trans_call_handshake(ctx, (const char *) dv->buf); -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: handshake ok\n", __func__); - fflush(stderr); -#endif - duk_dvalue_free(dv); - ctx->handshake_done = 1; - } - } - if (ctx->handshake_done) { - for (;;) { - duk_dvalue *dv = duk__trans_trial_parse_dvalue(ctx); - if (dv) { -#if defined(DEBUG_PRINTS) - { - char buf[DUK_DVALUE_TOSTRING_BUFLEN]; - duk_dvalue_to_string(dv, buf); - fprintf(stderr, "%s: received dvalue: %s\n", __func__, buf); - fflush(stderr); - } -#endif - - duk__trans_call_received(ctx, dv); - } else { - break; - } - } - } - - duk__trans_call_cooperate(ctx, 0); /* just in case, if dvalues changed something */ - - return length; -} - -duk_size_t duk_trans_dvalue_peek_cb(void *udata) { - duk_trans_dvalue_ctx *ctx = (duk_trans_dvalue_ctx *) udata; - size_t avail; - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: %p\n", __func__, udata); - fflush(stderr); -#endif - - duk__trans_call_cooperate(ctx, 0); - avail = (size_t) (ctx->send_buf.write_offset - ctx->send_buf.read_offset); - return (duk_size_t) avail; -} - -void duk_trans_dvalue_read_flush_cb(void *udata) { - duk_trans_dvalue_ctx *ctx = (duk_trans_dvalue_ctx *) udata; - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: %p\n", __func__, udata); - fflush(stderr); -#endif - - duk__trans_call_cooperate(ctx, 0); -} - -void duk_trans_dvalue_write_flush_cb(void *udata) { - duk_trans_dvalue_ctx *ctx = (duk_trans_dvalue_ctx *) udata; - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: %p\n", __func__, udata); - fflush(stderr); -#endif - - duk__trans_call_cooperate(ctx, 0); -} - -void duk_trans_dvalue_detached_cb(void *udata) { - duk_trans_dvalue_ctx *ctx = (duk_trans_dvalue_ctx *) udata; - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: %p\n", __func__, udata); - fflush(stderr); -#endif - - duk__trans_call_detached(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/debug-trans-dvalue/duk_trans_dvalue.h ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/duk_trans_dvalue.h b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/duk_trans_dvalue.h deleted file mode 100644 index e0ba731..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/duk_trans_dvalue.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef DUK_TRANS_DVALUE_H_INCLUDED -#define DUK_TRANS_DVALUE_H_INCLUDED - -#include "duktape.h" - -typedef struct duk_dvalue duk_dvalue; -typedef struct duk_trans_buffer duk_trans_buffer; -typedef struct duk_trans_dvalue_ctx duk_trans_dvalue_ctx; - -typedef void (*duk_trans_dvalue_received_function)(duk_trans_dvalue_ctx *ctx, duk_dvalue *dv); -typedef void (*duk_trans_dvalue_cooperate_function)(duk_trans_dvalue_ctx *ctx, int block); -typedef void (*duk_trans_dvalue_handshake_function)(duk_trans_dvalue_ctx *ctx, const char *handshake_line); -typedef void (*duk_trans_dvalue_detached_function)(duk_trans_dvalue_ctx *ctx); - -/* struct duk_dvalue 'tag' values, note that these have nothing to do with - * Duktape debug protocol inital byte. Struct fields used with the type - * are noted next to the define. - */ -#define DUK_DVALUE_EOM 1 /* no fields */ -#define DUK_DVALUE_REQ 2 /* no fields */ -#define DUK_DVALUE_REP 3 /* no fields */ -#define DUK_DVALUE_ERR 4 /* no fields */ -#define DUK_DVALUE_NFY 5 /* no fields */ -#define DUK_DVALUE_INTEGER 6 /* i: 32-bit signed integer */ -#define DUK_DVALUE_STRING 7 /* buf: string data, len: string length */ -#define DUK_DVALUE_BUFFER 8 /* buf: buffer data, len: buffer length */ -#define DUK_DVALUE_UNUSED 9 /* no fields */ -#define DUK_DVALUE_UNDEFINED 10 /* no fields */ -#define DUK_DVALUE_NULL 11 /* no fields */ -#define DUK_DVALUE_TRUE 12 /* no fields */ -#define DUK_DVALUE_FALSE 13 /* no fields */ -#define DUK_DVALUE_NUMBER 14 /* d: ieee double */ -#define DUK_DVALUE_OBJECT 15 /* i: class number, buf: pointer data, len: pointer length */ -#define DUK_DVALUE_POINTER 16 /* buf: pointer data, len: pointer length */ -#define DUK_DVALUE_LIGHTFUNC 17 /* i: lightfunc flags, buf: pointer data, len: pointer length */ -#define DUK_DVALUE_HEAPPTR 18 /* buf: pointer data, len: pointer length */ - -struct duk_dvalue { - /* Could use a union for the value but the gain would be relatively small. */ - int tag; - int i; - double d; - size_t len; - unsigned char *buf; -}; - -struct duk_trans_buffer { - unsigned char *base; - size_t write_offset; - size_t read_offset; - size_t alloc_size; -}; - -struct duk_trans_dvalue_ctx { - duk_trans_dvalue_received_function received; - duk_trans_dvalue_cooperate_function cooperate; - duk_trans_dvalue_handshake_function handshake; - duk_trans_dvalue_detached_function detached; - duk_trans_buffer send_buf; /* sending towards Duktape (duktape read callback) */ - duk_trans_buffer recv_buf; /* receiving from Duktape (duktape write callback) */ - int handshake_done; - int double_byteorder; /* 0=little endian, 1=big endian, 2=mixed endian */ -}; - -/* Buffer size needed by duk_dvalue_to_string(). */ -#define DUK_DVALUE_TOSTRING_BUFLEN 256 - -/* Dvalue handling. */ -duk_dvalue *duk_dvalue_alloc(void); -void duk_dvalue_free(duk_dvalue *dv); -void duk_dvalue_to_string(duk_dvalue *dv, char *buf); -duk_dvalue *duk_dvalue_make_tag(int tag); -duk_dvalue *duk_dvalue_make_tag_int(int tag, int intval); -duk_dvalue *duk_dvalue_make_tag_double(int tag, double dblval); -duk_dvalue *duk_dvalue_make_tag_data(int tag, const char *buf, size_t len); -duk_dvalue *duk_dvalue_make_tag_int_data(int tag, int intval, const char *buf, size_t len); - -/* Initializing and freeing the transport context. */ -duk_trans_dvalue_ctx *duk_trans_dvalue_init(void); -void duk_trans_dvalue_free(duk_trans_dvalue_ctx *ctx); - -/* Sending dvalues towards Duktape. */ -void duk_trans_dvalue_send(duk_trans_dvalue_ctx *ctx, duk_dvalue *dv); -void duk_trans_dvalue_send_eom(duk_trans_dvalue_ctx *ctx); -void duk_trans_dvalue_send_req(duk_trans_dvalue_ctx *ctx); -void duk_trans_dvalue_send_rep(duk_trans_dvalue_ctx *ctx); -void duk_trans_dvalue_send_err(duk_trans_dvalue_ctx *ctx); -void duk_trans_dvalue_send_nfy(duk_trans_dvalue_ctx *ctx); -void duk_trans_dvalue_send_integer(duk_trans_dvalue_ctx *ctx, int val); -void duk_trans_dvalue_send_string(duk_trans_dvalue_ctx *ctx, const char *str); -void duk_trans_dvalue_send_lstring(duk_trans_dvalue_ctx *ctx, const char *str, size_t len); -void duk_trans_dvalue_send_buffer(duk_trans_dvalue_ctx *ctx, const char *buf, size_t len); -void duk_trans_dvalue_send_unused(duk_trans_dvalue_ctx *ctx); -void duk_trans_dvalue_send_undefined(duk_trans_dvalue_ctx *ctx); -void duk_trans_dvalue_send_null(duk_trans_dvalue_ctx *ctx); -void duk_trans_dvalue_send_true(duk_trans_dvalue_ctx *ctx); -void duk_trans_dvalue_send_false(duk_trans_dvalue_ctx *ctx); -void duk_trans_dvalue_send_number(duk_trans_dvalue_ctx *ctx, double val); -void duk_trans_dvalue_send_object(duk_trans_dvalue_ctx *ctx, int classnum, const char *ptr_data, size_t ptr_len); -void duk_trans_dvalue_send_pointer(duk_trans_dvalue_ctx *ctx, const char *ptr_data, size_t ptr_len); -void duk_trans_dvalue_send_lightfunc(duk_trans_dvalue_ctx *ctx, int lf_flags, const char *ptr_data, size_t ptr_len); -void duk_trans_dvalue_send_heapptr(duk_trans_dvalue_ctx *ctx, const char *ptr_data, size_t ptr_len); -void duk_trans_dvalue_send_req_cmd(duk_trans_dvalue_ctx *ctx, int cmd); - -/* Duktape debug callbacks provided by the transport. */ -duk_size_t duk_trans_dvalue_read_cb(void *udata, char *buffer, duk_size_t length); -duk_size_t duk_trans_dvalue_write_cb(void *udata, const char *buffer, duk_size_t length); -duk_size_t duk_trans_dvalue_peek_cb(void *udata); -void duk_trans_dvalue_read_flush_cb(void *udata); -void duk_trans_dvalue_write_flush_cb(void *udata); -void duk_trans_dvalue_detached_cb(void *udata); - -#endif /* DUK_TRANS_DVALUE_H_INCLUDED */ 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/debug-trans-dvalue/test.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/test.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/test.c deleted file mode 100644 index 7830ec2..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-dvalue/test.c +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Example program using the dvalue debug transport. - */ - -#include <stdio.h> -#include <stdlib.h> - -#include "duktape.h" -#include "duk_trans_dvalue.h" - -void my_cooperate(duk_trans_dvalue_ctx *ctx, int block) { - static int first_blocked = 1; - - if (!block) { - /* Duktape is not blocked; you can cooperate with e.g. a user - * interface here and send dvalues to Duktape, but don't block. - */ - return; - } - - /* Duktape is blocked on a read and won't continue until debug - * command(s) are sent. - * - * Normally you'd enter your own event loop here, and process - * events until something needs to be sent to Duktape. For - * example, the user might press a "Step over" button in the - * UI which would cause dvalues to be sent. You can then - * return from this callback. - * - * The code below sends some example messages for testing the - * dvalue handling of the transport. - * - * If you create dvalues manually and send them using - * duk_trans_dvalue_send(), you must free the dvalues after - * the send call returns using duk_dvalue_free(). - */ - - if (first_blocked) { - char *tmp; - int i; - - /* First time Duktape becomes blocked, send DumpHeap which - * exercises a lot of parsing code. - * - * NOTE: Valgrind may complain about reading uninitialized - * bytes. This is caused by the DumpHeap command writing out - * verbatim duk_tval values which are intentionally not - * always fully initialized for performance reasons. - */ - first_blocked = 0; - - fprintf(stderr, "Duktape is blocked, send DumpHeap\n"); - fflush(stderr); - - duk_trans_dvalue_send_req(ctx); - duk_trans_dvalue_send_integer(ctx, 0x20); /* DumpHeap */ - duk_trans_dvalue_send_eom(ctx); - - /* Also send a dummy TriggerStatus request with trailing dvalues - * ignored by Duktape; Duktape will parse the dvalues to be able to - * skip them, so that the dvalue encoding is exercised. - */ - - tmp = malloc(100000); /* long buffer, >= 65536 chars */ - for (i = 0; i < 100000; i++) { - tmp[i] = (char) i; - } - duk_trans_dvalue_send_req(ctx); - duk_trans_dvalue_send_integer(ctx, 0x11); /* TriggerStatus */ - duk_trans_dvalue_send_string(ctx, "dummy"); /* short, <= 31 chars */ - duk_trans_dvalue_send_string(ctx, "123456789012345678901234567890foobar"); /* medium, >= 32 chars */ - duk_trans_dvalue_send_lstring(ctx, (const char *) tmp, 65535UL); - duk_trans_dvalue_send_lstring(ctx, (const char *) tmp, 65536UL); - duk_trans_dvalue_send_lstring(ctx, (const char *) tmp, 100000UL); - duk_trans_dvalue_send_buffer(ctx, (const char *) tmp, 255U); - duk_trans_dvalue_send_buffer(ctx, (const char *) tmp, 65535UL); - duk_trans_dvalue_send_buffer(ctx, (const char *) tmp, 65536UL); - duk_trans_dvalue_send_buffer(ctx, (const char *) tmp, 100000UL); - duk_trans_dvalue_send_unused(ctx); - duk_trans_dvalue_send_undefined(ctx); - duk_trans_dvalue_send_null(ctx); - duk_trans_dvalue_send_true(ctx); - duk_trans_dvalue_send_false(ctx); - duk_trans_dvalue_send_number(ctx, 123.456); - duk_trans_dvalue_send_object(ctx, 12 /*classnum*/, (const char *) tmp, 8); /* fake ptr len */ - duk_trans_dvalue_send_pointer(ctx, (const char *) tmp, 8); /* fake ptr len */ - duk_trans_dvalue_send_lightfunc(ctx, 0xdabc /*lf_flags*/, (const char *) tmp, 8); /* fake ptr len */ - duk_trans_dvalue_send_heapptr(ctx, (const char *) tmp, 8); /* fake ptr len */ - - duk_trans_dvalue_send_eom(ctx); - } - - fprintf(stderr, "Duktape is blocked, send Eval and StepInto to resume execution\n"); - fflush(stderr); - - /* duk_trans_dvalue_send_req_cmd() sends a REQ dvalue followed by - * an integer dvalue (command) for convenience. - */ - - duk_trans_dvalue_send_req_cmd(ctx, 0x1e); /* 0x1e = Eval */ - duk_trans_dvalue_send_string(ctx, "evalMe"); - duk_trans_dvalue_send_eom(ctx); - - duk_trans_dvalue_send_req_cmd(ctx, 0x14); /* 0x14 = StepOver */ - duk_trans_dvalue_send_eom(ctx); -} - -void my_received(duk_trans_dvalue_ctx *ctx, duk_dvalue *dv) { - char buf[DUK_DVALUE_TOSTRING_BUFLEN]; - (void) ctx; - - duk_dvalue_to_string(dv, buf); - fprintf(stderr, "Received dvalue: %s\n", buf); - fflush(stderr); - - /* Here a normal debug client would wait for dvalues until an EOM - * dvalue was received (which completes a debug message). The - * debug message would then be handled, possibly causing UI changes - * and/or causing debug commands to be sent to Duktape. - * - * The callback is responsible for eventually freeing the dvalue. - * Here we free it immediately, but an actual client would probably - * gather dvalues into an array or linked list to handle when the - * debug message was complete. - */ - - duk_dvalue_free(dv); -} - -void my_handshake(duk_trans_dvalue_ctx *ctx, const char *line) { - (void) ctx; - - /* The Duktape handshake line is given in 'line' (without LF). - * The 'line' argument can be accessed for the duration of the - * callback (read only). Don't free 'line' here, the transport - * handles that. - */ - - fprintf(stderr, "Received handshake line: '%s'\n", line); - fflush(stderr); -} - -void my_detached(duk_trans_dvalue_ctx *ctx) { - (void) ctx; - - /* Detached call forwarded as is. */ - - fprintf(stderr, "Debug transport detached\n"); - fflush(stderr); -} - -int main(int argc, char *argv[]) { - duk_context *ctx; - duk_trans_dvalue_ctx *trans_ctx; - int exitval = 0; - - (void) argc; (void) argv; /* suppress warning */ - - ctx = duk_create_heap_default(); - if (!ctx) { - fprintf(stderr, "Failed to create Duktape heap\n"); - fflush(stderr); - exitval = 1; - goto cleanup; - } - - trans_ctx = duk_trans_dvalue_init(); - if (!trans_ctx) { - fprintf(stderr, "Failed to create debug transport context\n"); - fflush(stderr); - exitval = 1; - goto cleanup; - } - trans_ctx->cooperate = my_cooperate; - trans_ctx->received = my_received; - trans_ctx->handshake = my_handshake; - trans_ctx->detached = my_detached; - - /* Attach debugger; this will fail with a fatal error here unless - * debugger support is compiled in. To fail more gracefully, call - * this under a duk_safe_call() to catch the error. - */ - duk_debugger_attach(ctx, - duk_trans_dvalue_read_cb, - duk_trans_dvalue_write_cb, - duk_trans_dvalue_peek_cb, - duk_trans_dvalue_read_flush_cb, - duk_trans_dvalue_write_flush_cb, - duk_trans_dvalue_detached_cb, - (void *) trans_ctx); - - fprintf(stderr, "Debugger attached, running eval\n"); - fflush(stderr); - - /* Evaluate simple test code, callbacks will "step over" until end. - * - * The test code here is just for exercising the debug transport. - * The 'evalMe' variable is evaluated (using debugger command Eval) - * before every step to force different dvalues to be carried over - * the transport. - */ - - duk_eval_string(ctx, - "var evalMe;\n" - "\n" - "print('Hello world!');\n" - "[ undefined, null, true, false, 123, -123, 123.1, 0, -0, 1/0, 0/0, -1/0, \n" - " 'foo', Duktape.Buffer('bar'), Duktape.Pointer('dummy'), Math.cos, \n" - "].forEach(function (val) {\n" - " print(val);\n" - " evalMe = val;\n" - "});\n" - "\n" - "var str = 'xxx'\n" - "for (i = 0; i < 10; i++) {\n" - " print(i, str);\n" - " evalMe = str;\n" - " evalMe = Duktape.Buffer(str);\n" - " str = str + str;\n" - "}\n" - ); - duk_pop(ctx); - - duk_debugger_detach(ctx); - - cleanup: - if (trans_ctx) { - duk_trans_dvalue_free(trans_ctx); - trans_ctx = NULL; - } - if (ctx) { - duk_destroy_heap(ctx); - } - - return exitval; -} 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/debug-trans-socket/README.rst ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/README.rst b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/README.rst deleted file mode 100644 index 78522cd..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/README.rst +++ /dev/null @@ -1,17 +0,0 @@ -================================================ -Debug transport using a simple socket connection -================================================ - -This example implements an example debug transport which uses a Linux or -Windows TCP server socket on the debug target. - -Files: - -* ``duk_trans_socket.h``: header file for the transport, used for both Linux - and Windows socket variants. - -* ``duk_trans_socket_unix.c``: implementation for Linux/Unix. - -* ``duk_trans_socket_windows.c``: implementation for Windows. - -Compile either Unix or Windows source file only. 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/debug-trans-socket/duk_trans_socket.h ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/duk_trans_socket.h b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/duk_trans_socket.h deleted file mode 100644 index 43f4a34..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/duk_trans_socket.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef DUK_TRANS_SOCKET_H_INCLUDED -#define DUK_TRANS_SOCKET_H_INCLUDED - -#include "duktape.h" - -void duk_trans_socket_init(void); -void duk_trans_socket_finish(void); -void duk_trans_socket_waitconn(void); -duk_size_t duk_trans_socket_read_cb(void *udata, char *buffer, duk_size_t length); -duk_size_t duk_trans_socket_write_cb(void *udata, const char *buffer, duk_size_t length); -duk_size_t duk_trans_socket_peek_cb(void *udata); -void duk_trans_socket_read_flush_cb(void *udata); -void duk_trans_socket_write_flush_cb(void *udata); - -#endif /* DUK_TRANS_SOCKET_H_INCLUDED */ 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/debug-trans-socket/duk_trans_socket_unix.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/duk_trans_socket_unix.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/duk_trans_socket_unix.c deleted file mode 100644 index ac74de2..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/duk_trans_socket_unix.c +++ /dev/null @@ -1,340 +0,0 @@ -/* - * Example debug transport using a Linux/Unix TCP socket - * - * Provides a TCP server socket which a debug client can connect to. - * After that data is just passed through. - */ - -#include <stdio.h> -#include <string.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <unistd.h> -#include <poll.h> -#include <errno.h> -#include "duktape.h" - -#if !defined(DUK_DEBUG_PORT) -#define DUK_DEBUG_PORT 9091 -#endif - -#if 0 -#define DEBUG_PRINTS -#endif - -static int server_sock = -1; -static int client_sock = -1; - -/* - * Transport init and finish - */ - -void duk_trans_socket_init(void) { - struct sockaddr_in addr; - int on; - - server_sock = socket(AF_INET, SOCK_STREAM, 0); - if (server_sock < 0) { - fprintf(stderr, "%s: failed to create server socket: %s\n", - __FILE__, strerror(errno)); - fflush(stderr); - goto fail; - } - - on = 1; - if (setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, (const char *) &on, sizeof(on)) < 0) { - fprintf(stderr, "%s: failed to set SO_REUSEADDR for server socket: %s\n", - __FILE__, strerror(errno)); - fflush(stderr); - goto fail; - } - - memset((void *) &addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = INADDR_ANY; - addr.sin_port = htons(DUK_DEBUG_PORT); - - if (bind(server_sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) { - fprintf(stderr, "%s: failed to bind server socket: %s\n", - __FILE__, strerror(errno)); - fflush(stderr); - goto fail; - } - - listen(server_sock, 1 /*backlog*/); - return; - - fail: - if (server_sock >= 0) { - (void) close(server_sock); - server_sock = -1; - } -} - -void duk_trans_socket_finish(void) { - if (client_sock >= 0) { - (void) close(client_sock); - client_sock = -1; - } - if (server_sock >= 0) { - (void) close(server_sock); - server_sock = -1; - } -} - -void duk_trans_socket_waitconn(void) { - struct sockaddr_in addr; - socklen_t sz; - - if (server_sock < 0) { - fprintf(stderr, "%s: no server socket, skip waiting for connection\n", - __FILE__); - fflush(stderr); - return; - } - if (client_sock >= 0) { - (void) close(client_sock); - client_sock = -1; - } - - fprintf(stderr, "Waiting for debug connection on port %d\n", (int) DUK_DEBUG_PORT); - fflush(stderr); - - sz = (socklen_t) sizeof(addr); - client_sock = accept(server_sock, (struct sockaddr *) &addr, &sz); - if (client_sock < 0) { - fprintf(stderr, "%s: accept() failed, skip waiting for connection: %s\n", - __FILE__, strerror(errno)); - fflush(stderr); - goto fail; - } - - fprintf(stderr, "Debug connection established\n"); - fflush(stderr); - - /* XXX: For now, close the listen socket because we won't accept new - * connections anyway. A better implementation would allow multiple - * debug attaches. - */ - - if (server_sock >= 0) { - (void) close(server_sock); - server_sock = -1; - } - return; - - fail: - if (client_sock >= 0) { - (void) close(client_sock); - client_sock = -1; - } -} - -/* - * Duktape callbacks - */ - -/* Duktape debug transport callback: (possibly partial) read. */ -duk_size_t duk_trans_socket_read_cb(void *udata, char *buffer, duk_size_t length) { - ssize_t ret; - - (void) udata; /* not needed by the example */ - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: udata=%p, buffer=%p, length=%ld\n", - __func__, (void *) udata, (void *) buffer, (long) length); - fflush(stderr); -#endif - - if (client_sock < 0) { - return 0; - } - - if (length == 0) { - /* This shouldn't happen. */ - fprintf(stderr, "%s: read request length == 0, closing connection\n", - __FILE__); - fflush(stderr); - goto fail; - } - - if (buffer == NULL) { - /* This shouldn't happen. */ - fprintf(stderr, "%s: read request buffer == NULL, closing connection\n", - __FILE__); - fflush(stderr); - goto fail; - } - - /* In a production quality implementation there would be a sanity - * timeout here to recover from "black hole" disconnects. - */ - - ret = read(client_sock, (void *) buffer, (size_t) length); - if (ret < 0) { - fprintf(stderr, "%s: debug read failed, closing connection: %s\n", - __FILE__, strerror(errno)); - fflush(stderr); - goto fail; - } else if (ret == 0) { - fprintf(stderr, "%s: debug read failed, ret == 0 (EOF), closing connection\n", - __FILE__); - fflush(stderr); - goto fail; - } else if (ret > (ssize_t) length) { - fprintf(stderr, "%s: debug read failed, ret too large (%ld > %ld), closing connection\n", - __FILE__, (long) ret, (long) length); - fflush(stderr); - goto fail; - } - - return (duk_size_t) ret; - - fail: - if (client_sock >= 0) { - (void) close(client_sock); - client_sock = -1; - } - return 0; -} - -/* Duktape debug transport callback: (possibly partial) write. */ -duk_size_t duk_trans_socket_write_cb(void *udata, const char *buffer, duk_size_t length) { - ssize_t ret; - - (void) udata; /* not needed by the example */ - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: udata=%p, buffer=%p, length=%ld\n", - __func__, (void *) udata, (const void *) buffer, (long) length); - fflush(stderr); -#endif - - if (client_sock < 0) { - return 0; - } - - if (length == 0) { - /* This shouldn't happen. */ - fprintf(stderr, "%s: write request length == 0, closing connection\n", - __FILE__); - fflush(stderr); - goto fail; - } - - if (buffer == NULL) { - /* This shouldn't happen. */ - fprintf(stderr, "%s: write request buffer == NULL, closing connection\n", - __FILE__); - fflush(stderr); - goto fail; - } - - /* In a production quality implementation there would be a sanity - * timeout here to recover from "black hole" disconnects. - */ - - ret = write(client_sock, (const void *) buffer, (size_t) length); - if (ret <= 0 || ret > (ssize_t) length) { - fprintf(stderr, "%s: debug write failed, closing connection: %s\n", - __FILE__, strerror(errno)); - fflush(stderr); - goto fail; - } - - return (duk_size_t) ret; - - fail: - if (client_sock >= 0) { - (void) close(client_sock); - client_sock = -1; - } - return 0; -} - -duk_size_t duk_trans_socket_peek_cb(void *udata) { - struct pollfd fds[1]; - int poll_rc; - - (void) udata; /* not needed by the example */ - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: udata=%p\n", __func__, (void *) udata); - fflush(stderr); -#endif - - if (client_sock < 0) { - return 0; - } - - fds[0].fd = client_sock; - fds[0].events = POLLIN; - fds[0].revents = 0; - - poll_rc = poll(fds, 1, 0); - if (poll_rc < 0) { - fprintf(stderr, "%s: poll returned < 0, closing connection: %s\n", - __FILE__, strerror(errno)); - fflush(stderr); - goto fail; /* also returns 0, which is correct */ - } else if (poll_rc > 1) { - fprintf(stderr, "%s: poll returned > 1, treating like 1\n", - __FILE__); - fflush(stderr); - return 1; /* should never happen */ - } else if (poll_rc == 0) { - return 0; /* nothing to read */ - } else { - return 1; /* something to read */ - } - - fail: - if (client_sock >= 0) { - (void) close(client_sock); - client_sock = -1; - } - return 0; -} - -void duk_trans_socket_read_flush_cb(void *udata) { - (void) udata; /* not needed by the example */ - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: udata=%p\n", __func__, (void *) udata); - fflush(stderr); -#endif - - /* Read flush: Duktape may not be making any more read calls at this - * time. If the transport maintains a receive window, it can use a - * read flush as a signal to update the window status to the remote - * peer. A read flush is guaranteed to occur before Duktape stops - * reading for a while; it may occur in other situations as well so - * it's not a 100% reliable indication. - */ - - /* This TCP transport requires no read flush handling so ignore. - * You can also pass a NULL to duk_debugger_attach() and not - * implement this callback at all. - */ -} - -void duk_trans_socket_write_flush_cb(void *udata) { - (void) udata; /* not needed by the example */ - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: udata=%p\n", __func__, (void *) udata); - fflush(stderr); -#endif - - /* Write flush. If the transport combines multiple writes - * before actually sending, a write flush is an indication - * to write out any pending bytes: Duktape may not be doing - * any more writes on this occasion. - */ - - /* This TCP transport requires no write flush handling so ignore. - * You can also pass a NULL to duk_debugger_attach() and not - * implement this callback at all. - */ - return; -} 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/debug-trans-socket/duk_trans_socket_windows.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/duk_trans_socket_windows.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/duk_trans_socket_windows.c deleted file mode 100644 index e92ac26..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/debug-trans-socket/duk_trans_socket_windows.c +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Example debug transport using a Windows TCP socket - * - * Provides a TCP server socket which a debug client can connect to. - * After that data is just passed through. - * - * https://msdn.microsoft.com/en-us/library/windows/desktop/ms737593(v=vs.85).aspx - * - * Compiling 'duk' with debugger support using MSVC (Visual Studio): - * - * > cl /W3 /O2 /Feduk.exe - * /DDUK_OPT_DEBUGGER_SUPPORT /DDUK_OPT_INTERRUPT_COUNTER - * /DDUK_CMDLINE_DEBUGGER_SUPPORT - * /Iexamples\debug-trans-socket /Isrc - * examples\cmdline\duk_cmdline.c - * examples\debug-trans-socket\duk_trans_socket_windows.c - * src\duktape.c - * - * With MinGW: - * - * $ gcc -oduk.exe -Wall -O2 \ - * -DDUK_OPT_DEBUGGER_SUPPORT -DDUK_OPT_INTERRUPT_COUNTER \ - * -DDUK_CMDLINE_DEBUGGER_SUPPORT \ - * -Iexamples/debug-trans-socket -Isrc \ - * examples/cmdline/duk_cmdline.c \ - * examples/debug-trans-socket/duk_trans_socket_windows.c \ - * src/duktape.c -lm -lws2_32 - */ - -#undef UNICODE -#if !defined(WIN32_LEAN_AND_MEAN) -#define WIN32_LEAN_AND_MEAN -#endif - -/* MinGW workaround for missing getaddrinfo() etc: - * http://programmingrants.blogspot.fi/2009/09/tips-on-undefined-reference-to.html - */ -#if defined(__MINGW32__) || defined(__MINGW64__) -#if !defined(_WIN32_WINNT) -#define _WIN32_WINNT 0x0501 -#endif -#endif - -#include <windows.h> -#include <winsock2.h> -#include <ws2tcpip.h> -#include <stdio.h> -#include <string.h> -#include "duktape.h" - -#if defined(_MSC_VER) -#pragma comment (lib, "Ws2_32.lib") -#endif - -#if !defined(DUK_DEBUG_PORT) -#define DUK_DEBUG_PORT 9091 -#endif -#if !defined(DUK_DEBUG_ADDRESS) -#define DUK_DEBUG_ADDRESS "0.0.0.0" -#endif -#define DUK__STRINGIFY_HELPER(x) #x -#define DUK__STRINGIFY(x) DUK__STRINGIFY_HELPER(x) - -#if 0 -#define DEBUG_PRINTS -#endif - -static SOCKET server_sock = INVALID_SOCKET; -static SOCKET client_sock = INVALID_SOCKET; -static int wsa_inited = 0; - -/* - * Transport init and finish - */ - -void duk_trans_socket_init(void) { - WSADATA wsa_data; - struct addrinfo hints; - struct addrinfo *result = NULL; - int rc; - - memset((void *) &wsa_data, 0, sizeof(wsa_data)); - memset((void *) &hints, 0, sizeof(hints)); - - rc = WSAStartup(MAKEWORD(2, 2), &wsa_data); - if (rc != 0) { - fprintf(stderr, "%s: WSAStartup() failed: %d\n", __FILE__, rc); - fflush(stderr); - goto fail; - } - wsa_inited = 1; - - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - hints.ai_flags = AI_PASSIVE; - - rc = getaddrinfo(DUK_DEBUG_ADDRESS, DUK__STRINGIFY(DUK_DEBUG_PORT), &hints, &result); - if (rc != 0) { - fprintf(stderr, "%s: getaddrinfo() failed: %d\n", __FILE__, rc); - fflush(stderr); - goto fail; - } - - server_sock = socket(result->ai_family, result->ai_socktype, result->ai_protocol); - if (server_sock == INVALID_SOCKET) { - fprintf(stderr, "%s: socket() failed with error: %ld\n", - __FILE__, (long) WSAGetLastError()); - fflush(stderr); - goto fail; - } - - rc = bind(server_sock, result->ai_addr, (int) result->ai_addrlen); - if (rc == SOCKET_ERROR) { - fprintf(stderr, "%s: bind() failed with error: %ld\n", - __FILE__, (long) WSAGetLastError()); - fflush(stderr); - goto fail; - } - - rc = listen(server_sock, SOMAXCONN); - if (rc == SOCKET_ERROR) { - fprintf(stderr, "%s: listen() failed with error: %ld\n", - __FILE__, (long) WSAGetLastError()); - fflush(stderr); - goto fail; - } - - if (result != NULL) { - freeaddrinfo(result); - result = NULL; - } - return; - - fail: - if (result != NULL) { - freeaddrinfo(result); - result = NULL; - } - if (server_sock != INVALID_SOCKET) { - (void) closesocket(server_sock); - server_sock = INVALID_SOCKET; - } - if (wsa_inited) { - WSACleanup(); - wsa_inited = 0; - } -} - -void duk_trans_socket_finish(void) { - if (client_sock != INVALID_SOCKET) { - (void) closesocket(client_sock); - client_sock = INVALID_SOCKET; - } - if (server_sock != INVALID_SOCKET) { - (void) closesocket(server_sock); - server_sock = INVALID_SOCKET; - } - if (wsa_inited) { - WSACleanup(); - wsa_inited = 0; - } -} - -void duk_trans_socket_waitconn(void) { - if (server_sock == INVALID_SOCKET) { - fprintf(stderr, "%s: no server socket, skip waiting for connection\n", - __FILE__); - fflush(stderr); - return; - } - if (client_sock != INVALID_SOCKET) { - (void) closesocket(client_sock); - client_sock = INVALID_SOCKET; - } - - fprintf(stderr, "Waiting for debug connection on port %d\n", (int) DUK_DEBUG_PORT); - fflush(stderr); - - client_sock = accept(server_sock, NULL, NULL); - if (client_sock == INVALID_SOCKET) { - fprintf(stderr, "%s: accept() failed with error %ld, skip waiting for connection\n", - __FILE__, (long) WSAGetLastError()); - fflush(stderr); - goto fail; - } - - fprintf(stderr, "Debug connection established\n"); - fflush(stderr); - - /* XXX: For now, close the listen socket because we won't accept new - * connections anyway. A better implementation would allow multiple - * debug attaches. - */ - - if (server_sock != INVALID_SOCKET) { - (void) closesocket(server_sock); - server_sock = INVALID_SOCKET; - } - return; - - fail: - if (client_sock != INVALID_SOCKET) { - (void) closesocket(client_sock); - client_sock = INVALID_SOCKET; - } -} - -/* - * Duktape callbacks - */ - -/* Duktape debug transport callback: (possibly partial) read. */ -duk_size_t duk_trans_socket_read_cb(void *udata, char *buffer, duk_size_t length) { - int ret; - - (void) udata; /* not needed by the example */ - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: udata=%p, buffer=%p, length=%ld\n", - __FUNCTION__, (void *) udata, (void *) buffer, (long) length); - fflush(stderr); -#endif - - if (client_sock == INVALID_SOCKET) { - return 0; - } - - if (length == 0) { - /* This shouldn't happen. */ - fprintf(stderr, "%s: read request length == 0, closing connection\n", - __FILE__); - fflush(stderr); - goto fail; - } - - if (buffer == NULL) { - /* This shouldn't happen. */ - fprintf(stderr, "%s: read request buffer == NULL, closing connection\n", - __FILE__); - fflush(stderr); - goto fail; - } - - /* In a production quality implementation there would be a sanity - * timeout here to recover from "black hole" disconnects. - */ - - ret = recv(client_sock, (void *) buffer, (int) length, 0); - if (ret < 0) { - fprintf(stderr, "%s: debug read failed, error %d, closing connection\n", - __FILE__, ret); - fflush(stderr); - goto fail; - } else if (ret == 0) { - fprintf(stderr, "%s: debug read failed, ret == 0 (EOF), closing connection\n", - __FILE__); - fflush(stderr); - goto fail; - } else if (ret > (int) length) { - fprintf(stderr, "%s: debug read failed, ret too large (%ld > %ld), closing connection\n", - __FILE__, (long) ret, (long) length); - fflush(stderr); - goto fail; - } - - return (duk_size_t) ret; - - fail: - if (client_sock != INVALID_SOCKET) { - (void) closesocket(client_sock); - client_sock = INVALID_SOCKET; - } - return 0; -} - -/* Duktape debug transport callback: (possibly partial) write. */ -duk_size_t duk_trans_socket_write_cb(void *udata, const char *buffer, duk_size_t length) { - int ret; - - (void) udata; /* not needed by the example */ - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: udata=%p, buffer=%p, length=%ld\n", - __FUNCTION__, (void *) udata, (const void *) buffer, (long) length); - fflush(stderr); -#endif - - if (client_sock == INVALID_SOCKET) { - return 0; - } - - if (length == 0) { - /* This shouldn't happen. */ - fprintf(stderr, "%s: write request length == 0, closing connection\n", - __FILE__); - fflush(stderr); - goto fail; - } - - if (buffer == NULL) { - /* This shouldn't happen. */ - fprintf(stderr, "%s: write request buffer == NULL, closing connection\n", - __FILE__); - fflush(stderr); - goto fail; - } - - /* In a production quality implementation there would be a sanity - * timeout here to recover from "black hole" disconnects. - */ - - ret = send(client_sock, (const void *) buffer, (int) length, 0); - if (ret <= 0 || ret > (int) length) { - fprintf(stderr, "%s: debug write failed, ret %d, closing connection\n", - __FILE__, ret); - fflush(stderr); - goto fail; - } - - return (duk_size_t) ret; - - fail: - if (client_sock != INVALID_SOCKET) { - (void) closesocket(INVALID_SOCKET); - client_sock = INVALID_SOCKET; - } - return 0; -} - -duk_size_t duk_trans_socket_peek_cb(void *udata) { - u_long avail; - int rc; - - (void) udata; /* not needed by the example */ - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: udata=%p\n", __FUNCTION__, (void *) udata); - fflush(stderr); -#endif - - if (client_sock == INVALID_SOCKET) { - return 0; - } - - avail = 0; - rc = ioctlsocket(client_sock, FIONREAD, &avail); - if (rc != 0) { - fprintf(stderr, "%s: ioctlsocket() returned %d, closing connection\n", - __FILE__, rc); - fflush(stderr); - goto fail; /* also returns 0, which is correct */ - } else { - if (avail == 0) { - return 0; /* nothing to read */ - } else { - return 1; /* something to read */ - } - } - /* never here */ - - fail: - if (client_sock != INVALID_SOCKET) { - (void) closesocket(client_sock); - client_sock = INVALID_SOCKET; - } - return 0; -} - -void duk_trans_socket_read_flush_cb(void *udata) { - (void) udata; /* not needed by the example */ - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: udata=%p\n", __FUNCTION__, (void *) udata); - fflush(stderr); -#endif - - /* Read flush: Duktape may not be making any more read calls at this - * time. If the transport maintains a receive window, it can use a - * read flush as a signal to update the window status to the remote - * peer. A read flush is guaranteed to occur before Duktape stops - * reading for a while; it may occur in other situations as well so - * it's not a 100% reliable indication. - */ - - /* This TCP transport requires no read flush handling so ignore. - * You can also pass a NULL to duk_debugger_attach() and not - * implement this callback at all. - */ -} - -void duk_trans_socket_write_flush_cb(void *udata) { - (void) udata; /* not needed by the example */ - -#if defined(DEBUG_PRINTS) - fprintf(stderr, "%s: udata=%p\n", __FUNCTION__, (void *) udata); - fflush(stderr); -#endif - - /* Write flush. If the transport combines multiple writes - * before actually sending, a write flush is an indication - * to write out any pending bytes: Duktape may not be doing - * any more writes on this occasion. - */ - - /* This TCP transport requires no write flush handling so ignore. - * You can also pass a NULL to duk_debugger_attach() and not - * implement this callback at all. - */ - return; -} - -#undef DUK__STRINGIFY_HELPER -#undef DUK__STRINGIFY 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/dummy-date-provider/README.rst ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/dummy-date-provider/README.rst b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/dummy-date-provider/README.rst deleted file mode 100644 index bc62779..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/dummy-date-provider/README.rst +++ /dev/null @@ -1,5 +0,0 @@ -==================================== -Dummy external Date provider example -==================================== - -This example implements a dummy, minimal external Date provider. 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/dummy-date-provider/dummy_date_provider.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/dummy-date-provider/dummy_date_provider.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/dummy-date-provider/dummy_date_provider.c deleted file mode 100644 index 9c9e716..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/dummy-date-provider/dummy_date_provider.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Dummy Date provider - * - * There are two minimally required macros which you must provide in - * duk_config.h: - * - * extern duk_double_t dummy_get_now(void); - * - * #define DUK_USE_DATE_GET_NOW(ctx) dummy_get_now() - * #define DUK_USE_DATE_GET_LOCAL_TZOFFSET(d) 0 - * - * Note that since the providers are macros, you don't need to use - * all arguments. Similarly, you can "return" fixed values as - * constants. Above, local timezone offset is always zero i.e. - * we're always in UTC. - * - * You can also provide optional macros to parse and format timestamps - * in a platform specific format. If not provided, Duktape will use - * ISO 8601 only (which is often good enough). - */ - -#include "duktape.h" - -duk_double_t dummy_get_now(void) { - /* Return a fixed time here as a dummy example. */ - return -11504520000.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/eval/README.rst ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eval/README.rst b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eval/README.rst deleted file mode 100644 index eed1806..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eval/README.rst +++ /dev/null @@ -1,5 +0,0 @@ -============ -Eval example -============ - -Evaluate expressions from command line. 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/eval/eval.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eval/eval.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eval/eval.c deleted file mode 100644 index 4409926..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/examples/eval/eval.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Very simple example program for evaluating expressions from - * command line - */ - -#include "duktape.h" -#include <stdio.h> - -static int eval_raw(duk_context *ctx) { - duk_eval(ctx); - return 1; -} - -static int tostring_raw(duk_context *ctx) { - duk_to_string(ctx, -1); - return 1; -} - -static void usage_exit(void) { - fprintf(stderr, "Usage: eval <expression> [<expression>] ...\n"); - fflush(stderr); - exit(1); -} - -int main(int argc, char *argv[]) { - duk_context *ctx; - int i; - const char *res; - - if (argc < 2) { - usage_exit(); - } - - ctx = duk_create_heap_default(); - for (i = 1; i < argc; i++) { - printf("=== eval: '%s' ===\n", argv[i]); - duk_push_string(ctx, argv[i]); - duk_safe_call(ctx, eval_raw, 1 /*nargs*/, 1 /*nrets*/); - duk_safe_call(ctx, tostring_raw, 1 /*nargs*/, 1 /*nrets*/); - res = duk_get_string(ctx, -1); - printf("%s\n", res ? res : "null"); - duk_pop(ctx); - } - - duk_destroy_heap(ctx); - - return 0; -}