1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2026-02-19 02:43:33 +00:00

Added 'index' to networkInterfaces() on windows

Added missing #define
Added IPAddress helper
This commit is contained in:
Bryan Roe
2019-09-08 19:30:31 -07:00
parent f75e2514a9
commit da6cf39dd2
4 changed files with 24 additions and 3 deletions

View File

@@ -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));

View File

@@ -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);

View File

@@ -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

View File

@@ -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");