<refentry id="camel-camel-provider">
<refmeta>
<refentrytitle role="top_of_page" id="camel-camel-provider.top_of_page">camel-provider</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>CAMEL Library</refmiscinfo>
</refmeta>

<refnamediv>
<refname>camel-provider</refname>
<refpurpose></refpurpose>
<!--[<xref linkend="desc" endterm="desc.title"/>]-->
</refnamediv>

<refsynopsisdiv id="camel-camel-provider.synopsis" role="synopsis">
<title role="synopsis.title">Synopsis</title>

<synopsis>
                    <link linkend="CamelProvider">CamelProvider</link>;
enum                <link linkend="CamelProviderType">CamelProviderType</link>;
#define             <link linkend="CAMEL-PROVIDER-IS-LOCAL:CAPS">CAMEL_PROVIDER_IS_LOCAL</link>
#define             <link linkend="CAMEL-PROVIDER-IS-EXTERNAL:CAPS">CAMEL_PROVIDER_IS_EXTERNAL</link>
#define             <link linkend="CAMEL-PROVIDER-IS-SOURCE:CAPS">CAMEL_PROVIDER_IS_SOURCE</link>
#define             <link linkend="CAMEL-PROVIDER-IS-STORAGE:CAPS">CAMEL_PROVIDER_IS_STORAGE</link>
#define             <link linkend="CAMEL-PROVIDER-SUPPORTS-SSL:CAPS">CAMEL_PROVIDER_SUPPORTS_SSL</link>
#define             <link linkend="CAMEL-PROVIDER-HAS-LICENSE:CAPS">CAMEL_PROVIDER_HAS_LICENSE</link>
#define             <link linkend="CAMEL-PROVIDER-DISABLE-SENT-FOLDER:CAPS">CAMEL_PROVIDER_DISABLE_SENT_FOLDER</link>
#define             <link linkend="CAMEL-URL-PART-USER:CAPS">CAMEL_URL_PART_USER</link>
#define             <link linkend="CAMEL-URL-PART-AUTH:CAPS">CAMEL_URL_PART_AUTH</link>
#define             <link linkend="CAMEL-URL-PART-PASSWORD:CAPS">CAMEL_URL_PART_PASSWORD</link>
#define             <link linkend="CAMEL-URL-PART-HOST:CAPS">CAMEL_URL_PART_HOST</link>
#define             <link linkend="CAMEL-URL-PART-PORT:CAPS">CAMEL_URL_PART_PORT</link>
#define             <link linkend="CAMEL-URL-PART-PATH:CAPS">CAMEL_URL_PART_PATH</link>
#define             <link linkend="CAMEL-URL-PART-PATH-DIR:CAPS">CAMEL_URL_PART_PATH_DIR</link>
#define             <link linkend="CAMEL-URL-PART-NEED:CAPS">CAMEL_URL_PART_NEED</link>
#define             <link linkend="CAMEL-URL-PART-HIDDEN:CAPS">CAMEL_URL_PART_HIDDEN</link>
#define             <link linkend="CAMEL-PROVIDER-ALLOWS:CAPS">CAMEL_PROVIDER_ALLOWS</link>               (prov, flags)
#define             <link linkend="CAMEL-PROVIDER-NEEDS:CAPS">CAMEL_PROVIDER_NEEDS</link>                (prov, flags)
#define             <link linkend="CAMEL-PROVIDER-HIDDEN:CAPS">CAMEL_PROVIDER_HIDDEN</link>               (prov, flags)
#define             <link linkend="CAMEL-URL-ALLOW-USER:CAPS">CAMEL_URL_ALLOW_USER</link>
#define             <link linkend="CAMEL-URL-ALLOW-AUTH:CAPS">CAMEL_URL_ALLOW_AUTH</link>
#define             <link linkend="CAMEL-URL-ALLOW-PASSWORD:CAPS">CAMEL_URL_ALLOW_PASSWORD</link>
#define             <link linkend="CAMEL-URL-ALLOW-HOST:CAPS">CAMEL_URL_ALLOW_HOST</link>
#define             <link linkend="CAMEL-URL-ALLOW-PORT:CAPS">CAMEL_URL_ALLOW_PORT</link>
#define             <link linkend="CAMEL-URL-ALLOW-PATH:CAPS">CAMEL_URL_ALLOW_PATH</link>
#define             <link linkend="CAMEL-URL-NEED-USER:CAPS">CAMEL_URL_NEED_USER</link>
#define             <link linkend="CAMEL-URL-NEED-AUTH:CAPS">CAMEL_URL_NEED_AUTH</link>
#define             <link linkend="CAMEL-URL-NEED-PASSWORD:CAPS">CAMEL_URL_NEED_PASSWORD</link>
#define             <link linkend="CAMEL-URL-NEED-HOST:CAPS">CAMEL_URL_NEED_HOST</link>
#define             <link linkend="CAMEL-URL-NEED-PORT:CAPS">CAMEL_URL_NEED_PORT</link>
#define             <link linkend="CAMEL-URL-NEED-PATH:CAPS">CAMEL_URL_NEED_PATH</link>
#define             <link linkend="CAMEL-URL-NEED-PATH-DIR:CAPS">CAMEL_URL_NEED_PATH_DIR</link>
#define             <link linkend="CAMEL-URL-HIDDEN-USER:CAPS">CAMEL_URL_HIDDEN_USER</link>
#define             <link linkend="CAMEL-URL-HIDDEN-AUTH:CAPS">CAMEL_URL_HIDDEN_AUTH</link>
#define             <link linkend="CAMEL-URL-HIDDEN-PASSWORD:CAPS">CAMEL_URL_HIDDEN_PASSWORD</link>
#define             <link linkend="CAMEL-URL-HIDDEN-HOST:CAPS">CAMEL_URL_HIDDEN_HOST</link>
#define             <link linkend="CAMEL-URL-HIDDEN-PORT:CAPS">CAMEL_URL_HIDDEN_PORT</link>
#define             <link linkend="CAMEL-URL-HIDDEN-PATH:CAPS">CAMEL_URL_HIDDEN_PATH</link>
#define             <link linkend="CAMEL-URL-FRAGMENT-IS-PATH:CAPS">CAMEL_URL_FRAGMENT_IS_PATH</link>
#define             <link linkend="CAMEL-URL-PATH-IS-ABSOLUTE:CAPS">CAMEL_URL_PATH_IS_ABSOLUTE</link>
#define             <link linkend="CAMEL-PROVIDER-IS-STORE-AND-TRANSPORT:CAPS">CAMEL_PROVIDER_IS_STORE_AND_TRANSPORT</link>(prov)
enum                <link linkend="CamelProviderConfType">CamelProviderConfType</link>;
                    <link linkend="CamelProviderConfEntry">CamelProviderConfEntry</link>;
