sgcWebSockets 2026.10.0 Latest
- 2026.10.0: 2026 October
- NewTsgcOpenAPI_Client: new property UserAgent to set the User-Agent header sent with every request, set it to an empty string to omit the header.
- NewNew OnBeforeHeartBeat event on the WinHTTP WebSocket client, so the application can send its own keep-alive message every HeartBeat interval.
- NewWebSocket client: when the server refuses the connection (for example 401 Unauthorized because the access token has expired), the body of the server answer is now available in the OnException event with TsgcWSConnectionClient(Connection).HandshakeResponseBody, so the application can see why it was refused.
- NewNew QueueOptions.DrainedMode property, to choose when the OnQueueDrained event is raised. qdmTransition (default) keeps the current behaviour: the event is raised when the outgoing queue of a connection becomes empty. qdmEveryPass raises it on every pass of the connection loop, on the connection's own thread, even when no queue level is enabled, so the application can send its own pending data from that thread. It applies to the WebSocket client, server and HTTP server with the default IOHandler.
- NewAI Chat images: ChatWithImage sends an image to the AI, the new OnChatImage event is raised when the AI answers with an image, and the new ImageOutput option lets Gemini answer with images and keep editing them message after message. The OpenAI image edit request now supports the gpt-image-1 options and several input images.
- NewAI Chat can ask the AI to answer with JSON that follows a schema you provide, on OpenAI, Anthropic, Gemini, DeepSeek, Ollama, Grok and Mistral. The new ChatJSON method asks again when an answer cannot be read.
- NewNew TsgcAIDocumentExtractor component: give it a PDF or an image and a JSON schema, and get validated JSON back from OpenAI, Anthropic, Gemini and the other vision models. Built in presets for invoices, receipts and identity documents, a confidence value for every field, one automatic retry when the answer does not follow the schema, and an optional local OCR with the new TsgcAIOCRTesseract component, used always or only when the vision request fails.
- NewAI Chat accepts PDF documents and several files in one message: new ChatWithDocument, ChatWithAttachments and ChatJSONWithAttachments methods. PDF files are sent to OpenAI, Anthropic and Gemini as they are.
- NewAI Chat: new TLSOptions property to choose the OpenSSL version and the TLS options used by the provider requests.
- NewNew TsgcAIOCRWindows component: local OCR with the text recognition built into Windows 10 and later, no installation needed. The document extractor can use it or Tesseract.
- NewMCP server and client now support the MCP 2026-07-28 specification. The same server answers both the new stateless clients and the existing 2025-11-25 clients such as VS Code and Claude, so nothing changes for the clients you already have. New in 2026-07-28: server/discover, the protocol version and client details sent with every request, the Mcp-Method and Mcp-Name request headers (checked by the server), cache hints on list results and the new error codes. New MCPOptions.Cache, Instructions and Extensions options on the server.
- NewMCP subscriptions/listen: a client can open one long lived stream to receive tools, prompts and resources list changes and resource updates. The existing Send notification methods reach these clients too, the stream is closed cleanly when the server stops, and the new ListenersCount and NotifySubscriptions members are available on the server component (MCPOptions.Subscriptions, enabled by default).
- NewMCP multi round trip requests: a tool, prompt or resource can now ask the client for input (a form, a web page, an AI answer or the client roots) and continue when the client calls again with the answers. The state kept between calls is signed and expires (MCPOptions.MRTR, 600 seconds by default). On the client, the new OnMCPInputRequired event answers these requests, and the existing roots, sampling and elicitation handlers answer them automatically.
- NewMCP Tasks extension: a long running tool can return a task that the client checks until it finishes, can answer when the task needs input, and can cancel (MCPOptions.Tasks on the server, off by default; CreateTask and the OnMCPTaskCancel and OnMCPTaskUpdate events). The client declares support with MCPOptions.Tasks.Enabled and follows the task automatically, raising OnMCPTaskCreated, OnMCPTaskStatus and OnMCPTaskCompleted.
- NewMCP client: new MCPOptions.ProtocolEra (Auto by default). Auto tries the 2026-07-28 protocol first and falls back to 2025-11-25 when the server does not support it, remembering the answer per server. New Discover method, OnMCPDiscover and OnMCPListChanged events, and tool parameters marked with x-mcp-header are sent as request headers.
- NewMCP client authorization (MCPOptions.Authorization, off by default): on a 401 the client finds the authorization server by itself, registers with a client id metadata document or dynamic registration, signs in with PKCE, checks the issuer of the answer and keeps the credentials per authorization server, refreshing the token when it expires. New OnMCPAuthorizationURL and OnMCPAuthorizationCredentials events. The built-in authorization server of the MCP server now sends and advertises the issuer, and checks client registrations more strictly.
- NewNew TsgcAIVoiceAgent: a realtime voice agent that listens, detects turns, talks back and calls tools, over OpenAI Realtime or Gemini Live, on WebSocket or WebRTC. Built in audio on Windows, Android and iOS, a G.711 path for telephony, server, semantic or client voice activity detection, barge-in, live transcripts, and tools from the OnToolCall event or from an MCP client.
- NewNew TsgcHTMLAuth component and session stores for sgcHTML applications: session cookie, login and logout, idle session close and failed login limit. sgcHTML pages are also protected against cross site request forgery when the authentication component is used.
- NewsgcHTML routes accept path parameters, for example /customers/{id}/edit, can be limited to the HTTP methods you choose, and read the headers, cookies and body of the request. New DispatchDirect method and a new unit to test sgcHTML pages without a socket.
- NewsgcHTML realtime and navigation: server sent events can now carry the updates instead of WebSocket, with automatic fallback and replay of the updates missed while disconnected, also on the plain HTTP server. New navigation options in the page template change pages without a full reload, keeping the scroll position and what the user was typing.
- NewNew AI Data Pack for sgcHTML. Ask a grid, a data table or a pivot a question in plain language and it filters, sorts, groups, limits or highlights the rows, fills a form from pasted text and suggests values for a column. It works with no API key, does not send your rows to the AI provider unless you allow it, and every suggestion is checked against your own columns and accepted by a person. Includes the new TsgcHTMLComponent_InlineAIPrompt component and the demo 18.AIData.
- NewNew Web Push for sgcHTML applications, to reach a user whose browser is closed (Enterprise and All-Access editions only). New notification inbox and notification preferences components on every edition, over WebSocket or server sent events. The notification component delivers in the page when the user is looking at it and as a web push when not.
- NewNew AI page generator in the visual designer. Describe the page in plain language, or point it at a screenshot, a mockup or a photo of a sketch, and it builds the page out of your own components and applies it only when you accept. The settings are under Tools, Options, Third Party. The design surface now reads and writes the page as JSON.
- NewNew MCP Apps support: an sgcHTML page can be shown inside Claude, ChatGPT and VS Code. The MCP server behind TsgcWSAPIServer_MCP is reachable as MCPServer, so MCP Apps can be published over HTTP and WebSocket, and the new InlineAssets option writes the stylesheet and the script inside the document. New demo 19.MCPApp.
- NewNew TsgcHTMLComponent_Geolocation component for sgcHTML: reads the GPS position of the browser once or continuously and sends latitude, longitude, accuracy, altitude, heading and speed to the server, by form post, WebSocket or redirect. It can show a locate button with the current position or work hidden in the page.
- NewsgcHTML Lazarus demos: the run time demos are now available for Lazarus and Free Pascal, each one as a console server and an optional desktop window. The Lazarus package now includes the sgcHTML CRUD and MCP Apps units.
- NewNew CRUD component for sgcHTML: the list with search and paging, the form, the delete and the code that writes in one component, over a dataset or your own SQL, with a version field against overwrites, child lists and CSV export. New IDE wizard Tools, New sgcHTML CRUD page, the new sgcHTMLGen command line tool that writes a CRUD page in Object Pascal or C#, and the new MessageSession method on the HTMX engine to check a form sent over the socket against the session behind it.
- NewsgcHTML CameraScanner: new RedirectURL property, after a scan the browser opens that page with the scanned code, for example a search page (empty by default).
- NewsgcHTML CameraScanner: new PolyfillURL property, loads a barcode decoder on browsers that have none built in, like every browser on iPhone and iPad (empty by default).
- NewsgcHTML Pagination: new HTMXGet, HTMXTarget and HTMXInclude properties, the page links load the next page with htmx (hx-get with page=N) and keep the normal link for browsers without JavaScript (empty by default, the output is unchanged).
- NewsgcHTML AutoComplete: new acHTTP mode and SearchURL property, the suggestions are requested over plain HTTP with htmx while the user types, with the same debounce and minimum length, and the server answers with GetResultsFragmentHTML.
- NewsgcHTML Grid: new SortMode (gsmServer), SortURL, SortField, SortDescending, HTMXTarget, HTMXInclude and ServerFilter properties, the header cells sort on the server with htmx (hx-get with sort=Field or sort=-Field) and an optional filter row sends one f.<Field> input per column while the user types, keeping the current sort (client sort by default, the output is unchanged).
- NewsgcHTML Grid: new column properties Sortable, Filterable and FilterKind (gfkText, gfkRange), with the server sort a column that is not Sortable keeps a plain title, with ServerFilter a column that is not Filterable gets an empty cell and a gfkRange column gets two inputs f.<Field>.from and f.<Field>.to, the browser side sort skips a column that is not Sortable, and the server pager now keeps the current server sort and HTMXInclude (defaults keep the output unchanged).
- NewNew htmx attribute constants for hx-put, hx-delete, hx-vals and hx-include.
- NewsgcHTML pages switch to a right-to-left layout automatically for Arabic, Hebrew, Persian, Urdu and the other right-to-left languages: the page reads from the right, loads the right-to-left Bootstrap stylesheet (now included in the library) and the components mirror, from the sidebar and the steppers to the chat and the grid. Left-to-right pages do not change. New HtmlDir and Dir properties force a direction when you need one (empty, automatic, by default). New demo 22.RTL.
- NewsgcHTML Presence: the Online, Away, Busy and Offline status words are now translated in the 17 built-in languages.
- NewNew post-quantum cryptography in the sgcCrypto pack, in pure Object Pascal with no external library: ML-KEM (FIPS 203), ML-DSA (FIPS 204) and SLH-DSA (FIPS 205) keys as SubjectPublicKeyInfo, PKCS#8 and PEM, the X-Wing hybrid key encapsulation, X.509 certificates and requests with post-quantum keys, and JWT signing with ML-DSA (RFC 9964). Checked with the NIST known answer tests, with new demos.
- NewThe cryptography of the library is hardened against timing attacks (RSA blinding, constant time elliptic curve and Ed25519, AES and GHASH without secret indexed tables). Private keys are verified on import, signatures that are not minimal DER are rejected, and the certificate chain validation enforces path length and name constraints. HMAC signed JWT tokens accept a binary secret through the new SecretBase64URL property.
- NewNew native TLS 1.3 and TLS 1.2 engine in Object Pascal, client and server, with no OpenSSL and no SChannel, on the Indy handler and on the IOCP and EPOLL servers. It negotiates the hybrid post-quantum groups (X25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024), ALPN, SNI and client certificates, and the new UseSystemRoots property uses the certificates the operating system already trusts. TLSOptions.Version is the lowest version allowed: tls1_2, the default, negotiates TLS 1.2 and TLS 1.3, and tls1_3 only TLS 1.3. For TLS 1.2 only, list only TLS 1.2 suites in NativeTLS_Options.CipherSuites.
- NewThe IOCP and EPOLL servers can now use a TLS library other than OpenSSL. Write a TLS provider for your library, for example SecureBlackbox, and the event-driven engine drives it exactly like the built-in one.
- NewServers: new SSLOptions.AllowPlainText property (disabled by default) lets a TLS server also accept plain HTTP and WebSocket connections on the same port, detecting TLS from the first byte the client sends. SSLOptions.PlainTextPolicy serves, redirects (308 to https) or rejects (400) the plain connections, SSLOptions.PlainTextTimeout sets how long to wait for the first byte, and the new Connection.TLS property and Server.IsTLS(AContext) method (usable in OnCommandGet) tell which transport is in use. Works with the default, IOCP and EPOLL IOHandlers.
- NewNew SAML 2.0 service provider, TsgcSAMLServiceProvider: single sign-on with Entra ID, Okta, AD FS, Google Workspace, Keycloak or any SAML identity provider.
- NewNew LDAP and Active Directory client, TsgcLDAPClient: sign users in with their directory password over LDAPS or StartTLS, search the directory and read group membership, nested groups included.
- NewNew TsgcTOTPAuthenticator: one-time codes for Google Authenticator, Microsoft Authenticator and similar apps, with the enrolment link for the QR code, replay protection and recovery codes.
- NewNew OpenID Connect client, TsgcHTTP_OIDC_Client: sign in with Google, Microsoft or any OpenID provider with automatic discovery, and validate ID tokens and bearer tokens on your server.
- NewNew TsgcMailOAuth2: OAuth2 tokens for Microsoft 365 and Gmail, ready to send and read mail over SMTP, IMAP and POP3 without storing passwords.
- NewPasskeys in the WebAuthn server: several passkeys per user, sign in without a user name, passkey autofill, synced passkey detection and a new event to keep passkeys in your own database.
- NewThe new authentication components are included in the Enterprise and All-Access editions and in the sgcAuth pack, with a demo for each one in Demos.Authentication.
- NewNew TsgcSSEClient: Server-Sent Events (EventSource) client with automatic reconnect and Last-Event-ID resume, the server retry field honoured, typed events, reconnect backoff with jitter, and OnBeforeConnect to set TLS, proxy and authentication. The new TsgcSSEParser reads any text/event-stream, for example LLM streaming responses and MCP Streamable HTTP.
- NewNew HSTS option for the HTTP servers (SecurityOptions.HSTS_Options, off by default). When enabled, every response sent over TLS includes the Strict-Transport-Security header, which is what SSL Labs needs to give an A+ grade. The header is never sent over plain HTTP, and it is not added twice when your code already sets it.
- FixedC++Builder: the headers generated for sgcSSL_DTLS, sgcQUIC_TLS and sgcQUIC_Crypto failed to compile with "Type name expected" on PEVP_PKEY, PEVP_MD and PSSL_SESSION when DTLS or QUIC is enabled. The OpenSSL header unit now declares these OpenSSL types for C++.
- FixedC++Builder 10 to 13 runtime packages failed to link with "Unable to open file VCL.MENUS.OBJ" because they did not import the vcl package used by the HTML units. The C++Builder packages now import the same VCL, image, internet and REST packages as the Delphi packages.
- FixedFixed the C++ header generated for sgcSSL_SChannel_Indy failing to compile with the classic C++Builder compiler bcc32 (E2347 on the Chain and Context properties of TsgcSChannelContext).
- FixedOpenAPI Server: the local Swagger UI assets set in SwaggerUIAssetsPath were not loaded and served as UTF-8, so the characters of recent swagger-ui-bundle.js versions were mangled.
- FixedOpenAPI Server: Endpoint.BasePath replaced the server url of the spec instead of being prepended to it, so the class route of a code first API was lost, and the served spec still advertised the old server url, so the Swagger UI requests did not reach the routes. BasePath is now prepended to the spec server url and the served spec advertises the effective base path.
- FixedFixed the servers silently ignoring errors raised by Start, Stop or ReStart, for example when the port is already in use. They are now reported through OnException.
- FixedFixed ReStart, also used by the WatchDog, waiting forever when the server could not be stopped.
- FixedFixed stopping a TCP server, and every server built on it, possibly waiting forever.
- FixedFixed the HTTP.sys WebSocket server freezing on WriteData with a connection Guid, or when a client disconnected during Broadcast or WriteData, a regression of 2026.9.0.
- FixedFixed the HTTP.sys server reporting Active as True after a failed start, never releasing its URL reservations when stopped (error 183 on the next start), and failing to start with OAuth2 when the URLs are set only through Bindings.
- FixedFixed several crashes, memory leaks and memory corruption in the HTTP.sys server, mainly with Asynchronous enabled, in HighPerf mode and in 64-bit applications.
- FixedFixed possible deadlocks in the WebSocket, HTTP, HTTP/2, TCP, UDP and protocol components, with NotifyEvents neAsynchronous or neSynchronous, when an event handler used the component while other connections were reporting events or disconnecting.
- FixedFixed possible crashes when queued events were delivered for a component or connection that had already been freed, with NotifyEvents neAsynchronous or SGC_EVENT_DISPATCH enabled.
- FixedFixed QueueMessages never delivering fragmented messages, delivering a message twice when its handler raised an exception, and delivering messages for connections already freed.
- FixedFixed a small memory leak in the WebSocket and HTTP servers when several clients connected at the same time to a newly started server.
- FixedFixed a small memory leak in servers using the IOCP or EPOLL IOHandler when connections were closed while the server was starting.
- FixedFixed possible memory corruption and crashes when a WebSocket or HTTP server was stopped while clients were sending data, and on Linux with the EPOLL IOHandler the stop could never return.
- FixedFixed servers using the EPOLL IOHandler on Linux leaving file descriptors open every time they were stopped, so a server restarted many times could run out of them.
- FixedFixed a small memory leak and an open socket handle in servers using the IOCP IOHandler when stopped while new connections were being accepted.
- FixedFixed a broadcast that excluded a connection reaching nobody at all.
- FixedFixed a WebSocket client with Authentication.Token.JWT never connecting, it failed with the message that a host is required.
- FixedFixed a connection accepted by a Linux server using the EPOLL IOHandler being left unserved now and then, so the client waited until its own timeout and the server reported nothing. The IO threads could end up watching the same event queue and leaving another queue with no thread on it, and every connection handed to that queue was never read.
- FixedFixed an access violation when a WebSocket client is destroyed while it is still connected, for example when the application is closed without disconnecting first. The read thread could still be reading through the TLS handler, which was freed before the thread had stopped. It happened with every NotifyEvents mode, most often with the native TLS 1.3 handler.
- FixedFixed a race when a server connection is closed with Close from a thread other than its own, for example from a timer or another connection. The connection thread went on reading the socket and closed it while the Close frame was being sent and the peer answer was being read, which raised an access violation that was hidden.
- FixedFixed memory leaks in the MCP server (one connection per session), in WriteData when the stream could not be read, and in queued messages and pending notifications when a component is destroyed.
- FixedFixed the mask file not being uploaded when editing an image with OpenAI. It was sent as normal text instead of as a file, so edits using a mask never worked.
- FixedFixed a crash in the AI Chat component when Gemini answered with an image instead of text.
- FixedFixed several AI components reading a field from the answer and getting the whole JSON block instead of the value. It affected the function call name in Gemini, the container details in Anthropic, and the message role and the message text in DeepSeek and Ollama.
- FixedFixed the AI Chat component dropping the maximum tokens setting when a temperature was set too with Gemini, so only the temperature was sent.
- FixedFixed OpenAI image requests failing with a 'Missing required parameter' error when the prompt, or any other text, contained a double quote. The text is now escaped correctly.
- FixedFixed the text of OpenAI image and audio requests travelling with the spaces replaced by %20, so the AI received a distorted prompt.
- FixedFixed the requests sent to the AI providers being invalid when the text held a double quote, a backslash or a line break, so the provider answered with an error. It affected the chat messages, the prompts, the instructions and the system messages of OpenAI, Anthropic, Gemini, DeepSeek, Grok, Mistral and Ollama, and also the AI Chat component.
- FixedFixed the system message getting lost when it was sent together with the user message to Ollama, only the user message travelled.
- FixedFixed a crash in the AI Chat component while receiving a streamed answer from Gemini, when the answer started with an image instead of text.
- FixedFixed the BaseUrl of the AI Chat options being ignored by every provider except Ollama, so the requests could not be sent through a proxy or a local gateway.
- FixedFixed the MCP client not answering roots, sampling and elicitation requests from a 2025-11-25 server, and the MCP server not processing those answers. The client now also declares these capabilities when the handler is assigned, and answers Method not found when it is not.
- FixedFixed the MCP client 2025-11-25 notification stream over HTTP not raising any event.
- FixedFixed the MCP server over stdio not answering a request for an unknown method.
- FixedFixed an MCP server engine assigned to the MCPServer property losing its events, so for example subscriptions answered with an empty response.
- FixedFixed the built-in MCP authorization server consent page failing, the PKCE check needing the OpenSSL libraries on Delphi 7, and the metadata advertising https on a plain HTTP local server.
- FixedFixed the MCP client raising an unclear error when the server answers an HTTP error without a JSON body, for example a plain 401.
- FixedFixed the form of the CRUD component saving nothing. It was written without the fields that say which component and which record it belongs to, and without the mark that sends it to the server, so pressing Save reloaded the page and wrote nothing.
- FixedFixed component properties whose value was written to the page without encoding, so a value holding HTML or a script could change the page. It affected element identifiers, CSS classes and values, links, titles, placeholders and several collection items.
- FixedFixed the heading of a section of a designed page being written to the page without encoding.
- FixedFixed sgcHTML pages opening two WebSocket connections, so every update pushed by the server was applied twice.
- FixedFixed an error when copying the columns of a grid or the layout of a pivot.
- FixedFixed multi line text losing its line breaks when a page sent it to the server.
- FixedFixed a grid losing the settings of its columns, for example the width or the title, every time it was loaded again from a dataset.
- FixedFixed a multi line edit writing its content twice, once as an attribute and once as the text.
- FixedFixed the pivot writing numbers with the decimal separator of the computer, so the same page looked different on another machine.
- FixedFixed the demo server that hosts the online demos closing the connection when a page sent a message without a type.
- FixedFixed the sgcHTML CameraScanner camera image covering its own buttons when the scanner is shown inside a Modal or another component.
- FixedFixed ML-KEM reading past the end of a ciphertext that was too short, and both encapsulation and decapsulation now run the input checks the standard requires.
- FixedFixed the SChannel IO handler leaving a copy of the private key in the Windows key store for every connection using a PFX file, and not sending the client certificate on Windows 11 and Windows Server 2022.
- FixedFixed concurrent SChannel connections using a certificate from the Windows certificate store failing the handshake or crashing.
- FixedFixed 64-bit SChannel applications negotiating TLS 1.2 instead of TLS 1.3 on Windows 11 and Windows Server 2022.
- FixedFixed TLS servers using the IOCP or EPOLL IOHandler hanging every connection when a custom SSL handler was assigned in OnSSLGetHandler, and ignoring the TCPKeepAlive settings.
- FixedFixed the BIO_ADDRINFO record of the OpenSSL headers using the field order of Linux on Windows.
- FixedFixed an access violation on TLS servers using the IOCP or EPOLL IOHandler when the server writes to a client that has just disconnected abruptly. The failed write closed the connection and freed its TLS session while that session was still encrypting the message.
- FixedFixed SChannel (sgcSSL_WinSSPI) assertion failure on Win64 when compiling the sources with a Record field alignment different from 8.
- FixedFixed JWT signing and validation with RSA and ECDSA keys, and memory corruption in 32-bit applications, when OpenSSL is linked statically with sgcIdSSLOpenSSL_Static.
- FixedFixed the OAuth2 server rejecting DPoP proofs signed with RSA keys on Delphi 2009 and newer.
- FixedFixed JWT tokens being signed with a signature that was plain Base64 instead of base64url, and the header being read without decoding it, so tokens holding certain characters were rejected by other libraries and by this one.
- FixedFixed non-ASCII claims written by other JWT libraries being read one character per byte, so a name holding an accent came back as two wrong characters. Claims written as escapes are now read as well, including the alg header itself.
- FixedFixed the custom claims of a JWT header or payload getting lost when the options were copied.
- FixedFixed RS256, RS384 and RS512 JWT verification always failing on Delphi 7.
- FixedFixed the metadata list of WebAuthn being read with plain Base64 instead of base64url, so the FIDO metadata could not be loaded.
- FixedFixed the HTTP.sys server, and TsgcHTTPServer over HTTP/2, not answering requests for a missing file, so the client waited until its timeout. They now respond with 404 or 500.
- FixedFixed the HTTP/2 client resending already answered requests after a reconnection, and reconnecting in an endless loop when a pending request could not be sent.
- FixedFixed the HTTP/2 async requests and the MQTT QoS 1 and QoS 2 publish raising an exception when the stream was not at position 0.
- FixedFixed server sent events on the HTTP.sys server, which never worked because the response headers were sent as content, and on Linux the header lines ended with the wrong character.
- FixedFixed an HTTP POST request with the header Accept: text/event-stream being answered as a server sent events connection instead of reaching the server.
- FixedFixed HTTP header values not being read when there is no space after the colon.
- FixedFixed request bodies with accented or other non ASCII characters arriving as question marks on Delphi 7 to Delphi 2007.
- FixedFixed the CloudFront signed URLs of TsgcHTTP_Amazon_AWS_SignedURL, whose signature was not URL safe encoded as Amazon requires.
- FixedFixed \uXXXX escapes in JSON being decoded to the wrong character on Delphi 7.
- FixedFixed DecodeBase64URLAsString returning garbage on Delphi 7.
- FixedFixed a crash on Delphi 2009 when a stream was created from a byte array, the text encoding was left empty.
- FixedFixed the QUIC OpenSSL imports, the QUIC TLS callbacks and the Opus codec declaring 8 byte parameters on Delphi 7, where they must be 4.
- FixedFixed the sgcWebSockets packages failing to compile in sgcQUIC_TLS.pas (undeclared TsgcTLS13Context and GQUICNativeTickets) when the native crypto engine is enabled but QUIC is not, for example with the standard Indy library or an edition without the QUIC pack.
- FixedThe package project files now list every unit of the library, several were missing.
- FixedTsgcWebView2: fixed ZoomFactor being lost when set at design time or before the browser finished initializing.
- FixedFixed WebRTC connections that sometimes failed to start (about 1 in 10) because the session id in the offer was too large, so browsers rejected it.