From da6cf39dd21e7f5d2136417b0c9b89f8532bbd81 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Sun, 8 Sep 2019 19:30:31 -0700 Subject: [PATCH] Added 'index' to networkInterfaces() on windows Added missing #define Added IPAddress helper --- microscript/ILibDuktape_Helpers.c | 9 +++++++++ microscript/ILibDuktape_Helpers.h | 1 + microscript/ILibDuktape_Polyfills.c | 15 ++++++++++++--- microscript/ILibDuktape_ScriptContainer.c | 2 ++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/microscript/ILibDuktape_Helpers.c b/microscript/ILibDuktape_Helpers.c index ce7d015..c1b8013 100644 --- a/microscript/ILibDuktape_Helpers.c +++ b/microscript/ILibDuktape_Helpers.c @@ -249,6 +249,15 @@ struct sockaddr_in6* Duktape_IPAddress6_FromString(char* address, unsigned short ILibInet_pton(AF_INET6, address, &(duktape_internalAddress.sin6_addr)); return(&duktape_internalAddress); } +void ILibDuktape_IPV4AddressToOptions(duk_context *ctx, int addr) +{ + struct sockaddr_in6 in6; + memset(&in6, 0, sizeof(struct sockaddr_in6)); + in6.sin6_family = AF_INET; + + ((struct sockaddr_in*)&in6)->sin_addr.s_addr = addr; + ILibDuktape_SockAddrToOptions(ctx, &in6); +} void ILibDuktape_SockAddrToOptions(duk_context *ctx, struct sockaddr_in6 *addr) { char *str = ILibInet_ntop2((struct sockaddr*)addr, ILibScratchPad, sizeof(ILibScratchPad)); diff --git a/microscript/ILibDuktape_Helpers.h b/microscript/ILibDuktape_Helpers.h index 35869c0..46c0213 100644 --- a/microscript/ILibDuktape_Helpers.h +++ b/microscript/ILibDuktape_Helpers.h @@ -65,6 +65,7 @@ int Duktape_GetBooleanProperty(duk_context *ctx, duk_idx_t i, char *propertyName struct sockaddr_in6* Duktape_IPAddress4_FromString(char* address, unsigned short port); struct sockaddr_in6* Duktape_IPAddress6_FromString(char* address, unsigned short port); void ILibDuktape_SockAddrToOptions(duk_context *ctx, struct sockaddr_in6 *addr); +void ILibDuktape_IPV4AddressToOptions(duk_context *ctx, int addr); void *ILibDuktape_GetProcessObject(duk_context *ctx); char* ILibDuktape_String_AsWide(duk_context *ctx, duk_idx_t idx, duk_size_t *len); diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index a75cf82..3cd4003 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -41,7 +41,7 @@ limitations under the License. #define ILibDuktape_DescriptorEvents_Table "\xFF_DescriptorEvents_Table" #define ILibDuktape_DescriptorEvents_FD "\xFF_DescriptorEvents_FD" #define ILibDuktape_DescriptorEvents_Options "\xFF_DescriptorEvents_Options" - +#define CP_ISO8859_1 28591 typedef enum ILibDuktape_Console_DestinationFlags { ILibDuktape_Console_DestinationFlags_DISABLED = 0, @@ -191,9 +191,9 @@ duk_ret_t ILibDuktape_Polyfills_Buffer_from(duk_context *ctx) int r = MultiByteToWideChar(CP_UTF8, 0, (LPCCH)str, (int)strlength, NULL, 0); buffer = duk_push_fixed_buffer(ctx, 2 + (2 * r)); strlength = (duk_size_t)MultiByteToWideChar(CP_UTF8, 0, (LPCCH)str, (int)strlength, (LPWSTR)buffer, r + 1); - r = (int)WideCharToMultiByte(CP_ISO8859_1, 0, (LPCWCH)buffer, strlength, NULL, 0, NULL, FALSE); + r = (int)WideCharToMultiByte(CP_ISO8859_1, 0, (LPCWCH)buffer, (int)strlength, NULL, 0, NULL, FALSE); duk_push_fixed_buffer(ctx, r); - WideCharToMultiByte(CP_ISO8859_1, 0, (LPCWCH)buffer, strlength, (LPSTR)Duktape_GetBuffer(ctx, -1, NULL), r, NULL, FALSE); + WideCharToMultiByte(CP_ISO8859_1, 0, (LPCWCH)buffer, (int)strlength, (LPSTR)Duktape_GetBuffer(ctx, -1, NULL), r, NULL, FALSE); duk_push_buffer_object(ctx, -1, 0, r, DUK_BUFOBJ_NODEJS_BUFFER); #else duk_eval_string(ctx, "Buffer.fromBinary"); // [func] @@ -2336,6 +2336,14 @@ duk_ret_t ILibDuktape_Polyfills_filehash(duk_context *ctx) } } +duk_ret_t ILibDuktape_Polyfills_ipv4From(duk_context *ctx) +{ + int v = duk_require_int(ctx, 0); + ILibDuktape_IPV4AddressToOptions(ctx, v); + duk_get_prop_string(ctx, -1, "host"); + return(1); +} + void ILibDuktape_Polyfills_Init(duk_context *ctx) { ILibDuktape_ModSearch_AddHandler(ctx, "queue", ILibDuktape_Queue_Push); @@ -2371,6 +2379,7 @@ void ILibDuktape_Polyfills_Init(duk_context *ctx) ILibDuktape_CreateInstanceMethod(ctx, "_debugGC", ILibDuktape_Polyfills_debugGC, 0); ILibDuktape_CreateInstanceMethod(ctx, "_debug", ILibDuktape_Polyfills_debug, 0); ILibDuktape_CreateInstanceMethod(ctx, "getSHA384FileHash", ILibDuktape_Polyfills_filehash, 1); + ILibDuktape_CreateInstanceMethod(ctx, "_ipv4From", ILibDuktape_Polyfills_ipv4From, 1); #ifndef MICROSTACK_NOTLS ILibDuktape_CreateInstanceMethod(ctx, "crc32c", ILibDuktape_Polyfills_crc32c, DUK_VARARGS); #endif diff --git a/microscript/ILibDuktape_ScriptContainer.c b/microscript/ILibDuktape_ScriptContainer.c index a20797b..7d29fba 100644 --- a/microscript/ILibDuktape_ScriptContainer.c +++ b/microscript/ILibDuktape_ScriptContainer.c @@ -1515,6 +1515,8 @@ duk_ret_t ILibDuktape_ScriptContainer_OS_networkInterfaces(duk_context *ctx) duk_push_string(ctx, padapters->PhysicalAddressLength>0 ? util_tohex2(padapters->PhysicalAddress, padapters->PhysicalAddressLength, ILibScratchPad) : "00:00:00:00:00:00"); duk_put_prop_string(ctx, -2, "mac"); + duk_push_int(ctx, padapters->IfIndex); duk_put_prop_string(ctx, -2, "index"); + duk_push_string(ctx, padapters->OperStatus == IfOperStatusUp ? "up" : "down"); duk_put_prop_string(ctx, -2, "status");