#define             <link linkend="CAMEL-PROVIDER-CONF-DEFAULT-USERNAME:CAPS">CAMEL_PROVIDER_CONF_DEFAULT_USERNAME</link>
#define             <link linkend="CAMEL-PROVIDER-CONF-DEFAULT-HOSTNAME:CAPS">CAMEL_PROVIDER_CONF_DEFAULT_HOSTNAME</link>
#define             <link linkend="CAMEL-PROVIDER-CONF-DEFAULT-PATH:CAPS">CAMEL_PROVIDER_CONF_DEFAULT_PATH</link>
<link linkend="int">int</link>                 (<link linkend="CamelProviderAutoDetectFunc">*CamelProviderAutoDetectFunc</link>)      (<link linkend="CamelURL">CamelURL</link> *url,
                                                         <link linkend="GHashTable">GHashTable</link> **auto_detected,
                                                         <link linkend="CamelException">CamelException</link> *ex);
                    <link linkend="CamelProviderModule">CamelProviderModule</link>;
<link linkend="void">void</link>                <link linkend="camel-provider-init">camel_provider_init</link>                 (void);
<link linkend="void">void</link>                <link linkend="camel-provider-load">camel_provider_load</link>                 (const <link linkend="char">char</link> *path,
                                                         <link linkend="CamelException">CamelException</link> *ex);
<link linkend="void">void</link>                <link linkend="camel-provider-register">camel_provider_register</link>             (<link linkend="CamelProvider">CamelProvider</link> *provider);
<link linkend="GList">GList</link>*              <link linkend="camel-provider-list">camel_provider_list</link>                 (<link linkend="gboolean">gboolean</link> load);
<link linkend="CamelProvider">CamelProvider</link>*      <link linkend="camel-provider-get">camel_provider_get</link>                  (const <link linkend="char">char</link> *url_string,
                                                         <link linkend="CamelException">CamelException</link> *ex);
<link linkend="void">void</link>                <link linkend="camel-provider-module-init">camel_provider_module_init</link>          (void);
<link linkend="int">int</link>                 <link linkend="camel-provider-auto-detect">camel_provider_auto_detect</link>          (<link linkend="CamelProvider">CamelProvider</link> *provider,
                                                         <link linkend="CamelURL">CamelURL</link> *url,
                                                         <link linkend="GHashTable">GHashTable</link> **auto_detected,
                                                         <link linkend="CamelException">CamelException</link> *ex);
</synopsis>
</refsynopsisdiv>









<refsect1 id="camel-camel-provider.description" role="desc">
<title role="desc.title">Description</title>
<para>

</para>
</refsect1>

