)]}'
{
  "log": [
    {
      "commit": "9c9783a1279bceaa4a9bcc10939dd9faabcb32df",
      "tree": "1ca1f6e1ee405debf8620b62db0a9414bec0daec",
      "parents": [
        "70e0945572511af58b72f86c484193955ee210de"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jun 07 14:16:44 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jun 07 14:16:44 2026 +0000"
      },
      "message": "* CHANGES: Update 1.5.0 feature list.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1935105 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "70e0945572511af58b72f86c484193955ee210de",
      "tree": "fa0e2626f1f7ae565ec18fa4b593f60f5dd5b409",
      "parents": [
        "d6d27455716f18eafd972c00707d4768ec18c70c"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jun 06 03:54:40 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jun 06 03:54:40 2026 +0000"
      },
      "message": "Update change log for 1.5.0 and 1.3.11.\n\n* CHANGES\n  (1.5.0): Rename from 1.4.0, update contents.\n  (1.4.0): Annotate \"Not released\".\n  (1.3.11): Add draft changelog with some pending backports.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1935056 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "d6d27455716f18eafd972c00707d4768ec18c70c",
      "tree": "99b88eadf873a0785d644fcca4fc43c13c75f31f",
      "parents": [
        "e8d61020b5f9afa21c06a1e2d72e7052d8e72225"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jun 05 13:33:37 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jun 05 13:33:37 2026 +0000"
      },
      "message": "Follow up to r1925997: Fix use of uninitialized pointer.\n\n* buckets/bwtp_buckets.c\n  (parse_status_line): Use the correct source string pointer to parse the\n   channel number. Fixes the absolute silliness that happened in r1925997.\n   Mea maxima culpa.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1935031 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e8d61020b5f9afa21c06a1e2d72e7052d8e72225",
      "tree": "59862e68df15f39058194faf2a884f67aa82e6d3",
      "parents": [
        "eb804c8b4ac4775d2f434923d9dedf5f5a153f70"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jun 05 12:11:35 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jun 05 12:11:35 2026 +0000"
      },
      "message": "Add support for OpenSSL 4.0.\n\n* CMakeLists.txt, SConstruct: Check for X509_check_certificate_times().\n\n* buckets/ssl_buckets.c\n  (const_X509_NAME_p): Define as non-/const depending on OpenSSL version.\n   Replace all uses of \u0027X509_NAME *\u0027 with this typedef.\n  (get_subject_alt_names): Don\u0027t access ASN1_STRING fields directly.\n  (get_first_name_entry_data): New helper function. Retreives X509_NAME\n   entries with X509_NAME_get_index_by_NID() instead of the deprecated\n   X509_NAME_get_text_by_NID().\n  (validate_cert_hostname): Use get_first_name_entry_data() and remove\n   now-unused variables.\n  (validate_server_certificate): Use X509_check_certificate_times() if\n   available,\n  (set_X500_name_entry): New helper function for ...\n  (convert_X509_NAME_to_table): ... this implementation.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1935023 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "eb804c8b4ac4775d2f434923d9dedf5f5a153f70",
      "tree": "52db21e700e261c7f50591ac74e1e49eb74321c2",
      "parents": [
        "a7071c442947a6c0ee61e2187157a167fbee4d95"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jun 05 08:56:35 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jun 05 08:56:35 2026 +0000"
      },
      "message": "* serf.h (serf_linebuf_t.line): Update docstring reference to 1.5, not 1.4.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1934997 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "a7071c442947a6c0ee61e2187157a167fbee4d95",
      "tree": "f2b901ba54a91ebba065e3c7f39062bd25c7bf65",
      "parents": [
        "a62a4f60fc52dfb13ff2552bc0c721417c9c10fd"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sat May 09 11:02:45 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sat May 09 11:02:45 2026 +0000"
      },
      "message": "Update Github Actions trying to resolve a build failure on Windows.\n\nAccording to the GitHub documentation for windows-latest (at the time of\nwriting, see [1]), the image should contain Visual Studio Enterprise 2022 \n(internal version 17). However the error message for the workflow run\nindicate that Visual Studio 2026 (internal version 18) is installed\n(VSINSTALLDIR: C:\\Program Files\\Microsoft Visual Studio\\18\\Enterprise\\).\n\nForce the Visual Studio 17 (2022) generator builds to windows-2022. Add new\nbuilds on windows-latest using Visual Studio 18 (2026).\n\n* .github/workflows/windows-cmake.yml\n  (#matrix): As above\n\n[1] https://github.com/actions/runner-images/blob/ae00039c757055f46d9ecf46ae79f26fadad8ef4/images/windows/Windows2025-Readme.md\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1933983 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "a62a4f60fc52dfb13ff2552bc0c721417c9c10fd",
      "tree": "8d5ce24e32fb749281121433a236a2c6fad80c4f",
      "parents": [
        "8a3ee1733bbc0679cda64a7a0b6b6065c33f99d2"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sat May 09 10:47:13 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sat May 09 10:47:13 2026 +0000"
      },
      "message": "Borrow the Prepare Environment (Windows) step from Subversion to try to\nresolve CMake errors \"Could not find any instance of Visual Studio\".\n\n* .github/workflows/windows-cmake.yml\n  (#Prepare Environment (Windows)) New step\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1933981 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "8a3ee1733bbc0679cda64a7a0b6b6065c33f99d2",
      "tree": "c417ea9ac7ae2200b1dc304127bbb79a60c5c3db",
      "parents": [
        "57bb8775665a724d6db648ca30689de04103873b"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sat May 09 10:15:54 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sat May 09 10:15:54 2026 +0000"
      },
      "message": "Update Github Actions workflows to use a non-deprecated version of the \ncheckout action.\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1933977 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "57bb8775665a724d6db648ca30689de04103873b",
      "tree": "fe6a7ff160f139de1867115afb0c371e54658002",
      "parents": [
        "7e98c4d9248b90b7459d14bc5db7f3b85125b134"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sat Apr 25 15:23:57 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sat Apr 25 15:23:57 2026 +0000"
      },
      "message": "Remove explicit list of MSVC_VERSIONs. We need to actively maintain this list,\notherwise it isn\u0027t possible to build Serf with new versions of Visual Studio.\n\nInstead leave it to the user to determine an appropriate value if they have\nmore than one version of Visual Studio installed.\n\nIf MSVC_VERSION is not set, SCons will use the newest version of Visual Studio.\n\n* SConstruct\n  (): As above\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1933327 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "7e98c4d9248b90b7459d14bc5db7f3b85125b134",
      "tree": "5af08dcdd7226cbd02632b463027ccc34a938fad",
      "parents": [
        "477e0f6f321a8cb006152198edfae25452f93c9f"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 23 08:09:15 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 23 08:09:15 2026 +0000"
      },
      "message": "Do not compile the serf_spider test program if APR doesn\u0027t support threads.\n\n* build/scons_extras.py\n  (CheckAPRHasThreads): New custom test function.\n* SConstruct\n  (custom_tests): Add CheckAPRHasThreads.\n  (apr_has_threads): Perform the config test.\n  (TEST_PROGRAMS): Add serf_spider only if APR has threads.\n\n* test/CMakeLists.txt\n  (serf_check_apr_has_threads): New test function.\n  (SIMPLE_TEST_TARGETS): Add serf_spider only if APR has threads.\n* CMakeLists.txt: Add a note to the summary if APR doesn\u0027t have threads.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931481 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "477e0f6f321a8cb006152198edfae25452f93c9f",
      "tree": "4528fe99f849c2bb52f3dd131f193d50d513ebd9",
      "parents": [
        "a9dcc6a6cc0942ad6db311b46a76fc706397c25b"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 23 08:02:54 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 23 08:02:54 2026 +0000"
      },
      "message": "Follow up to r1931479: Ignore the asynchronous resolver tests if we don\u0027t\nhave an asynchronous resolver implementation.\n\n* test/test_context.c\n  (test_async_connection,\n   async_resolve,\n   test_async_resolve_cancel): Return early on APR_ENOTIMPL.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931480 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "a9dcc6a6cc0942ad6db311b46a76fc706397c25b",
      "tree": "dbfc9b2162bfd852924e5e2fd36e9389ea312df8",
      "parents": [
        "e7f8129849dbda244a811589bbf65cbd218e168d"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 23 07:24:23 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 23 07:24:23 2026 +0000"
      },
      "message": "Add missing async-resolver implementation if we have neither APR threads\nnor the Unbound library available.\n\n* src/resolve.c\n  (serf__create_resolve_context): Implement when !HAVE_ASYNC_RESOLVER.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931479 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e7f8129849dbda244a811589bbf65cbd218e168d",
      "tree": "bb49317230326c6b561404bb096813b8cbb57016",
      "parents": [
        "7320fea12a0036fd6ac210e58191b6a83c2a64fd"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 23 06:38:32 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 23 06:38:32 2026 +0000"
      },
      "message": "Build and tests should work when APR doesn\u0027t support threads.\n\n* auth/auth.c\n  (cleanup_user_scheme): Don\u0027t call init_authn_schemes_guard() explicitly.\n\n* test/MockHTTPinC/MockHTTP_server.c\n  (run_thread): Define function only if APR supports threads.\n  (mhStartServer, mhStopServer): Move threading-specific local variables\n   inside the APR_HAS_THREADS conditional block.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931478 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "7320fea12a0036fd6ac210e58191b6a83c2a64fd",
      "tree": "4a4d1ecad3ad01b6174ecf9d3b446af6dd532dda",
      "parents": [
        "fdb0f7cd1e26572f3b5f277e21dd799b9cc71c68"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jan 14 18:13:48 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jan 14 18:13:48 2026 +0000"
      },
      "message": "Bump the copyright year.\n\nA big thank you to the Founding Fathers of Serfdom for putting\nthe year into just this one file.\n\n* NOTCE: Change 2025 to 2026.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931320 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "fdb0f7cd1e26572f3b5f277e21dd799b9cc71c68",
      "tree": "9c20d24c8dcc3dc168c7dc66cd8c317e6b31ee69",
      "parents": [
        "756c6b371df57c761061a8ff299509089bb370a9"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Jan 13 14:14:11 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Jan 13 14:14:11 2026 +0000"
      },
      "message": "Allow tests to only output messages from error callbacks, without\ncluttering the output with low-level logging.\n\n* test/test_serf.h\n  (TEST_VERBOSE): Explain what the value does.\n\n* test/test_util.c\n  (setup_test_context): Register the error callback if TEST_VERBOSE \u003e 0.\n   Configure console logging if TEST_VERBOSE \u003e 1.\n  (test__log, test__log_nopref, test__log_skt): Require that the verbose_flag\n   is greater than 1 in order to log anything.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931293 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "756c6b371df57c761061a8ff299509089bb370a9",
      "tree": "474d530d7843d8a20f6addfcc13acec151414d00",
      "parents": [
        "dd9edf447b463200c95ac4aeaf384acb3ca0cd17"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Jan 13 13:54:30 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Jan 13 13:54:30 2026 +0000"
      },
      "message": "Fix OCSP tests on Fedora and derivatives. It turns out we were signing OCSP\nresponses with SHA-1, which is disabled in OpenSSL builds on those platforms.\n\nIn addition, perform three *headbang*s for not catching this when I refreshed\nthe test certificates to also not use SHA-1. My wall is now slightly dented.\n\n* test/test_ssl.c\n  (create_ocsp_response): Use EVP_sha256() instead of EVP_sha1().\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931292 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "dd9edf447b463200c95ac4aeaf384acb3ca0cd17",
      "tree": "fd3258fedf7a8c0997c5fa2309e9f253641d1d4b",
      "parents": [
        "ea59abe88e28111da28a67f1815c77da0e145da3"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 12 23:56:57 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 12 23:56:57 2026 +0000"
      },
      "message": "Add a simple test to verify error propagation through the callbacks.\nOnly for context and outgoing connection/requests for now, no incoming\nor SSL stuff.\n\n* serf_private.h\n  (serf__global_error_callback): Declare the default global error callback.\n* src/error_callbacks.c\n  (serf__global_error_callback): Renamed from default_global_error_callback\n   and made public instead of static. All references updated.\n* test/test_internal.c\n  (struct error_callback_baton,\n   error_cb_request_setup,\n   error_cb_error_callback): New; private helpers.\n  (test_global_error_callback): New test case.\n  (test_internal): Register test_global_error_callback.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931277 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "ea59abe88e28111da28a67f1815c77da0e145da3",
      "tree": "fbe163227a2176c9564bb283e18df23dce7cfda0",
      "parents": [
        "9a7e6a3c8e24921ff34c413fa43d7451f5e2ab59"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jan 10 21:12:27 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jan 10 21:12:27 2026 +0000"
      },
      "message": "Make SSL tests pass with LibreSSL.\n\n* test/test_ssl.c\n  (test_ssl_handshake,\n   test_ssl_certificate_chain_all_from_server,\n   test_ssl_expired_server_cert,\n   test_ssl_future_server_cert,\n   test_setup_ssltunnel,\n   test_ssl_renegotiate,\n   test_ssl_ocsp_response_error_and_override,\n   test_ssl_server_cert_with_cn_nul_byte,\n   test_ssl_server_cert_with_san_nul_byt,\n   test_ssl_server_cert_with_cnsan_nul_byte,\n   test_ssl_alpn_negotiate): Tweak expected results if the symbol\n    LIBRESSL_VERSION_NUMBER is defined.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931219 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "9a7e6a3c8e24921ff34c413fa43d7451f5e2ab59",
      "tree": "a21011887a5229467f0fd077b52d215f4b50cd43",
      "parents": [
        "e4a56136048a990be2ba6f6ebda5015f95dcda76"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jan 10 13:48:21 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jan 10 13:48:21 2026 +0000"
      },
      "message": "In the CMake build, show dependency versions in the summary.\n\n* CMakeLists.txt:\n   - Expand the summary with dependency version numbers.\n   - Detect LibreSSL and annotate that in the summary.\n   - The use of Unbound is no longer considered experimental.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931217 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e4a56136048a990be2ba6f6ebda5015f95dcda76",
      "tree": "42b7c0b6d68b3638ca4e5320050aeb4d21c6c31e",
      "parents": [
        "65ea3e0a44a101fc0606463398ead228ca9d037a"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jan 10 05:40:34 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jan 10 05:40:34 2026 +0000"
      },
      "message": "Remove support for APR older than 1.3.0.\n\n* README: Add a note about dependency versions.\n   Also: remove the \"People\" heading, as it\u0027s obsolete.\n* serf.h: Check APR version at compile time.\n* serf_private.h\n  (APR_VERSION_AT_LEAST): Remove our version of this macro, user APR\u0027s.\n  (BROKEN_WSAPOLL): Update comment and conditions.\n* src/init_once.c: Don\u0027t jump through hoops for APR-0.9.x.\n* test/MockHTTPinC/MockHTTP_server.c\n  (BROKEN_WSAPOLL): Do as serf_private.h does.\n* test/serf_get.c\n  (main): Remove conditional code for older APR versions.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931210 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "65ea3e0a44a101fc0606463398ead228ca9d037a",
      "tree": "64505ffb5a43529d0e266dce55c82631c66350c1",
      "parents": [
        "de43a567907c7680105b97aedc2c6a44b3bbbb87"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jan 10 03:47:38 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jan 10 03:47:38 2026 +0000"
      },
      "message": "Make #include directives more consistent throughout the code.\nStandard and system headers go first, dependency next, then\nour public headers and finally our private headers. Make the\nuse of #include \u003cheader\u003e vs. #include \"header\" semantically\ncorrect and consistent, too. Also:\n\n* serf_private.h: Include serf.h because of all the typedefs.\n* auth/auth.h: Remove unused include of auth_spnego.h and\n   include the needed serf_private.h.\n* auth/auth_spnego.c: Remove headers that are alread included\n   in auth_spnego.h.\n* buckets/allocator.c,\n  buckets/brotli_buckets.c,\n  buckets/limit_buckets.c,\n  buckets/socket_buckets.c: Don\u0027t include serf_private.h.\n* protocols/fcgi_buckets.h,\n  protocols/fcgi_protocol.h,\n  protocols/http2_buckets.h: Do include serf_private.h.\n* protocols/fcgi_protocol.c: Don\u0027t include serf_bucket_util.h.\n* src/context.c,\n  src/deprecated.c,\n  src/outgoing.c,\n  src/pump.c: Don\u0027t include serf_bucket_util.h.\n* src/inet_pton.c,\n  src/init_once.c,\n  src/syntax.c: Don\u0027t include serf.h.\n* test/test_internal.c: Don\u0027t include serf_bucket_util.h.\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931208 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "de43a567907c7680105b97aedc2c6a44b3bbbb87",
      "tree": "5abaacbfe5455ceb25de8dc5403eae5db54953ba",
      "parents": [
        "5ec118afea1e7306bc43913631f046e55c2b1502"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 05 18:01:26 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 05 18:01:26 2026 +0000"
      },
      "message": "Add error callbacks to the async resolver code where indicated.\n\n* src/resolve.c\n  (create_resolve_context,\n   resolve_convert,\n   resolve_callback,\n   resolve_address_async,\n   run_async_resolver_loop[unbound]): Replace placeholder comments with\n    calls to the context error callback. Keep loggin in place.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931129 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "5ec118afea1e7306bc43913631f046e55c2b1502",
      "tree": "a467d75bdea306a0cf00d7f55204532b031e37ca",
      "parents": [
        "c667c64449943b750ac2411aa192c18e7d217dda"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 05 16:44:26 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 05 16:44:26 2026 +0000"
      },
      "message": "[SERF-211] Finalize the asynchronouse resolver API. This adds a private\ninterface for waking the context from a poll, so that the resolver can\nsignal when results are available.\n\n* serf.h\n  (serf_context_create_ex): Make the docstring a docstring.\n  (serf_address_resolved_t,\n   serf_address_resolve_async,\n   serf_connection_created_t,\n   serf_connection_create_async): Remove the experimental comments\n    and fix some typos in the docstrings.\n\n* serf_private.h\n  (SERF_IO_WAKEUP_PIPE): New constant for the io baton type.\n  (serf_context_t::wakeup): New member.\n  (serf__context_wakeup): New prototype.\n\n* src/context.c: Include \u003capr_atomic.h\u003e\n  (WAKEUP_LOOPBACK, WAKEUP_FAMILY): New constants.\n  (serf__context_wakeup_t): New struct for the self-pinging wakeup socket.\n  (init_wakeup, process_wakeup): New private helper functions.\n  (serf__context_wakeup): Implement here.\n  (serf_context_create_ex): Initialize the wakeup socket.\n  (serf_event_trigger): Process the wakeup signal.\n\n* src/resolve.c: Remove the experimental/todo top-level comment.\n  (resolve): Tweak log message.\n  (push_resolve_result): Wake the context when a new result is available.\n  (serf__process_async_resolve_results): Return immediately if the async\n   resolver was not properly initialized. Add debug logging.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931128 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "c667c64449943b750ac2411aa192c18e7d217dda",
      "tree": "df816da35e77d1406b1fb012fbfbda4141954c47",
      "parents": [
        "7b1ac48305d2ba3f9ed77c0fbaa0d66b287b628d"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jan 04 21:35:26 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jan 04 21:35:26 2026 +0000"
      },
      "message": "Fix a fwe more cases where Brane\u0027s spell check failed to find all errors[1]\n\n* serf.h: Fix spelling in comments. No functional change.\n\n[1]\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931111 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "7b1ac48305d2ba3f9ed77c0fbaa0d66b287b628d",
      "tree": "1c4150d41b37655c4ad0380c742a2131bb85a47f",
      "parents": [
        "07b03129034a6d9f109faa291833f8360297a466"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jan 04 20:53:43 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jan 04 20:53:43 2026 +0000"
      },
      "message": "Replace version 1.4 with 1.5 in all @since docstrings.\n\n1.4 was never released so this should make it less confusing for everyone\n\n* serf.h,\n  serf_bucket_types.h,\n  serf_bucket_utils.h: As above\n\nSee SERF-210\n\nSuggested by: brane\n\n[1] https://lists.apache.org/thread/s7mznhp5hsr2x3t2p9copqczcz5g7gdg\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931109 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "07b03129034a6d9f109faa291833f8360297a466",
      "tree": "606d66e0938803a2d80d58c001d4b097ff3cb4ca",
      "parents": [
        "720867b782e1e54841a707fa78da19266062aa75"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 04 18:36:06 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 04 18:36:06 2026 +0000"
      },
      "message": "Follow up to r1931058: remove an empty conditional block.\n\n* buckets/ssl_buckets.c\n  (ssl_need_client_cert): Remove an #if/#endif that were left behind\n   after the function split.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931108 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "720867b782e1e54841a707fa78da19266062aa75",
      "tree": "b62f44893165bb343e81a506c2372530ca4881d9",
      "parents": [
        "f1975584f31846e4887a3d263599250c163093f7"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 04 17:45:33 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 04 17:45:33 2026 +0000"
      },
      "message": "Fix warnings and errors when building with LibreSSL and OpenSSL 1.1.1w.\n\n* buckets/ssl_buckets.c\n  (ssl_x509_ex_data_idx): Make conditional on SERF_HAVE_OSSL_STORE_OPEN_EX.\n\n* test/test_ssl.c\n  (client_cert_uri_conn_setup): Likewise, make conditional.\n  (SERF__OPENSSL_VERSION_PREREQ): Define this macro to expand to false if\n   OPENSSL_VERSION_PREREQ is not defined, otherwise make it an alias.\n  (test_ssl_revoked_server_cert,\n   test_ssl_ocsp_verify_response_no_signer): Use our new ...PREREQ macro\n   instead of the previous invalid usage that broke compiling with older\n   versions of OpenSSL.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931107 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f1975584f31846e4887a3d263599250c163093f7",
      "tree": "3aa24d9609941f8cbc5f695ee7dbd2bc56bd5937",
      "parents": [
        "0f8a0fa4d8d7aaef71df42a1157697717d3e58b7"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 04 10:28:45 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 04 10:28:45 2026 +0000"
      },
      "message": "Tie in SSL context error reporting with the context/connection callbacks.\n\n* serf.h\n  (serf_context_error_callback_set,\n   serf_connection_error_callback_set,\n   serf_incoming_error_callback_set): Add a note about baton lifetimes.\n\n* serf_bucket_types.h: Move the encrypt bucket declarations next to the\n   decrypt bucket declarations, they belong together.\n  (serf_bucket_ssl_encrypt_create,\n   serf_bucket_ssl_encrypt_context_get,\n   serf_bucket_ssl_decrypt_create,\n   serf_bucket_ssl_decrypt_context_get): Add sorely missing docstrings.\n  (serf_ssl_use_context_error_callback,\n   serf_ssl_use_connection_error_callback,\n   serf_ssl_use_incoming_error_callback): New prototypes.\n\n* serf_private.h\n  (serf__request_ssl_error,\n   serf__response_ssl_error,\n   serf__incoming_request_ssl_error,\n   serf__incoming_response_ssl_error): Remove prototypes.\n\n* src/error_callbacks.c\n  (serf__request_ssl_error,\n   serf__response_ssl_error,\n   serf__incoming_request_ssl_error,\n   serf__incoming_response_ssl_error): Remove unused functions.\n\n* buckets/ssl_buckets.c\n  (serf_ssl_context_t): Add err_ctx, an error context field. Replace almost\n   all references to global_error_ctx with serf_ssl_context_t::err_ctx.\n  (ssl_init_context): Initialize err_ctx from global_error_ctx.\n  (serf_ssl_use_context_error_callback,\n   serf_ssl_use_connection_error_callback,\n   serf_ssl_use_incoming_error_callback): Implement here.\n\n* test/serf_get.c: Include serf_bucket_types.h.\n  (conn_setup): Make new SSL contexts use the connection\u0027s error callback.\n  (global_error_callback,\n   connection_error_callback): New error callback functions.\n  (main): Register global and per-connection error callbacks.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931089 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "0f8a0fa4d8d7aaef71df42a1157697717d3e58b7",
      "tree": "1e0c6128c383cba45dc7fca8bab5f282b612c25d",
      "parents": [
        "af7983a7b7703e1bb0a91cbea9b334c0a6bd0168"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 02 19:26:19 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 02 19:26:19 2026 +0000"
      },
      "message": "Split the client certificate callback implementation into two functions,\none that uses OSSL_STORE and the ancient/original that reads PKCS#12 files.\n\n* buckets/ssl_buckets.c\n  (ssl_read_client_cert_uri): New, conditionally present. Reads certificates\n   and private keys from a keystore, which can be a PKCS#12 file or an\n   OS-specific certificat stor URI. The implementation was moved from\n   ssl_need_client_cert() with minor changes.\n\n  (ssl_need_client_cert): Delegate to ssl_read_client_cert_uri() first, then\n   continue with the file-based attempt if no certificates were found.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931058 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "af7983a7b7703e1bb0a91cbea9b334c0a6bd0168",
      "tree": "4ef39542800ee72ce335e3d4acff633667d4661d",
      "parents": [
        "ccaf5191e80a1541f30746a47c87939292c60c2e"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Fri Jan 02 14:10:38 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Fri Jan 02 14:10:38 2026 +0000"
      },
      "message": "Followup to r1931047: Spellfix, no functional change\n\n* serf_private.h\n  Fix spelling in a comment\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931057 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "ccaf5191e80a1541f30746a47c87939292c60c2e",
      "tree": "d19a757ac349932d5c691870eb8b16a6da632f06",
      "parents": [
        "6aad3490e3232d4e5d856490b35b2e9285953b22"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Fri Jan 02 14:10:04 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Fri Jan 02 14:10:04 2026 +0000"
      },
      "message": "Followup to r1927627: Spellfix, no functional change\n\n* serf.h\n  Fix spelling in a comment\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931056 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "6aad3490e3232d4e5d856490b35b2e9285953b22",
      "tree": "ade04612ab2fbeca1a2095b8375328ae67907c07",
      "parents": [
        "257f68bfd250b4836bbf944497989c71ca312731"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jan 01 18:45:34 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jan 01 18:45:34 2026 +0000"
      },
      "message": "Added error callback infrastructure.\n\nThis adds three levels and four kinds of callbacks for reporting errors\nfrom Serf: global, context-specific and (incoming or outgoing) connection\n-specific. Request and response code will use their their connection\u0027s\ncallback, but add extra flags to indicate the source of the error message.\n\nThe SSL code in ssl_buckets.c uses an error context that callers can (or\nrather \"will be able to\") define so that error messages get sent to\nthe appropriate, caller-specific callback. This part is not yet implemented\nbecause it requires revising some of our SSL APIs.\n\n* CMakeLists.txt: Check if \u003cunistd.h\u003e is available, used by tests.\n  (SOURCES): Add the error_callbacks.c file.\n* SConstruct: Check for \u003cunistd.h\u003e, as above.\n\n* serf.h: Add public error callback prototypes and constants.\n   Too many of them to list here individually.\n\n* serf_bucket_types.h\n  (serf_ssl_error_cb_set, serf_ssl_error_cb_t): Removed, obsolete.\n\n* serf_private.h: Add private helpers for sending error messages to\n   callbacks and the ssl_context infrastructure for handling errors.\n  (serf_context_t): Add error_callback and error_callback_baton.\n  (serf_incoming_t): Likewise.\n  (serf_connection_t): Here, too.\n\n* buckets/ssl_buckets.c:\n   Update all calls to the removed ssl-specific error callback to use\n   the new dispatch_ssl_error.\n  (serf_ssl_context_t) Remove error_callback and error_baton.\n  (global_error_ctx): New fallback error context, sends to global callback.\n  (dispatch_ssl_error): New, calls an error context\u0027s dispatcher.\n  (log_ssl_error): Use dispatch_ssl_error().\n\n* src/error_callbacks.c: New file. Implements all the private helpers\n   declared in serf_private.h, and also:\n  (serf_global_error_callback_set): Implement here.\n\n* src/context.c\n  (serf_context_error_callback_set): Implement here.\n\n* src/incoming.c\n  (serf_incoming_error_callback_set): Implement here.\n\n* src/outgoing.c\n  (serf_connection_error_callback_set): Implement here.\n\n* test/test_util.c\n  (isatty): Import from headers if available, otherwise fake it.\n  (test_error_callback): New, an error callback for the test suite.\n  (setup_test_context): Register test_error_callback in verbose mode.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931047 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "257f68bfd250b4836bbf944497989c71ca312731",
      "tree": "db9eacca6bcea0318db71d9898802caaaa200711",
      "parents": [
        "b63c1bb054e54a3017b93e6a6d12c2ba1c2124c8"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jan 01 17:33:48 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jan 01 17:33:48 2026 +0000"
      },
      "message": "Fix a bug in the client certificate loading logic. It was hidden from\nview because the error that should have been reported gets thrown away\nwhen the error callback was not defined.\n\n* buckets/ssl_buckets.c (ssl_need_client_cert):\n   Add a rather caustic FIXME that the function should be split in two.\n   Use OSSL_STORE_open() instead of the _ex() variant because we don\u0027t\n   use any of the extended parameters.\n   When iterating over a certificate store\u0027s contents, check the EOF\n   condition only after attempting to read the next item.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931046 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "b63c1bb054e54a3017b93e6a6d12c2ba1c2124c8",
      "tree": "b9256a1c4adb523aa14310d6dfbd86e1132616a2",
      "parents": [
        "c542a6ede7ed3787a551fe6133736211b21c094e"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jan 01 11:28:58 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jan 01 11:28:58 2026 +0000"
      },
      "message": "In the CMake build: In some cases, using a target instead of a library\npath makes a configure check fail. Make sure to use the right path to the\nBrotli decoder library with both pkg-config and find_package().\n\n* CMakeLists.txt: Tell pkg-config to look for \"Brotly_Decode\" and then,\n   similarly to the OpenSSL case, set variables that are compatible\n   with the results of the FindBrotli.cmake script. Use the library\n   path instead of the imported target in CheckFunciton().\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931031 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "c542a6ede7ed3787a551fe6133736211b21c094e",
      "tree": "060ef211d27f9afcabf7dd538c68c42a78eacaba",
      "parents": [
        "d88238d561e951975d08aa7d87241de05c643c6f"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Dec 31 16:25:52 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Dec 31 16:25:52 2025 +0000"
      },
      "message": "Follow up to r1931007: make conditional compilation more portable.\n\n* test/test_ssl.c\n  (test_ssl_revoked_server_cert): Move the #if outside of the macro\n   invocation, and use OPENSSL_VERSION_PREREQ for OpenSSL 3.x checks.\n  (test_ssl_ocsp_verify_response_no_signer): Use OPENSSL_VERSION_PREREQ.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931008 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "d88238d561e951975d08aa7d87241de05c643c6f",
      "tree": "dca4bddeda6b4c0a1151940d34bd568b74d632e1",
      "parents": [
        "caae5da7a9ec66786362e5c2bddb553cb40de7c6"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Dec 31 15:51:41 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Dec 31 15:51:41 2025 +0000"
      },
      "message": "Fix SSL tests with OpenSSL 3.6+.\n\n* test/test_ssl.c (test_ssl_revoked_server_cert):\n   Adjust the expected output for changed error handling in OpenSSL 3.6.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1931007 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "caae5da7a9ec66786362e5c2bddb553cb40de7c6",
      "tree": "502e9535d90ca25d90037f95f31b634e649d8c48",
      "parents": [
        "8fd548f3b397a6a089e9e4eae7033b9224cf9350"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Dec 30 23:59:39 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Dec 30 23:59:39 2025 +0000"
      },
      "message": "Fix our variable naming in the CMake build. CMake\u0027s pkg-config finder\nsets BROTLI_INCLUDE_DIR when searching for the Brotli libraries.\n\n* CMakeLists.txt,\n  build/FindBrotli.cmake:\n   Use BROTLI_INCLUDE_DIR instead of BROTLI_INCLUDES.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1930991 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "8fd548f3b397a6a089e9e4eae7033b9224cf9350",
      "tree": "15a7563cdeffa3a3061c45485bed036d5eeb16fe",
      "parents": [
        "f6dd580cdba4244d10468ba6f0f7cc4834d0e5c9"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Dec 30 21:48:26 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Dec 30 21:48:26 2025 +0000"
      },
      "message": "Add pipeline usage debug statistics for serf_get.\n\n* test/serf_get.c (main): Track how many requests are pending (were sent\n   but did not yet receive a response) there are for each active connection.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1930990 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f6dd580cdba4244d10468ba6f0f7cc4834d0e5c9",
      "tree": "69b3f0ea6e72bc342c7b95272acd50fefefe01e3",
      "parents": [
        "f8f87ae5d037b36c69ba237cdc5cd5356e179d27"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Dec 30 21:18:57 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Dec 30 21:18:57 2025 +0000"
      },
      "message": "Make the hpack_huffman script compatible with Python 3. The\noutput of the updated script is exactly the same as before.\n\n* buckets/hpack_huffman.py:\n   Update all print statements to print() function calls.\n* .[svn:ignore]: Ignore the .ruff_cache directory.\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1930989 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f8f87ae5d037b36c69ba237cdc5cd5356e179d27",
      "tree": "6e556ff8906f49010042d35e768abf92e849c3b3",
      "parents": [
        "e97f2ba12f18f94ad3d0a43562a3b8e9a672b39a"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Dec 13 02:11:51 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Dec 13 02:11:51 2025 +0000"
      },
      "message": "Add a simple HTTP server to aid testing of authentication handlers.\nCreated speifically for SERF-195, but could be useful in other contexts.\n\nIncidentally fix serf_get so that authentication works when using\nmultiple connections.\n\n* test/manual/authserver.py: New.\n* test/serf_get.c\n  (handler_baton_t): New field conn_count.\n  (credentials_callback): Allow as many authentication attempts\n   as there are concurrent connections.\n  (main): Initialize handler_baton_t::conn_count.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1930478 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e97f2ba12f18f94ad3d0a43562a3b8e9a672b39a",
      "tree": "7e7cfcdc3030a0c690d49a4690f800a48ffa2b2f",
      "parents": [
        "f2b5d96eb55572216324e80a5c480fd64c94b8bd"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Dec 13 02:06:00 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Dec 13 02:06:00 2025 +0000"
      },
      "message": "Don\u0027t pollute the connection pool with the cleartext password.\n\n* auth/auth_basic.c (serf__handle_basic_auth):\n   Allocate the temporary Basic auth credentials in the scratch\n   pool which is destroyed once the authentication header is set.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1930477 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f2b5d96eb55572216324e80a5c480fd64c94b8bd",
      "tree": "e35e765d19f79fc977cae9ea349247ef3529eb03",
      "parents": [
        "e00fcb170da10025d8428c60385ec76919249755"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@apache.org",
        "time": "Wed Sep 24 04:33:30 2025 +0000"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@apache.org",
        "time": "Wed Sep 24 04:33:30 2025 +0000"
      },
      "message": "Tweak svn:ignore for build artifacts from SCons and CMake\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1928721 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e00fcb170da10025d8428c60385ec76919249755",
      "tree": "e35e765d19f79fc977cae9ea349247ef3529eb03",
      "parents": [
        "b95d8c489a6939f3d5751a47e0ca9d051d021115"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@apache.org",
        "time": "Wed Sep 24 03:53:29 2025 +0000"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@apache.org",
        "time": "Wed Sep 24 03:53:29 2025 +0000"
      },
      "message": "Remove draft work that will not be implemented in the near term.\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1928718 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "b95d8c489a6939f3d5751a47e0ca9d051d021115",
      "tree": "0a09d70f306bd7e7b1d42e3fa26495c68234835e",
      "parents": [
        "4718ecd9d954b4295138155cbc9ee32896fb460c"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Aug 06 23:47:27 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Aug 06 23:47:27 2025 +0000"
      },
      "message": "Remove the serf_connection_create3() public function. It was added when Serf\ndid not have an asynchronous DNS resolver and is now functionally replaced\nby serf_connection_create_async().\n\n* serf.h\n  (serf_connection_create3): Removed.\n  (serf_connection_create,\n   serf_connection_create2,\n   serf_connection_create_async,\n   serf_address_resolve_async): Update the documentation.\n* src/outgoing.c\n  (create_connection): Renamed from serf_connection_create3 and made private.\n* src/resolve.c\n  (serf_address_resolve_async): Ignore proxy configuration, that part is\n   already handled by serf_connection_create_async.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927654 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "4718ecd9d954b4295138155cbc9ee32896fb460c",
      "tree": "674776a2f39a17d5bfb5caa17bb2a37920208f97",
      "parents": [
        "a1556caf8a02a7abe9ff643aef5d317c092ed3c8"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Aug 06 07:52:54 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Aug 06 07:52:54 2025 +0000"
      },
      "message": "Fix another integer narrowing warning.\n\n* buckets/http2_frame_buckets.c\n  (serf__bucket_http2_frame_create): Change the max_payload_size argument\n   from an apr_uint32_t to an apr_size_t, because that\u0027s how we store it\n   in our internal data structures. Move the size check to the beginning\n   of the function so that we can never use a payload size that\u0027s too large.\n\n* protocols/http2_buckets.h\n  (serf__bucket_http2_frame_create): Update the prototype.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927634 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "a1556caf8a02a7abe9ff643aef5d317c092ed3c8",
      "tree": "9660dd5f5663c26e3d9aa55db00eccb1fd64bf07",
      "parents": [
        "c45ed6202a91e8f67fcb35c2375040da118e57c7"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Aug 06 07:45:01 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Aug 06 07:45:01 2025 +0000"
      },
      "message": "* buckets/hpack_buckets.c\n  (serf__bucket_hpack_setx): Use the new serf__tolower_inplace() instead\n   of open-coding the same logic.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927633 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "c45ed6202a91e8f67fcb35c2375040da118e57c7",
      "tree": "5a17335842939558ce7bf695731e6cafa9295704",
      "parents": [
        "b55edb86b7a7525111e2bcbcac0284491ca08655"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Aug 06 05:13:16 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Aug 06 05:13:16 2025 +0000"
      },
      "message": "SERF-207: The Digest authn provider verifies received parameters.\n\n\n* serf_private.h\n  (serf__find_token): New prototype.\n\n* src/syntax.c\n  (skip_not_space): New; skips non-space characters.\n  (serf__find_token): New; finds a token in a space-separated list.\n* auth/auth_digest.c\n  (serf__handle_digest_auth): Verify that incoming authn parameters are\n   supported: we only support the (default) MD5 hash and the \"auth\" qop.\n\n* test/test_auth.c\n  (digest_check_parameters,\n   test_digest_valid_params,\n   test_digest_invalid_params): New test functions.\n  (test_auth): Register the new test cases.\n* test/test_internal.c\n  (test_find_token): New test for serf__find_token().\n  (test_internal): Register the new test case.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927628 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "b55edb86b7a7525111e2bcbcac0284491ca08655",
      "tree": "f7e0b957f4cbea60f7257367232e576d7be5dde8",
      "parents": [
        "c5fe01e09e62be35c10eb85ba3e10840bf5c6de3",
        "eea4473eb4869973e96dca4376d8a0ac7eb6b2e2"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Aug 06 04:59:43 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Aug 06 04:59:43 2025 +0000"
      },
      "message": "Merged the user-defined-authn branch to trunk.\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927627 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "eea4473eb4869973e96dca4376d8a0ac7eb6b2e2",
      "tree": "f7e0b957f4cbea60f7257367232e576d7be5dde8",
      "parents": [
        "fb4b6697f6349a80212273ae5db65b40bc0903db",
        "c5fe01e09e62be35c10eb85ba3e10840bf5c6de3"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Aug 04 10:32:19 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Aug 04 10:32:19 2025 +0000"
      },
      "message": "On the user-defined-authn branch: sync with trunk r1927496.\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/branches/user-defined-authn@1927608 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "c5fe01e09e62be35c10eb85ba3e10840bf5c6de3",
      "tree": "c4afc22c26af92b6b10fec04a779a1b37775820e",
      "parents": [
        "fc79b45ddbfc1276a75487510684200b0d362e3a"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Aug 04 10:01:39 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Aug 04 10:01:39 2025 +0000"
      },
      "message": "* SConstruct: Add support for using the Unbound async resolver.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927607 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "fc79b45ddbfc1276a75487510684200b0d362e3a",
      "tree": "7b77e2937be13785a7a81a1eb8c0786d1074b0a6",
      "parents": [
        "57e9a9cf0f385bcaed18e2d8f6157021a7ca9594"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Aug 04 09:15:23 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Aug 04 09:15:23 2025 +0000"
      },
      "message": "In the CMake build: Search for most dependencies with pkg-config first,\nand find_package if that fails.\n\n* CMakeLists.txt:\n   - Use pkg-config to look for OpenSSL, zlib, Brotli, GSSAPI and Unbound.\n   - Write the pkg-config file with dependencies as appropriate.\n* build/FindUnbound.cmake: Remove pkg-config related parts.\n* build/SerfFindPkgConfig.cmake: New.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927605 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "57e9a9cf0f385bcaed18e2d8f6157021a7ca9594",
      "tree": "1199c7d6d1d2900c48f6f3645864078c7a119af7",
      "parents": [
        "35434dee02a19bd14f66da41f7adab6883766c45"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Aug 04 05:26:05 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Aug 04 05:26:05 2025 +0000"
      },
      "message": "Build system improvements.\n\n* SConstruct:\n   - Better default values for dependency and install locations.\n   - Generate a valid pkg-config file on Windows, and add importand\n     build definitions to it (inherited from APR).\n   - Use the common exports generator, retire gen-def.py.\n\n* CMakeLists.txt:\n   - Properly install debug info files in multi-config builds.\n   - Update pkg-config generation to match SConstruct.\n   - Show the pkg-config location in the summary.\n\n* build/gen_def.py: Removed.\n* build/serf.pc.in\n  (@REQUIRES@): Renamed from @PC_REQUIRES@.\n  (@CFLAGS@): New placeholdsr.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927602 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "35434dee02a19bd14f66da41f7adab6883766c45",
      "tree": "157c0147a5c027ab3f6d97b37630675117b3067d",
      "parents": [
        "ce4cc3a85eb9d47ddf9cc1552c6901dd001e7087"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Aug 02 22:23:57 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Aug 02 22:23:57 2025 +0000"
      },
      "message": "Improve the CMake build: add options to disable optional dependencies\neven when they\u0027re available and found in the configuration step. Also,\nalways include the pkg-config file, including on Windows, where it\u0027s\nnow expected to be available at least with vcpkg dependencies.\n\n* CMakeLists.txt: Always install the pkg-config file, and move the\n   dependency on libssl.pc and libcrypto.pc to the CMake file.\n  (USE_BROTLI, USE_GSSAPI, USE_UNBOUND): New configuration options.\n   On by default, use them to decide when to search for these\n   optional dependencies.\n\n* SConstruct\n  (PC_REQUIRES): Add libssl and libcrypto.\n* build/serf.pc.in\n  (Requires.private): Remove default libssl and libcrypto.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927587 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "ce4cc3a85eb9d47ddf9cc1552c6901dd001e7087",
      "tree": "c62c487845e7038148c40c448c4d7c1c795bab93",
      "parents": [
        "8c36696ba34d68f2a2486b091826cc21d661ec35"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Aug 02 12:02:09 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Aug 02 12:02:09 2025 +0000"
      },
      "message": "In the CMake build, look for Unbound. The SCons build doesn\u0027t support this\nyet, it only handles the new addition to the pkg-config file template.\n\n* CMakeLists.txt:\n   - Find Unbound.\n   - Remove the temporary hack for using Unbound in the build.\n   - Use the new variables from FindUnbound to generate the pkg-config file.\n* SConstruct\n  (PC_REQUIRES): New variable, substitute it into the pkg-config file.\n* build/FindUnbound.cmake: New; Find Unbound, either through pkg-config\n   or the old-fashioned way.\n* build/SerfMacOS.cmake: Find \"unbound\" in Homebrew or MacPorts.\n* build/serf.pc.in: Add the @PC_REQUIRES@ substitution for private\n   dependencies that are available through pkg-config.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927582 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "8c36696ba34d68f2a2486b091826cc21d661ec35",
      "tree": "fa07956efb5c3a588d992ec0596aca236f26dc40",
      "parents": [
        "3df8922c5050275333f2244e47b7c423718e1d5d"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Aug 02 11:06:03 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Aug 02 11:06:03 2025 +0000"
      },
      "message": "In the CMake build, fix APR (2.x) and APR-Util with external modules.\n\n* build/FindAPR.cmake\n  (APR_EXTRALIBS): Also include --ldflags for linking dependent libraries.\n* build/FindAPRUtil.cmake\n  (APRUTIL_EXTRALIBS): Likewise.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927581 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "fb4b6697f6349a80212273ae5db65b40bc0903db",
      "tree": "81e802c9da95c97b7d4458510286b524009a7902",
      "parents": [
        "82f0723f67a62d9308a9f7c247a52ca0c8871626"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 27 22:44:04 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 27 22:44:04 2025 +0000"
      },
      "message": "On the user-defined-authn branch: Remove the character classification\ntable. It turns out that range checks are faster than table lookups.\nWhich I should have known.\n\n* src/genctype.py: Removed.\n* src/syntax.c:\n   - Declare string functions through \u003capr_want.h\u003e\n   - Remove the character classification table and macros.\n  (ct_isalnum): New; finds ASCII digits, uppercase and lowercase letters.\n  (ct_istoken, ct_istoken68): Reimplement with range checks.\n  (skip_space): Likewses; use strspn instead.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/branches/user-defined-authn@1927498 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "82f0723f67a62d9308a9f7c247a52ca0c8871626",
      "tree": "0d9bb42e2ba382ed461f43af494a97443416e0d8",
      "parents": [
        "bf0fd03c6b2005035230eb056ab5f096956d6377",
        "3df8922c5050275333f2244e47b7c423718e1d5d"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 27 16:57:54 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 27 16:57:54 2025 +0000"
      },
      "message": "On the user-defined-authn branch: sync with trunk r1927495.\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/branches/user-defined-authn@1927496 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "3df8922c5050275333f2244e47b7c423718e1d5d",
      "tree": "b52b0a8f97d175bff442482f442db7b754dd1ae6",
      "parents": [
        "59108e4a12fe06b56e10631f545cc33f2bff4dc8"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 27 16:55:29 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 27 16:55:29 2025 +0000"
      },
      "message": "* src/resolve.c: Update the todo list and comments.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927495 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "59108e4a12fe06b56e10631f545cc33f2bff4dc8",
      "tree": "69eb595c231f012cf2bc87f24ad2deea3587f064",
      "parents": [
        "8e72c0867b504d2c201d0f6af5fc385e4da27a5e"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 27 16:39:08 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 27 16:39:08 2025 +0000"
      },
      "message": "Fix fallout from r1927493. This is what happens if one tests with IPv6\ndisabled and forgets about it later...\n\n* test/test_context.c\n  (test_async_resolve_ipv6,\n   test_async_resolve_ipv64): Call the correct generic test function.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927494 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "8e72c0867b504d2c201d0f6af5fc385e4da27a5e",
      "tree": "4a377eb430cefa41fa2bb14b2c1fa180dfad73cb",
      "parents": [
        "b5576d4534269e9ae496bbc5c9edc6b6b031dc3b"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 27 16:33:15 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 27 16:33:15 2025 +0000"
      },
      "message": "In the Unbound resolver, detect when the hostname is an IPv4 or IPv6 address\nand interpret it without actually calling the resolver function.\n\n* CMakeLists.txt\n  (SOURCES): Add src/inet_pton.c\n* LICENSE, NOTICE: Update for the inet_pton code.\n* serf_private.h\n  (serf__inet_pton4, serf__inet_pton6): Declare new prototypes.\n* src/inet_pton.c: New; derived from ISC, via APR.\n\n* src/resolve.c\n  (SERF__RESOLV_assert): New; conditional assertion macro.\n  (MAX_ADDRLEN): New.\n  (resolve_convert): Add a flag that tells if the result should be freed.\n  (resolve_finalize): Update calls to resolve_convert.\n  (resolve_address_async): Detect and interpret IP addresses in the host name.\n\n* test/test_context.c\n  (async_resolve_callback): Renamed from async_resolve_cancel_callback.\n  (async_resolve,\n   test_async_resolve_name,\n   test_async_resolve_ipv4,\n   test_async_resolve_ipv6,\n   test_async_resolve_ipv64): New; tests for the async resolver.\n  (test_async_resolve_cancel): Use async_resolve_callback.\n  (test_context): Register the new tests.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927493 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "b5576d4534269e9ae496bbc5c9edc6b6b031dc3b",
      "tree": "b35efa34964a26157322e4ce83db8b056ce12d52",
      "parents": [
        "386e20cb99369c9b1e4b393866dae12dd87ce46e"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jul 26 20:11:05 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jul 26 20:11:05 2025 +0000"
      },
      "message": "In the Unbound resolver, finally convert the results to apr_sockaddr_t.\n\n* src/resolve.c:\n   - Do not include \u003carpa/inet.h\u003e or \u003cnetinet/in.h\u003e, they\u0027re no longer used.\n   - Declare APR_WANT_MEMFUNC and APR_WANT_BYTEFUNC throught \u003capr_want.h\u003e.\n   - Include \u003capr_strings.h\u003e.\n   - Update the top-level todo list.\n  (INET_ADDRSTRLEN, INET6_ADDRSTRLEN): Define if not defined.\n  (resolve_result): Remove the \u0027err\u0027 member, it\u0027s no longer needed.\n  (unbound_resolve_task): Add \u0027host_port_str\u0027, copied from apr_uri_t.\n  (resolve_convert): New; convert struct ub_result to apr_sockaddr_t.\n  (resolve_finalize): Call resolve_convert and calculate the final status.\n  (resolve_callback): Remove resolve debug logging, now in resolve_convert.\n   Fix the interpretation of the return value from apr_atomic_dec32().\n  (resolve_address_async): Initialize unbound_resolve_task::host_port_str.\n   Fix the interpretation of the return value from apr_atomic_dec32().\n  (resolve) [thread-pool resolver]: Use APR\u0027s address stringifier in the\n   debug logging code.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927485 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "386e20cb99369c9b1e4b393866dae12dd87ce46e",
      "tree": "b288b7093f42abe270c30e39a5b7b76afabcee85",
      "parents": [
        "ac24f6c409b4a48eeed932cf51e983aa16c30008"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 23:55:47 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 23:55:47 2025 +0000"
      },
      "message": "Follow up to 1927464: If we\u0027re using a proxy, we don\u0027t have to resolve the\nhost address, so the \"asynchronous\" connection creation becomes synchronous.\n\n* serf.h:\n  (serf_connection_create_async): update the docstring.\n\n* src/outgoing.c\n  (async_conn_create): Only copy the host address if it\u0027s not null.\n  (serf_connection_create_async): If we have a proxy, create the connection\n   immediately without addres resolution.\n\n* test/test_context.c\n  (test_async_connection): Renamed from test_async_resolve.\n  (test_async_proxy_connection): New test.\n  (test_context): Register test_async_proxy_connection.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927472 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "bf0fd03c6b2005035230eb056ab5f096956d6377",
      "tree": "884113d5ebf7318fa3d4136c13a010c70b08f4fc",
      "parents": [
        "cfca4a8d916907534db88d98df2d258688b2b3f1",
        "ac24f6c409b4a48eeed932cf51e983aa16c30008"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 14:25:43 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 14:25:43 2025 +0000"
      },
      "message": "On the user-defined-authn branch: sync with trunk r1927468.\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/branches/user-defined-authn@1927469 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "ac24f6c409b4a48eeed932cf51e983aa16c30008",
      "tree": "6c17afd3f440de0d0ce6bbe05409d6053db81ca1",
      "parents": [
        "b19facd4e67068d441710671ec87f1d1eec68c7a"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 11:32:51 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 11:32:51 2025 +0000"
      },
      "message": "Follow up to r1927456: the serf__resolve_result_t struct is no longer\nused outside of resolve.c, so make it local there.\n\n* serf_private.h\n  (serf__resolve_result_t): Removed.\n\n* src/resolve.c\n  (resolve_result_t): Renamed from serf__resolve_result_t and moved here.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927465 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "b19facd4e67068d441710671ec87f1d1eec68c7a",
      "tree": "068e4d6416aaf5f934f9ef125fdc5ff7b55caf25",
      "parents": [
        "11e472b7f3d4ff45997425e084113ef0d72015a8"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 11:04:38 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 11:04:38 2025 +0000"
      },
      "message": "Add an asyncrhonous connection creation API. This is likely to be the most\ncommon use of the asyncrhonous resolver.\n\n* serf.h\n  (serf_connection_created_t): Callback type for serf_connection_create_async.\n  (serf_connection_create_async): New.\n\n* src/outgoing.c\n  (async_create_baton): New; baton for asyncrhonous address resolution.\n  (async_conn_create): New; callback for same, actually creates the connection.\n  (serf_connection_create_async): Implement.\n\n* test/test_util.c\n  (async_reolved_baton, address_resolved): Removed.\n  (conn_created): New callback.\n  (use_new_async_connection): Use serf_connection_create_async.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927464 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "11e472b7f3d4ff45997425e084113ef0d72015a8",
      "tree": "3bb5ceedb867a279e60742e714d341501d84016b",
      "parents": [
        "2bc16dea7b396346af4e3c420bf89dc32b197573"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 02:22:06 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 02:22:06 2025 +0000"
      },
      "message": "Get rid of the mutex that serializes access to the async resolver results.\nThey\u0027re a singly-linked stack, so use lockless push and clear instead.\n\n* serf_private.h\n  (serf_context_t): Make the resolve_head volatile, and just a void*.\n   Remove resolve_guard and all the #if thread stuff.\n* src/context.c\n  (serf_context_create_ex): Simplify the initialization for async resolving.\n\n* src/resolve.c: Include \u003capr_version.h\u003e. Update the top-level todo list.\n  (lock_results, unlock_results): Remove.\n  (apr_atomic_casptr, apr_atomic_xchgptr): Add wrapper macros for APR-1.x,\n   because the prototypes in that version are wrong.\n  (push_resolve_result): Use a lockless push to the result stack.\n  (serf__process_async_resolve_results): No locking, just a pointer exchange.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927456 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "2bc16dea7b396346af4e3c420bf89dc32b197573",
      "tree": "3973373c42ab3b68743369647e0ee0cec04f45a3",
      "parents": [
        "6c65db14e8d84c62620bfdd58b7e40d89c7890be"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 01:26:09 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 25 01:26:09 2025 +0000"
      },
      "message": "In the Unbound resolver, look for both IPv4 and IPv6 addresses.\n\n* src/resolve.c: Update top-level docstrings and todo lists.\n  (serf_address_resolve_async): The context\u0027s resolve_init_status is now\n   independent of the availability of threads.\n  (RR_CLASS_IN, RR_TYPE_A, RR_TYPE_AAAA): New constants for query types.\n  (resolve_result): Result for each query type.\n  (unbound_resolve_task): Add an array of resolve_results and an atomic\n   counter of pendinf queries.\n  (resolve_finalize): New; will aggregate results after all queries are done.\n  (resolve_callback): Log results for one query and optionally invoke\n   resolve_finalize if all queries have completed.\n  (resolve_address_async): Launch IPv4 and IPv6 queries in parallel.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927455 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "6c65db14e8d84c62620bfdd58b7e40d89c7890be",
      "tree": "b8555272e2d9c943d47395b850e60f26f3a0c189",
      "parents": [
        "5befbe1e9d267bba5695fd0a9393bd4dcdfd9fa6"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 20 10:02:50 2025 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 20 10:02:50 2025 +0000"
      },
      "message": "Revert half of r1927273, ERR_error_string isn\u0027t threadsafe so we need to make\nan extra copy to local stack space.\n\n* buckets/ssl_buckets.c\n  (log_ssl_error): Revert back to using ERR_error_string_n to make a copy\n    of the error message string.\n\nFound by: brane/minfrin\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927348 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "5befbe1e9d267bba5695fd0a9393bd4dcdfd9fa6",
      "tree": "cfb4862f4e7ce523dee5916194e5123ef7dacef1",
      "parents": [
        "9cf0878aafefa04df775d3e424f16ee07d423901"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jul 19 19:50:15 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jul 19 19:50:15 2025 +0000"
      },
      "message": "Un the Unbound resolver, don\u0027t poll the resolver context unless we have\nactual queries in flight.\n\n* src/resolve.c: Reorder includes so that our headers always come last.\n  (resolve_context): New struct. Contains the Unbound context and a counter.\n  (create_resolve_context): Allocate a new resolve_context and properly\n   clean it up on error.\n  (resolve_callback): Decrement the Unbound task counter.\n  (resolve_address_async): Increment the Unbound task counter.\n  (run_async_resolver_loop): Do not poll if there are no Unbound tasks.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927337 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "9cf0878aafefa04df775d3e424f16ee07d423901",
      "tree": "2076a10738022abb469acba83974c93fe09a5187",
      "parents": [
        "013f693de4c337b930d1c020a17d8daa574bbba3"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 18 13:45:41 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 18 13:45:41 2025 +0000"
      },
      "message": "Add context-specific task cleanup when a context is destroyed.\n\n* src/resolve.c: Update top-level TODO docstring.\n  (do_init_work_queue): Renamed from init_work_queue().\n  (init_work_queue): New; this is now the init-once entry point.\n  (cleanup_resolve_tasks): New, pool cleanup function.\n  (create_resolve_context): Call init_work_queue() and register the cleanup.\n  (resolve_address_async): Call init_work_queue().\n* test/test_context.c\n  (async_resolve_cancel_callback,\n   test_async_resolve_cancel): New test for the early cancellation path.\n  (test_context): Register test_async_resolve_cancel.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927309 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "013f693de4c337b930d1c020a17d8daa574bbba3",
      "tree": "75655737f37098ba8db7768a43d380b6219def12",
      "parents": [
        "84b8e02f688d681e720cd8071bf7922aab6e820b"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 18 12:47:56 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jul 18 12:47:56 2025 +0000"
      },
      "message": "Implement a prototype libunbound-based asynchronous resolver.\nEXPERIMENTAL, does not include proper discovery of libunbound.\n\n* CMakeLists.txt: Add some manually configurable bits to find libunbound.\n   Show the result in the summary.\n* build/SerfGenClangd.cmake: Add the unbound include directory.\n\n* serf_private.h\n  (serf_context_t):\n    - resolve_init_status renamed from resolve_guard_status;\n    - added resolve_context, which is implementation-specific.\n  (serf__create_resolve_context): New prototype.\n\n* src/context.c\n  (serf_context_create_ex): Initialize the resolve_context and track the\n   status in resolve_init_status, along with the mutex status.\n* src/resolve.c:\n   - include \u003cunbound.h\u003e when enabled;\n   - include APR_WANT_BYTEFUNC through \u003capr_want.h\u003e, used for logging\n      resolve results. Seems to work fine on Windows/Fedora/Debian,\n      needs testing on various *BSDs etc.\n   - Add implementaiton for libunbound.\n  (SERF_HAVE_ASYNC_RESOLVER): Renamed from SERF_USE_ASYNC_RESOLVER. Again.\n  (serf__create_resolve_context): Implement here.\n\n* test/test_context.c\n  (test_async_resolve): Check the status before the connection pointer,\n   otherwise we don\u0027t see the status in the results if the pointer is NULL.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927308 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "84b8e02f688d681e720cd8071bf7922aab6e820b",
      "tree": "b4429ed40929c08808d912cc30e49f4bbd0f57b4",
      "parents": [
        "6ffa8df005e51875df81ffa3c03d1a6db102994a"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jul 17 22:43:22 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jul 17 22:43:22 2025 +0000"
      },
      "message": "Improvements to the CMake build: include the Brotli libraries in the\ngenerated pkg-config file, and remove unnecessary parameters from the APR\nand APR-Util configuration.\n\n* CMakeLists.txt\n  (make_pkgconfig): Add BROTLI_COMMON_LIBRARY and BROTLI_DECODE_LIBRARY\n   to the private libraries section of the pkg-config file.\n\n* build/FindAPR.cmake\n  (APR_INCLUDE_DIR): Renamed from APR_INCLUDES. Use the --includedir option\n   of apr-{1,2}-config to retreive just the APR include directory, not any\n   other directories that APR may use during its build.\n  (APR_LDFLAGS): Removed.\n  (APR::APR_static): Declare interface libraries in target_link_libraries().\n  (APR::APR): Likewise.\n\n* build/FindAPRUtil.cmake\n  (APRUTIL_INCLUDE_DIR): Renamed from APRUTIL_INCLUDES. As for APR, use\n   the --includedir opfion of apu-1-config. In this case it can be quite\n   important because --includes would contain the path to the OpenSSL used\n   to implement apr_crypto and could conflict with the version used by Serf.\n  (APRUTIL_LDFLAGS): Removed.\n\n* build/SerfGenClangd.cmake: Use APR_INCLUDE_DIR and APRUTIL_INCLUDE_DIR.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927297 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "6ffa8df005e51875df81ffa3c03d1a6db102994a",
      "tree": "cc446f1b3554cf0abb2f601be2b87293addee15b",
      "parents": [
        "f1f76bbef1bc9fc9d52becabd3aded040f82abd4"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jul 17 14:05:32 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jul 17 14:05:32 2025 +0000"
      },
      "message": "Make a test pass with LibreSSL and old (deprecated) OpenSSL.\n\n* test/test_ssl.c: Include openssl/opensslv.h.\n  (test_ssl_ocsp_verify_response_no_signer): Expect different errors based\n   on the version of OpenSSL (LibreSSL declares itself as OpenSSL 2.0.0).\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927292 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f1f76bbef1bc9fc9d52becabd3aded040f82abd4",
      "tree": "91d455ff867dae2fc82322bbd0d05d7d1e0d6e56",
      "parents": [
        "e879ae2ba2af82aefbfedc0acec9912832d095cc"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jul 16 22:02:25 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jul 16 22:02:25 2025 +0000"
      },
      "message": "Create the context\u0027s pollset just once. It\u0027s a cosmetic change.\n\n* src/context.c\n  (PLATFORM_POLLSET_METHOD): New constant. Define this based on the\n   BROKEN_WSAPOLL state.\n (serf_context_create_ex): Remove the #ifdef when creating the pollset.\n  Will make it easier to add new flags or error handling or whatnot\n  in future.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927278 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e879ae2ba2af82aefbfedc0acec9912832d095cc",
      "tree": "2938760b4fb8b8df742724f9398a331c82932c27",
      "parents": [
        "2af040c0bc73a7178ee4ab486a98764f73fb9452"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jul 16 21:51:42 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jul 16 21:51:42 2025 +0000"
      },
      "message": "Don\u0027t ignore errors when creating the context\u0027s guard mutex for\nthe acync resolver\u0027s result list.\n\n* serf_private.h\n  (serf_context_t::resolve_guard_status): New member.\n* src/context.c\n  (serf_context_create_ex): Recort the status from creating the mutex\n   in the context.\n* src/resolve.c\n  (serf_address_resolve_async): Fail immediately if the guard mutex\n   in the context could not be created.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927277 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "2af040c0bc73a7178ee4ab486a98764f73fb9452",
      "tree": "f1e7d612695634cdd1f616ef8806c1f464ba3f05",
      "parents": [
        "3c05b71af215ec621b6c864cd21e7f5b5b3b9bd1"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Wed Jul 16 19:34:43 2025 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Wed Jul 16 19:34:43 2025 +0000"
      },
      "message": "Followup to r1926972, tighten up the code slightly.\n\n* buckets/ssl_buckets.c\n  (log_ssl_error): Skip an unnecessary copy of the error message to the stack\n    - the consumer anyway has to make a copy in the callback.\n  (ssl_need_client_cert): Decrease scope for err variable.\n\nReview by: gstein (see GitHub PR#9)\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927273 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "3c05b71af215ec621b6c864cd21e7f5b5b3b9bd1",
      "tree": "bdd64b8bd9674e5e0a213a776adf1a773b5dcdc1",
      "parents": [
        "81f884dd5031e968a5952148252a4fed086eead4"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jul 16 09:17:19 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jul 16 09:17:19 2025 +0000"
      },
      "message": "Fix building of the MockHTTPinC library. We magically inherited the\nOpenSSL include paths from apr-util, so everything breaks down if\napr-util doesn\u0027t support apr-crypto.\n\n* test/MockHTTPinC/CMakeLists.txt\n  (mockhttpinc): Remove target_include_directories. Instead, use the same\n   target_link_libraries as the Serf static lib. This exposes the OpenSSL\n   include paths directly from the configured target instead of hoping that\n   apr-util was build with crypto support.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927264 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "81f884dd5031e968a5952148252a4fed086eead4",
      "tree": "968dfc4a6b97554fb3beebc6a057c12747823b59",
      "parents": [
        "cd6dce6fb6c671eea22c02ce62ddad4e502585a4"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jul 16 01:38:49 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jul 16 01:38:49 2025 +0000"
      },
      "message": "* src/resolve.c: Add a couple more to-do comments.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927258 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "cd6dce6fb6c671eea22c02ce62ddad4e502585a4",
      "tree": "f0820df8d38296e3364e5b83809b4b6c4fe1eb64",
      "parents": [
        "160d08c7e953df89b296db07cbe0f4257bd194f7"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Tue Jul 15 21:42:57 2025 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Tue Jul 15 21:42:57 2025 +0000"
      },
      "message": "Document how to run the slow running tests.\n(Plus an unrelated trailing whitespace trimming)\n\n* README\n  (1.1.3 Running the test suite),\n  (1.2.4 Running the test suite): Document ENABLE_SLOW_TESTS\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927255 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "cfca4a8d916907534db88d98df2d258688b2b3f1",
      "tree": "0658770640967ffc74ee7c092f5d6312c39bb0f1",
      "parents": [
        "3c4261014c59f3001f8fb33ade5ecf2ce7870158",
        "160d08c7e953df89b296db07cbe0f4257bd194f7"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Jul 15 21:21:08 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Jul 15 21:21:08 2025 +0000"
      },
      "message": "On the user-defined-authn branch: sync with trunk r1927251\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/branches/user-defined-authn@1927252 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "160d08c7e953df89b296db07cbe0f4257bd194f7",
      "tree": "d69d6115ea13d654d93ee3a29c705b121e0b659c",
      "parents": [
        "4b0e388501355a69105b5eb2220864b503c71d8a"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Jul 15 20:59:40 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Tue Jul 15 20:59:40 2025 +0000"
      },
      "message": "Add support fir asynchronous address resolution in Serf, making it completely\nasynchronous. This was the only part of the API that would block on I/O during\nnormal operation. Asynchronouse address resolution is optional.\n\n* CMakeLists.txt\n  (SOURCES): Add src/resolve.c.\n\n* serf.h\n  (serf_address_resolved_t): New; notification callback for resolved addresses.\n  (serf_address_resolve_async): New; createa a new address resolution task.\n* serf_private.h: Include apr_thread_mutex.h.\n  (serf__resolve_result_t): New; address resolution result.\n  (serf_context_t): Add members resolve_guard and resolve_head to collect\n   the results of asynchronous address resolution.\n  (serf__process_async_resolve_results): New.\n\n* src/context.c\n  (serf_context_create_ex): Initialize resolve_guard and resolve_head.\n  (serf_context_prerun): Call serf__process_async_resolve_results to\n   gather the asynchronously resolved addresses for this context.\n* src/resolve.c: New file; implements the asynchronous address resolver.\n\n* test/test_context.c\n  (test_async_resolve): New test for asynchronous address resolution.\n  (test_context): Register it.\n\n* test/test_serf.h\n  (use_new_async_connection): New prototype.\n* test/test_util.c\n  (async_reolved_baton, address_resolved,\n   use_new_async_connection): Creates a new connection asynchronously.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927249 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "4b0e388501355a69105b5eb2220864b503c71d8a",
      "tree": "334f145ac00324b03ff6e3bb07acbf41761d5cb7",
      "parents": [
        "0032480de8d5af0919c0a3ae8c6dabb87adaf2c1"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jul 14 13:43:46 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jul 14 13:43:46 2025 +0000"
      },
      "message": "Follow up to r1700062: The published Product Name in the Serf\nWindows DLL should be \"Apaache Serf\", not just \"Serf\".\n\n* serf.rc: Update the ProductName attribute.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927226 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "0032480de8d5af0919c0a3ae8c6dabb87adaf2c1",
      "tree": "69bbd66634c243e3417d8d26b7a9b3bb372fa3a1",
      "parents": [
        "baef00e5e17dee4eeb27f5b98d94db1c9d424050"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jul 10 23:48:40 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jul 10 23:48:40 2025 +0000"
      },
      "message": "* test/certs/create_certs.py\n  (create_cert): Remove a left over type annotation.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927123 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "baef00e5e17dee4eeb27f5b98d94db1c9d424050",
      "tree": "2f8c6262dd1653afa176cc9fbbd4fd21fee13247",
      "parents": [
        "45669e8a9891fcd5d94bec57ec20fa16de4bf184"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jul 10 23:39:50 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jul 10 23:39:50 2025 +0000"
      },
      "message": "Drop pyOpenSSL from the test suite certificate generator. Use the cryptography\npackage instead.\n\n* test/certs/create_certs.py: Rewrite pretty much everything using the\n   cryptography package instead of pyOpenSSL, the latter being close to\n   obsolete. Keep the not-before/not-after dates the same as in the latest\n   generated certificates.\n\n* test/certs/...: Regenerate certificates, PKCS12 files and revocation lists.\n\n* test/test_ssl.c\n  (test_ssl_cert_certificate): Update the expected SHA-1 hash.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927122 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "3c4261014c59f3001f8fb33ade5ecf2ce7870158",
      "tree": "719a525ffe91ea7205c2e6651264597c112f5e9f",
      "parents": [
        "475808b3aadaa94ad0565c012baab5b340d4f39d"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jul 07 17:41:22 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jul 07 17:41:22 2025 +0000"
      },
      "message": "On the user-defined-authn branch: It turns out that case-folding via a lookup\ntable is not the fastest way, nor is scanning the data when its length is\nalready available.\n\n* serf_private.h\n  (serf__tolower_inplace): Require the length of the destination data.\n   This saves a potentially unnecessary length scan and also does not\n   require the data to be NUL-terminated.\n* src/syntax.c\n  (casefold_table): Throw it away.\n  (ct_tolower): Use known properties of the ASCII encoding to get the\n   lower-case form.\n  (serf__tolower_inplace): Use the new length parameter.\n* auth/auth.c\n  (store_header_in_dict): Use strcspn() instead of strchr() to find the\n   of the scheme name, because it also gives us the length even if there\n   are no authn attributes, saving one strlen() later on.\n   Use this length to case-fold the hash key.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/branches/user-defined-authn@1927061 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "45669e8a9891fcd5d94bec57ec20fa16de4bf184",
      "tree": "6bc16f2c64346d4429adb0c8fb3183ceea35af61",
      "parents": [
        "1accc75158aca6ba1a98062fbc2898dc44afe4d5"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jul 07 10:00:17 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jul 07 10:00:17 2025 +0000"
      },
      "message": "* CMakeLists.txt: Show enabled slow tests in the summary.\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927026 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "1accc75158aca6ba1a98062fbc2898dc44afe4d5",
      "tree": "03a4ea76107b2056e201fa882052ce45ecab0f24",
      "parents": [
        "4152a1ef9294e8c483d91192ed435646332c7ad4"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jul 07 09:33:37 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jul 07 09:33:37 2025 +0000"
      },
      "message": "Rename the testing \u0027batons\u0027 to make their meaning clearer.\n\n* test/test_serf.h\n  (test_baton_t::user_number): Renamed from user_baton_l and changed\n   the type from long to apr_uint64_t.\n  (test_baton_t::user_status): Renamed from user_baton_s.\n\n* test/test_buckets.c\n  (deflate_buckets, hold_open,\n   test_deflate_4GBplus_buckets): Use user_status instead of user_baton_l.\n* test/test_context.c\n  (http_conn_setup_mock_socket,\n   test_aborted_connection,\n   test_aborted_connection_with_authn_cb,\n   test_reset_connection,\n   test_reset_connection_with_authn_cb): Use user_status instead of user_baton_s.\n* test/test_server.c\n  (client_generate_response,\n   test_listen_auth_http,\n   test_listen_auth_http2): Use user_number instead fo user_baton_l.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927025 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "4152a1ef9294e8c483d91192ed435646332c7ad4",
      "tree": "c97b84fca31dfd2c885668d9edc5f4d8df4c5e4b",
      "parents": [
        "a0e483a96d3d69922f22641e555c97f455d1109a"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 06 19:38:06 2025 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 06 19:38:06 2025 +0000"
      },
      "message": "Follow-up to 1927014, save seems to work now.\n\nMake a whitespace change to README to trigger a new build\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927015 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "a0e483a96d3d69922f22641e555c97f455d1109a",
      "tree": "56d0e1bb0b698dd14592e95810494a86cd7a4cd1",
      "parents": [
        "336c838009b93f49c53e21e90a07f2f69c40c464"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 06 19:19:16 2025 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 06 19:19:16 2025 +0000"
      },
      "message": "Follow-up to r1927013, we got an error message:\nthe `uses\u0027 attribute must be a path, a Docker image, or owner/repo@ref\n\nSo, let\u0027s try with the branch name \"@main\"\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927014 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "336c838009b93f49c53e21e90a07f2f69c40c464",
      "tree": "fbb88b7342aba90de17a929e6afa7b2edb0c4d05",
      "parents": [
        "b38d5f4e3df62c079156da036d6817e6412f8b10"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 06 19:14:39 2025 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 06 19:14:39 2025 +0000"
      },
      "message": "Follow-up ti r1927012:\nLet\u0027s try without explicit version. (It is there in the documentation...)\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927013 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "b38d5f4e3df62c079156da036d6817e6412f8b10",
      "tree": "fe739f3687e1468f0eeb6c5adc2d44de3d31db89",
      "parents": [
        "7a985acca6f90bb05364c0d738967135aa401b88"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 06 19:07:56 2025 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 06 19:07:56 2025 +0000"
      },
      "message": "Follow-up to r1927011, looks like we need to specify the organisation to call\nan ASF action.\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927012 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "7a985acca6f90bb05364c0d738967135aa401b88",
      "tree": "aae9ae82777955baa86f78635c01a01764fd80b8",
      "parents": [
        "aa021b0f907b461e423c638e8e8fc60238cea49c"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 06 18:45:47 2025 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sun Jul 06 18:45:47 2025 +0000"
      },
      "message": "Try to save vcpkg\u0027s installed folder to speed up following runs.\n\nSuggested by: gstein\n\nhttps://lists.apache.org/thread/l8vorrc55gjd6whhh2659bgb3925mz01\n(Sent to private@, but I\u0027ll add the link anyway since it doesn\u0027t really\ncontain any private info).\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1927011 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "475808b3aadaa94ad0565c012baab5b340d4f39d",
      "tree": "5de0656034dfd3aada7834b23d8b4f157dbd3349",
      "parents": [
        "e1794a02df93e228ba336a715b9a303a08742782",
        "aa021b0f907b461e423c638e8e8fc60238cea49c"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 14:00:09 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 14:00:09 2025 +0000"
      },
      "message": "On the user-defined-authn branch: sync with trunk r1927004.\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/branches/user-defined-authn@1927005 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "aa021b0f907b461e423c638e8e8fc60238cea49c",
      "tree": "6c174a03f2c2e53a508bf9687818a01509c46843",
      "parents": [
        "e1acb46cd1b779ab5435c541fcdf3621c768a797"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 12:54:56 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 12:54:56 2025 +0000"
      },
      "message": "All GCC-like compilers were not created equal. Make sure we don\u0027t use extra\nwarning flags that the C compiler doesn\u0027t accept.\n\n* build/SerfChecks.cmake:\n  (CheckCFlag): New macro, checks if a warning flag is acceptable.\n* CMakeLists.txt: Use CheckCFlag for maintainer-mode flags.\n\n* build/scons_extras.py\n  (__env_check_c_flag): New, check if a compiler flag is acceptable.\n  (AddEnvironmentMethods): Register it as SerfCheckCFlag.\n* SConstruct: Use SerfCheckCFlag for debug-mode flags.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1926999 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e1acb46cd1b779ab5435c541fcdf3621c768a797",
      "tree": "3162f412d7045897a2ba5d3e269011fac37f321d",
      "parents": [
        "7ce0552332b0d197373cccf6ca96a1b2497e69f2"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 11:25:28 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 11:25:28 2025 +0000"
      },
      "message": "Fix two more warnings.\n\n* buckets/headers_buckets.c\n  (select_value): The \"unreachable\" default case could did not set the value\n   of \u0027*len\u0027 before returning, causing gcc to be confused. Make it a synonim\n   for the READ_DONE case, since there can be no other enum value here.\n\n  (serf_bucket_headers_get): Make \u0027value_size\u0027 an apr_size_t, since that\u0027s\n   how it is used; avoids narrowing conversion warnings.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1926994 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "7ce0552332b0d197373cccf6ca96a1b2497e69f2",
      "tree": "ce99ee274e0ad0ab84079e4252d0722d4a555a9c",
      "parents": [
        "15c1d45b400e7d1f9ba80c73b893aafb91932074"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 09:52:17 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 09:52:17 2025 +0000"
      },
      "message": "Fix some more narrowing, unreachable-code and shadowing warnings.\n\n* CMakeLists.txt, SConstruct: Add -Wshadow to the default warning options.\n\n\u003d\u003d Narrowing conversions \u003d\u003d\n\n* buckets/ssl_buckets.c\n  (bio_bucket_read): ### Safe cast apr_size_t -\u003e int\n  (bio_file_read): ### Safe cast apr_size_t -\u003e int\n  (bio_file_write): ### Safe cast apr_size_t -\u003e int\n  (serf_ssl_negotiate_protocol): ### Safe cast apr_size_t -\u003e int\n\n  (ocsp_callback): Make \u0027len\u0027 a long, which is the type of the return value\n   from SSL_get_tlsext_status_ocsp_resp().\n  (ssl_decrypt): Add an int \u0027ssl_bufsize\u0027 with a checked conversion from\n   the apr_size_t \u0027bufsize\u0027, whos type can not be changed because it\u0027s a\n   callback type parameter.\n  (ssl_encrypt): The \u0027interim_len\u0027 is initializef from an int, so it may\n   as well be an int, too.\n\n  (serf_ssl_ocsp_request_t): Change \u0027der_request_size\u0027 to an int. It is\n   initialized from an int and never changed, and used in contexts that\n   expect an int.\n  (serf_ssl_ocsp_request_imp): Change \u0027der_request_size\u0027 and \u0027der_id_size\u0027\n   to int, for similar reasons. The apr_base64 code uses int sizes, not\n   apr_size_t sizes.\n\n\u003d\u003d Unreachable code \u003d\u003d\n\n* buckets/ssl_buckets.c\n  (serf_ssl_set_hostname): Return APR_ENOTIMPL from an #else branch of the\n   #ifdef. While not strictly necessary, it avoids confusion.\n  (serf_ssl_check_cert_status_request): Likewise.\n  (serf_ssl_use_compression): Likewise. Before this change it returned\n   APR_EGENERAL, but APR_ENOTIMPL is more appropriate.\n\n\u003d\u003d Variable shadowing \u003d\u003d\n\n* buckets/ssl_buckets.c\n  (ssl_need_client_cert): Rename \u0027c\u0027 to \u0027x509\u0027. It was shadowed by another\n   \u0027c\u0027 of the same type, at line 1706. This was not actually a bug, since\n   \u0027x509\u0027 is only initialized after \u0027c\u0027 goes out of scope, but it\u0027s still\n   confusing. Also shows why one shouldn\u0027t write 1000-line functions.\n\n* test/serf_get.c (main),\n  test/serf_httpd.c (main): Remove second declarations of \u0027status\u0027.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1926988 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "15c1d45b400e7d1f9ba80c73b893aafb91932074",
      "tree": "503cd43d43e37b0b82a5b426e4f19c7eb256da71",
      "parents": [
        "4f435e63f6862ebc28a767d2b4106eb2bbe9217a"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 01:56:20 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 01:56:20 2025 +0000"
      },
      "message": "Follow up to r1926878: Get the generated .clangd back on track.\n\n* build/SerfGenClangd.cmake: Don\u0027t look at CMAKE_C_FLAGS any more, since we\n   don\u0027t update that in CMakeLists.txt. Use SERF_C_DEFINES, SERF_C_WARNINGS\n   and APR_CFLAGS instead. Also remove duplicates from the include paths.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1926984 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "4f435e63f6862ebc28a767d2b4106eb2bbe9217a",
      "tree": "62783c3d409ee1df9292a49ee61b9f71e10be290",
      "parents": [
        "93cf25ef2233d1cb019378226714781b56999ee7"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 01:10:52 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jul 06 01:10:52 2025 +0000"
      },
      "message": "In the CMake build, include APR\u0027s --cflags for MockHTTP.\n\n* test/MockHTTPinC/CMakeLists.txt\n  (mockhttpinc): Include ${APR_CFLAGS} in target_compile_options.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1926983 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "93cf25ef2233d1cb019378226714781b56999ee7",
      "tree": "c148f1334f8896d2fa2bb90c242bc60b162631e6",
      "parents": [
        "33e7189665dfe0880cb4dc271722dbc21ed66d1d"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jul 05 15:46:06 2025 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sat Jul 05 15:46:06 2025 +0000"
      },
      "message": "Fix some more integer narrowing warnings.\n\n* buckets/deflate_buckets.c\n  (serf_deflate_refill): Narrow our apr_size_t to Zlib stream\u0027s uInt, then\n   use the already-converted value to compute the crc32.\n   In two other places, change the type of the private_len variable, which\n   was unnecessarily declared as an apr_size_t.\n\n* test/CuTest.c\n  (CuStrCopy, CuStringAppend, CuStringInsert): Cast strlen(...) to int.\n\n* test/test_serf.h\n  (struct test_baton_t): Add an apr_status_t user baton.\n  (test/test_context.c): Use the new user status baton for APR status codes.\n* test/mock_buckets.c\n  (next_action): Cast strlen(...) to the expected int.\n  (test_basic_mock_bucket): Use CuAsertUIntEquals to avoid narrowing.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1926976 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "33e7189665dfe0880cb4dc271722dbc21ed66d1d",
      "tree": "a7580f97ca18c03e8b49291489d26b00d05318cb",
      "parents": [
        "0361704aa27bee2fb3efddb5cebe5ed6a2a1cb8f"
      ],
      "author": {
        "name": "Graham Leggett",
        "email": "minfrin@apache.org",
        "time": "Sat Jul 05 09:47:32 2025 +0000"
      },
      "committer": {
        "name": "Graham Leggett",
        "email": "minfrin@apache.org",
        "time": "Sat Jul 05 09:47:32 2025 +0000"
      },
      "message": "Add support for SSL error handling\n\n- Allow the registration of an optional callback using\n  serf_ssl_error_cb_set().\n\n- If the callback is registered, return a fixed string describing the \n  error as created by the underlying crypto library.\n\n- Handle the error when a PKCS12 file cannot be opened, remove an infinite \n  loop.\n\n- Client side SSL certificate errors now cause the client side to abort the\n  connection. Previously no certificate was silently sent, and the error was\n  access denied from the server.\n\nExample:\n\n[minfrin@rocky9 subversion]$ svn info https://svn.example.com/svn/example/core/\nsvn: E170013: Unable to connect to a repository at URL \u0027https://svn.example.com/svn/example/core\u0027\nsvn: E120170: TLS: error:0308010C:digital envelope routines::unsupported\nsvn: E120170: TLS: could not parse PKCS12: /home/minfrin/.my-cert.p12\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1926972 13f79535-47bb-0310-9956-ffa450edef68\n"
    }
  ],
  "next": "e1794a02df93e228ba336a715b9a303a08742782"
}
