diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index bb29d98..913c575 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2254,6 +2254,9 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) // util-service-check, utility for correcting errors with meshServiceName initialization. Refer to modules/util-service-check.js duk_peval_string_noresult(ctx, "addCompressedModule('util-service-check', Buffer.from('eJy1Vttu2zgQfRegfxj4xVI3kdLsW4Mu4HVdVEhi70bOBkFdLGh5JBOVSS1JxTaK/vsOZamRb7kA7bxIFOdyzsxwxPCN6/RlsVY8mxs4Pzs/g0gYzKEvVSEVM1wK13GdK56g0DiDUsxQgZkj9AqW0KPeOYF/UGnShvPgDDyr0Km3Ov6F66xlCQu2BiENlBrJA9eQ8hwBVwkWBriARC6KnDORICy5mVdRah+B69zXHuTUMFJmpF7QKm2rATMWLZDMjSneheFyuQxYhTSQKgvzjZ4Or6L+YBgPTgmttbgVOWoNCv8ruSKa0zWwgsAkbEoQc7YEqYBlCmnPSAt2qbjhIjsBLVOzZApdZ8a1UXxamq08NdCIb1uBMsUEdHoxRHEH/uzFUXziOnfR+NPodgx3vZub3nAcDWIY3UB/NPwQjaPRkFYfoTe8h8to+OEEkLJEUXBVKIueIHKbQZxRumLErfCp3MDRBSY85QmRElnJMoRMPqASxAUKVAuubRU1gZu5Ts4X3FRNoPcZUZA3oU2e66SlSKwW1U38q1E9kEZ/jslXz3edb5uCPDAF+uLxXWEG75uMe12yPKVPNkPrrt/SK5iZt5YPLC9RV5ZZ8HeJan2Ja88uPl0O7oMrmbD8murNBfVkNx59HFMuB5PJqEABsSxVgj/c8xS8jb9Al9OvuNb+ZqOGbMXmzbOBua36Qe0dCytEYvvDzr4V3aZfJ+10wQTVRHX9oH4LMjTxZnMH62f+pSHSFp56OuD6Gj3f3989gKPCEiS51GRywKEVhaZUYjdbRxB83/+EucafAmbH984yYSaZg7fyn0x+y6h+/d5MjTCEW1GdeTrlKRczmjOLyikVv91bYdNZYbuxmjZ9VYvex+PB9WTSL5VCYfpSGCXzGM1kUtddv7Zhf02/2oP4E0lNJl34DfYaioyjBTX+XxStu9sBh8rtrZ4pd6VJALgo8Wl/NUP7CDQNUuN1A1zhHgw6YpVOjiIz8z/ePh+/9lyZfT77QsQPe9543+gF2jBl9B0Nea/b6fo+fNtGWE7t70Rk3lv/4tChq2HCezJQklKubczEZvblk2GvM57Rt/KLJluL1xMT7gX4KozPTLxGXjX5GjlQjJfGPWK6aXXEI4SPkD3g7PgAfZyF9tHwFmWeW6zViNR0LyMYTTcVOTM0bhaPP/mE0VXD/st/P+++e3S9kLMyR+o+ulMa2x2794RWMqYKWbOeYcrK3Dzl6cfVw7PnYxt1m13jtuLxPwpX1LY=', 'base64'));"); + // descriptor helper methods, see modules/util-descriptors for details + duk_peval_string_noresult(ctx, "addCompressedModule('util-descriptors', Buffer.from('eJztV91v2zYQfzfg/+EgtJDcKFKaPi2eCzhfm9fUHuJ0RZFkHS1RFlGZ1EgqtuF5f/uOspzIltPKD+tT+WKTvPvd7z54Iv1XzcaZSOeSjWMNx0fHr6HHNU3gTMhUSKKZ4M1Gs3HFAsoVDSHjIZWgYwrdlAT4U+y48AeVCqXh2DsCxwhYxZbVajcbc5HBhMyBCw2ZoojAFEQsoUBnAU01MA6BmKQJIzygMGU6zq0UGF6z8alAECNNUJigeIqzqCwGRBu2gCPWOj3x/el06pGcqSfk2E9Wcsq/6p1d9IcXh8jWaHzgCVUKJP07YxLdHM2BpEgmICOkmJApCAlkLCnuaWHITiXTjI9dUCLSUyJpsxEypSUbZXojTmtq6G9ZACNFOFjdIfSGFpx2h72h22x87N38OvhwAx+719fd/k3vYgiDazgb9M97N71BH2eX0O1/gne9/rkLFKOEVugslYY9UmQmgjTEcA0p3TAfiRUdldKARSxAp/g4I2MKY/FAJUdfIKVywpTJokJyYbORsAnTeRGoqkdo5JVvgtdsRBkPjBQG5oEkLHRazcZilQcdSzEFx+5j4lWWYlEV3ttwAKkUATL30oRoJDgxlbLcABxTPUgpP6cqkCzVQqoCe4WusFCCGJwK0Gq74GBGQDAIVoQZHKnQOnnaMOOBSAhiloTQWdeAY+cLnwtku+XRGQ0usWId2x8x7qvYduHWxp97Q7sMl2t6Soci0/gjEdW225vLgjt2SDRBkEdnnaAFi/xo5FoHHQg8LYZYM3zstNqwfNYQlfIriLneM5qMe6aUqWMZTxVmGw4jsMrJYSHOLPgHkJN9d8dtsP+ycUqmX+Dw0vy3rWeZPeLbC7uGEK6eX1x1LKtdUzrF4GgkfFtbA+vDYZ3XbfZz/7J9cMBaNfXq8sfR7Sg8h9p5wdxT1wKMTn1dFjmnt2/u4V/w/7w9Ovzp3q9LcD+Opdi9VC+V5ZrAu2Bs78F2nS+3dvhxLGuK1pVb+3Ffi4S1XJXrN5HvOJ0xjfW+G3NKmL5AAacKpuV8c2GxOTVDUp1JPKG/DQd9LyVSUWe7b3h48idOq7Vtf7lFh+Q9kLZq27yttKwtyJGk5Et7u3smjGezH71zR0klCnzjrb+jcfpR+N165/7dcL9u+x1652ZTMj3pBdujt+zZjf7fFvMN3B8N5nEtpBHJEr3VW6pwy/yC+HhGg0QoWr4cRmFXSjJ3IWGj4OkWappUZDoUz5KkgGIROEYKOqvl6p3RaKGEKne2ieAMLR0yHglsbHg/vWKjHk4c24BtpHIamweOMaK8hPIxvmnewlEpiov9s7pi/MTn8y+UU8mC95jgmCRI6QxDq2kfr+0P9HcpZvMVARWzCEsJK0HH28lZAxe676mORYhd3ES3Upy70rcjw/WLpnCplJodkKW/lcTljX/1zAgIN0/MiPEQinysVZfrQ1SkpSiVamZKFPOaWQumInXKwTA8UOAtHD+f0jyqeRxRtKy8LNdzs/GVh0yBmH+C7fwTbJ+Ul4o3jV06OxMRZgnFr655bpnyXex4SJ3sWHMrJ+qksgLLkhvlQqie4Zo8ilfjLuPF1k6by/8AHFh9MA==', 'base64'));"); + // DNS helper util. See modules/util-dns for a human readable version duk_peval_string_noresult(ctx, "addCompressedModule('util-dns', Buffer.from('eJzdV2uT2jYU/c4M/+HWbWN747V3SSZNlzIZso+UZsNmAkkmAyQVtgyaNZIrycuSLfntvQKzmH0AmWYmnfoDNtJ9nHuudGwFO+XSoUgnkg2GGip7lX1ocE0TOBQyFZJoJni5VC6dspByRSPIeEQl6CGFekpCvOUzHryjUqE1VPw9cIyBlU9ZbrVcmogMRmQCXGjIFMUITEHMEgr0MqSpBsYhFKM0YYSHFMZMD2dZ8hh+ufQhjyD6mqAxQfMU/8VFMyDaoAW8hlqnB0EwHo99MkPqCzkIkrmdCk4bh8fN1vEuojUeb3lClQJJ/8qYxDL7EyApgglJHyEmZAxCAhlIinNaGLBjyTTjAw+UiPWYSFouRUxpyfqZXuFpAQ3rLRogU4SDVW9Bo2XB83qr0fLKpfeN9u9nb9vwvv7mTb3Zbhy34OwNHJ41jxrtxlkT/51AvfkBXjaaRx5QZAmz0MtUGvQIkRkGaYR0tShdSR+LORyV0pDFLMSi+CAjAwoDcUElx1ogpXLElOmiQnBRuZSwEdOzRaBuV4RJdgJDXpzx0Nhg13gkxupTxJXjlktX805cEInEaqhBp1ddDrEUR3LCHfvTC8qpZOErItWQJLbrH0pKNG1i9gv6WorLiWM30mGSkpT5UYIWeSyW5qavqB6KyLFfUN2keizk+WsiyUjNLJd5I6LJNpnfEclM9539vcpjtwA8ofyr/K+d0dHX4nkWx1Q6rm9WEH2L2+1R5fT4OkteVAwOFnazFMeA90wg139HEqjVYM+de+RkX1fJ1SmuNgRqXPwjKmnsrMH8WjDc97LFPlMT9Sk8g8ovFTiAypOnHjx+uoRmrkgsnwuJzYWd9tNMDZ0cwVel9mD/iVvkSIsW7hg+cNwFieaawnhopMNxCmWupNvz1jWokNHNHdylIxY7Z/cHw26edjq/YXWZ5IDlaDMzLSz+hPHs8o6lHyLUqLhgZgOfUilC3LSIhl7S8ATLceygz3ighrYHHRtvvUXymYevdCQyjTeJ0Wy7ujosuGObVqPzNSQndOFqJrUzr4c1CAuMVmF6KwGV8u5IJtBtc8bnq9ixQqIhoDoMUIlEcuGHgsfwN6BipsDJiCoqUWVwBHHYXW6D/aeN/8j4HHZPzLNt3R/dvrLXTOLo0fFpzbKqG6xSrFvHYHU2WqJYOqy2X2W/NU+qDx8yd4P9JnyzHe38xL4EH38MDJVID749Moo9sN0Nnp9rCkVdo7vX9ixAnrbK9rlWq8CDB9Du7PdqNWvZBGtTNdsVVCD0Z9XtdvNfy8NmeO1OpbcFzEXrvI0dMVtwg8mm+QXa3tpk1nTtSuxyesk0LuBVmzFh+hgnnMWwlpNbujwXD+eP1lnTT1GMqHNzY/u4NUeodTdUBzdXOHTobaVfyFGnV/CYrryTRyQUd72R/2eydG87VZhplsDuLlJwvyB9Z0W6+m6KBF8g+Njtqh3Y6Xb1zpKZbrfT2dv9tdcLvplc1AtCdvZyWym7oTPznwNYPFme4doDjNh51Jvf9/+z2jPdSnv+lfrcrz9m2+vZgaYGW4hQ9ZZyzZz9czpRzjeQKIWHvHAITi45fpoQjct8tNSpkODBxZ59WNkHxaEYD2J9FS0GzTUSUYbg8CwkpFZY4fX3WKGOPn6Zn1eLkfDI8qiyNk7hULM2UkQkmq4Nda3F9wSKaEyyRK8LsSp9RXJhekdUJPof7kamjA==', 'base64'));"); #ifdef WIN32 diff --git a/modules/util-descriptors.js b/modules/util-descriptors.js new file mode 100644 index 0000000..40f5922 --- /dev/null +++ b/modules/util-descriptors.js @@ -0,0 +1,134 @@ +/* +Copyright 2021 Intel Corporation + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +function invalid() +{ + throw ('Not supported on ' + process.platform); +} + +function getOpenDescriptors() +{ + + switch (process.platform) + { + case "freebsd": + var child = require('child_process').execFile('/bin/sh', ['sh']); + child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); + child.stderr.on('data', function (c) { }); + + child.stdin.write("procstat -f " + process.pid + " | tr '\\n' '`' | awk -F'`' '"); + child.stdin.write('{'); + child.stdin.write(' DEL="";'); + child.stdin.write(' printf "[";'); + child.stdin.write(' for(i=1;i 0) + { + try + { + libc = require('_GenericMarshal').CreateNativeProxy(libs.shift().path); + libc.CreateMethod('close'); + break; + } + catch (e) + { + libc = null; + } + } + if (libc == null) { throw ('cannot find libc'); } + } + + while (fdArray.length > 0) + { + fd = fdArray.pop(); + if (fd > 2) + { + libc.close(fd); + } + } +} + +switch (process.platform) +{ + case 'linux': + case 'freebsd': + module.exports = { getOpenDescriptors: getOpenDescriptors, closeDescriptors: closeDescriptors }; + break; + default: + module.exports = { getOpenDescriptors: invalid, closeDescriptors: invalid }; + break; +} \ No newline at end of file