<refsect1 id="camel-camel-provider.details" role="details">
<title role="details.title">Details</title>
<refsect2 id="CamelProvider" role="struct">
<title>CamelProvider</title>
<indexterm zone="CamelProvider"><primary>CamelProvider</primary></indexterm><programlisting>typedef struct {
	/* Provider name used in CamelURLs. */
	char *protocol;
	
	/* Provider name as used by people. (May be the same as protocol) */
	char *name;
	
	/* Description of the provider. A novice user should be able
	 * to read this description, and the information provided by
	 * an ISP, IS department, etc, and determine whether or not
	 * this provider is relevant to him, and if so, which
	 * information goes with it.
	 */
	char *description;
	
	/* The category of message that this provider works with.
	 * (evolution-mail will only list a provider in the store/transport
	 * config dialogs if its domain is "mail".)
	 */
	char *domain;
	
	/* Flags describing the provider, flags describing its URLs */
	int flags, url_flags;

	/* The ConfEntry and AutoDetect functions will probably be
	 * DEPRECATED in a future release */
	
	/* Extra configuration information */
	CamelProviderConfEntry *extra_conf;

	/* auto-detection function */
	CamelProviderAutoDetectFunc auto_detect;

	/* CamelType(s) of its store and/or transport. If both are
	 * set, then they are assumed to be linked together and the
	 * transport type can only be used in an account that also
	 * uses the store type (eg, Exchange or NNTP).
	 */
	CamelType object_types[CAMEL_NUM_PROVIDER_TYPES];
	
	/* GList of CamelServiceAuthTypes the provider supports */
	GList *authtypes;
	
	CamelObjectBag *service_cache[CAMEL_NUM_PROVIDER_TYPES];
	
	GHashFunc url_hash;
	GCompareFunc url_equal;

	/* gettext translation domain (NULL for providers in the
	 * evolution source tree).
	 */
	char *translation_domain;

	/* This string points to the provider's gconf key value
	 */
	const char *license;
	
	/* This holds the license file name [ ascii text format ] containing
	 * the license agreement. This should be the absolute file path. This 
	 * is read only when the HAS_LICENSE flag is set
	 */
	const char *license_file;

	/* Private to the provider */	
	void *priv;
} CamelProvider;
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CamelProviderType" role="enum">
<title>enum CamelProviderType</title>
<indexterm zone="CamelProviderType"><primary>CamelProviderType</primary></indexterm><programlisting>typedef enum {
	CAMEL_PROVIDER_STORE,
	CAMEL_PROVIDER_TRANSPORT,
	CAMEL_NUM_PROVIDER_TYPES
} CamelProviderType;
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-IS-LOCAL:CAPS" role="macro">
<title>CAMEL_PROVIDER_IS_LOCAL</title>
<indexterm zone="CAMEL-PROVIDER-IS-LOCAL:CAPS"><primary>CAMEL_PROVIDER_IS_LOCAL</primary></indexterm><programlisting>#define CAMEL_PROVIDER_IS_LOCAL		(1 &lt;&lt; 1)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-IS-EXTERNAL:CAPS" role="macro">
<title>CAMEL_PROVIDER_IS_EXTERNAL</title>
<indexterm zone="CAMEL-PROVIDER-IS-EXTERNAL:CAPS"><primary>CAMEL_PROVIDER_IS_EXTERNAL</primary></indexterm><programlisting>#define CAMEL_PROVIDER_IS_EXTERNAL	(1 &lt;&lt; 2)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-IS-SOURCE:CAPS" role="macro">
<title>CAMEL_PROVIDER_IS_SOURCE</title>
<indexterm zone="CAMEL-PROVIDER-IS-SOURCE:CAPS"><primary>CAMEL_PROVIDER_IS_SOURCE</primary></indexterm><programlisting>#define CAMEL_PROVIDER_IS_SOURCE	(1 &lt;&lt; 3)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-IS-STORAGE:CAPS" role="macro">
<title>CAMEL_PROVIDER_IS_STORAGE</title>
<indexterm zone="CAMEL-PROVIDER-IS-STORAGE:CAPS"><primary>CAMEL_PROVIDER_IS_STORAGE</primary></indexterm><programlisting>#define CAMEL_PROVIDER_IS_STORAGE	(1 &lt;&lt; 4)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-SUPPORTS-SSL:CAPS" role="macro">
<title>CAMEL_PROVIDER_SUPPORTS_SSL</title>
<indexterm zone="CAMEL-PROVIDER-SUPPORTS-SSL:CAPS"><primary>CAMEL_PROVIDER_SUPPORTS_SSL</primary></indexterm><programlisting>#define CAMEL_PROVIDER_SUPPORTS_SSL	(1 &lt;&lt; 5)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-HAS-LICENSE:CAPS" role="macro">
<title>CAMEL_PROVIDER_HAS_LICENSE</title>
<indexterm zone="CAMEL-PROVIDER-HAS-LICENSE:CAPS"><primary>CAMEL_PROVIDER_HAS_LICENSE</primary></indexterm><programlisting>#define CAMEL_PROVIDER_HAS_LICENSE      (1 &lt;&lt; 6)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-DISABLE-SENT-FOLDER:CAPS" role="macro">
<title>CAMEL_PROVIDER_DISABLE_SENT_FOLDER</title>
<indexterm zone="CAMEL-PROVIDER-DISABLE-SENT-FOLDER:CAPS"><primary>CAMEL_PROVIDER_DISABLE_SENT_FOLDER</primary></indexterm><programlisting>#define CAMEL_PROVIDER_DISABLE_SENT_FOLDER (1 &lt;&lt; 7)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-PART-USER:CAPS" role="macro">
<title>CAMEL_URL_PART_USER</title>
<indexterm zone="CAMEL-URL-PART-USER:CAPS"><primary>CAMEL_URL_PART_USER</primary></indexterm><programlisting>#define CAMEL_URL_PART_USER	 (1 &lt;&lt; 0)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-PART-AUTH:CAPS" role="macro">
<title>CAMEL_URL_PART_AUTH</title>
<indexterm zone="CAMEL-URL-PART-AUTH:CAPS"><primary>CAMEL_URL_PART_AUTH</primary></indexterm><programlisting>#define CAMEL_URL_PART_AUTH	 (1 &lt;&lt; 1)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-PART-PASSWORD:CAPS" role="macro">
<title>CAMEL_URL_PART_PASSWORD</title>
<indexterm zone="CAMEL-URL-PART-PASSWORD:CAPS"><primary>CAMEL_URL_PART_PASSWORD</primary></indexterm><programlisting>#define CAMEL_URL_PART_PASSWORD	 (1 &lt;&lt; 2)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-PART-HOST:CAPS" role="macro">
<title>CAMEL_URL_PART_HOST</title>
<indexterm zone="CAMEL-URL-PART-HOST:CAPS"><primary>CAMEL_URL_PART_HOST</primary></indexterm><programlisting>#define CAMEL_URL_PART_HOST	 (1 &lt;&lt; 3)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-PART-PORT:CAPS" role="macro">
<title>CAMEL_URL_PART_PORT</title>
<indexterm zone="CAMEL-URL-PART-PORT:CAPS"><primary>CAMEL_URL_PART_PORT</primary></indexterm><programlisting>#define CAMEL_URL_PART_PORT	 (1 &lt;&lt; 4)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-PART-PATH:CAPS" role="macro">
<title>CAMEL_URL_PART_PATH</title>
<indexterm zone="CAMEL-URL-PART-PATH:CAPS"><primary>CAMEL_URL_PART_PATH</primary></indexterm><programlisting>#define CAMEL_URL_PART_PATH	 (1 &lt;&lt; 5)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-PART-PATH-DIR:CAPS" role="macro">
<title>CAMEL_URL_PART_PATH_DIR</title>
<indexterm zone="CAMEL-URL-PART-PATH-DIR:CAPS"><primary>CAMEL_URL_PART_PATH_DIR</primary></indexterm><programlisting>#define CAMEL_URL_PART_PATH_DIR  (1 &lt;&lt; 6)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-PART-NEED:CAPS" role="macro">
<title>CAMEL_URL_PART_NEED</title>
<indexterm zone="CAMEL-URL-PART-NEED:CAPS"><primary>CAMEL_URL_PART_NEED</primary></indexterm><programlisting>#define CAMEL_URL_PART_NEED	       8
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-PART-HIDDEN:CAPS" role="macro">
<title>CAMEL_URL_PART_HIDDEN</title>
<indexterm zone="CAMEL-URL-PART-HIDDEN:CAPS"><primary>CAMEL_URL_PART_HIDDEN</primary></indexterm><programlisting>#define CAMEL_URL_PART_HIDDEN	(CAMEL_URL_PART_NEED + 8)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-ALLOWS:CAPS" role="macro">
<title>CAMEL_PROVIDER_ALLOWS()</title>
<indexterm zone="CAMEL-PROVIDER-ALLOWS:CAPS"><primary>CAMEL_PROVIDER_ALLOWS</primary></indexterm><programlisting>#define CAMEL_PROVIDER_ALLOWS(prov, flags) (prov-&gt;url_flags &amp; (flags | (flags &lt;&lt; CAMEL_URL_PART_NEED) | (flags &lt;&lt; CAMEL_URL_PART_HIDDEN)))
</programlisting>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>prov</parameter>&nbsp;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>flags</parameter>&nbsp;:</term>
<listitem><simpara>


