Skip to content

Latest commit

 

History

History
187 lines (144 loc) · 7.66 KB

sourcecode.md

File metadata and controls

187 lines (144 loc) · 7.66 KB

4. The curl source code

The source code is of course the actual engine parts of this project. After all, it is a software project.

curl and libcurl are written in C.

Hosting and download

You can always find the source code for the latest curl and libcurl release on the official curl web site. From there you can also find alternative mirrors that host copies and there are checksums and digital signatures provided to help you verify that what ends up on your local system when you download these files are the same bytes in the same order as was originally uploaded there by the curl team.

If you instead rather work directly with the curl source code off our source code repository, you find all details in the curl github repo.

Code layout

The curl source code tree is neither large nor complicated. A key thing to remember is perhaps that libcurl is the library and that library is the biggest component of the curl command line tool.

root

We try to keep the number of files in the source tree root to a minimum. You will see a slight difference in files if you check a release archive compared to what is stored in the git repository as several files are generated by the release scripts.

Some of the more notable ones include:

  • buildconf is the setup script used to build configure and more when building curl from source off the git repository.
  • buildconf.bat is the windows version of buildconf. Run this after having checked out the full source code from git.
  • CHANGES is generated at release and put into the release archive. It contains the 1000 latest changes to the source repository.
  • configure is a generated script that is used on unix-like systems to generate a setup when building curl.
  • COPYING is the license detailing the rules for your using this code.
  • GIT-INFO is only present in git and contains information about how to build curl after having checked out the code from git.
  • README is a short summary of what curl and libcurl are.
  • RELEASE-NOTES contains the changes done for the latest release - and when found in git it contains the changes done since the previous release that are destined to end up in the coming release.

lib

This directory contains the full source code for libcurl. It is the same source code for all platforms. Over one hundred C source files and a few more private header files. The header files used when building applications against libcurl are not stored in this directory, see include/curl for those.

Depending on what features that are enabled in your own build and what functions your platform provide, some of the source files or portions of the souce files may contain code that is not used in your particular build.

lib/vtls

The VTLS sub section within libcurl is the home of all the TLS backends libcurl can be built to support. The "virtual" TLS internal API is a common API that is used within libcurl to access TLS and crypto functions without the main code knowing exactly which TLS library that is used. This allows the person who builds libcurl to select from a wide variaty TLS libraries to build with.

We also maintain a SSL comparision table on the web site to aid users.

  • OpenSSL: the by far most popular TLS library.
  • BoringSSL: an OpenSSL fork maintained by Google. Will make libcurl disable a few features due to lacking functionality in the library.
  • LibreSSL: an OpenSSL fork maintained by the OpenBSD team.
  • NSS: a full-blown TLS library perhaps most known for being used by the Firefox web browser. This is the default TLS backend for curl on Fedora and Redhat systems.
  • GnuTLS: a full-blown TLS library used by default by the debian packaged curl.
  • mbedTLS: (formerly known as PolarSSL) is a TLS library perhaps more targeted towards an embedded market.
  • WolfSSL: (formerly known as cyaSSL) is a TLS library perhaps more targeted towards an embedded market.
  • axTLS: is a minuscule TLS library focused on a small footprint.
  • scannel: the native TLS library on Windows.
  • securetransport: the native TLS library on Mac OS X.
  • gskit: the native TLS librarr on OS/400.

src

This directory holds the source code for the curl command line tool. It is the same source code for all platforms that run the tool.

Most of what the command line tool does is to convert given command line options into the corresponding libcurl options or set of options and then make sure to issue them correctly to drive the network transfer according to the user's wishes.

This code uses libcurl just as any other application would.

include/curl

Here are the public header files that are provided for libcurl-using applications. Some of them are generated at configure or release time so they do not look identical in the git repository as they do in a release archive.

With modern libcurl, all an application is expected to do in its C source code is #include <curl/curl.h>

docs

The main documentation location. Text files in this directory are typically plain text files. We have slowly started to move towards Markdown format so a few (but hopefully growing number of) files use the .md extension to signify that.

Ost of these documents are provided shown on the curl web site in a format that is automatically converted to a web friendly format.

  • BINDINGS: lists all known libcurl language bindings and where to find them
  • BUGS: how to report bugs and where
  • CODE_OF_CONDUCT.md: how we expect people to behave in this project
  • CONTRIBUTE: what to think about when contributing to the project
  • curl.1: the curl command line tool man page, in nroff format
  • curl-config.1: the curl-config man page, in nroff format
  • FAQ: frequently asked questions about various curl related subjects
  • FEATURES: an incomplete list of curl features
  • HISTORY: describes how the project started and has evolved over the years
  • HTTP2.md: how to use HTTP/2 with curl and libcurl
  • HTTP-COOKIES: how curl supports and works with HTTP cookies
  • index.html: a basic html page as a documentation index page
  • INSTALL: how to build and install curl and libcurl from source
  • INSTALL.cmake: how to build curl and libcurl with cmake
  • INSTALL.devcpp: how to build curl and libcurl with devcpp
  • INTERNALS: details curl and libcurl internal structures
  • KNOWN_BUGS: list of known bugs and problems
  • LICENSE-MIXING: describes how to combine different third party modules and their individual licenses
  • MAIL-ETIQUETTE: this is how to communicate on our mailing lists
  • MANUAL: a tutorial-like guide on how to use curl
  • mk-ca-bundle.1: the mk-ca-bundle tool man page, in nroff format
  • README.cmake: cmake-specific details
  • README.netware: netware-specific details
  • README.win32: win32-specific details
  • RELEASE-PROCEDURE: how to do a curl and libcurl release
  • RESOURCES: further resources for further reading on what, why and how curl does things
  • ROADMAP.md: what we want to work on in the future
  • SECURITY: how we work on security
  • SSLCERTS: TLS certificate handling documentated
  • SSL-PROBLEMS: common SSL problems and their causes
  • THANKS: thanks to this extensive list of friendly people, curl exists today!
  • TheArtOfHttpScripting: a tutorial into HTTP scripting with curl
  • TODO: things we or you can work on implenting
  • VERSIONS: how the version numbering of libcurl works

docs/libcurl

docs/libcurl/opts

docs/examples

scripts

Handling different build options

Style and code requirements

Contributing

What to add

What not to add

git

git commit style

About adhering to standards and who's right

Web site source code

Building the web