Full Code of notroj/neon for AI

master 33063cb663a3 cached
221 files
2.1 MB
563.6k tokens
1465 symbols
1 requests
Download .txt
Showing preview only (2,265K chars total). Download the full file or copy to clipboard to get everything.
Repository: notroj/neon
Branch: master
Commit: 33063cb663a3
Files: 221
Total size: 2.1 MB

Directory structure:
gitextract_r_vx3978/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report.md
│   ├── PULL_REQUEST_TEMPLATE/
│   │   └── pull_request_template.md
│   └── workflows/
│       ├── ci.yml
│       └── sanity.yml
├── .gitignore
├── .gitleaks.toml
├── .package
├── .release.sh
├── .travis.yml
├── AUTHORS
├── INSTALL.win32
├── Makefile.in
├── NEWS
├── README.md
├── THANKS
├── TODO
├── autogen.sh
├── config.hw.in
├── configure.ac
├── doc/
│   ├── biblio.xml
│   ├── feat.xml
│   ├── html.xsl
│   ├── man.xsl
│   ├── manual.css
│   ├── manual.xml
│   ├── parsing-xml.txt
│   ├── ref/
│   │   ├── alloc.xml
│   │   ├── auth.xml
│   │   ├── buf.xml
│   │   ├── bufapp.xml
│   │   ├── bufcr.xml
│   │   ├── bufdest.xml
│   │   ├── bufutil.xml
│   │   ├── clicert.xml
│   │   ├── config.xml
│   │   ├── ctype.xml
│   │   ├── err.xml
│   │   ├── feat.xml
│   │   ├── getst.xml
│   │   ├── hash.xml
│   │   ├── i18n.xml
│   │   ├── iaddr.xml
│   │   ├── init.xml
│   │   ├── lower.xml
│   │   ├── neon.xml
│   │   ├── nonce.xml
│   │   ├── opts.xml
│   │   ├── param.xml
│   │   ├── proxy.xml
│   │   ├── redir.xml
│   │   ├── req.xml
│   │   ├── reqbody.xml
│   │   ├── reqflags.xml
│   │   ├── reqhdr.xml
│   │   ├── reqtgt.xml
│   │   ├── resolve.xml
│   │   ├── respbody.xml
│   │   ├── resphdr.xml
│   │   ├── sess.xml
│   │   ├── sessflags.xml
│   │   ├── shave.xml
│   │   ├── sockssl.xml
│   │   ├── sslca.xml
│   │   ├── sslcert.xml
│   │   ├── sslcert2.xml
│   │   ├── sslcertio.xml
│   │   ├── sslctx.xml
│   │   ├── ssldname.xml
│   │   ├── sslproto.xml
│   │   ├── ssltrust.xml
│   │   ├── sslvers.xml
│   │   ├── sslvfy.xml
│   │   ├── status.xml
│   │   ├── tok.xml
│   │   ├── vers.xml
│   │   ├── xml.xml
│   │   └── xmlreq.xml
│   ├── refentry.xml
│   ├── security.xml
│   ├── ssl.xml
│   ├── using.xml
│   └── xml.xml
├── macros/
│   ├── .gitignore
│   ├── ChangeLog
│   ├── ld-version-script.m4
│   ├── neon-test.m4
│   ├── neon-xml-parser.m4
│   ├── neon.m4
│   └── socklen-arg-type.m4
├── neon-config.in
├── neon.mak
├── neon.pc.in
├── po/
│   ├── cs.po
│   ├── de.po
│   ├── fr.po
│   ├── ja.po
│   ├── ka.po
│   ├── neon.pot
│   ├── nn.po
│   ├── pl.po
│   ├── ru.po
│   ├── tr.po
│   └── zh_CN.po
├── src/
│   ├── .gitignore
│   ├── COPYING.LIB
│   ├── ChangeLog
│   ├── Makefile.in
│   ├── README
│   ├── memleak.h
│   ├── mktable.c
│   ├── ne_207.c
│   ├── ne_207.h
│   ├── ne_acl.h
│   ├── ne_acl3744.c
│   ├── ne_acl3744.h
│   ├── ne_alloc.c
│   ├── ne_alloc.h
│   ├── ne_auth.c
│   ├── ne_auth.h
│   ├── ne_basic.c
│   ├── ne_basic.h
│   ├── ne_compress.c
│   ├── ne_compress.h
│   ├── ne_dates.c
│   ├── ne_dates.h
│   ├── ne_defs.h
│   ├── ne_gnutls.c
│   ├── ne_i18n.c
│   ├── ne_i18n.h
│   ├── ne_internal.h
│   ├── ne_locks.c
│   ├── ne_locks.h
│   ├── ne_md5.c
│   ├── ne_md5.h
│   ├── ne_oldacl.c
│   ├── ne_openssl.c
│   ├── ne_pkcs11.c
│   ├── ne_pkcs11.h
│   ├── ne_private.h
│   ├── ne_privssl.h
│   ├── ne_props.c
│   ├── ne_props.h
│   ├── ne_redirect.c
│   ├── ne_redirect.h
│   ├── ne_request.c
│   ├── ne_request.h
│   ├── ne_session.c
│   ├── ne_session.h
│   ├── ne_socket.c
│   ├── ne_socket.h
│   ├── ne_socks.c
│   ├── ne_ssl.c
│   ├── ne_ssl.h
│   ├── ne_sspi.c
│   ├── ne_sspi.h
│   ├── ne_string.c
│   ├── ne_string.h
│   ├── ne_stubssl.c
│   ├── ne_uri.c
│   ├── ne_uri.h
│   ├── ne_utils.c
│   ├── ne_utils.h
│   ├── ne_xml.c
│   ├── ne_xml.h
│   ├── ne_xmlreq.c
│   ├── ne_xmlreq.h
│   ├── neon.def
│   └── neon.vers
└── test/
    ├── .gdbinit
    ├── .gitignore
    ├── COPYING
    ├── ChangeLog
    ├── Makefile.in
    ├── README
    ├── STATUS
    ├── acl3744.c
    ├── auth.c
    ├── basic.c
    ├── checksyms.sh
    ├── common/
    │   ├── ChangeLog
    │   ├── README
    │   ├── child.c
    │   ├── child.h
    │   ├── run.sh
    │   ├── tests.c
    │   └── tests.h
    ├── compress.c
    ├── expired.pem
    ├── htdocs/
    │   └── plain
    ├── largefile.c
    ├── lock.c
    ├── makekeys.sh
    ├── neon.prio
    ├── notvalid.pem
    ├── nulca.pem
    ├── nulcn.pem
    ├── nulsan.pem
    ├── nulsrv.key
    ├── oldacl.c
    ├── openssl.conf
    ├── props.c
    ├── redirect.c
    ├── request.c
    ├── resolve.c
    ├── run-tests.sh
    ├── run.sh
    ├── session.c
    ├── skeleton.c
    ├── socket.c
    ├── ssl.c
    ├── string-tests.c
    ├── stubs.c
    ├── symvers.txt
    ├── twooh7.c
    ├── uri-tests.c
    ├── util-socks.c
    ├── util-tests.c
    ├── utils.c
    ├── utils.h
    ├── xml.c
    └── xmlreq.c

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is, what happened and what you expected to happen.

**Environment**
 - neon version: [e.g. 0.31.1]
 - OS: [e.g. Ubuntu]
 - SSL library version: [e.g. OpenSSL 1.1.1]

**To Reproduce**
Please provide a minimal code snippet using the neon API to trigger the issue.

**Debugging output**
Please include neon debugging output generated by e.g. `ne_debug_init(stderr, NE_DBG_HTTP);`


================================================
FILE: .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
================================================
Fixes XXXX (fixes #NNN)

```
Changelog:

```


================================================
FILE: .github/workflows/ci.yml
================================================
name: Build and test

on:
  push:
    branches:
    - master
    - '*.x'
    paths-ignore:
    - 'doc/**'
    - NEWS
  pull_request:
    branches:
    - master
    - '*.x'
    paths-ignore:
    - 'doc/**'
    - NEWS

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: true
      matrix:
        os: [ubuntu-22.04, ubuntu-24.04, ubuntu-22.04-arm]
        conf-shared: [--enable-static, --enable-shared --enable-warnings=error ]
        conf-xml: [--with-expat, --with-libxml2 ]
        conf-ssl: [--without-ssl, --with-ssl=openssl, --with-ssl=gnutls --with-libntlm]
        conf-memleak: [--disable-memleak, --enable-memleak]
        conf-debug: [--enable-debug, --disable-debug]
        conf-gssapi: [--with-gssapi, --without-gssapi]
        exclude:
            - os: [ubuntu-22.04, ubuntu-24.04]
              conf-shared: --enable-static
            - conf-gssapi: --without-gssapi
              conf-ssl: [--without-ssl, --with-ssl=gnutls --with-libntlm]
            - conf-xml: --with-libxml2
              conf-gssapi: --without-gssapi
            - os: ubuntu-22.04-arm
              conf-xml: --with-libxml2
            - os: ubuntu-22.04-arm
              conf-ssl: [--without-ssl, --with-ssl=gnutls --with-libntlm]
            - os: ubuntu-22.04-arm
              conf-debug: --disable-debug
            - os: ubuntu-22.04-arm
              conf-gssapi: --without-gssapi
            - os: ubuntu-22.04-arm
              conf-memleak: --enable-memleak
            - os: ubuntu-22.04-arm
              conf-shared: --enable-static
    steps:
    - uses: actions/checkout@v2
    - run: ./autogen.sh
    - run: case "${{matrix.conf-ssl}}" in
           *gnutls*) sudo apt-get update && sudo apt-get -y install libgnutls28-dev gnutls-bin libntlm0-dev ;;
           esac
    - run: case ${{matrix.conf-gssapi}} in
           *with-gssapi) sudo apt-get update && sudo apt-get -y install libkrb5-dev ;;
           esac
    - run: ./configure ${{matrix.conf-shared}} ${{matrix.conf-xml}}
                       ${{matrix.conf-ssl}} ${{matrix.conf-memleak}}
                       ${{matrix.conf-debug}} ${{matrix.conf-gssapi}}
    - run: make -j`nproc`
    - run: make -j`nproc` check TEST_QUIET=0 TEST_COLOUR=1
    - if: failure()
      run: if test -f test/debug.log; then cat test/debug.log; fi
    - run: test/checksyms.sh src/.libs/libneon.so
      if: ${{ matrix.conf-debug == '--enable-debug' && matrix.conf-shared != '--enable-static' && matrix.conf-memleak == '--disable-memleak' }}

  containers:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: true
      matrix:
        image: ["quay.io/centos/centos:stream9",
                "fedora:latest"]
    container:
      image: ${{ matrix.image }}
    steps:
      - run: dnf update -y && dnf install -y autoconf make expat-devel
                  openssl openssl-devel krb5-devel libtool zlib-devel gawk
      - if: contains(matrix.image, 'fedora')
        run: dnf install -y libntlm-devel
      - uses: actions/checkout@v3
      - run: ./autogen.sh
      - run: ./configure --with-ssl=openssl --with-expat --enable-debug --with-gssapi
                         ${{ contains(matrix.image, 'fedora') && '--with-libntlm' || '' }}
                         --enable-warnings=error --without-pakchois
      - run: make -j`nproc`
      - run: make -j`nproc` check TEST_QUIET=0 TEST_COLOUR=1


================================================
FILE: .github/workflows/sanity.yml
================================================
name: Build sanity and docs checks

on:
  push:
    branches:
    - master
    - '*.x'
  pull_request:
    branches:
    - master
    - '*.x'

jobs:
  sanity-checks:
    name: Build sanity and docs checks
    runs-on: ubuntu-latest
    container:
      image: fedora:latest
    steps:
      - run: dnf update -y && dnf install -y autoconf make expat-devel openssl-devel libtool zlib-devel gcc-c++ xmlto gawk
      - uses: actions/checkout@v3
      - run: ./autogen.sh
      - run: ./configure --with-ssl=openssl --with-expat --enable-debug
      - run: make -C src check-incl
      - run: make -C src check-c++
      - run: make docs


================================================
FILE: .gitignore
================================================
/config.h.in
/config.h
/configure
/config.status
/config.log
/conftest.c
/Makefile
/aclocal.m4
/*.cache
/libtool
/neon-config
/reconf*
/confdefs.h
/ltmain.sh
/ltconfig
/config.sub
/config.guess
/*.out
/*.log
/.version
/config.hw
/neon.pc
/clog
/ChangeLog
/install-sh
/po/*.gmo
/doc/*.?
/doc/*.html
/doc/*.pdf
/doc/*.ps
/doc/*.tex
/doc/*.sgml
/doc/*.junk
/doc/html
/doc/man
/doc/man3
/doc/man1
/doc/version.xml
/doc/date.xml
**/.libs
/macros/libtool.m4
/macros/ltoptions.m4
/macros/ltsugar.m4
/macros/lt~obsolete.m4
/macros/ltversion.m4


================================================
FILE: .gitleaks.toml
================================================
[allowlist]
description = "Global Allowlist"

# Ignore based on any subset of the file path
paths = [
    # Ignore the pregenerated server keys
    '''test\/.*\.key$''',
  ]


================================================
FILE: .package
================================================
announce-list=neon@lists.manyfish.co.uk


================================================
FILE: .release.sh
================================================
#!/bin/sh

set -ex

major=`echo $1 | awk -F. '{print $1;}'`
minor=`echo $1 | awk -F. '{print $2;}'`
release=`echo $1 | awk -F. '{print $3;}'`
version=$1

for f in config.hw; do
in=$f.in
out=$f
sed -e "s/@VERSION@/$version/g" \
    -e "s/@MAJOR@/$major/g" \
    -e "s/@MINOR@/$minor/g" \
    -e "s/@RELEASE@/$release/g" \
    -e "s,@top_srcdir@,`pwd`,g" < $in > $out
done

echo $1 > .version

# for the documentation:
date +"%e %B %Y" | tr -d '\n' > doc/date.xml
echo -n $1 > doc/version.xml

ALL_LINGUAS=`echo po/*.po | sed 's,po/,,g;s,\.po,,g'`

# Try to create a valid Makefile
tmp=`mktemp /tmp/neon-XXXXXX`
sed -e 's,@SET_MAKE@,,;s,@SHELL@,/bin/sh,' \
    -e "s,@top_srcdir@,`pwd`," \
    -e "s,@srcdir@,`pwd`," \
    -e "s,@ALL_LINGUAS@,${ALL_LINGUAS}," \
    < Makefile.in > $tmp
make -f $tmp docs compile-gmo
rm -f $tmp


================================================
FILE: .travis.yml
================================================
language: c
os: linux
dist: xenial
addons:
  apt:
    packages:
      - xmlto
      - libxml2-dev
      - libnss3-tools
      - libproxy-dev
env:
  global:
    - MARGS="-j2 check"
matrix:
  include:
    - name: Disable-all
      env: CONF="--without-libproxy --without-gssapi --without-zlib --disable-nls --disable-debug --disable-webdav"
    - name: Static UBSan w/OpenSSL
      env: CONF="--enable-static --with-ssl=openssl" CFLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined" LIBS=-lubsan NEON_LIBS=-lubsan
    - name: Static 32-bit w/OpenSSL
      env: CONF="--enable-static --with-ssl=openssl" CC='gcc -m32'
      addons:
        apt:
          packages:
            - libc6-dev-i386
            - gcc-multilib
            - libexpat1-dev:i386
            - libssl-dev:i386
            - lib32z1-dev
    - name: OpenSSL on arm64
      arch: arm64
      env: CONF="--with-ssl=openssl"
    - name: OpenSSL on s390x
      arch: s390x
      env: CONF="--with-ssl=openssl"
    - name: Copyright check
      env: CONF="--without-libproxy --without-gssapi --without-zlib --disable-nls --disable-debug --disable-webdav" MARGS="update-copyright"
  allow_failures:
    # s390x builds currently flaky
    - name: OpenSSL on s390x
      arch: s390x
      env: CONF="--with-ssl=openssl"

script: ./autogen.sh && ./configure --enable-warnings $CONF && make $MARGS


================================================
FILE: AUTHORS
================================================
neon is Copyright (C) 1999-2007 Joe Orton <joe@manyfish.co.uk>
Portions are:
Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>
Copyright (C) 1999-2000 Peter Boos <pedib@colorfullife.com>
Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
Copyright (C) 2004 Aleix Conchillo Flaque <aleix@member.fsf.org>
Copyright (C) 2004 Jiang Lei <tristone@deluxe.ocn.ne.jp>
Copyright (C) 2004-2005 Vladimir Berezniker @ http://public.xdi.org/=vmpn


================================================
FILE: INSTALL.win32
================================================
Building neon on Windows uses a single Nmake neon.mak file.  By
placing various parameters on nmake's command line, you can specify
exactly the features and behavior of the Neon libraries.  The
parameters are additive, so to add more features, add the command line
options specified in the particular section below.

All the builds described below should work with Microsoft VC++ 5 and
6.

Build neon
__________

This is the most basic version of the Neon library you can build.  It
does not require any third party libraries, but you do not get the
full capabilities of Neon.

Compile Neon with no parameters

  nmake /f neon.mak

After compiling the library, the directory contains libneon.lib,
against which you can link your program.


Build neon with WebDAV support
______________________________

To compile Neon with WebDAV support, Neon must compile and link
against a third-party XML parser, either expat, expat-lite, libxml or
libxml2.  This Windows neon.mak file is designed to compile and link
against the pre-built Expat Windows libraries version 1.95.X or newer.
This library is available for download from

  http://sourceforge.net/projects/expat/

Download the latest expat_win32bin package named

  expat_win32bin_X_YY_Z.exe

and install it on your system.  It wants to install itself into
Q:\some\dir\Expat-X.Y.ZZ.  Choose your installation location for expat
and then compile Neon with

  nmake /f neon.mak EXPAT_SRC=\path\to\Expat-X.YY.Z

NOTE: When you run your program make sure the LIBEXPAT.DLL from expat
is accessible, i.e. is in your PATH.

This should work with Microsoft VC++ 5 and 6.


Build neon with dynamically linked SSL support
______________________________________________

To build neon on Windows with SSL support you need OpenSSL already
installed on your system (I used OpenSSL 0.9.7g).  It can be
downloaded from

  http://www.openssl.org/source/openssl-0.9.7g.tar.gz

After compiling OpenSSL, now simply point make to the OpenSSL sources:

  nmake /f neon.mak OPENSSL_SRC=\path\to\openssl

NOTE: The include files for OpenSSL reside in inc32/ directory
("../openssl-0.9.7g/inc32").

NOTE: Make sure that your program is linked against libeay32.lib and
ssleay32.lib (normally in "../openssl-0.9.7g/out32dll") and that
libeay32.dll and ssleay32.dll is accessible, i.e. is in your PATH.


Build neon with statically linked OpenSSL support
_________________________________________________

If you want to statically link against OpenSSL, then add the
OPENSSL_STATIC parameter.

  nmake /f neon.mak OPENSSL_SRC=\path\to\openssl OPENSSL_STATIC=yes


Build neon with statically linked Zlib support
______________________________________________

If you want to build Neon with the capability to decompress compressed
content, then you need to compile against the Zlib library.

Neon's neon.mak file will compile and link the Zlib sources. You need
Zlib 1.2.1 or later, as previous versions do not include build scripts
for Win32.

Here's how to compile in Zlib support.

  1) Get one of the Zlib source file packages in Zip format from
     http://www.gzip.org/zlib/; for example,
     http://www.gzip.org/zlib/zlib121.zip
  2) Unzip it.

Now add the ZLIB_SRC parameter to Neon's neon.mak pointing to your
newly compiled zlib.

  nmake /f neon.mak ZLIB_SRC=\path\to\zlib


Build neon with dynamically linked Zlib support
_______________________________________________

To build Neon with dynamically linked Zlib support, use the
instructions for the statically linked Zlib support above and add the
ZLIB_DLL parameter

  nmake /f neon.mak ZLIB_SRC=\path\to\zlib ZLIB_DLL=yes


Build neon with IPv6 support
____________________________

To build neon with support for IPv6, use parameter ENABLE_IPV6.

  nmake /f neon.mak ENABLE_IPV6=yes

This requires a copy of the Platform SDK which contains the IPv6
headers and libraries.

Build neon with debugging support
_________________________________

Set the DEBUG_BUILD parameter

  nmake /f neon.mak DEBUG_BUILD=yes

It does not matter what value DEBUG_BUILD is set to, as long as it is
not set to "".

After compiling the library, the directory contains libneonD.lib,
against which you can link your program.


================================================
FILE: Makefile.in
================================================
# Copyright (C) 2001-2009 Joe Orton <joe@manyfish.co.uk>
# Copyright (C) 1994, 1995-8, 1999, 2000 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

# libtool bits mostly stolen from libxml and libtool/demo

SHELL = @SHELL@

prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
mandir = @mandir@
man1dir = $(mandir)/man1
man3dir = $(mandir)/man3
datarootdir = @datarootdir@
datadir = @datadir@
docdir = $(datadir)/doc/neon-@NEON_VERSION@
includedir = @includedir@
neonincludes = $(includedir)/neon
pkgconfigdir = $(libdir)/pkgconfig
localedir = $(datadir)/locale

top_srcdir = @top_srcdir@
top_builddir = .
srcdir = @srcdir@
VPATH = @srcdir@

@SET_MAKE@

LDFLAGS = -L. @LDFLAGS@
LIBS = @LIBS@
CC = @CC@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL = @INSTALL@
transform = @program_transform_name@

LIBTOOL = @LIBTOOL@
XMLTO = xmlto
GCOV = gcov
XGETTEXT_OPTS = --keyword=_ --keyword=N_ --msgid-bugs-address=https://github.com/notroj/neon \
		--default-domain=neon --flag ne_print_request_header:3:c-format \
		--flag ne_snprintf:3:c-format --flag ne_vsnprintf:3:c-format \
		--flag ne_set_error:2:c-format
POTFILE = $(top_srcdir)/po/neon.pot
XGETTEXT = xgettext
MSGFMT = msgfmt
MSGMERGE = msgmerge

LINGUAS = @ALL_LINGUAS@

# The headers to distribute - making up the public interface of neon
DIST_HEADERS = ne_request.h ne_session.h ne_utils.h ne_uri.h ne_socket.h  \
	ne_basic.h ne_207.h ne_props.h ne_xml.h ne_dates.h ne_string.h	  \
	ne_defs.h ne_locks.h ne_alloc.h ne_md5.h ne_i18n.h ne_redirect.h  \
	ne_auth.h ne_compress.h ne_acl.h ne_ssl.h ne_xmlreq.h ne_pkcs11.h \
	ne_acl3744.h

all: subdirs

check: subdirs
	@cd test && $(MAKE) check

# Useful for doing coverage analysis; use e.g.:
#   make TESTS=string-tests MODULE=ne_string.c cover
cover: subdirs
	@rm -f src/*.*da test/common/*.*da test/*.*da
	@cd test && $(MAKE) check
	@cd src && $(GCOV) -cb $(MODULE)

# as per 'cover' target; prints list of functions without 100% coverage
uncover: subdirs
	@rm -f src/*.*da test/common/*.*da test/*.*da
	@cd test && $(MAKE) check
	@cd src && $(GCOV) -cb $(MODULE)
	@grep ^function src/$(MODULE).gcov | grep -v 'executed 100' | sort -nr -k 9,9

subdirs:
	@cd src && $(MAKE)

# Regenerating the docs requires xmlto to be installed, this target is
# executed when release tarballs are generated.
docs: docs-man docs-html

docs-man:
	rm -rf doc/man; mkdir -p doc/man
	$(XMLTO) -o `pwd`/doc/man -x $(srcdir)/doc/man.xsl man $(srcdir)/doc/manual.xml

docs-pdf:
	$(XMLTO) -o `pwd`/doc pdf $(srcdir)/doc/manual.xml

docs-ps:
	$(XMLTO) -o `pwd`/doc ps $(srcdir)/doc/manual.xml

docs-html:
	test -d doc/html && rm -rf doc/html || true
	mkdir -p doc/html
	cp $(srcdir)/doc/manual.css doc/html
	$(XMLTO) -o `pwd`/doc/html -x $(srcdir)/doc/html.xsl html $(srcdir)/doc/manual.xml

# Validate the manual source
docs-valid:
	xmllint --noout --valid $(srcdir)/doc/manual.xml

clean:
	@cd src && $(MAKE) clean
	@cd test && $(MAKE) clean

distclean: clean
	rm -rf Makefile config.h neon.pc config.status src/Makefile libtool config.log config.cache neon-config autom4te*.cache test/Makefile

again: clean

Makefile: $(srcdir)/Makefile.in
	@./config.status Makefile

neon-config: $(srcdir)/neon-config.in
	@./config.status neon-config

install-docs: install-man install-html

install-html:
	$(INSTALL) -d $(DESTDIR)$(docdir)/html
	for d in doc/html/*.html; do \
		$(INSTALL_DATA) $$d $(DESTDIR)$(docdir)/html; \
	done

install-man:
	$(INSTALL) -d $(DESTDIR)$(man3dir)
	$(INSTALL) -d $(DESTDIR)$(man1dir)
	for m in doc/man/*.3; do \
	 $(INSTALL_DATA) $$m $(DESTDIR)$(man3dir); done
	for m in doc/man/*.1; do \
	 $(INSTALL_DATA) $$m $(DESTDIR)$(man1dir); done

install: install-@ALLOW_INSTALL@

install-memleak:
	@echo "ERROR: The neon internal memory leak checking code is for testing"
	@echo "ERROR: purposes only; this copy of neon must not be installed."
	@false

install-yes: install-lib install-headers install-config install-docs install-nls

# libtool does all the necessary magic here
install-lib: subdirs
	$(INSTALL) -d $(DESTDIR)$(libdir)
	$(LIBTOOL) --mode=install $(INSTALL) src/libneon.la \
		$(DESTDIR)$(libdir)/libneon.la

install-headers:
	$(INSTALL) -d $(DESTDIR)$(neonincludes)
	@for h in $(DIST_HEADERS); do \
		echo Installing $$h into $(DESTDIR)$(neonincludes); \
		$(INSTALL_DATA) $(srcdir)/src/$$h $(DESTDIR)$(neonincludes)/$$h \
			|| exit 1; \
	done

install-config: neon-config neon.pc
	$(INSTALL) -d $(DESTDIR)$(bindir)
	@echo Installing neon-config into $(DESTDIR)$(bindir)
	@$(INSTALL_SCRIPT) neon-config \
		$(DESTDIR)$(bindir)/`echo neon-config|sed '$(transform)'`
	$(INSTALL) -d $(DESTDIR)$(pkgconfigdir)
	$(INSTALL_DATA) neon.pc $(DESTDIR)$(pkgconfigdir)/neon.pc

install-tests: install-lib
	@cd test && make install

install-nls: install-nls-@NE_FLAG_I18N@

install-nls-no:
	@echo NLS not enabled.

install-nls-yes:
	@for f in $(LINGUAS); do \
	 $(INSTALL) -d $(DESTDIR)$(localedir)/$$f/LC_MESSAGES; \
	 $(INSTALL_DATA) $(srcdir)/po/$$f.gmo $(DESTDIR)$(localedir)/$$f/LC_MESSAGES/neon.mo; \
	done

ChangeLog:
	svn log > $@

update-po:
	@xgettext $(XGETTEXT_OPTS) $(top_srcdir)/src/ne*.c -o $(POTFILE)
	@for f in $(LINGUAS); do \
	 echo "> Updating \"$$f\" catalog:"; \
	 $(MSGMERGE) --update $(top_srcdir)/po/$$f.po $(POTFILE); \
	 $(MSGFMT) --output /dev/null --check-format $(top_srcdir)/po/$$f.po || exit 1; \
	done

compile-gmo:
	@for f in $(LINGUAS); do \
	 echo "> Compiling \"$$f\" catalog:"; \
	 $(MSGFMT) --statistics -c -o po/$$f.gmo $(top_srcdir)/po/$$f.po; \
	done

update-copyright: Makefile
	@mv README.md README.orig
	@(sed -n '/^Copyright/q;p' < README.orig; \
	 grep -h Copyright src/*.[ch] po/*.po macros/*.m4 | \
	 sed -r 's/\(C\) [12].+[0-9],? /(C) /;s/^\#*//;s/^dnl//;s/<.*>//g;s/ @ .*//;s/[ ]*//;s/ *$$//;/Orton/d' | \
	 sort -u; echo '~~~') > README.md
	@diff -u README.orig README.md
	@rm -f README.orig

doc-status:
	@echo "Missing docs for:"
	@pass=0; fail=0; for f in `nm -D src/.libs/libneon.so | sed -n '/ T /{s/.* T //;s/@@.*//g;p;}' | sort`; do	\
	   if test -f doc/man/$$f.3; then										\
		echo "PASS: $$f"; pass=$$((pass + 1)); else								\
		echo "FAIL: $$f"; fail=$$((fail + 1)); fi;								\
	done; echo "Overall: Coverage=$$((100*pass / fail))%"; test $$fail -eq 0


================================================
FILE: NEWS
================================================
Changes in release 0.37.1:
* Bug fixes:
 - fix compile warnings with OpenSSL 4.0.0-alpha1
 - fix NTLM test case failures on big-endian systems
 - fix test suite with SSL enabled in VPATH builds

Changes in release 0.37.0:
* Interface changes:
 - API and ABI backwards-compatible with 0.27.x and later
* New interfaces and feaures:
 - ne_socket.h: add ne_sock_handshake(); deprecate ne_ssl_connect_ssl();
   add ne_sock_getcert(), ne_iaddr_put()
 - ne_ssl.h: add ne_ssl_clicert_copy(), ne_ssl_context_trustdefca(),
   ne_ssl_check_certificate(), ne_ssl_context_set_clicert(),
   ne_ssl_context_set_ccprovide()
 - ne_request.h: add ne_get_response_trailer(), ne_response_trailer_iterate()
   headers from the chunked trailer section are no longer merged with
   response headers to conform with RFC 9110 section 6.5
 - ne_string.h: add ne_strlower(), ne_strupper(), ne_mknonce(), NE_HASH_SHA1
 - dropped bundled NTLM code; Libntlm <https://gitlab.com/gsasl/libntlm>
   is now required for NTLM authentication support
 - ne_utils.h: ne_version_match() description fixed to match code;
   add ne_version_library()
* Bug fixes:
 - fix ne_xml_set_encoding() failure case with libxml 2.13+.
 - ne_session_create() passed-in scheme now always lower-cased

Changes in release 0.36.0:
* Interface changes:
 - API and ABI backwards-compatible with 0.27.x and later
* New interfaces and features:
 - ne_xml.h: add ne_xml_set_encoding()
 - ne_xmlreq.h: add ne_xml_dispatchif_request(); this and
   ne_xml_dispatch_request() both invoke ne_xml_set_encoding()
   with the charset= from the Content-Type, if present
 - ne_request.h: add ne_read_response_to_buffer()
 - ne_basic.h: add ne_getbuf()
* Bug fixes:
 - fix ne_simple_request() failures on non-207 XML responses (#208)
 - invoke the notifier callback again at the end of a chunked response
 - fix a failure case where a proxy connection could get reused after
   SSL proxy tunnel setup failed at the proxy
 - fix ne_sock_* OpenSSL 3.4 error handling on Windows (#213)
 - ne_get_content_type() updated for RFC 7303: default charset
   for text/ media types is removed
* Various documentation updates.

Changes in release 0.35.0:
* Interface changes:
 - API and ABI backwards-compatible with 0.27.x and later
 - pakchois-based PKCS#11 support is now deprecated
* Interface clarifications:
 - ne_md5_read_ctx() may return NULL
* New interfaces and features:
 - ne_request.h: add ne_get_response_retry_after()
 - ne_uri.h: add NE_PATH_NONPC escaping rule
 - ne_string.h: add ne_strhextoul()
 - ne_ssl.h: add ne_ssl_clicert_fromuri(), a simpler API
   to retrieve client certs based on (e.g.) PKCS#11 URIs;
   only supported with OpenSSL currently.
 - ne_session.h: add ne_status_handshake to notifier API
* Bug fixes:
 - ne_path_escape() now follows NE_PATH_NONPC pct-encoding
   rule by default (fixes #181)
 - ne_md5_*(): for OpenSSL, now uses the EVP* API
 - session caching fixes for OpenSSL
* "BUGS" document removed, use https://github.com/notroj/neon/issues

Changes in release 0.34.2:
* Fix regression in NTLM auth in 0.34.0 (issue #190).
* Add docs for ne_ssl_proto_name, ne_ssl_protovers, ne_get_request_target.

Changes in release 0.34.1:
* Fix regression in 207 parsing of <status> elements which omit
  a reason-phrase (issue #188).
* Fix ne_move() to submit lock tokens for the parent collection
  of a source resource locked with depth: 0.

Changes in release 0.34.0:
* Interface changes:
 - API and ABI backwards-compatible with 0.27.x and later
 - NE_SESSFLAG_SSLv2 is now ignored
* New interfaces and features:
 - ne_request.h: add ne_get_response_location(),
   add ne_get_request_target()
 - ne_redirect.h: adds relative URI resolution per RFC 9110
 - ne_socket.h: add ne_iaddr_set_scope(), ne_iaddr_get_scope(),
   ne_sock_getproto()
 - ne_session.h: add NE_SESSFLAG_STRICT session flag
 - ne_session.h: ne_session_create() now accepts scoped IPv6
   link-local literal addresses following the RFC 6874 syntax;
 - ne_session.h: add ne_ssl_set_protovers() to configure TLS
   protocol version ranges
 - ne_utils.h: add NE_FEATURE_GSSAPI, NE_FEATURE_LIBPXY feature flags
 - ne_ssl.h: add ne_ssl_proto_name()
 - HTTP strictness/compliance updated for RFC 9110/9112;
   notably stricter in parsing header field line, chunked
   transfer-coding, status-line.
* Bug fixes:
 - auth: the 'realm' string passed to credentials callback is now
   cleaned of non-printable characters.
* Documentation & header updates for RFC 9110/9112.
* New NE_MINIMUM_VERSION() autoconf macro for better version handling.

Changes in release 0.33.0:
* Interface changes:
 - API and ABI backwards-compatible with 0.27.x and later
* Interface clarifications:
 - ne_locks.h: note that returned lock may have a different URI
   than the path passed to ne_lock_discover() due to added
   support for RFC 4918 "lockroot" in lock discovery
 - ne_request.h: ne_request_create() takes a "target" rather
   than a path and this can also be an absolute-URI
 - ne_request.h: never-used ne_free_hooks typedef removed
 - ne_dates.h: clarified error cases (behaviour unchanged)
 - ne_session.h: ne_session_create() 'host' must match RFC 3986
   syntax; IPv6 literal addresses must use [] brackets
* New interfaces and features:
 - added new configure flag --enable-auto-libproxy which enables
   libproxy by default for new sessions (Jan-Michael Brummer)
 - ne_locks.h: added DAV:lockroot support per RFC 4918
 - ne_ssl.h: ne_ssl_trust_default_ca() now a no-op for non-SSL sessions
 - ne_request.h: add ne_add_interim_handler() to handle interim
   (1xx) responses; headers in interim responses are now accessible
 - ne_basic.h: add ne_putbuf()
 - ne_strhash: SHA-512/256 now supported for LibreSSL 3.8+ (orbea)
 - response handling no longer applies a maximum limit on 1xx interim
   responses; an overall timeout equal to the read timeout is now
   applied if a read timeout is configured and 1XXTIMEOUT is enabled
 - ne_request.h: add NE_REQFLAG_1XXTIMEOUT
* Bug fixes:
 - test suite now works correctly on IPv6-only hosts (Jeremy Sowden)
 - fixes for building against LibreSSL (orbea)
 - ne_uri_parse() fixes for handling URI with no path and catch
   some invalid URIs which were allowed (fasticc)
 - retry requests after a 408 response on a persisted connection
 - 207 error strings are cleaned and compressed to a single line
 - fixed thread-safety in ne_rfc1123_date where gmtime_r is available
 - ne_lock_refresh() fixed to use a non-idempotent request
 - TLS name verification updated to match RFC 9110/6125, added strict
   handling of IP literals vs DNS names

Changes in release 0.32.5:
* NOTE: Since 0.32.0 the "$KRB5_CONFIG" environment variable is ignored
  when running configure. Use KRB5_CONF_TOOL instead to specify an
  alternative to /usr/bin/krb5-config.
* Fail for configure --with-gssapi if GSSAPI can't be enabled (issue #102)
* Add Georgian translation (NorwayFun)
* Fixes for Windows MSYS2/MinGW build, including cross-build (Jim Klimov)

Changes in release 0.32.4:
* Fix Digest regression in allowing implicit algorithm= (issue #88)
* Fix Digest to safely allow spaces in usernames (without userhash)
* ne_ssl_trust_default_ca() now uses the system's trusted CAs
  with GnuTLS where supported (matching behaviour of OpenSSL)

Changes in release 0.32.3:
* Improvements and fixes to Windows build (Chun-wei Fan)
* Fix finding pkg-config when cross-compiling (Hugh McMaster)
* Fix Digest cnonce entropy sources in non-SSL builds
* Fix cases where Digest usernames were rejected as non-ASCII
* Fix build failures with OpenSSL 1.1 on some platforms

Changes in release 0.32.2:
* Fix auth handling for request-target of "*" (regressed since 0.31.x)
* Fix bindtextdomain() detection on OS X (Daniel Macks)
* Fix regeneration of docs in "make install" (Lonnie Abelbeck)
* Fixes for NetBSD build (Thomas Klausner)

Changes in release 0.32.1:
* Fix configure CFLAGS handling in Kerberos detection.
* Various spelling fixes.

Changes in release 0.32.0:
* Interface changes:
 - API and ABI backwards-compatible with 0.27.x and later
 - NE_AUTH_DIGEST now only enables RFC 2617/7616 auth by default;
   to enable weaker RFC 2069 Digest, use NE_AUTH_LEGACY_DIGEST
   (treated as a security enhancement, not an API/ABI break)
* Interface clarifications:
 - ne_auth.h: use of non-ASCII usernames with the ne_auth_creds
   callback type is now rejected for Digest auth since the
   encoding is not specified.  ne_add_auth() can be used instead.
 - ne_request.h: the ne_create_request_fn callback is passed the
   request-target using RFC 7230 terminology
* New interfaces and features:
 - ne_string.h: added ne_strhash(), ne_vstrhash(), ne_strparam()
 - ne_auth.h: added RFC 7616 (Digest authentication) support,
   including userhash=, username*= and SHA-2 algorithms
   (SHA-2 requires GnuTLS/OpenSSL).  added NE_AUTH_LEGACY_DIGEST
 - ne_auth.h: added ne_add_auth() unified auth callback interface,
   accepts (only) UTF-8 usernames, uses a larger password buffer,
   and has different/improved attempt counter semantics.
 - RFC 7617 scoping rules are now applied for Basic authentication.
 - ne_ssl.h: added ne_ssl_cert_hdigest()
 - ne_socket.h: added ne_sock_shutdown()
 - sendmsg()/send() are used with the MSG_NOSIGNAL flag to write to
   sockets on Unix, rather than write()/writev(), avoiding SIGPIPE
 - explicit_bzero() is used where available to clear credentials
* Bug fixes:
 - fixed TLS connection shutdown handling for OpenSSL 3
 - fix various Coverity and cppcheck warnings (Sebastian Reschke)
 - Kerberos library detection uses pkg-config where possible.
 - fix some configure checks on Win32 (Christopher Degawa)
 - fix some configure errors on MacOS (Ryan Schmidt)

Changes in release 0.31.2:
* Fix ne_md5_read_ctx() with OpenSSL on big-endian architectures.
* Fix GCC 10 warning in PKCS#11 build.
* Fix OpenSSL build w/o deprecated APIs (Rosen Penev).
* Fix unnecessary MD5 test for non-Digest auth (Sebastian Reschke).
* Fix hang on SSL connection close with IIS (issue #11).
* Fix ar, ranlib detection when cross-compiling (Sergei Trofimovich).

Changes in release 0.31.1:
* ADMIN: The neon website has moved to https://notroj.github.io/neon/
* Restore ne_md5_read_ctx() in OpenSSL build.
* Fix gcc warnings on Ubuntu (Jan-Marek Glogowski).
* Fix various spelling mistakes in docs and headers (thanks to FOSSIES).
* Fix ne_asctime_parse() (Eugenij-W).
* Fix build with LibreSSL (Juan RP).

Changes in release 0.31.0:
* Interface changes:
 - none, API and ABI backwards-compatible with 0.27.x and later
* New interfaces and features:
 - add more gcc "nonnull" attributes to ne_request_* functions.
 - for OpenSSL builds, ne_md5 code uses the OpenSSL implementation
 - add NE_SESSFLAG_SHAREPOINT session flag which enables workarounds
   for RFC non-compliance issues in Sharepoint (thanks to
   Jan-Marek Glogowski and Giuseppe Castagno)
 - ne_uri.h: add ne_path_escapef() in support of above
 - ne_207.h: add ne_207_set_flags() likewise in support of above
* API clarification:
 - ne_version_match() behaviour now matches actual 0.27+ ABI history
* Bug fixes:
 - fixes for OpenSSL 1.1.1 and TLSv1.3 support
 - fix crash with GnuTLS in client cert support (Henrik Holst)
 - fix possible crash in ne_set_request_flag()
 - fix build with libxml2 2.9.10 and later
 - fix handling lock timeouts >LONG_MAX (Giuseppe Castagno)

Changes in release 0.30.2:
* Add support for OpenSSL 1.1.x (Kurt Roeckx).
* Fix PKCS#11 support under GnuTLS 3.x.
 - PKCS#11 API no longer supported with GnuTLS 2.x

Changes in release 0.30.1:
* Fix memory leak with GnuTLS (Werner Baumann, Patrick Ohly).
* Fix possible crash after DNS lookup errors on Windows (Olivier Goffart).
* Don't fail if the SSL cert changes between connections with OpenSSL,
  behaviour now matches that with GnuTLS.
* Fix PKCS#11 support under OpenSSL with TLS 1.2.
* Fix static linking with pkg-config file (Alan H).

Changes in release 0.30.0:
* Interface changes:
 - none, API and ABI backwards-compatible with 0.27.x and later
* New interfaces and features:
 - ne_ssl.h: added ne_ssl_clicert_import, ne_ssl_context_get_flag
 - ne_session.h: added ne_set_addrlist2
 - ne_socket.h: added ne_addr_canonical
 - ne_auth.h: added NE_AUTH_GSSAPI_ONLY, NE_AUTH_SSPI (Nathanael Rensen)
 - ne_basic.h: added NE_CAP_EXT_MKCOL options test
 - ne_request.h: support chunked bodies with negative length passed to
   ne_set_request_body_provider (Julien Reichel)
* Bug fixes:
 - ne_path_escape: fix excessive memory allocation (Pierre Crokaert)
 - SSPI auth: use canonical server hostname, clear SSPI context after
   successful auth (Nathanael Rensen)
 - build fixes for Open Watcom compiler (NormW)
 - fix Win32 error code handling for local ne_sock_prebind bind failure
 - Win32: support LFS, thread-safe OpenSSL (Diego Santa Cruz)
 - GnuTLS: fix GnuTLS 3.x support (Matthias Petschick, Bartosz Brachaczek)

Changes in release 0.29.6:
* Don't abort SSL handshake with GnuTLS if a client cert is requested
  but none is configured/available (thanks to Patrick Ohly)
* Fix the method string passed to create_request hooks to have the same
  lifetime as the request object (Patrick Ohly)
* Docs updates.

Changes in release 0.29.5:
* Fix GnuTLS handshakes failures with 'TLS warning alert' (Bryan Cain)
* Further fix for SSPI support on Win32 (Danil Shopyrin)

Changes in release 0.29.4:
* Fix SNI support (Tobias Gruetzmacher)
* Fix possible Solaris linker errors if building static library
* Win32: Fix Kerberos authentication support with SSPI (Danil Shopyrin)
* Fix error handling when pulling a request body from an file
  (thanks to Lou Montulli)
* Fix ne_request_dispatch() return value for SOCKS proxy failure cases
* Tighten SSL cert ID checks to deny a wildcard match against an IP address

Changes in release 0.29.3:
* Change ne_sock_close() to no longer wait for SSL closure alert:
 - fixes possible hang with IIS servers when closing SSL connection
 - this reverts the behaviour with OpenSSL to match 0.28.x, and
   changes the behaviour with GnuTLS to match that with OpenSSL
* Fix memory leak with GnuTLS
* API clarification in ne_sock_close():
 - SSL closure handling now documented
 - return value semantics fixed to describe the implementation

Changes in release 0.29.2:
* Fix spurious 'certificate verify failed' errors with OpenSSL (Tom C)
* Fix unnecessary re-authentication with SSPI (Danil Shopyrin)

Changes in release 0.29.1:
* Fixes for (Unix) NTLM implementation:
 - fix handling of session timeout (Kai Sommerfeld)
 - fix possible crash (basic@mozdev.org)
* Fix unnecessary re-authentication with SSPI (Danil Shopyrin)
* Build fixes for Win32:
  - fix use of socklen_t with recent SDKs (Stefan Kung)
  - fix USE_GETADDRINFO on Win2K (Kai Sommerfeld)
* Fix build with versions of GnuTLS older than 2.8.0.

Changes in release 0.29.0:
* Interface changes:
 - none, API and ABI backwards-compatible with 0.28.x and 0.27.x
* New interfaces and features:
 - added NTLM auth support for Unix builds (Kai Sommerfeld, Daniel Stenberg)
 - ne_auth.h: added NE_AUTH_GSSAPI and NE_AUTH_NTLM auth protocol codes
 - added ne_acl3744.h, updated WebDAV ACL support (Henrik Holst)
 - added built-in SOCKS v4/v4a/v5 support: ne_socket.h:ne_sock_proxy(),       
   and ne_session.h:ne_session_socks_proxy()
 - added support for system-default proxies: ne_session_system_proxy(),
   implemented using libproxy where available
 - ne_session.h: added NE_SESSFLAG_EXPECT100 session flag, SSL verification
   failure bits extended by NE_SSL_BADCHAIN and NE_SSL_REVOKED, better 
   handling of failures within the cert chain (thanks to Ludwig Nussel)
 - ne_utils.h: added feature code NE_FEATURE_SYSPROXY
 - ne_socket.h: ne_sock_writev() (Julien Reichel), ne_sock_set_error(),
   ne_iaddr_raw(), ne_iaddr_parse()
 - ne_string.h: ne_buffer_qappend(), ne_strnqdup()
* Deprecated interfaces:
 - ne_acl.h is obsoleted by ne_acl3744.h (but is still present)
 - obsolete feature "NE_FEATURE_SOCKS" now never marked present
* Other changes:
 - fix handling of "stale" flag in RFC2069-style Digest auth challenge
 - ne_free() implemented as a function on Win32 (thanks to Helge Hess)
 - symbol versioning used for new symbols, where supported
 - ensure SSL connections are closed cleanly with OpenSSL
 - fix build with OpenSSL 1.0 beta
 - updated Polish (pl) translation (Arfrever Frehtes Taifersar Arahesis)

Changes in release 0.28.6:
* SECURITY (CVE-2009-2473): Fix "billion laughs" attack against expat;
  could allow a Denial of Service attack by a malicious server.
* SECURITY (CVE-2009-2474): Fix handling of an embedded NUL byte in
  a certificate subject name with OpenSSL; could allow an undetected
  MITM attack against an SSL server if a trusted CA issues such a cert.

Changes in release 0.28.5:
* Enable support for X.509v1 CA certificates in GnuTLS.
* Fix handling of EINTR in connect() calls.
* Fix use of builds with SOCK_CLOEXEC support on older Linux kernels.

Changes in release 0.28.4:
* Fix ne_forget_auth (Kai Sommerfeld)
* GnuTLS support fixes:
 - fix handling of PKCS#12 client certs with multiple certs or keys
 - fix crash with OpenPGP certificate
 - use pkg-config data in configure, in preference to libgnutls-config
* Add PKCS#11 support for OpenSSL builds (where pakchois is available)
* Fix small memory leak in PKCS#11 code.
* Fix build on Haiku (scott mc)

Changes in release 0.28.3:
* SECURITY (CVE-2008-3746): Fix potential NULL pointer dereference in
  Digest domain parameter support; could allow a DoS by a malicious server
* Fix parsing of *-Authenticate response header with LWS after quoted value
* Fix ne_set_progress(, NULL, ) to match pre-0.27 behaviour (and not crash)
* Fix to disable Nagle on Win32 with newer toolchain (thanks to Stefan Kng)
* Fix build on Netware (Guenter Knauf)
* Document existing ne_uri_parse() API postcondition and ne_uri_resolve()
  pre/postconditions regarding the ->path field in ne_uri structures 
* Mark ne_{,buffer_}concat with sentinel attribute for GCC >= 4.
* Distinguish the error message for an SSL handshake which fails after a 
 client cert was requested.
* Compile with PIC flags by default even for static library builds

Changes in release 0.28.2:
* Support "Proxy-Connection: Keep-Alive" for compatibility with HTTP/1.0
 proxies which require persistent connections for NTLM authentication
* Fix an fd leak in ne_ssl_{,cli}cert_read (GnuTLS only)
* Enable fast initialization in GnuTLS.

Changes in release 0.28.1:
* Fix Win32 build
* Fix build on SCO OpenServer 5.0.x (thanks to Nico Kadel-Garcia)
* Fix handling of Digest domain parameter values without a trailing slash
* Fix build against apr-util's bundled libexpat.la in Subversion
* Add --without-pakchois to configure (Arfrever Frehtes Taifersar Arahesis)
* zh message catalog renamed to zh_CN, translation updated (Dongsheng Song)

Changes in release 0.28.0:
* Interface changes:
 - none, API and ABI backwards-compatible with 0.27.x
* New interfaces:
 - ne_pkcs11.h: added basic PKCS#11 support (requires GnuTLS and pakchois)
 - ne_auth.h: added NE_AUTH_ALL and NE_AUTH_DEFAULT constants
 - ne_socket.h: added ne_sock_peer(), ne_sock_prebind(), ne_sock_cipher()
 - ne_session.h: NE_SESSFLAG_TLSSNI flag added; TLS SNI support is enabled
   by default, where supported; ne_set_localaddr() added
 - ne_request.h: added close_conn hooks (Robert J. van der Boon)
 - ne_basic.h: added ne_options2()
* Other changes:
 - add Polish (pl) translation (Arfrever Frehtes Taifersar Arahesis)
 - add support for the 'domain' parameter in Digest authentication
 - fix fd leak in ne_sock_connect() error path (Andrew Teirney)
 - the FD_CLOEXEC flag is set on socket fds
 - fix timezone handling in ne_dates for more platforms (Alessandro Vesely)
 - fix ne_simple_propfind() to print XML namespaces in flat property values
 - fix ne_get_range() for unspecified end-range case (Henrik Holst)
 - fix ne_strclean() to be locale-independent and avoid possible Win32 crash
 - fix ne_get_error() to not "clean" localized error strings
 - fix ne_ssl_clicert_read() to fail for client certs missing cert or key
 - Win32: fix build with VS 2008 (Stefan Kueng)
 - Win32: fix neon.mak to not double-quote $(MAKE) (Henrik Holst)
 - improve strength of Digest cnonces in GnuTLS builds

Changes in release 0.27.2:
* Fix crash in GSSAPI Negotiate response header verification (regression
  since 0.26.x)

Changes in release 0.27.1:
* Fix regression in response progress counter for notifier/progress callbacks
* Fix interface description for ne_set_notifier() callback; sr.total
  is set to -1 not 0 for an indeterminate response length

Changes in release 0.27.0:
* New interfaces:
 - ne_session.h: ne_fill_proxy_uri() retrieves configured proxy,
   ne_hook_post_headers() adds a hook after response headers are read,
   ne_set_connect_timeout() sets session connection timeout,
   NE_SESSFLAG_RFC4918, NE_SESSFLAG_CONNAUTH flags added
 - ne_socket.h: ne_sock_connect_timeout() sets connection timeout,
   ne_iaddr_reverse() performs reverse DNS lookup
 - ne_string.h: ne_buffer_snprintf() prints to a buffer object
 - ne_xml.h: ne_xml_resolve_nspace() resolves namespace prefixes
* Interface changes:
 - ne_set_notifier() replaces ne_set_status(); finer-grained and type-safe
   connection status information now provided; obsoletes ne_set_progress()
 - ne_xml_dispatch_request() now only invokes the XML parser for 
   response entities with an XML content-type, following RFC 3023 rules
 - ne_acl_set() now takes a "const" entries array
 - LFS compatibility functions *64 removed: all functions taking an
   off_t now take an ne_off_t which is off64_t for LFS builds
* GnuTLS support now mostly feature-complete with OpenSSL support:
 - greatly improved SSL distinguished name handling with GnuTLS >= 1.7.8
* Other changes:
 - descriptive error messages for authentication failures
 - SSPI support uses canonical DNS server name (Yves Martin)
 - fixes for handling of "stale" parameter in Digest authentication
 - added support for URIs in SSL server certificate subjectAltName field
 - fix compiler warnings with expat 2.x
 - fix handling of "Transfer-Encoding: identity" responses from privoxy

Changes in release 0.26.4:
* Fix Negotiate Authentication-Info response header verification with GSSAPI
* Fix multiple handlers with ne_add_{server,proxy}_auth (Werner Baumann)
* Fix SSPI build with some versions of MinGW (Gisle Vanem)
* Fix for SSPI segfault in response header verification (Mike DiCuccio)
* Fix error strings for CONNECT SSL proxy tunnel request failure
* Fix install-nls for VPATH builds (Hans Meine)
* Fix use of unencrypted client certs with GnuTLS
* Fix ne_lock* If: header insertion to use CRLF-terminated headers
* Fix test suite failures on QNX by working around send() length limit
* Fix handling of POSIX strerror_r failure case in ne_strerror
* Fix alignment issues in test suite MD5 code

Changes in release 0.26.3:
* Fix buffer under-read in URI parser (Laszlo Boszormenyi, CVE-2007-0157)
* Fix regression in handling of "attempt" argument passed to auth callbacks;
  ensure the value only increments for each invocation of the callback
* Fix handling of "nextnonce" parameter in Digest authentication

Changes in release 0.26.2:
* Fix error reported for LOCK responses lacking a Lock-Token header.
* Use Libs.private in neon.pc for newer versions of pkg-config.
* Build fix for platforms without libintl.h.
* Build fixes for MinGW. (Matthias Miller)
* Build fix for h_errno detection on HP-UX 10. (Albert Chin)
* Win32: enable debugging; build fixes with some SDKs. (Kiyo Kelvin Lee)

Changes in release 0.26.1:
* Build fixes for Win32 (D.J. Heap) and OS X.
* Add Simplified Chinese translation (Dongsheng Song).

Changes in release 0.26.0:
* Added internationalization support:
 - ne_i18n.h exposes ne_i18n_init(), a process-global initializer
   which may be required for some applications
 - (partial) message catalogs for cs, de, fr, ja, nn, ru and tr
 - NE_FEATURE_I18N feature code added to indicate support
* Added support for GnuTLS (thanks to Aleix Conchillo Flaque):
 - pass --with-ssl=gnutls to configure; GnuTLS >= 1.0.22 required
 - use --with-ca-bundle to specify a default SSL CA root bundle
 - some remaining issues with PKCS#12 certs in current GnuTLS releases,
   distinguished name handling is sub-standard relative to OpenSSL
* Changes and additions to URI support:
 - ne_uri structure: add query, fragment fields; authinfo renamed
   to userinfo
 - ne_uri_parse() now takes a URI-reference as input rather than 
   the previous pseudo-URI syntax; the query and fragment components
   are now parsed out.  Many malformed URIs are now rejected
 - ne_uri_unparse() changed to respect the new fields
 - ne_uri_resolve(): new function; resolves relative URI references
 - ne_uri_copy(): new function, copies a URI structure
* Changed results callbacks for ne_lock_discover, PROPFIND interfaces:
 - take URI as parsed ne_uri * structure rather than char *
* Added functions which give control over authentication protocol use:
 - ne_add_server_auth(), ne_add_proxy_auth()
* Added ne_unhook_* functions to remove hooks
* Added ne_set_session_flags()/ne_get_session_flags() functions:
 - flags to disable persistent connection support, enable "ICY"
   protocol support, and to disable SSLv2 protocol support.
 - replaces ne_set_persist()
* Added ne_set_request_flags()/ne_get_request_flags() functions:
 - flags to enable 100-continue support, mark requests as non-idempotent
 - replaces ne_set_request_expect100()
* Change ne_md5.h interface to make struct ne_md5_ctx opaque:
 - added ne_md5_create_ctx(), ne_md5_destroy_ctx(), ne_md5_reset_ctx(),
   ne_md5_finish_ascii(); removed ne_md5_init_ctx()
 - fix alignment issues which could cause crashes in Digest code
* Fixed ne_get_range(), added ne_get_range64() (thanks to Lennart Poettering)
* Removed NE_FREE() macro from ne_alloc.h
* Added ne_strcasecmp(), ne_strncasecmp(), ne_tolower() functions
  to ne_string.h - locale-independent string comparison
* Changed ne_sock_init()/ne_sock_exit() such that ne_sock_exit() 
  only has effect once called an equal number of times to _init().
* Added "--enable-threadsafe-ssl=posix" configure flag, to enable
  thread-safe SSL support using POSIX threads in OpenSSL/GnuTLS
 - NE_FEATURE_TS_SSL feature code added to indicate support
* The manual is now licensed under the GPL rather than the GFDL

Changes in release 0.25.5:
* ne_ssl_clicert_decrypt(): catch and fail to load a client cert
  with mismatched key/cert pair.
* Fix build issue on AIX 5.1.
* Fix warnings if built against OpenSSL >= 0.9.8.
* Win32: fix issues in SSPI implementation (Stefan Kng).

Changes in release 0.25.4:
* GSSAPI fixes for non-MIT implementations (Mikhail Teterin).
* Fix ne_print_request_header() et al to use 8K buffer size on all
 platforms (fixes issue with long Destination: URLs on Win32).
* Win32 build fix for !USE_GETADDRINFO configuration.
* Documentation updates.

Changes in release 0.25.3:
* ne_lock() and ne_unlock(): fix cases where NE_ERROR would be returned 
  instead of e.g. NE_AUTH on auth failure.
* Prevent use of poll() on Darwin.
* Fix gethostbyname-based resolver on LP64 platforms (Matthew Sanderson).

Changes in release 0.25.2:
* Really fix the Win32 build.

Changes in release 0.25.1:
* ne_get_content_type(): fix cases where the charset field was not set
  to NULL after successful return (Johannes Schneider)
* Compressed response handling fixes:
 - fix double invocation of reader callback with len=0
 - fix cases where the reader callback return value was ignored
* Cache the new SSL session if the old one was expired (Robert Eiglmaier)
* Win32: fix build issues.

Changes in release 0.25.0:
* New interfaces:
 - ne_get_response_header() replaces ne_add_response_header_handler
 - ne_read_response_to_fd() and ne_discard_response() for use with
   ne_begin_request/ne_end_request style response handling
 - ne_xmlreq.h: ne_xml_parse_response() and ne_xml_dispatch_request()
 - ne_has_support() for feature detection, replaces ne_support_ssl()
 - ne_set_addrlist() can be used to bypass normal DNS hostname resolver
 - ne_buffer_czappend(), convenience wrapper for ne_buffer_append.
 - ne_iaddr_typeof() returns type of a socket object
 - ne_get_content_type() replaces ne_content_type_handler()
 - ne_set_request_expect100() replaces ne_set_expect100()
* New interfaces on LFS systems for large file support:
 - ne_set_request_body_fd64() call for using an fd opened using O_LARGEFILE
 - ne_set_request_body_provider64(), takes an off64_t length argument
* Interface changes:
 - ne_set_request_body_fd takes offset and length arguments and returns void
 - ne_set_request_body_provider takes length as off_t rather than size_t;
   provider callbacks now MUST set session error string if returning an error
 - response body reader callback returns an integer and can abort the response
 - ne_decompress_destroy() returns void; errors are caught earlier
 - ne_xml_failed() replaces ne_xml_valid(), with different return value logic
 - ne_xml_parse() can return an error; ne_xml_parse_v() aborts the response if 
   the parse either fails or is aborted by a handler returning NE_XML_ABORT
 - ne_path_escape() now escapes all but unreserved characters
 - ne_ssl_clicert_name() and ne_ssl_cert_identity() clarified to return UTF-8
 - ne_ssl_clicert_name() clicert object argument is now const
 - ne_uri_parse()/ne_uri_free() memory handling clarified
 - removed the buffer length requirement for ne_read_response_block()
* Bug fixes:
 - properly handle multiple Authentication challenges per request
 - fixes and improvements to the Negotiate auth implementation
 - handle proxies which send a 401 auth challenge to a CONNECT request
 - XML: handle the UTF-8 BOM even if the underlying parser does not
 - Win32: Fix timezone handling (Jiang Lei)
 - ne_lock_refresh() works and will update timeout of passed-in lock
 - persistent connection timeout handling fixes for CygWin et al
 - impose hard limit of 1024 props per resource in ne_props.h response parsing
* New platform-specific features:
 - Win32: Negotiate/NTLM support using SSPI (Vladimir Berezniker)
 - Win32: Add IPv6 support using ENABLE_IPV6 neon.mak flag (Kai Sommerfeld)
* Removed features:
 - the cookies interface has been removed
 - removed functions: ne_service_lookup(), ne_put_if_unmodified()
 - "qop=auth-int" support removed from Digest auth implementation
* Default XML parser search changed to check for expat before libxml2.

Changes in release 0.24.7:
* Compression interface fixes:
 - fix issues handling content decoding and request retries from
 authentication challenges (Justin Erenkrantz)
 - fix places where reader callback would receive spurious size=0 calls
 - fix to pass user-supplied userdata to user-supplied acceptance callback
* Fix for RFC2617-style digest authentication (Hideaki Takahashi).
* Fix to pick up gethostbyname() on QNX 6.2.

Changes in release 0.24.6:
* SECURITY (CVE CAN-2004-0398): Fix sscanf overflow in ne_rfc1036_parse,
 thanks to Stefan Esser.
* Link libneon against libexpat during Subversion build using bundled neon.
* Win32 build script update (Jon Foster).

Changes in release 0.24.5:
* SECURITY (CVE CAN-2004-0179): Fix format string vulnerabilities in
 XML/207 response handling, reported by greuff@void.at.
* Performance fix: avoid seeding the SSL PRNG if not creating an SSL socket.
* ne_ssl_readable_dname() is now defined to return UTF-8 strings.
* Fix case where gssapi/gssapi_generic.h was included but not present.
* Fix ne_utils.c build on platforms where zlib does "#define const".
* Fix use of ne_proppatch_operation with some C++ compilers.
* Update libtool for fix to --enable-shared on Darwin.
* BeOS: check for gethostbyname in -lbind (David Reid).

Changes in release 0.24.4:
* Ignore unclean SSL closure when response body is delimited by EOF
 ("Could not read response body: Secure connection truncated" errors
 with some buggy SSL servers).
* Fix test/ssl.c syntax errors with C89 compilers (Radu Greab).

Changes in release 0.24.3:
* Respect configure's --datadir argument (Max Bowsher).
* Fix build on Windows when OpenSSL is not used.
* Fix use of SSLv2 (spurious "Server did not present certificate" error).
* When using SSL via a proxy, prevent leaking server auth credentials
 to the proxy, or proxy auth credentials to the server.

Changes in release 0.24.2:
* Fix name resolver with some old versions of glibc.
* Fix problems with configure's "time_t format string" detection.
* Fix problems when a broken Kerberos installation is found.
* When verifying SSL certificates, check iPaddress names in the
 subjectAltName extension.

Changes in release 0.24.1:
* Add support for "GSS-Negotiate" Kerberos authentication scheme (from
 Risko Gergely and Burjan Gabor).
* Disable Nagle to improve performance of small requests (thanks to
 Jim Whitehead and Teng Xu).
* Fix compatibility with OpenSSL 0.9.6 (broken in 0.24.0).
* Fix prototype mismatch in ne_207.c.
* Define ssize_t from ne_request.h for Win32.
* Prevent segfault on zlib initialization failures.
* ne_sock_init does not fail if PRNG could not be seeded.
* Fix segfault in cookies code (Markus Mueller).
* Documentation updates.

Changes in release 0.24.0:
* Major changes to XML interface:
 - have the start-element callback either accept, decline, abort, 
 or return a state integer.
 - remove 'struct ne_xml_elm'; callbacks are passed {nspace, name}
 strings along with a state integer.
 - dropped "collect", "strip-leading-whitespace" modes
 - push responsibility for accumulating cdata onto caller; drop 'cdata'
 argument from end-element callback.
 - don't abort if no handler accepts a particular element, just ignore
 that branch of the tree.
 - dropped support for libxml 1.x and expat < 1.95.0.
 - guarantee that start_element callback is not passed attrs=NULL
 - add ne_xml_doc_encoding() to retrieve encoding of parsed XML document.
* Major changes to SSL interface:
 - rewrite of interfaces for handling server and client certificates;
 ne_ssl.h: many new functions available.
 - only PKCS#12-encoded client certs are supported.
 - changes to most names of SSL-related functions operating on an
 ne_session, e.g. ne_ssl_load_cert->ne_ssl_trust_cert.
 - client cert provider callback is passed the set of acceptable CA
 names sent by the server
 - the entire chain of certs presented by server is now accessible
* Remove unused ne_register_progress() from socket layer.
* Changes to resolver interface: ne_addr_first and _next return const;
 ne_addr_print renamed to ne_iaddr_print; ne_iaddr_make and ne_iaddr_free
 have been added.
* ne_request_create() now duplicates the method string passed in.
* ne_redirect_location() will now return NULL in some cases.
* Split socket creation to ne_sock_create() from ne_sock_connect:
 - should report connect() error messages properly on Win32.
* Fix several memory leaks in error handling paths.
* Add a pkg-config file, neon.pc.in.

Changes in release 0.23.9:
* Fix inability to connect on AIX 4.3.
* neon-config exports includes needed for OpenSSL given by pkg-config.
* ne_redirect_location will return NULL if redirect hooks have not
 been registered for the session (Ralf Mattes <rm@fabula.de>).

Changes in release 0.23.8:
* SECURITY: Prevent control characters from being included in the
 reason_phrase field filled in by ne_parse_statusline(), and in
 the session error string.
* Disable getaddrinfo() support on HP-UX; fix resolver for HP-UX 11.11.
* Fix digest auth response verification for >9 responses in session
 (bug manifests as "Server was not authenticated correctly" error).
* On Linux, skip slow lookup for IPv6 addresses when IPv6 support is
 not loaded in kernel (thanks to Daniel Stenberg for this technique).
* Update to autoconf 2.57 and libtool 1.4.3.

Changes in release 0.23.7:
* Fix for handling EINTR during write() call (Sergey N Ushakov).
* When available, use pkg-config to determine compiler flags needed to 
 use OpenSSL headers and libraries.

Changes in release 0.23.6:
* Fixes for error handling in socket layer on Win32 from Johan Lindh
 and Sergey N Ushakov <ushakov@int.com.ru>:
 - meaningful error messages rather than "No error"
 - handle persistent connection timeouts properly
* Fix to use RFC2617-style digest auth when possible (had reverted to 
 only using RFC2068-style in 0.16.1).
* Fix NULL pointer dereference on certain ill-formed PROPFIND responses.
* Allow ne_sock_init to re-initialize after ne_sock_finish has been called
 (Sergey N Ushakov).

Changes in release 0.23.5:
* Fix rejection of SSL server certificates which had commonName as
 the least specific attribute in the subject name.
* Fix to dereference entities (e.g. "&amp;") in attribute values with libxml.
* Fix ne_socket.c build on HP-UX 10.20 (thanks to Branko ibej)
* Remove misguided insistence on "secure" versions of zlib/OpenSSL;
 no checks for zlib version are now performed, only OpenSSL 0.9.6 is
 required.  --with-force-ssl, --with-force-zlib option removed.
* Add --with-egd[=PATH] option, conditionally enable EGD support; either 
 using EGD socket at PATH, or fall back on system defaults.  $EGDSOCKET 
 and $HOME/.entropy are no longer used.
* Add support for `--la-file' argument to neon-config, which prints the
 full path of the installed libneon.la file.

Changes in release 0.23.4:
* Ignore an unclean SSL shutdown on persistent connection timeout
 (fixing spurious "Secure connection truncated" errors).
* Fix a segfault on second and subsequent requests using a given
 session, when the first fails with NE_LOOKUP.
* Fix configure for gcc installations which produce warnings by default
 (such as gcc on hppa2.0n-hp-hpux11.00 using native as)

Changes in release 0.23.3:
* Further build fixes for Win32 (Blair Zajac).
* Another fix for use of SSL against Tomcat 3.2.

Changes in release 0.23.2:
* Build fix for Win32 (Blair Zajac).

Changes in release 0.23.1:
* Identify as correct version, not 0.22.

Changes in release 0.23.0:
* Improved address resolver (ne_addr_*) replacing ne_name_lookup():
 - use getaddrinfo() if found; include support for IPv6 (based on work
 by Noriaki Takamiya <takamiya@po.ntts.co.jp>)
* For a hostname with multiple addresses, each address is tried in turn
 until a connection is made.
* Support for seeding OpenSSL's PRNG via $EGDSOCKET or $HOME/.entropy,
 to enable SSL on platforms which lack a /dev/random device.
* RFC2818 compliance for certificate identity checks in SSL:
 - use `dNSname' values in subjectAltName extension if present
 - hostname comparison fixed to not be case-sensitive
* Fix interop with buggy SSL implementation in Tomcat 3.2.
* Added NE_DBG_SSL debug channel.
* ne_strerror changed to return the passed-in buffer.
* Added ne_strnzcpy macro to ne_string.h.
* Win32 build fixes, improvements, and documentation updates, from 
 Blair Zajac <blair@orcaware.com>.
* Fix ne_sock_init so SIGPIPE signals are ignored even if SSL library
 initialization fails (e.g. platforms without /dev/random).
* Added reference documentation:
 - ne_sock_init, ne_addr_*.

Changes in release 0.22.0:
* Remove the const qualifier from the reason_phrase field in ne_status.
 - ne_parse_statusline() now strdup's the reason_phrase
* Remove the status_line argument from ne_207_end_propstat and _end_response
* Change ne_session_create, ne_session_proxy, ne_sock_connect, and the 
 'port' field of the ne_uri structure to use an unsigned int for port numbers
* ne_uri_defaultport returns unsigned and '0' on an unknown port (not -1).
* Changes to hooks interface:
 - pass an ne_request pointer to per-request hooks
 - replace "accessor" hooks with ne_{get,set}_{request,session}_private
* Authentication changes:
 - the hooks changes fix a segfault if auth is enabled for an SSL session
 through a proxy server
 - fix ne_forget_auth segfault if either proxy or server auth are not used
* Improvements to persistent connection retry logic and error handling 
 in request code; fixing some cases where some errors where incorrectly
 treated as a persistent connection timeout
 - a TCP RST at the appropriate time is now treated as a persistent 
 connection timeout.
 - handle persistent connection timeouts on SSL connections
* Changes to SSL support:
 - improved error handling
 - OpenSSL 0.9.6f or later is required for security fixes and functional
 correctness; 0.9.6 or later required for functional correctness
 - use --with-force-ssl to override OpenSSL version check
 - fix for proxy CONNECT tunnelling with some proxies (e.g. Traffic-Server)
 - fix potential segfault if client cert. provider callback is used
 - fix to use supplied password callback for PEM-encoded client certificates
 (Daniel Berlin <dberlin@dberlin.org>)
* strerror_r is used if available for thread-safe error handling.
* Remove ne_read_file().
* ne_version_match replaces ne_version_minimum (semantics changed slightly).
* XML request bodies use a content-type of "application/xml" now; 
 applications can use NE_XML_MEDIA_TYPE from ne_xml.h
* Fix decompress code on big-endian or 64-bit platforms.
* Fix to build on Darwin 6 (aka Mac OS X 10.2) (Wilfredo Snchez,
 <wsanchez@mit.edu>)
* Win32 changes:
 - remove conflict between OpenSSL's X509_NAME and recent versions of
 the Platform SDK (Branko ibej)
 - fix inverted debug/non-debug build logic (Branko ibej)
 - add NODAV and OPENSSL_STATIC flags to neon.mak (Gerald Richter)

Changes in release 0.21.3:
* Fix segfault if using proxy server with SSL session and server
 certificate verification fails.
* Fix leak of proxy hostname once per session (if a proxy is used).
* Add --with-libs configure argument; e.g. --with-libs=/usr/local picks
 up any support libraries in /usr/local/{lib,include}

Changes in release 0.21.2:
* Fix 'make install' for VPATH builds.
* Use $(mandir) for installing man pages (Rodney Dawes).
* Follow some simple (yet illegal) relativeURI redirects.
* Always build ne_compress.obj in Win32 build (Branko ibej).
* Fix decompression logic bug (Justin Erenkrantz <jerenkrantz@apache.org>)
 (could give a decompress failure for particular responses)
* Fix ne_proppatch() to submit lock tokens for available locks.
* More optimisation of ne_sock_readline.

Changes in release 0.21.1:
* Don't include default SSL port in Host request header, which can
 help interoperability with misbehaving servers (thanks to Rodney Dawes
 <dobey@ximian.com>).
* Don't give a "truncated response" error from ne_decompress_destroy if
 the acceptance function returns non-zero.
* Fix for Win32 build (Sander Striker <striker@apache.org>).
* Fix for cookie name/value being free()d (thanks to Dan Mullen).
* Optimisation of ne_sock_readline.

Changes in release 0.21.0:
* Socket layer implements read buffering; efficiency and performance 
 improvement. Based on work by Jeff Johnson <jbj@redhat.com>
* Cleanup of socket interface:
 - renamed everything, s/sock_/ne_sock_/, s/SOCK_/NE_SOCK_/
 - removed unused and inappropriate interfaces.
 - renaming done by Olof Oberg <mill@pedgr571.sn.umu.se>
 - see src/ChangeLog for the gory details.
* Fix typoed 'ne_destroy_fn' typedef (Olof Oberg).
* Support OpenSSL/ENGINE branch.
* Bogus ne_utf8_encode/decode functions removed.
* ne_base64() moved to ne_string.[ch].
* ne_token drops 'quotes' parameter; ne_qtoken added.
* ne_buffer_create_sized renamed to ne_buffer_ncreate.
* ne_xml_get_attr takes extra arguments and can resolve namespaces.
* ne_accept_response function type takes const ne_status pointer.
* Drop support for automatically following redirects:
 - ne_redirect_register just takes a session pointer
 - ne_redirect_location returns an ne_uri pointer
* configure changes: --with-ssl and --with-socks no longer take a directory
 argument.  To use SOCKS or SSL libraries/headers in non-system locations, 
 use ./configure CPPFLAGS=-I/... LDFLAGS=-L/... 
* Reference documentation included for most of ne_alloc.h and ne_string.h,
 and parts of ne_session.h and ne_request.h.
 - see installed man pages, HTML documentation.

Changes in release 0.20.0:
* Major changes to DAV lock handling interface (ne_locks.h):
 - struct ne_lock uses a full URI structure to identify locked resource
 - ne_lock() requires that owner/token fields are malloc-allocated (or NULL)
 on entry
 - introduce a "lock store" type, ne_lock_store, to replace the lock session;
 accessor functions all renamed to ne_lockstore_*.
 - ne_lock_iterate replaced with a first/next "cursor"-style interface
 - If: headers use an absoluteURI (RFC2518 compliance fix).
 - fix for handling shared locks on DAV servers which return many active locks
 in the LOCK response (thanks to Keith Wannamaker)
* Moved URI/path manipulation functions under ne_* namespace (ne_uri.h):
 - path handling functions renamed to ne_path_*
 - URI structure handling to ne_uri_*; struct uri becomes ne_uri.
 - ne_uri_parse doesn't take a 'defaults' parameter any more
 - if URI port is unspecified, ne_uri_parse sets port to 0 not -1.
 - added ne_uri_unparse and ne_uri_defaultport functions.
* New 'ne_fill_server_uri' function to initialize a URI structure with
 the server details for a given session (useful with locks interface).
* ne_decompress_{reader,destroy} are defined as passthrough-functions
 if zlib support is not enabled.
* API change: ne_ssl_provide_fn returns void not int.
* Added NE_SSL_FAILMASK for verify failure sanity check.
* Removed return codes NE_SERVERAUTH and and NE_AUTHPROXY; correct
 documentation, NE_PROXYAUTH is given for proxy auth failure.
* Require zlib >= 1.1.4 to avoid possible vulnerability in earlier versions.
 See http://www.gzip.org/zlib/advisory-2002-03-11.txt for more details.
 (version check can be skipped by passing --with-force-zlib to configure)
* New 'ne_ssl_readable_dname' function to create a human-readable string
 from an X509 distinguished name.
* Fix support for newer versions of libxml2 (thanks to Jon Trowbridge 
 <trow@gnu.org>).
* Fix corruption of reason_phrase in status object returned by
 ne_propset_status.
* More lenient handling of whitespace in response headers.
* ne_content_type_handler will give a charset of "ISO-8859-1" if no charset
 parameter is specified for a text/* media type (as per RFC2616).
* Miscellaneous cleanups and fixes (Jeff Johnson <jbj@redhat.com>).

Changes in release 0.19.4:
* Support bundled build of expat 1.95.x (Branko ibej).

Changes in release 0.19.3:
* For platforms lacking snprintf or vsnprintf in libc, require trio.
* Add NE_FMT_OFF_T to fix Win32 build (Dan Berlin, Branko ibej).
* Fix SSL support in Win32 build (Branko ibej).

Changes in release 0.19.2:
* Fix non-SSL build broken in 0.19.1.
* Working SOCKSv5 support (thanks to Torsten Kalix <torsten.kalix@bredex.de>)

Changes in release 0.19.1:
* Add missing stubs for ne_ssl_* functions for non-SSL build.
* Fix some error messages in new SSL code.

Changes in release 0.19.0:
* Major API change: ne_session_create now takes (scheme, hostname, port) 
 arguments: a session is clarified to be "a group of requests to a
 certain server".
 - removal of ne_session_server, ne_set_secure, and ne_set_proxy_decider
 - ne_session_proxy returns void.
 - DNS lookups are delayed until request dispatch time.
* Significant improvements to TLS/SSL support:
 - SSL is enabled if scheme passed to ne_session_create is "https"
 - new interfaces to load CA certs and to load SSL library's bundled CA certs
 - add server cert verification callback.  An SSL connection to a server
 with an unknown CA will now fail unless a verification callback is used.
 - enable SSL session caching (performance improvement)
 - support for wildcard server certs where commonName is "*.example.com".
 - thanks to Tommi Komulainen for the contribution of code from mutt's
 IMAP/SSL implementation under the LGPL, from which bits of this were derived.
* Improved SSL client certificate support:
 - far simpler interface, all done at ne_session.h level.
 - supports PKCS#12 and PEM-encoded certificates.
 - optional callback for only providing client when demanded by server.
* Support for TLS upgrade is removed, since it isn't useful.
* If NEON_SSL is defined, API extensions are available to:
 - allow access to the SSL_CTX * to adjust session SSL options
 - retrieve the server certificate (X509 *)
* Decompress fixes:
 - fix potential segfault in ne_decompress_destroy
 - check the CRC of the deflated output (and fail if it doesn't match)
 - fail appropriately on truncated responses, and trailing bytes in response. 
* Added ne_set_read_timeout to use configurable timeout on socket reads.
* Malformed response headers will be ignored rather than failing the request.
* ne_set_error takes printf-style vararg.
* Fixes for ne_get_range and improve error handling. 
* Functions which append to an ne_buffer do not return a success value,
 but they do use ne_realloc/ne_malloc under the hood now, so an OOM callback
 will be used (with the usual caveats).
* XML interface does not strip leading whitespace from cdata by default,
 the NE_XML_STRIPWS flag is available to restore this feature if required.
* Upgraded to libtool 1.4.2:
 - should fix --enable-shared on Mac OS X 10.1
* Test suite now contains over one hundred tests.

Changes in release 0.18.5:
* Removed old neon.dsp, neon.dsw.
* Update Win32 build to add OpenSSL and zlib support (Branko ibej).
* Fix ne_compress.c to compile on Win32 (Branko ibej).

Changes in release 0.18.4:
* Fixes for Content-Type parsing using ne_content_type_handler (Greg Stein)
 - also now parses the charset parameter from header value.
* Removed ne_concat() function, which didn't work and wasn't used.

Changes in release 0.18.3:
* Fix parsing lock timeout from server (Arun Garg).
* Send Timeout headers in LOCK and refresh LOCK requests (Arun Garg).
* Updated neon.mak and config.hw.in for Win32 build (patch from
 Branko ibej <brane@xbc.nu>).
* Define XML_BYTE_ORDER for bundled expat build in support macro
 NEON_XML_PARSER().

Changes in release 0.18.2:
* Fix --with-neon=PATH in support macros.
* Support DESTDIR in Makefile install targets (patch by
 Pawel Golaszewski <blues@blysk.ds.pg.gda.pl>).
* Portability fixes:
 - fix configure check for time_t on some platforms (e.g Solaris 2.6).
 - remove expect100_works bitfield in ne_session structure (thanks to 
 Yan Periard <yperiard@ems.net>).

Changes in release 0.18.1:
* Minor fix for authentication: "attempt" counter was not reset correctly
 after authentication failed, so subsequent requests would not authenticate
 correctly either.
* API change: ne_session_destroy returns void (there was no error case).
* Portability fixes (non-GCC compilers, 64-bit platforms, UnixWare 7)
* Optimisations in string manipulation routines.
* config.hw is included in the release tarball again.
* Improvements in the autoconf support macros:
 - check for neon-config in PATH if --with-neon is not given
 - stop if --with-neon is used, and the check for external neon fails
 - added NEON_WITHOUT_ACL to prevent build of ne_acl.o

Changes in release 0.18.0:
* API change: authentication callback is passed fixed-size username/password
 buffers, and an 'attempt' counter.  Authentication is retried *forever*
 until either it succeeds, or the callback returns non-zero.
* API clarifications:
 - ne_propname may have a NULL nspace field, indicating the property has no 
 namespace.  This holds for properties returned by the propfind interfaces.
 - added NE_ELM_PROPS_UNUSED as the lowest element number which should
 be used with handlers added to the XML parser returned by 
 ne_propfind_get_parser.
* Fixes and cleanups of lock discovery interface.
* Fix for short write handling in ne_get() (thanks to rado <dzusto@yahoo.com>).
* Fix for XML namespace prefix handling where a prefix could be mapped to an 
 incorrect URI (e.g. in PROPFINDs against mod_dav with >10 namespaces used)
* Add '--support <feature>' option to neon-config; the script exits with
 success if given feature is supported. Known features are ssl, dav, zlib.
* Support for SSL, DAV, zlib is exported by neon.m4 as shell variable 
 NEON_SUPPORTS_{SSL,DAV,ZLIB}={yes,no} for bundled and external builds.
* `neon-config --cflags` won't include -I/usr/include for SSL build.
* Fix to call progress callbacks while sending request bodies again.
* Test changes:
 - portability fixes, auth interface and progress tests.

Changes in release 0.17.2:
* Accept Status-Lines with no reason phrase (Jeremy Elson).
* Fix handling of persistent connection timeout, and better error
 handling if sending a request fails.
* Fix crashes in locking code.
* Return parse error on XML namespace prefix declaration with
 an empty value. Thanks to Julian Reschke.
* Allow passing property names with NULL namespace to ne_proppatch.
* Fix for cross-compilation (Mo DeJong).
* Moved ne_propname definition from ne_207.h to ne_props.h.
* Test changes:
 - updated for Status-Line parsing changes (Jeremy Elson)
 - better persistent connection tests
 - fixed for --disable-webdav build

Changes in release 0.17.1:
* Add support for ACL method (Arun Garg <arung@pspl.co.in>),
 see ne_acl.h.
* Fixes and clean up of libraries exported via `neon-config --libs'
* Fix timezone handling when parsing dates (on some platforms).
* Upgrade to autoconf 2.52 and libtool 1.4 (thanks to Mo DeJong).
* Cleanup/simplification of request dispatching:
 - better handling of error cases, including fix for a possible
 infinite loop when the server closes the connection prematurely.
* Add '--without-zlib' configure option.
* Test changes:
 - prettify output; imitate Perl test suite output.
 - add tests for interim 1xx responses, persistent connections, more
 unbounded operations.

Changes in release 0.17.0:
* Add support for decoding gzip Content-Encoding: see ne_compress.h.
 - built if zlib is found; `neon-config --cflags' will define NEON_ZLIB if so.
* Rewrite hooks interface to register individual callbacks.
 - inspired by the Apache 2.0/APR hooks interface
* Register cookies hooks using ne_cookie_register().
* Clean up configure scripts to enable use of autoconf 2.5x (Mo DeJong).
* Use new endianess configure macro to allow cross-compiling (Mo DeJong).
* Fix invalid C code in sock_init() in Win32 build (Mo DeJong).
* Fix use of signal() on Win32 (Mo DeJong).
* Workaround libxml 1.x string handling not being UTF-8.	
* Test changes:
 - add tests for decompression interface.

Changes in release 0.16.1:
* Also handle write errors in ne_get_range.
* Dump request body blocks in debugging mode.
* Fix ne_shave() causing memory corruption when the result should 
  have been the empty string.
* Refactor auth header parsing code; more efficient now. 
 - fixes digest auth RFC2617-style broken in 0.16.0

Changes in release 0.16.0:
* API change: ne_copy takes a depth parameter (thanks to Arun Garg, Medha Atre)
* API change: validate callback to ne_xml also takes a userdata arg.
* Added 'ne_lock_refresh' for performing lock refresh (Arun Garg).
* Add SSL support to Win32 build (Peter Boos <PediB@colorfullife.com>)
  (see INSTALL.win32 for details).  Compile with USE_DAV_LOCKS also.
* Remove Server header parser for 100-continue support in ne_options.
  (and remove broken_expect100 from ne_server_capabilities).
* Set SIGPIPE disposition to "ignored" in sock_init().
* On platforms with setvbuf(), turn off buffering for the debug log 
  stream.
* Ignore repeated calls to sock_init().
* Fixes to error handling in ne_get_range.
* Minor improvements to memory handling in auth code.
* Fix for start_propstat callback being called with NULL response
  argument when given invalid XML, causing a segfault in propfind code.
* Test changes:
 - add regression test for the propfind segfault.
 - handle segfaults better (reap the child, flush the debug log).

Changes in release 0.15.3:
* Fix --with-expat=DIR build.

Changes in release 0.15.2:
* Fix Win32 for XML parser changes (Gerald Richter).
* Substitute versions into config.hw at distribution time.
* Add date parser for ISO8601-formatted dates as defined by RFC2518, e.g. 
  the creationdate property (Taisuke Yamada <tai@iij.ad.jp>).
* Fix Y2K bug in RFC1036 date parsing algorithm.
* Test changes:
 - add tests for date parsing functions.

Changes in release 0.15.1:
* Win32 update from Gerald Richter <richter@ecos.de>
 - new files neon.mak, INSTALL.win32
* Fix for ne_socket.h includes (Mo DeJong).
* More improvements for XML parser selection logic:
 - if parser is required, be sure to fail configure if none is found.
 - added --with-included-expat for bundled expat logic.
* Rename --enable-debugging to --enable-debug (Mo DeJong).
 - added NEON_DEBUG macro to exported autoconf macros.
* Call progress callbacks for request bodies.
* Test changes:
 - check that reading response headers is a bounded operation.
 - use a pipe between child and parent to avoid race condition and 
 tedious sleep().

Changes in release 0.15.0:
* Major API renaming to use ne_/NE_ namespace:
 - http_ to ne_, HTTP_ to NE_, dav_ to ne_, DAV_ to NE_, neon_ to ne_
 - hip_xml_ to ne_xml_, HIP_ELM_ to NE_ELM_, HIP_XML_ -> NE_XML_
 - sbuffer_ to ne_buffer_
 - DEBUG() to NE_DEBUG(), DEBUG_ to NE_DBG_
* Type renames:
 - http_req to ne_request
 - sbuffer to 'ne_buffer *'
* Note, 'ne_buffer' is not an implicit pointer type, you must 
  specify the '*' now, e.g. 'ne_buffer *buf = ne_buffer_create();'.
* ne_buffer is no longer opaque.
 - ne_buffer_data() removed: use buf->data instead.
 - ne_buffer_size() is a macro.
* Header renames and additions:
 - http_request.h -> ne_request.h
 - Session code split into ne_session.h
 - hip_xml.h -> ne_xml.h, nsocket.h -> ne_socket.h, http_utils.h -> ne_utils.h
 - neon_md5.h -> ne_md5.h, dav_207.h -> ne_207.h
 - http_basic.h and dav_basic.h merged into ne_basic.h
* New functions:
 - ne_token and ne_shave, to obsolete split_string, shave_string.
* Removed: ne_get_request_headers().
* autoconf changes:
 - disable building shared neon library by default.
 - option --enable-libxml is replaced by --with-libxml1 and
 --with-libxml2 to force use of a particular parser.
* Fix auth code to only take MD5 digests of response body blocks when
  necessary (thanks to Kai Sommerfeld).
* Fix alignment bug in MD5 code which could cause SIGBUS on Sparc 
  architectures (Kai Sommerfeld).
* Rewrite of request body handling:
 - ne_set_request_body_fd replaces _stream, using an int fd rather than
 a FILE *.
 - added ne_set_request_body_provider to give a callback which is called
 to provide request body blocks.
 - removal of 'use_body' hook in favour of 'ne_pull_request_body' function
 to allow hooks to manually read the request body.
 - ne_{put,get,post,put_if_unmodified} all take an integer fd rather than a
 FILE * stream.
* Test changes:
 - added framework for testing "over the wire" (fork a server process)
 - added tests for response message length handling, chunked responses, 
 header folding, sending request bodies.
 - start at listing RFC2616 requirements and whether they are met
 or not in test/STATUS.
 - test for MD5 alignment bug on Sparc (thanks to Kai Sommerfeld).

Changes in release 0.14.0:
* Add C++ inclusion safety to http_auth.h (Kai Sommerfeld).
* Define ssize_t on Win32. (Kai Sommerfeld).
* Add C++ inclusion safety to dav_locks.h and ne_alloc.h (thanks to
  Gregor Bornemann <Gregor.Bornemann@germany.sun.com>).
* Significant API change to properties code, to allow use of allprop
  and complex properties:
 - dav_propfind_set_complex and _set_flat are removed.
 - add parameter to dav_propfind_named to take the list of property names 
   to be fetched.
 - new function dav_propfind_set_private to set private callback.
 - all properties not handled by caller are stored as flat properties.
* Untested: add basic SOCKSv5 support: configure --with-socks.
 - please report success/failure to neon@webdav.org
* Win32/MSVC build files from Magnus Sirwi <sirwio@hotmail.com>.
* Fix for expat detection from Shane Mayer <shanemayer42@yahoo.com>.
* Namespace-protect md5 code and more.
 - md5_* -> ne_md5_*
 - ascii_to_md5 -> ne_ascii_to_md5 (and moved to neon_md5.h)
* Parse authinfo segment in URIs (Johan Lindh <johan@link-Data.com>).
 - added 'authinfo' field to struct uri.
* New API: hip_xml_get_attr to retrieve attributes.
* Store language for properties, access with dav_propset_lang.
 - only if property is defined on the property element itself.
* Started a simple test suite (test/*).
 - includes some simple HTTP server tests.
* Remove "Content-Length: 0" header for request with no body, fixing
  interop with Squid 2.3-STABLE1 (thanks to Kai Sommerfeld).
* http_parse_statusline skips leading whitespace. (Johan Lindh). 
* Partial fix for timezone/date parsing problems.

Changes in release 0.13.0:
* Fix ne_strndup allocating one byte less than it should (Kai Sommerfeld)
 - if you use uri_parse, this bug may have caused subtle memory corruption 
   in your application. 
* Revert API changes in 0.12: property values are not UTF-8 encoded/decoded
  internally.  (thanks to Greg Stein)
* Add another optional argument to NEON_BUNDLED macros, actions to
  be run if bundled build is *not* selected.
* API change: added argument to http_add_hooks to register cleanup function
  for the cookie.
* Removed dav_lock_unregister in favour of automatic cleanup when session
  is destroyed.
* Fixed leaks in redirect code (Kai Sommerfeld).
* Fixed crashes in hip_xml_destroy (Kai Sommerfeld).
* Redirects to a different hostname/port/scheme are never followed: the request
  will fail with HTTP_REDIRECT instead.  Redirect notification callback is 
  only called for *followed* redirects.
  New API: http_redirect_location() for retrieving location of last redirect.
* Authentication is now implemented as a hook, independently of http_request.c:
 - API change: removed 'hostname' argument from auth callbacks.
 - API change: you must now include http_auth.h from your application.
 - Also fixes case of using server and proxy authentication simultaneously
* Added 'http_forget_auth' to clear authentication session.
* New API: http_session_hook_private for retrieving private per-session cookie 
  for hooks.
* API change: http_set_request_body_stream has a return error value.
* API change: http_set_request_body_buffer now takes the buffer length too.
* New API: caller-pulls interface for reading response body: 
  http_begin_request, http_end_request, http_read_response_block. 
  An alternative to using the (much simpler) http_request_dispatch.
* Make --disable-webdav build work.
* New API: dav_propnames for retrieving property names.
* New API: dav_propfind_get_request to access request object of handler.
* API change: progress and connection status callbacks implemented at
  http_request.h level. Socket-level status callbacks removed, progress
  callbacks made per-socket.
* Supports new expat (Sam TH <sam@uchicago.edu>)
* Supports libxml2 (in preference to libxml1).
* API change: added namespace protection to base64 and dates functions:
  all have ne_ prefix now.
* Fixed ranged GETs where a specific range is requested (Johan Lindh 
  <johan@linkdata.se>).
* Limit number of response header fields to 100.
* Allow requests for the '*' URI even if a proxy server is in use.
* libxml: Get useful error messages for parse errors.

Changes in release 0.12.0:
* Portability fixes to http_request.c and http_auth.c.
 - fixes digest auth on big-endian architectures.
* Fix warnings from stray tokens after #endif's in uri.h and string_utils.h.
* Add C++ inclusion safety to http_redirect.h (Kai Sommerfeld 
  <kai.sommerfeld@germany.sun.com>).
* Make redirects to a different host work (Kai Sommerfeld).
* Fix reading response bodies when non-chunked and no Content-Length
  (Kai Sommerfeld).
* API change: 'http_add_hooks takes a 'const' request object.
* Fixed memory leaks in session hooks (thanks to Kai Sommerfeld).
* Fix passing NULL props argument to dav_simple_propfind, to support
  allprop requests.
**** MAJOR INTERFACE CHANGE ****
 - URIs passed to http_request_create() are NOT escaped by neon. You 
   MUST do this yourself to remain HTTP compliant, using e.g. 
   uri_abspath_escape. (Kai Sommerfeld)
* Added --disable-webdav flag to configure, to disable DAV support in
  the library.  This allows building neon without an XML parser. 
* Corresponding NEON_WITHOUT_WEBDAV macro for use in bundled builds.
* Fix Makefile dependancies.
* A bundled neon directory builds or doesn't build automatically
  (i.e. you recurse into it unconditionally).
* API clarification:
 - dav_propset_status may return NULL if the server does not return
   a response for the given property (issue is open for debate).
* API change up for debate:
 - Property values to dav_proppatch are UTF-8 encoded internally.
 - Property values in dav_propfind_* are UTF-8 decoded internally.
* API additions: ne_realloc, ne_utf8_encode.

Changes in release 0.11.0:
* Added SSL client certificate support with 'sock_set_client_cert'.
 - Supports certs in PEM-encoded files.
 - Specify a callback for prompting the user for the password with 
     sock_set_key_prompt.
* Added 'ne_oom_callback', to register a callback which is used if
  malloc() returns NULL.  (Mike Rosellini <m@icopyright.com>)
* Register appropriate callback with libxml to handle <![CDATA blocks
  as normal character data (fixes PROPFINDs against sharemation.com).
* Added 'NEON_REQUIRE' macro to declare that you require a neon library
  of a given minimum version, e.g.  NEON_REQUIRE(0,10) means "I need 
  neon 0.11 or later".  The _BUNDLED macros will fall back on the bundled
  copy if an external library is found which is not of a new enough version.
* Added neon_version_minimum() function call for run-time version detection.
* neon_config.h has been removed.
* Use closesocket() to close sockets on Win32 (Markus Fleck <fleck@isoc.de>).

Changes in release 0.10.1:
* Default expect-100 to OFF.

Changes in release 0.10.0:
* hip_xml API changes:
 - The search for a handler for a new child element begins at the
   handler of the parent element, and carries on up the stack.
   (previously, it always started from the base of the stack)
 - Documentation written: doc/parsing-xml.txt
* Remove memory leaks and tidy debugging output in new properties code.
* API changes to DAV locking interface: 
 - New function: dav_lock_copy to copy a lock object.
 - Re-ordered arguments to callback of dav_lock_discover, and made the
   lock object passed back const.
 - Fix leaks and crashes due to vague interface definitions.
* API change to dav_propfind_set_complex: use a callback to return the
  'private' structure.
* NEON_NORMAL_BUILD and NEON_LIBTOOL_BUILD macros defined for setting
  up neon's Makefile in a bundled build: see macros/neon.m4.
* NEON_VPATH_BUNDLED macro added which takes separate srcdir and
  builddir arguments for supporting VPATH builds (thanks to Peter Moulder 
  <pjm@bofh.asn.au>).
* Added optional final argument to NEON_(VPATH_)BUNDLED, which gives
  a set of actions to be run if the bundled build is chosen.
* NEON_SSL checks for OpenSSL in /usr too.
* API change: when using http_session_decide_proxy, it MUST be called
  before using http_session_server to prevent the DNS lookup on the origin
  server being optimised out.  The real scheme in use is passed to the 
  callback now.
* New function, dav_207_ignore_unknown, to ignore any unknown XML fragments
  in the 207 response.  Used by properties layer.

Changes in release 0.9.2:
* Fix using both dav_propfind_set_complex and dav_propfind_set_flat with the
  same propfind_handler.

Changes in release 0.9.1:
* dav_propfind interface
 - Guarantee that the 'private' structure will be initialized to zero on
   creation.
 - Make it the *callers* responsibility to free() the private structure.
* Fix a few arguments/variables which mirrored globally declared symbols.

Changes in release 0.9.0:
* Removed old dav_propfind_* interface, replaced with a better, more
  powerful, and easier to use interface:
 - 'dav_simple_propfind' interface for just fetching "flat" (byte-string)
   properties.
 - 'dav_propfind_*' interface for fetching flat and/or "complex" (structured
   XML) properties.
 - Lets you retrieve the 'status' information, to see what happened if
   fetching the property failed (e.g 404 Not Found).
* Fixes to doc/using-neon.txt (thanks to Greg Stein).
* Allow building when srcdir != builddir (Mo DeJong <mdejong@cygnus.com>)

Changes in release 0.8.1:
* Fix segfault in PROPFIND code.

Changes in release 0.8.0:
* Fix for using COPY/MOVE over SSL (thanks to David Sloat).
* Fix for using a proxy server and SSL.
* Added 'http_get_scheme' API call.
* Added 'http_redirect.h' to list of installed headers (thanks to everyone ;).
* Changes for building on Windows (Peter Boos <PediB@colorfullife.com>)
* Fixes for building on BeOS (Sam TH <sam@uchicago.edu> and David Reid
  <dreid@jetnet.co.uk>).
* Add buffering to socket code for pre-BONE BeOS systems (David Reid).
* Interface changes for hip_xml:
 - Renamed hip_xml_add_(mixed_)handler to hip_xml_push_(mixed_)handler
 - Documentation updates.
 - Added HIP_ELM_UNUSED for lowest element id which should be used.
*** MAJOR INTERFACE CHANGE ***
 - Removed 'http_status *' pointer from http_request_dispatch.
 - Added http_get_status(req) to retrieve the response-status information
   instead. You don't have to declare an http_status object yourself now.
* Similarly, added DAV_ELM_207_UNUSED for lowest element id which should
  be used by users of dav_207_* code (incl. use of dav_propfind_*
  code).
* New NEON_* autoconf macro interface:
 - Use NEON_BUNDLED if sources are bundled, otherwise NEON_LIBRARY.
 - The NEON_XML_PARSER macro is NOT called automatically.  You must
   call this yourself if using NEON_BUNDLED; see doc/using-neon.txt
   for details.
* Fix use of 'socket' in nsocket.h function prototypes (Greg Stein).
* Remove extra backslash at line 69 of src/Makefile.incl (Dirk Bergstrom).
* Examples directory is now a separate package.

Changes in release 0.7.7:
* Another fix for linking against a libtool-built expat (Greg Stein).

Changes in release 0.7.6:
* Better check for closed SSL connection after doing SSL_peek. (thanks
  to Jeff Costlow <j.costlow@f5.com>).
* Attempt at correct sock_block() implementation for SSL.
* sock_peek() will return SOCK_CLOSED correctly.

Changes in release 0.7.5:
* Fixed workaround for linking against a libtool-built expat (Greg Stein).

Changes in release 0.7.4:
* Fix for fd leak on connect failure (David Sloat <d.sloat@f5.com>).
* Fix for Digest auth against IIS5 (David Sloat).
* Workaround for linking against a libtool-built libexpat.la (Greg Stein).

Changes in release 0.7.3:
* Check for -lsocket and -linet in configure.
* Workaround for SSL problems.

Changes in release 0.7.2:
* Define SHELL in Makefile (thanks to Eric Mumpower <nocturne@arepa.com>).
* Added 'all' target to Makefile (Greg Stein <gstein@lyra.org>)
* Added '--with-expat' argument to configure (Greg Stein)
* Added 'dav_propfind_destroy' function.

Changes in release 0.7.1:
* Don't register response body/header authentication callbacks if no 
  credentials-supplying callback has been registered (speed optimisation).

Changes in release 0.7.0:
* Deprecated use of 'NULL' to http_add_response_header_handler.
  New interface, http_add_response_header_catcher, to register
  a callback which is passed ALL response headers regardless of name.
* Speed optimisation (~10%?): storing response-header handlers in a
  hash table for faster look.
* New SBUFFER_CAST() macro for getting to the 'char *' of an sbuffer
  as fast as possible.

Changes in release 0.6.1:
* Fix for retrying request if connection is closed by server.
* Make redirect hook work for >1 request per session.

Changes in release 0.6.0:
* New interface to allow following HTTP redirects (301/302 responses).
  A callback must be given to get user confirmation if the request method
  is not GET, HEAD, or PROPFIND.
* New interface to determine whether the proxy server should be used
  for a given request: http_session_decide_proxy.
* Fix nget build again. Support automatic redirects in 'nget'.
* Add --with-extra-includes and --with-extra-libs configure parameters
  to point configure at 

Changes in release 0.5.1:
* Prevent segfault if USE_DAV_LOCKS is defined, and a locking session
  is not registered (thanks to David Sloat).

Changes in release 0.5.0:
* Rename xmalloc, xstrdup etc to ne_malloc, ne_strdup etc.
* Some speed optimisation in response-header reading.
* Use 'off_t' rather than 'size_t' in sock_progress callback,
  sock_readfile_blocked, and sock_transfer.

Changes in release 0.4.2:
* Fix for sending request bodies after getting 100-continue response.

Changes in release 0.4.1:
* Fix nget build.

Changes in release 0.4.0:
* Install library headers into .../include/neon not .../include/libneon
* Install all necessary library headers.
* Compile support for WebDAV locking throughout the library
* Rename md5.h to neon_md5.h (avoids conflict with md5.h in OpenSSL)
* Rename socket.h to nsocket.h (avoids possible conflict with C library)
* Update licensing notice on macros/neon*.m4: note that these files are
  NOT under the LGPL, and can be used in other packages regardless of
  the license the package uses.
* Update NEON_LIBRARY m4 function to allow optional specification of
  names of bundled neon/expat source directories.
* Increase socket read timeout to 60 seconds.
* Added an POST method: from Sander Alberink <sander.alberink@cmg.nl>.
* Added 'http_get_request_headers' to return the sbuffer containing
  all request headers.
* Allow passing NULL as name to http_add_response_header_handler: 
  the handler callback is passed the entire header string, of ALL 
  response headers.

Changes in release 0.3.1:
* Compile fix for dav_locks.c (thanks to Paul D'Anna)

Changes in release 0.3.0:
* Rewrite of socket handling layer. All sock_* functions changed.
* Added basic SSL support: --with-ssl (requires OpenSSL).
  NOTE: Certificates are NOT presented for verification.
* 'nget' accepts URL's using the 'https' scheme.
* New example program, 'nserver', to display the Server: string, 
  e.g. 'nserver https://www.eu.c2.net/'
* Fixed request re-send when persistent connection times out.
* "Hooks" support: allow external hooks into the HTTP request/
  response dispatch loop.
* New printf-style interface for adding request headers.
* Make symbols used in header files C++-safe (Tom Bednarz).
* WebDAV locking support: lock discovery, LOCK (exclusive/shared)
  UNLOCK. "If:" headers are sent as appropriate. Simple interface
  for implementors of new methods to indicate which locks are 
  required for the method.
* Primitive HTTP cookies support.
* Primitive hack at a GNOME-based GUI example program "nbrowse".
  Enable build with --enable-gnome-examples. It crashes, and
  not much else. Requires GNOME and POSIX threads. Example usage:
       'nbrowse dav.ics.uci.edu /msdav/'
  Many thanks to Lee Mallabone for Gtk help, and showing how to
  use Gtk and threads. 

Changes in release 0.2.0:
* Use libtool: new configure options to select whether to build
  shared and/or static libraries. Should build shared libraries
  portably now.  
* Complete rewrite of the hip_xml interface to use opaque pointers.
  New functions: hip_xml_create, hip_xml_destroy: create parser.
  hip_xml_{set,get}_error: Access to error string.
  hip_xml_add_handler: Register callbacks for a set of elements.
  hip_xml_valid: Returns whether the parse was valid or not.
  Removed functions: hip_xml_init, hip_xml_finish.
* Removed functions made reduntant by above changes in dav_207.
* Don't include config.h in header files
* Fix PROPFIND allprop request body (Michael Sobolev)
* Added C++ safety macros around header files.
* Added neon-config script for getting correct CFLAGS and LIBS
  values for using libneon in applications.

Changes in release 0.1.1:
* Fix for short writes in GET

Changes in release 0.1.0:
* Initial release.


================================================
FILE: README.md
================================================

[![Build and test](https://github.com/notroj/neon/actions/workflows/ci.yml/badge.svg)](https://github.com/notroj/neon/actions/workflows/ci.yml)

# neon

_neon_ is an HTTP/1.1 and WebDAV client library, with a C language API.

GitHub: https://github.com/notroj/neon | Web: https://notroj.github.io/neon/

The neon API and ABI are stable and maintain backwards compatibility
since 0.27 through to 1.0.0. From neon 1.0.0 onwards, semantic
versioning will be used. https://semver.org/

Features:

 - High-level interface to HTTP and WebDAV methods.
 - Low-level interface to HTTP request handling, to allow implementing
   new methods easily.
 - Persistent connection support (HTTP/1.1 and HTTP/1.0 aware)
 - Basic and Digest authentication (RFC 7616/7617, including SHA-2, userhash)
 - Kerberos (Negotiate) and SSPI/NTLM authentication (Unix and Windows)
 - HTTP and SOCKS (v4/5) proxy support (including authentication)
 - SSL/TLS support using OpenSSL or GnuTLS (client certs via files or PKCS#11)
 - Generic WebDAV 207 XML response handling mechanism
 - XML parsing using expat or libxml2
 - Easy generation of error messages from 207 error responses
 - Basic HTTP/1.1 methods: GET, PUT, HEAD, OPTIONS, conditional PUT
 - WebDAV resource manipulation: MOVE, COPY, DELETE, MKCOL.
 - WebDAV metadata support: set and remove properties (PROPPATCH), query
   any set of properties (PROPFIND).
 - WebDAV locking and ACL (RFC 3744) support
 - Autoconf macros supplied for easily embedding neon directly inside 
   an application source tree.

Provides lower-level interfaces to directly implement new HTTP
methods, and higher-level interfaces so that you don't have to worry
about the lower-level stuff.

The neon library source code is licensed under the GNU Library GPL;
see src/COPYING.LIB for full details.  The manual and test suite are
licensed under the terms of the GNU GPL; see test/COPYING for terms.
The autoconf macros in the "macros" directory are under a less
restrictive license, see each file for details.

## Building neon

Grab the latest neon release tarball from https://notroj.github.io/neon/ and build 
as follows:

```bash
./configure --with-ssl=openssl --prefix=/path/to/install
make
make check
```

Third-party libraries are required for certain features:

- _expat_ or _libxml2_ for XML parsing and WebDAV support (https://github.com/libexpat/libexpat or https://github.com/gnome/libxml2)
- _OpenSSL_ or _GnuTLS_ for SSL/TLS support (https://openssl-library.org/ or https://gnutls.org/)
- _Libntlm_ for NTLM authentication support (https://gitlab.com/gsasl/libntlm)
- _GSSAPI_ libraries from a Kerberos distribution for Negotiate authentication
- _zlib_ for compressed response support (https://github.com/madler/zlib)
- _libproxy_ for system proxy support (see https://github.com/libproxy/libproxy)

~~~
neon is Copyright (C) 1999-2026 Joe Orton
Portions are:
Copyright (C) Aleix Conchillo Flaque
Copyright (C) Arfrever Frehtes Taifersar Arahesis
Copyright (C) Arun Garg
Copyright (C) Free Software Foundation, Inc.
Copyright (C) Henrik Holst
Copyright (C) Jiang Lei
Copyright (C) Karl Ove Hufthammer.
Copyright (C) Michael Sobolev
Copyright (C) Nobuyuki Tsuchimura
Copyright (C) Sylvain Glaize
Copyright (C) Temuri Doghonadze
Copyright (C) Thomas Schultz
Copyright (C) Vladimir Berezniker
Copyright (C) Yves Martin
~~~


================================================
FILE: THANKS
================================================
Thanks go to the following people for contributing to neon development
with code, patches, or good bug reports or suggestions.

Arun Garg, Blair Zajac, Branko Èibej, Daniel Berlin, David Sloat,
David Reid, Dirk Bergstrom, Ulrich Drepper, Gerald Richter, Greg
Stein, Gregor Bornemann, Jeff Johnson, Jeremy Elson, Jim Whitehead,
Johan Lindh, Justin Erenkrantz, Kai Sommerfeld, Keith Wannamaker, Lee
Mallabone, Magnus Sirwiö, Markus Mueller, Max Bowsher, Michael
Sobolev, Mike Rosellini, Mo DeJong, Noriaki Takamiya, Olof Oberg,
Pawel Golaszewski, Peter Boos, Peter Moulder, rado, Risko Gergely,
Rodney Dawes, Sam TH, Sander Alberink, Sander Striker, Stefan Esser,
Shane Mayer, Taisuke Yamada, Teng Xu, Tom Bednarz, Tom Lee, Tommi
Komulainen, Torsten Kalix, Wilfredo Sánchez, Daniel Veillard, Vladimir
Berezniker, Jiang Lei, Werner Baumann, Mike DiCuccio, Gisle Vanem,
Hans Meine, Laszlo Boszormenyi, Matthias Miller, Albert Chin, 
Kiyo Kelvin Lee, D.J. Heap, Dongsheng Song, Aleix Conchillo Flaque.


================================================
FILE: TODO
================================================

To Do List for neon                                      -*- text -*-
===================

Please submit feature requests to <neon@lists.manyfish.co.uk>

For one-point-oh
----------------

Longer term
-----------

6. PUT with ranges... ne_put_range

9. DeltaV support (http://www.webdav.org/deltav/). See also the
   subversion project (http://subversion.tigris.org/) who might build
   a versioning system over DAV.

14. Improved request-header manipulation... some kind of indexed table
    (a la Apache, libghttp, so we're sure we don't add the same header
    to the request twice.  Better control over adding Cache-Control
    headers would be good too.

21. Storing multiple authentication "sessions" within an actual
    auth_session, so I can log into e.g. /foo/ and /bar/ (which are
    not in the same authentication domain) and switch between them
    without having to re-enter passwords all the time.

46. Asynchronous request-dispatching? Makes integration into GUI loop
    easy... any other reasons?  Must leave existing request_dispatch
    interface intact.

50. opendir/readdir/closedir-esque interface for PROPFIND depth 1, 
    a la EZDAV. (cadaver has it already)



================================================
FILE: autogen.sh
================================================
#!/bin/sh
rm -f ltconfig ltmain.sh config.cache aclocal.m4 config.guess config.sub
# remove the autoconf cache
rm -rf autom4te*.cache
# create a .version file for configure.in
if test ! -f .version; then
   # Building from SVN rather than in a release
   echo 0.0.0-dev > .version
   # for the documentation:
   date +"%e %B %Y" | tr -d '\n' > doc/date.xml
   echo 0.0.0-dev > doc/version.xml
fi
set -e
printf  "libtoolize... "
: "${LIBTOOLIZE:="$(command -v libtoolize || command -v glibtoolize)"}"
if ${LIBTOOLIZE} --help | grep -- --install > /dev/null; then
   ${LIBTOOLIZE} --copy --force --install >/dev/null;
else
   ${LIBTOOLIZE} --copy --force >/dev/null
fi
printf  "aclocal... "
${ACLOCAL:-aclocal} -I macros
printf  "autoheader... "
${AUTOHEADER:-autoheader} -Wall
printf  "autoconf... "
${AUTOCONF:-autoconf} -Wall -Werror
echo okay.
# remove the autoconf cache
rm -rf autom4te*.cache


================================================
FILE: config.hw.in
================================================
/*                                                      -*- c -*-
   Win32 config.h
   Copyright (C) 1999-2000, Peter Boos <pedib@colorfullife.com>
   Copyright (C) 2002-2006, Joe Orton <joe@manyfish.co.uk>

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.
   
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with this library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
   MA 02111-1307, USA

*/
#if defined(_WIN32) && !defined(WIN32)
#define WIN32
#endif

#ifdef WIN32

#define NEON_VERSION "@VERSION@"
#define NE_VERSION_MAJOR (@MAJOR@)
#define NE_VERSION_MINOR (@MINOR@)

#define HAVE_ERRNO_H
#define HAVE_LIMITS_H
#define HAVE_STDLIB_H
#define HAVE_STRING_H

#define HAVE_MEMCPY
#define HAVE_SETSOCKOPT

#define HAVE_SSPI

#define NE_HAVE_TS_SSL 1

/* Define to enable debugging */
#define NE_DEBUGGING 1

#ifdef _WIN64
#define NE_FMT_SIZE_T "I64u"
#define NE_FMT_SSIZE_T "I64d"
#else
#define NE_FMT_SIZE_T "u"
#define NE_FMT_SSIZE_T "d"
#endif
#define NE_FMT_OFF_T "ld"
#define NE_FMT_OFF64_T "I64d"
#define NE_FMT_NE_OFF_T NE_FMT_OFF_T
#define NE_FMT_TIME_T "ld"

#ifndef NE_FMT_XML_SIZE
#define NE_FMT_XML_SIZE "d"
#endif

#define SIZEOF_INT 4
#define SIZEOF_LONG 4

/* Win32 uses a underscore, so we use a macro to eliminate that. */
/* VS2015 has this already defined */
#if (_MSC_VER < 1900)
#define snprintf			_snprintf
#endif
/* VS2008 has this already defined */
#if (_MSC_VER < 1500)
#define vsnprintf			_vsnprintf
#endif

#if defined(_MSC_VER) && _MSC_VER >= 1400
#define strcasecmp			_strcmpi
#define strncasecmp			_strnicmp
#else
#define strcasecmp			strcmpi
#define strncasecmp			strnicmp
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1300
#define HAVE_STRTOLL
/* VS2013 has this already defined */
#if _MSC_VER < 1800
#define strtoll				_strtoi64
#endif
#endif
#ifdef _WIN64
#define ssize_t				__int64
#else
#define ssize_t				int
#endif
/* VS2015 has this already defined */
#if defined (_MSC_VER) && (_MSC_VER < 1900)
#define inline                          __inline
#endif
#if defined(NE_LFS)
#define lseek64				_lseeki64
#define fstat64				_fstat64
#define stat64				__stat64
#else
#define off_t                           _off_t
#endif

#ifndef USE_GETADDRINFO
#define in_addr_t                       unsigned int
typedef int socklen_t;
#endif

#include <io.h>

#endif


================================================
FILE: configure.ac
================================================
AC_PREREQ(2.58) dnl 2.58 required for AS_HELP_STRING

dnl Extract the version (sans LF) from .version, created at release-time.
m4_define(ne_version, [m4_translit(m4_include(.version), [
])])

AC_INIT(neon, ne_version,,,[https://notroj.github.io/neon/])

AC_COPYRIGHT([Copyright 2000-2022 Joe Orton and others
This configure script may be copied, distributed and modified under the 
terms of the GNU Library General Public license; see src/COPYING.LIB for
more details.])

AC_CONFIG_MACRO_DIR([macros])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR(src/ne_request.c)

NEON_WITH_LIBS

# Pass through initial LDFLAGS verbatim to neon-config, so that extra
# libraries which are detected (e.g. OpenSSL) can still be found when
# building using the --libs output of neon-config.
user_LDFLAGS=$LDFLAGS

# By default, allow 'make install' to work.
ALLOW_INSTALL=yes

AC_DEFINE([_GNU_SOURCE], 1, [Always defined to enable GNU extensions])
AC_DEFINE([NEON_IS_LIBRARY], 1, [Defined when neon is built as a library])

AH_BOTTOM([
/* Enable leak-tracking versions of ne_*alloc when NEON_MEMLEAK is enabled */
#ifdef NEON_MEMLEAK
# include "memleak.h"
#endif])

AC_PROG_INSTALL

AC_ARG_ENABLE(webdav, 
  AS_HELP_STRING([--disable-webdav],[disable WebDAV support]))

if test "$enable_webdav" = "no"; then
  NEON_WITHOUT_WEBDAV
else
  # Yes, we do need an XML parser. The _BUNDLED macros handle
  # this normally.
  NEON_NEED_XML_PARSER=yes
fi

# The bundled macros also set this, which makes sure we recurse
# into the 'src' directory.
NEON_BUILD_BUNDLED=yes

# Define NEON_VERSION etc and make the appropriate substitutions.
NE_VERSIONS_BUNDLED

LIBNEON_SOURCE_CHECKS

dnl Avoid libtool 1.5 bug where configure fails if a C++ compiler
dnl is not available.
m4_ifdef([AC_LIBTOOL_TAGS], [AC_LIBTOOL_TAGS([])])

AC_DISABLE_SHARED
m4_ifdef([LT_INIT], [LT_INIT(pic-only)], [AC_PROG_LIBTOOL])

AC_EXEEXT

# Checks to compile test suite
NEON_TEST

# Use the libtool-type build.
NEON_LIBTOOL_BUILD
# Find an XML parser
NEON_XML_PARSER
# Internationalization support.
NEON_I18N()

# Extra checks for debugging, compiler warnings
NEON_DEBUG
# Leave till last to prevent CFLAGS affecting checks.
NEON_WARNINGS

CPPFLAGS="$CPPFLAGS -I\${top_builddir}"

AC_ARG_ENABLE(memleak, 
  AS_HELP_STRING([--enable-memleak],
                 [for test builds only: enable memory leak checking]))

if test "$enable_memleak" = "yes"; then
  CPPFLAGS="$CPPFLAGS -DNEON_MEMLEAK -I\$(top_srcdir)/src"
  # disable 'make install'
  ALLOW_INSTALL=memleak
fi

AC_ARG_ENABLE(auto-libproxy, 
  AS_HELP_STRING([--enable-auto-libproxy],
                 [for using libproxy during session creation]))

if test "$enable_auto_libproxy" = "yes"; then
  AC_DEFINE(NE_ENABLE_AUTO_LIBPROXY, 1, [to use libproxy automatically])
fi

# Enable tests for optional features
TESTS="\$(BASIC_TESTS)"
HELPERS=""
if test $NE_FLAG_SSL = yes; then
   # Only enable SSL tests if an openssl binary is found (needed to make
   # certs etc).
   AC_PATH_PROG(OPENSSL, openssl, notfound)
   if test "$OPENSSL" != "notfound"; then
     TESTS="$TESTS \$(SSL_TESTS)"
     HELPERS="$HELPERS \$(SSL_HELPERS)"
   else
     AC_MSG_WARN([no openssl binary in \$PATH: SSL tests disabled])
   fi

   AC_PATH_PROG(CERTUTIL, certutil, notfound)
   AC_PATH_PROG(PK12UTIL, pk12util, notfound)
fi
if test $NE_FLAG_ZLIB = yes; then
   TESTS="$TESTS \$(ZLIB_TESTS)"
   HELPERS="$HELPERS \$(ZLIB_HELPERS)"
fi
if test x$enable_webdav != xno; then
   TESTS="$TESTS \$(DAV_TESTS)"
fi

AC_ARG_ENABLE(tests-install,
  AS_HELP_STRING([--enable-tests-install],
                 [enable installation of the test suite]),,
  [enable_tests_install=no])

# If test suite installation is not required, it's more
# efficient to link the test programs using -no-install:
if test "$enable_tests_install" = "no"; then
  TEST_LDFLAGS="-no-install"
fi

AC_SUBST(TEST_LDFLAGS)

AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
if test "$PKG_CONFIG" != "no"; then
   # pkg-config >= 0.18 will use "Libs.private" iff necessary,
   # older versions which don't recognize that field may always
   # need all libraries in Libs.
   if $PKG_CONFIG --atleast-pkgconfig-version=0.18; then :; else
      NEON_PC_LIBS=${NEON_LIBS}
   fi
fi
AC_SUBST(NEON_PC_LIBS)

# Pass the interface version on to libtool when linking libneon.la
NEON_LINK_FLAGS="-version-info ${NE_LIBTOOL_VERSINFO}"
# If any non-default ABI variations are used, add them to the SONAME:
### disabled for backwards-compat with 0.27.x
#if test "x${NE_LIBTOOL_RELEASE}y" != "xy"; then
#   NEON_LINK_FLAGS="${NEON_LINK_FLAGS} -release ${NE_LIBTOOL_RELEASE}"
#fi

gl_LD_VERSION_SCRIPT
# If ld version scripts are supported, enable symbol versioning.
# Otherwise, fall back to any libtool-supported symbol export
# restrictions; ne__* symbols are not exported.
if test "x$have_ld_version_script" = "xyes"; then
  NEON_LINK_FLAGS="$NEON_LINK_FLAGS -Wl,--version-script=\$(top_srcdir)/src/neon.vers"
else
  NEON_LINK_FLAGS="$NEON_LINK_FLAGS -export-symbols-regex '^ne_[[^_]]'"
fi 

if test x${enable_shared} = xno; then
   # Defining NE_PRIVATE as the empty string would work; using a
   # non-empty but redundant string 'extern' avoids any possible cpp
   # confusion with from an empty macro.
   CPPFLAGS="$CPPFLAGS -DNE_PRIVATE=extern"
   AC_MSG_NOTICE([Private symbol suppression disabled for static library build])
fi

# Bundled language catalogs
ALL_LINGUAS="cs de fr ja ka nn pl ru tr zh_CN"
AC_SUBST(ALL_LINGUAS)

AC_CONFIG_FILES([neon-config], [chmod +x neon-config])
AC_CONFIG_FILES([Makefile src/Makefile test/Makefile neon.pc])
AC_CONFIG_FILES([test/makekeys:test/makekeys.sh], [chmod +x test/makekeys])

AC_SUBST(NEON_VERSION)
AC_SUBST(NEON_BUILD_BUNDLED)
AC_SUBST(top_builddir)
AC_SUBST(user_LDFLAGS)
AC_SUBST(HELPERS)
AC_SUBST(TESTS)
AC_SUBST(ALLOW_INSTALL)

AC_OUTPUT

# for VPATH builds:
test -d test/common || mkdir test/common

AC_MSG_NOTICE([Configured to build AC_PACKAGE_STRING:

  Install prefix:   ${prefix}
  Compiler:         ${CC}
  XML Parser:       ${neon_xml_parser_message}
  SSL library:      ${ne_SSL_message}
  zlib support:     ${ne_ZLIB_message}
  GSSAPI support:   ${ne_GSSAPI_message}
  NTLM support:     ${ne_NTLM_message}
  libproxy support: ${ne_LIBPXY_message}

  Building:         Shared=${enable_shared}, Static=${enable_static}, Libtool Version=${NE_LIBTOOL_VERSINFO}
])

case $ALLOW_INSTALL in
memleak)
  AC_MSG_NOTICE([Configured with development-only flags:

WARNING: This copy of neon has been configured with memory leak checking
WARNING: enabled, which should only be used in a development build of neon.
WARNING: This neon library should not be installed for use by applications.
]);;
esac


================================================
FILE: doc/biblio.xml
================================================
<bibliography id="biblio"> <!-- -*- xml -*- -->

<biblioentry id="bib.ssltls">
  <abbrev>SSL-and-TLS</abbrev>
  <title><ulink url="http://www.rtfm.com/sslbook/">SSL and
  TLS: Designing and Building Secure Systems</ulink></title>
  <author><firstname>Eric</firstname><surname>Rescorla</surname></author>
  <isbn>0-201-62598-3</isbn>
  <publisher><publishername>Addison-Wesley</publishername></publisher>
  <pubdate>March 2001</pubdate>
</biblioentry>

<biblioentry id="bib.xmlnames">
  <abbrev>REC-XML-names</abbrev>
  <corpauthor>World Wide Web Consortium</corpauthor>
  <title><ulink url="http://www.w3.org/TR/REC-xml-names">Namespaces in XML</ulink></title>
  <pubdate>January 1999</pubdate>
</biblioentry>

<biblioentry id="bib.rfc2616">
  <abbrev>RFC2616</abbrev>
  <title><ulink url="http://www.ietf.org/rfc/rfc2616.txt">Hypertext Transfer 
  Protocol&mdash;HTTP/1.1</ulink></title>
  <authorgroup>
    <author><firstname>Roy</firstname><surname>Fielding</surname></author>
    <author><firstname>Jim</firstname><surname>Gettys</surname></author>
    <author><firstname>Jeff</firstname><surname>Mogul</surname></author>
    <author><firstname>Henrik</firstname><surname>Frystyk</surname></author>
    <author><firstname>Larry</firstname><surname>Masinter</surname></author>
    <author><firstname>Paul</firstname><surname>Leach</surname></author>
    <author><firstname>Tim</firstname><surname>Berners-Lee</surname></author>
  </authorgroup>
  <publishername>IETF</publishername>
  <pubdate>June 1999</pubdate>
</biblioentry>

<biblioentry id="bib.rfc2518">
  <abbrev>RFC2518</abbrev>
  <title><ulink url="http://www.ietf.org/rfc/rfc2518.txt">HTTP Extensions for Distributed Authoring&mdash;WEBDAV</ulink></title>
  <authorgroup>
    <author><firstname>Yaron</firstname><surname>Goland</surname></author>
    <author><firstname>Jim</firstname><surname>Whitehead</surname></author>
    <author><firstname>Asad</firstname><surname>Faizi</surname></author>
    <author><firstname>Steve</firstname><surname>Carter</surname></author>
    <author><firstname>Del</firstname><surname>Jensen</surname></author>
  </authorgroup>
  <publishername>IETF</publishername>
  <pubdate>February 1999</pubdate>
</biblioentry>

<biblioentry id="bib.rfc3280">
  <abbrev>RFC3280</abbrev>
  <title><ulink url="http://www.ietf.org/rfc/rfc3280.txt">Internet X.509 Public Key Infrastructure
       Certificate and Certificate Revocation List (CRL) Profile</ulink></title>
  <authorgroup>
    <author><firstname>Russel</firstname><surname>Housley</surname></author>
    <author><firstname>Warwick</firstname><surname>Ford</surname></author>
    <author><firstname>Tim</firstname><surname>Polk</surname></author>
    <author><firstname>David</firstname><surname>Solo</surname></author>
  </authorgroup>
  <publishername>IETF</publishername>
  <pubdate>April 2002</pubdate>
</biblioentry>

<!-- RFCs: 2617 -->

<!-- Other interesting RFCs:

 3490 : Internationalizing Domain Names in Applications (IDNA) 
 3493 : Basic Socket Interface Extensions for IPv6 
 -->

</bibliography>


================================================
FILE: doc/feat.xml
================================================
    <sect1 id="features">
      <title>Feature list</title>

      <para>The major features of the neon library are as follows:</para>

      <itemizedlist>

	<listitem><para>A high-level interface to common HTTP and WebDAV
methods.  This allows you to easily dispatch a GET or a MKCOL request
against a resource with a single function call.</para></listitem>

	<listitem><para>A low-level interface for HTTP request
handling; allowing you to implement requests using arbitrary methods
and request headers, capture arbitrary response headers, and so
on.</para></listitem>

	<listitem><para>Persistent connection support; neon groups a
set of requests to a server into a "session"; requests within that
session can use a persistent (also known as "keep-alive")
connection.</para></listitem>

	<listitem><para>Modern HTTP authentication support: a complete
implementation of the new authentication standard, RFC2617, supporting
the Digest, Basic, and Negotiate protocols.  Credentials are supplied
by an application-defined callback as appropriate.</para></listitem>

	<listitem><para>Proxy server support; a session can be set to
use a proxy server.  Authentication is supported for the Proxy as well
as the origin server.  The system's proxy configuration can be
optionally used, on some platforms.</para></listitem>

	<listitem><para>Complete SSL support; a simple interface for
enabling SSL, hiding the complexity of using an SSL library directly.
Client certificate support, callback-based server certificate
verification, along with functions to load trusted CA certificates.
Smartcard-based client certs are also supported via a wrapper
interface for PKCS#11 modules.</para></listitem>

	<listitem><para>Compressed response support: responses
	compressed using the "deflate" algorithm can be transparently
	decompressed.</para></listitem>

	<listitem><para>Generic XML parsing interface for handling XML
response bodies using SAX-like callbacks.  Both the expat and libxml
XML parser libraries are supported.</para></listitem>

	<listitem><para>WebDAV metadata support; set and remove
properties, query properties (PROPFIND); simple interface for
retrieving "flat" byte-string properties, more advanced support for
parsing "complex" structured XML properties.</para></listitem>

<!--
	<listitem><para>WebDAV locking support</para></listitem>
-->

	<listitem><para>Build environment support: the neon source
tree is designed so that it can be embedded in your application's
build tree; autoconf macros are supplied for integration.  To get
started quickly a <xref linkend="refconfig"/> script is included,
to easily determine how to compile and link against an installed copy
of neon</para></listitem>

	<listitem><para>Complete test suite: the neon test suite
comprises half as many lines of source code as the library itself,
including many tests for protocol compliance in network behaviour, and
that the library implementation meets the guarantees made by the
API.</para> </listitem>

<!-- 

	<listitem><para>Thorough documentation: neon documentation is
provided in HTML and man page formats (from a single DocBook XML
source)</para></listitem>

-->

      </itemizedlist>
	
    </sect1>


================================================
FILE: doc/html.xsl
================================================
<?xml version='1.0'?>

<!-- This file wraps around the DocBook HTML XSL stylesheet to customise
   - some parameters; add the CSS stylesheet, etc.
 -->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version='1.0'
                xmlns="http://www.w3.org/TR/xhtml1/transitional"
                exclude-result-prefixes="#default">

<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl"/>

<xsl:variable name="html.stylesheet">manual.css</xsl:variable>

<!-- for sections with id attributes, use the id in the filename.
  This produces meaningful (and persistent) URLs for the sections. -->
<xsl:variable name="use.id.as.filename" select="1"/>

<!-- enable the shaded verbatim (programlisting etc) blocks. -->
<!-- <xsl:variable name="shade.verbatim" select="1"/> -->

<!-- add class="programlisting" attribute on the <pre>s from
  <programlisting>s so that the CSS can style them nicely. -->
<xsl:attribute-set name="shade.verbatim.style">
  <xsl:attribute name="class">programlisting</xsl:attribute>
</xsl:attribute-set>

<!-- use sane ANSI C function prototypes -->
<xsl:variable name="funcsynopsis.style" select="'ansi-table'"/>

<!-- split each sect1 into a separate chunk -->
<xsl:variable name="chunk.first.sections" select="1"/>

<!-- don't generate table of contents within each chapter chunk. -->
<xsl:variable name="generate.chapter.toc" select="0"/>

<xsl:variable name="generate.appendix.toc" select="0"/>

<!-- don't include manual page numbers in refentry cross-references, they
  look weird -->
<xsl:variable name="refentry.xref.manvolnum" select="0"/>

<!-- do generate variablelist's as tables -->
<xsl:variable name="variablelist.as.table" select="1"/>

<!-- and css'ize the tables so they can look pretty -->
<xsl:variable name="table.borders.with.css" select="1"/>

<!-- disable ugly tabular output -->
<xsl:variable name="funcsynopsis.tabular.threshold" select="99999"/>

<!-- change some presentation choices --> 
<xsl:template match="type">
  <xsl:call-template name="inline.italicseq"/>
</xsl:template>

<xsl:template match="parameter">
  <xsl:call-template name="inline.monoseq"/>
</xsl:template>

<!-- enclose the whole funcprototype in <code> -->
<xsl:template match="funcprototype" mode="ansi-nontabular">
  <div class="funcprototype"><code>
     <xsl:apply-templates mode="ansi-nontabular"/>
  </code></div>
</xsl:template>

</xsl:stylesheet>



================================================
FILE: doc/man.xsl
================================================
<?xml version='1.0'?>

<!-- This file wraps around the DocBook XSL manpages stylesheet to customise
   - some parameters; add the CSS stylesheet, etc.
 -->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version='1.0'
                xmlns="http://www.w3.org/TR/xhtml1/transitional"
                exclude-result-prefixes="#default">

<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"/>

<xsl:param name="man.output.quietly" select="1"/>

<xsl:param name="man.endnotes.list.enabled">1</xsl:param>

<xsl:param name="man.endnotes.are.numbered">1</xsl:param>

<!-- by convention, only RFC references will be used. -->
<xsl:param name="man.endnotes.list.heading">References</xsl:param>

<xsl:param name="man.authors.section.enabled">0</xsl:param>

<xsl:template match="xref">
  <xsl:variable name="target" select="id(@linkend)"/>
  <xsl:choose>
    <!-- Target is a refname element inside a refentry -->
    <xsl:when test="$target/self::refname">
      <xsl:variable name="refentry" select="$target/ancestor::refentry"/>
      <xsl:variable name="manvolnum">
        <xsl:choose>
          <xsl:when test="$refentry/refmeta/manvolnum">
            <xsl:value-of select="$refentry/refmeta/manvolnum"/>
          </xsl:when>
          <xsl:otherwise>3</xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
      <xsl:text>\fB</xsl:text>
      <xsl:value-of select="$target"/>
      <xsl:text>\fR(</xsl:text>
      <xsl:value-of select="$manvolnum"/>
      <xsl:text>)</xsl:text>
    </xsl:when>
    <xsl:otherwise>
      <xsl:apply-imports/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>


================================================
FILE: doc/manual.css
================================================

p, pre.funcsynopsisinfo { margin-left: 0.4em; margin-right: 0.4em; }

span.term { margin-left: 0.6em; margin-bottom: 0.0em }

div.legalnotice { font-size: 80%; margin-left: 2em; }

a:visited { color: darkgreen; }

div.navheader { border-top: 1px solid #bbf2bb; }
div.navfooter { border-bottom: 1px solid #bbf2bb; }

div.funcprototype { margin-top: 0.2em; margin-left: 0.4em; margin-bottom: 0.2em; }

pre.programlisting, pre.screen { 
	background-color: #dddddd;
	margin-left: 0.6em; margin-right: 1em;
	padding: 0.3em; width: 50em;
}

div.funcsynopsis, div.cmdsynopsis { 
	background-color: #dddddd;
	margin-left: 0.4em; margin-right: 0.4em;
	padding: 0.1em;
}

div.warning {
        border: 1px solid #777777;
}

h1.title { border-bottom: thick solid #bbf2bb; padding-bottom: 0.1em; }

div.toc { 
	border-left: thick solid #bbf2bb; padding-left: 0.5em;
	}

h2, h3 { padding-left: 0.2em; padding-top: -0.1em; }

h2 { background-color: #bbf2bb; font-size: 110%; 
     padding-bottom: 0.3em; padding-top: 0.2em; spacing-top: 0.1em; }

h3 { border-bottom: 1px solid #bbf2bb; }


================================================
FILE: doc/manual.xml
================================================
<?xml version='1.0'?> <!-- -*- nxml -*- -->

<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [

<!ENTITY % isoent SYSTEM
    "http://www.oasis-open.org/docbook/xml/4.5/ent/isonum.ent">
<!ENTITY % isopub SYSTEM
    "http://www.oasis-open.org/docbook/xml/4.5/ent/isopub.ent">

%isoent;
%isopub;

<!-- date/version stamp files created as release tarball is rolled -->
<!ENTITY date SYSTEM "date.xml">
<!ENTITY version SYSTEM "version.xml">
<!ENTITY copyright "<copyright><year>2001-2026</year><holder>Joe Orton</holder></copyright>">

<!ENTITY neon "neon">

<!-- a useful entity for writing reference examples -->
<!ENTITY egsess "ne_session *sess = ne_session_create(...);">

<!ENTITY null "<literal>NULL</literal>">

<!ENTITY nul "<literal>NUL</literal>">

<!-- xml.xml entities: -->
<!ENTITY startelm "<emphasis>start-element</emphasis>">
<!ENTITY cdata "<emphasis>character-data</emphasis>">
<!ENTITY endelm "<emphasis>end-element</emphasis>">

<!ENTITY section.features SYSTEM "feat.xml">
<!ENTITY section.using SYSTEM "using.xml">
<!ENTITY section.xml SYSTEM "xml.xml">
<!ENTITY section.security SYSTEM "security.xml">
<!ENTITY section.ssl SYSTEM "ssl.xml">

<!ENTITY biblio SYSTEM "biblio.xml">

<!ENTITY refneon SYSTEM "ref/neon.xml">
<!ENTITY refconfig SYSTEM "ref/config.xml">

<!ENTITY refsess SYSTEM "ref/sess.xml">
<!ENTITY refsessflags SYSTEM "ref/sessflags.xml">
<!ENTITY referr SYSTEM "ref/err.xml">
<!ENTITY refopts SYSTEM "ref/opts.xml">
<!ENTITY refproxy SYSTEM "ref/proxy.xml">
<!ENTITY refsslvfy SYSTEM "ref/sslvfy.xml">
<!ENTITY refsslvers SYSTEM "ref/sslvers.xml">
<!ENTITY refsslproto SYSTEM "ref/sslproto.xml">
<!ENTITY refsslcert SYSTEM "ref/sslcert.xml">
<!ENTITY refsslcert2 SYSTEM "ref/sslcert2.xml">
<!ENTITY refsslcertio SYSTEM "ref/sslcertio.xml">
<!ENTITY refssldname SYSTEM "ref/ssldname.xml">
<!ENTITY refssltrust SYSTEM "ref/ssltrust.xml">
<!ENTITY refsslctx SYSTEM "ref/sslctx.xml">
<!ENTITY refreq SYSTEM "ref/req.xml">
<!ENTITY refreqhdr SYSTEM "ref/reqhdr.xml">
<!ENTITY refresphdr SYSTEM "ref/resphdr.xml">
<!ENTITY refrespbody SYSTEM "ref/respbody.xml">
<!ENTITY refreqflags SYSTEM "ref/reqflags.xml">
<!ENTITY refreqtarget SYSTEM "ref/reqtgt.xml">
<!ENTITY refctype SYSTEM "ref/ctype.xml">
<!ENTITY refred SYSTEM "ref/redir.xml">
<!ENTITY refsockssl SYSTEM "ref/sockssl.xml">
<!ENTITY refstatus SYSTEM "ref/status.xml">
<!ENTITY refgetst SYSTEM "ref/getst.xml">
<!ENTITY refreqbody SYSTEM "ref/reqbody.xml">
<!ENTITY refauth SYSTEM "ref/auth.xml">
<!ENTITY refalloc SYSTEM "ref/alloc.xml">
<!ENTITY refbuf SYSTEM "ref/buf.xml">
<!ENTITY refbufcr SYSTEM "ref/bufcr.xml">
<!ENTITY refbufapp SYSTEM "ref/bufapp.xml">
<!ENTITY refbufdest SYSTEM "ref/bufdest.xml">
<!ENTITY refbufutil SYSTEM "ref/bufutil.xml">
<!ENTITY refhash SYSTEM "ref/hash.xml">
<!ENTITY refnonce SYSTEM "ref/nonce.xml">
<!ENTITY refparam SYSTEM "ref/param.xml">
<!ENTITY reflower SYSTEM "ref/lower.xml">
<!ENTITY reftok SYSTEM "ref/tok.xml">
<!ENTITY refshave SYSTEM "ref/shave.xml">
<!ENTITY refvers SYSTEM "ref/vers.xml">
<!ENTITY refinit SYSTEM "ref/init.xml">
<!ENTITY refi18n SYSTEM "ref/i18n.xml">
<!ENTITY reffeat SYSTEM "ref/feat.xml">
<!ENTITY refresolve SYSTEM "ref/resolve.xml">
<!ENTITY refiaddr SYSTEM "ref/iaddr.xml">
<!ENTITY refclicert SYSTEM "ref/clicert.xml">
<!ENTITY refxml SYSTEM "ref/xml.xml">
<!ENTITY refxmlreq SYSTEM "ref/xmlreq.xml">
]>

<book>
  <bookinfo>
    <title>neon HTTP/WebDAV client library</title>
    <author>
      <personname>
        <firstname>Joe</firstname><surname>Orton</surname>
      </personname>
    </author>
    &copyright;

    <legalnotice>

      <para>This document is free documentation; you can redistribute
      it and/or modify it under the terms of the <ulink
      url="http://www.gnu.org/copyleft/gpl.html">GNU General Public
      License</ulink> as published by the Free Software Foundation;
      either version 2 of the License, or (at your option) any later
      version.</para>
    
      <para>This document is distributed in the hope that it will be
      useful, but <emphasis>without any warranty</emphasis>; without
      even the implied warranty of
      <emphasis>merchantability</emphasis> or <emphasis>fitness for a
      particular purpose</emphasis>.  See the GNU General Public
      License for more details.</para>

      <para>You should have received a copy of the GNU General Public
      License along with this program; if not, write to the Free
      Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
      USA.</para>

    </legalnotice>

  </bookinfo>
  
  <chapter id="intro">
    <title>Introduction</title>

    <para>This chapter provides an introduction to neon, giving an
overview of the range of features offered, and some general guidelines
for using the neon API.</para>
    
    <para>neon aims to provide a modern, flexible, and simple API
in the C programming language for implementing HTTP and WebDAV
support.  The WebDAV functionality is entirely separate from the basic
HTTP functionality; neon can be used simply as an HTTP client library,
ignoring the WebDAV support if desired.</para>

    &section.features;

    &section.using;
    
    &section.security;

  </chapter>
 
  <chapter id="api">
    <title>The &neon; C language interface</title>

    <para>The documentation for the &neon; interface is split between
    this chapter, which gives a broad introduction to the abstractions
    exposed by the library, and <xref linkend="ref"/>, which gives a
    function-by-function breakdown of the interface.</para>

    &section.xml;

<!-- &section.ssl; -->

  </chapter>
 
  <reference id="ref">

    <!-- these are used in the man page header/footers -->
    <referenceinfo>
      <title>neon API reference</title>
      <date>&date;</date>
      <productname>neon</productname>
      <productnumber>&version;</productnumber>
      &copyright;
    </referenceinfo>
    
    <title>neon API reference</title>

    &refneon; <!-- neon -->
    &refconfig; <!-- neon-config -->

    &refresolve; <!-- ne_addr_resolve -->
    &refbuf; <!-- ne_buffer -->
    &refbufapp; <!-- ne_buffer_append -->
    &refbufutil; <!-- ne_buffer_clear -->
    &refbufcr; <!-- ne_buffer_create -->
    &refbufdest; <!-- ne_buffer_destroy -->
    &refhash; <!-- ne_strhash -->
    &refnonce; <!-- ne_mknonce -->
    &refparam; <!-- ne_strparam -->
    &reflower; <!-- ne_strlower -->
    &referr; <!-- ne_get_error -->
    &refgetst; <!-- ne_get_status -->
    &reffeat; <!-- ne_has_support -->
    &refi18n; <!-- ne_i18n_init -->
    &refiaddr; <!-- ne_iaddr_make -->
    &refalloc; <!-- ne_malloc -->
    &refsess; <!-- ne_session_create -->
    &refproxy; <!-- ne_session_proxy -->
    &refsessflags; <!-- ne_set_session_flag -->
    &refreq; <!-- ne_request_create -->
    &refreqhdr; <!-- ne_add_request_header -->
    &refresphdr; <!-- ne_add_request_header -->
    &refrespbody; <!-- ne_read_response_to_fd -->
    &refopts; <!-- ne_set_useragent -->
    &refreqflags; <!-- ne_set_request_flag -->
    &refreqbody; <!-- ne_set_request_body_buffer -->
    &refreqtarget; <!-- ne_get_request_target -->
    &refctype; <!-- ne_get_content_type -->
    &refred; <!-- ne_redirect_register -->
    &refauth; <!-- ne_set_server_auth -->
    &refshave; <!-- ne_shave -->
    &refinit; <!-- ne_sock_init -->
    &refsslcert; <!-- ne_ssl_cert_identity -->
    &refsslcert2; <!-- ne_ssl_cert_cmp -->
    &refsslcertio; <!-- ne_ssl_cert_read -->
    &refssldname; <!-- ne_ssl_dname -->
    &refssltrust; <!-- ne_ssl_load_ca -->
    &refsslproto; <!-- ne_ssl_proto_name -->
    &refsslvers; <!-- ne_ssl_set_protovers -->
    &refsslvfy; <!-- ne_ssl_set_verify -->
    &refsslctx; <!-- ne_ssl_context_* -->
    &refsockssl; <!-- ne_sock_ssl*_* -->
    &refclicert; <!-- ne_ssl_client_cert -->
    &refstatus; <!-- ne_status -->
    &reftok; <!-- ne_token -->
    &refvers; <!-- ne_version_match -->
    &refxml; <!-- ne_xml_parser -->
    &refxmlreq; <!-- ne_xml_parse_response -->

    <!-- REFEND -->
    <!-- ******************************************************************* -->

  </reference>

&biblio;

</book>


================================================
FILE: doc/parsing-xml.txt
================================================

Requirements for XML parsing in neon
------------------------------------

Before describing the interface given in neon for parsing XML, here
are the requirements which it must satisfy:

 1. to support using either libxml or expat as the underlying parser
 2. to allow "independent" sections to handle parsing one XML
    document
 3. to map element namespaces/names to an integer for easier
    comparison.

A description of requirement (2) is useful since it is the "hard"
requirement, and adds most of the complexity of interface: WebDAV
PROPFIND responses are made up of a large boilerplate XML

 <multistatus><response><propstat><prop>...</prop></propstat> etc.

neon should handle the parsing of these standard elements, and expose
the meaning of the response using a convenient interface.  But, within
the <prop> elements, there may also be fragments of XML: neon can
never know how to parse these, since they are property- and hence
application-specific. The simplest example of this is the
DAV:resourcetype property.

So there is requirement (2) that two "independent" sections of code
can handle the parsing of one XML document.

Callback-based XML parsing
--------------------------

There are two ways of parsing XML documents commonly used:

 1. Build an in-memory tree of the document
 2. Use callbacks

Where practical, using callbacks is more efficient than building a
tree, so this is what neon uses.  The standard interface for
callback-based XML parsing is called SAX, so understanding the SAX
interface is useful to understanding the XML parsing interface
provided by neon.

The SAX interface works by registering callbacks which are called *as
the XML is parsed*. The most important callbacks are for 'start
element' and 'end element'. For instance, if the XML document below is
parsed by a SAX-like interface:

  <hello>
    <foobar></foobar>
  </hello>

Say we have registered callbacks "startelm" for 'start element' and
"endelm" for 'end element'.  Simplified somewhat, the callbacks will
be called in this order, with these arguments:

 1. startelm("hello")
 2. startelm("foobar")
 3. endelm("foobar")
 4. endelm("hello")

See the expat 'xmlparse.h' header for a more complete definition of a
SAX-like interface.

The hip_xml interface
---------------------

The hip_xml interface satisfies requirement (2) by introducing the
"handler" concept. A handler is made up of these things:

 - a set of XML elements
 - a callback to validate an element
 - a callback which is called when an element is opened
 - a callback which is called when an element is closed
 - (optionally, a callback which is called for CDATA)

Registering a handler essentially says:

 "If you encounter any of this set of elements, I want these
  callbacks to be called."

Handlers are kept in a STACK inside hip_xml.  The first handler
registered becomes the BASE of the stack, subsequent handlers are
PUSHed on top.

During XML parsing, the handler which is used for an XML element is
recorded.  When a new element is started, the search for a handler for
this element begins at the handler used for the parent element, and
carries on up the stack.  For the root element, the search always
starts at the BASE of the stack.

A user's guide to hip_xml
-------------------------

The first thing to do when using hip_xml is to know what set of XML
elements you are going to be parsing.  This can usually be done by
looking at the DTD provided for the documents you are going to be
parsing.  The DTD is also very useful in writing the 'validate'
callback function, since it can tell you what parent/child pairs are
valid, and which aren't.

In this example, we'll parse XML documents which look like:

<T:list-of-things xmlns:T="http://things.org/">
  <T:a-thing>foo</T:a-thing>
  <T:a-thing>bar</T:a-thing>
</T:list-of-things>

So, given the set of elements, declare the element id's and the
element array:

#define ELM_listofthings (HIP_ELM_UNUSED)
#define ELM_a_thing (HIP_ELM_UNUSED + 1)

const static struct my_elms[] = {
   { "http://things.org/", "list-of-things", ELM_listofthings, 0 },
   { "http://things.org/", "a-thing", ELM_a_thing, HIP_XML_CDATA },
   { NULL }
};

This declares we know about two elements: list-of-things, and a-thing,
and that the 'a-thing' element contains character data.

The definition of the validation callback is very simple:

static int validate(hip_xml_elmid parent, hip_xml_elmid child)
{
    /* Only allow 'list-of-things' as the root element. */
    if (parent == HIP_ELM_root && child == ELM_listofthings ||
        parent = ELM_listofthings && child == ELM_a_thing) {
	return HIP_XML_VALID;
    } else {
        return HIP_XML_INVALID;
    }
}

For this example, we can ignore the start-element callback, and just
use the end-element callback:

static int endelm(void *userdata, const struct hip_xml_elm *s,
		  const char *cdata)
{
    printf("Got a thing: %s\n", cdata);
    return 0;
}

This endelm callback just prints the cdata which was contained in the
"a-thing" element.

Now, on to parsing. A new parser object is created for parsing each
XML document.  Creating a new parser object is as simple as:

  hip_xml_parser *parser;

  parser = hip_xml_create();

Next register the handler, passing NULL as the start-element callback,
and also as userdata, which we don't use here.

  hip_xml_push_handler(parser, my_elms, 
		       validate, NULL, endelm,
		       NULL);

Finally, call hip_xml_parse, passing the chunks of XML document to the
hip_xml as you get them. The output should be:

  Got a thing: foo
  Got a thing: bar

for the XML document.


================================================
FILE: doc/ref/alloc.xml
================================================
    <refentry id="refalloc">

      <refmeta>
	<refentrytitle>ne_malloc</refentrytitle>
	<manvolnum>3</manvolnum>
      </refmeta>

      <refnamediv>
	<refname id="ne_malloc">ne_malloc</refname>
	<refname id="ne_calloc">ne_calloc</refname>
	<refname id="ne_realloc">ne_realloc</refname>
	<refname id="ne_strdup">ne_strdup</refname>
	<refname id="ne_strndup">ne_strndup</refname>
        <refname id="ne_oom_callback">ne_oom_callback</refname>
	<refpurpose>memory allocation wrappers</refpurpose>
      </refnamediv>
      
      <refsynopsisdiv>
	
	<funcsynopsis>

	  <funcsynopsisinfo>#include &lt;ne_alloc.h&gt;</funcsynopsisinfo>

	  <funcprototype>
	    <funcdef>void *<function>ne_malloc</function></funcdef>
	    <paramdef>size_t <parameter>size</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void *<function>ne_calloc</function></funcdef>
	    <paramdef>size_t <parameter>size</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void *<function>ne_realloc</function></funcdef>
	    <paramdef>void *<parameter>size</parameter></paramdef>
	    <paramdef>size_t <parameter>len</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>char *<function>ne_strdup</function></funcdef>
	    <paramdef>const char *<parameter>s</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>char *<function>ne_strndup</function></funcdef>
	    <paramdef>const char *<parameter>s</parameter></paramdef>
	    <paramdef>size_t <parameter>size</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void <function>ne_oom_callback</function></funcdef>
	    <paramdef>void (*<parameter>callback</parameter>)(void)</paramdef>
	  </funcprototype>

	</funcsynopsis>
	
      </refsynopsisdiv>

      <refsect1>
	<title>Description</title>

	<para>The functions <function>ne_malloc</function>,
<function>ne_calloc</function>, <function>ne_realloc</function>,
<function>ne_strdup</function> and <function>ne_strdnup</function>
provide wrappers for the equivalent functions in the standard C
library.  The wrappers provide the extra guarantee that if the C
library equivalent returns &null; when no memory is available, an
optional callback will be called, and the library will then call
<function>abort</function>().</para>

	<para><function>ne_oom_callback</function> registers a callback
which will be invoked if an out of memory error is detected.</para>

      </refsect1>

      <refsect1>
	<title>Notes</title>

	<para>If the operating system uses optimistic memory
allocation, the C library memory allocation routines will not return
&null;, so it is not possible to gracefully handle memory allocation
failures.</para>

      </refsect1>

    </refentry>


================================================
FILE: doc/ref/auth.xml
================================================
    <refentry id="refauth">

      <refmeta>
	<refentrytitle>ne_set_server_auth</refentrytitle>
	<manvolnum>3</manvolnum>
      </refmeta>

      <refnamediv>
	<refname id="ne_set_server_auth">ne_set_server_auth</refname>
	<refname id="ne_set_proxy_auth">ne_set_proxy_auth</refname>
	<refname id="ne_forget_auth">ne_forget_auth</refname>
	<refpurpose>register authentication callbacks</refpurpose>
      </refnamediv>
      
      <refsynopsisdiv>
	
	<funcsynopsis>

	  <funcsynopsisinfo>#include &lt;ne_auth.h&gt;</funcsynopsisinfo>

	  <funcprototype>
	    <funcdef>typedef int (*<function>ne_auth_creds</function>)</funcdef>
	    <paramdef>void *<parameter>userdata</parameter></paramdef>
	    <paramdef>const char *<parameter>realm</parameter></paramdef>
	    <paramdef>int <parameter>attempt</parameter></paramdef>
	    <paramdef>char *<parameter>username</parameter></paramdef>
	    <paramdef>char *<parameter>password</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void <function>ne_set_server_auth</function></funcdef>
	    <paramdef>ne_session *<parameter>session</parameter></paramdef>
	    <paramdef>ne_auth_creds <parameter>callback</parameter></paramdef>
	    <paramdef>void *<parameter>userdata</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void <function>ne_set_proxy_auth</function></funcdef>
	    <paramdef>ne_session *<parameter>session</parameter></paramdef>
	    <paramdef>ne_auth_creds <parameter>callback</parameter></paramdef>
	    <paramdef>void *<parameter>userdata</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void <function>ne_forget_auth</function></funcdef>
	    <paramdef>ne_session *<parameter>session</parameter></paramdef>
	  </funcprototype>

	</funcsynopsis>
	
      </refsynopsisdiv>

      <refsect1>
	<title>Description</title>

	<para>The <type>ne_auth_creds</type> function type defines a
callback which is invoked when a server or proxy server requires user
authentication for a particular request.  The
<parameter>realm</parameter> string is supplied by the server. <!--
FIXME --> The <parameter>attempt</parameter> is a counter giving the
number of times the request has been retried with different
authentication credentials.  The first time the callback is invoked
for a particular request, <parameter>attempt</parameter> will be zero.</para>

	<para>To retry the request using new authentication
credentials, the callback should return zero, and the
<parameter>username</parameter> and <parameter>password</parameter>
buffers must contain &nul;-terminated strings.  The
<literal>NE_ABUFSIZ</literal> constant gives the size of these
buffers.</para>

	<tip>
	  <para>If you only wish to allow the user one attempt to enter
credentials, use the value of the <parameter>attempt</parameter>
parameter as the return value of the callback.</para>
	</tip>

	<para>To abort the request, the callback should return a
non-zero value; in which case the contents of the
<parameter>username</parameter> and <parameter>password</parameter>
buffers are ignored.</para>

	<para>The <function>ne_forget_auth</function> function can be
used to discard the cached authentication credentials.</para>

      </refsect1>

      <refsect1>
	<title>Examples</title>

	<programlisting>
/* Function which prompts for a line of user input: */
extern char *prompt_for(const char *prompt);

static int
my_auth(void *userdata, const char *realm, int attempts,
        char *username, char *password)
{
   strncpy(username, prompt_for("Username: "), NE_ABUFSIZ);
   strncpy(password, prompt_for("Password: "), NE_ABUFSIZ);
   return attempts;
}

int main(...)
{
   &egsess;

   ne_set_server_auth(sess, my_auth, NULL);

   /* ... */
}</programlisting>
      </refsect1>

    </refentry>


================================================
FILE: doc/ref/buf.xml
================================================
    <refentry id="refbuf">

      <refmeta>
	<refentrytitle>ne_buffer</refentrytitle>
	<manvolnum>3</manvolnum>
      </refmeta>

      <refnamediv>
	<refname id="ne_buffer">ne_buffer</refname>
	<refpurpose>string buffer handling</refpurpose>
      </refnamediv>
      
      <refsynopsisdiv>

	<funcsynopsis><funcsynopsisinfo>#include &lt;ne_string.h&gt;

typedef struct {
    char *data;
    size_t used;
    size_t length;
} <type>ne_buffer</type>;</funcsynopsisinfo></funcsynopsis>

      </refsynopsisdiv>

      <refsect1>
	<title>Description</title>

	<para>The <type>ne_buffer</type> type represents an expandable
memory buffer for holding &nul;-terminated strings.  The
<structfield>data</structfield> field points to the beginning of the
string, the length of which is given by the
<structfield>used</structfield> field.  The current size of memory
allocated is given by the <structfield>length</structfield> field.  It
is not recommended that the fields of a buffer are manipulated
directly.  The <structfield>data</structfield> pointer may change when
the buffer is modified.</para>

	<para>A buffer is created using <xref
linkend="ne_buffer_create"/> or <xref
linkend="ne_buffer_create_sized"/>, and destroyed using <xref
linkend="ne_buffer_destroy"/> or <xref linkend="ne_buffer_finish"/>.
The functions <xref linkend="ne_buffer_append"/>, <xref
linkend="ne_buffer_zappend"/> and <xref linkend="ne_buffer_concat"/> are
used to append data to a buffer.</para>

	<para>If the string referenced by the
<structfield>data</structfield> pointer is modified directly (rather
than using one of the functions listed above),
<function>ne_buffer_altered</function> must be called.</para>

      </refsect1>

    </refentry>


================================================
FILE: doc/ref/bufapp.xml
================================================
    <refentry id="refbufapp">

      <refmeta>
	<refentrytitle>ne_buffer_append</refentrytitle>
	<manvolnum>3</manvolnum>
      </refmeta>

      <refnamediv>
	<refname id="ne_buffer_append">ne_buffer_append</refname>
	<refname id="ne_buffer_zappend">ne_buffer_zappend</refname>
	<refname id="ne_buffer_qappend">ne_buffer_qappend</refname>
	<refname id="ne_buffer_concat">ne_buffer_concat</refname>
	<refname id="ne_buffer_snprintf">ne_buffer_snprintf</refname>
	<refpurpose>append data to a string buffer</refpurpose>
      </refnamediv>
      
      <refsynopsisdiv>
	
	<funcsynopsis>

	  <funcsynopsisinfo>#include &lt;ne_string.h&gt;</funcsynopsisinfo>

	  <funcprototype>
	    <funcdef>void <function>ne_buffer_append</function></funcdef>
	    <paramdef>ne_buffer *<parameter>buf</parameter></paramdef>
	    <paramdef>const char *<parameter>string</parameter></paramdef>
	    <paramdef>size_t <parameter>len</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void <function>ne_buffer_zappend</function></funcdef>
	    <paramdef>ne_buffer *<parameter>buf</parameter></paramdef>
	    <paramdef>const char *<parameter>string</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void <function>ne_buffer_qappend</function></funcdef>
	    <paramdef>ne_buffer *<parameter>buf</parameter></paramdef>
	    <paramdef>const char *<parameter>string</parameter></paramdef>
	    <paramdef>size_t <parameter>len</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void <function>ne_buffer_concat</function></funcdef>
	    <paramdef>ne_buffer *<parameter>buf</parameter></paramdef>
	    <paramdef>...</paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>size_t <function>ne_buffer_snprintf</function></funcdef>
	    <paramdef>ne_buffer *<parameter>buf</parameter></paramdef>
	    <paramdef>size_t <parameter>max</parameter></paramdef>
	    <paramdef>const char *<parameter>format</parameter></paramdef>
	    <paramdef>...</paramdef>
	  </funcprototype>
	</funcsynopsis>
	
      </refsynopsisdiv>

      <refsect1>
	<title>Description</title>

	<para>The <function>ne_buffer_append</function> and
<function>ne_buffer_zappend</function> functions append a string to
the end of a buffer; extending the buffer as necessary.  The
<parameter>len</parameter> passed to
<function>ne_buffer_append</function> specifies the length of the
string to append; there must be no &nul; terminator in the first
<parameter>len</parameter> bytes of the string.
<function>ne_buffer_zappend</function> must be passed a
&nul;-terminated string.</para>

	<para>The <function>ne_buffer_qappend</function> function
	behaves similarly to <function>ne_buffer_append</function>,
	except that any non-ASCII characters or ASCII control
	characters are escaped using C-style hex escaping. For
	example, the C string <literal>"foo&lt;TAB&gt;bar"</literal>,
	where TAB represents ASCII character 9, would be appended as
	<literal>"foo\x09bar"</literal>. Any &nul; bytes within the
	length specified are also escaped. This function is useful to
	make strings from untrusted sources safe for logging or output
	in a user interface.</para>

	<para>The <function>ne_buffer_concat</function> function takes
	a variable-length argument list; each argument must be a
	<type>char *</type> pointer to a &nul;-terminated string.  A
	&null; pointer must be given as the last argument to mark the
	end of the list.  The strings are appended to the buffer in
	the order given. None of the strings passed to
	<function>ne_buffer_concat</function> are modified.</para>

<para>The <function>ne_buffer_snprintf</function> function behaves
like <function>snprintf</function>, appending the output string
formatted according to the <parameter>format</parameter> parameter.
At most <parameter>max</parameter> bytes are written including the
trailing &nul; terminator.</para>

      </refsect1>

      <refsect1>
	<title>Return value</title>

        <para>The <function>ne_buffer_snprintf</function> function
        returns the number of bytes appended
        <emphasis>excluding</emphasis> the trailing &nul;
        terminator.</para>
      </refsect1>

      <refsect1>
	<title>Examples</title>

	<para>The following code will output "<literal>Hello, world.
And goodbye.</literal>".</para>
	
	<programlisting>ne_buffer *buf = ne_buffer_create();
ne_buffer_zappend(buf, "Hello");
ne_buffer_concat(buf, ", world. ", "And ", NULL);
ne_buffer_snprintf(buf, 10, "%s.", "goodbye");
puts(buf->data);
ne_buffer_destroy(buf);</programlisting>
      </refsect1>

      <refsect1>
	<title>See also</title>

	<para><xref linkend="ne_buffer"/>, <xref linkend="ne_buffer_create"/>,
<xref linkend="ne_buffer_destroy"/></para>
      </refsect1>

    </refentry>


================================================
FILE: doc/ref/bufcr.xml
================================================
    <refentry id="refbufcr">

      <refmeta>
	<refentrytitle>ne_buffer_create</refentrytitle>
	<manvolnum>3</manvolnum>
      </refmeta>

      <refnamediv>
	<refname id="ne_buffer_create">ne_buffer_create</refname>
	<refname id="ne_buffer_create_sized">ne_buffer_ncreate</refname>
	<refpurpose>create a string buffer</refpurpose>
      </refnamediv>
      
      <refsynopsisdiv>
	
	<funcsynopsis>

	  <funcsynopsisinfo>#include &lt;ne_alloc.h&gt;</funcsynopsisinfo>

	  <funcprototype>
	    <funcdef>ne_buffer *<function>ne_buffer_create</function></funcdef>
	    <void/>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>ne_buffer *<function>ne_buffer_ncreate</function></funcdef>
	    <paramdef>size_t <parameter>size</parameter></paramdef>
	  </funcprototype>

	</funcsynopsis>
	
      </refsynopsisdiv>

      <refsect1>
	<title>Description</title>

	<para><function>ne_buffer_create</function> creates a new
buffer object, with an implementation-defined initial size.
<function>ne_buffer_ncreate</function> creates an
<type>ne_buffer</type> where the minimum initial size is given in the
<parameter>size</parameter> parameter.  The buffer created will
contain the empty string (<literal>""</literal>).</para>

      </refsect1>

      <refsect1>
	<title>Return value</title>

	<para>Both functions return a pointer to a new buffer object,
and never &null;.</para>

       </refsect1>

      <refsect1>
	<title>See also</title>

	<para><xref linkend="ne_buffer"/></para>
      </refsect1>

    </refentry>


================================================
FILE: doc/ref/bufdest.xml
================================================
    <refentry id="refbufdest">

      <refmeta>
	<refentrytitle>ne_buffer_destroy</refentrytitle>
	<manvolnum>3</manvolnum>
      </refmeta>

      <refnamediv>
	<refname id="ne_buffer_destroy">ne_buffer_destroy</refname>
	<refname id="ne_buffer_finish">ne_buffer_finish</refname>
	<refpurpose>destroy a buffer object</refpurpose>
      </refnamediv>
      
      <refsynopsisdiv>
	
	<funcsynopsis>

	  <funcsynopsisinfo>#include &lt;ne_string.h&gt;</funcsynopsisinfo>

	  <funcprototype>
	    <funcdef>void <function>ne_buffer_destroy</function></funcdef>
	    <paramdef>ne_buffer *<parameter>buf</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>char *<function>ne_buffer_finish</function></funcdef>
	    <paramdef>ne_buffer *<parameter>buf</parameter></paramdef>
	  </funcprototype>

	</funcsynopsis>
	
      </refsynopsisdiv>

      <refsect1>
	<title>Description</title>

	<para><function>ne_buffer_destroy</function> frees all memory
associated with the buffer.  <function>ne_buffer_finish</function>
frees the buffer structure, but not the actual string stored in the
buffer, which is returned and must be <function>free</function>()d by
the caller.</para>

	<para>Any use of the buffer object after calling either of these
functions gives undefined behaviour.</para>

      </refsect1>

      <refsect1>
	<title>Return value</title>

	<para><function>ne_buffer_finish</function> returns the
<function>malloc</function>-allocated string stored in the buffer.</para>

      </refsect1>

      <refsect1>
	<title>Examples</title>

	<para>An example use of <function>ne_buffer_finish</function>;
the <function>duplicate</function> function returns a string made up of 
<parameter>n</parameter> copies of <parameter>str</parameter>:</para>

	<programlisting>static char *duplicate(int n, const char *str)
{
  ne_buffer *buf = ne_buffer_create();
  while (n--) {
    ne_buffer_zappend(buf, str);
  }
  return ne_buffer_finish(buf);
}</programlisting>

      </refsect1>

      <refsect1>
	<title>See also</title>

	<para><xref linkend="ne_buffer"/>, <xref linkend="ne_buffer_create"/>,
<xref linkend="ne_buffer_zappend"/></para>
      </refsect1>

    </refentry>


================================================
FILE: doc/ref/bufutil.xml
================================================
    <refentry id="refbufutil">

      <refmeta>
	<refentrytitle>ne_buffer_clear</refentrytitle>
	<manvolnum>3</manvolnum>
      </refmeta>

      <refnamediv>
	<refname id="ne_buffer_clear">ne_buffer_clear</refname>
	<refname id="ne_buffer_grow">ne_buffer_grow</refname>
	<refname id="ne_buffer_altered">ne_buffer_altered</refname>
	<refpurpose>clear, grow, or mark as altered a string buffer</refpurpose>
      </refnamediv>
      
      <refsynopsisdiv>
	
	<funcsynopsis>

	  <funcsynopsisinfo>#include &lt;ne_string.h&gt;</funcsynopsisinfo>

	  <funcprototype>
	    <funcdef>void <function>ne_buffer_clear</function></funcdef>
	    <paramdef>ne_buffer *<parameter>buf</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void <function>ne_buffer_altered</function></funcdef>
	    <paramdef>ne_buffer *<parameter>buf</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void <function>ne_buffer_grow</function></funcdef>
	    <paramdef>ne_buffer *<parameter>buf</parameter></paramdef>
	    <paramdef>size_t <parameter>size</parameter></paramdef>
	  </funcprototype>

	</funcsynopsis>
	
      </refsynopsisdiv>

      <refsect1>
	<title>Description</title>

	<para>The <function>ne_buffer_clear</function> function sets
the string stored in <parameter>buf</parameter> to be the empty string
(<literal>""</literal>).</para>

	<para>The <function>ne_buffer_altered</function> function must
be used after the string stored in the buffer
<parameter>buf</parameter> is modified by directly rather than using
<xref linkend="ne_buffer_append"/>, <xref linkend="ne_buffer_zappend"/> 
or <xref linkend="ne_buffer_concat"/>.</para>

	<para>The <function>ne_buffer_grow</function> function
ensures that at least <parameter>size</parameter> bytes are allocated
for the string; this can be used if a large amount of data is going to
be appended to the buffer and may result in more efficient memory
allocation.</para>

      </refsect1>

    </refentry>


================================================
FILE: doc/ref/clicert.xml
================================================
<refentry id="refclicert">

  <refmeta>
    <refentrytitle>ne_ssl_client_cert</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname id="ne_ssl_clicert_read">ne_ssl_clicert_read</refname>
    <refname id="ne_ssl_clicert_import">ne_ssl_clicert_import</refname>
    <refname id="ne_ssl_clicert_fromuri">ne_ssl_clicert_fromuri</refname>
    <refname id="ne_ssl_clicert_name">ne_ssl_clicert_name</refname>
    <refname id="ne_ssl_clicert_encrypted">ne_ssl_clicert_encrypted</refname>
    <refname id="ne_ssl_clicert_decrypt">ne_ssl_clicert_decrypt</refname>
    <refname id="ne_ssl_clicert_owner">ne_ssl_clicert_owner</refname>
    <refname id="ne_ssl_clicert_free">ne_ssl_clicert_free</refname>
    <refpurpose>SSL client certificate handling</refpurpose>
  </refnamediv>
  
  <refsynopsisdiv>

    <funcsynopsis>

      <funcsynopsisinfo>#include &lt;ne_ssl.h&gt;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>ne_ssl_client_cert *<function>ne_ssl_clicert_read</function></funcdef>
        <paramdef>const char *<parameter>filename</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>ne_ssl_client_cert *<function>ne_ssl_clicert_import</function></funcdef>
        <paramdef>const unsigned char *<parameter>filename</parameter></paramdef>
        <paramdef>size_t <parameter>buflen</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>ne_ssl_client_cert *<function>ne_ssl_clicert_fromuri</function></funcdef>
        <paramdef>const char *<parameter>uri</parameter></paramdef>
        <paramdef>unsigned <parameter>flags</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>const char *<function>ne_ssl_clicert_name</function></funcdef>
        <paramdef>const ne_ssl_client_cert *<parameter>ccert</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>ne_ssl_clicert_encrypted</function></funcdef>
        <paramdef>const ne_ssl_client_cert *<parameter>ccert</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>ne_ssl_clicert_decrypt</function></funcdef>
        <paramdef>ne_ssl_client_cert *<parameter>ccert</parameter></paramdef>
        <paramdef>const char *<parameter>password</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>const ne_ssl_certificate *<function>ne_ssl_clicert_owner</function></funcdef>
        <paramdef>const ne_ssl_client_cert *<parameter>ccert</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>void <function>ne_ssl_clicert_free</function></funcdef>
        <paramdef>ne_ssl_client_cert *<parameter>ccert</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>

  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para>The <function>ne_ssl_clicert_read</function> function reads
    a <firstterm>client certificate</firstterm> from a
    PKCS#12-formatted file, and returns an
    <type>ne_ssl_client_cert</type> object. The
    <function>ne_ssl_clicert_import</function> function reads a client
    certificate from a memory buffer using the PKCS#12 format. The
    <function>ne_ssl_clicert_fromuri</function> function loads a
    client certificate from a URI. URI schemes supported are defined
    by the SSL/TLS toolkit, and may include <ulink url="https://www.rfc-editor.org/rfc/rfc7512.html">PKCS#11 URIs</ulink>.</para>

    <para>A <type>ne_ssl_client_cert</type> object represents both a
    client certificate and the associated private key; the term
    "<glossterm>client certificate</glossterm>" is used here to refer to
    this pair. A client certificate object loaded by any of the above
    functions can be in one of two states:
    <emphasis>encrypted</emphasis> or <emphasis>decrypted</emphasis>.
    The <function>ne_ssl_clicert_encrypted</function> function will
    return non-zero if the client certificate is in the
    <emphasis>encrypted</emphasis> state.</para>

    <para>A client certificate <emphasis>must</emphasis> be in the
    decrypted state before it is associated with a
    session. <function>ne_ssl_clicert_decrypt</function> can be used
    to decrypt a client certificate using the appropriate password.
    This function must only be called if the object is in the
    <emphasis>encrypted</emphasis> state; if decryption fails, the
    certificate state does not change, so decryption can be attempted
    more than once using different passwords.</para>

    <para>A client certificate can be given a "friendly name" when it
    is created; <function>ne_ssl_clicert_name</function> will return
    this name (or &null; if no friendly name was specified).
    <function>ne_ssl_clicert_name</function> can be used when the
    client certificate is in either the encrypted or decrypted state,
    and will return the same string for the lifetime of the
    object.</para>

    <para>The function <function>ne_ssl_clicert_owner</function>
    returns the certificate part of the client certificate; it must
    only be called if the client certificate is in the
    <emphasis>decrypted</emphasis> state.</para>

    <para>When the client certificate object is no longer needed, the
    <function>ne_ssl_clicert_free</function> function should be used
    to destroy the object.</para>

  </refsect1>

  <refsect1>
    <title>Return value</title>

    <para><function>ne_ssl_clicert_read</function>,
    <function>ne_ssl_clicert_import</function> and
    <function>ne_ssl_clicert_fromuri</function> all return a client
    certificate object, or &null; if the certificate could not be
    read/imported.  <function>ne_ssl_clicert_encrypted</function>
    returns zero if the object is in the decrypted state, or non-zero
    if it is in the encrypted
    state. <function>ne_ssl_clicert_name</function> returns a
    &nul;-terminated friendly name string, or &null;.
    <function>ne_ssl_clicert_owner</function> returns a certificate
    object.</para>

  </refsect1>

  <refsect1>
    <title>Examples</title>

    <para>The following code reads a client certificate and decrypts
    it if necessary, then loads it into an HTTP session.</para>

    <programlisting>ne_ssl_client_cert *ccert;

ccert = ne_ssl_clicert_read("/path/to/client.p12");

if (ccert == NULL) {
   /* handle error... */
} else if (ne_ssl_clicert_encrypted(ccert)) {
   char *password = prompt_for_password();

   if (ne_ssl_clicert_decrypt(ccert, password)) {
      /* could not decrypt! handle error... */
   }
}

ne_ssl_set_clicert(sess, ccert);
</programlisting>

  </refsect1>

  <refsect1>
    <title>History</title>

    <para><function>ne_ssl_clicert_import</function> was added in
    &neon; 0.30.0. <function>ne_ssl_clicert_fromuri</function> was
    added in &neon; 0.35.0.</para>
  </refsect1>

  <refsect1>
    <title>See also</title>

    <para><xref linkend="ne_ssl_cert_read"/></para>
  </refsect1>

</refentry>



================================================
FILE: doc/ref/config.xml
================================================
    <refentry id="refconfig">

      <refentryinfo><title>neon</title></refentryinfo>

      <refmeta>
	<refentrytitle>neon-config</refentrytitle>
	<manvolnum>1</manvolnum>
      </refmeta>

      <refnamediv>
	<refname id="neon-config">neon-config</refname>

	<refpurpose>script providing information about installed copy
	of neon library</refpurpose>
      </refnamediv>

      <refsynopsisdiv>

	<cmdsynopsis>
	  <command>neon-config</command>
	  <arg choice="opt"><option>--prefix</option></arg>
	  <group>
	    <arg><option>--cflags</option></arg>
	    <arg><option>--libs</option></arg>
	    <arg><option>--la-file</option></arg>
	    <arg><option>--support</option> <replaceable>feature</replaceable></arg>
	    <arg><option>--help</option></arg>
	    <arg><option>--version</option></arg>
	  </group>
	</cmdsynopsis>

      </refsynopsisdiv>

      <refsect1>
	<title>Description</title>

	<para>The <command>neon-config</command> script provides
information about an installed copy of the neon library.  The
<option>--cflags</option> and <option>--libs</option> options instruct
how to compile and link an application against the library; the
<option>--version</option> and <option>--support</option> options can
help determine whether the library meets the applications
requirements.</para>

      </refsect1>

      <refsect1>
	<title>Options</title>

	<variablelist>

	  <varlistentry>
	    <term><option>--cflags</option></term>
	    <listitem><simpara>Print the flags which should be passed to
the C compiler when compiling object files, when the object files use
neon header files.</simpara></listitem>
	  </varlistentry>

	  <varlistentry>
	    <term><option>--libs</option></term>
	    <listitem><simpara>Print the flags which should be passed to
the linker when linking an application which uses the neon
library</simpara></listitem>
	  </varlistentry>

	  <varlistentry>
	    <term><option>--la-file</option></term>
	    <listitem><simpara>Print the location of the libtool library
script, <filename>libneon.la</filename>, which can be used to link against
&neon; by applications using libtool.</simpara></listitem>
	  </varlistentry>

	  <varlistentry>
	    <term><option>--version</option></term>
	    <listitem><simpara>Print the version of the library</simpara></listitem>
	  </varlistentry>

	  <varlistentry>
	    <term><option>--prefix</option> <replaceable>dir</replaceable></term>
	    <listitem><simpara>If <replaceable>dir</replaceable> is given; relocate output of
<option>--cflags</option> and <option>--libs</option> as if neon was
installed in given prefix directory.  Otherwise, print the
installation prefix of the library.</simpara></listitem>
	  </varlistentry>

	  <varlistentry>
	    <term><option>--support</option> <replaceable>feature</replaceable></term>
	    <listitem><simpara>The script exits with success if
<replaceable>feature</replaceable> is supported by the
library.</simpara></listitem>
          </varlistentry>

	  <varlistentry>
	    <term><option>--help</option></term>
	    <listitem><simpara>Print help message; includes list of known
	    features and whether they are supported or not.</simpara></listitem>
	  </varlistentry>

	</variablelist>

      </refsect1>

      <refsect1>
	<title>Example</title>

	<para>Below is a Makefile fragment which could be used to
build an application against an installed neon library, when the
<command>neon-config</command> script can be found in
<envar>$PATH</envar>.</para>

	<programlisting>CFLAGS = `neon-config --cflags`
LIBS = `neon-config --libs`
OBJECTS = myapp.o
TARGET = myapp

$(TARGET): $(OBJECTS)
	$(CC) $(LDFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS)

myapp.o: myapp.c
	$(CC) $(CFLAGS) -c myapp.c -o myapp.o</programlisting>

       </refsect1>

    </refentry>


================================================
FILE: doc/ref/ctype.xml
================================================
<refentry id="refgetctype">

  <refmeta>
    <refentrytitle>ne_get_content_type</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname id="ne_get_content_type">ne_get_content_type</refname>
    <refpurpose>retrieve content type of response</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include &lt;ne_basic.h&gt;

typedef struct {
    const char *type, *subtype;
    const char *charset;
    char *value;
} <type>ne_content_type;</type></funcsynopsisinfo>

      <funcprototype>
        <funcdef>int <function>ne_get_content_type</function></funcdef>
        <paramdef>ne_request *<parameter>req</parameter></paramdef>
        <paramdef>ne_content_type *<parameter>ctype</parameter></paramdef>
      </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para>The <function>ne_get_content_type</function> function retrieves
    and parses the <literal>Content-Type</literal> header from the response
    to request <parameter>req</parameter>.  If successful, all fields of
    the <parameter>ctype</parameter> structure are set (and are never
    &null;).  The <structfield>value</structfield> field must be freed by
    the caller using <function>free</function> after use.</para>

  </refsect1>

  <refsect1>
    <title>Return value</title>

    <para><function>ne_get_content_type</function> returns zero if the
    response had a valid <literal>Content-Type</literal> header, or
    non-zero on error.  On error, the <parameter>ctype</parameter>
    structure is not altered.</para>

  </refsect1>

  <refsect1>
    <title>History</title>

    <para>A default <structfield>charset</structfield> value was
    returned for <literal>text/xml</literal> content-types in &neon;
    0.36.0 and earlier; later versions use no default (per <ulink
    url="https://www.rfc-editor.org/rfc/rfc7303">RFC
    7303</ulink>).</para>
  </refsect1>

  <refsect1>
    <title>See also</title>

    <para><xref linkend="ne_xml_dispatch_request"/>, <xref linkend="ne_request_dispatch"/></para>
  </refsect1>

</refentry>


================================================
FILE: doc/ref/err.xml
================================================
    <refentry id="referr">

      <refmeta>
	<refentrytitle>ne_get_error</refentrytitle>
	<manvolnum>3</manvolnum>
      </refmeta>

      <refnamediv>
	<refname id="ne_get_error">ne_get_error</refname>
	<refname id="ne_set_error">ne_set_error</refname>
	<refpurpose>error handling for HTTP sessions</refpurpose>
      </refnamediv>
      
      <refsynopsisdiv>
	
	<funcsynopsis>

	  <funcsynopsisinfo>#include &lt;ne_session.h&gt;</funcsynopsisinfo>

	  <funcprototype>
	    <funcdef>const char *<function>ne_get_error</function></funcdef>
	    <paramdef>ne_sesssion *<parameter>session</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>void <function>ne_set_error</function></funcdef>
	    <paramdef>ne_sesssion *<parameter>session</parameter></paramdef>
	    <paramdef>const char *<parameter>format</parameter></paramdef>
	    <paramdef>...</paramdef>
	  </funcprototype>

	</funcsynopsis>
	
      </refsynopsisdiv>
      
      <refsect1>
	<title>Description</title>

	<para>The session error string is used to store any
human-readable error information associated with any errors which
occur whilst using the HTTP session.</para>

	<para>The <function>ne_get_error</function> function returns
	the current session error string.  This string persists only
	until it is changed by a subsequent operation on the session.
	If localisation was enabled at build time, and if necessary
	enabled at run-time if necessary using <xref
	linkend="ne_i18n_init"/>, the returned string may have been
	translated into the user's current locale.</para>

        <para>The <function>ne_set_error</function> function can be
        used to set a new session error string, using a
        <function>printf</function>-style format string
        interface.</para>

      </refsect1>

      <refsect1>
        <title>Return value</title>

        <para><function>ne_set_error</function> returns a constant
        &nul;-terminated string.  In the default English locale, the
        returned string will <emphasis>not</emphasis> have a
        terminating <quote>.</quote> period character.</para>
      </refsect1>

      <refsect1>
	<title>Examples</title>
	<para>Retrieve the current error string:</para>
	<programlisting>&egsess;
...
printf("Error was: %s\n", ne_get_error(sess));</programlisting>

	<para>Set a new error string:</para>
	<programlisting>&egsess;
...
ne_set_error(sess, "Response missing header %s", "somestring");</programlisting>
      </refsect1>
      
    </refentry>


================================================
FILE: doc/ref/feat.xml
================================================
<refentry id="reffeat">

  <refmeta>
    <refentrytitle>ne_has_support</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname id="ne_has_support">ne_has_support</refname>
    <refpurpose>determine feature support status</refpurpose>
  </refnamediv>
  
  <refsynopsisdiv>

    <funcsynopsis>

      <funcsynopsisinfo>#include &lt;ne_utils.h&gt;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>int <function>ne_has_support</function></funcdef>
        <paramdef>int <parameter>feature</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>

  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para>The <function>ne_has_support</function> function can be used
    to determine whether a particular optional feature, given by the
    feature code <parameter>feature</parameter>, is supported.  The
    following feature codes are available:

    <variablelist>
      <varlistentry>
        <term><constant>NE_FEATURE_SSL</constant></term>
        <listitem>
          <simpara>Indicates support for SSL/TLS</simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><constant>NE_FEATURE_ZLIB</constant></term>
        <listitem>
          <simpara>Indicates support for compressed responses</simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><constant>NE_FEATURE_IPV6</constant></term>
        <listitem>
          <simpara>Indicates support for IPv6</simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><constant>NE_FEATURE_LFS</constant></term>
        <listitem>
          <simpara>Indicates support for large files</simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><constant>NE_FEATURE_SOCKS</constant></term>
        <listitem>
          <simpara>Indicates support for SOCKSv5</simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><constant>NE_FEATURE_TS_SSL</constant></term>
        <listitem>
          <simpara>Indicates support for thread-safe SSL
          initialization &mdash; see <xref linkend="ne_sock_init"/></simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><constant>NE_FEATURE_GSSAPI</constant></term>
        <listitem>
          <simpara>Indicates support for Negotiate authentication via GSSAPI</simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><constant>NE_FEATURE_LIBPXY</constant></term>
        <listitem>
          <simpara>Indicates support for libproxy (in <xref linkend="ne_session_system_proxy"/>)</simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><constant>NE_FEATURE_NTLM</constant></term>
        <listitem>
          <simpara>Indicates support for NTLM authentication via Libntlm</simpara>
        </listitem>
      </varlistentry>
    </variablelist>

    </para>

  </refsect1>

  <refsect1>
    <title>Return value</title>

    <para><function>ne_has_support</function> returns non-zero if 
    the given feature is supported, or zero otherwise.</para>

  </refsect1>

  <refsect1>
    <title>History</title>

    <para>The <constant>NE_FEATURE_GSSAPI</constant> and
    <constant>NE_FEATURE_LIBPXY</constant> constants are only
    available in &neon; 0.34.0 and newer.</para>

    <para>The <constant>NE_FEATURE_NTLM</constant> is only
    available in &neon; 0.37.0 and newer.</para>
  </refsect1>

  <refsect1>
    <title>See also</title>

    <para><xref linkend="refvers"/>, <xref linkend="refsockinit"/></para>
  </refsect1>

</refentry>



================================================
FILE: doc/ref/getst.xml
================================================
    <refentry id="refgetst">

      <refmeta>
	<refentrytitle>ne_get_status</refentrytitle>
	<manvolnum>3</manvolnum>
      </refmeta>

      <refnamediv>
	<refname id="ne_get_status">ne_get_status</refname>
	<refname id="ne_get_response_location">ne_get_response_location</refname>
	<refname id="ne_get_response_retry_after">ne_get_response_retry_after</refname>
	<refpurpose>retrieve HTTP response properties</refpurpose>
      </refnamediv>
      
      <refsynopsisdiv>
	
	<funcsynopsis>

	  <funcsynopsisinfo>#include &lt;ne_request.h&gt;</funcsynopsisinfo>

	  <funcprototype>
	    <funcdef>const ne_status *<function>ne_get_status</function></funcdef>
	    <paramdef>const ne_request *<parameter>request</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>ne_uri *<function>ne_get_response_location</function></funcdef>
	    <paramdef>ne_request *<parameter>request</parameter></paramdef>
	  </funcprototype>
	  <funcprototype>
	    <funcdef>time_t <function>ne_get_response_retry_after</function></funcdef>
	    <paramdef>ne_request *<parameter>request</parameter></paramdef>
	  </funcprototype>
	</funcsynopsis>
      </refsynopsisdiv>

      <refsect1>
	<title>Description</title>

	<para>The <function>ne_get_status</function> function returns
a pointer to the HTTP status object giving the result of a request.
The object returned only becomes valid once the request has been
<emphasis>successfully</emphasis> dispatched (the return value of
<function>ne_request_dispatch</function> or
<function>ne_begin_request</function> was zero).</para>

<para>If the response includes a <literal>Location</literal> header,
the <function>ne_get_response_location</function> function parses and
resolves the URI-reference relative to the request target. If a
fragment ("#fragment") is applicable to the request target, it can be
passed as an argument to allow appropriate relative resolution.</para>

<para>The <function>ne_get_response_retry_after</function> function
parses any <literal>Retry-After</literal> header included in the
response. If the header value uses a relative time, it is interpreted
relative to the time the function was invoked, rather than the time
the response was received, so the function should be used directly
after dispatching the request.</para>
      </refsect1>

      <refsect1>
	<title>Return value</title>

        <para><function>ne_get_status</function> returns a pointer to
        the HTTP status object giving the result of a request. This
        pointer is valid until the associated request object is
        destroyed.</para>

        <para><function>ne_get_response_location</function> returns a
        malloc-allocated ne_uri object, or NULL if either the URI in
        the Location header could not be parsed or the Location header
        was not present.</para>

        <para><function>ne_get_response_retry_after</function> returns
        a time_t value, or zero if either no Retry-After header was
        included or the header value could not be parsed.</para>
      </refsect1>

      <refsect1>
	<title>Examples</title>
	
	<para>Display the response status code of applying the
<literal>HEAD</literal> method to some resource.</para>

	<programlisting>ne_request *req = ne_request_create(sess, "HEAD", "/foo/bar");
if (ne_request_dispatch(req))
   /* handle errors... */
else
   printf("Response status code was %d\n", ne_get_status(req)->code);
ne_request_destroy(req);</programlisting>
      </refsect1>

      <refsect1>
	<title>History</title>

        <para><function>ne_get_response_location</function> is
        available in &neon; 0.34.0 and later.</para>
      </refsect1>

      <refsect1>
	<title>See also</title>

	<para><xref linkend="ne_status"/>, <xref
	linkend="ne_request_create"/></para>
      </refsect1>

    </refentry>


================================================
FILE: doc/ref/hash.xml
================================================
    <refentry id="refhash">

      <refmeta>
	<refentrytitle>ne_strhash</refentrytitle>
	<manvolnum>3</manvolnum>
      </refmeta>

      <refnamediv>
	<refname id="ne_strhash">ne_strhash</refname>
	<refname id="ne_vstrhash">ne_vstrhash</refname>
	<refpurpose>string hash interface</refpurpose>
      </refnamediv>
      
      <refsynopsisdiv>

	<funcsynopsis>
          <funcsynopsisinfo>#include &lt;ne_string.h&gt;</funcsynopsisinfo>

	  <funcprototype>
	    <funcdef>char *<function>ne_strhash</function></funcdef>
	    <paramdef>unsigned int <parameter>flags</parameter></paramdef>
	    <paramdef><parameter>...</parameter></paramdef>
	  </funcprototype>

	  <funcprototype>
	    <funcdef>char *<function>ne_vstrhash</function></funcdef>
	    <paramdef>unsigned int <parameter>flags</parameter></paramdef>
	    <paramdef>va_list <parameter>ap</parameter></paramdef>
	  </funcprototype>
        </funcsynopsis>

      </refsynopsisdiv>

      <refsect1>
	<title>Description</title>

	<para>The <function>ne_strhash</function> and
	<function>ne_vstrhash</function> functions can be used to
	create hashes.  The varargs argument list must be <type>const
	char *</type> strings followed by a &null; terminator.  The
	<parameter>flags</parameter> argument must select exactly one
	hash algorithm from the list below, which can be optionally
	bitwise-ORed with one of the formatting option.  The hash is
	calculated for the concatenation of the argument list, without
	separators.</para>

        <refsect2>
          <title>Hash algorithms</title>
        
        <para>The following hash algorithms are available:
	<variablelist>
	  <varlistentry>
            <term><constant>NE_HASH_MD5</constant></term>
	    <listitem><simpara>MD5</simpara></listitem>
	  </varlistentry>
	  <varlistentry>
            <term><constant>NE_HASH_SHA1</constant></term>
	    <listitem><simpara>SHA-1</simpara></listitem>
	  </varlistentry>
	  <varlistentry>
            <term><constant>NE_HASH_SHA256</constant></term>
	    <listitem><simpara>SHA-256 (SHA-2)</simpara></listitem>
	  </varlistentry>
	  <varlistentry>
            <term><constant>NE_HASH_SHA512</constant></term>
	    <listitem><simpara>SHA-512 (SHA-2)</simpara></listitem>
	  </varlistentry>
	  <varlistentry>
            <term><constant>NE_HASH_SHA512_256</constant></term>
	    <listitem><simpara>SHA-512/256 (SHA-2)</simpara></listitem>
	  </varlistentry>
        </variablelist>

        </para></refsect2>
        
        <refsect2>
          <title>Formatting options</title>
          
          <para>By default, the hash is returned as a hexadecimal
          lower-case character string. The following formatting
          options are available:
        
	<variablelist>
	  <varlistentry>
            <term><constant>NE_HASH_COLON</constant></term>
	    <listitem><simpara>colon-separated hex pairs, e.g. <literal>"aa:11:22..."</literal> </simpara></listitem>
	  </varlistentry>
	  <varlistentry>
            <term><constant>NE_HASH_SPACE</constant></term>
	    <listitem><simpara>space-separated hex pairs, e.g. <literal>"aa 11 22..."</literal></simpara></listitem>
	  </varlistentry>
          </variablelist></para>

        </refsect2>
        
      </refsect1>

      <refsect1>
	<title>Return value</title>

        <para>The return value is the ASCII hexadecimal representation
        of the hash as a malloc-allocated, NUL-terminated string, or
        &null; if the hash cannot be created.  The string length is
        determined by the hash algorithm (and formatting options
        used).  Support for hash algorithms is specific to the SSL
        toolkit with which &neon; is compiled.  Some systems will
        further restrict hash availability at runtime, e.g. due to
        FIPS mode.</para>

      </refsect1>

      <refsect1>
	<title>History</title>

        <para><function>ne_strhash</function> and <function>ne_vstrhash</function> are
        available in &neon; 0.32.0 and later.</para>

        <para>The <constant>NE_HASH_SHA1</constant> flag is available in
        &neon; 0.37.0 and later.</para>
      </refsect1>
    </refentry>


================================================
FILE: doc/ref/i18n.xml
================================================
<refentry id="refi18n">

  <refmeta>
    <refentrytitle>ne_i18n_init</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname id="ne_i18n_init">ne_i18n_init</refname>
    <refpurpose>functions to initialize internationalization support</refpurpose>
  </refnamediv>
  
  <refsynopsisdiv>

    <funcsynopsis>

      <funcsynopsisinfo>#include &lt;ne_i18n.h&gt;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>void <function>ne_i18n_init</function></funcdef>
        <paramdef>const char *<parameter>encoding</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>

  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para>The <function>ne_i18n_init</function> function can be used
    to enable support for translated messages in the &neon; library.
    The <parameter>encoding</parameter> parameter, if non-&null;,
    specifies the character encoding required for generated translated
    string.  If it is &null;, the appropriate character encoding for
    the process locale will be used.</para>

    <para>This call is only strictly necessary if either:

    <orderedlist numeration="loweralpha">
        
      <listitem><simpara>&neon; has been installed into a different
      prefix than the <literal>gettext</literal> implementation on
      which it depends for i18n purposes, or</simpara></listitem>

      <listitem><simpara>the caller requires that translated messages
      are in a particular character encoding.</simpara></listitem>

    </orderedlist></para>

    <para>If <function>ne_i18n_init</function> is never called, the
    message catalogs will not be found if case (a) applies (and so
    English error messages will be used), and will use the default
    character encoding specified by the process locale.  The library
    will otherwise operate correctly.</para>

    <para>Note that the encoding used is a process-global setting and
    so results may be unexpected if other users of &neon; within the
    process call <function>ne_i18n_init</function> with a different
    encoding parameter.</para>

  </refsect1>

  <refsect1>
    <title>See also</title>

    <para><xref linkend="ne_sock_init"/></para>
  </refsect1>

</refentry>



================================================
FILE: doc/ref/iaddr.xml
================================================
<refentry id="refiaddr">

  <refmeta>
    <refentrytitle>ne_iaddr_make</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname id="ne_iaddr_make">ne_iaddr_make</refname>
    <refname id="ne_iaddr_cmp">ne_iaddr_cmp</refname>
    <refname id="ne_iaddr_print">ne_iaddr_print</refname>
    <refname id="ne_iaddr_typeof">ne_iaddr_typeof</refname>
    <refname id="ne_iaddr_parse">ne_iaddr_parse</refname>
    <refname id="ne_iaddr_raw">ne_iaddr_raw</refname>
    <refname id="ne_iaddr_put">ne_iaddr_put</refname>
    <refname id="ne_iaddr_reverse">ne_iaddr_reverse</refname>
    <refname id="ne_iaddr_free">ne_iaddr_free</refname>
    <refpurpose>functions to manipulate network addresses</refpurpose>
  </refnamediv>
  
  <refsynopsisdiv>

    <funcsynopsis>

      <funcsynopsisinfo>#include &lt;ne_socket.h&gt;

typedef enum {
    ne_iaddr_ipv4 = 0,
    ne_iaddr_ipv6
} <type>ne_iaddr_type</type>;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>ne_inet_addr *<function>ne_iaddr_make</function></funcdef>
        <paramdef>ne_iaddr_type <parameter>type</parameter></paramdef>
        <paramdef>const unsigned char *<parameter>raw</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>ne_iaddr_cmp</function></funcdef>
        <paramdef>const ne_inet_addr *<parameter>ia1</parameter></paramdef>
        <paramdef>const ne_inet_addr *<parameter>ia2</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>char *<function>ne_iaddr_print</function></funcdef>
        <paramdef>const ne_inet_addr *<parameter>ia</parameter></paramdef>
        <paramdef>char *<parameter>buffer</parameter></paramdef>
        <paramdef>size_t <parameter>bufsiz</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>ne_iaddr_type <function>ne_iaddr_typeof</function></funcdef>
        <paramdef>const ne_inet_addr *<parameter>ia</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>ne_inet_addr *<function>ne_iaddr_parse</function></funcdef>
        <paramdef>const char *<parameter>address</parameter></paramdef>
        <paramdef>ne_iaddr_type <parameter>type</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>unsigned char *<function>ne_iaddr_raw</function></funcdef>
        <paramdef>const ne_inet_addr *<parameter>ia</parameter></paramdef>
        <paramdef>unsigned char *<parameter>buffer</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>ne_inet_addr *<function>ne_iaddr_put</function></funcdef>
        <paramdef>ne_inet_addr *<parameter>ia</parameter></paramdef>
        <paramdef>ne_iaddr_type <parameter>type</parameter></paramdef>
        <paramdef>const unsigned char *<parameter>raw</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>ne_iaddr_reverse</function></funcdef>
        <paramdef>const ne_inet_addr *<parameter>ia</parameter></paramdef>
        <paramdef>char *<parameter>buffer</parameter></paramdef>
        <paramdef>size_t <parameter>buflen</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>void <function>ne_iaddr_free</function></funcdef>
        <paramdef>ne_inet_addr *<parameter>ia</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>

  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>ne_iaddr_make</function> creates an
    <type>ne_inet_addr</type> object from a raw binary network
    address; for instance the four bytes <literal>0x7f 0x00 0x00
    0x01</literal> represent the IPv4 address
    <literal>127.0.0.1</literal>.  The object returned is suitable for
    passing to <function>ne_sock_connect</function>.  A binary IPv4
    address contains four bytes; a binary IPv6 address contains
    sixteen bytes; addresses passed must be in network byte
    order.</para>

    <para><function>ne_iaddr_cmp</function> compares two network
    address objects; returning zero only if they are identical.  The
    objects need not have the same address type; if the addresses are
    not of the same type, the return value is guaranteed to be
    non-zero.</para>

    <para><function>ne_iaddr_print</function> prints a human-readable
    string representation of a network address into a buffer, for
    instance the string <literal>"127.0.0.1"</literal>.</para>

    <para><function>ne_iaddr_typeof</function> returns the type of the
    given network address object.</para>

    <para><function>ne_iaddr_put</function> changes an existing
    network address object to a new raw byte representation given by
    parameter <parameter>type</parameter> (which can be different to
    the current type of the object). The raw data must be of
    length 4 bytes for an IPv4 address, or 16 bytes for an IPv6
    address.</para>

    <para><function>ne_iaddr_parse</function> parses a string
    representation of a network address (such as
    <literal>"127.0.0.1"</literal> and creates a network address
    object to represent the parsed address.</para>

    <para><function>ne_iaddr_raw</function> writes the raw byte
    representation of a network address to the provided buffer.  The
    bytes are written in network byte order; the buffer must be of
    suitable length for the type of address (4 bytes for an IPv4
    address, 16 bytes for an IPv6 address).</para>

    <para><function>ne_iaddr_reverse</function> performs a reverse
    name lookup on the address object, writing the (first) hostname
    associated with the IP address to the provided buffer.  If the
    hostname is longer than the buffer it will be silently truncated;
    on success the string written to the buffer is always
    &nul;-terminated.</para>

    <para><function>ne_iaddr_free</function> releases the memory
    associated with a network address object.</para>

  </refsect1>

  <refsect1>
    <title>Return value</title>

    <para><function>ne_iaddr_make</function> returns &null; if the
    address type passed is not supported (for instance on a platform
    which does not support IPv6).</para>

    <para><function>ne_iaddr_print</function> returns the
    <parameter>buffer</parameter> pointer, and never &null;.</para>

    <para><function>ne_iaddr_parse</function> returns a network
    address object on success, or &null; on failure to parse the
    <parameter>address</parameter> parameter.</para>

    <para><function>ne_iaddr_reverse</function> returns zero on
    success or non-zero if no hostname is associated with the
    address.</para>

    <para><function>ne_iaddr_raw</function> returns the
    <parameter>buffer</parameter> parameter, and never &null;.</para>

    <para><function>ne_iaddr_put</function> returns the passed in
    <parameter>ia</parameter> parameter, or &null; if the address type
    passed is not supported (for instance on a platform which does not
    support IPv6).</para>

  </refsect1>

  <refsect1>
    <title>Examples</title>

    <para>The following example connects a socket to port 80 at the
    address <literal>127.0.0.1</literal>.</para>
 
    <programlisting>unsigned char addr[] = "\0x7f\0x00\0x00\0x01";
ne_inet_addr *ia;

ia = ne_iaddr_make(ne_iaddr_ipv4, addr);
if (ia != NULL) {
    ne_socket *sock = ne_sock_connect(ia, 80);
    ne_iaddr_free(ia);
    /* ... */
} else {
    /* ... */
}</programlisting>

  </refsect1>

  <refsect1>
    <title>History</title>

    <para>The <function>ne_iaddr_raw</function> function is available
    in &neon; 0.29.0 and later.</para>

    <para>The <function>ne_iaddr_put</function> function is available
    in &neon; 0.37.0 and later.</para>

  </refsect1>

  <refsect1>
    <title>See also</title>

    <para><xref linkend="ne_addr_resolve"/></para>
  </refsect1>

</refentry>



================================================
FILE: doc/ref/init.xml
================================================
<refentry id="refsockinit">

  <refmeta>
    <refentrytitle>ne_sock_init</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname id="ne_sock_init">ne_sock_init</refname>
    <refname id="ne_sock_exit">ne_sock_exit</refname>
    <refpurpose>perform library initialization</refpurpose>
  </refnamediv>
  
  <refsynopsisdiv>

    <funcsynopsis>

      <funcsynopsisinfo>#include &lt;ne_socket.h&gt;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>int <function>ne_sock_init</function></funcdef>
	<void/>
      </funcprototype>

      <funcprototype>
        <funcdef>void <function>ne_sock_exit</function></funcdef>
	<void/>
      </funcprototype>

    </funcsynopsis>

  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para>In some platforms and configurations, &neon; may be using
    some socket or SSL libraries which require global initialization
    before use.  To perform this initialization, the
    <function>ne_sock_init</function> function must be called before
    any other library functions are used.</para>

    <para>Once all use of &neon; is complete,
    <function>ne_sock_exit</function> can be called to perform
    de-initialization of socket or SSL libraries, if necessary.  Uses
    of <function>ne_sock_init</function> and
    <function>ne_sock_exit</function> are "reference counted"; if N
    calls to <function>ne_sock_init</function> are made, only the Nth
    call to <function>ne_sock_exit</function> will have effect.</para>

    <para><function>ne_sock_init</function> will set the disposition
    of the <literal>SIGPIPE</literal> signal to
    <emphasis>ignored</emphasis>.  No change is made to the
    <literal>SIGPIPE</literal> disposition by
    <function>ne_sock_exit</function>.</para>

    <para>Both the SSL libraries supported by &neon; &mdash; OpenSSL
    and GnuTLS &mdash; require callbacks to be registered to allow
    thread-safe use of SSL.  These callbacks are stored as global
    variables and so their state persists for as long as the library
    in question is loaded into the process.  If multiple users of the
    SSL library exist within the process, this can be problematic,
    particularly if one is dynamically loaded (and may subsequently be
    unloaded).</para>

    <para>If &neon; is configured using the
    <literal>--enable-threadsafe-ssl</literal> flag, thread-safe SSL
    support will be enabled automatically, as covered in the following
    section.  Otherwise, it is not safe to use &neon; with SSL in a
    multi-threaded process.  The <xref linkend="ne_has_support"/>
    function can be used to determi
Download .txt
gitextract_r_vx3978/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report.md
│   ├── PULL_REQUEST_TEMPLATE/
│   │   └── pull_request_template.md
│   └── workflows/
│       ├── ci.yml
│       └── sanity.yml
├── .gitignore
├── .gitleaks.toml
├── .package
├── .release.sh
├── .travis.yml
├── AUTHORS
├── INSTALL.win32
├── Makefile.in
├── NEWS
├── README.md
├── THANKS
├── TODO
├── autogen.sh
├── config.hw.in
├── configure.ac
├── doc/
│   ├── biblio.xml
│   ├── feat.xml
│   ├── html.xsl
│   ├── man.xsl
│   ├── manual.css
│   ├── manual.xml
│   ├── parsing-xml.txt
│   ├── ref/
│   │   ├── alloc.xml
│   │   ├── auth.xml
│   │   ├── buf.xml
│   │   ├── bufapp.xml
│   │   ├── bufcr.xml
│   │   ├── bufdest.xml
│   │   ├── bufutil.xml
│   │   ├── clicert.xml
│   │   ├── config.xml
│   │   ├── ctype.xml
│   │   ├── err.xml
│   │   ├── feat.xml
│   │   ├── getst.xml
│   │   ├── hash.xml
│   │   ├── i18n.xml
│   │   ├── iaddr.xml
│   │   ├── init.xml
│   │   ├── lower.xml
│   │   ├── neon.xml
│   │   ├── nonce.xml
│   │   ├── opts.xml
│   │   ├── param.xml
│   │   ├── proxy.xml
│   │   ├── redir.xml
│   │   ├── req.xml
│   │   ├── reqbody.xml
│   │   ├── reqflags.xml
│   │   ├── reqhdr.xml
│   │   ├── reqtgt.xml
│   │   ├── resolve.xml
│   │   ├── respbody.xml
│   │   ├── resphdr.xml
│   │   ├── sess.xml
│   │   ├── sessflags.xml
│   │   ├── shave.xml
│   │   ├── sockssl.xml
│   │   ├── sslca.xml
│   │   ├── sslcert.xml
│   │   ├── sslcert2.xml
│   │   ├── sslcertio.xml
│   │   ├── sslctx.xml
│   │   ├── ssldname.xml
│   │   ├── sslproto.xml
│   │   ├── ssltrust.xml
│   │   ├── sslvers.xml
│   │   ├── sslvfy.xml
│   │   ├── status.xml
│   │   ├── tok.xml
│   │   ├── vers.xml
│   │   ├── xml.xml
│   │   └── xmlreq.xml
│   ├── refentry.xml
│   ├── security.xml
│   ├── ssl.xml
│   ├── using.xml
│   └── xml.xml
├── macros/
│   ├── .gitignore
│   ├── ChangeLog
│   ├── ld-version-script.m4
│   ├── neon-test.m4
│   ├── neon-xml-parser.m4
│   ├── neon.m4
│   └── socklen-arg-type.m4
├── neon-config.in
├── neon.mak
├── neon.pc.in
├── po/
│   ├── cs.po
│   ├── de.po
│   ├── fr.po
│   ├── ja.po
│   ├── ka.po
│   ├── neon.pot
│   ├── nn.po
│   ├── pl.po
│   ├── ru.po
│   ├── tr.po
│   └── zh_CN.po
├── src/
│   ├── .gitignore
│   ├── COPYING.LIB
│   ├── ChangeLog
│   ├── Makefile.in
│   ├── README
│   ├── memleak.h
│   ├── mktable.c
│   ├── ne_207.c
│   ├── ne_207.h
│   ├── ne_acl.h
│   ├── ne_acl3744.c
│   ├── ne_acl3744.h
│   ├── ne_alloc.c
│   ├── ne_alloc.h
│   ├── ne_auth.c
│   ├── ne_auth.h
│   ├── ne_basic.c
│   ├── ne_basic.h
│   ├── ne_compress.c
│   ├── ne_compress.h
│   ├── ne_dates.c
│   ├── ne_dates.h
│   ├── ne_defs.h
│   ├── ne_gnutls.c
│   ├── ne_i18n.c
│   ├── ne_i18n.h
│   ├── ne_internal.h
│   ├── ne_locks.c
│   ├── ne_locks.h
│   ├── ne_md5.c
│   ├── ne_md5.h
│   ├── ne_oldacl.c
│   ├── ne_openssl.c
│   ├── ne_pkcs11.c
│   ├── ne_pkcs11.h
│   ├── ne_private.h
│   ├── ne_privssl.h
│   ├── ne_props.c
│   ├── ne_props.h
│   ├── ne_redirect.c
│   ├── ne_redirect.h
│   ├── ne_request.c
│   ├── ne_request.h
│   ├── ne_session.c
│   ├── ne_session.h
│   ├── ne_socket.c
│   ├── ne_socket.h
│   ├── ne_socks.c
│   ├── ne_ssl.c
│   ├── ne_ssl.h
│   ├── ne_sspi.c
│   ├── ne_sspi.h
│   ├── ne_string.c
│   ├── ne_string.h
│   ├── ne_stubssl.c
│   ├── ne_uri.c
│   ├── ne_uri.h
│   ├── ne_utils.c
│   ├── ne_utils.h
│   ├── ne_xml.c
│   ├── ne_xml.h
│   ├── ne_xmlreq.c
│   ├── ne_xmlreq.h
│   ├── neon.def
│   └── neon.vers
└── test/
    ├── .gdbinit
    ├── .gitignore
    ├── COPYING
    ├── ChangeLog
    ├── Makefile.in
    ├── README
    ├── STATUS
    ├── acl3744.c
    ├── auth.c
    ├── basic.c
    ├── checksyms.sh
    ├── common/
    │   ├── ChangeLog
    │   ├── README
    │   ├── child.c
    │   ├── child.h
    │   ├── run.sh
    │   ├── tests.c
    │   └── tests.h
    ├── compress.c
    ├── expired.pem
    ├── htdocs/
    │   └── plain
    ├── largefile.c
    ├── lock.c
    ├── makekeys.sh
    ├── neon.prio
    ├── notvalid.pem
    ├── nulca.pem
    ├── nulcn.pem
    ├── nulsan.pem
    ├── nulsrv.key
    ├── oldacl.c
    ├── openssl.conf
    ├── props.c
    ├── redirect.c
    ├── request.c
    ├── resolve.c
    ├── run-tests.sh
    ├── run.sh
    ├── session.c
    ├── skeleton.c
    ├── socket.c
    ├── ssl.c
    ├── string-tests.c
    ├── stubs.c
    ├── symvers.txt
    ├── twooh7.c
    ├── uri-tests.c
    ├── util-socks.c
    ├── util-tests.c
    ├── utils.c
    ├── utils.h
    ├── xml.c
    └── xmlreq.c
Download .txt
SYMBOL INDEX (1465 symbols across 78 files)

FILE: src/mktable.c
  function gen_clean (line 29) | static unsigned char gen_clean(unsigned char ch)
  function gen_lower (line 34) | static unsigned char gen_lower(unsigned char ch)
  function gen_upper (line 39) | static unsigned char gen_upper(unsigned char ch)
  function gen_quote (line 44) | static unsigned char gen_quote(unsigned char ch)
  function valid_b64 (line 61) | static unsigned char valid_b64(unsigned char ch)
  function decode_b64 (line 66) | static unsigned char decode_b64(unsigned char ch)
  function safe_username (line 79) | static unsigned char safe_username(unsigned char ch)
  function gen_extparam (line 89) | static unsigned char gen_extparam(unsigned char ch)
  function gen_status_line (line 109) | static unsigned char gen_status_line(unsigned char ch)
  function gen_token (line 134) | static unsigned char gen_token(unsigned char ch)
  function fail (line 170) | static void fail(const char *err, const char *arg)
  function main (line 176) | int main(int argc, const char **argv)

FILE: src/ne_207.c
  type ne_207_parser_s (line 41) | struct ne_207_parser_s {
  type ne_xml_idmap (line 74) | struct ne_xml_idmap
  function ne_207_set_response_handlers (line 85) | void ne_207_set_response_handlers(ne_207_parser *p,
  function ne_207_set_propstat_handlers (line 93) | void ne_207_set_propstat_handlers(ne_207_parser *p,
  function can_handle (line 112) | static int can_handle(int parent, int child)
  function cdata_207 (line 124) | static int cdata_207(void *userdata, int state, const char *buf, size_t ...
  function start_element (line 145) | static int start_element(void *userdata, int parent,
  function end_element (line 179) | static int
  function ne_207_parser (line 270) | ne_207_parser *ne_207_create(ne_xml_parser *parser, const ne_uri *base,
  function ne_207_set_flags (line 287) | void ne_207_set_flags(ne_207_parser *p, unsigned int flags)
  function ne_207_destroy (line 292) | void ne_207_destroy(ne_207_parser *p)
  function ne_accept_207 (line 300) | int ne_accept_207(void *userdata, ne_request *req, const ne_status *status)
  type context (line 313) | struct context {
  type context (line 321) | struct context
  function handle_error (line 330) | static void handle_error(struct context *ctx, const ne_status *status,
  function end_response (line 346) | static void end_response(void *userdata, void *response,
  function end_propstat (line 353) | static void
  function ne_simple_request (line 362) | int ne_simple_request(ne_session *sess, ne_request *req)

FILE: src/ne_207.h
  type ne_207_parser (line 66) | typedef struct ne_207_parser_s ne_207_parser;

FILE: src/ne_acl.h
  function NE_BEGIN_DECLS (line 31) | NE_BEGIN_DECLS

FILE: src/ne_acl3744.c
  function ne_buffer (line 50) | static ne_buffer *acl_body(const ne_acl_entry *right, int count)
  function ne_acl3744_set (line 156) | int ne_acl3744_set(ne_session *sess, const char *uri,

FILE: src/ne_acl3744.h
  type ne_acl_target (line 43) | enum ne_acl_target {
  type ne_acl_optype (line 52) | enum ne_acl_optype {
  type ne_acl_entry (line 58) | typedef struct {

FILE: src/ne_alloc.c
  function ne_oom_callback (line 38) | void ne_oom_callback(ne_oom_callback_fn callback)
  function ne_free (line 81) | void ne_free(void *ptr)
  type block (line 114) | struct block {
  function ne_alloc_dump (line 122) | void ne_alloc_dump(FILE *f)
  type block (line 134) | struct block
  type block (line 168) | struct block
  function ne_free_ml (line 204) | void ne_free_ml(void *ptr)

FILE: src/ne_auth.c
  type hashalg (line 70) | struct hashalg {
  type auth_qop (line 87) | typedef enum {
  type auth_handler (line 94) | struct auth_handler {
  type auth_challenge (line 107) | struct auth_challenge {
  type auth_class (line 119) | struct auth_class {
  type auth_session (line 144) | typedef struct {
  type auth_request (line 205) | struct auth_request {
  type auth_protocol (line 226) | struct auth_protocol {
  function free_domains (line 264) | static void free_domains(auth_session *sess)
  function clean_session (line 273) | static void clean_session(auth_session *sess)
  function get_credentials (line 317) | static int get_credentials(auth_session *sess, ne_buffer **errmsg, int a...
  function basic_challenge (line 371) | static int basic_challenge(auth_session *sess, int attempt,
  type auth_request (line 421) | struct auth_request
  type auth_request (line 432) | struct auth_request
  function get_gss_name (line 442) | static void get_gss_name(gss_name_t *server, const char *hostname)
  function make_gss_error (line 463) | static void make_gss_error(ne_buffer *buf, int *flag,
  function continue_negotiate (line 484) | static int continue_negotiate(auth_session *sess, const char *token,
  function negotiate_challenge (line 555) | static int negotiate_challenge(auth_session *sess, int attempt,
  function verify_negotiate_response (line 573) | static int verify_negotiate_response(struct auth_request *req, auth_sess...
  type auth_request (line 616) | struct auth_request
  function continue_sspi (line 624) | static int continue_sspi(auth_session *sess, int ntlm, const char *hdr)
  function sspi_challenge (line 652) | static int sspi_challenge(auth_session *sess, int attempt,
  function verify_sspi (line 661) | static int verify_sspi(struct auth_request *req, auth_session *sess,
  function parse_domain (line 688) | static int parse_domain(auth_session *sess, const char *domain)
  type auth_request (line 746) | struct auth_request
  function parse_type2_message (line 762) | static int parse_type2_message(tSmbNtlmAuthChallenge *challenge, const c...
  function ntlm_challenge (line 777) | static int ntlm_challenge(auth_session *sess, int attempt,
  function unsafe_username (line 869) | static int unsafe_username(const char *username)
  type auth_challenge (line 883) | struct auth_challenge
  function digest_challenge (line 929) | static int digest_challenge(auth_session *sess, int attempt,
  function inside_domain (line 1046) | static int inside_domain(auth_session *sess, const char *target)
  type auth_request (line 1074) | struct auth_request
  function tokenize (line 1164) | static int tokenize(char **hdr, char **key, char **value, char *sep,
  function verify_digest_response (line 1230) | static int verify_digest_response(struct auth_request *req, auth_session...
  type auth_protocol (line 1339) | struct auth_protocol
  function insert_challenge (line 1370) | static void insert_challenge(struct auth_challenge **list,
  function challenge_error (line 1389) | static void challenge_error(ne_buffer **errbuf, const char *fmt, ...)
  function auth_challenge (line 1412) | static int auth_challenge(auth_session *sess, int attempt, const char *uri,
  function ah_create (line 1565) | static void ah_create(ne_request *req, void *session, const char *method,
  function ah_pre_send (line 1594) | static void ah_pre_send(ne_request *r, void *cookie, ne_buffer *request)
  function ah_post_send (line 1615) | static int ah_post_send(ne_request *req, void *cookie, const ne_status *...
  function ah_destroy (line 1696) | static void ah_destroy(ne_request *req, void *session)
  function free_auth (line 1706) | static void free_auth(void *cookie)
  function auth_register (line 1731) | static void auth_register(ne_session *sess, int isproxy, unsigned protom...
  function ne_set_server_auth (line 1836) | void ne_set_server_auth(ne_session *sess, ne_auth_creds creds, void *use...
  function ne_set_proxy_auth (line 1842) | void ne_set_proxy_auth(ne_session *sess, ne_auth_creds creds, void *user...
  function ne_add_server_auth (line 1848) | void ne_add_server_auth(ne_session *sess, unsigned protocol,
  function ne_add_proxy_auth (line 1855) | void ne_add_proxy_auth(ne_session *sess, unsigned protocol,
  function ne_add_auth (line 1862) | void ne_add_auth(ne_session *sess, unsigned protocol,
  function ne_forget_auth (line 1871) | void ne_forget_auth(ne_session *sess)

FILE: src/ne_basic.c
  function ne_getmodtime (line 53) | int ne_getmodtime(ne_session *sess, const char *path, time_t *modtime)
  type struct_stat (line 81) | typedef struct stat64 struct_stat;
  type struct_stat (line 84) | typedef struct stat struct_stat;
  function ne_put (line 88) | int ne_put(ne_session *sess, const char *path, int fd)
  function ne_putbuf (line 122) | int ne_putbuf(ne_session *sess, const char *path,
  function ne_getbuf (line 145) | int ne_getbuf(ne_session *sess, const char *path,
  function dispatch_to_fd (line 177) | static int dispatch_to_fd(ne_request *req, int fd, const char *range)
  function get_range_common (line 218) | static int get_range_common(ne_session *sess, const char *path,
  function ne_get_range (line 254) | int ne_get_range(ne_session *sess, const char *path,
  function ne_get (line 273) | int ne_get(ne_session *sess, const char *path, int fd)
  function ne_post (line 291) | int ne_post(ne_session *sess, const char *path, int fd, const char *buffer)
  function ne_get_content_type (line 311) | int ne_get_content_type(ne_request *req, ne_content_type *ct)
  type options_map (line 357) | struct options_map {
  function parse_dav_header (line 379) | static void parse_dav_header(const char *value, unsigned int *caps)
  function ne_options2 (line 403) | int ne_options2(ne_session *sess, const char *path, unsigned int *caps)
  function ne_options (line 420) | int ne_options(ne_session *sess, const char *path,
  function ne_add_depth_header (line 439) | void ne_add_depth_header(ne_request *req, int depth)
  function copy_or_move (line 456) | static int copy_or_move(ne_session *sess, int is_move, int overwrite,
  function ne_copy (line 493) | int ne_copy(ne_session *sess, int overwrite, int depth,
  function ne_move (line 499) | int ne_move(ne_session *sess, int overwrite,
  function ne_delete (line 505) | int ne_delete(ne_session *sess, const char *path)
  function ne_mkcol (line 518) | int ne_mkcol(ne_session *sess, const char *path)

FILE: src/ne_basic.h
  type ne_content_type (line 92) | typedef struct {
  type ne_server_capabilities (line 105) | typedef struct {
  type ne_content_range (line 143) | typedef struct {

FILE: src/ne_compress.c
  type ne_decompress_s (line 46) | struct ne_decompress_s {
  function parse_header (line 107) | static int parse_header(ne_decompress *ctx)
  function process_footer (line 140) | static int process_footer(ne_decompress *ctx,
  function set_zlib_error (line 170) | static void set_zlib_error(ne_decompress *ctx, const char *msg, int code)
  function do_inflate (line 189) | static int do_inflate(ne_decompress *ctx, const char *buf, size_t len)
  function gz_reader (line 239) | static int gz_reader(void *ud, const char *buf, size_t len)
  function gz_pre_send (line 377) | static void gz_pre_send(ne_request *r, void *ud, ne_buffer *req)
  function gz_acceptor (line 394) | static int gz_acceptor(void *userdata, ne_request *req, const ne_status ...
  function ne_decompress (line 404) | ne_decompress *ne_decompress_reader(ne_request *req, ne_accept_response ...
  function ne_decompress_destroy (line 424) | void ne_decompress_destroy(ne_decompress *ctx)
  function ne_decompress (line 437) | ne_decompress *ne_decompress_reader(ne_request *req, ne_accept_response ...
  function ne_decompress_destroy (line 445) | void ne_decompress_destroy(ne_decompress *dc)

FILE: src/ne_compress.h
  type ne_decompress_s (line 29) | struct ne_decompress_s

FILE: src/ne_dates.c
  function time_t (line 82) | time_t gmt_to_local_win32(void)
  type tm (line 102) | struct tm
  type tm (line 103) | struct tm
  function time_t (line 127) | time_t ne_iso8601_parse(const char *date)
  function time_t (line 170) | time_t ne_rfc1123_parse(const char *date)
  function time_t (line 196) | time_t ne_rfc1036_parse(const char *date)
  function time_t (line 231) | time_t ne_asctime_parse(const char *date)
  function time_t (line 256) | time_t ne_httpdate_parse(const char *date)

FILE: src/ne_defs.h
  type __int64 (line 39) | typedef __int64 off64_t;
  type off64_t (line 41) | typedef off64_t ne_off_t;
  type off_t (line 43) | typedef off_t ne_off_t;

FILE: src/ne_gnutls.c
  type ne_ssl_dname_s (line 68) | struct ne_ssl_dname_s {
  type ne_ssl_certificate_s (line 77) | struct ne_ssl_certificate_s {
  type ne_ssl_client_cert_s (line 84) | struct ne_ssl_client_cert_s {
  function oid_find_highest_index (line 103) | static int oid_find_highest_index(gnutls_x509_crt_t cert, int subject, c...
  function convert_dirstring (line 125) | static void convert_dirstring(ne_buffer *buf, const char *charset,
  function append_dirstring (line 163) | static void append_dirstring(ne_buffer *buf, gnutls_datum_t *data, unsig...
  function append_rdn (line 250) | static void append_rdn(ne_buffer *buf, gnutls_x509_crt_t x5, int subject...
  function ne_ssl_dname_cmp (line 299) | int ne_ssl_dname_cmp(const ne_ssl_dname *dn1, const ne_ssl_dname *dn2)
  function ne_ssl_clicert_free (line 334) | void ne_ssl_clicert_free(ne_ssl_client_cert *cc)
  function ne_ssl_cert_validity_time (line 347) | void ne_ssl_cert_validity_time(const ne_ssl_certificate *cert,
  function check_identity (line 359) | static int check_identity(const ne_ssl_certificate *server_cert,
  function ne_ssl_certificate (line 441) | static ne_ssl_certificate *populate_cert(ne_ssl_certificate *cert,
  function gnutls_x509_crt_t (line 461) | static gnutls_x509_crt_t x509_crt_copy(gnutls_x509_crt_t src)
  function ne_ssl_client_cert (line 494) | ne_ssl_client_cert *ne_ssl_clicert_copy(const ne_ssl_client_cert *cc)
  function provide_client_cert (line 532) | static int provide_client_cert(gnutls_session_t session,
  function ne_ssl_context (line 668) | ne_ssl_context *ne_ssl_context_create(int flags)
  function ne_ssl_context_keypair (line 685) | int ne_ssl_context_keypair(ne_ssl_context *ctx,
  function ne_ssl_context_set_verify (line 693) | int ne_ssl_context_set_verify(ne_ssl_context *ctx, int required,
  function ne_ssl_context_set_flag (line 707) | void ne_ssl_context_set_flag(ne_ssl_context *ctx, int flag, int value)
  function ne_ssl_context_get_flag (line 711) | int ne_ssl_context_get_flag(ne_ssl_context *ctx, int flag)
  function ne_ssl_context_set_versions (line 716) | int ne_ssl_context_set_versions(ne_ssl_context *ctx, enum ne_ssl_protoco...
  function ne_ssl_context_destroy (line 762) | void ne_ssl_context_destroy(ne_ssl_context *ctx)
  function gnutls_x509_crt_t (line 783) | static gnutls_x509_crt_t find_issuer(gnutls_x509_crt_t *ca_list,
  function ne_ssl_certificate (line 799) | ne_ssl_certificate *ne__ssl_make_chain(gnutls_session_t sock,
  function map_verify_failures (line 884) | static int map_verify_failures(unsigned int *status)
  function check_chain_expiry (line 931) | static int check_chain_expiry(const ne_ssl_certificate *chain)
  function ne_ssl_check_certificate (line 954) | int ne_ssl_check_certificate(ne_ssl_context *ctx, ne_socket *sock,
  function ne_ssl_dname (line 1014) | const ne_ssl_dname *ne_ssl_cert_issuer(const ne_ssl_certificate *cert)
  function ne_ssl_dname (line 1019) | const ne_ssl_dname *ne_ssl_cert_subject(const ne_ssl_certificate *cert)
  function ne_ssl_certificate (line 1024) | const ne_ssl_certificate *ne_ssl_cert_signedby(const ne_ssl_certificate ...
  function ne_ssl_context_trustcert (line 1034) | void ne_ssl_context_trustcert(ne_ssl_context *ctx, const ne_ssl_certific...
  function ne_ssl_context_set_clicert (line 1040) | void ne_ssl_context_set_clicert(ne_ssl_context *ctx, const ne_ssl_client...
  function ne_ssl_context_trustdefca (line 1046) | void ne_ssl_context_trustdefca(ne_ssl_context *ctx)
  function read_to_datum (line 1060) | static int read_to_datum(const char *filename, gnutls_datum_t *datum)
  function pkcs12_parse (line 1092) | static int pkcs12_parse(gnutls_pkcs12_t p12, gnutls_x509_privkey_t *pkey,
  function ne_ssl_client_cert (line 1177) | ne_ssl_client_cert *ne_ssl_clicert_read(const char *filename)
  function ne_ssl_client_cert (line 1192) | ne_ssl_client_cert *ne_ssl_clicert_import(const unsigned char *buffer, s...
  function ne_ssl_client_cert (line 1241) | ne_ssl_client_cert *ne_ssl_clicert_fromuri(const char *uri,
  function ne_ssl_client_cert (line 1249) | ne_ssl_client_cert *ne__ssl_clicert_exkey_import(const unsigned char *de...
  function ne_ssl_clicert_encrypted (line 1277) | int ne_ssl_clicert_encrypted(const ne_ssl_client_cert *cc)
  function ne_ssl_clicert_decrypt (line 1282) | int ne_ssl_clicert_decrypt(ne_ssl_client_cert *cc, const char *password)
  function ne_ssl_certificate (line 1310) | const ne_ssl_certificate *ne_ssl_clicert_owner(const ne_ssl_client_cert ...
  function ne_ssl_certificate (line 1320) | ne_ssl_certificate *ne_ssl_cert_read(const char *filename)
  function ne_ssl_cert_write (line 1342) | int ne_ssl_cert_write(const ne_ssl_certificate *cert, const char *filename)
  function ne_ssl_cert_free (line 1368) | void ne_ssl_cert_free(ne_ssl_certificate *cert)
  function ne_ssl_cert_cmp (line 1376) | int ne_ssl_cert_cmp(const ne_ssl_certificate *c1, const ne_ssl_certifica...
  function ne_ssl_certificate (line 1394) | ne_ssl_certificate *ne_ssl_cert_import(const char *data)
  function gnutls_digest_algorithm_t (line 1446) | static gnutls_digest_algorithm_t hash_to_alg(unsigned int flags)
  function ne_ssl_cert_digest (line 1482) | int ne_ssl_cert_digest(const ne_ssl_certificate *cert, char *digest)
  function ne__ssl_init (line 1502) | int ne__ssl_init(void)
  function ne__ssl_exit (line 1513) | void ne__ssl_exit(void)
  function ne_mknonce (line 1553) | int ne_mknonce(unsigned char *nonce, size_t len, unsigned int flags)

FILE: src/ne_i18n.c
  function ne_i18n_init (line 30) | void ne_i18n_init(const char *encoding)

FILE: src/ne_locks.c
  type lock_list (line 58) | struct lock_list {
  type ne_lock_store_s (line 63) | struct ne_lock_store_s {
  type lh_req_cookie (line 68) | struct lh_req_cookie {
  type discover_ctx (line 74) | struct discover_ctx {
  type lock_ctx (line 82) | struct lock_ctx {
  type ne_xml_idmap (line 110) | struct ne_xml_idmap
  function lk_create (line 126) | static void lk_create(ne_request *req, void *session,
  function lk_pre_send (line 135) | static void lk_pre_send(ne_request *r, void *userdata, ne_buffer *req)
  function insert_lock (line 171) | static void insert_lock(struct lock_list **list, struct ne_lock *lock)
  function free_list (line 183) | static void free_list(struct lock_list *list, int destroy)
  function lk_destroy (line 196) | static void lk_destroy(ne_request *req, void *userdata)
  function ne_lockstore_destroy (line 203) | void ne_lockstore_destroy(ne_lock_store *store)
  function ne_lock_store (line 209) | ne_lock_store *ne_lockstore_create(void)
  type ne_lock (line 216) | struct ne_lock
  type ne_lock (line 222) | struct ne_lock
  function ne_lockstore_register (line 228) | void ne_lockstore_register(ne_lock_store *store, ne_session *sess)
  function submit_lock (line 237) | static void submit_lock(struct lh_req_cookie *lrc, struct ne_lock *lock)
  type ne_lock (line 250) | struct ne_lock
  type lock_list (line 253) | struct lock_list
  function ne_lock_using_parent (line 264) | void ne_lock_using_parent(ne_request *req, const char *path)
  function ne_lock_using_resource (line 302) | void ne_lock_using_resource(ne_request *req, const char *uri, int depth)
  function ne_lockstore_add (line 344) | void ne_lockstore_add(ne_lock_store *store, struct ne_lock *lock)
  function ne_lockstore_remove (line 349) | void ne_lockstore_remove(ne_lock_store *store, struct ne_lock *lock)
  type ne_lock (line 372) | struct ne_lock
  type ne_lock (line 372) | struct ne_lock
  type ne_lock (line 374) | struct ne_lock
  type ne_lock (line 387) | struct ne_lock
  type ne_lock (line 389) | struct ne_lock
  function ne_lock_free (line 397) | void ne_lock_free(struct ne_lock *lock)
  function ne_lock_destroy (line 410) | void ne_lock_destroy(struct ne_lock *lock)
  function ne_unlock (line 416) | int ne_unlock(ne_session *sess, const struct ne_lock *lock)
  function parse_depth (line 440) | static int parse_depth(const char *depth)
  function parse_timeout (line 451) | static long parse_timeout(const char *timeout)
  function discover_results (line 476) | static void discover_results(void *userdata, const ne_uri *uri,
  function end_element_common (line 498) | static int
  function end_element_ldisc (line 543) | static int end_element_ldisc(void *userdata, int state,
  function can_accept (line 552) | static inline int can_accept(int parent, int id)
  function ld_startelm (line 570) | static int ld_startelm(void *userdata, int parent,
  function common_cdata (line 588) | static int common_cdata(ne_buffer *buf, int state,
  function ld_cdata (line 604) | static int ld_cdata(void *userdata, int state,
  function lk_cdata (line 612) | static int lk_cdata(void *userdata, int state,
  function lk_startelm (line 620) | static int lk_startelm(void *userdata, int parent,
  function lk_endelm (line 668) | static int lk_endelm(void *userdata, int state,
  type ne_lock (line 691) | struct ne_lock
  function ld_destroy (line 699) | static void ld_destroy(void *userdata, void *private)
  function ne_lock_discover (line 707) | int ne_lock_discover(ne_session *sess, const char *uri,
  function add_timeout_header (line 732) | static void add_timeout_header(ne_request *req, long timeout)
  function ne_lock (line 743) | int ne_lock(ne_session *sess, struct ne_lock *lock)
  function ne_lock_refresh (line 830) | int ne_lock_refresh(ne_session *sess, struct ne_lock *lock)

FILE: src/ne_locks.h
  type ne_lock_type (line 37) | enum ne_lock_type {
  type ne_lock (line 42) | struct ne_lock {
  type ne_lock (line 61) | struct ne_lock
  type ne_lock (line 68) | struct ne_lock
  type ne_lock (line 68) | struct ne_lock
  type ne_lock (line 72) | struct ne_lock
  type ne_lock (line 75) | struct ne_lock
  type ne_lock_store (line 79) | typedef struct ne_lock_store_s ne_lock_store;
  type ne_lock (line 98) | struct ne_lock
  type ne_lock (line 102) | struct ne_lock
  type ne_lock (line 106) | struct ne_lock
  type ne_lock (line 113) | struct ne_lock
  type ne_lock (line 117) | struct ne_lock
  type ne_lock (line 125) | struct ne_lock
  type ne_lock (line 128) | struct ne_lock
  type ne_lock (line 135) | struct ne_lock
  type ne_lock (line 145) | struct ne_lock

FILE: src/ne_md5.c
  type md5_uint32 (line 48) | typedef unsigned int md5_uint32;
  type md5_uint32 (line 50) | typedef unsigned long md5_uint32;
  type md5_ctx (line 71) | struct md5_ctx
  function md5_init_ctx (line 97) | static void
  type ne_md5_ctx (line 109) | struct ne_md5_ctx
  type md5_ctx (line 112) | struct md5_ctx
  function ne_md5_reset_ctx (line 117) | extern void
  type ne_md5_ctx (line 123) | struct ne_md5_ctx
  type ne_md5_ctx (line 124) | struct ne_md5_ctx
  function ne_md5_destroy_ctx (line 129) | void
  type md5_ctx (line 141) | struct md5_ctx
  function md5_process_bytes (line 170) | void
  function md5_process_block (line 225) | void
  type ne_md5_ctx (line 382) | struct ne_md5_ctx
  type ne_md5_ctx (line 384) | struct ne_md5_ctx
  function ne_md5_process_block (line 400) | void ne_md5_process_block(const void *buffer, size_t len,
  function ne_md5_process_bytes (line 406) | void ne_md5_process_bytes(const void *buffer, size_t len,
  type ne_md5_ctx (line 412) | struct ne_md5_ctx
  type ne_md5_ctx (line 419) | struct ne_md5_ctx
  type ne_md5_ctx (line 419) | struct ne_md5_ctx
  type ne_md5_ctx (line 421) | struct ne_md5_ctx
  function ne_md5_reset_ctx (line 437) | void ne_md5_reset_ctx(struct ne_md5_ctx *ctx)
  function ne_md5_destroy_ctx (line 442) | void ne_md5_destroy_ctx(struct ne_md5_ctx *ctx)
  type ne_md5_ctx (line 449) | struct ne_md5_ctx
  type ne_md5_ctx (line 451) | struct ne_md5_ctx
  function ne_md5_process_block (line 461) | void ne_md5_process_block(const void *buffer, size_t len,
  function ne_md5_process_bytes (line 467) | void ne_md5_process_bytes(const void *buffer, size_t len,
  type ne_md5_ctx (line 473) | struct ne_md5_ctx
  type ne_md5_ctx (line 480) | struct ne_md5_ctx
  type ne_md5_ctx (line 480) | struct ne_md5_ctx
  function ne_md5_reset_ctx (line 485) | void ne_md5_reset_ctx(struct ne_md5_ctx *ctx)
  function ne_md5_destroy_ctx (line 490) | void ne_md5_destroy_ctx(struct ne_md5_ctx *ctx)
  type md5_ctx (line 502) | struct md5_ctx
  function md5_stream (line 527) | int
  function ne_md5_to_ascii (line 582) | void ne_md5_to_ascii(const unsigned char md5_buf[16], char *buffer)
  function ne_ascii_to_md5 (line 594) | void ne_ascii_to_md5(const char *buffer, unsigned char md5_buf[16])
  type ne_md5_ctx (line 603) | struct ne_md5_ctx

FILE: src/ne_md5.h
  type ne_md5_ctx (line 40) | struct ne_md5_ctx
  type ne_md5_ctx (line 47) | struct ne_md5_ctx
  type ne_md5_ctx (line 54) | struct ne_md5_ctx
  type ne_md5_ctx (line 63) | struct ne_md5_ctx
  type ne_md5_ctx (line 75) | struct ne_md5_ctx
  type ne_md5_ctx (line 78) | struct ne_md5_ctx
  type ne_md5_ctx (line 78) | struct ne_md5_ctx
  type ne_md5_ctx (line 81) | struct ne_md5_ctx
  type ne_md5_ctx (line 84) | struct ne_md5_ctx
  type ne_md5_ctx (line 95) | struct ne_md5_ctx

FILE: src/ne_oldacl.c
  function ne_buffer (line 48) | static ne_buffer *acl_body(const ne_acl_entry *right, int count)
  function ne_acl_set (line 109) | int ne_acl_set(ne_session *sess, const char *uri,

FILE: src/ne_openssl.c
  type ne_d2i_uchar (line 69) | typedef unsigned char ne_d2i_uchar;
  type ne_d2i_uchar (line 71) | typedef const unsigned char ne_d2i_uchar;
  type ne_ssl_dname_s (line 102) | struct ne_ssl_dname_s {
  type ne_ssl_certificate_s (line 106) | struct ne_ssl_certificate_s {
  type ne_ssl_client_cert_s (line 113) | struct ne_ssl_client_cert_s {
  function append_dirstring (line 130) | static int append_dirstring(ne_buffer *buf, const ASN1_STRING *str)
  function ne_ssl_dname_cmp (line 214) | int ne_ssl_dname_cmp(const ne_ssl_dname *dn1, const ne_ssl_dname *dn2)
  function ne_ssl_clicert_free (line 219) | void ne_ssl_clicert_free(ne_ssl_client_cert *cc)
  function time_t (line 230) | static time_t asn1time_to_timet(const ASN1_TIME *atm)
  function ne_ssl_cert_validity_time (line 267) | void ne_ssl_cert_validity_time(const ne_ssl_certificate *cert,
  function check_identity (line 279) | static int check_identity(const ne_ssl_certificate *server_cert,
  function ne_ssl_certificate (line 376) | static ne_ssl_certificate *populate_cert(ne_ssl_certificate *cert, X509 ...
  function verify_callback (line 391) | static int verify_callback(int ok, X509_STORE_CTX *ctx)
  function ne_ssl_certificate (line 445) | ne_ssl_certificate *ne__ssl_make_chain(STACK_OF(X509) *chain)
  function ne_ssl_check_certificate (line 473) | int ne_ssl_check_certificate(ne_ssl_context *ctx, ne_socket *sock,
  function ne_ssl_client_cert (line 511) | ne_ssl_client_cert *ne_ssl_clicert_copy(const ne_ssl_client_cert *cc)
  function provide_client_cert (line 529) | static int provide_client_cert(SSL *ssl, X509 **cert, EVP_PKEY **pkey)
  function new_ssl_session (line 577) | static int new_ssl_session(SSL *ssl, SSL_SESSION *sslsess)
  function remove_ssl_session (line 592) | static void remove_ssl_session(SSL_CTX *sslctx, SSL_SESSION *sess)
  function ne_ssl_context (line 604) | ne_ssl_context *ne_ssl_context_create(int mode)
  function ne_ssl_context_set_flag (line 639) | void ne_ssl_context_set_flag(ne_ssl_context *ctx, int flag, int value)
  function ne_ssl_context_get_flag (line 643) | int ne_ssl_context_get_flag(ne_ssl_context *ctx, int flag)
  function ne_ssl_context_keypair (line 648) | int ne_ssl_context_keypair(ne_ssl_context *ctx, const char *cert,
  function ne_ssl_context_set_verify (line 661) | int ne_ssl_context_set_verify(ne_ssl_context *ctx,
  function proto_to_native (line 683) | static int proto_to_native(enum ne_ssl_protocol proto)
  function ne_ssl_context_set_versions (line 702) | int ne_ssl_context_set_versions(ne_ssl_context *ctx, enum ne_ssl_protoco...
  function ne_ssl_context_destroy (line 723) | void ne_ssl_context_destroy(ne_ssl_context *ctx)
  function ne_ssl_dname (line 733) | const ne_ssl_dname *ne_ssl_cert_issuer(const ne_ssl_certificate *cert)
  function ne_ssl_dname (line 738) | const ne_ssl_dname *ne_ssl_cert_subject(const ne_ssl_certificate *cert)
  function ne_ssl_certificate (line 743) | const ne_ssl_certificate *ne_ssl_cert_signedby(const ne_ssl_certificate ...
  function ne_ssl_context_trustcert (line 753) | void ne_ssl_context_trustcert(ne_ssl_context *ctx, const ne_ssl_certific...
  function ne_ssl_context_set_clicert (line 760) | void ne_ssl_context_set_clicert(ne_ssl_context *ctx, const ne_ssl_client...
  function ne_ssl_context_trustdefca (line 766) | void ne_ssl_context_trustdefca(ne_ssl_context *ctx)
  function ne_ssl_client_cert (line 813) | static ne_ssl_client_cert *parse_client_cert(PKCS12 *p12)
  function ne_ssl_client_cert (line 864) | ne_ssl_client_cert *ne_ssl_clicert_import(const unsigned char *buffer,
  function ne_ssl_client_cert (line 876) | ne_ssl_client_cert *ne_ssl_clicert_read(const char *filename)
  function ui_reader (line 894) | static int ui_reader(UI *ui, UI_STRING *uis)
  function store_iterate (line 917) | static int store_iterate(ne_ssl_client_cert *cc, const char *password)
  function ne_ssl_client_cert (line 1019) | ne_ssl_client_cert *ne_ssl_clicert_fromuri(const char *uri,
  function ne_ssl_client_cert (line 1038) | static ne_ssl_client_cert *clicert_from_keypair(X509 *cert, EVP_PKEY *key)
  function ne_ssl_client_cert (line 1048) | ne_ssl_client_cert *ne__ssl_clicert_exkey_import(const unsigned char *der,
  function ne_ssl_clicert_encrypted (line 1086) | int ne_ssl_clicert_encrypted(const ne_ssl_client_cert *cc)
  function pkcs12_decrypt (line 1091) | static int pkcs12_decrypt(ne_ssl_client_cert *cc, const char *password)
  function ne_ssl_clicert_decrypt (line 1117) | int ne_ssl_clicert_decrypt(ne_ssl_client_cert *cc, const char *password)
  function ne_ssl_certificate (line 1123) | const ne_ssl_certificate *ne_ssl_clicert_owner(const ne_ssl_client_cert ...
  function ne_ssl_certificate (line 1133) | ne_ssl_certificate *ne_ssl_cert_read(const char *filename)
  function ne_ssl_cert_write (line 1154) | int ne_ssl_cert_write(const ne_ssl_certificate *cert, const char *filename)
  function free_cert (line 1172) | static void free_cert(ne_ssl_certificate *cert)
  function ne_ssl_cert_free (line 1181) | void ne_ssl_cert_free(ne_ssl_certificate *cert)
  function ne_ssl_cert_cmp (line 1187) | int ne_ssl_cert_cmp(const ne_ssl_certificate *c1, const ne_ssl_certifica...
  function ne_ssl_certificate (line 1195) | ne_ssl_certificate *ne_ssl_cert_import(const char *data)
  function EVP_MD (line 1234) | static const EVP_MD *hash_to_md(unsigned int flags)
  function ne_ssl_cert_digest (line 1271) | int ne_ssl_cert_digest(const ne_ssl_certificate *cert, char *digest)
  function ne_mknonce (line 1317) | int ne_mknonce(unsigned char *nonce, size_t len, unsigned int flags)
  function thread_id_neon (line 1342) | static unsigned long thread_id_neon(void)
  function ne__ssl_exit (line 1442) | void ne__ssl_exit(void)

FILE: src/ne_pkcs11.c
  type ne_ssl_pkcs11_provider_s (line 36) | struct ne_ssl_pkcs11_provider_s {
  function RSA_METHOD (line 85) | static RSA_METHOD *RSA_meth_new(const char *name, int flags)
  function pk11_rsa_encrypt (line 101) | static int pk11_rsa_encrypt(int mlen, const unsigned char *m,
  function RSA_METHOD (line 150) | static RSA_METHOD *pk11_rsa_method(ne_ssl_pkcs11_provider *prov)
  function pk11_find_x509 (line 168) | static int pk11_find_x509(ne_ssl_pkcs11_provider *prov,
  function pk11_find_pkey (line 243) | static int pk11_find_pkey(ne_ssl_pkcs11_provider *prov,
  function find_client_cert (line 296) | static int find_client_cert(ne_ssl_pkcs11_provider *prov,
  function pk11_sign_callback (line 310) | static int pk11_sign_callback(gnutls_privkey_t pkey,
  function terminate_string (line 360) | static void terminate_string(unsigned char *str, size_t len)
  function pk11_login (line 375) | static int pk11_login(ne_ssl_pkcs11_provider *prov, ck_slot_id_t slot_id,
  function pk11_provide (line 455) | static void pk11_provide(void *userdata, ne_session *sess,
  function pk11_init (line 526) | static int pk11_init(ne_ssl_pkcs11_provider **provider,
  function ne_ssl_pkcs11_provider_init (line 542) | int ne_ssl_pkcs11_provider_init(ne_ssl_pkcs11_provider **provider,
  function ne_ssl_pkcs11_nss_provider_init (line 555) | int ne_ssl_pkcs11_nss_provider_init(ne_ssl_pkcs11_provider **provider,
  function ne_ssl_pkcs11_provider_pin (line 572) | void ne_ssl_pkcs11_provider_pin(ne_ssl_pkcs11_provider *provider,
  function ne_ssl_set_pkcs11_provider (line 580) | void ne_ssl_set_pkcs11_provider(ne_session *sess,
  function ne_ssl_pkcs11_provider_destroy (line 586) | void ne_ssl_pkcs11_provider_destroy(ne_ssl_pkcs11_provider *prov)
  function ne_ssl_pkcs11_provider_init (line 603) | int ne_ssl_pkcs11_provider_init(ne_ssl_pkcs11_provider **provider,
  function ne_ssl_pkcs11_nss_provider_init (line 609) | int ne_ssl_pkcs11_nss_provider_init(ne_ssl_pkcs11_provider **provider,
  function ne_ssl_pkcs11_provider_destroy (line 618) | void ne_ssl_pkcs11_provider_destroy(ne_ssl_pkcs11_provider *provider) { }
  function ne_ssl_pkcs11_provider_pin (line 620) | void ne_ssl_pkcs11_provider_pin(ne_ssl_pkcs11_provider *provider,
  function ne_ssl_set_pkcs11_provider (line 624) | void ne_ssl_set_pkcs11_provider(ne_session *sess,

FILE: src/ne_pkcs11.h
  type ne_ssl_pkcs11_provider_s (line 34) | struct ne_ssl_pkcs11_provider_s

FILE: src/ne_private.h
  type host_info (line 32) | struct host_info {
  type hook (line 56) | struct hook {
  type ne_session_s (line 67) | struct ne_session_s {

FILE: src/ne_privssl.h
  type ne_ssl_context_s (line 39) | struct ne_ssl_context_s {
  type ne_ssl_socket (line 48) | typedef struct ne_ssl_socket_s {
  type ne_ssl_context_s (line 77) | struct ne_ssl_context_s {
  type ne_ssl_socket (line 103) | typedef struct ne_ssl_socket_s {

FILE: src/ne_props.c
  type ne_propfind_handler_s (line 41) | struct ne_propfind_handler_s {
  type prop (line 70) | struct prop {
  type propstat (line 79) | struct propstat {
  type ne_prop_result_set_s (line 86) | struct ne_prop_result_set_s {
  function chardata (line 102) | static int chardata(void *userdata, int state, const char *data, size_t ...
  function ne_xml_parser (line 112) | ne_xml_parser *ne_propfind_get_parser(ne_propfind_handler *handler)
  function ne_request (line 117) | ne_request *ne_propfind_get_request(ne_propfind_handler *handler)
  function propfind (line 122) | static int propfind(ne_propfind_handler *handler,
  function set_body (line 148) | static void set_body(ne_propfind_handler *hdl, const ne_propname *names)
  function ne_propfind_allprop (line 165) | int ne_propfind_allprop(ne_propfind_handler *handler,
  function ne_propfind_named (line 172) | int ne_propfind_named(ne_propfind_handler *handler, const ne_propname *p...
  function ne_proppatch (line 182) | int ne_proppatch(ne_session *sess, const char *uri,
  function pnamecmp (line 231) | static int pnamecmp(const ne_propname *pn1, const ne_propname *pn2)
  function findprop (line 248) | static int findprop(const ne_prop_result_set *set, const ne_propname *pn...
  type prop (line 274) | struct prop
  type prop (line 286) | struct prop
  function ne_propset_iterate (line 305) | int ne_propset_iterate(const ne_prop_result_set *set,
  function ne_status (line 324) | const ne_status *ne_propset_status(const ne_prop_result_set *set,
  type propstat (line 360) | struct propstat
  type propstat (line 369) | struct propstat
  function startelm (line 379) | static int startelm(void *userdata, int parent,
  function endelm (line 470) | static int endelm(void *userdata, int state,
  function end_propstat (line 491) | static void end_propstat(void *userdata, void *pstat_v,
  function free_propset (line 527) | static void free_propset(ne_propfind_handler *handler,
  function end_response (line 561) | static void end_response(void *userdata, void *resource,
  function ne_propfind_handler (line 577) | ne_propfind_handler *
  function ne_propfind_destroy (line 615) | void ne_propfind_destroy(ne_propfind_handler *handler)
  function ne_simple_propfind (line 627) | int ne_simple_propfind(ne_session *sess, const char *href, int depth,
  function ne_propnames (line 646) | int ne_propnames(ne_session *sess, const char *href, int depth,
  function ne_propfind_set_private (line 663) | void ne_propfind_set_private(ne_propfind_handler *hdl,

FILE: src/ne_props.h
  function NE_BEGIN_DECLS (line 28) | NE_BEGIN_DECLS
  type ne_prop_result_set (line 60) | typedef struct ne_prop_result_set_s ne_prop_result_set;
  type ne_proppatch_optype (line 142) | enum ne_proppatch_optype {
  type ne_proppatch_operation (line 146) | typedef struct {
  type ne_propfind_handler_s (line 168) | struct ne_propfind_handler_s
  type ne_propfind_handler (line 169) | typedef struct ne_propfind_handler_s ne_propfind_handler;

FILE: src/ne_redirect.c
  type redirect (line 41) | struct redirect {
  function create (line 47) | static void create(ne_request *req, void *userdata,
  function post_send (line 55) | static int post_send(ne_request *req, void *userdata, const ne_status *s...
  function free_redirect (line 71) | static void free_redirect(void *cookie)
  function ne_redirect_register (line 78) | void ne_redirect_register(ne_session *sess)
  function ne_uri (line 89) | const ne_uri *ne_redirect_location(ne_session *sess)

FILE: src/ne_request.c
  type body_reader (line 60) | struct body_reader {
  type interim_handler (line 68) | struct interim_handler {
  type field (line 74) | struct field {
  type field (line 87) | struct field
  type ne_request_s (line 100) | struct ne_request_s {
  function hash_and_lower (line 180) | static inline unsigned int hash_and_lower(char *name)
  function aborted (line 196) | static int aborted(ne_request *req, const char *doing, ssize_t code)
  function notify_status (line 232) | static void notify_status(ne_session *sess, ne_session_status status)
  type hook (line 239) | struct hook
  function ne_set_request_private (line 257) | void ne_set_request_private(ne_request *req, const char *id, void *userd...
  function body_string_send (line 275) | static ssize_t body_string_send(void *userdata, char *buffer, size_t count)
  function body_fd_send (line 295) | static ssize_t body_fd_send(void *userdata, char *buffer, size_t count)
  function send_request_body (line 385) | static int send_request_body(ne_request *req, int retry)
  function ne_buffer (line 473) | static ne_buffer *initial_request_headers(ne_request *req)
  function ne_accept_always (line 510) | int ne_accept_always(void *userdata, ne_request *req, const ne_status *st)
  function ne_accept_2xx (line 515) | int ne_accept_2xx(void *userdata, ne_request *req, const ne_status *st)
  function ne_request (line 520) | ne_request *ne_request_create(ne_session *sess, const char *method,
  function get_request_target_uri (line 564) | static int get_request_target_uri(ne_request *req, ne_uri *uri)
  function ne_uri (line 588) | const ne_uri *ne_get_request_target(ne_request *req)
  function set_body_length (line 606) | static void set_body_length(ne_request *req, ne_off_t length)
  function ne_set_request_body_buffer (line 617) | void ne_set_request_body_buffer(ne_request *req, const char *buffer,
  function ne_set_request_body_provider (line 627) | void ne_set_request_body_provider(ne_request *req, ne_off_t bodysize,
  function ne_set_request_body_fd (line 635) | void ne_set_request_body_fd(ne_request *req, int fd,
  function ne_set_request_flag (line 646) | void ne_set_request_flag(ne_request *req, ne_request_flag flag, int value)
  function ne_get_request_flag (line 653) | int ne_get_request_flag(ne_request *req, ne_request_flag flag)
  function ne_add_request_header (line 661) | void ne_add_request_header(ne_request *req, const char *name,
  function ne_print_request_header (line 667) | void ne_print_request_header(ne_request *req, const char *name,
  type field (line 684) | struct field
  type field (line 721) | struct field
  function remove_response_header (line 766) | static void remove_response_header(ne_request *req, const char *name,
  function free_fields (line 787) | static void free_fields(field_hash *fields)
  function free_response_headers (line 804) | static void free_response_headers(ne_request *req)
  function read_response_headers (line 811) | static int read_response_headers(ne_request *req)
  function ne_uri (line 822) | ne_uri *ne_get_response_location(ne_request *req, const char *fragment)
  function time_t (line 864) | time_t ne_get_response_retry_after(ne_request *req)
  function ne_add_response_body_reader (line 886) | void ne_add_response_body_reader(ne_request *req, ne_accept_response acpt,
  function ne_add_interim_handler (line 897) | void ne_add_interim_handler(ne_request *req, ne_interim_response_fn fn,
  function ne_request_destroy (line 908) | void ne_request_destroy(ne_request *req)
  function read_message_line (line 959) | static ssize_t read_message_line(ne_socket *sock, char *const buf, size_...
  function read_response_block (line 1001) | static int read_response_block(ne_request *req, struct ne_response *resp,
  function ne_read_response_block (line 1110) | ssize_t ne_read_response_block(ne_request *req, char *buffer, size_t buf...
  function ne_buffer (line 1139) | static ne_buffer *build_request(ne_request *req)
  function dump_request (line 1168) | static void dump_request(const char *request)
  function read_status_line (line 1192) | static int read_status_line(ne_request *req, ne_status *status, int retry)
  function send_request (line 1242) | static int send_request(ne_request *req, const ne_buffer *request)
  function read_message_header (line 1327) | static int read_message_header(ne_request *req, char *buf, size_t buflen)
  function add_field (line 1382) | static void add_field(field_hash **fh, unsigned int hash,
  function read_header_fields (line 1454) | static int read_header_fields(ne_request *req, field_hash **fields)
  function lookup_host (line 1509) | static int lookup_host(ne_session *sess, struct host_info *info)
  function ne_begin_request (line 1528) | int ne_begin_request(ne_request *req)
  function ne_end_request (line 1684) | int ne_end_request(ne_request *req)
  function ne_read_response_to_fd (line 1713) | int ne_read_response_to_fd(ne_request *req, int fd)
  function ne_read_response_to_buffer (line 1741) | int ne_read_response_to_buffer(ne_request *req, char *buf, size_t *buflen)
  function ne_discard_response (line 1779) | int ne_discard_response(ne_request *req)
  function ne_request_dispatch (line 1790) | int ne_request_dispatch(ne_request *req)
  function ne_status (line 1807) | const ne_status *ne_get_status(const ne_request *req)
  function ne_session (line 1812) | ne_session *ne_get_session(const ne_request *req)
  function proxy_tunnel (line 1820) | static int proxy_tunnel(ne_session *sess)
  function ne_inet_addr (line 1852) | static const ne_inet_addr *resolve_first(struct host_info *host)
  function ne_inet_addr (line 1859) | static const ne_inet_addr *resolve_next(struct host_info *host)
  function do_connect (line 1868) | static int do_connect(ne_session *sess, struct host_info *host)
  function socks_origin_lookup (line 1939) | static int socks_origin_lookup(ne_session *sess)
  function open_connection (line 1972) | static int open_connection(ne_session *sess)

FILE: src/ne_request.h
  type ne_request (line 43) | typedef struct ne_request_s ne_request;
  type ne_request_flag (line 273) | typedef enum ne_request_flag_e {

FILE: src/ne_session.c
  function destroy_hooks (line 48) | static void destroy_hooks(struct hook *hooks)
  function free_hostinfo (line 59) | static void free_hostinfo(struct host_info *hi)
  function free_proxies (line 68) | static void free_proxies(ne_session *sess)
  function ne_session_destroy (line 82) | void ne_session_destroy(ne_session *sess)
  function ne_version_pre_http11 (line 130) | int ne_version_pre_http11(ne_session *s)
  function set_hostport (line 136) | static void set_hostport(struct host_info *host, unsigned int defaultport)
  function set_hostinfo (line 164) | static void set_hostinfo(struct host_info *hi, enum proxy_type type,
  function ne_session (line 228) | ne_session *ne_session_create(const char *scheme,
  function ne_session_proxy (line 270) | void ne_session_proxy(ne_session *sess, const char *hostname,
  function ne_session_socks_proxy (line 282) | void ne_session_socks_proxy(ne_session *sess, enum ne_sock_sversion vers,
  function ne_session_system_proxy (line 298) | void ne_session_system_proxy(ne_session *sess, unsigned int flags)
  function ne_set_addrlist2 (line 388) | void ne_set_addrlist2(ne_session *sess, unsigned int port,
  function ne_set_addrlist (line 409) | void ne_set_addrlist(ne_session *sess, const ne_inet_addr **addrs, size_...
  function ne_set_localaddr (line 414) | void ne_set_localaddr(ne_session *sess, const ne_inet_addr *addr)
  function ne_set_error (line 419) | void ne_set_error(ne_session *sess, const char *format, ...)
  function ne_set_session_flag (line 428) | void ne_set_session_flag(ne_session *sess, ne_session_flag flag, int value)
  function ne_get_session_flag (line 435) | int ne_get_session_flag(ne_session *sess, ne_session_flag flag)
  function progress_notifier (line 443) | static void progress_notifier(void *userdata, ne_session_status status,
  function ne_set_progress (line 453) | void ne_set_progress(ne_session *sess, ne_progress progress, void *userd...
  function ne_set_notifier (line 465) | void ne_set_notifier(ne_session *sess,
  function ne_set_read_timeout (line 472) | void ne_set_read_timeout(ne_session *sess, int timeout)
  function ne_set_connect_timeout (line 477) | void ne_set_connect_timeout(ne_session *sess, int timeout)
  function ne_set_useragent (line 485) | void ne_set_useragent(ne_session *sess, const char *token)
  function ne_fill_server_uri (line 501) | void ne_fill_server_uri(ne_session *sess, ne_uri *uri)
  function ne_fill_proxy_uri (line 508) | void ne_fill_proxy_uri(ne_session *sess, ne_uri *uri)
  function ne_close_connection (line 525) | void ne_close_connection(ne_session *sess)
  function ne_ssl_set_verify (line 553) | void ne_ssl_set_verify(ne_session *sess, ne_ssl_verify_fn fn, void *user...
  function sess_ccprovider (line 560) | static void sess_ccprovider(void *userdata, const ne_ssl_dname *const *d...
  function ne_ssl_provide_clicert (line 570) | void ne_ssl_provide_clicert(ne_session *sess,
  function ne_ssl_set_clicert (line 584) | void ne_ssl_set_clicert(ne_session *sess, const ne_ssl_client_cert *cc)
  function ne_ssl_trust_cert (line 592) | void ne_ssl_trust_cert(ne_session *sess, const ne_ssl_certificate *cert)
  function ne_ssl_trust_default_ca (line 601) | void ne_ssl_trust_default_ca(ne_session *sess)
  function ne_ssl_set_protovers (line 609) | int ne_ssl_set_protovers(ne_session *sess, enum ne_ssl_protocol min,
  type ne_ssl_protocol (line 630) | enum ne_ssl_protocol
  function ne_ssl_cert_validity (line 638) | void ne_ssl_cert_validity(const ne_ssl_certificate *cert, char *from, ch...
  function check_certificate (line 671) | static int check_certificate(ne_session *sess, ne_ssl_certificate *cert)
  function ne__negotiate_ssl (line 700) | int ne__negotiate_ssl(ne_session *sess)
  function add_hook (line 745) | static void add_hook(struct hook **hooks, const char *id, void_fn fn, vo...
  function ne_hook_create_request (line 763) | void ne_hook_create_request(ne_session *sess,
  function ne_hook_pre_send (line 769) | void ne_hook_pre_send(ne_session *sess, ne_pre_send_fn fn, void *userdata)
  function ne_hook_post_send (line 774) | void ne_hook_post_send(ne_session *sess, ne_post_send_fn fn, void *userd...
  function ne_hook_post_headers (line 779) | void ne_hook_post_headers(ne_session *sess, ne_post_headers_fn fn,
  function ne_hook_destroy_request (line 785) | void ne_hook_destroy_request(ne_session *sess,
  function ne_hook_destroy_session (line 791) | void ne_hook_destroy_session(ne_session *sess,
  function ne_hook_close_conn (line 797) | void ne_hook_close_conn(ne_session *sess,
  function ne_set_session_private (line 803) | void ne_set_session_private(ne_session *sess, const char *id, void *user...
  function remove_hook (line 808) | static void remove_hook(struct hook **hooks, void_fn fn, void *ud)
  function ne_unhook_create_request (line 825) | void ne_unhook_create_request(ne_session *sess,
  function ne_unhook_pre_send (line 831) | void ne_unhook_pre_send(ne_session *sess, ne_pre_send_fn fn, void *userd...
  function ne_unhook_post_headers (line 836) | void ne_unhook_post_headers(ne_session *sess, ne_post_headers_fn fn,
  function ne_unhook_post_send (line 842) | void ne_unhook_post_send(ne_session *sess, ne_post_send_fn fn, void *use...
  function ne_unhook_destroy_request (line 847) | void ne_unhook_destroy_request(ne_session *sess,
  function ne_unhook_destroy_session (line 853) | void ne_unhook_destroy_session(ne_session *sess,
  function ne_unhook_close_conn (line 859) | void ne_unhook_close_conn(ne_session *sess,

FILE: src/ne_session.h
  type ne_session_s (line 34) | struct ne_session_s
  type ne_sock_sversion (line 70) | enum ne_sock_sversion
  type ne_session_flag (line 82) | typedef enum ne_session_flag_e {
  type ne_session_status (line 172) | typedef enum {
  type ne_session_status_info (line 186) | typedef union ne_session_status_info_u {
  type ne_ssl_protocol (line 263) | enum ne_ssl_protocol
  type ne_ssl_protocol (line 264) | enum ne_ssl_protocol

FILE: src/ne_socket.c
  type ne_inet_addr (line 122) | typedef struct addrinfo ne_inet_addr;
  type ne_inet_addr (line 124) | typedef struct in_addr ne_inet_addr;
  type iofns (line 189) | struct iofns {
  type ne_socket_s (line 207) | struct ne_socket_s {
  type ne_sock_addr_s (line 232) | struct ne_sock_addr_s {
  function print_error (line 249) | static void print_error(int errnum, char *buffer, size_t buflen)
  function seed_ssl_prng (line 264) | static int seed_ssl_prng(void)
  function init_ipv6 (line 298) | static void init_ipv6(void)
  function ne_sock_init (line 318) | int ne_sock_init(void)
  function ne_sock_exit (line 370) | void ne_sock_exit(void)
  function raw_poll (line 389) | static int raw_poll(int fdno, int rdwr, int secs)
  function ne_sock_block (line 433) | int ne_sock_block(ne_socket *sock, int n)
  function ne_sock_read (line 443) | ssize_t ne_sock_read(ne_socket *sock, char *buffer, size_t buflen)
  function ne_sock_peek (line 478) | ssize_t ne_sock_peek(ne_socket *sock, char *buffer, size_t buflen)
  function readable_raw (line 504) | static int readable_raw(ne_socket *sock, int secs)
  function read_raw (line 515) | static ssize_t read_raw(ne_socket *sock, char *buffer, size_t len)
  function write_raw (line 547) | static ssize_t write_raw(ne_socket *sock, const char *data, size_t length)
  function writev_raw (line 569) | static ssize_t writev_raw(ne_socket *sock, const struct ne_iovec *vector...
  function writev_dummy (line 616) | static ssize_t writev_dummy(ne_socket *sock, const struct ne_iovec *vect...
  type iofns (line 622) | struct iofns
  function readable_ossl (line 631) | static int readable_ossl(ne_socket *sock, int secs)
  function error_ossl (line 674) | static int error_ossl(ne_socket *sock, int sret)
  function read_ossl (line 762) | static ssize_t read_ossl(ne_socket *sock, char *buffer, size_t len)
  function write_ossl (line 778) | static ssize_t write_ossl(ne_socket *sock, const char *data, size_t len)
  type iofns (line 790) | struct iofns
  function check_alert (line 802) | static int check_alert(ne_socket *sock, ssize_t ret)
  function readable_gnutls (line 818) | static int readable_gnutls(ne_socket *sock, int secs)
  function error_gnutls (line 826) | static ssize_t error_gnutls(ne_socket *sock, ssize_t sret)
  function read_gnutls (line 878) | static ssize_t read_gnutls(ne_socket *sock, char *buffer, size_t len)
  function write_gnutls (line 899) | static ssize_t write_gnutls(ne_socket *sock, const char *data, size_t len)
  type iofns (line 913) | struct iofns
  function ne_sock_fullwrite (line 922) | int ne_sock_fullwrite(ne_socket *sock, const char *data, size_t len)
  function ne_sock_fullwritev (line 937) | int ne_sock_fullwritev(ne_socket *sock, const struct ne_iovec *vector, i...
  function ne_sock_readline (line 963) | ssize_t ne_sock_readline(ne_socket *sock, char *buf, size_t buflen)
  function ne_sock_fullread (line 1006) | ssize_t ne_sock_fullread(ne_socket *sock, char *buffer, size_t buflen)
  function ne_sock_addr (line 1031) | ne_sock_addr *ne_addr_resolve(const char *hostname, int flags)
  function ne_addr_result (line 1106) | int ne_addr_result(const ne_sock_addr *addr)
  function ne_inet_addr (line 1120) | const ne_inet_addr *ne_addr_first(ne_sock_addr *addr)
  function ne_inet_addr (line 1131) | const ne_inet_addr *ne_addr_next(ne_sock_addr *addr)
  type sockaddr_in6 (line 1174) | struct sockaddr_in6
  type sockaddr_in (line 1179) | struct sockaddr_in
  type sockaddr_in6 (line 1201) | struct sockaddr_in6
  type sockaddr_in (line 1206) | struct sockaddr_in
  function ne_inet_addr (line 1214) | ne_inet_addr *ne_iaddr_parse(const char *addr, ne_iaddr_type type)
  function ne_iaddr_reverse (line 1273) | int ne_iaddr_reverse(const ne_inet_addr *ia, char *buf, size_t bufsiz)
  function ne_iaddr_set_scope (line 1292) | int ne_iaddr_set_scope(ne_inet_addr *ia, const char *scope)
  type sockaddr_in6 (line 1315) | struct sockaddr_in6
  function ne_addr_destroy (line 1326) | void ne_addr_destroy(ne_sock_addr *addr)
  function raw_connect (line 1345) | static int raw_connect(int fd, const struct sockaddr *sa, size_t salen)
  function timed_connect (line 1359) | static int timed_connect(ne_socket *sock, int fd,
  function connect_socket (line 1438) | static int connect_socket(ne_socket *sock, int fd,
  function ne_socket (line 1471) | ne_socket *ne_sock_create(void)
  function ne_sock_prebind (line 1491) | void ne_sock_prebind(ne_socket *sock, const ne_inet_addr *addr,
  function do_bind (line 1500) | static int do_bind(int fd, int peer_family,
  function ne_sock_connect (line 1567) | int ne_sock_connect(ne_socket *sock,
  function ne_inet_addr (line 1645) | ne_inet_addr *ne_sock_peer(ne_socket *sock, unsigned int *port)
  function ne_inet_addr (line 1690) | ne_inet_addr *ne_iaddr_make(ne_iaddr_type type, const unsigned char *raw)
  function ne_inet_addr (line 1701) | ne_inet_addr *ne_iaddr_put(ne_inet_addr *ia, ne_iaddr_type type, const u...
  function ne_iaddr_type (line 1740) | ne_iaddr_type ne_iaddr_typeof(const ne_inet_addr *ia)
  function ne_iaddr_cmp (line 1749) | int ne_iaddr_cmp(const ne_inet_addr *i1, const ne_inet_addr *i2)
  function ne_iaddr_free (line 1775) | void ne_iaddr_free(ne_inet_addr *addr)
  function ne_sock_accept (line 1783) | int ne_sock_accept(ne_socket *sock, int listener)
  function ne_sock_fd (line 1796) | int ne_sock_fd(const ne_socket *sock)
  function ne_sock_read_timeout (line 1801) | void ne_sock_read_timeout(ne_socket *sock, int timeout)
  function ne_sock_connect_timeout (line 1806) | void ne_sock_connect_timeout(ne_socket *sock, int timeout)
  function ne_ssl_socket (line 1814) | ne_ssl_socket *ne__sock_sslsock(ne_socket *sock)
  function ne__sock_set_verify_err (line 1819) | void ne__sock_set_verify_err(ne_socket *sock, int failures)
  function copy_datum (line 1852) | static void copy_datum(gnutls_datum_t *dest, gnutls_datum_t *src)
  function store_sess (line 1859) | static int store_sess(void *userdata, gnutls_datum_t key, gnutls_datum_t...
  function match_datum (line 1875) | static int match_datum(gnutls_datum_t *d1, gnutls_datum_t *d2)
  function gnutls_datum_t (line 1882) | static gnutls_datum_t retrieve_sess(void *userdata, gnutls_datum_t key)
  function remove_sess (line 1896) | static int remove_sess(void *userdata, gnutls_datum_t key)
  function set_priority (line 1901) | static int set_priority(ne_socket *sock, ne_ssl_context *ctx)
  function ne_sock_accept_ssl (line 1924) | int ne_sock_accept_ssl(ne_socket *sock, ne_ssl_context *ctx)
  function ne_sock_connect_ssl (line 1976) | int ne_sock_connect_ssl(ne_socket *sock, ne_ssl_context *ctx, void *user...
  function ne_sock_handshake (line 1981) | int ne_sock_handshake(ne_socket *sock, ne_ssl_context *ctx,
  function ne_sock_sessid (line 2094) | int ne_sock_sessid(ne_socket *sock, unsigned char *buf, size_t *buflen)
  function ne_sock_getproto (line 2158) | enum ne_ssl_protocol ne_sock_getproto(ne_socket *sock)
  function ne_ssl_certificate (line 2203) | ne_ssl_certificate *ne_sock_getcert(ne_socket *sock, ne_ssl_context *ctx)
  function ne_sock_set_error (line 2226) | void ne_sock_set_error(ne_socket *sock, const char *format, ...)
  function ne_sock_shutdown (line 2235) | int ne_sock_shutdown(ne_socket *sock, unsigned int flags)
  function ne_sock_close (line 2311) | int ne_sock_close(ne_socket *sock)

FILE: src/ne_socket.h
  type ne_socket (line 49) | typedef struct ne_socket_s ne_socket;
  type ne_sock_addr (line 52) | typedef struct ne_sock_addr_s ne_sock_addr;
  type ne_inet_addr (line 55) | typedef struct ne_inet_addr_s ne_inet_addr;
  type ne_iaddr_type (line 104) | typedef enum {
  type ne_iovec (line 211) | struct ne_iovec {
  type ne_iovec (line 220) | struct ne_iovec
  type ne_ssl_protocol (line 321) | enum ne_ssl_protocol
  type ne_sock_sversion (line 343) | enum ne_sock_sversion {
  type ne_sock_sversion (line 368) | enum ne_sock_sversion

FILE: src/ne_socks.c
  function v5fail (line 59) | static int v5fail(ne_socket *sock, unsigned int code, const char *context)
  function fail (line 95) | static int fail(ne_socket *sock, const char *error)
  function sofail (line 102) | static int sofail(ne_socket *sock, ssize_t ret, const char *context)
  function v5_proxy (line 111) | static int v5_proxy(ne_socket *sock, const ne_inet_addr *addr,
  function v4fail (line 260) | static int v4fail(ne_socket *sock, unsigned int code, const char *context)
  function v4_proxy (line 285) | static int v4_proxy(ne_socket *sock, enum ne_sock_sversion vers,
  function ne_sock_proxy (line 343) | int ne_sock_proxy(ne_socket *sock, enum ne_sock_sversion vers,

FILE: src/ne_ssl.c
  function ne__ssl_match_hostname (line 42) | int ne__ssl_match_hostname(const char *cn, size_t cnlen, const char *hos...
  function ne_ssl_context_set_ccprovide (line 63) | void ne_ssl_context_set_ccprovide(ne_ssl_context *ctx,

FILE: src/ne_ssl.h
  type ne_ssl_dname_s (line 35) | struct ne_ssl_dname_s
  type ne_ssl_certificate (line 48) | typedef struct ne_ssl_certificate_s ne_ssl_certificate;
  type ne_ssl_client_cert (line 128) | typedef struct ne_ssl_client_cert_s ne_ssl_client_cert;
  type ne_ssl_protocol (line 184) | enum ne_ssl_protocol {
  type ne_ssl_protocol (line 194) | enum ne_ssl_protocol
  type ne_ssl_context (line 242) | typedef struct ne_ssl_context_s ne_ssl_context;
  type ne_ssl_protocol (line 286) | enum ne_ssl_protocol
  type ne_ssl_protocol (line 287) | enum ne_ssl_protocol

FILE: src/ne_sspi.c
  type SSPIContextStruct (line 38) | struct SSPIContextStruct {
  type SSPIContext (line 49) | typedef struct SSPIContextStruct SSPIContext;
  function getMaxTokenSize (line 60) | static int getMaxTokenSize(char *package, ULONG * maxTokenSize)
  function initDll (line 84) | static void initDll(HINSTANCE hSecDll)
  function ne_sspi_init (line 128) | int ne_sspi_init(void)
  function ne_sspi_deinit (line 159) | int ne_sspi_deinit(void)
  function acquireCredentialsHandle (line 189) | static int acquireCredentialsHandle(CredHandle * credentials, char *pack...
  function SECURITY_STATUS (line 212) | static SECURITY_STATUS
  function getContext (line 246) | static int getContext(void *context, SSPIContext **sspiContext)
  function getSingleBufferDescriptor (line 260) | static int getSingleBufferDescriptor(SecBufferDesc *secBufferDesc,
  function base64ToBuffer (line 278) | static int base64ToBuffer(const char *token, SecBufferDesc * secBufferDesc)
  function makeBuffer (line 301) | static int makeBuffer(SecBufferDesc * secBufferDesc, ULONG size)
  function freeBuffer (line 318) | static int freeBuffer(SecBufferDesc * secBufferDesc)
  function ne_sspi_create_context (line 365) | int ne_sspi_create_context(void **context, char *serverName, int ntlm)
  function resetContext (line 401) | static void resetContext(SSPIContext * sspiContext)
  function initSingleEmptyBuffer (line 416) | static void
  function ne_sspi_destroy_context (line 432) | int ne_sspi_destroy_context(void *context)
  function ne_sspi_clear_context (line 456) | int ne_sspi_clear_context(void *context)
  function ne_sspi_authenticate (line 477) | int ne_sspi_authenticate(void *context, const char *base64Token, char **...

FILE: src/ne_string.c
  function ne_buffer_clear (line 121) | void ne_buffer_clear(ne_buffer *buf)
  function ne_buffer_grow (line 128) | void ne_buffer_grow(ne_buffer *buf, size_t newsize)
  function count_concat (line 140) | static size_t count_concat(va_list *ap)
  function do_concat (line 151) | static void do_concat(char *str, va_list *ap)
  function ne_buffer_concat (line 166) | void ne_buffer_concat(ne_buffer *buf, ...)
  function ne_buffer_zappend (line 208) | void ne_buffer_zappend(ne_buffer *buf, const char *str)
  function ne_buffer_append (line 213) | void ne_buffer_append(ne_buffer *buf, const char *data, size_t len)
  function ne_buffer_snprintf (line 221) | size_t ne_buffer_snprintf(ne_buffer *buf, size_t max, const char *fmt, ...)
  function ne_buffer (line 236) | ne_buffer *ne_buffer_create(void)
  function ne_buffer (line 241) | ne_buffer *ne_buffer_ncreate(size_t s)
  function ne_buffer_destroy (line 251) | void ne_buffer_destroy(ne_buffer *buf)
  function ne_buffer_altered (line 264) | void ne_buffer_altered(ne_buffer *buf)
  function qappend_count (line 296) | static size_t qappend_count(const unsigned char *s, const unsigned char ...
  function ne_buffer_qappend (line 334) | void ne_buffer_qappend(ne_buffer *buf, const unsigned char *data, size_t...
  function ne_unbase64 (line 467) | size_t ne_unbase64(const char *data, unsigned char **out)
  function ne_snprintf (line 573) | size_t ne_snprintf(char *str, size_t size, const char *fmt, ...)
  function ne_vsnprintf (line 588) | size_t ne_vsnprintf(char *str, size_t size, const char *fmt, va_list ap)
  function ne_strcasecmp (line 702) | int ne_strcasecmp(const char *s1, const char *s2)
  function ne_strncasecmp (line 721) | int ne_strncasecmp(const char *s1, const char *s2, size_t n)
  type ne_md5_ctx (line 756) | struct ne_md5_ctx
  function ne_mknonce (line 810) | int ne_mknonce(unsigned char *nonce, size_t len, unsigned int flags)
  function ne_strhextoul (line 889) | unsigned long ne_strhextoul(const char *str, const char **end)

FILE: src/ne_string.h
  type ne_buffer (line 66) | typedef struct {

FILE: src/ne_stubssl.c
  function ne_ssl_certificate (line 35) | ne_ssl_certificate *ne_ssl_cert_read(const char *filename)
  function ne_ssl_cert_cmp (line 40) | int ne_ssl_cert_cmp(const ne_ssl_certificate *c1, const ne_ssl_certifica...
  function ne_ssl_certificate (line 45) | const ne_ssl_certificate *ne_ssl_cert_signedby(const ne_ssl_certificate ...
  function ne_ssl_dname (line 50) | const ne_ssl_dname *ne_ssl_cert_issuer(const ne_ssl_certificate *cert)
  function ne_ssl_dname (line 55) | const ne_ssl_dname *ne_ssl_cert_subject(const ne_ssl_certificate *cert)
  function ne_ssl_cert_free (line 60) | void ne_ssl_cert_free(ne_ssl_certificate *cert) {}
  function ne_ssl_client_cert (line 62) | ne_ssl_client_cert *ne_ssl_clicert_read(const char *filename)
  function ne_ssl_certificate (line 67) | const ne_ssl_certificate *ne_ssl_clicert_owner(const ne_ssl_client_cert ...
  function ne_ssl_client_cert (line 72) | ne_ssl_client_cert *ne_ssl_clicert_import(const unsigned char *buffer,
  function ne_ssl_clicert_encrypted (line 78) | int ne_ssl_clicert_encrypted(const ne_ssl_client_cert *ccert)
  function ne_ssl_clicert_decrypt (line 83) | int ne_ssl_clicert_decrypt(ne_ssl_client_cert *ccert, const char *password)
  function ne_ssl_clicert_free (line 88) | void ne_ssl_clicert_free(ne_ssl_client_cert *ccert) {}
  function ne_ssl_context (line 90) | ne_ssl_context *ne_ssl_context_create(int mode)
  function ne_ssl_context_trustcert (line 95) | void ne_ssl_context_trustcert(ne_ssl_context *ctx, const ne_ssl_certific...
  function ne_ssl_context_keypair (line 96) | int ne_ssl_context_keypair(ne_ssl_context *ctx,
  function ne_ssl_context_set_versions (line 102) | int ne_ssl_context_set_versions(ne_ssl_context *ctx, enum ne_ssl_protoco...
  function ne_ssl_check_certificate (line 107) | int ne_ssl_check_certificate(ne_ssl_context *ctx, ne_socket *sock,
  function ne_ssl_context_set_verify (line 116) | int ne_ssl_context_set_verify(ne_ssl_context *ctx,
  function ne_ssl_context_set_clicert (line 124) | void ne_ssl_context_set_clicert(ne_ssl_context *ctx, const ne_ssl_client...
  function ne_ssl_context_set_flag (line 127) | void ne_ssl_context_set_flag(ne_ssl_context *ctx, int flag, int value) {}
  function ne_ssl_context_get_flag (line 128) | int ne_ssl_context_get_flag(ne_ssl_context *ctx, int flag) { return -1; }
  function ne_ssl_context_trustdefca (line 129) | void ne_ssl_context_trustdefca(ne_ssl_context *ctx) {}
  function ne_ssl_context_destroy (line 130) | void ne_ssl_context_destroy(ne_ssl_context *ctx) {}
  function ne_ssl_context_set_ccprovide (line 131) | void ne_ssl_context_set_ccprovide(ne_ssl_context *ctx,
  function ne_ssl_cert_digest (line 135) | int ne_ssl_cert_digest(const ne_ssl_certificate *cert, char *digest)
  function ne_ssl_cert_validity_time (line 145) | void ne_ssl_cert_validity_time(const ne_ssl_certificate *cert,
  function ne_ssl_dname_cmp (line 159) | int ne_ssl_dname_cmp(const ne_ssl_dname *dn1, const ne_ssl_dname *dn2)
  function ne_ssl_cert_write (line 164) | int ne_ssl_cert_write(const ne_ssl_certificate *cert, const char *filename)
  function ne_ssl_certificate (line 174) | ne_ssl_certificate *ne_ssl_cert_import(const char *data)
  function ne_ssl_client_cert (line 179) | ne_ssl_client_cert *ne_ssl_clicert_copy(const ne_ssl_client_cert *cc)
  function ne_ssl_client_cert (line 185) | ne_ssl_client_cert *ne_ssl_clicert_fromuri(const char *uri,
  function ne_sock_accept_ssl (line 191) | int ne_sock_accept_ssl(ne_socket *sock, ne_ssl_context *ctx) {
  function ne_sock_connect_ssl (line 195) | int ne_sock_connect_ssl(ne_socket *sock, ne_ssl_context *ctx, void *user...
  function ne_sock_handshake (line 200) | int ne_sock_handshake(ne_socket *sock, ne_ssl_context *ctx,

FILE: src/ne_uri.c
  function ne_path_has_trailing_slash (line 147) | int ne_path_has_trailing_slash(const char *uri)
  function ne_uri_defaultport (line 154) | unsigned int ne_uri_defaultport(const char *scheme)
  function ne_uri_parse (line 165) | int ne_uri_parse(const char *uri, ne_uri *parsed)
  function copy_authority (line 411) | static void copy_authority(ne_uri *dest, const ne_uri *src)
  function ne_uri (line 420) | ne_uri *ne_uri_resolve(const ne_uri *base, const ne_uri *relative,
  function ne_uri (line 463) | ne_uri *ne_uri_copy(ne_uri *dest, const ne_uri *src)
  function ne_uri_free (line 476) | void ne_uri_free(ne_uri *u)
  function ne_uri_cmp (line 569) | int ne_uri_cmp(const ne_uri *u1, const ne_uri *u2)
  function ne_path_compare (line 588) | int ne_path_compare(const char *a, const char *b)
  function ne_path_childof (line 646) | int ne_path_childof(const char *parent, const char *child)

FILE: src/ne_uri.h
  type ne_uri (line 85) | typedef struct {

FILE: src/ne_utils.c
  function ne_debug_init (line 63) | void ne_debug_init(FILE *stream, int mask)
  function ne_debug (line 74) | void ne_debug(int ch, const char *template, ...)
  function ne_version_match (line 162) | int ne_version_match(int major, int minor)
  function ne_has_support (line 169) | int ne_has_support(int feature)
  function ne_parse_statusline (line 244) | int ne_parse_statusline(const char *status_line, ne_status *st)

FILE: src/ne_utils.h
  type ne_status (line 103) | typedef struct {

FILE: src/ne_xml.c
  type XML_Char (line 48) | typedef XML_Char ne_xml_char;
  type xmlChar (line 60) | typedef xmlChar ne_xml_char;
  type handler (line 73) | struct handler {
  type element (line 85) | struct element {
  type ne_xml_parser_s (line 105) | struct ne_xml_parser_s {
  type element (line 130) | struct element
  type namespace (line 134) | struct namespace {
  function error_handler (line 180) | static void error_handler(void *userdata, const xmlError *err)
  function decl_handler (line 208) | static void decl_handler(void *userdata,
  function ne_xml_currentline (line 218) | int ne_xml_currentline(ne_xml_parser *p)
  function declare_nspaces (line 252) | static int declare_nspaces(ne_xml_parser *p, struct element *elm,
  function expand_qname (line 287) | static int expand_qname(ne_xml_parser *p, struct element *elm,
  function start_element (line 325) | static void start_element(void *userdata, const ne_xml_char *name,
  function destroy_element (line 371) | static void destroy_element(struct element *elm)
  function char_data (line 390) | static void char_data(void *userdata, const ne_xml_char *data, int len)
  function end_element (line 405) | static void end_element(void *userdata, const ne_xml_char *name)
  function entity_declaration (line 435) | static void entity_declaration(void *userData, const XML_Char *entityName,
  function default_handler (line 450) | static void default_handler(void *userData, const XML_Char *s, int len)
  type element (line 457) | struct element
  type element (line 460) | struct element
  type namespace (line 464) | struct namespace
  type element (line 483) | struct element
  function ne_xml_parser (line 492) | ne_xml_parser *ne_xml_create(void)
  function ne_xml_set_encoding (line 544) | int ne_xml_set_encoding(ne_xml_parser *p, const char *encoding)
  function ne_xml_push_handler (line 561) | void ne_xml_push_handler(ne_xml_parser *p,
  function ne_xml_parse_v (line 585) | int ne_xml_parse_v(void *userdata, const char *block, size_t len)
  function ne_xml_parse (line 593) | int ne_xml_parse(ne_xml_parser *p, const char *block, size_t len)
  function ne_xml_failed (line 659) | int ne_xml_failed(ne_xml_parser *p)
  function ne_xml_destroy (line 664) | void ne_xml_destroy(ne_xml_parser *p)
  function ne_xml_set_error (line 695) | void ne_xml_set_error(ne_xml_parser *p, const char *msg)
  function sax_error (line 701) | static void sax_error(void *ctx, const char *msg, ...)
  function ne_xml_mapid (line 752) | int ne_xml_mapid(const struct ne_xml_idmap map[], size_t maplen,

FILE: src/ne_xml.h
  type ne_xml_parser (line 76) | typedef struct ne_xml_parser_s ne_xml_parser;
  type ne_xml_idmap (line 152) | struct ne_xml_idmap {
  type ne_xml_idmap (line 161) | struct ne_xml_idmap

FILE: src/ne_xmlreq.c
  function parse_error (line 34) | static int parse_error(ne_request *req, ne_xml_parser *parser)
  function ne_xml_parse_response (line 46) | int ne_xml_parse_response(ne_request *req, ne_xml_parser *parser)
  function media_type_is_xml (line 71) | static int media_type_is_xml(const ne_content_type *ctype)
  function ne_xml_dispatch_request (line 84) | int ne_xml_dispatch_request(ne_request *req, ne_xml_parser *parser)
  function ne_xml_dispatchif_request (line 89) | int ne_xml_dispatchif_request(ne_request *req, ne_xml_parser *parser,

FILE: test/acl3744.c
  function test_acl (line 29) | static int test_acl(const char *uri, ne_acl_entry *es, int nume)
  function grant_all (line 42) | static int grant_all(void)
  function deny_all (line 55) | static int deny_all(void)
  function deny_one (line 68) | static int deny_one(void)
  function deny_byprop (line 82) | static int deny_byprop(void)

FILE: test/auth.c
  function auth_cb (line 67) | static int auth_cb(void *userdata, const char *realm, int tries,
  function auth_provide_cb (line 79) | static int auth_provide_cb(void *userdata, int attempt,
  function auth_hdr (line 92) | static void auth_hdr(char *value)
  function send_response (line 105) | static int send_response(ne_socket *sock, const char *hdr, int code, int...
  function auth_serve (line 127) | static int auth_serve(ne_socket *sock, void *userdata)
  function init (line 146) | static int init(void)
  function basic (line 162) | static int basic(void)
  function retry_serve (line 219) | static int retry_serve(ne_socket *sock, void *ud)
  function retry_cb (line 263) | static int retry_cb(void *userdata, const char *realm, int tries,
  function retries (line 314) | static int retries(void)
  function forget_regress (line 361) | static int forget_regress(void)
  function fail_auth_cb (line 369) | static int fail_auth_cb(void *ud, const char *realm, int attempt,
  function tunnel_regress (line 376) | static int tunnel_regress(void)
  function negotiate_regress (line 393) | static int negotiate_regress(void)
  function dup_header (line 409) | static void dup_header(char *header)
  type digest_parms (line 430) | struct digest_parms {
  type digest_state (line 456) | struct digest_state {
  type digest_parms (line 466) | struct digest_parms
  type digest_parms (line 469) | struct digest_parms
  type digest_state (line 501) | struct digest_state
  type digest_parms (line 501) | struct digest_parms
  function check_digest (line 539) | static int check_digest(struct digest_state *state, struct digest_parms ...
  function verify_digest_header (line 574) | static int verify_digest_header(struct digest_state *state,
  type digest_state (line 677) | struct digest_state
  type digest_parms (line 678) | struct digest_parms
  type digest_state (line 735) | struct digest_state
  type digest_parms (line 736) | struct digest_parms
  function serve_digest (line 788) | static int serve_digest(ne_socket *sock, void *userdata)
  function test_digest (line 947) | static int test_digest(struct digest_parms *parms)
  function digest (line 987) | static int digest(void)
  function digest_sha256 (line 1042) | static int digest_sha256(void)
  function digest_sha512_256 (line 1067) | static int digest_sha512_256(void)
  function digest_username_star (line 1091) | static int digest_username_star(void)
  function digest_failures (line 1125) | static int digest_failures(void)
  function fail_cb (line 1199) | static int fail_cb(void *userdata, const char *realm, int tries,
  function fail_challenge (line 1217) | static int fail_challenge(void)
  type multi_context (line 1300) | struct multi_context {
  function multi_cb (line 1305) | static int multi_cb(void *userdata, const char *realm, int tries,
  function multi_handler (line 1316) | static int multi_handler(void)
  function multi_rfc7616 (line 1348) | static int multi_rfc7616(void)
  function multi_provider_cb (line 1396) | static int multi_provider_cb(void *userdata, int attempt,
  function serve_provider (line 1425) | static int serve_provider(ne_socket *s, void *userdata)
  function multi_provider (line 1450) | static int multi_provider(void)
  function domains (line 1495) | static int domains(void)
  function CVE_2008_3746 (line 1522) | static int CVE_2008_3746(void)
  function defaults (line 1543) | static int defaults(void)
  function fail_hdr (line 1560) | static void fail_hdr(char *value)
  function serve_forgotten (line 1565) | static int serve_forgotten(ne_socket *sock, void *userdata)
  function forget (line 1597) | static int forget(void)
  function serve_basic_scope_checker (line 1612) | static int serve_basic_scope_checker(ne_socket *sock, void *userdata)
  function basic_scope (line 1654) | static int basic_scope(void)
  function serve_star_scope_checker (line 1670) | static int serve_star_scope_checker(ne_socket *sock, void *userdata)
  function star_scope (line 1698) | static int star_scope(void)
  function serve_unclean_realm (line 1712) | static int serve_unclean_realm(ne_socket *sock, void *userdata)
  function get_realm_cb (line 1723) | static int get_realm_cb(void *userdata, const char *realm, int tries,
  function clean_realm (line 1737) | static int clean_realm(void)
  function capture_ntlm_hdr (line 1762) | static void capture_ntlm_hdr(char *value)
  function build_type2_challenge (line 1770) | static int build_type2_challenge(tSmbNtlmAuthChallenge *challenge,
  function serve_ntlm (line 1801) | static int serve_ntlm(ne_socket *sock, void *userdata)
  function ntlm_cb (line 1931) | static int ntlm_cb(void *userdata, const char *realm, int tries,
  function ntlm (line 1940) | static int ntlm(void)

FILE: test/basic.c
  function content_type (line 40) | static int content_type(void)
  function do_range (line 131) | static int do_range(off_t start, off_t end, const char *fail,
  function get_range (line 164) | static int get_range(void)
  function dav_capabilities (line 222) | static int dav_capabilities(void)
  function get (line 264) | static int get(void)
  function getbuf (line 289) | static int getbuf(void)
  function getbuf_fail (line 311) | static int getbuf_fail(void)
  function getbuf_fill (line 333) | static int getbuf_fill(void)
  function getbuf2 (line 355) | static int getbuf2(void)
  function post_getbuf_retry (line 382) | static int post_getbuf_retry(ne_request *req, void *userdata,
  function getbuf_retry (line 388) | static int getbuf_retry(void)
  function options2 (line 416) | static int options2(void)
  function put (line 458) | static int put(void)
  function getmodtime (line 471) | static int getmodtime(void)

FILE: test/common/child.c
  type server_addr (line 66) | struct server_addr {
  type server_addr (line 75) | struct server_addr
  function lookup_localhost (line 88) | int lookup_localhost(void)
  function get_lh_family (line 151) | int
  function ne_inet_addr (line 169) | ne_inet_addr *
  function do_listen (line 189) | static int do_listen(int port)
  function minisleep (line 220) | void minisleep(void)
  function reset_socket (line 229) | int reset_socket(ne_socket *sock)
  function close_socket (line 241) | static int close_socket(ne_socket *sock)
  function new_spawn_server (line 265) | int new_spawn_server(int count, server_fn fn, void *userdata,
  function new_spawn_server2 (line 278) | int new_spawn_server2(int count, server_fn fn, void *userdata,
  function dead_server (line 362) | int dead_server(void)
  function destroy_and_wait (line 376) | int destroy_and_wait(ne_session *sess)
  function await_server (line 382) | int await_server(void)
  function reap_server (line 406) | int reap_server(void)
  function server_send (line 420) | ssize_t server_send(ne_socket *sock, const char *str, size_t len)
  function discard_request (line 426) | int discard_request(ne_socket *sock)
  function error_response (line 457) | int error_response(ne_socket *sock, int ret)
  function discard_body (line 474) | int discard_body(ne_socket *sock)
  function serve_file (line 493) | int serve_file(ne_socket *sock, void *ud)

FILE: test/common/child.h
  type serve_file_args (line 96) | struct serve_file_args {

FILE: test/common/tests.c
  function t_context (line 85) | void t_context(const char *context, ...)
  function t_warning (line 97) | void t_warning(const char *str, ...)
  function child_segv (line 124) | static void child_segv(int signo)
  function parent_segv (line 134) | static void parent_segv(int signo)
  function in_child (line 152) | void in_child(void)
  function print_prefix (line 166) | static void print_prefix(int n)
  function main (line 186) | int main(int argc, char *argv[])

FILE: test/common/tests.h
  type ne_test (line 43) | typedef struct {

FILE: test/compress.c
  function init (line 38) | static int init(void)
  function reader (line 45) | static int reader(void *ud, const char *block, size_t len)
  function do_fetch (line 92) | static int do_fetch(const char *realfn, const char *gzipfn,
  function fetching (line 162) | static int fetching(void)
  function auth_cb (line 217) | static int auth_cb(void *userdata, const char *realm, int tries,
  function retry_compress_helper (line 225) | static int retry_compress_helper(ne_accept_response acceptor,
  type double_serve_args (line 254) | struct double_serve_args
  function retry_notcompress (line 271) | static int retry_notcompress(void)
  type double_serve_args (line 277) | struct double_serve_args
  function retry_accept (line 295) | static int retry_accept(void *ud, ne_request *req, const ne_status *st)
  function retry_compress (line 316) | static int retry_compress(void)
  function reader_abort (line 324) | static int reader_abort(void *ud, const char *buf, size_t len)
  function compress_abort (line 332) | static int compress_abort(void)

FILE: test/largefile.c
  function make_sparse_file (line 47) | static int make_sparse_file(void)
  function serve_check_body (line 62) | static int serve_check_body(ne_socket *sock, void *userdata)
  function send_high_offset (line 81) | static int send_high_offset(void)
  function serve_large_response (line 113) | static int serve_large_response(ne_socket *sock, void *ud)
  function read_large_response (line 144) | static int read_large_response(void)

FILE: test/lock.c
  type ne_lock_scope (line 47) | enum ne_lock_scope
  type ne_lock_scope (line 76) | enum ne_lock_scope
  type ne_lock (line 96) | struct ne_lock
  type ne_lock (line 117) | struct ne_lock
  type ne_lock (line 137) | struct ne_lock
  type ne_lock_scope (line 138) | enum ne_lock_scope
  type ne_lock (line 140) | struct ne_lock
  function store_single (line 154) | static int store_single(void)
  function store_several (line 189) | static int store_several(void)
  function fake_session (line 237) | static int fake_session(ne_session **sess, server_fn fn, void *userdata)
  function lock_timeout (line 244) | static int lock_timeout(void)
  function lock_long_timeout (line 280) | static int lock_long_timeout(void)
  function got_if_header (line 312) | static void got_if_header(char *value)
  function serve_verify_if (line 320) | static int serve_verify_if(ne_socket *sock, void *userdata)
  function do_request (line 343) | static int do_request(ne_session *sess, const char *path, int depth,
  function submit_test2 (line 378) | static int submit_test2(const char *lockpath, int lockdepth,
  function submit_test (line 426) | static int submit_test(const char *lockpath, int lockdepth,
  function if_simple (line 436) | static int if_simple(void)
  function if_under_infinite (line 441) | static int if_under_infinite(void)
  function if_infinite_over (line 446) | static int if_infinite_over(void)
  function if_child (line 451) | static int if_child(void)
  function if_covered_child (line 461) | static int if_covered_child(void)
  function if_sharepoint (line 466) | static int if_sharepoint(void)
  function if_movefrom (line 472) | static int if_movefrom(void)
  function serve_discovery (line 477) | static int serve_discovery(ne_socket *sock, void *userdata)
  type result_args (line 491) | struct result_args {
  function lock_compare (line 497) | static int lock_compare(const char *ctx,
  function discover_result (line 514) | static void discover_result(void *userdata, const struct ne_lock *lk,
  function discover (line 532) | static int discover(void)
  function lock_shared (line 573) | static int lock_shared(void)
  function dummy_discover (line 622) | static void dummy_discover(void *userdata, const struct ne_lock *lock,
  function fail_discover (line 629) | static int fail_discover(void)
  function no_creds (line 649) | static int no_creds(void *ud, const char *realm, int attempt,
  function fail_lockauth (line 655) | static int fail_lockauth(void)
  function fail_noheader (line 692) | static int fail_noheader(void)

FILE: test/oldacl.c
  function test_acl (line 29) | static int test_acl(const char *uri, ne_acl_entry *es, int nume)
  function grant_all (line 42) | static int grant_all(void)
  function deny_all (line 54) | static int deny_all(void)
  function deny_one (line 66) | static int deny_one(void)
  function deny_byprop (line 79) | static int deny_byprop(void)

FILE: test/props.c
  function patch_simple (line 42) | static int patch_simple(void)
  function dummy_results (line 61) | static void dummy_results(void *ud, const ne_uri *uri,
  function regress (line 68) | static int regress(void)
  function patch_regress (line 105) | static int patch_regress(void)
  function simple_iterator (line 139) | static int simple_iterator(void *vbuf, const ne_propname *name,
  function simple_results (line 159) | static void simple_results(void *buf, const ne_uri *uri,
  function diffcmp (line 169) | static int diffcmp(const char *expected, const char *actual)
  function pf_destructor (line 205) | static void pf_destructor(void *userdata, void *private)
  type pftype (line 219) | enum pftype {
  function run_propfind (line 226) | static int run_propfind(const ne_propname *props, char *resp,
  function propfind (line 273) | static int propfind(void)
  function unbounded_response (line 382) | static int unbounded_response(const char *header, const char *repeats)
  function unbounded_propstats (line 398) | static int unbounded_propstats(void)
  function unbounded_props (line 407) | static int unbounded_props(void)

FILE: test/redirect.c
  function process_redir (line 40) | static int process_redir(ne_session *sess, const char *path,
  function check_redir (line 51) | static int check_redir(int status_code, const char *location,
  function redirects (line 125) | static int redirects(void)
  function no_redirect (line 176) | static int no_redirect(void)

FILE: test/request.c
  function prepare_request (line 51) | static int prepare_request(server_fn fn, void *ud)
  function finish_request (line 64) | static int finish_request(void)
  function collector (line 78) | static int collector(void *ud, const char *data, size_t len)
  type ne_request (line 85) | typedef ne_request *(*construct_request)(ne_session *sess, void *userdata);
  function ne_request (line 88) | static ne_request *construct_get(ne_session *sess, void *userdata)
  function run_request (line 99) | static int run_request(ne_session *sess, int status,
  function expect_header_value (line 120) | static int expect_header_value(const char *name, const char *value,
  function expect_response (line 156) | static int expect_response(const char *expect, server_fn fn, void *userd...
  function expect_no_body (line 179) | static int expect_no_body(const char *method, const char *resp)
  function reason_phrase (line 207) | static int reason_phrase(void)
  function redirect_error (line 229) | static int redirect_error(void)
  function no_body_304 (line 250) | static int no_body_304(void)
  function no_body_204 (line 256) | static int no_body_204(void)
  function no_body_HEAD (line 262) | static int no_body_HEAD(void)
  function chunk_oversize (line 268) | static int chunk_oversize(void)
  function no_body_chunks (line 297) | static int no_body_chunks(void)
  function serve_twice (line 303) | static int serve_twice(ne_socket *sock, void *userdata)
  function test_persist_p (line 319) | static int test_persist_p(const char *response, const char *body, int pr...
  function test_persist (line 351) | static int test_persist(const char *response, const char *body)
  function persist_http11 (line 356) | static int persist_http11(void)
  function persist_chunked (line 362) | static int persist_chunked(void)
  function persist_http10 (line 368) | static int persist_http10(void)
  function persist_proxy_http10 (line 376) | static int persist_proxy_http10(void)
  function serve_eof (line 385) | static int serve_eof(ne_socket *sock, void *ud)
  function fail_early_eof (line 403) | static int fail_early_eof(const char *resp)
  function fail_eof_continued (line 419) | static int fail_eof_continued(void)
  function fail_eof_headers (line 424) | static int fail_eof_headers(void)
  function fail_eof_chunk (line 429) | static int fail_eof_chunk(void)
  function fail_eof_badclen (line 434) | static int fail_eof_badclen(void)
  function ptimeout_eof (line 442) | static int ptimeout_eof(void)
  function ptimeout_eof2 (line 462) | static int ptimeout_eof2(void)
  function incr_server (line 483) | static int incr_server(ne_socket *sock, void *arg)
  function persist_timeout (line 497) | static int persist_timeout(void)
  function no_persist_http10 (line 531) | static int no_persist_http10(void)
  function response_bodies (line 556) | static int response_bodies(void)
  function response_headers (line 620) | static int response_headers(void)
  function response_header_nul (line 682) | static int response_header_nul(void)
  function post_send_retry (line 694) | static int post_send_retry(ne_request *req, void *userdata,
  function reset_headers (line 702) | static int reset_headers(void)
  function iterate_none (line 731) | static int iterate_none(void)
  function iterate_test (line 756) | static int iterate_test(int trailer, request_iterator *iterator)
  function iterate_many (line 813) | static int iterate_many(void)
  type s1xx_args (line 819) | struct s1xx_args {
  function serve_1xx (line 824) | static int serve_1xx(ne_socket *sock, void *ud)
  function skip_interim_1xx (line 846) | static int skip_interim_1xx(void)
  function skip_many_1xx (line 854) | static int skip_many_1xx(void)
  function skip_1xx_hdrs (line 862) | static int skip_1xx_hdrs(void)
  function serve_100_once (line 874) | static int serve_100_once(ne_socket *sock, void *ud)
  function expect_100_once (line 887) | static int expect_100_once(void)
  function expect_100_nobody (line 908) | static int expect_100_nobody(void)
  type body (line 923) | struct body {
  function want_body (line 928) | static int want_body(ne_socket *sock, void *userdata)
  function provide_body (line 952) | static ssize_t provide_body(void *userdata, char *buf, size_t buflen)
  function send_bodies (line 970) | static int send_bodies(void)
  function fail_request_with_error (line 1019) | static int fail_request_with_error(int with_body, server_fn fn, void *ud,
  function invalid_response_gives_error (line 1068) | static int invalid_response_gives_error(const char *resp, const char *er...
  function fail_request (line 1075) | static int fail_request(int with_body, server_fn fn, void *ud, int forever)
  function unbounded_headers (line 1080) | static int unbounded_headers(void)
  function blank_response (line 1086) | static int blank_response(void)
  function serve_non_http (line 1091) | static int serve_non_http(ne_socket *sock, void *ud)
  function not_http (line 1100) | static int not_http(void)
  function unbounded_folding (line 1105) | static int unbounded_folding(void)
  function serve_close (line 1112) | static int serve_close(ne_socket *sock, void *ud)
  function is_alive (line 1119) | static int is_alive(int port)
  function closed_connection (line 1141) | static int closed_connection(void)
  function serve_close2 (line 1156) | static int serve_close2(ne_socket *sock, void *userdata)
  function close_not_retried (line 1171) | static int close_not_retried(void)
  function s_progress (line 1195) | static void s_progress(void *userdata, ne_off_t prog, ne_off_t total)
  function provide_progress (line 1233) | static ssize_t provide_progress(void *userdata, char *buf, size_t bufsiz)
  function send_progress (line 1246) | static int send_progress(void)
  function read_timeout (line 1270) | static int read_timeout(void)
  function fail_noserver (line 1303) | static int fail_noserver(const char *hostname, unsigned int port, int code)
  function fail_lookup (line 1316) | static int fail_lookup(void)
  function fail_double_lookup (line 1323) | static int fail_double_lookup(void)
  function fail_connect (line 1334) | static int fail_connect(void)
  function proxy_no_resolve (line 1341) | static int proxy_no_resolve(void)
  function fail_chunksize (line 1360) | static int fail_chunksize(void)
  function abort_respbody (line 1369) | static int abort_respbody(void)
  function serve_then_abort (line 1392) | static int serve_then_abort(ne_socket *sock, void *ud)
  function retry_after_abort (line 1410) | static int retry_after_abort(void)
  function fail_statusline (line 1438) | static int fail_statusline(void)
  function fail_long_header (line 1457) | static int fail_long_header(void)
  function fail_on_invalid (line 1474) | static int fail_on_invalid(void)
  function versions (line 1555) | static int versions(void)
  type cr_args (line 1579) | struct cr_args {
  function hk_createreq (line 1584) | static void hk_createreq(ne_request *req, void *userdata,
  function hook_create_req (line 1599) | static int hook_create_req(void)
  function serve_check_method (line 1642) | static int serve_check_method(ne_socket *sock, void *ud)
  function dup_method (line 1659) | static int dup_method(void)
  function abortive_reader (line 1677) | static int abortive_reader(void *userdata, const char *buf, size_t len)
  function abort_reader (line 1689) | static int abort_reader(void)
  function send_bad_offset (line 1716) | static int send_bad_offset(void)
  function thook_create_req (line 1751) | static void thook_create_req(ne_request *req, void *userdata,
  function hook_pre_send (line 1759) | static void hook_pre_send(ne_request *req, void *userdata,
  function hook_post_headers (line 1780) | static void hook_post_headers(ne_request *req, void *userdata,
  function hook_post_send (line 1790) | static int hook_post_send(ne_request *req, void *userdata,
  function hook_destroy_req (line 1801) | static void hook_destroy_req(ne_request *req, void *userdata)
  function hook_destroy_sess (line 1808) | static void hook_destroy_sess(void *userdata)
  function hook_close_conn (line 1815) | static void hook_close_conn(void *userdata)
  function hooks (line 1822) | static int hooks(void)
  function hook_self_destroy_req (line 1902) | static void hook_self_destroy_req(ne_request *req, void *userdata)
  function hook_self_destroy (line 1910) | static int hook_self_destroy(void)
  function icy_protocol (line 1923) | static int icy_protocol(void)
  function status (line 1938) | static int status(void)
  function status_chunked (line 1975) | static int status_chunked(void)
  function local_addr (line 2019) | static int local_addr(void)
  function dereg_progress (line 2039) | static int dereg_progress(void)
  function addrlist (line 2053) | static int addrlist(void)
  function socks_proxy (line 2074) | static int socks_proxy(void)
  function socks_v4_proxy (line 2095) | static int socks_v4_proxy(void)
  function serve_mirror (line 2120) | static int serve_mirror(ne_socket *sock, void *userdata)
  function send_length (line 2150) | static int send_length(void)
  function socks_fail (line 2178) | static int socks_fail(void)
  function safe_flags (line 2209) | static int safe_flags(void)
  function fail_excess_1xx (line 2225) | static int fail_excess_1xx(void)
  function serve_check_reqline (line 2232) | static int serve_check_reqline(ne_socket *sock, void *userdata)
  function target_forms (line 2248) | static int target_forms(void)
  function test_interim (line 2275) | static void test_interim(void *userdata, ne_request *req, const ne_statu...
  function interims (line 2288) | static int interims(void)
  function retry_408 (line 2320) | static int retry_408(void)
  function dont_retry_408 (line 2343) | static int dont_retry_408(void)
  function ipv6_host_checker (line 2362) | static void ipv6_host_checker(char *value)
  function serve_v6_check (line 2372) | static int serve_v6_check(ne_socket *sock, void *ud)
  function ipv6_literal (line 2391) | static int ipv6_literal(void)
  function targets (line 2403) | static int targets(void)
  function retry_after (line 2449) | static int retry_after(void)

FILE: test/resolve.c
  function main (line 27) | int main(int argc, char **argv)

FILE: test/session.c
  function fill_uri (line 37) | static int fill_uri(void)
  function fill_proxy_uri (line 71) | static int fill_proxy_uri(void)
  function match_hostport (line 95) | static int match_hostport(const char *scheme, const char *hostname, int ...
  function hostports (line 106) | static int hostports(void)
  function errors (line 133) | static int errors(void)
  function privates (line 153) | static int privates(void)
  function get_scheme (line 174) | static int get_scheme(void)
  function flags (line 191) | static int flags(void)
  function proxies (line 208) | static int proxies(void)
  function tls_names (line 220) | static int tls_names(void)

FILE: test/skeleton.c
  function foo (line 39) | static int foo(void)

FILE: test/socket.c
  function multi_init (line 61) | static int multi_init(void)
  function do_connect (line 86) | static int do_connect(ne_socket **sock, const ne_inet_addr *addr, unsign...
  function close_and_wait (line 101) | static int close_and_wait(ne_socket *sock)
  function init_ssl (line 112) | static int init_ssl(void)
  function resolve (line 140) | static int resolve(void)
  function serve_close (line 147) | static int serve_close(ne_socket *sock, void *ud)
  type serve_pair (line 153) | struct serve_pair {
  function wrap_serve (line 158) | static int wrap_serve(ne_socket *sock, void *ud)
  function beginc (line 171) | static int beginc(ne_socket **sock, ne_ssl_context *ctx, server_fn fn, v...
  function begin (line 184) | static int begin(ne_socket **sock, server_fn fn, void *ud)
  function begin (line 191) | static int begin(ne_socket **sock, server_fn fn, void *ud)
  function resolve_numeric (line 199) | static int resolve_numeric(void)
  function resolve_ipv6 (line 214) | static int resolve_ipv6(void)
  function check_is_raw127 (line 236) | static int check_is_raw127(const ne_inet_addr *ia)
  function addr_make_v4 (line 249) | static int addr_make_v4(void)
  function parse_v4 (line 267) | static int parse_v4(void)
  function addr_make_v6 (line 281) | static int addr_make_v6(void)
  function addr_compare (line 338) | static int addr_compare(void)
  function addr_put (line 378) | static int addr_put(void)
  function addr_reverse (line 403) | static int addr_reverse(void)
  function addr_canonical (line 442) | static int addr_canonical(void)
  function addr_failures (line 460) | static int addr_failures(void)
  function just_connect (line 492) | static int just_connect(void)
  function addr_connect (line 503) | static int addr_connect(void)
  function addr_peer (line 519) | static int addr_peer(void)
  function expect_close (line 548) | static int expect_close(ne_socket *sock)
  function good_close (line 557) | static int good_close(ne_socket *sock)
  function finish (line 566) | static int finish(ne_socket *sock, int eof)
  function expect_peek_close (line 577) | static int expect_peek_close(ne_socket *sock)
  function read_close (line 585) | static int read_close(void)
  function open_close (line 596) | static int open_close(void)
  function peek_close (line 605) | static int peek_close(void)
  function peek_expect (line 619) | static int peek_expect(ne_socket *sock, const char *str, size_t len)
  function read_expect (line 636) | static int read_expect(ne_socket *sock, const char *str, size_t len)
  function fullread_expect (line 649) | static int fullread_expect(ne_socket *sock, const char *str, size_t len)
  function single_read (line 667) | static int single_read(void)
  function single_peek (line 681) | static int single_peek(void)
  function small_reads (line 693) | static int small_reads(void)
  function read_and_peek (line 714) | static int read_and_peek(void)
  function larger_read (line 736) | static int larger_read(void)
  function line_expect (line 752) | static int line_expect(ne_socket *sock, const char *line)
  function line_simple (line 769) | static int line_simple(void)
  function line_closure (line 781) | static int line_closure(void)
  function line_empty (line 799) | static int line_empty(void)
  function line_toolong (line 811) | static int line_toolong(void)
  function line_overflow (line 828) | static int line_overflow(void)
  function line_mingle (line 847) | static int line_mingle(void)
  function line_chunked (line 864) | static int line_chunked(void)
  function line_long_chunked (line 876) | static int line_long_chunked(void)
  function to_begin (line 898) | static int to_begin(ne_socket **sock)
  function to_end (line 906) | static int to_end(ne_socket *sock)
  function connect_timeout (line 929) | static int connect_timeout(void)
  function peek_timeout (line 946) | static int peek_timeout(void)
  function read_timeout (line 953) | static int read_timeout(void)
  function readline_timeout (line 960) | static int readline_timeout(void)
  function fullread_timeout (line 967) | static int fullread_timeout(void)
  function serve_expect (line 974) | static int serve_expect(ne_socket *sock, void *ud)
  function small_writes (line 997) | static int small_writes(void)
  function large_writes (line 1009) | static int large_writes(void)
  function full_writev (line 1029) | static int full_writev(ne_socket *sock, struct ne_iovec *vec, int count)
  function large_writev (line 1040) | static int large_writev(void)
  function echo_server (line 1067) | static int echo_server(ne_socket *sock, void *ud)
  function echo_expect (line 1085) | static int echo_expect(ne_socket *sock, const char *line)
  function echo_lines (line 1093) | static int echo_lines(void)
  function serve_wait_close (line 1104) | static int serve_wait_close(ne_socket *sock, void *ud)
  function ssl_shutdown (line 1112) | static int ssl_shutdown(void)
  function ssl_closure (line 1141) | static int ssl_closure(void)
  function serve_truncate (line 1159) | static int serve_truncate(ne_socket *sock, void *userdata)
  function ssl_truncate (line 1169) | static int ssl_truncate(void)
  function serve_reset (line 1187) | static int serve_reset(ne_socket *sock, void *ud)
  function write_reset (line 1198) | static int write_reset(void)
  function read_reset (line 1219) | static int read_reset(void)
  function expect_block_timeout (line 1238) | static int expect_block_timeout(ne_socket *sock, int timeout, const char...
  function blocking (line 1248) | static int blocking(void)
  function block_timeout (line 1274) | static int block_timeout(void)
  function serve_shutdown (line 1283) | static int serve_shutdown(ne_socket *sock, void *userdata)
  function bidi (line 1291) | static int bidi(void)
  function ssl_session_id (line 1307) | static int ssl_session_id(void)
  function serve_ppeer (line 1362) | static int serve_ppeer(ne_socket *sock, void *ud)
  function try_prebind (line 1382) | static int try_prebind(int addr, int port)
  function prebind (line 1423) | static int prebind(void)
  function serve_cipher (line 1432) | static int serve_cipher(ne_socket *sock, void *ud)
  function cipher (line 1444) | static int cipher(void)
  function protocols (line 1473) | static int protocols(void)
  function serve_protocol (line 1491) | static int serve_protocol(ne_socket *sock, void *ud)
  function proto_tls12 (line 1503) | static int proto_tls12(void)
  function context_untrusted (line 1519) | static int context_untrusted(void)
  function error (line 1535) | static int error(void)
  function begin_socks (line 1547) | static int begin_socks(ne_socket **sock, struct socks_server *srv,
  function socks_proxy (line 1558) | static int socks_proxy(void)
  function fail_socks (line 1617) | static int fail_socks(void)
  function scopes (line 1681) | static int scopes(void)

FILE: test/ssl.c
  type ssl_server_args (line 77) | struct ssl_server_args {
  function ssl_server (line 104) | static int ssl_server(ne_socket *sock, void *userdata)
  function make_ssl_session_port (line 212) | static int make_ssl_session_port(ne_session **sess,
  function make_ssl_session (line 220) | static int make_ssl_session(ne_session **sess, const char *hostname,
  function multi_ssl_session (line 230) | static int multi_ssl_session(int count, ne_session **sess,
  function load_and_trust_cert (line 239) | static int load_and_trust_cert(ne_session *sess, const char *ca_cert)
  function make_ssl_request (line 248) | static int make_ssl_request(struct ssl_server_args *args,
  function init (line 265) | static int init(void)
  function load_server_certs (line 319) | static int load_server_certs(void)
  function trust_default_ca (line 336) | static int trust_default_ca(void)
  function load_client_cert (line 347) | static int load_client_cert(void)
  function clicert_import (line 427) | static int clicert_import(void)
  function accept_signed_cert_for_hostname (line 446) | static int accept_signed_cert_for_hostname(char *cert, const char *hostn...
  function accept_signed_cert (line 455) | static int accept_signed_cert(char *cert)
  function simple (line 460) | static int simple(void)
  function simple_eof (line 466) | static int simple_eof(void)
  function intermediary (line 478) | static int intermediary(void)
  function empty_truncated_eof (line 485) | static int empty_truncated_eof(void)
  function just_serve_string (line 496) | static int just_serve_string(ne_socket *sock, void *userdata)
  function fail_not_ssl (line 504) | static int fail_not_ssl(void)
  function wildcard_match (line 516) | static int wildcard_match(void)
  function wildcard_match_altname (line 523) | static int wildcard_match_altname(void)
  function caseless_match (line 531) | static int caseless_match(void)
  function subject_altname (line 538) | static int subject_altname(void)
  function two_subject_altname (line 544) | static int two_subject_altname(void)
  function two_subject_altname2 (line 549) | static int two_subject_altname2(void)
  function notdns_altname (line 556) | static int notdns_altname(void)
  function ipaddr_altname (line 561) | static int ipaddr_altname(void)
  function multi_commonName (line 567) | static int multi_commonName(void)
  function commonName_first (line 574) | static int commonName_first(void)
  function check_dname (line 579) | static int check_dname(const ne_ssl_dname *dn, const char *expected,
  function check_cert_dnames (line 600) | static int check_cert_dnames(const ne_ssl_certificate *cert,
  function check_cert (line 610) | static int check_cert(void *userdata, int fs, const ne_ssl_certificate *...
  function parse_cert (line 623) | static int parse_cert(void)
  function check_chain (line 644) | static int check_chain(void *userdata, int fs, const ne_ssl_certificate ...
  function parse_chain (line 670) | static int parse_chain(void)
  function count_vfy (line 690) | static int count_vfy(void *userdata, int fs, const ne_ssl_certificate *c)
  function no_verify (line 697) | static int no_verify(void)
  function cache_verify (line 711) | static int cache_verify(void)
  function get_failures (line 733) | static int get_failures(void *userdata, int fs, const ne_ssl_certificate...
  function fail_ssl_request_with_error2 (line 753) | static int fail_ssl_request_with_error2(char *cert, char *key, char *cac...
  function fail_ssl_request_with_error (line 809) | static int fail_ssl_request_with_error(char *cert, char *cacert, const c...
  function fail_ssl_request (line 821) | static int fail_ssl_request(char *cert, char *cacert, const char *host,
  function fail_wrongCN (line 833) | static int fail_wrongCN(void)
  function fail_nul_cn (line 845) | static int fail_nul_cn(void)
  function fail_nul_san (line 858) | static int fail_nul_san(void)
  function fail_expired (line 875) | static int fail_expired(void)
  function fail_notvalid (line 883) | static int fail_notvalid(void)
  function fail_untrusted_ca (line 893) | static int fail_untrusted_ca(void)
  function fail_self_signed (line 900) | static int fail_self_signed(void)
  function fail_missing_CN (line 908) | static int fail_missing_CN(void)
  function fail_bad_ipaltname (line 928) | static int fail_bad_ipaltname(void)
  function fail_host_ipaltname (line 936) | static int fail_host_ipaltname(void)
  function fail_wildcard (line 942) | static int fail_wildcard(void)
  function fail_wildcard_ip (line 948) | static int fail_wildcard_ip(void)
  function fail_ca_expired (line 954) | static int fail_ca_expired(void)
  function fail_ca_notyetvalid (line 962) | static int fail_ca_notyetvalid(void)
  function session_cache (line 969) | static int session_cache(void)
  function ccert_provider (line 993) | static void ccert_provider(void *userdata, ne_session *sess,
  function client_cert_provided (line 1001) | static int client_cert_provided(void)
  function cc_check_dnames (line 1026) | static void cc_check_dnames(void *userdata, ne_session *sess,
  function cc_provided_dnames (line 1062) | static int cc_provided_dnames(void)
  function client_cert_pkcs12 (line 1087) | static int client_cert_pkcs12(void)
  function client_cert_ca (line 1107) | static int client_cert_ca(void)
  function ccert_unencrypted (line 1132) | static int ccert_unencrypted(void)
  function no_client_cert (line 1171) | static int no_client_cert(void)
  function tunnel_header (line 1208) | static void tunnel_header(char *value)
  function serve_tunnel (line 1214) | static int serve_tunnel(ne_socket *sock, void *ud)
  function fail_tunnel (line 1239) | static int fail_tunnel(void)
  function proxy_tunnel (line 1253) | static int proxy_tunnel(void)
  type tunnel_args (line 1265) | struct tunnel_args {
  function serve_auth_tunnel (line 1273) | static int serve_auth_tunnel(ne_socket *sock, void *ud)
  function apt_creds (line 1303) | static int apt_creds(void *userdata, const char *realm, int attempt,
  function auth_proxy_tunnel (line 1314) | static int auth_proxy_tunnel(void)
  function auth_tunnel_creds (line 1343) | static int auth_tunnel_creds(void)
  function auth_tunnel_fail (line 1371) | static int auth_tunnel_fail(void)
  function cert_fingerprint (line 1409) | static int cert_fingerprint(void)
  function cert_hdigests (line 1428) | static int cert_hdigests(void)
  function check_identity (line 1475) | static int check_identity(const char *fname, const char *identity)
  function cert_identities (line 1499) | static int cert_identities(void)
  function nulcn_identity (line 1520) | static int nulcn_identity(void)
  function check_validity (line 1536) | static int check_validity(const char *fname,
  function cert_validity (line 1562) | static int cert_validity(void)
  function dname_compare (line 1576) | static int dname_compare(void)
  function dname_readable (line 1613) | static int dname_readable(void)
  function cert_compare (line 1639) | static int cert_compare(void)
  function flatten_pem (line 1661) | static int flatten_pem(const char *fname, char **out)
  function check_exported_data (line 1698) | static int check_exported_data(const char *actual, const char *expected)
  function import_export (line 1713) | static int import_export(void)
  function read_write (line 1752) | static int read_write(void)
  function verify_cache (line 1777) | static int verify_cache(void *userdata, int fs,
  function cache_cert (line 1792) | static int cache_cert(void)
  function nonssl_trust (line 1828) | static int nonssl_trust(void)
  type pindata (line 1842) | struct pindata {
  function pkcs11_pin (line 1848) | static int pkcs11_pin(void *userdata, int attempt,
  function nss_pkcs11_test (line 1873) | static int nss_pkcs11_test(const char *dbname)
  function pkcs11 (line 1920) | static int pkcs11(void)
  function protovers (line 1926) | static int protovers(void)
  function notifier (line 1945) | static int notifier(void)
  function clicert_uri (line 1972) | static int clicert_uri(void)

FILE: test/string-tests.c
  function simple (line 45) | static int simple(void) {
  function buf_concat (line 55) | static int buf_concat(void)
  function buf_concat2 (line 66) | static int buf_concat2(void)
  function buf_concat3 (line 79) | static int buf_concat3(void)
  function append (line 91) | static int append(void)
  function grow (line 109) | static int grow(void)
  function alter (line 120) | static int alter(void) {
  function token1 (line 167) | static int token1(void)
  function token2 (line 177) | static int token2(void)
  function nulls (line 187) | static int nulls(void)
  function empty (line 205) | static int empty(void)
  function quoted (line 218) | static int quoted(void)
  function badquotes (line 232) | static int badquotes(void)
  function shave (line 252) | static int shave(void)
  function shave_regress (line 267) | static int shave_regress(void)
  function combo (line 298) | static int combo(void)
  function concat (line 309) | static int concat(void)
  function str_errors (line 322) | static int str_errors(void)
  function strnzcpy (line 345) | static int strnzcpy(void)
  function cleaner (line 361) | static int cleaner(void)
  function b64_check (line 390) | static int b64_check(const unsigned char *raw, size_t len,
  function base64 (line 423) | static int base64(void)
  function unbase64 (line 462) | static int unbase64(void)
  function printing (line 482) | static int printing(void)
  function casecmp (line 515) | static int casecmp(void)
  function casencmp (line 556) | static int casencmp(void)
  function buf_print (line 600) | static int buf_print(void)
  function qappend (line 616) | static int qappend(void)
  function strhash (line 675) | static int strhash(void)
  function strhash_sha_256 (line 690) | static int strhash_sha_256(void)
  function strhash_sha_512 (line 722) | static int strhash_sha_512(void)
  function strhash_sha_512_256 (line 738) | static int strhash_sha_512_256(void)
  function strhash_sha1 (line 763) | static int strhash_sha1(void)
  function strparam (line 791) | static int strparam(void)
  function strhextoul (line 824) | static int strhextoul(void)
  function strlower (line 876) | static int strlower(void)
  function strupper (line 899) | static int strupper(void)
  function mknonce (line 926) | static int mknonce(void)
  function mknonce_uniqueness (line 944) | static int mknonce_uniqueness(void)

FILE: test/stubs.c
  function sd_reader (line 55) | static int sd_reader(void *ud, const char *block, size_t len)
  function stub_decompress (line 65) | static int stub_decompress(void)
  function stub_ssl (line 97) | static int stub_ssl(void)
  function stub_pkcs11 (line 181) | static int stub_pkcs11(void)
  function null_test (line 209) | static int null_test(void) { return OK; }

FILE: test/twooh7.c
  function simples (line 55) | static int simples(void)
  function tos_status_descr (line 142) | static void tos_status_descr(ne_buffer *buf, const ne_status *status,
  function tos_endresp (line 155) | static void tos_endresp(void *buf, void *response,
  function tos_endpstat (line 174) | static void tos_endpstat(void *buf, void *href,
  type propctx (line 183) | struct propctx {
  function tos_startprop (line 190) | static int tos_startprop(void *userdata, int parent,
  function tos_cdata (line 212) | static int tos_cdata(void *userdata, int state,
  function tos_endprop (line 223) | static int tos_endprop(void *userdata, int state,
  function run_207_response (line 232) | static int run_207_response(const char *resp, const char *expected)
  function two_oh_seven (line 280) | static int two_oh_seven(void)

FILE: test/uri-tests.c
  function simple (line 35) | static int simple(void)
  function simple_ssl (line 48) | static int simple_ssl(void)
  function no_path (line 58) | static int no_path(void)
  function escapes (line 67) | static int escapes(void)
  function parents (line 116) | static int parents(void)
  function compares (line 149) | static int compares(void)
  function cmp (line 167) | static int cmp(void)
  function children (line 251) | static int children(void)
  function slash (line 260) | static int slash(void)
  function default_port (line 272) | static int default_port(void)
  function parse (line 280) | static int parse(void)
  function failparse (line 381) | static int failparse(void)
  function unparse (line 407) | static int unparse(void)
  function resolve (line 450) | static int resolve(void)
  function copy (line 552) | static int copy(void)

FILE: test/util-socks.c
  function read_socks_string (line 47) | static int read_socks_string(ne_socket *sock, const char *ctx,
  function read_socks_byte (line 67) | static int read_socks_byte(ne_socket *sock, const char *ctx,
  function expect_socks_byte (line 75) | static int expect_socks_byte(ne_socket *sock, const char *ctx,
  function read_socks_0string (line 87) | static int read_socks_0string(ne_socket *sock, const char *ctx,
  function socks_server (line 106) | int socks_server(ne_socket *sock, void *userdata)

FILE: test/util-tests.c
  function status_lines (line 89) | static int status_lines(void)
  type ne_md5_ctx (line 118) | struct ne_md5_ctx
  function md5 (line 138) | static int md5(void)
  function md5_alignment (line 162) | static int md5_alignment(void)
  function md5_read (line 181) | static int md5_read(void)
  function parse_dates (line 225) | static int parse_dates(void)
  function bad_dates (line 257) | static int bad_dates(void)
  function versioning (line 290) | static int versioning(void)
  function version_string (line 323) | static int version_string(void)
  function version_library (line 337) | static int version_library(void)
  function support (line 351) | static int support(void)

FILE: test/utils.c
  function serve_response (line 43) | int serve_response(ne_socket *s, const char *response)
  function single_serve_string (line 51) | int single_serve_string(ne_socket *s, void *userdata)
  function double_serve_sstring (line 57) | int double_serve_sstring(ne_socket *s, void *userdata)
  function serve_buffer (line 81) | int serve_buffer(ne_socket *s, void *userdata)
  function sleepy_server (line 90) | int sleepy_server(ne_socket *sock, void *userdata)
  function many_serve_string (line 96) | int many_serve_string(ne_socket *s, void *userdata)
  function any_request (line 109) | int any_request(ne_session *sess, const char *uri)
  function any_2xx_request_method (line 117) | int any_2xx_request_method(ne_session *sess, const char *method, const c...
  function any_2xx_request (line 137) | int any_2xx_request(ne_session *sess, const char *uri)
  function any_2xx_request_body (line 142) | int any_2xx_request_body(ne_session *sess, const char *uri)
  function serve_sstring (line 157) | int serve_sstring(ne_socket *sock, void *ud)
  function serve_sstring_slowly (line 169) | int serve_sstring_slowly(ne_socket *sock, void *ud)
  function serve_infinite (line 185) | int serve_infinite(ne_socket *sock, void *ud)
  function full_write (line 199) | int full_write(ne_socket *sock, const char *data, size_t len)
  function multi_session_server (line 218) | int multi_session_server(ne_session **sess, const char *scheme, int count,
  function get_session_port (line 235) | unsigned int get_session_port(void)
  function session_server (line 240) | int session_server(ne_session **sess, server_fn fn, void *userdata)
  function proxied_multi_session_server (line 245) | int proxied_multi_session_server(int count, ne_session **sess,
  function proxied_session_server (line 262) | int proxied_session_server(ne_session **sess, const char *scheme,
  function fakesess_destroy (line 270) | static void fakesess_destroy(void *userdata)
  function fakeproxied_session_server (line 277) | int fakeproxied_session_server(ne_session **sess, const char *scheme,
  function fakeproxied_multi_session_server (line 285) | int fakeproxied_multi_session_server(int count,
  function socksproxied_session_server (line 309) | int socksproxied_session_server(ne_session **sess, struct socks_server *...
  function make_session (line 323) | int make_session(ne_session **sess, server_fn fn, void *ud)
  function file_to_buffer (line 328) | int file_to_buffer(const char *filename, ne_buffer *buf)
  function sess_notifier (line 348) | void sess_notifier(void *userdata, ne_session_status status,

FILE: test/utils.h
  type many_serve_args (line 34) | struct many_serve_args {
  type string (line 70) | struct string {
  type double_serve_args (line 75) | struct double_serve_args {
  type infinite (line 92) | struct infinite {
  type socks_server (line 101) | struct socks_server {
  type socks_server (line 166) | struct socks_server

FILE: test/xml.c
  type context (line 43) | struct context {
  function startelm (line 50) | static int startelm(void *userdata, int state,
  function chardata (line 84) | static int chardata(void *userdata, int state, const char *cdata, size_t...
  function endelm (line 91) | static int endelm(void *userdata, int state,
  function startelm_xform (line 101) | static int startelm_xform(void *userdata, int state,
  function endelm_xform (line 111) | static int endelm_xform(void *userdata, int state,
  function startelm_state (line 122) | static int startelm_state(void *userdata, int parent,
  function endelm_state (line 148) | static int endelm_state(void *userdata, int state,
  function startelm_abort (line 162) | static int startelm_abort(void *userdata, int parent,
  function endelm_abort (line 175) | static int endelm_abort(void *userdata, int state,
  type match_type (line 188) | enum match_type {
  function parse_match (line 196) | static int parse_match(const char *doc, const char *result,
  function matches (line 263) | static int matches(void)
  function mapping (line 383) | static int mapping(void)
  function fail_parse (line 408) | static int fail_parse(void)
  function check_attrib (line 518) | static int check_attrib(ne_xml_parser *p, const char **atts,
  function startelm_attrib (line 544) | static int startelm_attrib(void *userdata, int state,
  function attributes (line 567) | static int attributes(void)
  function errors (line 585) | static int errors(void)

FILE: test/xmlreq.c
  function startelm (line 40) | static int startelm(void *userdata, int state,
  function pc_startelm (line 53) | static int pc_startelm(void *userdata, int state,
  function pc_chardata (line 62) | static int pc_chardata(void *userdata, int state, const char *cdata, siz...
  function parse_for_ctype (line 69) | static int parse_for_ctype(const char *ctype, const char *body, size_t len,
  function success (line 122) | static int success(void)
  function failure (line 146) | static int failure(void)
  function fail_ctype (line 175) | static int fail_ctype(void)
  function types (line 204) | static int types(void)
Condensed preview — 221 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,350K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 550,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/pull_request_template.md",
    "chars": 45,
    "preview": "Fixes XXXX (fixes #NNN)\n\n```\nChangelog:\n\n```\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 3378,
    "preview": "name: Build and test\n\non:\n  push:\n    branches:\n    - master\n    - '*.x'\n    paths-ignore:\n    - 'doc/**'\n    - NEWS\n  p"
  },
  {
    "path": ".github/workflows/sanity.yml",
    "chars": 634,
    "preview": "name: Build sanity and docs checks\n\non:\n  push:\n    branches:\n    - master\n    - '*.x'\n  pull_request:\n    branches:\n   "
  },
  {
    "path": ".gitignore",
    "chars": 536,
    "preview": "/config.h.in\n/config.h\n/configure\n/config.status\n/config.log\n/conftest.c\n/Makefile\n/aclocal.m4\n/*.cache\n/libtool\n/neon-c"
  },
  {
    "path": ".gitleaks.toml",
    "chars": 174,
    "preview": "[allowlist]\ndescription = \"Global Allowlist\"\n\n# Ignore based on any subset of the file path\npaths = [\n    # Ignore the p"
  },
  {
    "path": ".package",
    "chars": 40,
    "preview": "announce-list=neon@lists.manyfish.co.uk\n"
  },
  {
    "path": ".release.sh",
    "chars": 826,
    "preview": "#!/bin/sh\n\nset -ex\n\nmajor=`echo $1 | awk -F. '{print $1;}'`\nminor=`echo $1 | awk -F. '{print $2;}'`\nrelease=`echo $1 | a"
  },
  {
    "path": ".travis.yml",
    "chars": 1365,
    "preview": "language: c\nos: linux\ndist: xenial\naddons:\n  apt:\n    packages:\n      - xmlto\n      - libxml2-dev\n      - libnss3-tools\n"
  },
  {
    "path": "AUTHORS",
    "chars": 468,
    "preview": "neon is Copyright (C) 1999-2007 Joe Orton <joe@manyfish.co.uk>\nPortions are:\nCopyright (C) 1999-2000 Tommi Komulainen <T"
  },
  {
    "path": "INSTALL.win32",
    "chars": 4194,
    "preview": "Building neon on Windows uses a single Nmake neon.mak file.  By\nplacing various parameters on nmake's command line, you "
  },
  {
    "path": "Makefile.in",
    "chars": 6713,
    "preview": "# Copyright (C) 2001-2009 Joe Orton <joe@manyfish.co.uk>\n# Copyright (C) 1994, 1995-8, 1999, 2000 Free Software Foundati"
  },
  {
    "path": "NEWS",
    "chars": 76108,
    "preview": "Changes in release 0.37.1:\n* Bug fixes:\n - fix compile warnings with OpenSSL 4.0.0-alpha1\n - fix NTLM test case failures"
  },
  {
    "path": "README.md",
    "chars": 3342,
    "preview": "\n[![Build and test](https://github.com/notroj/neon/actions/workflows/ci.yml/badge.svg)](https://github.com/notroj/neon/a"
  },
  {
    "path": "THANKS",
    "chars": 997,
    "preview": "Thanks go to the following people for contributing to neon development\nwith code, patches, or good bug reports or sugges"
  },
  {
    "path": "TODO",
    "chars": 1188,
    "preview": "\nTo Do List for neon                                      -*- text -*-\n===================\n\nPlease submit feature reques"
  },
  {
    "path": "autogen.sh",
    "chars": 897,
    "preview": "#!/bin/sh\nrm -f ltconfig ltmain.sh config.cache aclocal.m4 config.guess config.sub\n# remove the autoconf cache\nrm -rf au"
  },
  {
    "path": "config.hw.in",
    "chars": 2845,
    "preview": "/*                                                      -*- c -*-\n   Win32 config.h\n   Copyright (C) 1999-2000, Peter Bo"
  },
  {
    "path": "configure.ac",
    "chars": 6676,
    "preview": "AC_PREREQ(2.58) dnl 2.58 required for AS_HELP_STRING\n\ndnl Extract the version (sans LF) from .version, created at releas"
  },
  {
    "path": "doc/biblio.xml",
    "chars": 3056,
    "preview": "<bibliography id=\"biblio\"> <!-- -*- xml -*- -->\n\n<biblioentry id=\"bib.ssltls\">\n  <abbrev>SSL-and-TLS</abbrev>\n  <title><"
  },
  {
    "path": "doc/feat.xml",
    "chars": 3197,
    "preview": "    <sect1 id=\"features\">\n      <title>Feature list</title>\n\n      <para>The major features of the neon library are as f"
  },
  {
    "path": "doc/html.xsl",
    "chars": 2438,
    "preview": "<?xml version='1.0'?>\n\n<!-- This file wraps around the DocBook HTML XSL stylesheet to customise\n   - some parameters; ad"
  },
  {
    "path": "doc/man.xsl",
    "chars": 1691,
    "preview": "<?xml version='1.0'?>\n\n<!-- This file wraps around the DocBook XSL manpages stylesheet to customise\n   - some parameters"
  },
  {
    "path": "doc/manual.css",
    "chars": 1075,
    "preview": "\np, pre.funcsynopsisinfo { margin-left: 0.4em; margin-right: 0.4em; }\n\nspan.term { margin-left: 0.6em; margin-bottom: 0."
  },
  {
    "path": "doc/manual.xml",
    "chars": 8193,
    "preview": "<?xml version='1.0'?> <!-- -*- nxml -*- -->\n\n<!DOCTYPE book PUBLIC \"-//OASIS//DTD DocBook XML V4.5//EN\"\n  \"http://www.oa"
  },
  {
    "path": "doc/parsing-xml.txt",
    "chars": 5599,
    "preview": "\nRequirements for XML parsing in neon\n------------------------------------\n\nBefore describing the interface given in neo"
  },
  {
    "path": "doc/ref/alloc.xml",
    "chars": 2760,
    "preview": "    <refentry id=\"refalloc\">\n\n      <refmeta>\n\t<refentrytitle>ne_malloc</refentrytitle>\n\t<manvolnum>3</manvolnum>\n      "
  },
  {
    "path": "doc/ref/auth.xml",
    "chars": 3795,
    "preview": "    <refentry id=\"refauth\">\n\n      <refmeta>\n\t<refentrytitle>ne_set_server_auth</refentrytitle>\n\t<manvolnum>3</manvolnum"
  },
  {
    "path": "doc/ref/buf.xml",
    "chars": 1727,
    "preview": "    <refentry id=\"refbuf\">\n\n      <refmeta>\n\t<refentrytitle>ne_buffer</refentrytitle>\n\t<manvolnum>3</manvolnum>\n      </"
  },
  {
    "path": "doc/ref/bufapp.xml",
    "chars": 4774,
    "preview": "    <refentry id=\"refbufapp\">\n\n      <refmeta>\n\t<refentrytitle>ne_buffer_append</refentrytitle>\n\t<manvolnum>3</manvolnum"
  },
  {
    "path": "doc/ref/bufcr.xml",
    "chars": 1517,
    "preview": "    <refentry id=\"refbufcr\">\n\n      <refmeta>\n\t<refentrytitle>ne_buffer_create</refentrytitle>\n\t<manvolnum>3</manvolnum>"
  },
  {
    "path": "doc/ref/bufdest.xml",
    "chars": 2193,
    "preview": "    <refentry id=\"refbufdest\">\n\n      <refmeta>\n\t<refentrytitle>ne_buffer_destroy</refentrytitle>\n\t<manvolnum>3</manvoln"
  },
  {
    "path": "doc/ref/bufutil.xml",
    "chars": 1990,
    "preview": "    <refentry id=\"refbufutil\">\n\n      <refmeta>\n\t<refentrytitle>ne_buffer_clear</refentrytitle>\n\t<manvolnum>3</manvolnum"
  },
  {
    "path": "doc/ref/clicert.xml",
    "chars": 7007,
    "preview": "<refentry id=\"refclicert\">\n\n  <refmeta>\n    <refentrytitle>ne_ssl_client_cert</refentrytitle>\n    <manvolnum>3</manvolnu"
  },
  {
    "path": "doc/ref/config.xml",
    "chars": 3770,
    "preview": "    <refentry id=\"refconfig\">\n\n      <refentryinfo><title>neon</title></refentryinfo>\n\n      <refmeta>\n\t<refentrytitle>n"
  },
  {
    "path": "doc/ref/ctype.xml",
    "chars": 2137,
    "preview": "<refentry id=\"refgetctype\">\n\n  <refmeta>\n    <refentrytitle>ne_get_content_type</refentrytitle>\n    <manvolnum>3</manvol"
  },
  {
    "path": "doc/ref/err.xml",
    "chars": 2505,
    "preview": "    <refentry id=\"referr\">\n\n      <refmeta>\n\t<refentrytitle>ne_get_error</refentrytitle>\n\t<manvolnum>3</manvolnum>\n     "
  },
  {
    "path": "doc/ref/feat.xml",
    "chars": 3634,
    "preview": "<refentry id=\"reffeat\">\n\n  <refmeta>\n    <refentrytitle>ne_has_support</refentrytitle>\n    <manvolnum>3</manvolnum>\n  </"
  },
  {
    "path": "doc/ref/getst.xml",
    "chars": 3826,
    "preview": "    <refentry id=\"refgetst\">\n\n      <refmeta>\n\t<refentrytitle>ne_get_status</refentrytitle>\n\t<manvolnum>3</manvolnum>\n  "
  },
  {
    "path": "doc/ref/hash.xml",
    "chars": 4125,
    "preview": "    <refentry id=\"refhash\">\n\n      <refmeta>\n\t<refentrytitle>ne_strhash</refentrytitle>\n\t<manvolnum>3</manvolnum>\n      "
  },
  {
    "path": "doc/ref/i18n.xml",
    "chars": 2236,
    "preview": "<refentry id=\"refi18n\">\n\n  <refmeta>\n    <refentrytitle>ne_i18n_init</refentrytitle>\n    <manvolnum>3</manvolnum>\n  </re"
  },
  {
    "path": "doc/ref/iaddr.xml",
    "chars": 7869,
    "preview": "<refentry id=\"refiaddr\">\n\n  <refmeta>\n    <refentrytitle>ne_iaddr_make</refentrytitle>\n    <manvolnum>3</manvolnum>\n  </"
  },
  {
    "path": "doc/ref/init.xml",
    "chars": 4721,
    "preview": "<refentry id=\"refsockinit\">\n\n  <refmeta>\n    <refentrytitle>ne_sock_init</refentrytitle>\n    <manvolnum>3</manvolnum>\n  "
  },
  {
    "path": "doc/ref/lower.xml",
    "chars": 1897,
    "preview": "<refentry id=\"reflower\">\n\n  <refmeta>\n    <refentrytitle>ne_strlower</refentrytitle>\n    <manvolnum>3</manvolnum>\n  </re"
  },
  {
    "path": "doc/ref/neon.xml",
    "chars": 10472,
    "preview": "<refentry id=\"refneon\">\n\n  <refmeta>\n    <refentrytitle>neon</refentrytitle>\n    <manvolnum>3</manvolnum>\n  </refmeta>\n\n"
  },
  {
    "path": "doc/ref/nonce.xml",
    "chars": 2280,
    "preview": "<refentry id=\"ne_mknonce\">\n\n  <refmeta>\n    <refentrytitle>ne_mknonce</refentrytitle>\n    <manvolnum>3</manvolnum>\n  </r"
  },
  {
    "path": "doc/ref/opts.xml",
    "chars": 4110,
    "preview": "    <refentry id=\"refopts\">\n\n      <refmeta>\n\t<refentrytitle>ne_set_useragent</refentrytitle>\n\t<manvolnum>3</manvolnum>\n"
  },
  {
    "path": "doc/ref/param.xml",
    "chars": 2570,
    "preview": "    <refentry id=\"refparam\">\n\n      <refmeta>\n\t<refentrytitle>ne_strparam</refentrytitle>\n\t<manvolnum>3</manvolnum>\n    "
  },
  {
    "path": "doc/ref/proxy.xml",
    "chars": 7237,
    "preview": "     <refentry id=\"refproxy\">\n      \n      <refmeta>\n\t<refentrytitle>ne_session_proxy</refentrytitle>\n\t<manvolnum>3</man"
  },
  {
    "path": "doc/ref/redir.xml",
    "chars": 2043,
    "preview": "    <refentry id=\"refred\">\n\n      <refmeta>\n\t<refentrytitle>ne_redirect_register</refentrytitle>\n\t<manvolnum>3</manvolnu"
  },
  {
    "path": "doc/ref/req.xml",
    "chars": 8238,
    "preview": "    <refentry id=\"refreq\">\n\n      <refmeta>\n\t<refentrytitle>ne_request_create</refentrytitle>\n\t<manvolnum>3</manvolnum>\n"
  },
  {
    "path": "doc/ref/reqbody.xml",
    "chars": 5721,
    "preview": "    <refentry id=\"refreqbody\">\n\n      <refmeta>\n\t<refentrytitle>ne_set_request_body_buffer</refentrytitle>\n\t<manvolnum>3"
  },
  {
    "path": "doc/ref/reqflags.xml",
    "chars": 2984,
    "preview": "<refentry id=\"refreqflags\">\n\n  <refmeta>\n    <refentrytitle>ne_set_request_flag</refentrytitle>\n    <manvolnum>3</manvol"
  },
  {
    "path": "doc/ref/reqhdr.xml",
    "chars": 1998,
    "preview": "    <refentry id=\"refreqhdr\">\n\n      <refmeta>\n\t<refentrytitle>ne_add_request_header</refentrytitle>\n\t<manvolnum>3</manv"
  },
  {
    "path": "doc/ref/reqtgt.xml",
    "chars": 2095,
    "preview": "<refentry id=\"refreqtarget\">\n\n  <refmeta>\n    <refentrytitle>ne_get_request_target</refentrytitle>\n    <manvolnum>3</man"
  },
  {
    "path": "doc/ref/resolve.xml",
    "chars": 5857,
    "preview": "<refentry id=\"refresolve\">\n\n  <refmeta>\n    <refentrytitle>ne_addr_resolve</refentrytitle>\n    <manvolnum>3</manvolnum>\n"
  },
  {
    "path": "doc/ref/respbody.xml",
    "chars": 2975,
    "preview": "    <refentry id=\"refrespbody\">\n\n      <refmeta>\n\t<refentrytitle>ne_read_response_to_fd</refentrytitle>\n\t<manvolnum>3</m"
  },
  {
    "path": "doc/ref/resphdr.xml",
    "chars": 5648,
    "preview": "<refentry id=\"refresphdr\">\n\n  <refmeta>\n    <refentrytitle>ne_get_response_header</refentrytitle>\n    <manvolnum>3</manv"
  },
  {
    "path": "doc/ref/sess.xml",
    "chars": 6237,
    "preview": "     <refentry id=\"refsess\">\n      \n      <refmeta>\n\t<refentrytitle>ne_session_create</refentrytitle>\n\t<manvolnum>3</man"
  },
  {
    "path": "doc/ref/sessflags.xml",
    "chars": 4350,
    "preview": "<refentry id=\"refsessflags\">\n\n  <refmeta>\n    <refentrytitle>ne_set_session_flag</refentrytitle>\n    <manvolnum>3</manvo"
  },
  {
    "path": "doc/ref/shave.xml",
    "chars": 1270,
    "preview": "    <refentry id=\"refshave\">\n\n      <refmeta>\n\t<refentrytitle>ne_shave</refentrytitle>\n\t<manvolnum>3</manvolnum>\n      <"
  },
  {
    "path": "doc/ref/sockssl.xml",
    "chars": 6601,
    "preview": "<refentry id=\"refsockssl\">\n\n  <refmeta>\n    <refentrytitle>ne_sock_handshake</refentrytitle>\n    <manvolnum>3</manvolnum"
  },
  {
    "path": "doc/ref/sslca.xml",
    "chars": 2455,
    "preview": "    <refentry id=\"refsslca\">\n\n      <refmeta>\n\t<refentrytitle>ne_ssl_load_ca</refentrytitle>\n\t<manvolnum>3</manvolnum>\n "
  },
  {
    "path": "doc/ref/sslcert.xml",
    "chars": 3736,
    "preview": "<refentry id=\"refcert\">\n\n  <refmeta>\n    <refentrytitle>ne_ssl_cert_identity</refentrytitle>\n    <manvolnum>3</manvolnum"
  },
  {
    "path": "doc/ref/sslcert2.xml",
    "chars": 5036,
    "preview": "<refentry id=\"refsslcert2\">\n\n  <refmeta>\n    <refentrytitle>ne_ssl_cert_cmp</refentrytitle>\n    <manvolnum>3</manvolnum>"
  },
  {
    "path": "doc/ref/sslcertio.xml",
    "chars": 3481,
    "preview": "<refentry id=\"refsslcertio\">\n\n  <refmeta>\n    <refentrytitle>ne_ssl_cert_read</refentrytitle>\n    <manvolnum>3</manvolnu"
  },
  {
    "path": "doc/ref/sslctx.xml",
    "chars": 8043,
    "preview": "<refentry id=\"refsslctx\">\n\n  <refmeta>\n    <refentrytitle>ne_ssl_context_create</refentrytitle>\n    <manvolnum>3</manvol"
  },
  {
    "path": "doc/ref/ssldname.xml",
    "chars": 2020,
    "preview": "\n    <refentry id=\"refssldname\">\n\n      <refmeta>\n\t<refentrytitle>ne_ssl_dname</refentrytitle>\n\t<manvolnum>3</manvolnum>"
  },
  {
    "path": "doc/ref/sslproto.xml",
    "chars": 2395,
    "preview": "<refentry id=\"refsslproto\">\n\n  <refmeta>\n    <refentrytitle>ne_ssl_proto_name</refentrytitle>\n    <manvolnum>3</manvolnu"
  },
  {
    "path": "doc/ref/ssltrust.xml",
    "chars": 2459,
    "preview": "    <refentry id=\"refsslca\">\n\n      <refmeta>\n\t<refentrytitle>ne_ssl_trust_cert</refentrytitle>\n\t<manvolnum>3</manvolnum"
  },
  {
    "path": "doc/ref/sslvers.xml",
    "chars": 1847,
    "preview": "<refentry id=\"refsslvers\">\n\n  <refmeta>\n    <refentrytitle>ne_ssl_set_protovers</refentrytitle>\n    <manvolnum>3</manvol"
  },
  {
    "path": "doc/ref/sslvfy.xml",
    "chars": 5299,
    "preview": "    <refentry id=\"refsslvfy\"> <!-- -*- xml-mode -*- -->\n\n      <refmeta>\n\t<refentrytitle>ne_ssl_set_verify</refentrytitl"
  },
  {
    "path": "doc/ref/status.xml",
    "chars": 2918,
    "preview": "    <refentry id=\"refstatus\">\n\n      <refmeta>\n\t<refentrytitle>ne_status</refentrytitle>\n\t<manvolnum>3</manvolnum>\n     "
  },
  {
    "path": "doc/ref/tok.xml",
    "chars": 2258,
    "preview": "    <refentry id=\"reftok\">\n\n      <refmeta>\n\t<refentrytitle>ne_token</refentrytitle>\n\t<manvolnum>3</manvolnum>\n      </r"
  },
  {
    "path": "doc/ref/vers.xml",
    "chars": 2142,
    "preview": "<refentry id=\"refvers\">\n\n  <refmeta>\n    <refentrytitle>ne_version_match</refentrytitle>\n    <manvolnum>3</manvolnum>\n  "
  },
  {
    "path": "doc/ref/xml.xml",
    "chars": 1355,
    "preview": "<refentry id=\"refxml\">\n\n  <refmeta>\n    <refentrytitle>ne_xml_create</refentrytitle>\n    <manvolnum>3</manvolnum>\n  </re"
  },
  {
    "path": "doc/ref/xmlreq.xml",
    "chars": 4298,
    "preview": "<refentry id=\"refxmlreq\">\n\n  <refmeta>\n    <refentrytitle>ne_xml_parse_response</refentrytitle>\n    <manvolnum>3</manvol"
  },
  {
    "path": "doc/refentry.xml",
    "chars": 1048,
    "preview": "<refentry id=\"refXXXX\">\n\n  <refmeta>\n    <refentrytitle>ne_foo</refentrytitle>\n    <manvolnum>3</manvolnum>\n  </refmeta>"
  },
  {
    "path": "doc/security.xml",
    "chars": 6099,
    "preview": "<sect1 id=\"security\">\n  \n  <title>HTTP Client Security</title>\n\n  <para>&neon; is intended to be secure against a specif"
  },
  {
    "path": "doc/ssl.xml",
    "chars": 1023,
    "preview": "<sect1 id=\"ssl\"> <!-- -*- xml -*- -->\n\n <title>Secure connections: HTTP over SSL</title>\n\n <para>This section gives an i"
  },
  {
    "path": "doc/using.xml",
    "chars": 8917,
    "preview": "    <sect1 id=\"using\">\n      <title>How to use neon from your application</title>\n\n      <para>This section describes ho"
  },
  {
    "path": "doc/xml.xml",
    "chars": 7275,
    "preview": "<!-- neon XML interface -*- text -*- -->\n\n<sect1 id=\"xml\">\n\n  <title>Parsing XML</title>\n\n  <para>The &neon; XML interfa"
  },
  {
    "path": "macros/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "macros/ChangeLog",
    "chars": 34017,
    "preview": "Sun Sep 12 18:38:13 2004  Joe Orton  <joe@manyfish.co.uk>\n\n\t* neon.m4 (NEON_USE_EXTERNAL): Check for IDNA, LFS, SOCKS\n\ts"
  },
  {
    "path": "macros/ld-version-script.m4",
    "chars": 1780,
    "preview": "# ld-version-script.m4 serial 3\ndnl Copyright (C) 2008-2013 Free Software Foundation, Inc.\ndnl This file is free softwar"
  },
  {
    "path": "macros/neon-test.m4",
    "chars": 1481,
    "preview": "# Copyright (C) 2001-2022 Joe Orton <joe@manyfish.co.uk>    -*- autoconf -*-\n#\n# This file is free software; you may cop"
  },
  {
    "path": "macros/neon-xml-parser.m4",
    "chars": 5439,
    "preview": "# Copyright (C) 1998-2022 Joe Orton <joe@manyfish.co.uk>    -*- autoconf -*-\n#\n# This file is free software; you may cop"
  },
  {
    "path": "macros/neon.m4",
    "chars": 43710,
    "preview": "# Copyright (C) 1998-2009 Joe Orton <joe@manyfish.co.uk>    -*- autoconf -*-\n# Copyright (C) 2004 Aleix Conchillo Flaque"
  },
  {
    "path": "macros/socklen-arg-type.m4",
    "chars": 963,
    "preview": "dnl This function is (C) 1997,98,99 Stephan Kulow (coolo@kde.org)\ndnl Modifications (C) Joe Orton 1999,2000\n\nAC_DEFUN([S"
  },
  {
    "path": "neon-config.in",
    "chars": 2146,
    "preview": "#! /bin/sh\n# Originally from libxml, Copyright (C) Daniel Veillard\n# Modifications for neon Copyright (C) 2000-2006 Joe "
  },
  {
    "path": "neon.mak",
    "chars": 8912,
    "preview": "#**** neon Win32 -*- Makefile -*- ********************************************\n#\n# Define DEBUG_BUILD to create a debug "
  },
  {
    "path": "neon.pc.in",
    "chars": 267,
    "preview": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: neon\nDescription: HTTP/WebDAV c"
  },
  {
    "path": "po/cs.po",
    "chars": 17081,
    "preview": "# The czech translation for sitecopy\n# Copyright (C) 2000 Free Software Foundation, Inc.\n# Petr Prazak <prazak@grisoft.c"
  },
  {
    "path": "po/de.po",
    "chars": 17496,
    "preview": "# The German translation for sitecopy.\n# Copyright (C) 2000, Thomas Schultz <tststs@gmx.de>\n#\nmsgid \"\"\nmsgstr \"\"\n\"Projec"
  },
  {
    "path": "po/fr.po",
    "chars": 17470,
    "preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2000 Sylvain Glaize <mokona@puupuu.org>\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project"
  },
  {
    "path": "po/ja.po",
    "chars": 15033,
    "preview": "# The Japanese translation for sitecopy\n# Copyright (C) 2000 Nobuyuki Tsuchimura <tutimura@nn.iij4u.or.jp>\n#\n#, fuzzy\nms"
  },
  {
    "path": "po/ka.po",
    "chars": 20343,
    "preview": "# Georgian translation for neon\n# Copyright (C) 2022, Temuri Doghonadze\n# This file is distributed under the same licens"
  },
  {
    "path": "po/neon.pot",
    "chars": 13777,
    "preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
  },
  {
    "path": "po/nn.po",
    "chars": 17862,
    "preview": "# Norwegian Nynorsk sitecopy translation.\n# Copyright (C) 2001 Karl Ove Hufthammer.\n# Karl Ove Hufthammer <karl@huftis.o"
  },
  {
    "path": "po/pl.po",
    "chars": 20539,
    "preview": "# The Polish translation for Neon.\n# Copyright (C) 2007-2009 Arfrever Frehtes Taifersar Arahesis\n# This file is distribu"
  },
  {
    "path": "po/ru.po",
    "chars": 14788,
    "preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 1999 Michael Sobolev\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: siteco"
  },
  {
    "path": "po/tr.po",
    "chars": 16483,
    "preview": "# sitecopy localization for turkish (tr)\n# Copyright (C) 2001 Free Software Foundation, Inc.\n# A. Sinan Unur <sinan@unur"
  },
  {
    "path": "po/zh_CN.po",
    "chars": 15962,
    "preview": "# Simplified chinese message for neon\n#\n# Copyright (C) 2006-2008 Free Software Foundation, Inc.\n# This file is distribu"
  },
  {
    "path": "src/.gitignore",
    "chars": 134,
    "preview": "*.lo\n.libs\nMakefile\nlibneon.la\nlibneon.a\nneon_config.h\n*.diff\nc++.c\ncheckincl.c\n*.*.*\n*.out\n*log\n*.bb\n*.da\n*.bbg\n*.[is]\n"
  },
  {
    "path": "src/COPYING.LIB",
    "chars": 25283,
    "preview": "\t\t  GNU LIBRARY GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1991 Free Software Foundation, Inc."
  },
  {
    "path": "src/ChangeLog",
    "chars": 185976,
    "preview": "Sun Sep 12 19:21:30 2004  Joe Orton  <joe@manyfish.co.uk>\n\n\t* ne_locks.c (ne_lock_refresh): Fix to pass correct userdata"
  },
  {
    "path": "src/Makefile.in",
    "chars": 8191,
    "preview": "#\n# neon source directory Makefile\n# \n# Use the NEON_NORMAL_BUILD or NEON_LIBTOOL_BUILD autoconf \n# macros to set up thi"
  },
  {
    "path": "src/README",
    "chars": 464,
    "preview": "This is the source directory of the 'neon' HTTP/WebDAV client library,\nwhich can be bundled inside other packages. For t"
  },
  {
    "path": "src/memleak.h",
    "chars": 2117,
    "preview": "/* \n   Memory leak wrappers\n   Copyright (C) 2003-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free software"
  },
  {
    "path": "src/mktable.c",
    "chars": 6295,
    "preview": "/* \n   Character lookup table generator\n   Copyright (C) 2022, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free s"
  },
  {
    "path": "src/ne_207.c",
    "chars": 12057,
    "preview": "/* \n   WebDAV 207 multi-status response handling\n   Copyright (C) 1999-2023, Joe Orton <joe@manyfish.co.uk>\n\n   This lib"
  },
  {
    "path": "src/ne_207.h",
    "chars": 4623,
    "preview": "/* \n   WebDAV 207 multi-status response handling\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This lib"
  },
  {
    "path": "src/ne_acl.h",
    "chars": 1455,
    "preview": "/*\n   Access control\n   Copyright (C) 2001-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free software; you c"
  },
  {
    "path": "src/ne_acl3744.c",
    "chars": 5163,
    "preview": "/*\n   Access control\n   Copyright (C) 2001-2021, Joe Orton <joe@manyfish.co.uk>\n   Copyright (C) 2001, Arun Garg <arung@"
  },
  {
    "path": "src/ne_acl3744.h",
    "chars": 2735,
    "preview": "/*\n   Access control\n   Copyright (C) 2001-2021, Joe Orton <joe@manyfish.co.uk>\n   Copyright (C) 2001, Arun Garg <arung@"
  },
  {
    "path": "src/ne_alloc.c",
    "chars": 4611,
    "preview": "/* \n   Replacement memory allocation handling etc.\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This l"
  },
  {
    "path": "src/ne_alloc.h",
    "chars": 1961,
    "preview": "/* \n   Replacement memory allocation handling etc.\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This l"
  },
  {
    "path": "src/ne_auth.c",
    "chars": 60793,
    "preview": "/* \n   HTTP Authentication routines\n   Copyright (C) 1999-2024, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free "
  },
  {
    "path": "src/ne_auth.h",
    "chars": 8909,
    "preview": "/* \n   HTTP authentication routines\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free "
  },
  {
    "path": "src/ne_basic.c",
    "chars": 13775,
    "preview": "/* \n   Basic HTTP and WebDAV methods\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free"
  },
  {
    "path": "src/ne_basic.h",
    "chars": 6856,
    "preview": "/* \n   HTTP/1.1 methods\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free software; yo"
  },
  {
    "path": "src/ne_compress.c",
    "chars": 13627,
    "preview": "/* \n   Handling of compressed HTTP responses\n   Copyright (C) 2001-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library"
  },
  {
    "path": "src/ne_compress.h",
    "chars": 1746,
    "preview": "/* \n   Compressed HTTP response handling\n   Copyright (C) 2001-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is "
  },
  {
    "path": "src/ne_dates.c",
    "chars": 7266,
    "preview": "/* \n   Date manipulation routines\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n   Copyright (C) 2004 Jiang"
  },
  {
    "path": "src/ne_dates.h",
    "chars": 2030,
    "preview": "/* \n   Date manipulation routines\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free so"
  },
  {
    "path": "src/ne_defs.h",
    "chars": 2413,
    "preview": "/* \n   Standard definitions for neon headers\n   Copyright (C) 2003-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library"
  },
  {
    "path": "src/ne_gnutls.c",
    "chars": 45364,
    "preview": "/*\n   neon SSL/TLS support using GNU TLS\n   Copyright (C) 2002-2021, Joe Orton <joe@manyfish.co.uk>\n   Copyright (C) 200"
  },
  {
    "path": "src/ne_i18n.c",
    "chars": 1537,
    "preview": "/* \n   Internationalization of neon\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free "
  },
  {
    "path": "src/ne_i18n.h",
    "chars": 2008,
    "preview": "/* \n   Internationalization of neon\n   Copyright (C) 2005-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free "
  },
  {
    "path": "src/ne_internal.h",
    "chars": 2587,
    "preview": "/* \n   Global interfaces private to neon.\n   Copyright (C) 2005-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is"
  },
  {
    "path": "src/ne_locks.c",
    "chars": 24265,
    "preview": "/* \n   WebDAV Class 2 locking operations\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is "
  },
  {
    "path": "src/ne_locks.h",
    "chars": 6713,
    "preview": "/* \n   WebDAV Class 2 locking operations\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is "
  },
  {
    "path": "src/ne_md5.c",
    "chars": 17090,
    "preview": "/* md5.c - Functions to compute MD5 message digest of files or memory blocks\n   according to the definition of MD5 in RF"
  },
  {
    "path": "src/ne_md5.h",
    "chars": 4106,
    "preview": "/* Declaration of functions and data types used for MD5 sum computing\n   library functions.\n   Copyright (C) 2021, Joe O"
  },
  {
    "path": "src/ne_oldacl.c",
    "chars": 3570,
    "preview": "/*\n   Access control\n   Copyright (C) 2001-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free software; you c"
  },
  {
    "path": "src/ne_openssl.c",
    "chars": 43128,
    "preview": "/* \n   neon SSL/TLS support using OpenSSL\n   Copyright (C) 2002-2025, Joe Orton <joe@manyfish.co.uk>\n\n   This library is"
  },
  {
    "path": "src/ne_pkcs11.c",
    "chars": 19073,
    "preview": "/*\n   neon PKCS#11 support\n   Copyright (C) 2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free software; you "
  },
  {
    "path": "src/ne_pkcs11.h",
    "chars": 4896,
    "preview": "/* \n   PKCS#11 support for neon\n   Copyright (C) 2008-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free soft"
  },
  {
    "path": "src/ne_private.h",
    "chars": 4359,
    "preview": "/* \n   HTTP Request Handling\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free softwar"
  },
  {
    "path": "src/ne_privssl.h",
    "chars": 4259,
    "preview": "/* \n   SSL interface definitions internal to neon.\n   Copyright (C) 2003-2021, Joe Orton <joe@manyfish.co.uk>\n   Copyrig"
  },
  {
    "path": "src/ne_props.c",
    "chars": 18808,
    "preview": "/* \n   WebDAV property manipulation\n   Copyright (C) 2000-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free "
  },
  {
    "path": "src/ne_props.h",
    "chars": 10005,
    "preview": "/* \n   WebDAV Properties manipulation\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is fre"
  },
  {
    "path": "src/ne_redirect.c",
    "chars": 2454,
    "preview": "/* \n   HTTP-redirect support\n   Copyright (C) 1999-2024, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free softwar"
  },
  {
    "path": "src/ne_redirect.h",
    "chars": 1744,
    "preview": "/* \n   HTTP-redirect support\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free softwar"
  },
  {
    "path": "src/ne_request.c",
    "chars": 64532,
    "preview": "/* \n   HTTP request/response handling\n   Copyright (C) 1999-2026, Joe Orton <joe@manyfish.co.uk>\n\n   This library is fre"
  },
  {
    "path": "src/ne_request.h",
    "chars": 18077,
    "preview": "/* \n   HTTP Request Handling\n   Copyright (C) 1999-2026, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free softwar"
  },
  {
    "path": "src/ne_session.c",
    "chars": 23811,
    "preview": "/* \n   HTTP session handling\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free softwar"
  },
  {
    "path": "src/ne_session.h",
    "chars": 15173,
    "preview": "/* \n   HTTP session handling\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free softwar"
  },
  {
    "path": "src/ne_socket.c",
    "chars": 63668,
    "preview": "/* \n   Socket handling routines\n   Copyright (C) 1998-2021, Joe Orton <joe@manyfish.co.uk>\n   Copyright (C) 2004 Aleix C"
  },
  {
    "path": "src/ne_socket.h",
    "chars": 15448,
    "preview": "/* \n   socket handling interface\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free sof"
  },
  {
    "path": "src/ne_socks.c",
    "chars": 9945,
    "preview": "/*\n   SOCKS proxy support for neon\n   Copyright (C) 2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free softwa"
  },
  {
    "path": "src/ne_ssl.c",
    "chars": 1945,
    "preview": "/* \n   Common SSL/TLS handling routines\n   Copyright (C) 2001-2026, Joe Orton <joe@manyfish.co.uk>\n\n   This library is f"
  },
  {
    "path": "src/ne_ssl.h",
    "chars": 13422,
    "preview": "/* \n   SSL/TLS abstraction layer for neon\n   Copyright (C) 2003-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is"
  },
  {
    "path": "src/ne_sspi.c",
    "chars": 17086,
    "preview": "/* \n   Microsoft SSPI based authentication routines\n   Copyright (C) 2004-2005, Vladimir Berezniker @ http://public.xdi."
  },
  {
    "path": "src/ne_sspi.h",
    "chars": 1475,
    "preview": "/* \n   Microsoft SSPI based authentication routines\n   Copyright (C) 2004-2005, Vladimir Berezniker @ http://public.xdi."
  },
  {
    "path": "src/ne_string.c",
    "chars": 27511,
    "preview": "/* \n   String utility functions\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n   strcasecmp/strncasecmp imp"
  },
  {
    "path": "src/ne_string.h",
    "chars": 9957,
    "preview": "/* \n   String utility functions\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free soft"
  },
  {
    "path": "src/ne_stubssl.c",
    "chars": 5105,
    "preview": "/* \n   Stubs for SSL support when no SSL library has been configured\n   Copyright (C) 2002-2021, Joe Orton <joe@manyfish"
  },
  {
    "path": "src/ne_uri.c",
    "chars": 19298,
    "preview": "/* \n   URI manipulation routines.\n   Copyright (C) 1999-2025, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free so"
  },
  {
    "path": "src/ne_uri.h",
    "chars": 5160,
    "preview": "/* \n   URI manipulation routines.\n   Copyright (C) 1999-2025, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free so"
  },
  {
    "path": "src/ne_utils.c",
    "chars": 7806,
    "preview": "/* \n   HTTP utility functions\n   Copyright (C) 1999-2024, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free softwa"
  },
  {
    "path": "src/ne_utils.h",
    "chars": 4404,
    "preview": "/* \n   HTTP utility functions\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free softwa"
  },
  {
    "path": "src/ne_xml.c",
    "chars": 22573,
    "preview": "/* \n   Wrapper interface to XML parser\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is fr"
  },
  {
    "path": "src/ne_xml.h",
    "chars": 7031,
    "preview": "/* \n   neon XML parser interface\n   Copyright (C) 1999-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free sof"
  },
  {
    "path": "src/ne_xmlreq.c",
    "chars": 4083,
    "preview": "/* \n   XML/HTTP response handling\n   Copyright (C) 2004-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free so"
  },
  {
    "path": "src/ne_xmlreq.h",
    "chars": 2683,
    "preview": "/* \n   XML/HTTP response handling\n   Copyright (C) 2004-2021, Joe Orton <joe@manyfish.co.uk>\n\n   This library is free so"
  },
  {
    "path": "src/neon.def",
    "chars": 6247,
    "preview": ";  Listing for exporting symbols from the libneon DLL\n;  Copyright (C) 2003-2022, Joe Orton <joe@manyfish.co.uk>\n;\n;  Th"
  },
  {
    "path": "src/neon.vers",
    "chars": 1498,
    "preview": "# GNU linker version script for neon.\n# All symbols in <= 0.28.x use default unversioned.\n\nNEON_0_29 {\n    ne_iaddr_raw;"
  },
  {
    "path": "test/.gdbinit",
    "chars": 68,
    "preview": "handle SIGPIPE noprint pass nostop\nhandle SIGUSR1 print pass nostop\n"
  },
  {
    "path": "test/.gitignore",
    "chars": 556,
    "preview": "/tests\n/*-tests\n/Makefile\n/request\n/*.log*\n/server\n/regress\n/compress\n/*.gz\n/*.lo\n/*.tmp\n/.libs\n/acl\n/oldacl\n/acl3744\n/a"
  },
  {
    "path": "test/COPYING",
    "chars": 17982,
    "preview": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc."
  },
  {
    "path": "test/ChangeLog",
    "chars": 46637,
    "preview": "Wed Aug 25 21:05:28 2004  Joe Orton  <joe@manyfish.co.uk>\n\n\t* cookies.c: Removed.\n\n\t* Makefile.in: Updated.\n\nWed Aug 25 "
  },
  {
    "path": "test/Makefile.in",
    "chars": 6980,
    "preview": "# Makefile for neon test suite.\n\nSHELL = @SHELL@\nCPPFLAGS = @CPPFLAGS@ -I. -I$(top_srcdir)/src -I$(top_srcdir)/test/comm"
  },
  {
    "path": "test/README",
    "chars": 1258,
    "preview": "\nStupidly Simple Test Suite for neon\n-----------------------------------\n\nThe aim of the test suite is two-fold:\n\n 1. en"
  },
  {
    "path": "test/STATUS",
    "chars": 2362,
    "preview": "                                                        -*- text -*-\n\nThis document attempts to list RFC requirements an"
  },
  {
    "path": "test/acl3744.c",
    "chars": 2208,
    "preview": "/* \n   Dummy ACL tests\n   Copyright (C) 2001-2007, Joe Orton <joe@manyfish.co.uk>\n\n   This program is free software; you"
  },
  {
    "path": "test/auth.c",
    "chars": 60122,
    "preview": "/* \n   Authentication tests\n   Copyright (C) 2001-2009, Joe Orton <joe@manyfish.co.uk>\n\n   This program is free software"
  },
  {
    "path": "test/basic.c",
    "chars": 14769,
    "preview": "/* \n   Tests for high-level HTTP interface (ne_basic.h)\n   Copyright (C) 2002-2008, 2012, Joe Orton <joe@manyfish.co.uk>"
  },
  {
    "path": "test/checksyms.sh",
    "chars": 334,
    "preview": "#!/bin/bash -e\nexport LC_ALL=C\ntmpfile=`mktemp`\nnm -D $1 -p | sed -n '/ [TBD] /{s/.* [TBD] //;p;}' | sort > $tmpfile\nif "
  },
  {
    "path": "test/common/ChangeLog",
    "chars": 7378,
    "preview": "Wed Aug 25 19:27:26 2004  Joe Orton  <joe@manyfish.co.uk>\n\n\t* child.c (reset_socket): New function.\n\nMon Jul  5 18:38:08"
  },
  {
    "path": "test/common/README",
    "chars": 96,
    "preview": "\nSimple test framework for neon; licensed under the GNU GPL.\n\nCopyright (C) 2001-2002 Joe Orton\n"
  },
  {
    "path": "test/common/child.c",
    "chars": 12972,
    "preview": "/* \n   Framework for testing with a server process\n   Copyright (C) 2001-2024, Joe Orton <joe@manyfish.co.uk>\n\n   This p"
  },
  {
    "path": "test/common/child.h",
    "chars": 3944,
    "preview": "/* \n   Framework for testing with a server process\n   Copyright (C) 2001-2004, 2009, Joe Orton <joe@manyfish.co.uk>\n\n   "
  },
  {
    "path": "test/common/run.sh",
    "chars": 223,
    "preview": "#!/bin/sh\n\nrm -f debug.log\nrm -f child.log\n\n# for shared builds.\nLD_LIBRARY_PATH=../src/.libs:$LD_LIBRARY_PATH\nexport LD"
  },
  {
    "path": "test/common/tests.c",
    "chars": 12234,
    "preview": "/* \n   Stupidly simple test framework\n   Copyright (C) 2001-2009, Joe Orton <joe@manyfish.co.uk>\n\n   This program is fre"
  },
  {
    "path": "test/common/tests.h",
    "chars": 5084,
    "preview": "/* \n   Stupidly simple test framework\n   Copyright (C) 2001-2004, Joe Orton <joe@manyfish.co.uk>\n\n   This library is fre"
  },
  {
    "path": "test/compress.c",
    "chars": 10107,
    "preview": "/* \n   tests for compressed response handling.\n   Copyright (C) 2001-2008, Joe Orton <joe@manyfish.co.uk>\n\n   This progr"
  },
  {
    "path": "test/expired.pem",
    "chars": 1176,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIDODCCAuKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBoTELMAkGA1UEBhMCR0Ix\nFzAVBgNVBAgTDkNhbWJyaWRnZXN"
  },
  {
    "path": "test/htdocs/plain",
    "chars": 11,
    "preview": "Test file.\n"
  },
  {
    "path": "test/largefile.c",
    "chars": 5020,
    "preview": "/* \n   Tests for LFS support in neon\n   Copyright (C) 2004-2006, Joe Orton <joe@manyfish.co.uk>\n\n   This program is free"
  },
  {
    "path": "test/lock.c",
    "chars": 22048,
    "preview": "/* \n   lock tests\n   Copyright (C) 2002-2026, Joe Orton <joe@manyfish.co.uk>\n\n   This program is free software; you can "
  },
  {
    "path": "test/makekeys.sh",
    "chars": 8164,
    "preview": "#!/bin/sh\n# Helper script to create CA and server certificates.\n\nsrcdir=${1-.}\n\nOPENSSL=@OPENSSL@\nCONF=${srcdir}/openssl"
  },
  {
    "path": "test/neon.prio",
    "chars": 65,
    "preview": "[overrides]\ninsecure-sig-for-cert = \n\n[priorities]\nSYSTEM=LEGACY\n"
  },
  {
    "path": "test/notvalid.pem",
    "chars": 1176,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIDODCCAuKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBoTELMAkGA1UEBhMCR0Ix\nFzAVBgNVBAgTDkNhbWJyaWRnZXN"
  },
  {
    "path": "test/nulca.pem",
    "chars": 4776,
    "preview": "Certificate:\n    Data:\n        Version: 3 (0x2)\n        Serial Number:\n            ce:4e:0c:d6:f7:2b:d6:6c\n        Signa"
  },
  {
    "path": "test/nulcn.pem",
    "chars": 4391,
    "preview": "Certificate:\n    Data:\n        Version: 3 (0x2)\n        Serial Number: 1 (0x1)\n        Signature Algorithm: sha1WithRSAE"
  },
  {
    "path": "test/nulsan.pem",
    "chars": 4497,
    "preview": "Certificate:\n    Data:\n        Version: 3 (0x2)\n        Serial Number: 0 (0x0)\n        Signature Algorithm: sha1WithRSAE"
  },
  {
    "path": "test/nulsrv.key",
    "chars": 1675,
    "preview": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAzSZwlqmmXT6c7Q8IFVp8FyVoaK8Tua1B+hJU4oRyfVjR4kBC\nwVntBT2qEFNwAIg6d6DAVp6"
  },
  {
    "path": "test/oldacl.c",
    "chars": 2084,
    "preview": "/* \n   Dummy ACL tests\n   Copyright (C) 2001-2003, Joe Orton <joe@manyfish.co.uk>\n\n   This program is free software; you"
  },
  {
    "path": "test/openssl.conf",
    "chars": 2803,
    "preview": "[ca]\ndefault_ca = neonca\n\n[neonca]\ndir = ${ENV::CADIR}\ndatabase = $dir/index.txt\nnew_certs_dir = $dir\ncertificate = $dir"
  }
]

// ... and 21 more files (download for full content)

About this extraction

This page contains the full source code of the notroj/neon GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 221 files (2.1 MB), approximately 563.6k tokens, and a symbol index with 1465 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!