</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CAMEL-PROVIDER-NEEDS:CAPS" role="macro">
<title>CAMEL_PROVIDER_NEEDS()</title>
<indexterm zone="CAMEL-PROVIDER-NEEDS:CAPS"><primary>CAMEL_PROVIDER_NEEDS</primary></indexterm><programlisting>#define CAMEL_PROVIDER_NEEDS(prov, flags) (prov-&gt;url_flags &amp; (flags &lt;&lt; CAMEL_URL_PART_NEED))
</programlisting>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>prov</parameter>&nbsp;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>flags</parameter>&nbsp;:</term>
<listitem><simpara>


</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CAMEL-PROVIDER-HIDDEN:CAPS" role="macro">
<title>CAMEL_PROVIDER_HIDDEN()</title>
<indexterm zone="CAMEL-PROVIDER-HIDDEN:CAPS"><primary>CAMEL_PROVIDER_HIDDEN</primary></indexterm><programlisting>#define CAMEL_PROVIDER_HIDDEN(prov, flags) (prov-&gt;url_flags &amp; (flags &lt;&lt; CAMEL_URL_PART_HIDDEN))
</programlisting>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>prov</parameter>&nbsp;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>flags</parameter>&nbsp;:</term>
<listitem><simpara>


</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CAMEL-URL-ALLOW-USER:CAPS" role="macro">
<title>CAMEL_URL_ALLOW_USER</title>
<indexterm zone="CAMEL-URL-ALLOW-USER:CAPS"><primary>CAMEL_URL_ALLOW_USER</primary></indexterm><programlisting>#define CAMEL_URL_ALLOW_USER	 (CAMEL_URL_PART_USER)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-ALLOW-AUTH:CAPS" role="macro">
<title>CAMEL_URL_ALLOW_AUTH</title>
<indexterm zone="CAMEL-URL-ALLOW-AUTH:CAPS"><primary>CAMEL_URL_ALLOW_AUTH</primary></indexterm><programlisting>#define CAMEL_URL_ALLOW_AUTH	 (CAMEL_URL_PART_AUTH)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-ALLOW-PASSWORD:CAPS" role="macro">
<title>CAMEL_URL_ALLOW_PASSWORD</title>
<indexterm zone="CAMEL-URL-ALLOW-PASSWORD:CAPS"><primary>CAMEL_URL_ALLOW_PASSWORD</primary></indexterm><programlisting>#define CAMEL_URL_ALLOW_PASSWORD (CAMEL_URL_PART_PASSWORD)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-ALLOW-HOST:CAPS" role="macro">
<title>CAMEL_URL_ALLOW_HOST</title>
<indexterm zone="CAMEL-URL-ALLOW-HOST:CAPS"><primary>CAMEL_URL_ALLOW_HOST</primary></indexterm><programlisting>#define CAMEL_URL_ALLOW_HOST	 (CAMEL_URL_PART_HOST)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-ALLOW-PORT:CAPS" role="macro">
<title>CAMEL_URL_ALLOW_PORT</title>
<indexterm zone="CAMEL-URL-ALLOW-PORT:CAPS"><primary>CAMEL_URL_ALLOW_PORT</primary></indexterm><programlisting>#define CAMEL_URL_ALLOW_PORT	 (CAMEL_URL_PART_PORT)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-ALLOW-PATH:CAPS" role="macro">
<title>CAMEL_URL_ALLOW_PATH</title>
<indexterm zone="CAMEL-URL-ALLOW-PATH:CAPS"><primary>CAMEL_URL_ALLOW_PATH</primary></indexterm><programlisting>#define CAMEL_URL_ALLOW_PATH	 (CAMEL_URL_PART_PATH)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-NEED-USER:CAPS" role="macro">
<title>CAMEL_URL_NEED_USER</title>
<indexterm zone="CAMEL-URL-NEED-USER:CAPS"><primary>CAMEL_URL_NEED_USER</primary></indexterm><programlisting>#define CAMEL_URL_NEED_USER	 (CAMEL_URL_PART_USER &lt;&lt; CAMEL_URL_PART_NEED)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-NEED-AUTH:CAPS" role="macro">
<title>CAMEL_URL_NEED_AUTH</title>
<indexterm zone="CAMEL-URL-NEED-AUTH:CAPS"><primary>CAMEL_URL_NEED_AUTH</primary></indexterm><programlisting>#define CAMEL_URL_NEED_AUTH	 (CAMEL_URL_PART_AUTH &lt;&lt; CAMEL_URL_PART_NEED)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-NEED-PASSWORD:CAPS" role="macro">
<title>CAMEL_URL_NEED_PASSWORD</title>
<indexterm zone="CAMEL-URL-NEED-PASSWORD:CAPS"><primary>CAMEL_URL_NEED_PASSWORD</primary></indexterm><programlisting>#define CAMEL_URL_NEED_PASSWORD	 (CAMEL_URL_PART_PASSWORD &lt;&lt; CAMEL_URL_PART_NEED)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-NEED-HOST:CAPS" role="macro">
<title>CAMEL_URL_NEED_HOST</title>
<indexterm zone="CAMEL-URL-NEED-HOST:CAPS"><primary>CAMEL_URL_NEED_HOST</primary></indexterm><programlisting>#define CAMEL_URL_NEED_HOST	 (CAMEL_URL_PART_HOST &lt;&lt; CAMEL_URL_PART_NEED)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-NEED-PORT:CAPS" role="macro">
<title>CAMEL_URL_NEED_PORT</title>
<indexterm zone="CAMEL-URL-NEED-PORT:CAPS"><primary>CAMEL_URL_NEED_PORT</primary></indexterm><programlisting>#define CAMEL_URL_NEED_PORT	 (CAMEL_URL_PART_PORT &lt;&lt; CAMEL_URL_PART_NEED)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-NEED-PATH:CAPS" role="macro">
<title>CAMEL_URL_NEED_PATH</title>
<indexterm zone="CAMEL-URL-NEED-PATH:CAPS"><primary>CAMEL_URL_NEED_PATH</primary></indexterm><programlisting>#define CAMEL_URL_NEED_PATH	 (CAMEL_URL_PART_PATH &lt;&lt; CAMEL_URL_PART_NEED)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-NEED-PATH-DIR:CAPS" role="macro">
<title>CAMEL_URL_NEED_PATH_DIR</title>
<indexterm zone="CAMEL-URL-NEED-PATH-DIR:CAPS"><primary>CAMEL_URL_NEED_PATH_DIR</primary></indexterm><programlisting>#define CAMEL_URL_NEED_PATH_DIR  (CAMEL_URL_PART_PATH_DIR &lt;&lt; CAMEL_URL_PART_NEED)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-HIDDEN-USER:CAPS" role="macro">
<title>CAMEL_URL_HIDDEN_USER</title>
<indexterm zone="CAMEL-URL-HIDDEN-USER:CAPS"><primary>CAMEL_URL_HIDDEN_USER</primary></indexterm><programlisting>#define CAMEL_URL_HIDDEN_USER	 (CAMEL_URL_PART_USER &lt;&lt; CAMEL_URL_PART_HIDDEN)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-HIDDEN-AUTH:CAPS" role="macro">
<title>CAMEL_URL_HIDDEN_AUTH</title>
<indexterm zone="CAMEL-URL-HIDDEN-AUTH:CAPS"><primary>CAMEL_URL_HIDDEN_AUTH</primary></indexterm><programlisting>#define CAMEL_URL_HIDDEN_AUTH	 (CAMEL_URL_PART_AUTH &lt;&lt; CAMEL_URL_PART_HIDDEN)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-HIDDEN-PASSWORD:CAPS" role="macro">
<title>CAMEL_URL_HIDDEN_PASSWORD</title>
<indexterm zone="CAMEL-URL-HIDDEN-PASSWORD:CAPS"><primary>CAMEL_URL_HIDDEN_PASSWORD</primary></indexterm><programlisting>#define CAMEL_URL_HIDDEN_PASSWORD	 (CAMEL_URL_PART_PASSWORD &lt;&lt; CAMEL_URL_PART_HIDDEN)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-HIDDEN-HOST:CAPS" role="macro">
<title>CAMEL_URL_HIDDEN_HOST</title>
<indexterm zone="CAMEL-URL-HIDDEN-HOST:CAPS"><primary>CAMEL_URL_HIDDEN_HOST</primary></indexterm><programlisting>#define CAMEL_URL_HIDDEN_HOST	 (CAMEL_URL_PART_HOST &lt;&lt; CAMEL_URL_PART_HIDDEN)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-HIDDEN-PORT:CAPS" role="macro">
<title>CAMEL_URL_HIDDEN_PORT</title>
<indexterm zone="CAMEL-URL-HIDDEN-PORT:CAPS"><primary>CAMEL_URL_HIDDEN_PORT</primary></indexterm><programlisting>#define CAMEL_URL_HIDDEN_PORT	 (CAMEL_URL_PART_PORT &lt;&lt; CAMEL_URL_PART_HIDDEN)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-HIDDEN-PATH:CAPS" role="macro">
<title>CAMEL_URL_HIDDEN_PATH</title>
<indexterm zone="CAMEL-URL-HIDDEN-PATH:CAPS"><primary>CAMEL_URL_HIDDEN_PATH</primary></indexterm><programlisting>#define CAMEL_URL_HIDDEN_PATH	 (CAMEL_URL_PART_PATH &lt;&lt; CAMEL_URL_PART_HIDDEN)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-FRAGMENT-IS-PATH:CAPS" role="macro">
<title>CAMEL_URL_FRAGMENT_IS_PATH</title>
<indexterm zone="CAMEL-URL-FRAGMENT-IS-PATH:CAPS"><primary>CAMEL_URL_FRAGMENT_IS_PATH</primary></indexterm><programlisting>#define CAMEL_URL_FRAGMENT_IS_PATH  (1 &lt;&lt; 30) /* url uses fragment for folder name path, not path */
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-URL-PATH-IS-ABSOLUTE:CAPS" role="macro">
<title>CAMEL_URL_PATH_IS_ABSOLUTE</title>
<indexterm zone="CAMEL-URL-PATH-IS-ABSOLUTE:CAPS"><primary>CAMEL_URL_PATH_IS_ABSOLUTE</primary></indexterm><programlisting>#define CAMEL_URL_PATH_IS_ABSOLUTE (1 &lt;&lt; 31)
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-IS-STORE-AND-TRANSPORT:CAPS" role="macro">
<title>CAMEL_PROVIDER_IS_STORE_AND_TRANSPORT()</title>
<indexterm zone="CAMEL-PROVIDER-IS-STORE-AND-TRANSPORT:CAPS"><primary>CAMEL_PROVIDER_IS_STORE_AND_TRANSPORT</primary></indexterm><programlisting>#define CAMEL_PROVIDER_IS_STORE_AND_TRANSPORT(prov) (prov-&gt;object_types[CAMEL_PROVIDER_STORE] &amp;&amp; prov-&gt;object_types[CAMEL_PROVIDER_TRANSPORT])
</programlisting>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>prov</parameter>&nbsp;:</term>
<listitem><simpara>


