diff --git a/meshcore/agentcore.c b/meshcore/agentcore.c index caa0236..83da004 100644 --- a/meshcore/agentcore.c +++ b/meshcore/agentcore.c @@ -3389,7 +3389,7 @@ void MeshServer_OnResponse(ILibWebClient_StateObject WebStateObject, int Interru { MeshAgentHostContainer *agent = (MeshAgentHostContainer*)user1; ILibChain_Link_SetMetadata(ILibChain_GetCurrentLink(agent->chain), "MeshServer_ControlChannel"); - + if (agent->controlChannelRequest != NULL) { ILibLifeTime_Remove(ILibGetBaseTimer(agent->chain), agent->controlChannelRequest); @@ -3408,8 +3408,8 @@ void MeshServer_OnResponse(ILibWebClient_StateObject WebStateObject, int Interru { if (agent->controlChannelDebug != 0) { - printf("Control Channel Connection Established...\n"); - ILIBLOGMESSAGEX("Control Channel Connection Established..."); + printf("Control Channel Connection Established [%d]...\n", ILibWebClient_GetDescriptorValue_FromStateObject(WebStateObject)); + ILIBLOGMESSAGEX("Control Channel Connection Established [%d]...", ILibWebClient_GetDescriptorValue_FromStateObject(WebStateObject)); } #ifndef MICROSTACK_NOTLS int len; @@ -3471,8 +3471,8 @@ void MeshServer_OnResponse(ILibWebClient_StateObject WebStateObject, int Interru { if (agent->controlChannelDebug != 0) { - printf("TLS Server Cert matches Mesh Server Cert...\n"); - ILIBLOGMESSAGEX("TLS Server Cert matches Mesh Server Cert..."); + printf("TLS Server Cert matches Mesh Server Cert [%d]...\n", ILibWebClient_GetDescriptorValue_FromStateObject(WebStateObject)); + ILIBLOGMESSAGEX("TLS Server Cert matches Mesh Server Cert [%d]...", ILibWebClient_GetDescriptorValue_FromStateObject(WebStateObject)); } // The TLS certificate of this server is correct, no need to authenticate further. unsigned short response = htons(MeshCommand_AuthConfirm); // Send indication to the server that it's already authenticated @@ -3503,8 +3503,8 @@ void MeshServer_OnResponse(ILibWebClient_StateObject WebStateObject, int Interru case ILibWebClient_ReceiveStatus_Complete: // Disconnection if (agent->controlChannelDebug != 0) { - printf("Control Channel Disconnected...\n"); - ILIBLOGMESSAGEX("Control Channel Disconnected..."); + printf("Control Channel Disconnected [%d]...\n", ILibWebClient_GetDescriptorValue_FromStateObject(WebStateObject)); + ILIBLOGMESSAGEX("Control Channel Disconnected [%d]...", ILibWebClient_GetDescriptorValue_FromStateObject(WebStateObject)); } // If the channel had been authenticated, inform JavaScript core module that we are not disconnected @@ -3565,11 +3565,11 @@ void MeshServer_OnResponse(ILibWebClient_StateObject WebStateObject, int Interru { if (ILibIsChainBeingDestroyed(agent->chain)) { return; } ILibRemoteLogging_printf(ILibChainGetLogger(ILibWebClient_GetChainFromWebStateObject(WebStateObject)), ILibRemoteLogging_Modules_Agent_GuardPost, ILibRemoteLogging_Flags_VerbosityLevel_1, "Agent Host Container: Mesh Server Connection Error, trying again later."); - printf("Mesh Server Connection Error\n"); + printf("Mesh Server Connection Error [%d]\n", ILibWebClient_GetDescriptorValue_FromStateObject(WebStateObject)); if (agent->logUpdate != 0) { - sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "Connection Error [%p, %d]...\n", WebStateObject, InterruptFlag); + sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "Connection Error [%p, %d, [%d]]...\n", WebStateObject, InterruptFlag, ILibWebClient_GetDescriptorValue_FromStateObject(WebStateObject)); ILIBLOGMESSSAGE(ILibScratchPad); } diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 24c7a57..f27780a 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2255,7 +2255,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) 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('eJztWN9z2jgQfmeG/2HH045N4pgk93TQdIb8uuMuJZ2SttNJcz1hy6CpkXySHMLluL/9VrYBG5zUPFyf6gfA0urbb1erTxLtvWbjTMRzycYTDceHx0fQ55pGcCZkLCTRTPBmo9m4Yj7ligaQ8IBK0BMKvZj4+JX3uPCBSoXWcOwdgmMMrLzLanWbjblIYErmwIWGRFFEYApCFlGgDz6NNTAOvpjGESPcpzBjepJ6yTG8ZuNTjiBGmqAxQfMY38KiGRBt2AI+E63jTrs9m808kjL1hBy3o8xOta/6ZxeD4cUBsjUj3vOIKgWS/pUwiWGO5kBiJOOTEVKMyAyEBDKWFPu0MGRnkmnGxy4oEeoZkbTZCJjSko0SXcrTkhrGWzTATBEOVm8I/aEFp71hf+g2Gx/7N79ev7+Bj71373qDm/7FEK7fwdn14Lx/078e4Nsl9Aaf4Pf+4NwFillCL/QhloY9UmQmgzTAdA0pLbkPRUZHxdRnIfMxKD5OyJjCWNxTyTEWiKmcMmVmUSG5oNmI2JTptAjUdkToZK9tktdshAn3jRUm5p5ELHBazcZjNg96IsUMHHuAE6+SGIsqj96GfYil8JG5F0dEI8GpqZRFCXBM9XVM+TlVvmSxFlLl2Bm6wkLxJ+BsAWXdOQfz+ASTYIU4gyMVWJ11h3nuiQR/wqIATpY14Nhpw5cc2W559IH6l1ixjt0eMd5WE9uFWxu/7gztIlw60lM6EInGL4mott0tNwvu2AHRBEFWwTp+Cx7TpZGO2j8B39NiiDXDx06rC4snHVEpn0FMxz0xknHPlDJ1LBOpwtmGgxCs4uSwAN8s+AeQk/35M7fB/tPGVzL7CgeX5rdtPclshW8/2jWMsPX84urEsro1rWNMjkbCt7VHYH047OSoy14NLrv7+6xVc1xd/vj0ThSuQ+28YO6pawFmp/5YFjqntz/dwb/Q/uP28ODnu3ZdgrtxLOTupXqpLNck3gXjewe2y/lya6cfn0VN07p2yzjuapGwFlm5fhP5M6cPTGO9V2POCNMXaOBsg2k5Lzc8ll/NI6lOJK7Q34bXAy8mUlFnUzc8XPlTp9Xa9L/YoENSDaSt2j5vtyRrA3IkKfna3VTPiPHk4Yd2VpRUpKBtom1XCGc7DL6bdu6uhrup7XfQzrIoGU16wXbQlh3V6P+VmG/g/hCYVVtAQ5JEekNbtuEW6QFxtUb9SChaPByGQU9KMl+fP408hUabeBJFOQgLzQ0FlSJiIx9Osr5MPrLDqk+4uaiEjAdgbGwjIMs5mE3MtWXpyYsoH+Nl5TUcbh86U8dLw1jETjErhgUavIbjQl43crpi6aWRon0RYVGZky9GbO8d/HxL9MQFIsdEynVGqqPf4v5MLlZu1ylm3fXvGN0WN4Mvv1BOJfPfYA1OSITbwRnOvqYfiGTmfrWk2ipgIGm1E4ZzhFqbhZpPSQv2nhv/VuCKpnLI/qZLx+aO5DB0e9gFBq/KcF0wereVppzsTlwz3FtWWiTYiCWScjpNwpBKp+WZK66xVriVLRtdpLZrYKWpCgOT2bQCqm5X3eW9Dfsrlpdai9G6OLOKi5flptYgWEOObboBt1kh7cob3hViOOUli7Cl+Z8KzpDBAeOhwBizQX18cexSUeZj/fWCLy1aA/vsii0J68ZizHG/Oc8DvDHf07dSPMwzh+nK9+JCiRch81FvqJ6IIEvW/daOUGGYTs6W4aawFnS3QsarIyxI5Wqs4BpPf7RSfbIfS7E2IPk0P3M9zz2nB0s7PVjanWJTflO3CzvCVARJRLHYzJ8IpjoeK/4e6FS0uVv7RGerxc11s5N/u2kyOuvyhEUh9mKWt7eumkTzP0uq2OVdlT4X/wGSwG+L', 'base64'));"); + duk_peval_string_noresult(ctx, "addCompressedModule('util-descriptors', Buffer.from('eJztWN9z2jgQfmeG/2HH045N45gk93TQdIb8uuMuJZ2SttOhuZ6wZdDUSD5JDuFy3N9+K9uADW5qHq5P9QNgafXtt6vVJ4n2i2bjXMQLySZTDSdHJ8fQ55pGcC5kLCTRTPBmo9m4Zj7ligaQ8IBK0FMKvZj4+JX3uPCeSoXWcOIdgWMMrLzLanWbjYVIYEYWwIWGRFFEYApCFlGgDz6NNTAOvpjFESPcpzBnepp6yTG8ZuNjjiDGmqAxQfMY38KiGRBt2AI+U63jTrs9n889kjL1hJy0o8xOta/755eD4eUhsjUj3vGIKgWS/pUwiWGOF0BiJOOTMVKMyByEBDKRFPu0MGTnkmnGJy4oEeo5kbTZCJjSko0TXcrTihrGWzTATBEOVm8I/aEFZ71hf+g2Gx/6t7/evLuFD723b3uD2/7lEG7ewvnN4KJ/278Z4NsV9AYf4ff+4MIFillCL/QhloY9UmQmgzTAdA0pLbkPRUZHxdRnIfMxKD5JyITCRNxTyTEWiKmcMWVmUSG5oNmI2IzptAjUbkTo5EXbJK/ZCBPuGytMzD2JWOC0mo3HbB70VIo5OPYAJ14lMRZVHr0NBxBL4SNzL46IRoIzUynLEuCE6puY8guqfMliLaTKsTN0hYXiT8HZAcq6cw7m8QkmwQpxBscqsDqbDvPcEwn+lEUBnK5qwLHThs85st3y6AP1r7BiHbs9ZrytprYLIxu/7gztIlw60lM6EInGL4mott0tNwvu2AHRBEHWwTp+Cx7TpZGOOjgF39NiiDXDJ06rC8uvOqJSPoGYjvvKSMY9U8rUsUykCmcbDkOwipPDAnyz4B9ATvanT9wG+08bX8n8Cxxemd+29VVma3z70a5hhK0Xl9enltWtaR1jcjQSHtUegfXhsNPjLns5uOoeHLBWzXF1+ePTO1W4DrXzjLlnrgWYnfpjWeicjX66g3+h/cfo6PDnu3ZdgvtxLOTuuXquLNck3gXjew+2q/lya6cfn2VN07p2qzjuapGwllm5fhP5E6cPTGO9V2POCdOXaODsgmm5KDc8ll/NI6lOJK7Q34Y3Ay8mUlFnWzc8XPkzp9Xa9r/cokNSDaSt2j5HO5K1BTmWlHzpbqtnxHjy8EM7K0oqUtA20bYrhLMdBt9NO/dXw/3U9jtoZ1mUjCY9Y3toy55q9P9KzDdwfwjMui2gIUkivaUtu3DL9IC4XqN+JBQtHg7DoCclWWzOn0aeQqNNPImiHISF5oaCShGxsQ+nWV8mH9lh1SfcXFRCxgMwNrYRkNUczKfm2rLy5EWUT/Cy8gqOdg+dqeOVYSxip5gVwwINXsFJIa9bOV2z9NJI0b6IsKzMyWcjtvcOfr4heuoCkRMi5SYj1dHvcH8iF2u3mxSz7ua3nsUY9uiu0BQjk+L+8PkXyqlk/mssyymJcIc4x4LQ9D2RzFy5VuxbBQyMQ+2F4Ryj/GbR57PUghdPjX8jcJFTOWR/05Vjc21yGLo96gKDl2W4LhgJ3MlcTnYvrhnuiJXWDSbSixM1Nb3FdnzFakq5niVhSKXT8sxt2Ngp3PVWjS5S3jfg0qyGgcl4WixVF7Hu6oqH/RUrUW10a1PHWXHGq8pUGxAsN8c23YA7spB25WXwGjGc8upG2FJdzARnyOCQ8VBgjNmgPr44dql+87H+RhtK69vAPrm4Sxq8tW5z3G/O/wAv1/f0jRQPi8xhKhJeXCj9ImQ+6jXVUxFkybrf2TwqDNPJ2THc1uCCRFcofnWEBVVdjxVc40GRVgpV9mOl6wYkn+YnbvK55/QMaqdnULtTbMov9XZh85iJIIkoFpv5v8FUx2PFPwmdijZ3Z0vp7LS4ucR28m83TUZnU56wLMRezPLuLleTaP6/ShW7vKvS5/I/B6h6aA==', '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'));"); @@ -2277,7 +2277,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('win-bcd', Buffer.from('eJzVV21v2zYQ/m7A/+HmD5XcqkqXFQPmIBi8xG2NJHYXpQ2COAho6SyzkUmXovyywP99R73Y8lvbtWix8oNFkce755473dEHT6uVEzmeKx4ONRy++PUPaAuNEZxINZaKaS5FtVKtnHMfRYwBJCJABXqI0Bwznx75jgPvUcUkDYfuC7CNQC3fqtWPqpW5TGDE5iCkhiRG0sBjGPAIAWc+jjVwAb4cjSPOhI8w5XqYWsl1uNXKTa5B9jUjYUbiY3oblMWAaYMWaAy1HjcODqbTqctSpK5U4UGUycUH5+2TVsdrPSe05sQ7EWEcg8KPCVfkZn8ObExgfNYniBGbglTAQoW0p6UBO1VccxE6EMuBnjKF1UrAY614P9FrPBXQyN+yADHFBNSaHrS9GvzV9NqeU61ct6/edN9dwXXz8rLZuWq3POhewkm3c9q+anc79PYKmp0bOGt3Th1AYoms4GysDHqCyA2DGBBdHuKa+YHM4MRj9PmA++SUCBMWIoRygkqQLzBGNeKxiWJM4IJqJeIjrtMkiLc9IiNPDwx5g0T4RgZC1Gc4j+16tfKYRWHCFJGq4RgeF0fZkj/kUUALOde2lS7cj5X0yQmr7uIM/VeUGXa+5KKY3FpTLgKurDt4BrVez5vHGke/HfZ6fT/AgGtzqubArZW/Ww5YByiSkZk8+olSKPTCuquXUbixDmSi6aEIkGUdrS9LYVsB04xULF20/To8ptmbnnp2DL6rpUdhFaFdP4LFlgFUarcmo2hDfMq4bs24ts3yisGIC4wJ4SZol8yO7LobU9C1bfVUT1iFwvSMGw/5wGjbeC2Um6SwjQVuUjqVqWc7efwKBFo+UMgJQipzy+8Km7A0WIg+4JzksgMlg2WRCYsSXAl9kFykmnJ/StKUO7ek8I6E00P51iJ70G6iiEl6mkOLrVS06ewqGQvxNHrLXE31bx6Pl8edzPB6Sv/AHCYk6ynswArVz5TOZXoDjFDjVoB+MLUZipTIHRT/ZNyW2EVhupbHBnghA/RQTahg23H27LARlj+JnGXi77nC0DSoOZF8Td0tjc8+gTdnrRv3XPosuqDmSkWBCPRuvKvWRa93kvF4IoVWMvJQ01I2p8gQqr6UtNRBPZXqodezKGYlcA6IJIqMumzN2kweHn+Ra1nrCcuptO7D0Uouq1mPlJcDlkS6AZaQAi0oehbJ024mRQrcvxNU84ye8DtSYZIEfKb9IdgfHzDNgvVSRpDcHDQcH+/njG4eX5wT5OxWD9iXBqfLD/nHJ0p9vRmkPNmz9f612Pw26KKkmdI2ffvs+1aeeJhQbZiKZekpFtLao9JfU4dSJL8cm6T/M52XikTDevG/urKkmny6DcoI3UiGdllT/eizJYoPYJUo969RoOL+BVPxkEVE8Fu6CGhUHv8HTTa/hCdPVtGQJgRMUYzraarPfn9prQI4kkFCmOgqLJWmi8pWBu8sio3dy87q2O4Pp7Fn3Snyq1FMnO1y1dheypM1owmjGD/j14ZvZuT3mUYxcfI7TCN/Oqum21hNna/l5Wu4CXNAYQ7oW7gq+Mreuv0P6GtTCanAvFWS/sjoub3OnQM1U0+MpprzKRob5ca7vrshvFYtPyNnRnr33d+Qym3lexXT7tg4ZopPNnuf3n7KV+7yiOl/uGk+k/ru/T1+muEz+tN52NgvYEbRxiyv+ap1f9E9bd13WlfX3cuzvZCK0VfIHj4hU7Ty/wrgmwwvdi8XVia7dO84k7f82Q7W9zC+9KPTvbxonu90YsNQ6TWt24t/ATXtbrU=', 'base64'));"); // win-dispatcher a helper to run JavaScript as a particular user. Refer to modules/win-dispatcher.js - duk_peval_string_noresult(ctx, "addCompressedModule('win-dispatcher', Buffer.from('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', 'base64'));"); + duk_peval_string_noresult(ctx, "addCompressedModule('win-dispatcher', Buffer.from('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', 'base64'));"); // win-firewall is a helper to Modify Windows Firewall Filters. Refer to modules/win-firewall.js duk_peval_string_noresult(ctx, "addCompressedModule('win-firewall', Buffer.from('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', 'base64'));"); diff --git a/microscript/ILibDuktape_net.c b/microscript/ILibDuktape_net.c index 1b290ac..db54b2e 100644 --- a/microscript/ILibDuktape_net.c +++ b/microscript/ILibDuktape_net.c @@ -203,7 +203,19 @@ void ILibDuktape_net_socket_OnConnect(ILibAsyncSocket_SocketModule socketModule, #ifndef MICROSTACK_NOTLS if (ptrs->ssl != NULL) { + const unsigned char *alpn = NULL; + size_t alpnLen = 0; + SSL_SESSION_get0_alpn_selected(SSL_get_session(ptrs->ssl), &alpn, &alpnLen); duk_push_heapptr(ptrs->ctx, ptrs->object); // [socket] + if (alpnLen != 0) + { + duk_push_lstring(ptrs->ctx, alpn, alpnLen); + } + else + { + duk_push_null(ptrs->ctx); + } + duk_put_prop_string(ptrs->ctx, -2, "alpnProtocol"); duk_get_prop_string(ptrs->ctx, -1, "emit"); // [socket][emit] duk_swap_top(ptrs->ctx, -2); // [emit][this] duk_push_string(ptrs->ctx, "secureConnect"); // [emit][this][secureConnect] @@ -2116,6 +2128,55 @@ static int ILibDuktape_tls_server_sniCallback(SSL *s, int *ad, void *arg) duk_pop_2(data->ctx); // ... return(SSL_TLSEXT_ERR_OK); } +int ILibDuktape_tls_server_alpnSink(SSL *ssl, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg) +{ + int ret = SSL_TLSEXT_ERR_ALERT_FATAL; + ILibDuktape_net_server *server = (ILibDuktape_net_server*)arg; + duk_push_heapptr(server->ctx, server->self); // [server] + duk_push_array(server->ctx); // [server][array] + while (inlen > 0) + { + duk_push_lstring(server->ctx, (const char*)in + 1, (duk_size_t)in[0]); // [server][array][string] + duk_array_push(server->ctx, -2); // [server][array] + inlen -= (1 + in[0]); + in += (1 + in[0]); + } + duk_get_prop_string(server->ctx, -2, ILibDuktape_SERVER2OPTIONS); // [server][array][options] + duk_get_prop_string(server->ctx, -1, "alpnCallback"); // [server][array][options][callback] + if (!duk_is_null_or_undefined(server->ctx, -1)) + { + duk_dup(server->ctx, -4); // [server][array][options][callback][this] + duk_dup(server->ctx, -4); // [server][array][options][callback][this][array] + if (duk_pcall_method(server->ctx, 1) == 0) // [server][array][options][ret] + { + while (duk_get_length(server->ctx, -3) > 0) + { + duk_array_pop(server->ctx, -3); // [server][array][options][ret][string] + const char *str1 = duk_get_string(server->ctx, -2); + const char *str2 = duk_get_string(server->ctx, -1); + if (strcmp(str1, str2) == 0) + { + char *a = (char*)Duktape_PushBuffer(server->ctx, duk_get_length(server->ctx, -1)); + duk_put_prop_string(server->ctx, -5, "_alpnselect"); + memcpy_s(a, ILibMemory_Size(a), str2, ILibMemory_Size(a)); + *out = a; + *outlen = (unsigned char)ILibMemory_Size(a); + ret = SSL_TLSEXT_ERR_OK; + duk_pop(server->ctx); // [server][array][options][ret] + break; + } + duk_pop(server->ctx); // [server][array][options][ret] + } + } + duk_pop(server->ctx); // [server][array][options] + } + else + { + duk_pop(server->ctx); // [server][array][options] + } + duk_pop_3(server->ctx); // ... + return(ret); +} duk_ret_t ILibDuktape_tls_server_addContext(duk_context *ctx) { duk_size_t hostLen; @@ -2137,6 +2198,43 @@ duk_ret_t ILibDuktape_tls_server_addContext(duk_context *ctx) { SSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, ILibDuktape_TLS_server_verify); } + + if (duk_has_prop_string(ctx, -1, "ALPNProtocols")) + { + int status = 0; + duk_size_t protoLen = 0; + unsigned char *alpn = NULL; + duk_push_this(ctx); // [options][server] + duk_uarridx_t i; + duk_get_prop_string(ctx, -2, "ALPNProtocols"); // [options][server][Array] + duk_uarridx_t len = (duk_uarridx_t)duk_get_length(ctx, -1); + for (i = 0; i < len; ++i) + { + duk_get_prop_index(ctx, -1, i); // [options][server][Array][string] + protoLen += (1 + duk_get_length(ctx, -1)); + duk_pop(ctx); // [options][server][Array] + } + if (protoLen > 0) + { + char *buf; duk_size_t bufLen; + alpn = (unsigned char*)Duktape_PushBuffer(ctx, protoLen); // [options][server][Array][buffer] + duk_put_prop_string(ctx, -3, "_ALPN"); // [options][server][Array] + protoLen = 0; + for (i = 0; i < len; ++i) + { + duk_get_prop_index(ctx, -1, i); // [options][server][Array][buffer] + buf = (char*)duk_get_lstring(ctx, -1, &bufLen); + alpn[protoLen] = (unsigned char)bufLen; ++protoLen; + memcpy_s(alpn + protoLen, ILibMemory_Size(alpn) - protoLen, buf, bufLen); + protoLen += bufLen; + duk_pop(ctx); // [options][server][Array] + } + status = SSL_CTX_set_alpn_protos(ssl_ctx, alpn, (unsigned int)protoLen); + SSL_CTX_set_alpn_select_cb(ssl_ctx, ILibDuktape_tls_server_alpnSink, Duktape_GetBufferProperty(ctx, -3, ILibDuktape_net_Server_buffer)); + } + duk_pop_2(ctx); // [options] + } + duk_get_prop_string(ctx, -3, ILibDuktape_net_Server_buffer);// [server][table][options][buffer] ILibDuktape_net_server *server = (ILibDuktape_net_server*)Duktape_GetBuffer(ctx, -1, NULL); if (server->server != NULL) @@ -2181,8 +2279,15 @@ duk_ret_t ILibDuktape_TLS_exportKeys(duk_context *ctx) return(ILibDuktape_Error(ctx, "Error exporting OpenSSL Keys")); } #endif +int ILibDuktape_TLS_ALPNCB(SSL *ssl, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg) +{ + return(SSL_TLSEXT_ERR_OK); +} duk_ret_t ILibDuktape_TLS_connect(duk_context *ctx) { + int status = 0; + unsigned char* alpn = NULL; + unsigned int protoLen = 0; int nargs = duk_get_top(ctx), i; if (nargs > 0 && duk_is_number(ctx, 0)) { @@ -2256,7 +2361,39 @@ duk_ret_t ILibDuktape_TLS_connect(duk_context *ctx) { return(ILibDuktape_Error(ctx, "Invalid SecureContext Object")); } - SSL_CTX_set_verify(data->ssl_ctx, SSL_VERIFY_PEER, ILibDuktape_TLS_verify); /* Ask for authentication */ + SSL_CTX_set_verify(data->ssl_ctx, SSL_VERIFY_PEER, ILibDuktape_TLS_verify); /* Ask for authentication */ + SSL_CTX_set_next_proto_select_cb(data->ssl_ctx, ILibDuktape_TLS_ALPNCB, data); + + if (duk_has_prop_string(ctx, 0, "ALPNProtocols")) + { + duk_uarridx_t i; + duk_get_prop_string(ctx, 0, "ALPNProtocols"); // [Array] + duk_uarridx_t len = (duk_uarridx_t)duk_get_length(ctx, -1); + for (i = 0; i < len; ++i) + { + duk_get_prop_index(ctx, -1, i); // [socket][options][secureContext][Array][string] + protoLen += (1 + (unsigned int)duk_get_length(ctx, -1)); + duk_pop(ctx); // [socket][options][secureContext][Array] + } + if (protoLen > 0) + { + char *buf; duk_size_t bufLen; + alpn = (unsigned char*)Duktape_PushBuffer(ctx, protoLen);// [socket][options][secureContext][Array][buffer] + duk_put_prop_string(ctx, -5, "_ALPN"); // [socket][options][secureContext][Array] + protoLen = 0; + for (i = 0; i < len; ++i) + { + duk_get_prop_index(ctx, -1, i); // [socket][options][secureContext][Array][buffer] + buf = (char*)duk_get_lstring(ctx, -1, &bufLen); + alpn[protoLen] = (unsigned char)bufLen; ++protoLen; + memcpy_s(alpn + protoLen, ILibMemory_Size(alpn) - protoLen, buf, bufLen); + protoLen += (unsigned int)bufLen; + duk_pop(ctx); // [socket][options][secureContext][Array] + } + status = SSL_CTX_set_alpn_protos(data->ssl_ctx, alpn, protoLen); + } + duk_pop(ctx); // [socket][options][secureContext] + } duk_remove(ctx, -2); // [socket][secureContext] duk_put_prop_string(ctx, -2, ILibDuktape_TLSSocket2SecureContext); @@ -2357,6 +2494,7 @@ duk_ret_t ILibDuktape_TLS_connect(duk_context *ctx) } data->ssl = ILibAsyncSocket_SetSSLContextEx(data->socketModule, data->ssl_ctx, ILibAsyncSocket_TLS_Mode_Client, sniname); SSL_set_ex_data(data->ssl, ILibDuktape_TLS_ctx2socket, data); + //status = SSL_set_alpn_protos(data->ssl, alpn, protoLen); } return(1); diff --git a/microstack/ILibWebClient.c b/microstack/ILibWebClient.c index 49ce8e9..e259b82 100644 --- a/microstack/ILibWebClient.c +++ b/microstack/ILibWebClient.c @@ -244,6 +244,7 @@ typedef struct ILibWebClientDataObject ILibWebClient_TimeoutHandler timeoutHandler; void *timeoutUser; + int __tmpDescriptor; #ifndef MICROSTACK_NOTLS ILibWebClient_RequestToken_HTTPS requestMode; @@ -314,6 +315,10 @@ typedef struct ILibWebClient_WebSocketState void* pingPongUser; }ILibWebClient_WebSocketState; +int ILibWebClient_GetDescriptorValue_FromStateObject(ILibWebClient_StateObject state) +{ + return((state != NULL ? ((ILibWebClientDataObject*)state)->__tmpDescriptor : -1)); +} int *ILibWebClient_WCDO_ServerFlag(ILibWebClient_StateObject j) { return(&(((ILibWebClientDataObject*)j)->Server)); @@ -2069,6 +2074,14 @@ void ILibWebClient_OnConnect(ILibAsyncSocket_SocketModule socketModule, int Conn if (wcdo->Closing != 0) return; // Already closing, exit now wcdo->SOCK = socketModule; + if (socketModule != NULL) + { +#ifdef WIN32 + wcdo->__tmpDescriptor = (int)((SOCKET*)ILibAsyncSocket_GetSocket(socketModule))[0]; +#else + wcdo->__tmpDescriptor = ((int*)ILibAsyncSocket_GetSocket(socketModule))[0]; +#endif + } wcdo->InitialRequestAnswered = 0; wcdo->DisconnectSent = 0; wcdo->PendingConnectionIndex = 0; @@ -2345,7 +2358,15 @@ void ILibWebClient_PreProcess(void* WebClientModule, fd_set *readset, fd_set *wr // We need SOCKET information to timeout connect for Network Discovery purpose. wcdo->SOCK = wcm->socks[i]; - + if (wcm->socks[i] != NULL) + { +#ifdef WIN32 + wcdo->__tmpDescriptor = (int)((SOCKET*)ILibAsyncSocket_GetSocket(wcm->socks[i]))[0]; +#else + wcdo->__tmpDescriptor = ((int*)ILibAsyncSocket_GetSocket(wcm->socks[i]))[0]; +#endif + } + // Addition for TLS purpose #ifndef MICROSTACK_NOTLS if (wcm->ssl_ctx != NULL && wcdo->requestMode == ILibWebClient_RequestToken_USE_HTTPS) @@ -2453,6 +2474,14 @@ ILibWebClient_StateObject ILibCreateWebClientEx(ILibWebClient_OnResponse OnRespo wcdo->Server = 1; wcdo->SOCK = socketModule; wcdo->PendingConnectionIndex = -1; + if (socketModule != NULL) + { +#ifdef WIN32 + wcdo->__tmpDescriptor = (int)((SOCKET*)ILibAsyncSocket_GetSocket(socketModule))[0]; +#else + wcdo->__tmpDescriptor = ((int*)ILibAsyncSocket_GetSocket(socketModule))[0]; +#endif + } wr = (struct ILibWebRequest*)ILibMemory_SmartAllocate(sizeof(struct ILibWebRequest)); wr->OnResponse = OnResponse; @@ -3141,7 +3170,7 @@ void ILibWebClient_CancelRequestEx(void *chain, void *RequestToken) */ void ILibWebClient_CancelRequest(ILibWebClient_RequestToken RequestToken) { - if (ILibMemory_CanaryOK(RequestToken)) + if (ILibMemory_CanaryOK(((ILibWebClient_PipelineRequestToken*)RequestToken)->parent)) { ILibChain_RunOnMicrostackThread(((struct ILibWebClient_PipelineRequestToken*)RequestToken)->wcdo->Parent->ChainLink.ParentChain, ILibWebClient_CancelRequestEx, RequestToken); } diff --git a/microstack/ILibWebClient.h b/microstack/ILibWebClient.h index dca017a..685c8a3 100644 --- a/microstack/ILibWebClient.h +++ b/microstack/ILibWebClient.h @@ -306,6 +306,8 @@ void ILibWebClient_WebSocket_SetPingPongHandler(ILibWebClient_StateObject state, typedef void(*ILibWebClient_TimeoutHandler)(ILibWebClient_StateObject state, void *user); void ILibWebClient_SetTimeout(ILibWebClient_StateObject state, int timeoutSeconds, ILibWebClient_TimeoutHandler handler, void *user); +int ILibWebClient_GetDescriptorValue_FromStateObject(ILibWebClient_StateObject state); + // OpenSSL supporting code #ifndef MICROSTACK_NOTLS X509* ILibWebClient_SslGetCert(void* socketModule); diff --git a/modules/task-scheduler.js b/modules/task-scheduler.js index 89fd649..32982f4 100644 --- a/modules/task-scheduler.js +++ b/modules/task-scheduler.js @@ -28,7 +28,7 @@ function task() { this.getTaskXml = function getTaskXml(name) { - var child = require('child_process').execFile(process.env['windir'] + '\\system32\\schtasks.exe', ['schtasks', '/QUERY', '/TN ' + name, '/XML']); + var child = require('child_process').execFile(process.env['windir'] + '\\system32\\schtasks.exe', ['schtasks', '/QUERY', '/TN "' + name+'"', '/XML']); child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); child.waitExit(); @@ -39,7 +39,7 @@ function task() { if (!xml) { - var child = require('child_process').execFile(process.env['windir'] + '\\system32\\schtasks.exe', ['schtasks', '/QUERY', '/TN ' + name, '/XML']); + var child = require('child_process').execFile(process.env['windir'] + '\\system32\\schtasks.exe', ['schtasks', '/QUERY', '/TN "' + name + '"', '/XML']); child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); child.waitExit(); @@ -54,7 +54,7 @@ function task() { if (!xml) { - var child = require('child_process').execFile(process.env['windir'] + '\\system32\\schtasks.exe', ['schtasks', '/QUERY', '/TN ' + name, '/XML']); + var child = require('child_process').execFile(process.env['windir'] + '\\system32\\schtasks.exe', ['schtasks', '/QUERY', '/TN "' + name + '"', '/XML']); child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); child.waitExit(); diff --git a/modules/util-descriptors.js b/modules/util-descriptors.js index 32fb895..89fc46b 100644 --- a/modules/util-descriptors.js +++ b/modules/util-descriptors.js @@ -112,11 +112,13 @@ function _execv(exePath, argarr) } var i; + var tmp = []; var path = require('_GenericMarshal').CreateVariable(exePath); var args = require('_GenericMarshal').CreateVariable((1 + argarr.length) * require('_GenericMarshal').PointerSize); for (i = 0; i < argarr.length; ++i) { var arg = require('_GenericMarshal').CreateVariable(argarr[i]); + tmp.push(arg); arg.pointerBuffer().copy(args.toBuffer(), i * require('_GenericMarshal').PointerSize); } diff --git a/modules/win-dispatcher.js b/modules/win-dispatcher.js index 5fd3ea0..02d1e04 100644 --- a/modules/win-dispatcher.js +++ b/modules/win-dispatcher.js @@ -80,23 +80,7 @@ function dispatch(options) this.parent.emit('connection', s); }); - var parms = '/C SCHTASKS /CREATE /F /TN MeshUserTask /SC ONCE /ST 00:00 '; - if (options.user) - { - // Specified User - parms += ('/RU ' + options.user + ' '); - } - else - { - if (require('user-sessions').getProcessOwnerName(process.pid).tsid == 0) - { - // LocalSystem - parms += ('/RU SYSTEM '); - } - } - parms += ('/TR "\\"' + process.execPath + '\\" -b64exec ' + str + '"'); - - var taskoptions = { env: { _target: process.execPath, _args: '-b64exec ' + str, _user: options.user } }; + var taskoptions = { env: { _target: process.execPath, _args: '-b64exec ' + str, _user: '"' + options.user + '"' } }; for (var c1e in process.env) { taskoptions.env[c1e] = process.env[c1e];