From 0df8127b9ce4ce90f8570c5d1d98ec8276969aba Mon Sep 17 00:00:00 2001 From: Arno van der Ende Date: Fri, 19 Sep 2025 14:17:16 +0200 Subject: [PATCH] update docker certificates in docker image --- docker/Dockerfile | 7 +++ docker/build-image.bat | 5 ++ docker/build-image.sh | 5 ++ docker/run-tty.bat | 18 ++----- docker/run-tty.sh | 17 +++++-- docker/start-tty.bat | 7 +-- docker/start-tty.sh | 5 +- src/demo.sh | 3 +- src/flusso/demo/demo.p | 13 +++-- src/flusso/http/DotNetHttpClient.cls | 3 +- src/flusso/util/ByteArrayHelper.cls | 72 ++++++++++++++++++++++++++++ src/flusso/util/ErrorHelper.cls | 52 ++++++++++++++++++++ src/util/bytearrayhelper.cls | 72 ---------------------------- 13 files changed, 180 insertions(+), 99 deletions(-) create mode 100644 docker/Dockerfile create mode 100644 docker/build-image.bat create mode 100755 docker/build-image.sh create mode 100644 src/flusso/util/ByteArrayHelper.cls create mode 100644 src/flusso/util/ErrorHelper.cls delete mode 100644 src/util/bytearrayhelper.cls diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..13a5366 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,7 @@ +FROM devbfvio/openedge-compiler:12.8.9-dotnet8 + +USER root + +RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && update-ca-certificates + +USER openedge diff --git a/docker/build-image.bat b/docker/build-image.bat new file mode 100644 index 0000000..d125c9c --- /dev/null +++ b/docker/build-image.bat @@ -0,0 +1,5 @@ +@ECHO OFF + +IMAGE=flusso/http-client-pug-image + +docker build --rm --platform linux/amd64 -t %IMAGE% . diff --git a/docker/build-image.sh b/docker/build-image.sh new file mode 100755 index 0000000..89527ce --- /dev/null +++ b/docker/build-image.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +image=flusso/http-client-pug-image + +docker build --rm --platform linux/amd64 -t ${image} . diff --git a/docker/run-tty.bat b/docker/run-tty.bat index 207646b..5fef65e 100644 --- a/docker/run-tty.bat +++ b/docker/run-tty.bat @@ -1,18 +1,13 @@ @ECHO OFF -set CONTAINER=http-client-container -set IMAGE=devbfvio/openedge-compiler:12.8.9-dotnet8 -echo "Stop container %CONTAINER%cat " +set IMAGE=flusso/http-client-pug-image +set CONTAINER=http-client-pug-container + +echo "Stop container %CONTAINER% ..." docker stop %CONTAINER% -pause -echo "Remove container %CONTAINER%" +echo "Remove container %CONTAINER% ..." docker rm %CONTAINER% -pause - -echo "Remove image %IMAGE%" -docker rmi %IMAGE% -pause echo "Run new container (interactive) ..." docker run -it ^ @@ -24,6 +19,3 @@ docker run -it ^ -v %CD%/../config:/app/config ^ %IMAGE% ^ bash - -pause - diff --git a/docker/run-tty.sh b/docker/run-tty.sh index ce326f9..f8d5561 100755 --- a/docker/run-tty.sh +++ b/docker/run-tty.sh @@ -1,10 +1,21 @@ #!/bin/sh -echo "Run new container (interactive) ..." +image=flusso/http-client-pug-image +container=http-client-pug-container + +echo "Stop container ${container} ..." +docker stop ${container} -docker run -it --name http-client-container \ +echo "Remove container ${container} ..." +docker rm ${container} + +echo "Run new container (interactive) ..." +docker run -it \ + --name ${container} \ --platform linux/amd64 \ -v $(pwd)/../license/progress.cfg:/usr/dlc/progress.cfg \ -v $(pwd)/../src:/app/src \ - devbfvio/openedge-compiler:12.8.9-dotnet8 \ + -v $(pwd)/../assemblies:/app/assemblies \ + -v $(pwd)/../config:/app/config \ + ${image} \ bash diff --git a/docker/start-tty.bat b/docker/start-tty.bat index 2142974..e64e67b 100644 --- a/docker/start-tty.bat +++ b/docker/start-tty.bat @@ -1,4 +1,6 @@ -#!/bin/sh +@ECHO OFF + +set CONTAINER=http-client-pug-container echo "Start container (interactive) ..." @@ -6,5 +8,4 @@ docker ps echo -REM docker run -it -v $(pwd)/../src:/app/src httpclient4oe -docker start -i http-client-container +docker start -i %CONTAINER% diff --git a/docker/start-tty.sh b/docker/start-tty.sh index d813008..4e6b056 100755 --- a/docker/start-tty.sh +++ b/docker/start-tty.sh @@ -1,10 +1,11 @@ #!/bin/sh +container=http-client-pug-container + echo "Start container (interactive) ..." docker ps echo -# docker run -it -v $(pwd)/../src:/app/src httpclient4oe -docker start -i http-client-container +docker start -i ${container} diff --git a/src/demo.sh b/src/demo.sh index 037e963..96a4aba 100755 --- a/src/demo.sh +++ b/src/demo.sh @@ -8,7 +8,8 @@ touch out.log # copy certificates to DLC folder, since -certstorepath can only contain 1 path cp -p certs/* /usr/dlc/certs -mbpro -clrnetcore -assemblies ../assemblies -preloadCLR -q -rr -reusableObjects 500000 -p flusso/demo/demo.p -param "$1,$2" > out.log +# -preloadCLR fails on Linux +mbpro -clrnetcore -assemblies ../assemblies -q -rr -reusableObjects 500000 -p flusso/demo/demo.p -param "$1,$2" > out.log tail -f out.log diff --git a/src/flusso/demo/demo.p b/src/flusso/demo/demo.p index ae1450c..5df0812 100644 --- a/src/flusso/demo/demo.p +++ b/src/flusso/demo/demo.p @@ -15,12 +15,15 @@ using Progress.Lang.AppError. using flusso.demo.DemoRunner. using flusso.factory.Factory. using flusso.factory.IFactory. +using flusso.util.ErrorHelper. var char identifier = entry(1, session:parameter). var int nrRuns. var IFactory factory. var DemoRunner runner. +session:error-stack-trace = true. + if identifier eq "version" or identifier eq "--version" then do: message ".NET version:" System.Environment:Version:ToString(). @@ -34,10 +37,12 @@ nrRuns = int(entry(2, session:parameter)) no-error. runner:Run(nrRuns). catch err as Progress.Lang.Error: - message err:GetMessage(1). - message "Available factory identifiers:". - message "------------------------------". - cast(factory, Factory):ShowAvailableIdentifiers(). + if err:GetMessage(1) begins "no definition found" then do: + message "~nAvailable factory identifiers:". + message "------------------------------". + cast(factory, Factory):ShowAvailableIdentifiers(). + end. + else ErrorHelper:LogError(err). end catch. finally: diff --git a/src/flusso/http/DotNetHttpClient.cls b/src/flusso/http/DotNetHttpClient.cls index e9fa034..23d0064 100644 --- a/src/flusso/http/DotNetHttpClient.cls +++ b/src/flusso/http/DotNetHttpClient.cls @@ -27,6 +27,7 @@ using System.Net.WebHeaderCollection. using System.Net.WebUtility. using System.Runtime.InteropServices.Marshal. using System.Text.Encoding. +using flusso.util.ByteArrayHelper. using flusso.http.HttpRequestOptions. using flusso.http.HttpResponse. using flusso.http.IHttpClient. @@ -79,7 +80,7 @@ class flusso.http.DotNetHttpClient memoryStream = new MemoryStream(). webResponse:GetResponseStream():CopyTo(memoryStream). bytes = memoryStream:ToArray(). - memBody = util.bytearrayhelper:ByteArrayToMemptr(bytes). + memBody = ByteArrayHelper:ByteArrayToMemptr(bytes). return new OpenEdge.Core.Memptr(memBody). finally: diff --git a/src/flusso/util/ByteArrayHelper.cls b/src/flusso/util/ByteArrayHelper.cls new file mode 100644 index 0000000..7b5d02d --- /dev/null +++ b/src/flusso/util/ByteArrayHelper.cls @@ -0,0 +1,72 @@ + + /*------------------------------------------------------------------------ + File : ByteArrayHelper + Purpose : + Syntax : + Description : + Author(s) : rkelters + Created : Wed Jul 30 09:14:04 CEST 2014 + Notes : + ----------------------------------------------------------------------*/ + +using Progress.Lang.*. + +routine-level on error undo, throw. + +class flusso.util.ByteArrayHelper: + method public static "System.Byte[]" MemptrToByteArray( pmptr as memptr ): + define variable nPtr as System.IntPtr no-undo. + define variable vInt as integer no-undo. + define variable nBytes as "System.Byte[]". + + vInt = get-size(pmPtr). + nBytes = new "System.Byte[]"(vInt). + nPtr = new System.IntPtr(get-pointer-value(pmPtr)). + System.Runtime.InteropServices.Marshal:Copy(nPtr, nBytes, 0, vInt). + + return nBytes. + finally: +/* nPtr = ?.*/ + delete object nPtr. + SET-SIZE(pmPtr) = 0. + nBytes = ?. + end. + + end method. + + method public static memptr ByteArrayToMemptr( nBytes as "System.Byte[]" ): + define variable nPtr as System.IntPtr no-undo. + define variable mPtr as memptr no-undo. + + set-size(mPtr) = nBytes:LENGTH. + nPtr = new System.IntPtr(get-pointer-value(mPtr)). + System.Runtime.InteropServices.Marshal:Copy(nBytes, 0, nPtr, nBytes:LENGTH). + return mPtr. + finally: +/* nPtr = ?.*/ + delete object nPtr. + nBytes = ?. + SET-SIZE(mPtr) = 0. + end. + end method. + + method public static longchar ByteArrayToLongChar( input data as "System.Byte[]" ): + define variable result as longchar no-undo. + define variable memStream as "System.IO.MemoryStream" no-undo. + define variable streamReader as "System.IO.StreamReader" no-undo. + + if valid-object(data) + then do: + memStream = new System.IO.MemoryStream(data). + memStream:Position = 0. + streamReader = new System.IO.StreamReader(memStream). + result = streamReader:ReadToEnd () . + delete object memStream. + delete object streamReader. + end. + + return result. + + end method. + +end class. \ No newline at end of file diff --git a/src/flusso/util/ErrorHelper.cls b/src/flusso/util/ErrorHelper.cls new file mode 100644 index 0000000..031ffe4 --- /dev/null +++ b/src/flusso/util/ErrorHelper.cls @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------ + File : ErrorHelper + Purpose : + Syntax : + Description : + Author(s) : arno + Created : Fri Sep 05 19:56:53 CEST 2025 + Notes : Copyright 2025 Flusso B.V. + Developed under MIT License, see LICENSE file +----------------------------------------------------------------------*/ + +block-level on error undo, throw. + +using System.Exception. + +class flusso.util.ErrorHelper: + + /*------------------------------------------------------------------------------ + Purpose: + Notes: + ------------------------------------------------------------------------------*/ + method public static void LogError (err as Progress.Lang.Error): + + var int i. + var Exception inner. + + //do i = 1 to err:NumMessages: + // message substitute("** [&1] &2", i, err:GetMessage(i)). + //end. + message substitute("--> Error(s) (&1)", err:NumMessages). + message substitute("** &1", err:GetMessage(1)). + if err:CallStack gt "" then + message err:CallStack. + + if type-of(err, Exception) then do: + inner = cast(err, Exception):InnerException. + do while valid-object(inner): + message substitute("~n--> Caused by (&1):", inner:NumMessages). + //do i = 1 to inner:NumMessages: + // message substitute("** [&1] &2", i, inner:GetMessage(i)). + //end. + message substitute("** &1", inner:GetMessage(1)). + if inner:CallStack gt "" then + message inner:CallStack. + + inner = inner:InnerException. + end. // do while + end. + + end method. + +end class. diff --git a/src/util/bytearrayhelper.cls b/src/util/bytearrayhelper.cls deleted file mode 100644 index c4117f8..0000000 --- a/src/util/bytearrayhelper.cls +++ /dev/null @@ -1,72 +0,0 @@ - - /*------------------------------------------------------------------------ - File : bytearrayhelper - Purpose : - Syntax : - Description : - Author(s) : rkelters - Created : Wed Jul 30 09:14:04 CEST 2014 - Notes : - ----------------------------------------------------------------------*/ - -USING Progress.Lang.*. - -ROUTINE-LEVEL ON ERROR UNDO, THROW. - -CLASS util.bytearrayhelper: - METHOD PUBLIC STATIC "System.Byte[]" MemptrToByteArray( pmptr AS MEMPTR ): - DEFINE VARIABLE nPtr AS System.IntPtr NO-UNDO. - DEFINE VARIABLE vInt AS INTEGER NO-UNDO. - DEFINE VARIABLE nBytes AS "System.Byte[]". - - vInt = GET-SIZE(pmPtr). - nBytes = NEW "System.Byte[]"(vInt). - nPtr = NEW System.IntPtr(GET-POINTER-VALUE(pmPtr)). - System.Runtime.InteropServices.Marshal:Copy(nPtr, nBytes, 0, vInt). - - RETURN nBytes. - FINALLY: -/* nPtr = ?.*/ - DELETE OBJECT nPtr. - SET-SIZE(pmPtr) = 0. - nBytes = ?. - END. - - END METHOD. - - METHOD PUBLIC STATIC MEMPTR ByteArrayToMemptr( nBytes AS "System.Byte[]" ): - DEFINE VARIABLE nPtr AS System.IntPtr NO-UNDO. - DEFINE VARIABLE mPtr AS MEMPTR NO-UNDO. - - set-size(mPtr) = nBytes:LENGTH. - nPtr = NEW System.IntPtr(GET-POINTER-VALUE(mPtr)). - System.Runtime.InteropServices.Marshal:Copy(nBytes, 0, nPtr, nBytes:LENGTH). - RETURN mPtr. - FINALLY: -/* nPtr = ?.*/ - DELETE OBJECT nPtr. - nBytes = ?. - SET-SIZE(mPtr) = 0. - END. - END METHOD. - - METHOD PUBLIC STATIC LONGCHAR ByteArrayToLongChar( INPUT data AS "System.Byte[]" ): - DEFINE VARIABLE result AS LONGCHAR NO-UNDO. - DEFINE VARIABLE memStream AS "System.IO.MemoryStream" NO-UNDO. - DEFINE VARIABLE streamReader AS "System.IO.StreamReader" NO-UNDO. - - IF VALID-OBJECT(data) - THEN DO: - memStream = NEW System.IO.MemoryStream(data). - memStream:Position = 0. - streamReader = NEW System.IO.StreamReader(memStream). - result = streamReader:ReadToEnd () . - DELETE OBJECT memStream. - DELETE OBJECT streamReader. - END. - - RETURN result. - - END METHOD. - -END CLASS. \ No newline at end of file