</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CamelProviderConfType" role="enum">
<title>enum CamelProviderConfType</title>
<indexterm zone="CamelProviderConfType"><primary>CamelProviderConfType</primary></indexterm><programlisting>typedef enum {
	CAMEL_PROVIDER_CONF_END,
	CAMEL_PROVIDER_CONF_SECTION_START,
	CAMEL_PROVIDER_CONF_SECTION_END,
	CAMEL_PROVIDER_CONF_CHECKBOX,
	CAMEL_PROVIDER_CONF_CHECKSPIN,
	CAMEL_PROVIDER_CONF_ENTRY,
	CAMEL_PROVIDER_CONF_LABEL,
	CAMEL_PROVIDER_CONF_HIDDEN
} CamelProviderConfType;
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CamelProviderConfEntry" role="struct">
<title>CamelProviderConfEntry</title>
<indexterm zone="CamelProviderConfEntry"><primary>CamelProviderConfEntry</primary></indexterm><programlisting>typedef struct {
	CamelProviderConfType type;
	char *name, *depname;
	char *text, *value;
} CamelProviderConfEntry;
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-CONF-DEFAULT-USERNAME:CAPS" role="macro">
<title>CAMEL_PROVIDER_CONF_DEFAULT_USERNAME</title>
<indexterm zone="CAMEL-PROVIDER-CONF-DEFAULT-USERNAME:CAPS"><primary>CAMEL_PROVIDER_CONF_DEFAULT_USERNAME</primary></indexterm><programlisting>#define CAMEL_PROVIDER_CONF_DEFAULT_USERNAME  { CAMEL_PROVIDER_CONF_LABEL, "username", NULL, N_("User_name:"), NULL }
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-CONF-DEFAULT-HOSTNAME:CAPS" role="macro">
<title>CAMEL_PROVIDER_CONF_DEFAULT_HOSTNAME</title>
<indexterm zone="CAMEL-PROVIDER-CONF-DEFAULT-HOSTNAME:CAPS"><primary>CAMEL_PROVIDER_CONF_DEFAULT_HOSTNAME</primary></indexterm><programlisting>#define CAMEL_PROVIDER_CONF_DEFAULT_HOSTNAME  { CAMEL_PROVIDER_CONF_LABEL, "hostname", NULL, N_("_Host:"), NULL }
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CAMEL-PROVIDER-CONF-DEFAULT-PATH:CAPS" role="macro">
<title>CAMEL_PROVIDER_CONF_DEFAULT_PATH</title>
<indexterm zone="CAMEL-PROVIDER-CONF-DEFAULT-PATH:CAPS"><primary>CAMEL_PROVIDER_CONF_DEFAULT_PATH</primary></indexterm><programlisting>#define CAMEL_PROVIDER_CONF_DEFAULT_PATH      { CAMEL_PROVIDER_CONF_ENTRY, "path", NULL, N_("_Path:"), "" }
</programlisting>
<para>

