javonet-ruby-sdk 2.6.7 → 2.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/javonet-ruby-sdk/Binaries/Clr/JavonetClrRuntime.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Jvm/JavonetJvmRuntime.jar +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Linux/ARM64/libJavonetActivationService.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Linux/ARM64/libJavonetJvmRuntimeNative.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Linux/ARM64/libUtils.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Linux/ARM64/version.txt +1 -1
- data/lib/javonet-ruby-sdk/Binaries/Native/Linux/X64/libJavonetActivationService.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Linux/X64/libJavonetJvmRuntimeNative.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Linux/X64/libJavonetNodejs2218RuntimeNative.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Linux/X64/libUtils.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Linux/X64/version.txt +1 -1
- data/lib/javonet-ruby-sdk/Binaries/Native/MacOs/ARM64/libJavonetActivationService.dylib +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/MacOs/ARM64/libJavonetJvmRuntimeNative.dylib +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/MacOs/ARM64/libUtils.dylib +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/MacOs/ARM64/version.txt +1 -1
- data/lib/javonet-ruby-sdk/Binaries/Native/MacOs/X64/libJavonetActivationService.dylib +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/MacOs/X64/libJavonetJvmRuntimeNative.dylib +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/MacOs/X64/libJavonetNodejs2218RuntimeNative.dylib +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/MacOs/X64/libUtils.dylib +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/MacOs/X64/version.txt +1 -1
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/Configs.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/JavonetActivationService.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/JavonetCppRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/JavonetGoRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/JavonetJvmRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/JavonetNetcoreRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/JavonetPhpRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/JavonetPythonRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/JavonetRubyRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/JavonetTcpClient.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/JavonetTcpTlsClient.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/Utils.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/ARM64/version.txt +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/Configs.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetActivationService.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetClrRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetCppRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetGoRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetJvmRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetNetcoreRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetNodejs2218RuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetNodejsRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetPerlRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetPhp848RuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetPhpRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetPython2RuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetPythonRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetRubyRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetTcpClient.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/JavonetTcpTlsClient.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/Utils.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X64/version.txt +1 -1
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/Configs.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/JavonetActivationService.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/JavonetClrRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/JavonetCppRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/JavonetGoRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/JavonetJvmRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/JavonetNetcoreRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/JavonetPhpRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/JavonetPython2RuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/JavonetPythonRuntimeNative.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/JavonetTcpClient.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/JavonetTcpTlsClient.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/Utils.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Native/Windows/X86/version.txt +1 -1
- data/lib/javonet-ruby-sdk/Binaries/Netcore/Javonet.Netcore.Core.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Netcore/Javonet.Netcore.Plugins.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Netcore/Javonet.Netcore.Utils.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/core/handler/Handler.cjs +2 -7
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/core/handler/LoadLibraryHandler.cjs +15 -9
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/core/handler/PassDelegateHandler.cjs +2 -2
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/core/interpreter/Interpreter.cjs +11 -33
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/core/protocol/CommandSerializer.cjs +3 -8
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/core/receiver/Receiver.cjs +6 -6
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/sdk/Activator.cjs +44 -0
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/sdk/ActivatorDetails.cjs +13 -3
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/sdk/ConfigRuntimeFactory.cjs +9 -0
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/sdk/InvocationContext.cjs +49 -56
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/sdk/Javonet.cjs +3 -0
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/sdk/RuntimeContext.cjs +8 -8
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/sdk/configuration/ConfigSourceResolver.cjs +43 -21
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/sdk/tools/ComplexTypeResolver.cjs +84 -34
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/core/handler/Handler.d.ts +2 -1
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/core/handler/PassDelegateHandler.d.ts +2 -2
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/core/interpreter/Interpreter.d.ts +2 -2
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/core/protocol/CommandSerializer.d.ts +3 -3
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/core/receiver/Receiver.d.ts +4 -4
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/sdk/Activator.d.ts +12 -0
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/sdk/ActivatorDetails.d.ts +5 -3
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/sdk/ConfigRuntimeFactory.d.ts +7 -0
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/sdk/InvocationContext.d.ts +11 -10
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/sdk/Javonet.d.ts +2 -1
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/sdk/RuntimeContext.d.ts +4 -3
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/sdk/configuration/ConfigSourceResolver.d.ts +21 -4
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/sdk/tools/ComplexTypeResolver.d.ts +21 -5
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/types/utils/Primitives.d.ts +5 -0
- data/lib/javonet-ruby-sdk/Binaries/Nodejs/dist/utils/Primitives.cjs +201 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/deps/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Class/Load/XS/XS.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/deps/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Data/UUID/UUID.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/deps/lib/perl5/x86_64-linux-gnu-thread-multi/auto/FFI/Platypus/Platypus.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/deps/lib/perl5/x86_64-linux-gnu-thread-multi/auto/List/Util/Util.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/deps/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Moose/Moose.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/deps/lib/perl5/x86_64-linux-gnu-thread-multi/auto/PPI/XS/XS.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/deps/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Package/Stash/XS/XS.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/deps/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Params/Util/Util.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/deps/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Want/Want.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/deps/lib/perl5/x86_64-linux-gnu-thread-multi/auto/share/dist/FFI-Platypus/lib/libplfill.so +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/deps/lib/perl5/x86_64-linux-gnu-thread-multi/perllocal.pod +96 -96
- data/lib/javonet-ruby-sdk/Binaries/Perl/Linux/X64/lib/Javonet/Core/Handler/CommandHandler/LoadLibraryHandler.pm +108 -11
- data/lib/javonet-ruby-sdk/Binaries/Perl/Windows/X64/deps/lib/perl5/MSWin32-x64-multi-thread/auto/Data/UUID/UUID.xs.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Windows/X64/deps/lib/perl5/MSWin32-x64-multi-thread/auto/PPI/XS/XS.xs.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Windows/X64/deps/lib/perl5/MSWin32-x64-multi-thread/auto/Scalar/Util/Numeric/Numeric.xs.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Windows/X64/deps/lib/perl5/MSWin32-x64-multi-thread/auto/Want/Want.xs.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Windows/X64/deps/lib/perl5/MSWin32-x64-multi-thread/auto/autobox/autobox.xs.dll +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Perl/Windows/X64/deps/lib/perl5/MSWin32-x64-multi-thread/perllocal.pod +22 -22
- data/lib/javonet-ruby-sdk/Binaries/Perl/Windows/X64/lib/Javonet/Core/Handler/CommandHandler/LoadLibraryHandler.pm +108 -11
- data/lib/javonet-ruby-sdk/Binaries/Php/javonet/core/handler/LoadLibraryHandler.php +56 -21
- data/lib/javonet-ruby-sdk/Binaries/Php/javonet/core/interpreter/Interpreter.php +2 -2
- data/lib/javonet-ruby-sdk/Binaries/Php/javonet/core/protocol/CommandDeserializer.php +219 -106
- data/lib/javonet-ruby-sdk/Binaries/Php/javonet/core/protocol/CommandSerializer.php +55 -13
- data/lib/javonet-ruby-sdk/Binaries/Php/javonet/utils/Command.php +27 -9
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/delegateCache/__pycache__/DelegatesCache.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/delegateCache/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/GetTypeHandler.py +2 -2
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/LoadLibraryHandler.py +54 -14
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/AbstractCommandHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/AbstractHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/AddEventListenerHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/ArrayGetItemHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/ArrayGetRankHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/ArrayGetSizeHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/ArrayHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/ArrayReferenceHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/ArraySetItemHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/AsOutHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/AsRefHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/CastingHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/ConvertTypeHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/CreateClassInstanceHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/CreateNullHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/DestructReferenceHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/EnableNamespaceHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/EnableTypeHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/ExceptionHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GenerateLibHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetAsyncOperationResultHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetEnumItemHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetEnumNameHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetEnumValueHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetGlobalFieldHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetInstanceFieldHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetInstanceMethodAsDelegateHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetKwargHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetModuleHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetRefValueHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetResultTypeHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetStaticFieldHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetStaticMethodAsDelegateHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/GetTypeHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/Handler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/HandlerDictionary.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/HeartBeatHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/InvokeDelegateHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/InvokeGenericMethodHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/InvokeGenericStaticMethodHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/InvokeGlobalFunctionHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/InvokeInstanceMethodHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/InvokeStaticMethodHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/LoadLibraryHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/OptimizeHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/PassDelegateHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/PluginWrapperHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/ResolveInstanceHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/RetrieveArrayHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/SetInstanceFieldHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/SetStaticFieldHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/ValueHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/handler/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/interpreter/__pycache__/Interpreter.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/interpreter/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/namespaceCache/__pycache__/NamespaceCache.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/namespaceCache/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/protocol/__pycache__/CommandDeserializer.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/protocol/__pycache__/CommandSerializer.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/protocol/__pycache__/TypeDeserializer.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/protocol/__pycache__/TypeSerializer.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/protocol/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/receiver/__pycache__/Receiver.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/receiver/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/referenceCache/__pycache__/ReferencesCache.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/referenceCache/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/typeCache/__pycache__/TypeCache.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/core/typeCache/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/LazyModuleLoader.py +8 -11
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/Command.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/CommandType.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/ConnectionType.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/ExceptionType.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/LazyModuleLoader.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/RuntimeLogger.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/RuntimeName.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/StringEncodingMode.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/Type.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/TypesHandler.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/UtilsConst.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/connectionData/__pycache__/IConnectionData.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/connectionData/__pycache__/InMemoryConnectionData.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/connectionData/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/exception/ExceptionSerializer.py +1 -1
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/exception/__pycache__/ExceptionSerializer.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/exception/__pycache__/ExceptionThrower.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/exception/__pycache__/JavonetException.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/exception/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/messageHelper/__pycache__/MessageHelper.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/Python/javonet/utils/messageHelper/__pycache__/__init__.cpython-312.pyc +0 -0
- data/lib/javonet-ruby-sdk/Binaries/version.txt +1 -1
- data/lib/javonet-ruby-sdk/core/handler/load_library_handler.rb +22 -9
- data/lib/javonet-ruby-sdk/sdk/config_runtime_factory.rb +8 -0
- data/lib/javonet-ruby-sdk/utils/exceptions/exception_serializer.rb +0 -1
- metadata +6 -2
|
@@ -4,39 +4,136 @@ use warnings FATAL => 'all';
|
|
|
4
4
|
use lib 'lib';
|
|
5
5
|
use Moose;
|
|
6
6
|
use File::Basename;
|
|
7
|
+
use Cwd qw(abs_path);
|
|
7
8
|
use Nice::Try;
|
|
8
9
|
use aliased 'Javonet::Core::Exception::Exception' => 'Exception';
|
|
9
10
|
extends 'Javonet::Core::Handler::CommandHandler::AbstractCommandHandler';
|
|
10
11
|
|
|
12
|
+
# Track loaded libraries by absolute path
|
|
13
|
+
our %LOADED_LIBRARIES;
|
|
14
|
+
|
|
11
15
|
sub new {
|
|
12
16
|
my $class = shift;
|
|
13
|
-
my $self
|
|
14
|
-
required_parameters_count => 1
|
|
17
|
+
my $self = {
|
|
18
|
+
required_parameters_count => 1,
|
|
19
|
+
@_, # optional extras
|
|
15
20
|
};
|
|
16
21
|
return bless $self, $class;
|
|
17
22
|
}
|
|
18
23
|
|
|
19
24
|
sub process {
|
|
20
|
-
my ($self, $command) = @_;
|
|
25
|
+
my ( $self, $command ) = @_;
|
|
21
26
|
try {
|
|
22
27
|
my $current_payload_ref = $command->{payload};
|
|
23
|
-
my @cur_payload
|
|
24
|
-
my $parameters_length
|
|
25
|
-
|
|
28
|
+
my @cur_payload = @$current_payload_ref;
|
|
29
|
+
my $parameters_length = @cur_payload;
|
|
30
|
+
|
|
31
|
+
if ( $parameters_length != $self->{required_parameters_count} ) {
|
|
26
32
|
die Exception->new("Exception: LoadLibrary parameters mismatch");
|
|
27
33
|
}
|
|
34
|
+
|
|
28
35
|
my $path_to_file = $command->{payload}[0];
|
|
29
|
-
my $path_to_file_dir = dirname($path_to_file);
|
|
30
|
-
my $file_name = basename($path_to_file);
|
|
31
36
|
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
if ( !defined $path_to_file || $path_to_file eq '' ) {
|
|
38
|
+
die Exception->new(
|
|
39
|
+
"Cannot load module: Library path is required but was not provided"
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
# ---------------------------------------------------------------------
|
|
44
|
+
# Normalize file extension
|
|
45
|
+
# If no extension is given, try "<file>.pm"
|
|
46
|
+
# ---------------------------------------------------------------------
|
|
47
|
+
my $normalized_path = $path_to_file;
|
|
48
|
+
|
|
49
|
+
if ( $normalized_path !~ /\.[^\/\\]+$/ ) { # no extension
|
|
50
|
+
my $with_pm = $normalized_path . '.pm';
|
|
51
|
+
if ( -e $with_pm ) {
|
|
52
|
+
$normalized_path = $with_pm;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
# Resolve to absolute path if possible
|
|
57
|
+
my $absolute_path =
|
|
58
|
+
abs_path($normalized_path)
|
|
59
|
+
// abs_path($path_to_file)
|
|
60
|
+
// $normalized_path;
|
|
61
|
+
|
|
62
|
+
# Check that the file exists
|
|
63
|
+
if ( !-e $absolute_path ) {
|
|
64
|
+
die Exception->new("Cannot load module: Library not found: $path_to_file");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
# ---------------------------------------------------------------------
|
|
68
|
+
# Load only once by absolute path
|
|
69
|
+
# ---------------------------------------------------------------------
|
|
70
|
+
if ( $LOADED_LIBRARIES{$absolute_path} ) {
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
my $path_to_file_dir = dirname($absolute_path);
|
|
75
|
+
my $file_name = basename($absolute_path);
|
|
76
|
+
|
|
77
|
+
# Ensure directory is in @INC
|
|
78
|
+
if ( !grep { $_ eq $path_to_file_dir } @INC ) {
|
|
79
|
+
push @INC, $path_to_file_dir;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
# ---------------------------------------------------------------------
|
|
83
|
+
# Validate Perl module syntax before requiring
|
|
84
|
+
# ---------------------------------------------------------------------
|
|
85
|
+
#_validate_perl_syntax($absolute_path); #causes issues
|
|
86
|
+
|
|
87
|
+
# ---------------------------------------------------------------------
|
|
88
|
+
# Load the file
|
|
89
|
+
# ---------------------------------------------------------------------
|
|
90
|
+
eval {
|
|
91
|
+
require $file_name;
|
|
92
|
+
1;
|
|
93
|
+
} or do {
|
|
94
|
+
my $err = $@ || 'Unknown error';
|
|
95
|
+
die Exception->new("Cannot load module: $absolute_path\n$err");
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
# Mark library as loaded
|
|
99
|
+
$LOADED_LIBRARIES{$absolute_path} = 1;
|
|
100
|
+
|
|
34
101
|
return 0;
|
|
35
102
|
}
|
|
36
|
-
catch (
|
|
103
|
+
catch ($e) {
|
|
37
104
|
return Exception->new($e);
|
|
38
105
|
}
|
|
39
106
|
}
|
|
40
107
|
|
|
108
|
+
sub get_loaded_libraries {
|
|
109
|
+
my ($self) = @_;
|
|
110
|
+
return [ keys %LOADED_LIBRARIES ];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
# -------------------------------------------------------------------------
|
|
114
|
+
# Validate syntax using "perl -c <file>"
|
|
115
|
+
# -------------------------------------------------------------------------
|
|
116
|
+
sub _validate_perl_syntax {
|
|
117
|
+
my ($absolute_path) = @_;
|
|
118
|
+
|
|
119
|
+
my $perl = $^X || 'perl';
|
|
120
|
+
|
|
121
|
+
my $pid = open my $fh, '-|', $perl, '-c', $absolute_path;
|
|
122
|
+
if ( !defined $pid ) {
|
|
123
|
+
# If perl cannot be spawned, we silently skip validation.
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
my $output = do { local $/; <$fh> // '' };
|
|
128
|
+
close $fh;
|
|
129
|
+
my $exit_code = $? >> 8;
|
|
130
|
+
|
|
131
|
+
if ( $exit_code != 0 ) {
|
|
132
|
+
die Exception->new(
|
|
133
|
+
"Cannot load module: syntax check failed for $absolute_path\n$output"
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
41
138
|
no Moose;
|
|
42
139
|
1;
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
=head2
|
|
1
|
+
=head2 Tue Nov 25 20:56:11 2025: C<Module> L<Test::Fatal|Test::Fatal>
|
|
2
2
|
|
|
3
3
|
=over 4
|
|
4
4
|
|
|
@@ -12,7 +12,7 @@ C<LINKTYPE: dynamic>
|
|
|
12
12
|
|
|
13
13
|
=item *
|
|
14
14
|
|
|
15
|
-
C<VERSION: 0.
|
|
15
|
+
C<VERSION: 0.018>
|
|
16
16
|
|
|
17
17
|
=item *
|
|
18
18
|
|
|
@@ -20,7 +20,7 @@ C<EXE_FILES: >
|
|
|
20
20
|
|
|
21
21
|
=back
|
|
22
22
|
|
|
23
|
-
=head2
|
|
23
|
+
=head2 Tue Nov 25 20:56:18 2025: C<Module> L<autobox|autobox>
|
|
24
24
|
|
|
25
25
|
=over 4
|
|
26
26
|
|
|
@@ -34,7 +34,7 @@ C<LINKTYPE: dynamic>
|
|
|
34
34
|
|
|
35
35
|
=item *
|
|
36
36
|
|
|
37
|
-
C<VERSION: 0.
|
|
37
|
+
C<VERSION: v3.0.2>
|
|
38
38
|
|
|
39
39
|
=item *
|
|
40
40
|
|
|
@@ -42,7 +42,7 @@ C<EXE_FILES: >
|
|
|
42
42
|
|
|
43
43
|
=back
|
|
44
44
|
|
|
45
|
-
=head2
|
|
45
|
+
=head2 Tue Nov 25 20:56:22 2025: C<Module> L<Scalar::Util::Numeric|Scalar::Util::Numeric>
|
|
46
46
|
|
|
47
47
|
=over 4
|
|
48
48
|
|
|
@@ -56,7 +56,7 @@ C<LINKTYPE: dynamic>
|
|
|
56
56
|
|
|
57
57
|
=item *
|
|
58
58
|
|
|
59
|
-
C<VERSION: 0.
|
|
59
|
+
C<VERSION: 0.40>
|
|
60
60
|
|
|
61
61
|
=item *
|
|
62
62
|
|
|
@@ -64,7 +64,7 @@ C<EXE_FILES: >
|
|
|
64
64
|
|
|
65
65
|
=back
|
|
66
66
|
|
|
67
|
-
=head2
|
|
67
|
+
=head2 Tue Nov 25 20:56:25 2025: C<Module> L<Data::Cmp|Data::Cmp>
|
|
68
68
|
|
|
69
69
|
=over 4
|
|
70
70
|
|
|
@@ -78,7 +78,7 @@ C<LINKTYPE: dynamic>
|
|
|
78
78
|
|
|
79
79
|
=item *
|
|
80
80
|
|
|
81
|
-
C<VERSION:
|
|
81
|
+
C<VERSION: 0.010>
|
|
82
82
|
|
|
83
83
|
=item *
|
|
84
84
|
|
|
@@ -86,7 +86,7 @@ C<EXE_FILES: >
|
|
|
86
86
|
|
|
87
87
|
=back
|
|
88
88
|
|
|
89
|
-
=head2
|
|
89
|
+
=head2 Tue Nov 25 20:56:35 2025: C<Module> L<YAML::PP|YAML::PP>
|
|
90
90
|
|
|
91
91
|
=over 4
|
|
92
92
|
|
|
@@ -100,15 +100,15 @@ C<LINKTYPE: dynamic>
|
|
|
100
100
|
|
|
101
101
|
=item *
|
|
102
102
|
|
|
103
|
-
C<VERSION:
|
|
103
|
+
C<VERSION: v0.39.0>
|
|
104
104
|
|
|
105
105
|
=item *
|
|
106
106
|
|
|
107
|
-
C<EXE_FILES: >
|
|
107
|
+
C<EXE_FILES: bin/yamlpp-events bin/yamlpp-highlight bin/yamlpp-load bin/yamlpp-load-dump bin/yamlpp-parse-emit>
|
|
108
108
|
|
|
109
109
|
=back
|
|
110
110
|
|
|
111
|
-
=head2
|
|
111
|
+
=head2 Tue Nov 25 20:56:37 2025: C<Module> L<Safe::Isa|Safe::Isa>
|
|
112
112
|
|
|
113
113
|
=over 4
|
|
114
114
|
|
|
@@ -122,15 +122,15 @@ C<LINKTYPE: dynamic>
|
|
|
122
122
|
|
|
123
123
|
=item *
|
|
124
124
|
|
|
125
|
-
C<VERSION:
|
|
125
|
+
C<VERSION: 1.000010>
|
|
126
126
|
|
|
127
127
|
=item *
|
|
128
128
|
|
|
129
|
-
C<EXE_FILES:
|
|
129
|
+
C<EXE_FILES: >
|
|
130
130
|
|
|
131
131
|
=back
|
|
132
132
|
|
|
133
|
-
=head2
|
|
133
|
+
=head2 Tue Nov 25 20:56:40 2025: C<Module> L<PPI|PPI>
|
|
134
134
|
|
|
135
135
|
=over 4
|
|
136
136
|
|
|
@@ -152,7 +152,7 @@ C<EXE_FILES: >
|
|
|
152
152
|
|
|
153
153
|
=back
|
|
154
154
|
|
|
155
|
-
=head2
|
|
155
|
+
=head2 Tue Nov 25 20:56:44 2025: C<Module> L<PPI::XS|PPI::XS>
|
|
156
156
|
|
|
157
157
|
=over 4
|
|
158
158
|
|
|
@@ -174,7 +174,7 @@ C<EXE_FILES: >
|
|
|
174
174
|
|
|
175
175
|
=back
|
|
176
176
|
|
|
177
|
-
=head2
|
|
177
|
+
=head2 Tue Nov 25 20:56:49 2025: C<Module> L<Want|Want>
|
|
178
178
|
|
|
179
179
|
=over 4
|
|
180
180
|
|
|
@@ -196,7 +196,7 @@ C<EXE_FILES: >
|
|
|
196
196
|
|
|
197
197
|
=back
|
|
198
198
|
|
|
199
|
-
=head2
|
|
199
|
+
=head2 Tue Nov 25 20:56:51 2025: C<Module> L<Nice::Try|Nice::Try>
|
|
200
200
|
|
|
201
201
|
=over 4
|
|
202
202
|
|
|
@@ -218,7 +218,7 @@ C<EXE_FILES: >
|
|
|
218
218
|
|
|
219
219
|
=back
|
|
220
220
|
|
|
221
|
-
=head2
|
|
221
|
+
=head2 Tue Nov 25 20:56:55 2025: C<Module> L<Data::UUID|Data::UUID>
|
|
222
222
|
|
|
223
223
|
=over 4
|
|
224
224
|
|
|
@@ -232,7 +232,7 @@ C<LINKTYPE: dynamic>
|
|
|
232
232
|
|
|
233
233
|
=item *
|
|
234
234
|
|
|
235
|
-
C<VERSION: 1.
|
|
235
|
+
C<VERSION: 1.227>
|
|
236
236
|
|
|
237
237
|
=item *
|
|
238
238
|
|
|
@@ -240,7 +240,7 @@ C<EXE_FILES: >
|
|
|
240
240
|
|
|
241
241
|
=back
|
|
242
242
|
|
|
243
|
-
=head2
|
|
243
|
+
=head2 Tue Nov 25 20:56:58 2025: C<Module> L<Attribute::Util|Attribute::Util>
|
|
244
244
|
|
|
245
245
|
=over 4
|
|
246
246
|
|
|
@@ -254,7 +254,7 @@ C<LINKTYPE: dynamic>
|
|
|
254
254
|
|
|
255
255
|
=item *
|
|
256
256
|
|
|
257
|
-
C<VERSION: 1.
|
|
257
|
+
C<VERSION: 1.07>
|
|
258
258
|
|
|
259
259
|
=item *
|
|
260
260
|
|
|
@@ -4,39 +4,136 @@ use warnings FATAL => 'all';
|
|
|
4
4
|
use lib 'lib';
|
|
5
5
|
use Moose;
|
|
6
6
|
use File::Basename;
|
|
7
|
+
use Cwd qw(abs_path);
|
|
7
8
|
use Nice::Try;
|
|
8
9
|
use aliased 'Javonet::Core::Exception::Exception' => 'Exception';
|
|
9
10
|
extends 'Javonet::Core::Handler::CommandHandler::AbstractCommandHandler';
|
|
10
11
|
|
|
12
|
+
# Track loaded libraries by absolute path
|
|
13
|
+
our %LOADED_LIBRARIES;
|
|
14
|
+
|
|
11
15
|
sub new {
|
|
12
16
|
my $class = shift;
|
|
13
|
-
my $self
|
|
14
|
-
required_parameters_count => 1
|
|
17
|
+
my $self = {
|
|
18
|
+
required_parameters_count => 1,
|
|
19
|
+
@_, # optional extras
|
|
15
20
|
};
|
|
16
21
|
return bless $self, $class;
|
|
17
22
|
}
|
|
18
23
|
|
|
19
24
|
sub process {
|
|
20
|
-
my ($self, $command) = @_;
|
|
25
|
+
my ( $self, $command ) = @_;
|
|
21
26
|
try {
|
|
22
27
|
my $current_payload_ref = $command->{payload};
|
|
23
|
-
my @cur_payload
|
|
24
|
-
my $parameters_length
|
|
25
|
-
|
|
28
|
+
my @cur_payload = @$current_payload_ref;
|
|
29
|
+
my $parameters_length = @cur_payload;
|
|
30
|
+
|
|
31
|
+
if ( $parameters_length != $self->{required_parameters_count} ) {
|
|
26
32
|
die Exception->new("Exception: LoadLibrary parameters mismatch");
|
|
27
33
|
}
|
|
34
|
+
|
|
28
35
|
my $path_to_file = $command->{payload}[0];
|
|
29
|
-
my $path_to_file_dir = dirname($path_to_file);
|
|
30
|
-
my $file_name = basename($path_to_file);
|
|
31
36
|
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
if ( !defined $path_to_file || $path_to_file eq '' ) {
|
|
38
|
+
die Exception->new(
|
|
39
|
+
"Cannot load module: Library path is required but was not provided"
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
# ---------------------------------------------------------------------
|
|
44
|
+
# Normalize file extension
|
|
45
|
+
# If no extension is given, try "<file>.pm"
|
|
46
|
+
# ---------------------------------------------------------------------
|
|
47
|
+
my $normalized_path = $path_to_file;
|
|
48
|
+
|
|
49
|
+
if ( $normalized_path !~ /\.[^\/\\]+$/ ) { # no extension
|
|
50
|
+
my $with_pm = $normalized_path . '.pm';
|
|
51
|
+
if ( -e $with_pm ) {
|
|
52
|
+
$normalized_path = $with_pm;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
# Resolve to absolute path if possible
|
|
57
|
+
my $absolute_path =
|
|
58
|
+
abs_path($normalized_path)
|
|
59
|
+
// abs_path($path_to_file)
|
|
60
|
+
// $normalized_path;
|
|
61
|
+
|
|
62
|
+
# Check that the file exists
|
|
63
|
+
if ( !-e $absolute_path ) {
|
|
64
|
+
die Exception->new("Cannot load module: Library not found: $path_to_file");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
# ---------------------------------------------------------------------
|
|
68
|
+
# Load only once by absolute path
|
|
69
|
+
# ---------------------------------------------------------------------
|
|
70
|
+
if ( $LOADED_LIBRARIES{$absolute_path} ) {
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
my $path_to_file_dir = dirname($absolute_path);
|
|
75
|
+
my $file_name = basename($absolute_path);
|
|
76
|
+
|
|
77
|
+
# Ensure directory is in @INC
|
|
78
|
+
if ( !grep { $_ eq $path_to_file_dir } @INC ) {
|
|
79
|
+
push @INC, $path_to_file_dir;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
# ---------------------------------------------------------------------
|
|
83
|
+
# Validate Perl module syntax before requiring
|
|
84
|
+
# ---------------------------------------------------------------------
|
|
85
|
+
#_validate_perl_syntax($absolute_path); #causes issues
|
|
86
|
+
|
|
87
|
+
# ---------------------------------------------------------------------
|
|
88
|
+
# Load the file
|
|
89
|
+
# ---------------------------------------------------------------------
|
|
90
|
+
eval {
|
|
91
|
+
require $file_name;
|
|
92
|
+
1;
|
|
93
|
+
} or do {
|
|
94
|
+
my $err = $@ || 'Unknown error';
|
|
95
|
+
die Exception->new("Cannot load module: $absolute_path\n$err");
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
# Mark library as loaded
|
|
99
|
+
$LOADED_LIBRARIES{$absolute_path} = 1;
|
|
100
|
+
|
|
34
101
|
return 0;
|
|
35
102
|
}
|
|
36
|
-
catch (
|
|
103
|
+
catch ($e) {
|
|
37
104
|
return Exception->new($e);
|
|
38
105
|
}
|
|
39
106
|
}
|
|
40
107
|
|
|
108
|
+
sub get_loaded_libraries {
|
|
109
|
+
my ($self) = @_;
|
|
110
|
+
return [ keys %LOADED_LIBRARIES ];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
# -------------------------------------------------------------------------
|
|
114
|
+
# Validate syntax using "perl -c <file>"
|
|
115
|
+
# -------------------------------------------------------------------------
|
|
116
|
+
sub _validate_perl_syntax {
|
|
117
|
+
my ($absolute_path) = @_;
|
|
118
|
+
|
|
119
|
+
my $perl = $^X || 'perl';
|
|
120
|
+
|
|
121
|
+
my $pid = open my $fh, '-|', $perl, '-c', $absolute_path;
|
|
122
|
+
if ( !defined $pid ) {
|
|
123
|
+
# If perl cannot be spawned, we silently skip validation.
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
my $output = do { local $/; <$fh> // '' };
|
|
128
|
+
close $fh;
|
|
129
|
+
my $exit_code = $? >> 8;
|
|
130
|
+
|
|
131
|
+
if ( $exit_code != 0 ) {
|
|
132
|
+
die Exception->new(
|
|
133
|
+
"Cannot load module: syntax check failed for $absolute_path\n$output"
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
41
138
|
no Moose;
|
|
42
139
|
1;
|
|
@@ -27,29 +27,38 @@ final class LoadLibraryHandler extends AbstractHandler
|
|
|
27
27
|
{
|
|
28
28
|
if ($command->getPayloadSize() < self::REQUIRED_ARGUMENTS_COUNT) {
|
|
29
29
|
throw new JavonetArgumentsMismatchException(
|
|
30
|
-
|
|
30
|
+
self::class,
|
|
31
31
|
self::REQUIRED_ARGUMENTS_COUNT
|
|
32
32
|
);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
$assemblyName = (string) $command->getPayload()[0];
|
|
36
|
+
|
|
36
37
|
if (!file_exists($assemblyName)) {
|
|
37
38
|
throw new Exception('File not found: ' . $assemblyName);
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
// Normalize path first
|
|
42
|
+
$canonicalPath = realpath($assemblyName);
|
|
43
|
+
if ($canonicalPath === false) {
|
|
44
|
+
throw new Exception('Cannot resolve path: ' . $assemblyName);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Already loaded? bail out early
|
|
48
|
+
if (in_array($canonicalPath, self::$loadedLibraries, true)) {
|
|
41
49
|
return 0;
|
|
42
50
|
}
|
|
43
51
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
// Use canonical path for type detection as well
|
|
53
|
+
if (is_dir($canonicalPath)) {
|
|
54
|
+
$this->loadDirectory($canonicalPath);
|
|
55
|
+
} elseif (pathinfo($canonicalPath, PATHINFO_EXTENSION) === 'phar') {
|
|
56
|
+
$this->loadPharFile($canonicalPath);
|
|
48
57
|
} else {
|
|
49
|
-
$this->loadPhpFile($
|
|
58
|
+
$this->loadPhpFile($canonicalPath);
|
|
50
59
|
}
|
|
51
60
|
|
|
52
|
-
self::$loadedLibraries[] = $
|
|
61
|
+
self::$loadedLibraries[] = $canonicalPath;
|
|
53
62
|
return 0;
|
|
54
63
|
}
|
|
55
64
|
|
|
@@ -79,51 +88,69 @@ final class LoadLibraryHandler extends AbstractHandler
|
|
|
79
88
|
throw new Exception('PHAR file is not readable: ' . $pharPath);
|
|
80
89
|
}
|
|
81
90
|
|
|
91
|
+
$realPath = realpath($pharPath);
|
|
92
|
+
if ($realPath === false) {
|
|
93
|
+
throw new Exception('Cannot resolve PHAR path: ' . $pharPath);
|
|
94
|
+
}
|
|
95
|
+
|
|
82
96
|
try {
|
|
83
|
-
$phar = new Phar($
|
|
97
|
+
$phar = new Phar($realPath);
|
|
84
98
|
|
|
85
99
|
$currentIncludePath = get_include_path();
|
|
86
|
-
if (strpos($currentIncludePath, $
|
|
87
|
-
set_include_path($currentIncludePath . PATH_SEPARATOR . $
|
|
88
|
-
$this->loadedClassPaths[] = $
|
|
100
|
+
if (strpos($currentIncludePath, $realPath) === false) {
|
|
101
|
+
set_include_path($currentIncludePath . PATH_SEPARATOR . $realPath);
|
|
102
|
+
$this->loadedClassPaths[] = $realPath;
|
|
89
103
|
}
|
|
90
104
|
|
|
91
105
|
if (isset($phar['bootstrap.php'])) {
|
|
92
|
-
include_once 'phar://' . $
|
|
106
|
+
include_once 'phar://' . $realPath . '/bootstrap.php';
|
|
93
107
|
}
|
|
94
108
|
} catch (Exception $e) {
|
|
95
109
|
throw new Exception(sprintf('Error loading PHAR file %s : %s', $pharPath, $e->getMessage()));
|
|
96
110
|
}
|
|
97
111
|
}
|
|
98
112
|
|
|
113
|
+
private static array $loadedPhpFiles = []; // optional extra safeguard
|
|
114
|
+
|
|
99
115
|
private function loadPhpFile(string $filePath): void
|
|
100
116
|
{
|
|
101
117
|
if (!is_readable($filePath)) {
|
|
102
118
|
throw new Exception('PHP file is not readable: ' . $filePath);
|
|
103
119
|
}
|
|
104
120
|
|
|
105
|
-
$
|
|
121
|
+
$realPath = realpath($filePath);
|
|
122
|
+
if ($realPath === false) {
|
|
123
|
+
throw new Exception('Cannot resolve PHP file path: ' . $filePath);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
$fileExtension = pathinfo($realPath, PATHINFO_EXTENSION);
|
|
106
127
|
if (!in_array($fileExtension, ['php', 'inc'], true)) {
|
|
107
|
-
throw new Exception('File is not a valid PHP file: ' . $
|
|
128
|
+
throw new Exception('File is not a valid PHP file: ' . $realPath);
|
|
108
129
|
}
|
|
109
130
|
|
|
110
|
-
|
|
131
|
+
// OPTIONAL: skip if we already loaded this exact file
|
|
132
|
+
if (in_array($realPath, self::$loadedPhpFiles, true)) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
$code = file_get_contents($realPath);
|
|
111
137
|
if ($code === false) {
|
|
112
|
-
throw new Exception(sprintf('Failed to read php file: %s', $
|
|
138
|
+
throw new Exception(sprintf('Failed to read php file: %s', $realPath));
|
|
113
139
|
}
|
|
114
140
|
|
|
115
141
|
try {
|
|
116
142
|
token_get_all($code, TOKEN_PARSE);
|
|
117
143
|
} catch (ParseError $e) {
|
|
118
|
-
throw new Exception(sprintf('PHP syntax error in file %s: %s', $
|
|
144
|
+
throw new Exception(sprintf('PHP syntax error in file %s: %s', $realPath, $e->getMessage()));
|
|
119
145
|
}
|
|
120
146
|
|
|
121
147
|
$lastError = error_get_last();
|
|
122
148
|
if ($lastError && $lastError['type'] === E_PARSE) {
|
|
123
|
-
throw new Exception(sprintf('PHP syntax error in file %s: %s', $
|
|
149
|
+
throw new Exception(sprintf('PHP syntax error in file %s: %s', $realPath, $lastError['message']));
|
|
124
150
|
}
|
|
125
151
|
|
|
126
|
-
include_once $
|
|
152
|
+
include_once $realPath;
|
|
153
|
+
self::$loadedPhpFiles[] = $realPath;
|
|
127
154
|
}
|
|
128
155
|
|
|
129
156
|
private function autoloadPhpFilesFromDirectory(string $directory): void
|
|
@@ -134,7 +161,15 @@ final class LoadLibraryHandler extends AbstractHandler
|
|
|
134
161
|
|
|
135
162
|
foreach ($iterator as $file) {
|
|
136
163
|
if ($file->isFile() && $file->getExtension() === 'php') {
|
|
137
|
-
|
|
164
|
+
$realPath = $file->getRealPath() ?: $file->getPathname();
|
|
165
|
+
|
|
166
|
+
// Optional: same guard as loadPhpFile
|
|
167
|
+
if (in_array($realPath, self::$loadedPhpFiles, true)) {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
include_once $realPath;
|
|
172
|
+
self::$loadedPhpFiles[] = $realPath;
|
|
138
173
|
}
|
|
139
174
|
}
|
|
140
175
|
}
|
|
@@ -44,7 +44,7 @@ final class Interpreter
|
|
|
44
44
|
return $responseByteArray;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
$response =
|
|
47
|
+
$response = CommandDeserializer::deserialize($responseByteArray);
|
|
48
48
|
if ($this->debugMode === 'TRUE') {
|
|
49
49
|
echo 'Received command: ' . $response;
|
|
50
50
|
MessageHelper::getInstance()->sendMessageToAppInsights('ReceivedCommand', $response->toString());
|
|
@@ -89,7 +89,7 @@ final class Interpreter
|
|
|
89
89
|
|
|
90
90
|
public function process(array $byteArray): CommandInterface
|
|
91
91
|
{
|
|
92
|
-
$receivedCommand =
|
|
92
|
+
$receivedCommand = CommandDeserializer::deserialize($byteArray);
|
|
93
93
|
if ($this->debugMode === 'TRUE') {
|
|
94
94
|
echo 'Received command: ' . $receivedCommand;
|
|
95
95
|
MessageHelper::getInstance()->sendMessageToAppInsights('ReceivedCommand', $receivedCommand->toString());
|