function rti_decompress_string(inString, status) *#!Precompile /* * This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without * written permission from Revelation Technologies, Inc. ! * No warranties, express or implied, are conveyed by the use of this routine ! * VERSION : 1.0 * * * AUTHOR : Bryan Shumsky * * CREATED : February 16, 2022 * * ! * * REVISION HISTORY (Most CURRENT first) : * * DATE IMPLEMENTOR FUNCTION * -------- ----------- -------- * */ $Insert RevDotNetEquates If Assigned(inString) Else inString = "" Status = 0 rslt = "" If inString = "" Then Status = "-2" Return rslt End dotNetHandle = "" dotNetVersion = "4.0" oNet = StartDotNet("", dotNetVersion, dotNetHandle) if Get_Status(errcode) Then Goto returnErr End netLocn = CheckDotNet(dotNetVersion) If netLocn <> "0" And netLocn <> "" Then If netLocn[-1,1] <> "\" Then netLocn := "\" End Else netLocn = "" oiLocn = drive() If oiLocn[-1,1] <> "\" Then oiLocn := "\" x = set_property.net(oNet, "AssemblyName", netLocn:"System.dll":@fm:netLocn:"mscorlib.dll", dotNetHandle) If Get_Status(errcode) Then Goto returnErr * step 1: convert from base64 string to an array of bytes oConverter = create_class.net(oNet, "System.Convert", 0, "", "", dotNetHandle) If Get_Status(errcode) Then Goto returnErr oBytes = send_message.net(oConverter, "FromBase64String", inString, "", 1, dotNetHandle) If Get_Status(errcode) Then Goto returnErr * step 2: make a "memory stream" from that byte array oInputStream = create_class.net(oNet, "System.IO.MemoryStream", 0, oBytes, "", dotNetHandle) If Get_Status(errcode) Then Goto returnErr * step 3: use gzipstream to decompress the incoming memory stream to an outgoing memory stream oOutputStream = create_class.net(oNet, "System.IO.MemoryStream", 0, "", "", dotNetHandle) If Get_Status(errcode) Then Goto returnErr oCompressor = create_class.net(oNet, "System.IO.Compression.GZipStream", 0, oInputStream:@FM:"0":@FM:"True", "":@FM:"System.IO.Compression.CompressionMode":@FM:"System.Boolean", dotNetHandle) If Get_Status(errcode) Then Goto returnErr dummy = send_message.net(oCompressor, "CopyTo", oOutputStream, "", 0, dotNetHandle) If Get_Status(errcode) Then Goto returnErr * note: must close the gzipstream to "flush" the contents dummy = send_message.net(oCompressor, "Close", "", "", 0, dotNetHandle) If Get_Status(errcode) Then Goto returnErr * step 4: turn the outgoing memory stream into an array of bytes oDecompressed = send_message.net(oOutputStream, "ToArray", "", "", 1, dotNetHandle) If Get_Status(errcode) Then Goto returnErr * note: must close the streams dummy = send_message.net(oOutputStream, "Close", "", "", 0, dotNetHandle) dummy = send_message.net(oInputStream, "Close", "", "", 0, dotNetHandle) * step 5: turn the array of bytes into a UTF8 string oEncoding = create_class.net(oNet, "System.Text.UTF8Encoding", 0, "", "", dotNetHandle) If Get_Status(errcode) Then Goto returnErr rslt = send_message.net(oEncoding, "GetString", oDecompressed, "", 0, dotNetHandle) If Get_Status(errcode) Then Goto returnErr Goto wrapup returnErr: * error handling here * Do something With errcode Status = "-1" wrapup: free_class.net("", dotNetHandle) Return rslt