</para></refsect2>
<refsect2 id="CamelProviderAutoDetectFunc" role="function">
<title>CamelProviderAutoDetectFunc ()</title>
<indexterm zone="CamelProviderAutoDetectFunc"><primary>CamelProviderAutoDetectFunc</primary></indexterm><programlisting><link linkend="int">int</link>                 (*CamelProviderAutoDetectFunc)      (<link linkend="CamelURL">CamelURL</link> *url,
                                                         <link linkend="GHashTable">GHashTable</link> **auto_detected,
                                                         <link linkend="CamelException">CamelException</link> *ex);</programlisting>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>url</parameter>&nbsp;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>auto_detected</parameter>&nbsp;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ex</parameter>&nbsp;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara>


</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CamelProviderModule" role="struct">
<title>CamelProviderModule</title>
<indexterm zone="CamelProviderModule"><primary>CamelProviderModule</primary></indexterm><programlisting>typedef struct {
	char *path;
	GSList *types;
	guint loaded:1;
} CamelProviderModule;
</programlisting>
<para>

</para></refsect2>
<refsect2 id="camel-provider-init" role="function">
<title>camel_provider_init ()</title>
<indexterm zone="camel-provider-init"><primary>camel_provider_init</primary></indexterm><programlisting><link linkend="void">void</link>                camel_provider_init                 (void);</programlisting>
<para>
Initialize the Camel provider system by reading in the .urls
files in the provider directory and creating a hash table mapping
URLs to module names.
</para>
<para>
A .urls file has the same initial prefix as the shared library it
correspond to, and consists of a series of lines containing the URL
protocols that that library handles.
</para>
<para>
TODO: This should be pathed?
TODO: This should be plugin-d?</para>
<para>

