2026.9.0 tüm ürünler için aynı anda yayında: sgcWebSockets, sgcWebSockets .NET, sgcSign, sgcIndy ve sgcOpenAPI. Yılın en büyük sürümü. sgcWebSockets'e tamamen yeni iki paket katılıyor, sunucu motorları uzun zamandır istek kaybettiren bir sorun etrafında yeniden ele alındı ve imza kütüphanesi bir imzayı kendisinden başka bir şeye karşı doğrulamayı öğrendi.
Bu yazı, her üründe önemli olanı, yardımcı olduğu yerlerde Delphi koduyla birlikte adım adım anlatıyor. Her şey değişiklik günlüğünde yer alıyor ve mevcut davranışı değiştiren kısımlar, yükseltmeden önce okuyabilmeniz için sona yakın bir yerde toplandı.
Tüm sürüm dört dakikadan kısa sürede. YouTube'da da izleyin.
| Ürün | Yeni | Düzeltme | Kırıcı Değişiklik |
|---|---|---|---|
| sgcWebSockets | 25 | 56 | 22 |
| sgcSign | 25 | 70 | 21 |
| sgcOpenAPI | 9 | 25 | 5 |
| sgcWebSockets .NET | 5 | 24 | 10 |
| sgcIndy | 0 | 5 | 0 |
sgcWebSockets 2026.9.0
sgcWebRTC, Yerel Bir WebRTC Medya Motoru
Yeni sgcWebRTC paketi TsgcRTCPeerConnection bileşenini eksiksiz bir WebRTC uç noktasına dönüştürüyor. Sesli ve görüntülü aramalar, ekran paylaşımı ve SCTP veri kanalları, hepsi Pascal içinde, tarayıcı olmadan, WebView kontrolü olmadan ve harici bir medya kütüphanesi olmadan. Windows, Linux, macOS, iOS ve Android üzerinde çalışıyor ve karşı taraftaki eş bir tarayıcı olabilir, çünkü ürettiği ve tükettiği SDP gerçeğin ta kendisi.
Teklif ve yanıt alışverişi W3C biçimini izliyor, dolayısıyla CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription ve AddIceCandidate adlarının söylediği şeyi yapıyor. SDP'yi hâlihazırda sahip olduğunuz hangi sinyalleşme kanalı varsa onun üzerinden taşırsınız, bu da aynı kütüphaneyle kurulmuş bir WebSocket sunucusu olabilir.
uses
sgcP2P;
var
oRTC: TsgcRTCPeerConnection;
begin
oRTC := TsgcRTCPeerConnection.Create(nil);
oRTC.RTCOptions.ICEServers.AddURL('stun:stun.l.google.com:19302');
oRTC.OnLocalDescription := OnLocalDescriptionHandler;
oRTC.OnICECandidate := OnICECandidateHandler;
oRTC.OnConnectionStateChange := OnConnectionStateChangeHandler;
oRTC.OnDataChannel := OnDataChannelHandler;
oRTC.CreateDataChannel('chat'); // forces RTCOptions.DTLS on
oRTC.CreateOffer; // gathers ICE candidates, builds the SDP offer
end;
procedure TForm1.OnLocalDescriptionHandler(Sender: TObject;
const aType, aSDP: string);
begin
// send aType + aSDP to the remote peer over your own signalling channel
end;
Medya da aynı şekilde çalışıyor. AddTrack bir Opus veya G.711 ses izini ya da bir VP8, H.264 veya Motion JPEG video izini ekliyor, SendPCM ve SendVideoFrame yakalanan medyayı içeri gönderiyor, OnAudio ve OnVideoFrame ise çözülmüş uzak izi size veriyor.
Tarayıcı döneminin eski yedek çözümleri ters yöne gitti. AppRTC protokolü ve RTCMultiConnection API desteği kaldırıldı, 2020'de ömrünü tamamlayan Flash yedeği de öyle. Sondaki yükseltme notlarına bakın.
sgcCrypto, OpenSSL Olmadan Kriptografi
İkinci yeni paket sgcCrypto, uygulamaların gerçekten başvurduğu temel ilkellerin saf Pascal uygulaması. AES ve ChaCha20/XChaCha20-Poly1305 kimlik doğrulamalı şifreleme, SHA-2 ve SHA-3, parolalar ve anahtar türetme için Argon2, scrypt ve HKDF, Ed25519, Ed448, X25519, X448 ve secp256k1, RSA anahtar üretimi, X.509 sertifika ve CSR üretimi, bir de post-kuantum ML-KEM, ML-DSA ve SLH-DSA algoritmaları.
Her ilkel düz bir fonksiyon. Oluşturulacak, yapılandırılacak ve serbest bırakılacak bir bağlam nesnesi yok, çalıştırılabilir dosyanın yanında dağıtılacak bir DLL de yok.
uses
sgcCrypto_Random, sgcCrypto_AES, sgcCrypto_Keccak, sgcCrypto_Ed25519,
sgcCrypto_MLKEM;
var
vKey, vIV, vPlain, vAAD, vTag, vCipher: TBytes;
vDigest, vSeed, vSignature, vMessage: TBytes;
vPublicKey, vPrivateKey, vSharedSecret, vCiphertext: TBytes;
begin
// AES-256-GCM: authenticated encryption in one call
vKey := sgcRandomBytes(32);
vIV := sgcRandomBytes(12);
vPlain := TEncoding.UTF8.GetBytes('confidential payload');
vCipher := sgcAES_GCM_Encrypt(vKey, vIV, vPlain, vAAD, vTag);
// SHA-3-256, one call, no context object to manage
vDigest := sgcSHA3_256(vPlain);
// Ed25519: sign, then verify
vSeed := sgcRandomBytes(32);
vMessage := TEncoding.UTF8.GetBytes('sign me');
vSignature := sgcEd25519_Sign(vSeed, vMessage);
// ML-KEM-768: post-quantum key encapsulation (FIPS 203)
sgcMLKEM_GenerateKeyPair(mlkem768, vPublicKey, vPrivateKey);
sgcMLKEM_Encapsulate(mlkem768, vPublicKey, vCiphertext, vSharedSecret);
end;
Beş Eksiksiz sgcHTML Uygulaması
sgcHTML dört bileşen ve beş demo kazanıyor. Bileşenler şunlar: barkod ve QR kodlarını tarayıcının yerleşik okuyucusuyla okuyan ve her zaman elle giriş seçeneği de sunan canlı bir kamera paneli olan CameraScanner, ayrıca NumPad, CommandPalette ve EmptyState.
Beş demo birer kod parçacığı değil. Her biri oturum açma, veritabanı ve yazdırılabilir raporlarla eksiksiz birer uygulama ve Demos\60.HTML\01.RunTime altında yer alıyorlar: depo yönetimi, satış noktası, bir raporlama portalı, çok kiracılı bir SaaS kontrol düzlemi ve saha servis sevkiyatı.
Ayrıca yeni bir yardım konusu var, Runtime vs Design-Time, aynı sayfanın kodla oluşturulmak yerine bileşenler bir VCL formuna bırakılarak nasıl kurulacağını gösteren demolarla birlikte.
Ters Proxy Arkasındaki Gerçek İstemci Adresi
nginx, Apache veya bir bulut yük dengeleyici arkasındaki bir sunucu her bağlantıda proxy'nin adresini görür, bu da kara listenin, beyaz listenin, GeoIP'nin ve kendi kurallarınızın hepsinin yanlış istemciye baktığı anlamına gelir. TsgcWebSocketFirewall üzerindeki yeni ForwardedHeaders ayarları, proxy'nin ilettiği adresi geri kazanıyor.
Tasarım bilinçli olarak şüpheci. X-Forwarded-For veya X-Real-IP içindeki adrese yalnızca bağlantının kendisi TrustedProxies listesinde yer alan bir adresten geldiğinde inanılıyor, böylece bir istemci adres uyduramıyor, ayrıca zincir sağdan, TrustedHops ile verilen proxy sayısı kadar geçilerek okunuyor, çünkü en soldaki girdi istemcinin sağladığı girdidir. Çözümleme her istekte çalışıyor, çünkü bir proxy tek bir bağlantıyı farklı çağıranlardan gelen istekler için yeniden kullanır.
uses
sgcWebSocket;
begin
oFirewall.ForwardedHeaders.Enabled := True;
oFirewall.ForwardedHeaders.TrustedProxies.Add('10.0.0.0/8');
oFirewall.ForwardedHeaders.TrustedProxies.Add('::1');
oFirewall.ForwardedHeaders.TrustedHops := 1;
oServer.Firewall := oFirewall;
end;
procedure TForm1.OnServerConnectHandler(Connection: TsgcWSConnection);
begin
// Connection.IP is now the end client
// Connection.PeerIP is still the proxy that opened the socket
end;
Bir kez çözümlendikten sonra, her kara liste girdisinin, her özel kuralın, her olayın ve kendi işleyici kodunuzun gördüğü adres o adres oluyor. Ayarlar http.sys sunucusunda da Indy sunucusundaki gibi davranıyor ve aynı özellik sgcSign Server'a server.firewall.forwarded_headers olarak geliyor.
Ölçebileceğiniz Geri Basınç
Yavaş bir istemciye okuduğundan daha hızlı yazmak, bir şey kopana kadar giden kuyruğu büyütür. Bunun olduğunu uygulamanın içinden görmenin bir yolu yoktu, bu yüzden aktarıcılar yalnızca güvende kalmak için hat üzerinde dur ve bekle tarzı bir alışverişe mecbur kalıyordu.
İki ekleme bunun yerini alıyor. TsgcWSConnection üzerindeki PendingCount, o bağlantı için üç öncelik düzeyinde hâlâ kuyrukta kaç mesaj olduğunu bildiriyor ve okunması hiç bellek ayırmıyor, dolayısıyla yoklanabiliyor. OnQueueDrained, bir bağlantının kuyruğu mesaj tutar durumdan boş duruma geçtiğinde, bağlantı iş parçacığında, boşalmanın hemen ardından ve bir sonraki okumadan önce tetikleniyor, böylece hiç gecikmeden bir kredi verilebiliyor.
procedure TForm1.OnQueueDrainedHandler(Connection: TsgcWSConnection);
begin
// raised on the connection thread: do not touch the user interface here
SendNextBatch(Connection);
end;
procedure TForm1.SendIfRoom(Connection: TsgcWSConnection; const aText: string);
begin
if Connection.PendingCount < 100 then
Connection.WriteData(aText);
end;
Her ikisi de DLL sınırını geçiyor, dolayısıyla .NET sarmalayıcısı ve sgcWebSockets.dll kullanan diğer her ana uygulama da bunlara kavuşuyor. Yeni dışa aktarımlar sona eklendi, bu yüzden mevcut dışa aktarım sırası değişmedi.
EPOLL ve IOCP Motorları
Yüksek başarımlı motorlarda tek bir nedene dayanan bir kusur sınıfı vardı: bir isteğin tek bir soket okumasında geldiğini varsayıyorlardı. Bu, geri döngü testinde doğru, herhangi bir MTU sınırında, bir VPN üzerinden ya da büyük bir gövde paketlere bölündüğünde yanlıştır.
Tamamı gelmemiş bir istek, bağlantı kapatılarak ve yanıt verilmeden düşürülüyordu, iki TCP segmentine bölünmüş bir TLS kaydı ise bağlantıyı doğrudan kapatıyordu. Her ikisi de düzeltildi ve yeni PartialRequestTimeout seçeneği sunucunun geri kalanı için ne kadar bekleyeceğini sınırlıyor, üstelik ayrı bir iş parçacığı havuzunda, böylece yavaş bir istemci diğerlerini tutamıyor. EPOLL motorunda ayrıca sunucu bağlantıları istemci kapattıktan sonra hiç serbest bırakılmıyordu, bu yüzden OnDisconnect hiç tetiklenmiyor ve her yayın ölü bir bağlantıya yazmayı sürdürüyordu.
WorkOpThreads anlamının değişmesinin nedeni de bu. Artık bir bağlantıyı tek bir iş parçacığına sabitlemiyor, çünkü bir isteğin geri kalanını bekleyen bir bağlantı, o iş parçacığındaki diğer tüm bağlantıları tutuyordu. Artık hazır tutulan en küçük çalışan sayısını belirliyor ve havuz oradan büyüyor.
QUIC ve HTTP/3
QUIC ve HTTP/3 istemcisi ile sunucusu artık IPv6 konuşuyor. İki nokta üst üste içeren bir adres IPv6 olarak kabul ediliyor, bir URL bunu köşeli parantez içinde taşıyabiliyor ve bir ana makine adı her iki aile üzerinden çözümleniyor, oysa önceden yalnızca IPv4 deneniyordu. Ana makinesi ayarlanmamış HTTP/3 dinleyicisi tek bir soket üzerinden her iki aileye hizmet ediyor ve HTTP3Options üzerindeki yeni bir Host özelliği, gerektiğinde onu tek bir arayüze sabitliyor.
Daha büyük değişiklik, HTTP/3 isteklerinin artık HTTP/1.1 istekleriyle aynı yolu izlemesi. OpenAPI, MCP ve REST API sunucuları, istek yönlendirme, CORS, çok kiracılılık ve metrikler HTTP/3 üzerinden hiç yanıt vermiyordu, çünkü o taşıma katmanının kendine ait bir yolu vardı. Hepsi artık çalışıyor.
HTTP/3'te sertifika doğrulaması iki kez okunması gereken madde. TsgcHTTP3Client üzerinde TLSOptions.VerifyCertificate varsayılan olarak True idi, denetim yapılıyordu ve sonuç ardından atılıyordu, dolayısıyla her HTTP/3 istemcisi herhangi bir otorite tarafından herhangi bir ana makineye verilmiş her sertifikayı kabul ediyordu. Denetim artık uygulanıyor, bu da kendinden imzalı bir uç noktayla konuşan bir HTTP/3 istemcisinin, güven deposu ya da sertifika düzeltilene kadar bağlanmayı bırakacağı anlamına geliyor.
Borsa API İstemcileri
Hazır borsa istemcilerinde, çok daha tuhaf bir sorun gibi okunan bir yeniden bağlanma sorunu vardı. Özel abonelikler, yani emir, bakiye ve gerçekleşme akışları, Bitstamp, Coinbase, Deribit, Huobi, Kraken spot ve vadeli, Kucoin, MEXC ve ThreeCommas üzerinde yeniden bağlanmanın ardından hiç yeniden oynatılmıyordu. Bileşen yeniden bağlanmayı başarılı olarak bildiriyor, o akışlar ise sessizce yok oluyordu. BitMEX, Bitfinex, Crypto.com, Deribit ve Kraken vadeli üzerinde yeniden oynatma kimlik doğrulamadan önce çalışıyordu, ki bu da işe yaramaz. Kısa ömürlü bir kimlik bilgisi taşıyan çerçeveler artık yeniden gönderilmek yerine, yeniden oynatma anında taze bir kimlik bilgisiyle yeniden kuruluyor.
Para, imzalanmadan önce yuvarlanıyordu. Sabit sekiz ondalık haneli bir maske, 0.000000004 gibi bir büyüklüğü sıfıra çeviriyordu ve değerler sistem yerel ayarına göre bilimsel gösterimle ya da virgül ayırıcıyla dışarı çıkabiliyordu. Değerler artık Binance, Bybit, Cex, Cryptohopper, Kucoin, MEXC ve ThreeCommas üzerinde kayıpsız biçimde, düz ondalık olarak ve nokta ile yazılıyor.
Aynı alanda yeni olanlar: v1'in yanında bir Kraken WebSocket v2 bileşeni, tek bir örneğin genel ve özel verilere aynı anda hizmet edebilmesi için içeride ikinci bir bağlantı açan bir Huobi istemcisi, saati kaymış bir ana makine için Binance'te UseServerTimeOffset ve büyük bir aboneliğin borsa hız sınırına takılmasını önleyen ve yeniden bağlanma oynatmasını arka plandaki bir çalışana taşıyan iki kısıtlama seçeneği, PaceBatch ve AsyncResubscribe.
sgcWebSockets .NET 2026.9.0
.NET kütüphanesi Delphi olanını izliyor. OnQueueDrained ve PendingCount aynı anlamla geliyor, yanlarında Throttle.AsyncResubscribe, Cryptohopper istemcisinde AllowUnsignedWebhooks ve kullanıcı veri akışının hazır olup olmadığının artık bir özellik yoklanarak keşfedilmesi gerekmemesi için yeni bir OnBinanceUserStreamSubscribed olayı var.
Yukarıda listelenen her borsa yeniden bağlanma ve imzalama düzeltmesi burada da geçerli, kaldırmalar da öyle. AppRTC protokolü, RTCMultiConnection API ve Flash yedek sınıfları kayboldu, bu da TwsTransport değerlerini yeniden numaralandırıyor. Sayısal taşıma değerini saklayan veya ileten kodun gözden geçirilmesi gerekiyor.
Adı anılmayı hak eden iki sızıntı: istemcisi hâlâ bağlıyken serbest bırakılan bir WebSocket API bileşeni, mesaj işleyicisinin dolaştığı listeden kendini hiç çıkarmıyordu ve yok edilen her bileşen için iki kalp atışı zamanlayıcı iş parçacığı sızıyordu, temiz bir kapanışın ara sıra hata vermesinin nedeni buydu.
sgcSign 2026.9.0
Bu sürümün büyük bölümü müşteri taleplerinden doğdu ve üç alanda karşılık buluyor: hangi sertifikayla imzalamak üzere olduğunuzu bilmek, bir doğrulayıcının on yıl sonra da kabul edeceği bir imza oluşturmak ve bir imzayı kendisinden başka bir şeye karşı doğrulamak.
Aralarından Seçim Yapabileceğiniz Sertifika Listeleri
Sertifikaları listelemek eskiden görünen adları geri veriyordu, bu bir açılır kutuyu doldurmaya yeter ama karar vermeye yetmez. Aynı otoriteden, aynı kişiye verilmiş iki kart o listede birbirinin aynısı görünür. Listeleme artık SHA-1 parmak izini, mali kimlik numarasını, seri numarasını, düzenleyeni ve geçerlilik tarihlerini taşıyor, Windows sertifika deposu, bir PKCS#11 belirteci ve bir PFX dosyası için aynı biçimde.
uses
sgcSign_KeyProvider_WinCertStore, sgcSign_X509, sgcSign_Types;
var
oProvider: TsgcWindowsCertStoreProvider;
oList: TsgcX509CertificateList;
i: Integer;
begin
oProvider := TsgcWindowsCertStoreProvider.Create(nil);
Try
// only certificates that are still valid and hold a private key
oList := oProvider.EnumerateCertificateList([cfNotExpired, cfPrivateKey]);
Try
for i := 0 to oList.Count - 1 do
Memo1.Lines.Add(Format('%s | %s | %s .. %s | %s',
[oList[i].Subject, oList[i].SerialNumber,
DateToStr(oList[i].NotBefore), DateToStr(oList[i].NotAfter),
oList[i].Thumbprint]));
// and sign with exactly the one that was chosen
oProvider.SelectCertificateByThumbprint(oList[0].Thumbprint);
Finally
oList.Free;
End;
Finally
oProvider.Free;
End;
end;
Ayrı sertifikaları ayrı PIN'lerin arkasına koyan Polonya nitelikli imza kartlarında sık görülen çok yuvalı bir PKCS#11 kartı artık hiç PIN olmadan envanterlenebiliyor. EnumerateCertificateListAllSlots her yuvayı okuyor, her girdi nereden geldiğini kaydediyor ve TokenSlotCount gerçekte kaç yuvada belirteç olduğunu bildiriyor.
Sertifikaların kendileri de, ayrıştırıcının eskiden tanıdığı yedi öznitelik yerine taşıdıkları her şeyi bildiriyor, posta adresi okunabilir satırlara çözülmüş halde ve her öznitelik kendi OID'si üzerinden erişilebilir durumda.
Denetlenebilir Kalan İmzalar
PAdES iki profil kazanıyor. spPAdESBasicT gömülü bir zaman damgasıyla ve iptal verisi olmadan imzalıyor, spPAdESDocumentArchive ise uzun vadeli profilin üzerine bir arşiv zaman damgası ekleyerek belgenin tamamını, iptal verisi dahil, kapsıyor, böylece dosya ilk zaman damgasının kendi geçerlilik penceresi geçtikten sonra da denetlenebilir kalıyor.
Düzenleyen sertifikayı bulmak eskiden sizin sorununuzdu, çünkü nitelikli imza kartlarının çoğu yalnızca kendi sertifikanızı taşır. Yeni GetIssuerCertificate ve GetCertificateChain çağrıları, imzaladığınız sertifikayı düzenleyen sertifikayı ve onun üstündeki tüm yolu buluyor, üstelik ada göre değil kriptografik olarak eşleştirerek, böylece imzalama anahtarını değiştirmiş bir otorite kendi selefiyle karıştırılmıyor. IssuerLookup nerede arayacağına karar veriyor: varsayılan olarak Windows sertifika deposu, dağıttığınız PEM veya DER dosyaları ya da varsayılan olarak kapalı olan, sertifikanın içindeki adres.
Zaman damgası istekleri artık imzalanabiliyor, bazı nitelikli otoritelerin, özellikle de Polonyalıların gerektirdiği bir şey. RequestFormat değerini trfCMS olarak ayarlayın, bir anahtar sağlayıcı atayın, OnBeforeSendRequest ve OnAfterReceiveResponse gönderilen ve alınan baytları size tam olarak versin.
Güven Çıpalarıyla Doğrulama
Bu, dikkatle okunması gereken değişiklik. Şimdiye kadar doğrulayıcı, imzalama sertifikasını denetlediği belgenin içinden alıyor ve o anahtarın o belgeyi imzaladığını onaylıyordu, bu da yalnızca belgeyi kim yazdıysa içindeki imzayı da onun yazdığını kanıtlar.
Yeni TrustedCertificates ve TrustedCertificateStore özellikleri hangi köklere güvendiğinizi söylüyor, RequireTrustedChain, CheckKeyUsage ve RequireCompleteRevocationCheck ise sonucun ne kadar katı olacağına karar veriyor. Bir çıpa, SHA-256 parmak iziyle veya kendi anahtarı altında doğrulanarak eşleştirilir, asla adla değil. Çıpası olmayan bir doğrulayıcı daha önce döndürdüğü kararı döndürüyor, ancak ETSI TS 119 102-2 raporu, hiçbir zaman bir çıpaya zincirlenmemiş bir imza için artık total-passed demiyor, dolayısıyla çıpasız üretilmiş saklı raporların yeniden üretilmesi gerekiyor.
Authenticode imzalama artık fazladan sertifikalar gömebiliyor, signtool /ac ile aynı şey, böylece çekirdek modu sürücü imzası, çapraz sertifikası üzerinden Microsoft Code Verification Root'a zincirlenebiliyor.
Proxy Destekli Tek Bir HTTP Taşıma Katmanı
Kütüphanenin yaptığı her istek artık paylaşılan bir HTTPOptions özelliğine sahip tek bir taşıma katmanından geçiyor: zaman damgası istemcisi, OCSP ve iptal listesi istemcileri, AB güven listesi indirmesi ve bulut anahtar sağlayıcıları. Bu katman, sistemin proxy'si, hiçbiri, açık bir adres ya da makinenin adres başına çözümlediği proxy olabilen proxy'yi, kimlik bilgisi isteyen bir proxy için o bilgileri, istemci sertifikasını, kabul edilen en düşük TLS sürümünü ve kullanıcı aracısını taşıyor. Her ayar, varsayılan olarak o isteklerin daha önce yaptığı şeye ayarlı ve yeni bir OnHTTPRequest olayı, bu ayarların tarif edemediği bir ağ geçidi için taşıma katmanının tamamının yerine geçiyor.
İmzalama Sunucusu
API anahtarları ve onları oluşturan kullanıcılar artık proje bazında yalıtılmış durumda, böylece bir proje yöneticisi başkalarınınkini görmeden kendi projesindeki anahtarları yönetiyor. Anahtarlar yalnızca tek yönlü olarak iptal edilmek yerine etkinleştirilip devre dışı bırakılabiliyor, hız sınırları ve günlük kotaları oluşturulduktan sonra düzenlenebiliyor ve denetim günlüğü nihayet istemci adresine göre filtrelenebiliyor, hem konsolda hem de CSV dışa aktarımında.
Bir Authenticode imzası artık her biri için farklı bir sertifikayla ikiden fazla iç içe imza taşıyabiliyor, süresi dolmakta olan bir sertifikayla ve onun yerine geçenle imzalanmış tek bir dosyayı dağıtmanın gerektirdiği şey bu. Windows katalog dosyaları imzalanabiliyor ve yeni bir /api/v1/sign/raw uç noktası, zaten hesaplamış olduğunuz bir özeti imzalayıp yalnızca imza değerini döndürüyor, ki bu tam olarak signtool aracının /dlib geri çağrısı üzerinden istediği şey. Kendisine verilen her özeti imzalayacağı için varsayılan olarak kapalı ve her seferinde tek bir sağlayıcı için açılıyor.
Birkaç sunucu varsayılanı iyi bir nedenle değişti. server.listen ayarı artık gerçekten verdiğiniz adrese bağlanıyor, yönetim işlemleri tek kullanımlık bir belirteç taşıyan bir form gönderimi gerektiriyor ve HTTPS üzerinden yapılan webhook teslimatları gönderildikleri adresin sertifikasını denetliyor. Üçü de yükseltme notlarında yer alıyor.
sgcIndy 2026.9.0
Küçük bir sürüm ve içindeki her madde sahip olunmaya değer bir düzeltme.
ALPN üzerinden anlaşılan protokol adı, OpenSSL'in uzunluğu için tuttuğu tek bayta dört baytla yazılıyordu, dolayısıyla bir protokol üzerinde anlaşan her el sıkışma yanındaki belleğin üzerine yazıyordu. IOCP veya EPOLL motorundaki bir TLS sunucusu, karşı taraf yeniden anlaşma istediğinde OpenSSL'in zaten hazırladığını göndermek yerine yazmayı tekrar tekrar deneyerek bir iş parçacığının tüm CPU'sunu tüketiyordu. Linux'ta, karşı taraf bir yazma sırasında bağlantıyı sıfırladığında TLS kullanan bir uygulama işletim sistemi tarafından kapatılıyordu, çünkü OpenSSL, sistemden kırık boru sinyalini bastırmasını isteyemeyecek bir biçimde yazıyor. FPC ve Lazarus altındaki aynı sorun da düzeltildi, hâlâ açıkta olan macOS üzerindeki sunucu tarafından kabul edilen bağlantılar dahil.
Community kurulumu için önceden derlenmiş Delphi 13 ikili dosyaları Delphi 12 projelerinden üretiliyordu, bu yüzden Delphi 13 kurulumunun beklediği 370 adları yerine 290 adlarını taşıyorlardı ve Windows ARM64EC hiç derlenmemişti. Delphi 13 artık desteklenen her platform için kendi projelerini derliyor.
sgcOpenAPI 2026.9.0
Ayrıştırıcı sessizce başarısız olmayı bıraktı. Her belge artık, eksik bir openapi veya info üyesini, yanlış JSON türüne sahip bir üyeyi, üretilemeyen bir işlemi, çözümlenemeyen bir yol öğesi referansını ve okunan ama henüz yerine getirilmeyen her JSON Schema anahtar sözcüğünü tutan bir Warnings listesiyle geri geliyor.
uses
sgcOpenAPI_Classes, sgcOpenAPI_Parser_Client_Pascal;
var
oParser: TsgcOpenAPI_Parser_Client_Pascal;
i: Integer;
begin
oParser := TsgcOpenAPI_Parser_Client_Pascal.Create;
Try
oParser.OpenAPIClassName := 'TPetStoreClient';
oParser.OutputFileName := 'PetStoreClient.pas';
oParser.ReadFromFile('petstore.json');
for i := 0 to oParser.Warnings.Count - 1 do
Memo1.Lines.Add('warning: ' + oParser.Warnings[i]);
oParser.SaveToFile('PetStoreClient.pas');
Finally
oParser.Free;
End;
end;
Ayrıca hangi belirtim sürümünü okuduğunu biliyor, dolayısıyla bir 3.0 belgesi ile bir 3.1 belgesi artık aynı şey gibi ele alınmıyor, exclusiveMinimum ve exclusiveMaximum bunun bariz örneği. OpenAPI 3.1 webhook'ları, jsonSchemaDialect, components.pathItems, lisans tanımlayıcısı, mutualTLS güvenlik şeması, ["string","null"] gibi dizi olarak bildirilen bir tür ve boole olarak bildirilen bir şema destekleniyor, OpenAPI 3.2 sorgu işlemi ve additionalOperations haritası da öyle.
Üretim, eskiden pes ettiği yerlerde iyileşti. Satır içi bir nesne şeması artık bir dizgeye gerilemek yerine kendi sınıfını üretiyor, items eksiksiz bir şema olarak okunuyor ve üretilen istemci çerez parametrelerini ve parametre serileştirme kurallarının tamamını destekliyor: matrix, label, simple, form, spaceDelimited, pipeDelimited ve deepObject, explode ve allowReserved ile birlikte.
Komut satırı nihayet bir derleme betiğinde kullanılabilir durumda. Bir çıkış kodu ayarlıyor, başarıda 0 ve farklı hatalar için 1 ile 7 arası, hatalar ise her zaman standart hataya gidiyor. Yeni bir -r anahtarı, varsayılan olarak kapalı olmak üzere, bir YAML veya Swagger 2.0 belgesini genel dönüştürücü üzerinden çeviriyor.
Aynı OpenAPI iyileştirmeleri sgcWebSockets içinde de geliyor, orada sunucu tarafındaki doğrulayıcı artık başlık ve çerez parametrelerini de denetliyor, ValidateHeaderParams, ValidateCookieParams ve EnforceRequired ile.
Yükseltmeden Önce
Bu kez her üründe kırıcı değişiklikler var. Bunlar sizi en çok etkileyecek olanlar.
- sgcWebSockets ve .NET'ten kaldırıldı. AppRTC, RTCMultiConnection ve Flash yedeği kayboldu.
FallBack.Flashsatırlarını, onları taşıyan her.dfmdosyasından kaldırın, aksi halde form bir özellik yok hatası verir, ayrıcatrpFlashsonrasındaki herTwsTransportüyesinin sıra numarasının bir kaydığını unutmayın. WorkOpRoundRobinkaldırıldı veWorkOpThreadsartık bir bağlantıyı bir iş parçacığına sabitlemiyor. Bir veritabanı bağlantısı veya iş parçacığına özel bir önbellek gibi iş parçacığı başına tutulan hiçbir şeyin artık bir bağlantıyı izlediği varsayılamaz.- Sertifika doğrulaması, daha önce uygulanmadığı yerlerde artık uygulanıyor. OpenSSL arka ucunda
TLSOptions.VerifyCertificate, SChannel ve Apple'ın zaten yaptığı gibi, sertifikayı ana makineye bağlıyor. HTTP/3'te denetimin sonucu artık atılmıyor.DTLSOptions.VerifyCertificateartık sonucunu uyguluyor veDTLSOptions.RootCertFile, bu uç noktanınCertFileiçine ait olan kendi sertifikası değil, güven deposudur. - İstemcilerde
WriteTimeoutvarsayılan olarak 60 saniye, sınırsız değil, ve önceden yalnızca Windows'ta etkili olduğu yerde artık Linux, macOS, iOS ve Android üzerinde de geçerli. Hiç zaman aşımına uğramaması için negatif bir değer verin. - Yeniden denemeler daraltıldı. Varsayılan olarak yalnızca GET, HEAD ve OPTIONS yeniden deneniyor, çünkü sunucunun zaten gerçekleştirdiği bir POST iki kez gönderilip ikinci bir emir verebilir. Eski davranışa güveniyorduysanız
RetryOptions.Methodsiçine POST ekleyin. - sgcSign'da tek bir
TsgcX509Certificatevar. Kütüphane bu ad altında üç sınıf bildiriyordu. Sertifikaları listeleyen kodun uses bölümündesgcSign_X509gerekiyor, C++ Builder'da da buna karşılık gelen.hppeklemesi. - Daha eski sürümlerin oluşturduğu ASiC-E CAdES kapsayıcıları, içlerindeki belgelerle hiçbir kriptografik bağ taşımıyor, çünkü bildirimdeki her özet boş bir öğe olarak yazılıyordu. Zaten verilmiş kapsayıcıların yeniden verilmesi gerekiyor ve ASiC-E üreten çağıranların, imzalama geri çağrısı alan yeni
BuildCAdESaşırı yüklemesine geçmesi şart. - Nesne Denetçisine yazılan kimlik bilgileri artık
.dfmdosyasına yazılmıyor. On bir sgcSign biriminde yer alan on dört özellik, aralarında AWS gizli anahtarı, Google Cloud hizmet hesabı JSON'u ve PKCS#11 PIN'i de olmak üzere, artık saklanmıyor olarak işaretli. Koddan atanabilir kalıyorlar ve mevcut bir.dfmhâlâ yükleniyor, ancak form bir sonraki kaydedilişinde değer kaybolacak. - sgcSign Server artık
server.listenayarına gerçekten bağlanıyor. 127.0.0.1 için yapılandırılmış ama aslında tüm ağdan erişilebilir olan bir dağıtım erişilemez hale geliyor, ki yapılandırmanın istediği de buydu. - Üretilen OpenAPI istemcileri sunucu sertifikasını doğruluyor. Kendinden imzalı bir uç nokta için
TLSOptions.VerifyCertificatedeğerini False yapın. İstek gövdesi artık UTF-8, boş bir dize"field": ""olarak serileştiriliyor ve bir yanıt artık çağıranın sağladığı birResponseStreamnesnesini serbest bırakmıyor.
Her birinin gerekçesiyle birlikte tam liste, her ürünün değişiklik günlüğünde.
Nasıl Edinilir
Sürüm 2026.9.0 şimdi kullanılabilir durumda, tam kaynak kodu ve bir yıllık güncellemelerle birlikte, Delphi 7'den Delphi 13 Florence'a kadar, karşılık gelen C++ Builder sürümleri ve .NET için.
sgcWebSockets · sgcWebRTC · sgcCrypto · sgcHTML · sgcSign · sgcIndy · sgcOpenAPI
Deneme sürümünü indirin · Değişiklik günlüğü
Sorularınız veya geri bildiriminiz mi var? Bize ulaşın, yanıtı kodu yazan kişilerden alacaksınız.
