Kod düzeni
curl kaynak kodu ağacı ne büyük ne de karmaşıktır. Hatırlanması gereken önemli bir şey, libcurl'ün kütüphane olduğu ve bu kütüphanenin curl komut satırı aracının en büyük bileşeni olduğudur.
kök (root)
Kaynak ağacı kökündeki dosya sayısını minimumda tutmaya çalışıyoruz. Bir sürüm arşivini git deposunda saklananla karşılaştırırsanız, sürüm komut dosyaları (scripts) tarafından birkaç dosya oluşturulduğundan dosyalarda küçük bir fark görebilirsiniz.
Daha dikkate değer olanlardan bazıları şunlardır:
buildconf: (kullanımdan kaldırıldı) git deposundan kaynağı kullanarak curl derlerken yapılandırma (configure) ve daha fazlasını oluşturmak için kullanılan komut dosyası.buildconf.bat: buildconf'un Windows sürümü. Tam kaynak kodunu git'ten çektikten (checkout) sonra bunu çalıştırın.CHANGES: sürümde oluşturulur ve sürüm arşivine konur. Kaynak deposundaki en son 1000 değişikliği içerir.configure: curl derlerken bir kurulum oluşturmak için Unix benzeri sistemlerde kullanılan oluşturulmuş bir komut dosyası.COPYING: kodu kullanmanızla ilgili kuralları detaylandıran lisans.GIT-INFO: sadece git'te bulunur ve kodu git'ten çektikten sonra curl'ün nasıl derleneceği hakkında bilgi içerir.maketgz: sürüm arşivleri ve günlük anlık görüntüler (snapshots) üretmek için kullanılan komut dosyası.README: curl ve libcurl'ün ne olduğuna dair kısa bir özet.RELEASE-NOTES: en son sürüm için yapılan değişiklikleri içerir; git'te bulunduğunda, önceki sürümden bu yana yapılan ve gelecek sürüme girmesi hedeflenen değişiklikleri içerir.
lib
Bu dizin, libcurl için tam kaynak kodunu içerir. Tüm platformlar için aynı kaynak kodudur—yüzden fazla C kaynak dosyası ve birkaç tane daha özel başlık dosyası. libcurl'e karşı uygulamalar derlenirken kullanılan başlık dosyaları bu dizinde saklanmaz; onlar için include/curl dizinine bakın.
Kendi derlemenizde hangi özelliklerin etkinleştirildiğine ve platformunuzun hangi işlevleri sağladığına bağlı olarak, kaynak dosyaların bazıları veya kaynak dosyaların bölümleri, sizin özel derlemenizde kullanılmayan kodlar içerebilir.
lib/vtls
libcurl içindeki VTLS alt bölümü, libcurl'ün desteklemek üzere derlenebileceği tüm TLS arka uçlarının evidir. "Sanal" (virtual) TLS dahili API'si, ana kodun hangi özel TLS kütüphanesinin kullanıldığını bilmeden TLS ve kripto işlevlerine erişmek için dahili olarak kullanılan, arka uçtan bağımsız bir API'dir. Bu, libcurl'ü derleyen kişinin derleme yapmak için çok çeşitli TLS kütüphaneleri arasından seçim yapmasına olanak tanır.
Kullanıcılara yardımcı olmak için web sitesinde bir SSL karşılaştırma tablosu da tutuyoruz.
- AmiSSL: AmigaOS için yapılmış bir OpenSSL çatalı (
openssl.ckullanır) - BearSSL
- BoringSSL: Google tarafından bakımı yapılan bir OpenSSL çatalı. (
openssl.ckullanır) - GnuTLS
- LibreSSL: OpenBSD ekibi tarafından bakımı yapılan bir OpenSSL çatalı. (
openssl.ckullanır) - mbedTLS
- OpenSSL
- rustls: rust ile yazılmış bir TLS kütüphanesi
- Schannel: Windows üzerindeki yerel (native) TLS kütüphanesi.
- Secure Transport: macOS üzerindeki yerel (native) TLS kütüphanesi
- wolfSSL
src
Bu dizin, curl komut satırı aracı için kaynak kodunu tutar. Aracı çalıştıran tüm platformlar için aynı kaynak kodudur.
Komut satırı aracının yaptığı şeylerin çoğu, verilen komut satırı seçeneklerini karşılık gelen libcurl seçeneklerine veya seçenek setine dönüştürmek ve ardından kullanıcının isteklerine göre ağ transferini yönlendirmek için bunları doğru bir şekilde verdiğinden emin olmaktır.
Bu kod, libcurl'ü tıpkı diğer herhangi bir uygulamanın yaptığı gibi kullanır.
include/curl
Burada libcurl kullanan uygulamalar için sağlanan halka açık başlık dosyaları bulunmaktadır. Bazıları yapılandırma (configure) veya sürüm sırasında oluşturulur, bu nedenle git deposunda bir sürüm arşivinde göründükleri gibi görünmezler.
Modern libcurl ile, bir uygulamanın C kaynak koduna dahil etmesi beklenen tek şey #include <curl/curl.h> satırıdır.
docs
Ana dokümantasyon konumu. Bu dizindeki metin dosyaları tipik olarak düz metin dosyalarıdır. Yavaş yavaş Markdown formatına geçmeye başladık, bu nedenle birkaç (ancak artan sayıda) dosya bunu belirtmek için .md uzantısını kullanıyor.
Bu belgelerin çoğu curl web sitesinde de otomatik olarak metinden web dostu bir formata/görünüme dönüştürülerek gösterilir.
BINDINGS: bilinen tüm libcurl dil bağlayıcılarını ve bunların nerede bulunacağını listelerBUGS: hataların nasıl ve nereye bildirileceğiCODE_OF_CONDUCT.md: bu projede insanların nasıl davranmasını beklediğimizCONTRIBUTE: projeye katkıda bulunurken nelere dikkat edilmelicurl.1: nroff formatında curl komut satırı aracı kılavuz (man) sayfasıcurl-config.1: nroff formatında curl-config kılavuz sayfasıFAQ: curl ile ilgili çeşitli konular hakkında sıkça sorulan sorularFEATURES: curl özelliklerinin eksik bir listesiHISTORY: projenin nasıl başladığını ve yıllar içinde nasıl geliştiğini açıklarHTTP2.md: curl ve libcurl ile HTTP/2 kullanımıHTTP-COOKIES: curl HTTP çerezlerini (cookies) nasıl destekler ve onlarla nasıl çalışırindex.html: dokümantasyon dizin sayfası olarak temel bir HTML sayfasıINSTALL: curl ve libcurl'ün kaynaktan nasıl derleneceği ve kurulacağıINSTALL.cmake: CMake ile curl ve libcurl nasıl derlenirINSTALL.devcpp: devcpp ile curl ve libcurl nasıl derlenirINTERNALS: curl ve libcurl iç yapılarını detaylandırırKNOWN_BUGS: bilinen hatalar ve sorunların listesiLICENSE-MIXING: farklı üçüncü taraf modüllerinin ve bunların bireysel lisanslarının nasıl birleştirileceğini açıklarMAIL-ETIQUETTE: posta listelerimizde nasıl iletişim kurulacağıMANUAL: curl'ün nasıl kullanılacağına dair öğretici benzeri bir rehbermk-ca-bundle.1: nroff formatında mk-ca-bundle aracı kılavuz sayfasıREADME.cmake: CMake ayrıntılarıREADME.netware: Netware ayrıntılarıREADME.win32: win32 ayrıntılarıRELEASE-PROCEDURE: bir curl ve libcurl sürümü nasıl yapılırRESOURCES: curl'ün neyi, neden ve nasıl yaptığına dair daha fazla okuma için ek kaynaklarROADMAP.md: gelecekte üzerinde çalışmak istediğimiz şeylerSECURITY: güvenlik açıkları üzerinde nasıl çalıştığımızSSLCERTS: TLS sertifika işleme belgelendiSSL-PROBLEMS: yaygın SSL sorunları ve nedenleriTHANKS: bu kapsamlı dost canlısı insanlar listesi sayesinde, curl bugün var.TheArtOfHttpScripting: curl ile HTTP komut dosyası oluşturmaya (scripting) giriş dersiTODO: bizim veya sizin uygulayabileceğiniz şeylerVERSIONS: libcurl sürüm numaralandırmasının nasıl çalıştığı
docs/libcurl
Tüm libcurl işlevleri, bu dizinde nroff formatında, .3 uzantılı ayrı dosyalarda kendi kılavuz sayfalarına sahiptir. Aşağıda açıklanan birkaç başka dosya da vardır.
ABIindex.htmllibcurl.3libcurl-easy.3libcurl-errors.3libcurl.m4libcurl-multi.3libcurl-share.3libcurl-thread.3libcurl-tutorial.3symbols-in-versions
docs/libcurl/opts
Bu dizin, üç farklı libcurl işlevi için bireysel seçeneklerin kılavuz sayfalarını içerir.
curl_easy_setopt() seçenekleri CURLOPT_ ile başlar,
curl_multi_setopt() seçenekleri CURLMOPT_ ile başlar ve
curl_easy_getinfo() seçenekleri CURLINFO_ ile başlar.
docs/examples
Okuyucuların libcurl'ün nasıl kullanılabileceğini anlamalarına yardımcı olmayı amaçlayan yaklaşık 100 bağımsız örnek içerir.
Ayrıca bu kitabın libcurl örnekleri bölümüne de bakın.
scripts
Kullanışlı komut dosyaları.
contributors.sh: belirli bir hash/etiketten bu yana tüm katkıda bulunanları git deposundan çıkarır. Amaç, RELEASE-NOTES dosyası için bir liste oluşturmak ve manuel olarak eklenen isimlerin güncellemelerde bile orada kalmasına izin vermektir. Komut dosyası, bazı isimleri yeniden yazmak içinTHANKS-filterdosyasını kullanır.contrithanks.sh: belirli bir hash/etiketten bu yana katkıda bulunanları git deposundan çıkarır,THANKSdosyasında zaten belirtilen tüm isimleri filtreler ve ardından yeni katkıda bulunanların listesini sona ekleyerekTHANKSdosyasını stdout'a (standart çıktı) verir; THANKS belgesinin daha kolay güncellenmesini sağlamak içindir. Komut dosyası, bazı isimleri yeniden yazmak içinTHANKS-filterdosyasını kullanır.log2changes.pl: sürüm komut dosyası tarafından kullanıldığı gibi, sürümler içinCHANGESdosyasını oluşturur. Basitçe git log çıktısını dönüştürür.zsh.pl: zsh kabuğu kullanıcılarına curl komut satırı tamamlamaları sağlamak için yardımcı komut dosyası.