</para></refsect2>
<refsect2 id="camel-provider-load" role="function">
<title>camel_provider_load ()</title>
<indexterm zone="camel-provider-load"><primary>camel_provider_load</primary></indexterm><programlisting><link linkend="void">void</link>                camel_provider_load                 (const <link linkend="char">char</link> *path,
                                                         <link linkend="CamelException">CamelException</link> *ex);</programlisting>
<para>
Loads the provider at <parameter>path</parameter>, and calls its initialization function,
passing <parameter>session</parameter> as an argument. The provider should then register
itself with <parameter>session</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
<listitem><simpara> the path to a shared library
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ex</parameter>&nbsp;:</term>
<listitem><simpara> a CamelException
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-provider-register" role="function">
<title>camel_provider_register ()</title>
<indexterm zone="camel-provider-register"><primary>camel_provider_register</primary></indexterm><programlisting><link linkend="void">void</link>                camel_provider_register             (<link linkend="CamelProvider">CamelProvider</link> *provider);</programlisting>
<para>
Registers a provider.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>provider</parameter>&nbsp;:</term>
<listitem><simpara> provider object
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-provider-list" role="function">
<title>camel_provider_list ()</title>
<indexterm zone="camel-provider-list"><primary>camel_provider_list</primary></indexterm><programlisting><link linkend="GList">GList</link>*              camel_provider_list                 (<link linkend="gboolean">gboolean</link> load);</programlisting>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>load</parameter>&nbsp;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara>


