summaryrefslogtreecommitdiff
path: root/doc/ref/neon.xml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/ref/neon.xml')
-rw-r--r--doc/ref/neon.xml145
1 files changed, 145 insertions, 0 deletions
diff --git a/doc/ref/neon.xml b/doc/ref/neon.xml
new file mode 100644
index 0000000..9857c63
--- /dev/null
+++ b/doc/ref/neon.xml
@@ -0,0 +1,145 @@
+<refentry id="refneon">
+
+ <refmeta>
+ <refentrytitle>neon</refentrytitle>
+ <manvolnum>3</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>neon</refname>
+ <refpurpose>HTTP and WebDAV client library</refpurpose>
+ </refnamediv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para>neon is an HTTP and WebDAV client library. The major
+ abstractions exposed are the HTTP <emphasis>session</emphasis>,
+ created by <xref linkend="ne_session_create"/>; and the HTTP
+ <emphasis>request</emphasis>, created by <xref
+ linkend="ne_request_create"/>. HTTP authentication is handled
+ transparently for server and proxy servers, see <xref
+ linkend="ne_set_server_auth"/>; complete SSL/TLS support is also
+ included, see <xref linkend="ne_ssl_set_verify"/>.</para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Conventions</title>
+
+ <para>Some conventions are used throughout the neon API, to
+ provide a consistent and simple interface; these are documented
+ below.</para>
+
+ <refsect2>
+ <title>Thread-safeness and global initialization</title>
+
+ <para>&neon; itself is implemented to be thread-safe (avoiding
+ any use of global state), but in some configurations makes use of
+ other libraries which require global initialization. The
+ <xref linkend="ne_sock_init"/> function should be called before
+ any other use of the &neon; library interface.</para>
+ </refsect2>
+
+ <refsect2>
+ <title>Namespaces</title>
+
+ <para>To avoid possible collisions between names used for symbols
+ and preprocessor macros by an application and the libraries it
+ uses, it is good practice for each library to reserve a particular
+ <emphasis>namespace prefix</emphasis>. An application which
+ ensures it uses no names with these prefixes is then guaranteed to
+ avoid such collisions.</para>
+
+ <para>The &neon; library reserves the use of the namespace
+ prefixes <literal>ne_</literal> and <literal>NE_</literal>. The
+ libraries used by &neon; may also reserve certain namespaces;
+ collisions between these libraries and a &neon;-based application
+ will not be detected at compile time, since the underlying library
+ interfaces are not exposed through the &neon; header files. Such
+ collisions can only be detected at link time, when the linker
+ attempts to resolve symbols. The following list documents some of
+ the namespaces claimed by libraries used by &neon;; this list may
+ be incomplete.</para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term>SSL, ssl, TLS, tls, ERR_, BIO_, d2i_, i2d_, ASN1_</term>
+ <listitem><simpara>Some of the many prefixes used by the OpenSSL
+ library; little attempt has been made to keep exported symbols
+ within any particular prefixes for this
+ library.</simpara></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>XML_, Xml[A-Z]</term> <listitem><simpara>Namespaces
+ used by the expat library.</simpara></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>xml[A-Z], html[A-Z], docb[A-Z]</term>
+ <listitem><simpara>Namespaces used by the libxml2 library; a
+ relatively small number of symbols are used without these
+ prefixes.</simpara></listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </refsect2>
+
+ <refsect2>
+ <title>Argument validation</title>
+
+ <para>&neon; does not attempt to validate that arguments passed to
+ functions conform to the API (for instance, checking that pointer
+ arguments are not &null;). Any use of the &neon; API which is not
+ documented to produce a certain behaviour results in
+ <emphasis>undefined behaviour</emphasis>, by definition.</para>
+
+ </refsect2>
+
+ <refsect2>
+ <title>URI paths, WebDAV metadata</title>
+
+ <para>The path strings passed to any function must be
+ <emphasis>URI-encoded</emphasis> by the application; &neon; never
+ performs any URI encoding or decoding internally. WebDAV property
+ names and values must be valid UTF-8 encoded Unicode
+ strings.</para>
+
+ </refsect2>
+
+ <refsect2>
+ <title>Memory handling</title>
+
+ <para>neon does not attempt to cope gracefully with an
+ out-of-memory situation; instead, by default, the
+ <function>abort</function> function is called to immediately
+ terminate the process. An application may register a custom
+ function which will be called before <function>abort</function> in
+ such a situation; see <xref linkend="ne_oom_callback"/>.</para>
+
+ </refsect2>
+
+ <refsect2>
+ <title>Callbacks and userdata</title>
+
+ <para>Whenever a callback is registered, a
+ <literal>userdata</literal> pointer is also used to allow the
+ application to associate a context with the callback. The
+ userdata is of type <type>void *</type>, allowing any pointer to
+ be used.</para>
+
+ </refsect2>
+
+ </refsect1>
+
+ <refsect1>
+ <title>See also</title>
+
+ <para><xref linkend="refsess"/>, <xref linkend="ne_oom_callback"/></para>
+ </refsect1>
+
+</refentry>
+