diff --git a/meshcore/agentcore.c b/meshcore/agentcore.c index b200a08..33dd68a 100644 --- a/meshcore/agentcore.c +++ b/meshcore/agentcore.c @@ -1509,12 +1509,23 @@ duk_ret_t ILibDuktape_MeshAgent_NetInfo(duk_context *ctx) gwname = child.stdout.str.trim();\ child = require('child_process').execFile('/bin/sh', ['sh']); \ child.stdout.str = ''; child.stdout.on('data', function(c) { this.str += c.toString(); }); \ - child.stdin.write('arp -n ' + gwname + ' | awk \\'{ gsub(/[(]/, \"\", $2); gsub(/[)]/, \"\", $2); printf \"%s,%s,%s\", $6, $4, $2; }\\'\\nexit\\n');\ + child.stdin.write('arp -n ' + gwname + ' | awk \\'{ split($2,tok1,\")\"); split(tok1[1],tok2,\"(\"); printf \"%s,%s,%s\", $6,$4,tok2[2]; }\\'\\nexit\\n');\ child.waitExit();\ var tmp = child.stdout.str.trim().split(',');\ child = require('child_process').execFile('/bin/sh', ['sh']);\ child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });\ - child.stdin.write('networksetup -listallhardwareports | tr \\'\\\\n\\' \\'\\@\\' | awk \\'{ gsub(/@@/, \"\\\\n\", $0); gsub(/@Hardware Port/, \"Hardware Port\", $0); print $0; }\\' | awk -F@ \\'{ split($2, dv, \":\"); gsub(/^[ ]/, \"\", dv[2]); if(dv[2]==\"' + tmp[0] + '\") { split($1, hw, \":\"); gsub(/^ /, \"\", hw[2]); print hw[2]; } }\\'\\nexit\\n');\ + child.stdin.write('networksetup -listallhardwareports | tr \\'\\\\n\\' \\'`\\' | awk -F\\'`\\' \\'');\ + child.stdin.write('{ ');\ + child.stdin.write(' for(i=3;iExtraMemoryPtr)[0]; void *h = ((void**)link->ExtraMemoryPtr)[1]; + char *tmp; if (FD_ISSET(SignalDescriptors[0], readset)) { if((bytesRead = read(SignalDescriptors[0], sigbuffer, sizeof(int))) == sizeof(int) && ((int*)sigbuffer)[0] < sizeof(sigbuffer) && (bytesRead += read(SignalDescriptors[0], sigbuffer + sizeof(int), ((int*)sigbuffer)[0])) == ((int*)sigbuffer)[0]) { - switch (((int*)sigbuffer)[1]) - { - case SIGTERM: - ILibDuktape_EventEmitter_SetupEmit(ctx, h, "SIGTERM"); // [emit][this][SIGTERM] - duk_push_string(ctx, SIGTABLE[((int*)sigbuffer)[1]]); // [emit][this][SIGTERM][name] - if (duk_pcall_method(ctx, 2) != 0) { ILibDuktape_Process_UncaughtExceptionEx(ctx, "Error Emitting SIGTERM: "); } - duk_pop(ctx); - break; - case SIGCHLD: - s = 0; - waitpid(((pid_t*)sigbuffer)[2], &s, 0); - ILibDuktape_EventEmitter_SetupEmit(ctx, h, "SIGCHLD"); // [emit][this][SIGCHLD] - duk_push_string(ctx, SIGTABLE[((int*)sigbuffer)[1]]); // [emit][this][SIGTERM][name] - duk_push_int(ctx, s); // [emit][this][SIGCHLD][name][code] - duk_push_int(ctx, ((pid_t*)sigbuffer)[2]); // [emit][this][SIGCHLD][name][code][pid] - duk_push_uint(ctx, ((uid_t*)sigbuffer)[3]); // [emit][this][SIGCHLD][name][code][pid][uid] - if (duk_pcall_method(ctx, 5) != 0) { ILibDuktape_Process_UncaughtExceptionEx(ctx, "Error Emitting SIGCHLD: "); } - duk_pop(ctx); - break; - default: - break; - } + duk_push_global_object(ctx); //[g] + duk_get_prop_string(ctx, -1, "setImmediate"); //[g][immediate] + duk_swap_top(ctx, -2); //[immediate][this] + duk_push_c_function(ctx, ILibDuktape_ScriptContainer_Process_SignalListener_Immediate, DUK_VARARGS); + tmp = duk_push_fixed_buffer(ctx, ((int*)sigbuffer)[0]); //[immediate][this][func][buffer] + memcpy_s(tmp, ((int*)sigbuffer)[0], sigbuffer, ((int*)sigbuffer)[0]); + duk_pcall_method(ctx, 2); duk_pop(ctx); // ... } else if(bytesRead == 0 || (errno != EAGAIN && errno != EWOULDBLOCK)) {