</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-provider-get" role="function">
<title>camel_provider_get ()</title>
<indexterm zone="camel-provider-get"><primary>camel_provider_get</primary></indexterm><programlisting><link linkend="CamelProvider">CamelProvider</link>*      camel_provider_get                  (const <link linkend="char">char</link> *url_string,
                                                         <link linkend="CamelException">CamelException</link> *ex);</programlisting>
<para>
This returns the CamelProvider that would be used to handle
<parameter>url_string</parameter>, loading it in from disk if necessary.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>url_string</parameter>&nbsp;:</term>
<listitem><simpara> the URL for the service whose provider you want
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ex</parameter>&nbsp;:</term>
<listitem><simpara> a CamelException
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the provider, or <link linkend="NULL:CAPS"><literal>NULL</literal></link>, in which case <parameter>ex</parameter> will be set.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-provider-module-init" role="function">
<title>camel_provider_module_init ()</title>
<indexterm zone="camel-provider-module-init"><primary>camel_provider_module_init</primary></indexterm><programlisting><link linkend="void">void</link>                camel_provider_module_init          (void);</programlisting>
<para>

</para></refsect2>
<refsect2 id="camel-provider-auto-detect" role="function">
<title>camel_provider_auto_detect ()</title>
<indexterm zone="camel-provider-auto-detect"><primary>camel_provider_auto_detect</primary></indexterm><programlisting><link linkend="int">int</link>                 camel_provider_auto_detect          (<link linkend="CamelProvider">CamelProvider</link> *provider,
                                                         <link linkend="CamelURL">CamelURL</link> *url,
                                                         <link linkend="GHashTable">GHashTable</link> **auto_detected,
                                                         <link linkend="CamelException">CamelException</link> *ex);</programlisting>
<para>
After filling in the standard Username/Hostname/Port/Path settings
(which must be set in <parameter>settings</parameter>), if the provider supports it, you
may wish to have the provider auto-detect further settings based on
the aformentioned settings.
</para>
<para>
If the provider does not support auto-detection, <parameter>auto_detected</parameter>
will be set to <link linkend="NULL:CAPS"><literal>NULL</literal></link>. Otherwise the provider will attempt to
auto-detect whatever it can and file them into <parameter>auto_detected</parameter>. If
for some reason it cannot auto-detect anything (not enough
information provided in <parameter>settings</parameter>?) then <parameter>auto_deetected</parameter> will be
set to <link linkend="NULL:CAPS"><literal>NULL</literal></link> and an exception may be set to explain why it failed.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>provider</parameter>&nbsp;:</term>
<listitem><simpara> camel provider
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>url</parameter>&nbsp;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>auto_detected</parameter>&nbsp;:</term>
<listitem><simpara> output hash table of auto-detected values
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ex</parameter>&nbsp;:</term>
<listitem><simpara> exception
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara>0 on success or -1 on fail.
</simpara></listitem></varlistentry>
</variablelist></refsect2>

</refsect1>




</refentry>
