<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations.  -->
<repository version="1.2"
            xmlns="http://www.gtk.org/introspection/core/1.0"
            xmlns:c="http://www.gtk.org/introspection/c/1.0"
            xmlns:doc="http://www.gtk.org/introspection/doc/1.0"
            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="Infinity" version="0.7"/>
  <package name="libinfinity-0.7"/>
  <doc:format name="unknown"/>
  <namespace name="Infinityd"
             version="0.7"
             shared-library="libinfinity-0.7.so.0"
             c:identifier-prefixes="Infd"
             c:symbol-prefixes="infd">
    <function-macro name="ACCOUNT_STORAGE"
                    c:identifier="INFD_ACCOUNT_STORAGE"
                    introspectable="0">
      <source-position filename="infd-account-storage.h" line="32"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="ACCOUNT_STORAGE_GET_IFACE"
                    c:identifier="INFD_ACCOUNT_STORAGE_GET_IFACE"
                    introspectable="0">
      <source-position filename="infd-account-storage.h" line="34"/>
      <parameters>
        <parameter name="inst">
        </parameter>
      </parameters>
    </function-macro>
    <interface name="AccountStorage"
               c:symbol-prefix="account_storage"
               c:type="InfdAccountStorage"
               glib:type-name="InfdAccountStorage"
               glib:get-type="infd_account_storage_get_type"
               glib:type-struct="AccountStorageInterface">
      <doc xml:space="preserve"
           filename="infd-account-storage.h"
           line="36">#InfdAccountStorage is an opaque data type. You should only access it
via the public API functions.</doc>
      <source-position filename="infd-account-storage.h" line="170"/>
      <virtual-method name="account_added" invoker="account_added">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="628">Emits the #InfdAccountStorage::account-added signal on @storage. This
should only be used by interface implementations.</doc>
        <source-position filename="infd-account-storage.h" line="165"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="630">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="account" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="631">The #InfAclAccount that was added to the storage.</doc>
            <type name="Infinity.AclAccount" c:type="const InfAclAccount*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="account_removed" invoker="account_removed">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="658">Emits the #InfdAccountStorage::account-removed signal on @storage. This
should only be used by interface implementations.</doc>
        <source-position filename="infd-account-storage.h" line="168"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="660">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="account" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="661">The #InfAclAccount with the account information for the removed
account.</doc>
            <type name="Infinity.AclAccount" c:type="const InfAclAccount*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="add_account"
                      invoker="add_account"
                      introspectable="0"
                      throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="342">Adds a new account to @storage. The account will have the given name. The
account ID is determined by the storage backend and if the operation is
successful it is returned.

If the operation does not support storing certificates and/or passwords,
the function will fail if @certs or @password are not set to %NULL,
respectively. Note also that this function might not be supported at all
by the backend. See infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="133"/>
        <return-value>
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="362">The #InfAclAccountId of the added account, or 0
on error.</doc>
          <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="344">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="345">The name of the new account.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="certs"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="346">An array of certificates that
can be used to login to the new account, or %NULL.</doc>
            <array length="2" zero-terminated="0" c:type="gnutls_x509_crt_t*">
              <type name="InfGnutls.X509Crt" c:type="gnutls_x509_crt_t"/>
            </array>
          </parameter>
          <parameter name="n_certs" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="348">The length of the certificate array.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="password"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="349">A password that can be used to login to the
new account, or %NULL.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_support" invoker="get_support">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="161">Returns a bitmask of operations supported by the account storage backend.
If unsupported operations are attempted on @storage, an @error with code
%INF_DIRECTORY_ERROR_OPERATION_UNSUPPORTED will be generated.</doc>
        <source-position filename="infd-account-storage.h" line="117"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="169">A bitmask of supported operations.</doc>
          <type name="AccountStorageSupport"
                c:type="InfdAccountStorageSupport"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="163">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="list_accounts" throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="84">Virtual function to obtain a list of all available accounts.
Can be %NULL if not supported by the backend.</doc>
        <source-position filename="infd-account-storage.h" line="129"/>
        <return-value transfer-ownership="full">
          <type name="Infinity.AclAccount" c:type="InfAclAccount*"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="n_accounts" transfer-ownership="none">
            <type name="guint" c:type="guint*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="login_by_certificate"
                      invoker="login_by_certificate"
                      introspectable="0"
                      throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="436">This function returns the ID of the account which belongs to the given
client certificate. If there is no such account on an error occurs,
the function returns 0, and, in the case of an error, @error is set as
well.

Note that this function might not be supported by the backend. See
infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="144"/>
        <return-value>
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="450">The account ID of the account associated to
@cert, or 0 on error or if there is no such account.</doc>
          <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="438">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="cert" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="439">The certificate presented by the client.</doc>
            <type name="InfGnutls.X509Crt" c:type="gnutls_x509_crt_t"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="login_by_password"
                      invoker="login_by_password"
                      introspectable="0"
                      throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="480">This function returns the account ID which matches to the given username
and password. If there is no such account or if the password is incorrect,
the function returns 0. If an error occurs, the function returns 0 and
@error is set.

Note that when the password is incorrect, @error is not set. It is only set
if there was an internal error and the login procedure could not be carried
out due to technical reasons, such as a database outage.

Note that this function might not be supported by the backend. See
infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="148"/>
        <return-value>
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="499">The account ID of the account associated to
@username if @password is correct, or 0 otherwise.</doc>
          <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="482">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="username" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="483">The username of the account to log into.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="password" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="484">The password of the corresponding account.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="lookup_accounts" throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="86">Virtual function to look up account by their identifier.</doc>
        <source-position filename="infd-account-storage.h" line="119"/>
        <return-value transfer-ownership="full">
          <type name="Infinity.AclAccount" c:type="InfAclAccount*"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="accounts" transfer-ownership="none">
            <type name="Infinity.AclAccountId"
                  c:type="const InfAclAccountId*"/>
          </parameter>
          <parameter name="n_accounts" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="lookup_accounts_by_name" throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="87">Virtual function to reverse-lookup an account
identifier when given the account name.</doc>
        <source-position filename="infd-account-storage.h" line="124"/>
        <return-value transfer-ownership="full">
          <type name="Infinity.AclAccount" c:type="InfAclAccount*"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="n_accounts" transfer-ownership="none">
            <type name="guint" c:type="guint*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="remove_account"
                      invoker="remove_account"
                      throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="396">Removes the account with the given ID from @storage.

Note that this function might not be supported by the backend. See
infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="140"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="407">%TRUE on success or %FALSE on error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="398">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="account" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="399">The ID of the account to remove.</doc>
            <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_certificate"
                      invoker="set_certificate"
                      throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="531">Changes the certificate(s) associated to the account with ID @account.
All certificates that are currently associated to it are removed, and the
given certificates are associated instead. If @n_certs is 0, there will
be no associated certificates and login by certificate will be disabled
for @account.

Note that this function might not be supported by the backend. See
infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="153"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="549">%TRUE if the operation was successful or %FALSE if an error
occurred.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="533">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="account" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="534">The ID of the account whose certificate to set.</doc>
            <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
          </parameter>
          <parameter name="certs"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="535">An array of certificates,
or %NULL if n_certs is 0.</doc>
            <array length="2" zero-terminated="0" c:type="gnutls_x509_crt_t*">
              <type name="InfGnutls.X509Crt" c:type="gnutls_x509_crt_t"/>
            </array>
          </parameter>
          <parameter name="n_certs" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="537">The number of certificates in the certificate array.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_password" invoker="set_password" throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="582">Changes the password for the account with the given ID. If this call
succeeds, the new password will have to be provided to
infd_account_storage_login_by_password() for the login to succeed. If
@password is %NULL, the password will be unset and login by password
will no longer be possible.

Note that this function might not be supported by the backend. See
infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="159"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="598">%TRUE on success or %FALSE on error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="584">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="account" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="585">The ID of the account whose password to change.</doc>
            <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
          </parameter>
          <parameter name="password" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="586">The new password for the account, or %NULL.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="account_added"
              c:identifier="infd_account_storage_account_added">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="628">Emits the #InfdAccountStorage::account-added signal on @storage. This
should only be used by interface implementations.</doc>
        <source-position filename="infd-account-storage.h" line="240"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="630">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="account" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="631">The #InfAclAccount that was added to the storage.</doc>
            <type name="Infinity.AclAccount" c:type="const InfAclAccount*"/>
          </parameter>
        </parameters>
      </method>
      <method name="account_removed"
              c:identifier="infd_account_storage_account_removed">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="658">Emits the #InfdAccountStorage::account-removed signal on @storage. This
should only be used by interface implementations.</doc>
        <source-position filename="infd-account-storage.h" line="244"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="660">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="account" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="661">The #InfAclAccount with the account information for the removed
account.</doc>
            <type name="Infinity.AclAccount" c:type="const InfAclAccount*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_account"
              c:identifier="infd_account_storage_add_account"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="342">Adds a new account to @storage. The account will have the given name. The
account ID is determined by the storage backend and if the operation is
successful it is returned.

If the operation does not support storing certificates and/or passwords,
the function will fail if @certs or @password are not set to %NULL,
respectively. Note also that this function might not be supported at all
by the backend. See infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="203"/>
        <return-value>
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="362">The #InfAclAccountId of the added account, or 0
on error.</doc>
          <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="344">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="345">The name of the new account.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="certs"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="346">An array of certificates that
can be used to login to the new account, or %NULL.</doc>
            <array length="2" zero-terminated="0" c:type="gnutls_x509_crt_t*">
              <type name="InfGnutls.X509Crt" c:type="gnutls_x509_crt_t"/>
            </array>
          </parameter>
          <parameter name="n_certs" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="348">The length of the certificate array.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="password"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="349">A password that can be used to login to the
new account, or %NULL.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_support"
              c:identifier="infd_account_storage_get_support">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="161">Returns a bitmask of operations supported by the account storage backend.
If unsupported operations are attempted on @storage, an @error with code
%INF_DIRECTORY_ERROR_OPERATION_UNSUPPORTED will be generated.</doc>
        <source-position filename="infd-account-storage.h" line="179"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="169">A bitmask of supported operations.</doc>
          <type name="AccountStorageSupport"
                c:type="InfdAccountStorageSupport"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="163">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_accounts"
              c:identifier="infd_account_storage_list_accounts"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="292">Returns an array of all accounts in @storage. The length of the array
is stored in the output parameter @n_accounts. The functions returns %NULL
and sets @n_accounts to 0 if there are no accounts in @storage. If there is
an error, the function returns %NULL, @n_accounts is undefined, and @error
is set.  Therefore, to reliably find out whether an error occurred or
whether there are really no accounts present, a non-%NULL error pointer
should be passed and checked after the function call.

Note that this function might not be supported by the backend. See
infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="198"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="310">An array
of #InfAclAccount structures with length @n_accounts, or %NULL if
@n_accounts is 0 or @error is set. Free with
inf_acl_account_array_free().</doc>
          <array length="0" zero-terminated="0" c:type="InfAclAccount*">
            <type name="Infinity.AclAccount" c:type="InfAclAccount"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="294">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="n_accounts"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="295">An output parameter holding the number of accounts
in @storage.</doc>
            <type name="guint" c:type="guint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="login_by_certificate"
              c:identifier="infd_account_storage_login_by_certificate"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="436">This function returns the ID of the account which belongs to the given
client certificate. If there is no such account on an error occurs,
the function returns 0, and, in the case of an error, @error is set as
well.

Note that this function might not be supported by the backend. See
infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="216"/>
        <return-value>
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="450">The account ID of the account associated to
@cert, or 0 on error or if there is no such account.</doc>
          <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="438">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="cert" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="439">The certificate presented by the client.</doc>
            <type name="InfGnutls.X509Crt" c:type="gnutls_x509_crt_t"/>
          </parameter>
        </parameters>
      </method>
      <method name="login_by_password"
              c:identifier="infd_account_storage_login_by_password"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="480">This function returns the account ID which matches to the given username
and password. If there is no such account or if the password is incorrect,
the function returns 0. If an error occurs, the function returns 0 and
@error is set.

Note that when the password is incorrect, @error is not set. It is only set
if there was an internal error and the login procedure could not be carried
out due to technical reasons, such as a database outage.

Note that this function might not be supported by the backend. See
infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="221"/>
        <return-value>
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="499">The account ID of the account associated to
@username if @password is correct, or 0 otherwise.</doc>
          <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="482">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="username" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="483">The username of the account to log into.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="password" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="484">The password of the corresponding account.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_accounts"
              c:identifier="infd_account_storage_lookup_accounts"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="211">Looks up the #InfAclAccount structure for all IDs present in @accounts.
The return value is an array of #InfAclAccount structures which is in the
same order as the @accounts array. If an element in the output array has
the #InfAclAccount.id field set to 0, it means that the account with the
corresponding ID in the @accounts array does not exist in @storage.</doc>
        <source-position filename="infd-account-storage.h" line="186"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="225">An array of
#InfAclAccount structures with @n_accounts entries. Free with
inf_acl_account_array_free().</doc>
          <array length="1" zero-terminated="0" c:type="InfAclAccount*">
            <type name="Infinity.AclAccount" c:type="InfAclAccount"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="213">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="accounts" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="214">An array of #InfAclAccountId&lt;!-- --&gt;s
to look up.</doc>
            <array length="1"
                   zero-terminated="0"
                   c:type="const InfAclAccountId*">
              <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
            </array>
          </parameter>
          <parameter name="n_accounts"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="216">The number of elements in @accounts.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_accounts_by_name"
              c:identifier="infd_account_storage_lookup_accounts_by_name"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="248">This function performs the &amp;quot;reverse&amp;quot; lookup: Given an account
name, the function returns an array with all accounts that have this name.
Many backends make sure that there cannot be duplicated names, in which
case this can at most return one account, however in principle accounts
with the same name are supported.

If there is no account with the given name, the function returns %NULL and
sets @n_accounts to 0. If an error occurs, %NULL is returned, @n_accounts
is undefined, and @error is set. Therefore, to reliably find out whether a
lookup error occurred or this is no account with the given name, a non-%NULL
error pointer should be passed and checked after the function call.</doc>
        <source-position filename="infd-account-storage.h" line="192"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="268">An array of
#InfAclAccount structures with length @n_accounts, or %NULL on error
or when @n_accounts is 0 or @error is set. Free with
inf_acl_account_array_free().</doc>
          <array length="1" zero-terminated="0" c:type="InfAclAccount*">
            <type name="Infinity.AclAccount" c:type="InfAclAccount"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="250">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="251">The name to look up.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="n_accounts"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="252">An output parameter holding the number of returned
accounts.</doc>
            <type name="guint" c:type="guint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_account"
              c:identifier="infd_account_storage_remove_account"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="396">Removes the account with the given ID from @storage.

Note that this function might not be supported by the backend. See
infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="211"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="407">%TRUE on success or %FALSE on error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="398">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="account" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="399">The ID of the account to remove.</doc>
            <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_certificate"
              c:identifier="infd_account_storage_set_certificate"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="531">Changes the certificate(s) associated to the account with ID @account.
All certificates that are currently associated to it are removed, and the
given certificates are associated instead. If @n_certs is 0, there will
be no associated certificates and login by certificate will be disabled
for @account.

Note that this function might not be supported by the backend. See
infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="227"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="549">%TRUE if the operation was successful or %FALSE if an error
occurred.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="533">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="account" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="534">The ID of the account whose certificate to set.</doc>
            <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
          </parameter>
          <parameter name="certs"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="535">An array of certificates,
or %NULL if n_certs is 0.</doc>
            <array length="2" zero-terminated="0" c:type="gnutls_x509_crt_t*">
              <type name="InfGnutls.X509Crt" c:type="gnutls_x509_crt_t"/>
            </array>
          </parameter>
          <parameter name="n_certs" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="537">The number of certificates in the certificate array.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_password"
              c:identifier="infd_account_storage_set_password"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="582">Changes the password for the account with the given ID. If this call
succeeds, the new password will have to be provided to
infd_account_storage_login_by_password() for the login to succeed. If
@password is %NULL, the password will be unset and login by password
will no longer be possible.

Note that this function might not be supported by the backend. See
infd_account_storage_get_support().</doc>
        <source-position filename="infd-account-storage.h" line="234"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="598">%TRUE on success or %FALSE on error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="584">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="account" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="585">The ID of the account whose password to change.</doc>
            <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
          </parameter>
          <parameter name="password" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="586">The new password for the account, or %NULL.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="supports" c:identifier="infd_account_storage_supports">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="184">Checks whether support for all operations specified in @support is
available for @storage. This is equivalent to calling
infd_account_storage_get_support() and testing the returned value for
containing the bits in @support.</doc>
        <source-position filename="infd-account-storage.h" line="182"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-account-storage.c"
               line="194">%TRUE if all operations in @support are supported or %FALSE
otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="186">A #InfdAccountStorage.</doc>
            <type name="AccountStorage" c:type="InfdAccountStorage*"/>
          </instance-parameter>
          <parameter name="support" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="187">A bitmask of operations to test.</doc>
            <type name="AccountStorageSupport"
                  c:type="InfdAccountStorageSupport"/>
          </parameter>
        </parameters>
      </method>
      <glib:signal name="account-added" when="last">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="114">This signal is emitted whenever an account has been added to the
account storage. However, the signal is only emitted if the storage
implementations supports the %INFD_ACCOUNT_STORAGE_SUPPORT_NOTIFICATION
support flag.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="117">The #InfAclAccount containing the account ID and account name
of the added account.</doc>
            <type name="Infinity.AclAccount"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="account-removed" when="last">
        <doc xml:space="preserve"
             filename="infd-account-storage.c"
             line="137">This signal is emitted whenever an account has been permanently removed
from the storage. However, the signal is only emitted if the storage
implementations supports the %INFD_ACCOUNT_STORAGE_SUPPORT_NOTIFICATION
support flag.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="140">The #InfAclAccount containing the account ID and account name
of the removed account.</doc>
            <type name="Infinity.AclAccount"/>
          </parameter>
        </parameters>
      </glib:signal>
    </interface>
    <record name="AccountStorageInterface"
            c:type="InfdAccountStorageInterface"
            glib:is-gtype-struct-for="AccountStorage">
      <doc xml:space="preserve"
           filename="infd-account-storage.h"
           line="80">The virtual methods and default signal handlers of #InfdAccountStorage.
Implementing these allows an infinote server to set a specific source of
user accounts.</doc>
      <source-position filename="infd-account-storage.h" line="170"/>
      <field name="parent" readable="0" private="1">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="get_support">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="82">Virtual function to get the list of supported operations
on the backend.</doc>
        <callback name="get_support">
          <source-position filename="infd-account-storage.h" line="117"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="169">A bitmask of supported operations.</doc>
            <type name="AccountStorageSupport"
                  c:type="InfdAccountStorageSupport"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="163">A #InfdAccountStorage.</doc>
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="lookup_accounts">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="86">Virtual function to look up account by their identifier.</doc>
        <callback name="lookup_accounts" throws="1">
          <source-position filename="infd-account-storage.h" line="119"/>
          <return-value transfer-ownership="full">
            <type name="Infinity.AclAccount" c:type="InfAclAccount*"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
            <parameter name="accounts" transfer-ownership="none">
              <type name="Infinity.AclAccountId"
                    c:type="const InfAclAccountId*"/>
            </parameter>
            <parameter name="n_accounts" transfer-ownership="none">
              <type name="guint" c:type="guint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="lookup_accounts_by_name">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="87">Virtual function to reverse-lookup an account
identifier when given the account name.</doc>
        <callback name="lookup_accounts_by_name" throws="1">
          <source-position filename="infd-account-storage.h" line="124"/>
          <return-value transfer-ownership="full">
            <type name="Infinity.AclAccount" c:type="InfAclAccount*"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
            <parameter name="name" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="n_accounts" transfer-ownership="none">
              <type name="guint" c:type="guint*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="list_accounts">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="84">Virtual function to obtain a list of all available accounts.
Can be %NULL if not supported by the backend.</doc>
        <callback name="list_accounts" throws="1">
          <source-position filename="infd-account-storage.h" line="129"/>
          <return-value transfer-ownership="full">
            <type name="Infinity.AclAccount" c:type="InfAclAccount*"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
            <parameter name="n_accounts" transfer-ownership="none">
              <type name="guint" c:type="guint*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="add_account" introspectable="0">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="89">Virtual function to add a new account. Can be %NULL if not
supported by the backend.</doc>
        <callback name="add_account" introspectable="0" throws="1">
          <source-position filename="infd-account-storage.h" line="133"/>
          <return-value>
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="362">The #InfAclAccountId of the added account, or 0
on error.</doc>
            <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="344">A #InfdAccountStorage.</doc>
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
            <parameter name="name" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="345">The name of the new account.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="certs"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="346">An array of certificates that
can be used to login to the new account, or %NULL.</doc>
              <array length="3"
                     zero-terminated="0"
                     c:type="gnutls_x509_crt_t*">
                <type name="InfGnutls.X509Crt" c:type="gnutls_x509_crt_t"/>
              </array>
            </parameter>
            <parameter name="n_certs" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="348">The length of the certificate array.</doc>
              <type name="guint" c:type="guint"/>
            </parameter>
            <parameter name="password"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="349">A password that can be used to login to the
new account, or %NULL.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="remove_account">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="91">Virtual function to remove an existing account. Can be
%NULL if not supported by the backend.</doc>
        <callback name="remove_account" throws="1">
          <source-position filename="infd-account-storage.h" line="140"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="407">%TRUE on success or %FALSE on error.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="398">A #InfdAccountStorage.</doc>
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
            <parameter name="account" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="399">The ID of the account to remove.</doc>
              <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="login_by_certificate" introspectable="0">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="93">Virtual function to look up the account associated
with a given certificate. Can be %NULL if not supported by the backend.</doc>
        <callback name="login_by_certificate" introspectable="0" throws="1">
          <source-position filename="infd-account-storage.h" line="144"/>
          <return-value>
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="450">The account ID of the account associated to
@cert, or 0 on error or if there is no such account.</doc>
            <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="438">A #InfdAccountStorage.</doc>
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
            <parameter name="cert" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="439">The certificate presented by the client.</doc>
              <type name="InfGnutls.X509Crt" c:type="gnutls_x509_crt_t"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="login_by_password" introspectable="0">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="95">Virtual function to check a username and password, and
return the associated account. Can be %NULL if not supported by the
backend.</doc>
        <callback name="login_by_password" introspectable="0" throws="1">
          <source-position filename="infd-account-storage.h" line="148"/>
          <return-value>
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="499">The account ID of the account associated to
@username if @password is correct, or 0 otherwise.</doc>
            <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="482">A #InfdAccountStorage.</doc>
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
            <parameter name="username" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="483">The username of the account to log into.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="password" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="484">The password of the corresponding account.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_certificate">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="98">Set the certificate to be associated to a given account,
or %NULL if not supported.</doc>
        <callback name="set_certificate" throws="1">
          <source-position filename="infd-account-storage.h" line="153"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="549">%TRUE if the operation was successful or %FALSE if an error
occurred.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="533">A #InfdAccountStorage.</doc>
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
            <parameter name="account" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="534">The ID of the account whose certificate to set.</doc>
              <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
            </parameter>
            <parameter name="certs"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="535">An array of certificates,
or %NULL if n_certs is 0.</doc>
              <array length="3"
                     zero-terminated="0"
                     c:type="gnutls_x509_crt_t*">
                <type name="InfGnutls.X509Crt" c:type="gnutls_x509_crt_t"/>
              </array>
            </parameter>
            <parameter name="n_certs" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="537">The number of certificates in the certificate array.</doc>
              <type name="guint" c:type="guint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_password">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="100">Set the password for a given account, or %NULL if not
supported.</doc>
        <callback name="set_password" throws="1">
          <source-position filename="infd-account-storage.h" line="159"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-account-storage.c"
                 line="598">%TRUE on success or %FALSE on error.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="584">A #InfdAccountStorage.</doc>
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
            <parameter name="account" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="585">The ID of the account whose password to change.</doc>
              <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
            </parameter>
            <parameter name="password" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="586">The new password for the account, or %NULL.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="account_added">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="102">Default signal handler for the
#InfdAccountStorage::account-added signal.</doc>
        <callback name="account_added">
          <source-position filename="infd-account-storage.h" line="165"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="630">A #InfdAccountStorage.</doc>
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
            <parameter name="account" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="631">The #InfAclAccount that was added to the storage.</doc>
              <type name="Infinity.AclAccount" c:type="const InfAclAccount*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="account_removed">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="104">Default signal handler for the
#InfdAccountStorage::account-removed signal.</doc>
        <callback name="account_removed">
          <source-position filename="infd-account-storage.h" line="168"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="660">A #InfdAccountStorage.</doc>
              <type name="AccountStorage" c:type="InfdAccountStorage*"/>
            </parameter>
            <parameter name="account" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-account-storage.c"
                   line="661">The #InfAclAccount with the account information for the removed
account.</doc>
              <type name="Infinity.AclAccount" c:type="const InfAclAccount*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <bitfield name="AccountStorageSupport"
              glib:type-name="InfdAccountStorageSupport"
              glib:get-type="infd_account_storage_support_get_type"
              c:type="InfdAccountStorageSupport">
      <doc xml:space="preserve"
           filename="infd-account-storage.h"
           line="45">This enumeration specifies operations that might or might not be supported
by a particular #InfdAccountStorage implementation. Looking up an account
by ID or name must always be supported.</doc>
      <member name="notification"
              value="1"
              c:identifier="INFD_ACCOUNT_STORAGE_SUPPORT_NOTIFICATION"
              glib:nick="notification"
              glib:name="INFD_ACCOUNT_STORAGE_SUPPORT_NOTIFICATION">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="47">Whether the
#InfdAccountStorage::account-added and #InfdAccountStorage::account-removed
signals are emitted when accounts are added or removed externally.</doc>
      </member>
      <member name="list_accounts"
              value="2"
              c:identifier="INFD_ACCOUNT_STORAGE_SUPPORT_LIST_ACCOUNTS"
              glib:nick="list-accounts"
              glib:name="INFD_ACCOUNT_STORAGE_SUPPORT_LIST_ACCOUNTS">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="50">Whether obtaining a full list
of available accounts is supported.</doc>
      </member>
      <member name="add_account"
              value="4"
              c:identifier="INFD_ACCOUNT_STORAGE_SUPPORT_ADD_ACCOUNT"
              glib:nick="add-account"
              glib:name="INFD_ACCOUNT_STORAGE_SUPPORT_ADD_ACCOUNT">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="52">Whether adding a new account to
the storage is supported.</doc>
      </member>
      <member name="remove_account"
              value="8"
              c:identifier="INFD_ACCOUNT_STORAGE_SUPPORT_REMOVE_ACCOUNT"
              glib:nick="remove-account"
              glib:name="INFD_ACCOUNT_STORAGE_SUPPORT_REMOVE_ACCOUNT">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="54">Whether removing an existing
account from the storage is supported.</doc>
      </member>
      <member name="certificate_login"
              value="16"
              c:identifier="INFD_ACCOUNT_STORAGE_SUPPORT_CERTIFICATE_LOGIN"
              glib:nick="certificate-login"
              glib:name="INFD_ACCOUNT_STORAGE_SUPPORT_CERTIFICATE_LOGIN">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="56">Whether the account
storage supports authenticating users via client certificates.</doc>
      </member>
      <member name="password_login"
              value="32"
              c:identifier="INFD_ACCOUNT_STORAGE_SUPPORT_PASSWORD_LOGIN"
              glib:nick="password-login"
              glib:name="INFD_ACCOUNT_STORAGE_SUPPORT_PASSWORD_LOGIN">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="58">Whether the account storage
supports authenticating users via username and password.</doc>
      </member>
      <member name="certificate_change"
              value="64"
              c:identifier="INFD_ACCOUNT_STORAGE_SUPPORT_CERTIFICATE_CHANGE"
              glib:nick="certificate-change"
              glib:name="INFD_ACCOUNT_STORAGE_SUPPORT_CERTIFICATE_CHANGE">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="60">Whether the account
storage supports changing the certificate associated to a user.</doc>
      </member>
      <member name="password_change"
              value="128"
              c:identifier="INFD_ACCOUNT_STORAGE_SUPPORT_PASSWORD_CHANGE"
              glib:nick="password-change"
              glib:name="INFD_ACCOUNT_STORAGE_SUPPORT_PASSWORD_CHANGE">
        <doc xml:space="preserve"
             filename="infd-account-storage.h"
             line="62">Whether the account storage
supports changing a user's password.</doc>
      </member>
    </bitfield>
    <enumeration name="ChatFilesystemFormatError"
                 c:type="InfdChatFilesystemFormatError">
      <doc xml:space="preserve"
           filename="infd-chat-filesystem-format.h"
           line="30">Errors that can occur when reading a #InfChatSession from a
#InfdFilesystemStorage.</doc>
      <source-position filename="infd-chat-filesystem-format.h" line="40"/>
      <member name="chat_filesystem_format_error_not_a_chat_session"
              value="0"
              c:identifier="INFD_CHAT_FILESYSTEM_FORMAT_ERROR_NOT_A_CHAT_SESSION">
        <doc xml:space="preserve"
             filename="infd-chat-filesystem-format.h"
             line="32">The file to be read
is not a serialized chat session.</doc>
      </member>
    </enumeration>
    <function-macro name="DIRECTORY"
                    c:identifier="INFD_DIRECTORY"
                    introspectable="0">
      <source-position filename="infd-directory.h" line="37"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DIRECTORY_CLASS"
                    c:identifier="INFD_DIRECTORY_CLASS"
                    introspectable="0">
      <source-position filename="infd-directory.h" line="38"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DIRECTORY_GET_CLASS"
                    c:identifier="INFD_DIRECTORY_GET_CLASS"
                    introspectable="0">
      <source-position filename="infd-directory.h" line="41"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <class name="Directory"
           c:symbol-prefix="directory"
           c:type="InfdDirectory"
           parent="GObject.Object"
           glib:type-name="InfdDirectory"
           glib:get-type="infd_directory_get_type"
           glib:type-struct="DirectoryClass">
      <doc xml:space="preserve"
           filename="infd-directory.h"
           line="66">#InfdDirectory is an opaque data type. You should only access it via the
public API functions.</doc>
      <source-position filename="infd-directory.h" line="64"/>
      <implements name="Infinity.Browser"/>
      <implements name="Infinity.CommunicationObject"/>
      <constructor name="new" c:identifier="infd_directory_new">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="10706">Creates a new #InfdDirectory. If @storage is %NULL then the directory
keeps all content in memory. This can make sense for ad-hoc sessions where
no central document storage is required.</doc>
        <source-position filename="infd-directory.h" line="93"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="10719">A new #InfdDirectory.</doc>
          <type name="Directory" c:type="InfdDirectory*"/>
        </return-value>
        <parameters>
          <parameter name="io" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10708">IO object to watch connections and schedule timeouts.</doc>
            <type name="Infinity.Io" c:type="InfIo*"/>
          </parameter>
          <parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10709">Storage backend that is used to read/write notes from
permanent memory into #InfBuffer objects, or %NULL.</doc>
            <type name="Storage" c:type="InfdStorage*"/>
          </parameter>
          <parameter name="comm_manager" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10711">A #InfCommunicationManager to register added
connections to and which forwards incoming data to the directory
or running sessions.</doc>
            <type name="Infinity.CommunicationManager"
                  c:type="InfCommunicationManager*"/>
          </parameter>
        </parameters>
      </constructor>
      <virtual-method name="connection_added">
        <doc xml:space="preserve"
             filename="infd-directory.h"
             line="48">Default signal handler for the
#InfdDirectory::connection-added signal.</doc>
        <source-position filename="infd-directory.h" line="60"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="connection_removed">
        <doc xml:space="preserve"
             filename="infd-directory.h"
             line="50">Default signal handler for the
#InfdDirectory::connection-removed signal.</doc>
        <source-position filename="infd-directory.h" line="62"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="add_connection"
              c:identifier="infd_directory_add_connection">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="11048">Adds @connection to the connections of @directory. The directory will then
receive requests from @connection. If the directory's method manager does
not contain a "central" method for connection's network, then the
connection will not be added and the function returns %FALSE.

The connection is removed again automatically if it is closed.</doc>
        <source-position filename="infd-directory.h" line="125"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="11060">Whether the connection was added to the directory.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11050">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11051">A #InfXmlConnection.</doc>
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_plugin" c:identifier="infd_directory_add_plugin">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="10841">Adds @plugin to @directory. This allows the directory to create sessions
of the plugin's type. Only one plugin of each type can be added to the
directory. The plugin's storage_type must match the storage of @directory.
If the directory's storage is %NULL, then the plugin's storage type does
not matter, and the plugin's @session_read and @session_write functions
will not be used (and can therefore be %NULL).</doc>
        <source-position filename="infd-directory.h" line="112"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="10853">Whether the plugin was added successfully.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10843">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10844">A #InfdNotePlugin.</doc>
            <type name="NotePlugin" c:type="const InfdNotePlugin*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_acl_account"
              c:identifier="infd_directory_create_acl_account"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="11484">Creates a new account on the directory with the given @account_name. If
the @certificates array is not empty and a clients connects with one of
the certificates, the client will automatically be logged into the account.

If the @transient parameter is %TRUE then the account is made transient,
i.e. it will not be stored to permanent storage. When the server is
re-started, the account will no longer exist. If the parameter is %FALSE,
then the account is persistent.

This function is similar to inf_browser_create_acl_account(), but it
allows more options.</doc>
        <source-position filename="infd-directory.h" line="160"/>
        <return-value>
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="11506">The account ID of the created account, or 0
in case of error.</doc>
          <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11486">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="account_name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11487">The name of the new account.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="transient" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11488">Whether the account should be transient or not.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="certificates"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11489">An array of
certificates to be associated to the account, or %NULL.</doc>
            <array length="3" zero-terminated="0" c:type="gnutls_x509_crt_t*">
              <type name="InfGnutls.X509Crt" c:type="gnutls_x509_crt_t"/>
            </array>
          </parameter>
          <parameter name="n_certificates" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11491">The number of certificates.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="enable_chat" c:identifier="infd_directory_enable_chat">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="11361">If @enable is %TRUE, this enables the chat on the server. This allows
clients subscribing to the chat via infc_browser_subscribe_chat(). If
@enable is %FALSE the chat is disabled which means closing an existing
chat session if any and no longer allowing subscription to the chat.
The chat is initially disabled.</doc>
        <source-position filename="infd-directory.h" line="153"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11363">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="enable" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11364">Whether to enable or disable the chat.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="foreach_connection"
              c:identifier="infd_directory_foreach_connection">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="11260">Calls @func for each connection in @directory that has previously been
added to the directory. It is allowed to add and remove connections while
this function is being called.</doc>
        <source-position filename="infd-directory.h" line="143"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11262">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11263">The function to call for each connection in
@directory.</doc>
            <type name="DirectoryForeachConnectionFunc"
                  c:type="InfdDirectoryForeachConnectionFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11265">Additional data to pass to the callback function.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_acl_account_for_connection"
              c:identifier="infd_directory_get_acl_account_for_connection"
              introspectable="0">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="11159">This function returns the #InfAclAccountId that the given connection is
logged into. The @connection must have been added to the directory before
with infd_directory_add_connection(). If no special login was performed,
the default account is returned.</doc>
        <source-position filename="infd-directory.h" line="133"/>
        <return-value>
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="11169">A #InfAclAccountId.</doc>
          <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11161">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11162">A @connection added to @directory.</doc>
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_chat_session"
              c:identifier="infd_directory_get_chat_session"
              glib:get-property="chat-session">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="11464">Returns a #InfdSessionProxy for the chat session, if any. If the chat is
enabled (see infd_directory_enable_chat()) this returns a #InfdSessionProxy
that can be used to join local users to the chat, or to get chat contents
(by getting the #InfChatBuffer from the proxy's #InfChatSession). If the
chat is disabled the function returns %NULL.</doc>
        <source-position filename="infd-directory.h" line="157"/>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="11474">A #InfdSessionProxy, or %NULL if
the chat is disabled.</doc>
          <type name="SessionProxy" c:type="InfdSessionProxy*"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11466">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_communication_manager"
              c:identifier="infd_directory_get_communication_manager"
              glib:get-property="communication-manager">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="10773">Returns the connection manager of the directory.</doc>
        <source-position filename="infd-directory.h" line="104"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="10779">An #InfCommunicationManager.</doc>
          <type name="Infinity.CommunicationManager"
                c:type="InfCommunicationManager*"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10775">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_io"
              c:identifier="infd_directory_get_io"
              glib:get-property="io">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="10743">Returns the IO object in use by the directory.</doc>
        <source-position filename="infd-directory.h" line="98"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="10749">A #InfIo.</doc>
          <type name="Infinity.Io" c:type="InfIo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10745">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_storage"
              c:identifier="infd_directory_get_storage"
              glib:get-property="storage">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="10758">Returns the storage backend in use by the directory.</doc>
        <source-position filename="infd-directory.h" line="101"/>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="10764">An #InfdStorage.</doc>
          <type name="Storage" c:type="InfdStorage*"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10760">A #InfdDirectory:</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_support_mask"
              c:identifier="infd_directory_get_support_mask">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="11128">This function writes all operations supported by @directory to @mask. If
an operation is unsupported by the server, the corresponding field in the
mask will not be set.</doc>
        <source-position filename="infd-directory.h" line="129"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11130">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="mask"
                     direction="out"
                     caller-allocates="1"
                     transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11131">A pointer to a #InfAclMask that will be filled.</doc>
            <type name="Infinity.AclMask" c:type="InfAclMask*"/>
          </parameter>
        </parameters>
      </method>
      <method name="iter_save_session"
              c:identifier="infd_directory_iter_save_session"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="11297">Attempts to store the session the node @iter points to represents into the
background storage.</doc>
        <source-position filename="infd-directory.h" line="148"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="11306">%TRUE if the operation succeeded, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11299">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="iter" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11300">A #InfBrowserIter pointing to a note in @directory.</doc>
            <type name="Infinity.BrowserIter" c:type="const InfBrowserIter*"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_plugin" c:identifier="infd_directory_lookup_plugin">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="11025">Returns the #InfdNotePlugin that handles the given note type, or %NULL
in case no corresponding plugin was added.</doc>
        <source-position filename="infd-directory.h" line="120"/>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="11033">A #InfdNotePlugin, or %NULL.</doc>
          <type name="NotePlugin" c:type="const InfdNotePlugin*"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11027">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="note_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11028">A note type for which to lookup the plugin.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_plugin" c:identifier="infd_directory_remove_plugin">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="10915">Removes a note plugin from the directory. If there are any sessions running
using this plugin, they are unsubscribed from the directory.</doc>
        <source-position filename="infd-directory.h" line="116"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10917">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10918">The plugin to remove.</doc>
            <type name="NotePlugin" c:type="const InfdNotePlugin*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_acl_account_for_connection"
              c:identifier="infd_directory_set_acl_account_for_connection"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="11192">This function changes the account that the given connection is
logged into. The @connection must have been added to the directory before
with infd_directory_add_connection(). In order to remove a login,
@account_id should be set to the default account.

The function might fail if there is no account that corresponds to
@account, or if the account storage reports an error when looking up the
account.</doc>
        <source-position filename="infd-directory.h" line="137"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-directory.c"
               line="11208">%TRUE on success or %FALSE on error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11194">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11195">A @connection added to @directory.</doc>
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
          <parameter name="account_id" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="11196">A #InfAclAccountId representing a valid account in @directory.</doc>
            <type name="Infinity.AclAccountId" c:type="InfAclAccountId"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_certificate"
              c:identifier="infd_directory_set_certificate"
              glib:set-property="certificate">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="10788">Sets the private key and certificate chain of the directory. The directory
does not use these for certificate authentication with added connections.
Connections should already be authenticated, for example with the means of
#InfXmppConnection.

At the moment, the directory certificate is used to sign incoming
certificate requests. Selected clients can request a certificate signed
with the server's certificates, see inf_browser_create_acl_account().
If the server certificate is set with this function, the request is handled
properly. If no certificate is set with this function, such a request is
rejected.</doc>
        <source-position filename="infd-directory.h" line="107"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10790">A #InfdDirectory.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10791">The private key of the directory.</doc>
            <type name="InfGnutls.X509PrivKey" c:type="gnutls_x509_privkey_t"/>
          </parameter>
          <parameter name="cert" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10792">The certificate chain of the directory.</doc>
            <type name="Infinity.CertificateChain"
                  c:type="InfCertificateChain*"/>
          </parameter>
        </parameters>
      </method>
      <property name="account-storage"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="AccountStorage"/>
      </property>
      <property name="certificate"
                writable="1"
                transfer-ownership="none"
                setter="set_certificate">
        <type name="Infinity.CertificateChain"/>
      </property>
      <property name="chat-session"
                transfer-ownership="none"
                getter="get_chat_session">
        <type name="SessionProxy"/>
      </property>
      <property name="communication-manager"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_communication_manager">
        <type name="Infinity.CommunicationManager"/>
      </property>
      <property name="io"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_io">
        <type name="Infinity.Io"/>
      </property>
      <property name="private-key" writable="1" transfer-ownership="none">
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <property name="storage"
                writable="1"
                construct="1"
                transfer-ownership="none"
                getter="get_storage">
        <type name="Storage"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <glib:signal name="connection-added" when="last">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="10602">This signal is emitted when a connection that is served by the
#InfdDirectory was added. The only way this can happen is by a call to
infd_directory_add_connection(). This can be done automatically by an
#InfdServerPool instance, however.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10605">The #InfXmlConnection that was added.</doc>
            <type name="Infinity.XmlConnection"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="connection-removed" when="last">
        <doc xml:space="preserve"
             filename="infd-directory.c"
             line="10624">This signal is emitted when a connection stopes being served by
@directory. Usually this happens only when the connection is closed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-directory.c"
                 line="10627">The #InfXmlConnection that was removed.</doc>
            <type name="Infinity.XmlConnection"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="DirectoryClass"
            c:type="InfdDirectoryClass"
            glib:is-gtype-struct-for="Directory">
      <doc xml:space="preserve"
           filename="infd-directory.h"
           line="46">Default signal handlers for #InfdDirectory.</doc>
      <source-position filename="infd-directory.h" line="64"/>
      <field name="parent_class" readable="0" private="1">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="connection_added">
        <doc xml:space="preserve"
             filename="infd-directory.h"
             line="48">Default signal handler for the
#InfdDirectory::connection-added signal.</doc>
        <callback name="connection_added">
          <source-position filename="infd-directory.h" line="60"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="directory" transfer-ownership="none">
              <type name="Directory" c:type="InfdDirectory*"/>
            </parameter>
            <parameter name="connection" transfer-ownership="none">
              <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="connection_removed">
        <doc xml:space="preserve"
             filename="infd-directory.h"
             line="50">Default signal handler for the
#InfdDirectory::connection-removed signal.</doc>
        <callback name="connection_removed">
          <source-position filename="infd-directory.h" line="62"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="directory" transfer-ownership="none">
              <type name="Directory" c:type="InfdDirectory*"/>
            </parameter>
            <parameter name="connection" transfer-ownership="none">
              <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <callback name="DirectoryForeachConnectionFunc"
              c:type="InfdDirectoryForeachConnectionFunc">
      <doc xml:space="preserve"
           filename="infd-directory.h"
           line="77">This is the signature of the callback function passed to
infd_directory_foreach_connection().</doc>
      <source-position filename="infd-directory.h" line="86"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="conn" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-directory.h"
               line="79">The connection corresponding to the current iteration.</doc>
          <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="1">
          <doc xml:space="preserve"
               filename="infd-directory.h"
               line="80">Additional data passed to the call to
infd_directory_foreach_connection().</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <function-macro name="FILESYSTEM_ACCOUNT_STORAGE"
                    c:identifier="INFD_FILESYSTEM_ACCOUNT_STORAGE"
                    introspectable="0">
      <source-position filename="infd-filesystem-account-storage.h" line="30"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="FILESYSTEM_ACCOUNT_STORAGE_CLASS"
                    c:identifier="INFD_FILESYSTEM_ACCOUNT_STORAGE_CLASS"
                    introspectable="0">
      <source-position filename="infd-filesystem-account-storage.h" line="31"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="FILESYSTEM_ACCOUNT_STORAGE_GET_CLASS"
                    c:identifier="INFD_FILESYSTEM_ACCOUNT_STORAGE_GET_CLASS"
                    introspectable="0">
      <source-position filename="infd-filesystem-account-storage.h" line="34"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="FILESYSTEM_STORAGE"
                    c:identifier="INFD_FILESYSTEM_STORAGE"
                    introspectable="0">
      <source-position filename="infd-filesystem-storage.h" line="32"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="FILESYSTEM_STORAGE_CLASS"
                    c:identifier="INFD_FILESYSTEM_STORAGE_CLASS"
                    introspectable="0">
      <source-position filename="infd-filesystem-storage.h" line="33"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="FILESYSTEM_STORAGE_GET_CLASS"
                    c:identifier="INFD_FILESYSTEM_STORAGE_GET_CLASS"
                    introspectable="0">
      <source-position filename="infd-filesystem-storage.h" line="36"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <class name="FilesystemAccountStorage"
           c:symbol-prefix="filesystem_account_storage"
           c:type="InfdFilesystemAccountStorage"
           parent="GObject.Object"
           glib:type-name="InfdFilesystemAccountStorage"
           glib:get-type="infd_filesystem_account_storage_get_type"
           glib:type-struct="FilesystemAccountStorageClass">
      <doc xml:space="preserve"
           filename="infd-filesystem-account-storage.h"
           line="75">#InfdFilesystemAccountStorage is an opaque data type. You should only
access it via the public API functions.</doc>
      <source-position filename="infd-filesystem-account-storage.h" line="73"/>
      <implements name="AccountStorage"/>
      <constructor name="new"
                   c:identifier="infd_filesystem_account_storage_new">
        <doc xml:space="preserve"
             filename="infd-filesystem-account-storage.c"
             line="1665">Creates a new #InfdFilesystemAccountStorage that stores its account list as
a file in the filesystem. Use
infd_filesystem_account_storage_set_filesystem() to set the underlying
#InfdFilesystemStorage object.</doc>
        <source-position filename="infd-filesystem-account-storage.h"
                         line="90"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="infd-filesystem-account-storage.c"
               line="1673">A new #InfdFilesystemAccountStorage.</doc>
          <type name="FilesystemAccountStorage"
                c:type="InfdFilesystemAccountStorage*"/>
        </return-value>
      </constructor>
      <method name="set_filesystem"
              c:identifier="infd_filesystem_account_storage_set_filesystem"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-filesystem-account-storage.c"
             line="1688">Uses @fs as the underlying #InfdFilesystemStorage for @s. The
#InfdFilesystemStorage:root-directory property specifies where the account
list is stored.

If an error occurs while loading the account list, the function returns
%FALSE and @error is set.</doc>
        <source-position filename="infd-filesystem-account-storage.h"
                         line="93"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-filesystem-account-storage.c"
               line="1701">%TRUE on success or %FALSE on error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="s" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-account-storage.c"
                 line="1690">A #InfdFilesystemAccountStorage.</doc>
            <type name="FilesystemAccountStorage"
                  c:type="InfdFilesystemAccountStorage*"/>
          </instance-parameter>
          <parameter name="fs" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-account-storage.c"
                 line="1691">The underlying #InfdFilesystemStorage to use.</doc>
            <type name="FilesystemStorage" c:type="InfdFilesystemStorage*"/>
          </parameter>
        </parameters>
      </method>
      <property name="filesystem-storage"
                writable="1"
                transfer-ownership="none">
        <type name="FilesystemStorage"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="FilesystemAccountStorageClass"
            c:type="InfdFilesystemAccountStorageClass"
            glib:is-gtype-struct-for="FilesystemAccountStorage">
      <doc xml:space="preserve"
           filename="infd-filesystem-account-storage.h"
           line="65">This structure does not contain any public fields.</doc>
      <source-position filename="infd-filesystem-account-storage.h" line="73"/>
      <field name="parent_class" readable="0" private="1">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <enumeration name="FilesystemAccountStorageError"
                 c:type="InfdFilesystemAccountStorageError">
      <doc xml:space="preserve"
           filename="infd-filesystem-account-storage.h"
           line="40">Specifies the possible error codes in the
&lt;literal&gt;INFD_FILESYSTEM_ACCOUNT_STORAGE_ERROR&lt;/literal&gt; error domain.
Such errors can occur when reading the accounts file from disk.</doc>
      <source-position filename="infd-filesystem-account-storage.h" line="63"/>
      <member name="invalid_format"
              value="0"
              c:identifier="INFD_FILESYSTEM_ACCOUNT_STORAGE_ERROR_INVALID_FORMAT">
        <doc xml:space="preserve"
             filename="infd-filesystem-account-storage.h"
             line="42">An on-disk XML file
is not formatted correctly.</doc>
      </member>
      <member name="duplicate_name"
              value="1"
              c:identifier="INFD_FILESYSTEM_ACCOUNT_STORAGE_ERROR_DUPLICATE_NAME">
        <doc xml:space="preserve"
             filename="infd-filesystem-account-storage.h"
             line="44">An account name is
already in use.</doc>
      </member>
      <member name="duplicate_certificate"
              value="2"
              c:identifier="INFD_FILESYSTEM_ACCOUNT_STORAGE_ERROR_DUPLICATE_CERTIFICATE">
        <doc xml:space="preserve"
             filename="infd-filesystem-account-storage.h"
             line="46">An account
which uses the same certificate to login exists already.</doc>
      </member>
      <member name="ids_exhausted"
              value="3"
              c:identifier="INFD_FILESYSTEM_ACCOUNT_STORAGE_ERROR_IDS_EXHAUSTED">
        <doc xml:space="preserve"
             filename="infd-filesystem-account-storage.h"
             line="48">Could not
obtain a unique account ID.</doc>
      </member>
      <member name="no_such_account"
              value="4"
              c:identifier="INFD_FILESYSTEM_ACCOUNT_STORAGE_ERROR_NO_SUCH_ACCOUNT">
        <doc xml:space="preserve"
             filename="infd-filesystem-account-storage.h"
             line="50">The account with
the given ID does not exist.</doc>
      </member>
    </enumeration>
    <class name="FilesystemStorage"
           c:symbol-prefix="filesystem_storage"
           c:type="InfdFilesystemStorage"
           parent="GObject.Object"
           glib:type-name="InfdFilesystemStorage"
           glib:get-type="infd_filesystem_storage_get_type"
           glib:type-struct="FilesystemStorageClass">
      <source-position filename="infd-filesystem-storage.h" line="54"/>
      <implements name="Storage"/>
      <constructor name="new" c:identifier="infd_filesystem_storage_new">
        <doc xml:space="preserve"
             filename="infd-filesystem-storage.c"
             line="845">Creates a new #InfdFilesystemStorage that stores its nodes in the
given directory on the file system. The directory is created if it does
not exist.</doc>
        <source-position filename="infd-filesystem-storage.h" line="64"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="infd-filesystem-storage.c"
               line="853">A new #InfdFilesystemStorage.</doc>
          <type name="FilesystemStorage" c:type="InfdFilesystemStorage*"/>
        </return-value>
        <parameters>
          <parameter name="root_directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="847">A directory name in UTF-8.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="stream_close"
                c:identifier="infd_filesystem_storage_stream_close">
        <doc xml:space="preserve"
             filename="infd-filesystem-storage.c"
             line="1089">This is a thin wrapper around fclose(). Use this function instead of
fclose() if you have opened the file with infd_filesystem_storage_open(),
to make sure that the same C runtime is closing the file that has opened
it.</doc>
        <source-position filename="infd-filesystem-storage.h" line="95"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-filesystem-storage.c"
               line="1098">The return value of fclose().</doc>
          <type name="gint" c:type="int"/>
        </return-value>
        <parameters>
          <parameter name="file"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="1091">A #FILE opened with infd_filesystem_storage_open().</doc>
            <type name="gpointer" c:type="FILE*"/>
          </parameter>
        </parameters>
      </function>
      <function name="stream_read"
                c:identifier="infd_filesystem_storage_stream_read">
        <doc xml:space="preserve"
             filename="infd-filesystem-storage.c"
             line="1106">This is a thin wrapper around fread(). Use this function instead of
fread() if you have opened the file with infd_filesystem_storage_open(),
to make sure that the same C runtime is closing the file that has opened
it.</doc>
        <source-position filename="infd-filesystem-storage.h" line="98"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-filesystem-storage.c"
               line="1118">The return value of fread().</doc>
          <type name="gsize" c:type="gsize"/>
        </return-value>
        <parameters>
          <parameter name="file"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="1108">A #FILE opened with infd_filesystem_storage_open().</doc>
            <type name="gpointer" c:type="FILE*"/>
          </parameter>
          <parameter name="buffer"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="1109">A buffer
into which to read data.</doc>
            <array length="2" zero-terminated="0" c:type="gpointer">
              <type name="guint8" c:type="gpointer"/>
            </array>
          </parameter>
          <parameter name="len"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="1111">Maximum number of bytes to read.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </function>
      <function name="stream_write"
                c:identifier="infd_filesystem_storage_stream_write">
        <doc xml:space="preserve"
             filename="infd-filesystem-storage.c"
             line="1128">This is a thin wrapper around fwrite(). Use this function instead of
fwrite() if you have opened the file with infd_filesystem_storage_open(),
to make sure that the same C runtime is closing the file that has opened
it.</doc>
        <source-position filename="infd-filesystem-storage.h" line="103"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-filesystem-storage.c"
               line="1139">The return value of fwrite().</doc>
          <type name="gsize" c:type="gsize"/>
        </return-value>
        <parameters>
          <parameter name="file"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="1130">A #FILE opened with infd_filesystem_storage_open().</doc>
            <type name="gpointer" c:type="FILE*"/>
          </parameter>
          <parameter name="buffer"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="1131">The data to write.</doc>
            <type name="gpointer" c:type="gconstpointer"/>
          </parameter>
          <parameter name="len" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="1132">Maximum number of bytes to write.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </function>
      <method name="get_path"
              c:identifier="infd_filesystem_storage_get_path"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-filesystem-storage.c"
             line="869">Returns the full file name to the given path within the storage's root
directory. The function might fail if @path contains invalid characters.
If the function fails, %NULL is returned and @error is set.

Only if @identifier starts with &amp;quot;Inf&amp;quot;, the file will show up in
the directory listing of infd_storage_read_subdirectory(). Other
identifiers can be used to store custom data in the filesystem, linked to
this #InfdFilesystemStorage object.</doc>
        <source-position filename="infd-filesystem-storage.h" line="67"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="infd-filesystem-storage.c"
               line="885">An absolute
filename path to be freed with g_free(), or %NULL.</doc>
          <type name="filename" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="871">A #InfdFilesystemStorage.</doc>
            <type name="FilesystemStorage" c:type="InfdFilesystemStorage*"/>
          </instance-parameter>
          <parameter name="identifier" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="872">The type of node to open.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="873">The path to open, in UTF-8.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="open"
              c:identifier="infd_filesystem_storage_open"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-filesystem-storage.c"
             line="916">Opens a file in the given path within the storage's root directory. If
the file exists already, and @mode is set to "w", the file is overwritten.

If @full_path is not %NULL, then it will be set to a newly allocated
string which contains the full name of the opened file, in the Glib file
name encoding. Note that @full_path will also be set if the function fails.

Only if @identifier starts with &amp;quot;Inf&amp;quot;, the file will show up in
the directory listing of infd_storage_read_subdirectory(). Other
identifiers can be used to store custom data in the filesystem, linked to
this #InfdFilesystemStorage object.</doc>
        <source-position filename="infd-filesystem-storage.h" line="73"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="infd-filesystem-storage.c"
               line="938">A stream for the open file. Close with
infd_filesystem_storage_stream_close().</doc>
          <type name="gpointer" c:type="FILE*"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="918">A #InfdFilesystemStorage.</doc>
            <type name="FilesystemStorage" c:type="InfdFilesystemStorage*"/>
          </instance-parameter>
          <parameter name="identifier" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="919">The type of node to open.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="920">The path to open, in UTF-8.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="mode" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="921">Either "r" for reading or "w" for writing.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="full_path"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="922">Return location
of the full filename, or %NULL.</doc>
            <type name="filename" c:type="gchar**"/>
          </parameter>
        </parameters>
      </method>
      <method name="read_xml_file"
              c:identifier="infd_filesystem_storage_read_xml_file"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-filesystem-storage.c"
             line="983">Opens a file in the given path, and parses its XML content. See
infd_filesystem_storage_open() for how @identifier and @path should be
interpreted.

If @toplevel_tag is non-%NULL, then this function generates an error if
the XML document read has a toplevel tag with a different name.</doc>
        <source-position filename="infd-filesystem-storage.h" line="81"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="infd-filesystem-storage.c"
               line="998">A new XML document, or %NULL on
error. Free with xmlDocFree().</doc>
          <type name="libxml2.DocPtr" c:type="xmlDocPtr"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="985">A #InfdFilesystemStorage.</doc>
            <type name="FilesystemStorage" c:type="InfdFilesystemStorage*"/>
          </instance-parameter>
          <parameter name="identifier" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="986">The type of node to open.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="987">The path to open, in UTF-8.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="toplevel_tag" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="988">The expected toplevel XML tag name, or %NULL.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="write_xml_file"
              c:identifier="infd_filesystem_storage_write_xml_file"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-filesystem-storage.c"
             line="1038">Writes the XML doument in @doc into a file in the filesystem indicated
by @identifier and @path. See infd_filesystem_storage_open() for how
@identifier and @path should be interpreted.</doc>
        <source-position filename="infd-filesystem-storage.h" line="88"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-filesystem-storage.c"
               line="1050">%TRUE on success or %FALSE on error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="1040">A #InfdFilesystemStorage.</doc>
            <type name="FilesystemStorage" c:type="InfdFilesystemStorage*"/>
          </instance-parameter>
          <parameter name="identifier" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="1041">The type of node to write.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="1042">The path to write to, in UTF-8.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="doc" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-filesystem-storage.c"
                 line="1043">The XML document to write.</doc>
            <type name="libxml2.DocPtr" c:type="xmlDocPtr"/>
          </parameter>
        </parameters>
      </method>
      <property name="root-directory"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                default-value="NULL">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="FilesystemStorageClass"
            c:type="InfdFilesystemStorageClass"
            glib:is-gtype-struct-for="FilesystemStorage">
      <source-position filename="infd-filesystem-storage.h" line="54"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <enumeration name="FilesystemStorageError"
                 c:type="InfdFilesystemStorageError">
      <source-position filename="infd-filesystem-storage.h" line="50"/>
      <member name="invalid_path"
              value="0"
              c:identifier="INFD_FILESYSTEM_STORAGE_ERROR_INVALID_PATH">
      </member>
      <member name="remove_files"
              value="1"
              c:identifier="INFD_FILESYSTEM_STORAGE_ERROR_REMOVE_FILES">
      </member>
      <member name="invalid_format"
              value="2"
              c:identifier="INFD_FILESYSTEM_STORAGE_ERROR_INVALID_FORMAT">
      </member>
      <member name="failed"
              value="3"
              c:identifier="INFD_FILESYSTEM_STORAGE_ERROR_FAILED">
      </member>
    </enumeration>
    <function-macro name="IS_ACCOUNT_STORAGE"
                    c:identifier="INFD_IS_ACCOUNT_STORAGE"
                    introspectable="0">
      <source-position filename="infd-account-storage.h" line="33"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DIRECTORY"
                    c:identifier="INFD_IS_DIRECTORY"
                    introspectable="0">
      <source-position filename="infd-directory.h" line="39"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DIRECTORY_CLASS"
                    c:identifier="INFD_IS_DIRECTORY_CLASS"
                    introspectable="0">
      <source-position filename="infd-directory.h" line="40"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_FILESYSTEM_ACCOUNT_STORAGE"
                    c:identifier="INFD_IS_FILESYSTEM_ACCOUNT_STORAGE"
                    introspectable="0">
      <source-position filename="infd-filesystem-account-storage.h" line="32"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_FILESYSTEM_ACCOUNT_STORAGE_CLASS"
                    c:identifier="INFD_IS_FILESYSTEM_ACCOUNT_STORAGE_CLASS"
                    introspectable="0">
      <source-position filename="infd-filesystem-account-storage.h" line="33"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_FILESYSTEM_STORAGE"
                    c:identifier="INFD_IS_FILESYSTEM_STORAGE"
                    introspectable="0">
      <source-position filename="infd-filesystem-storage.h" line="34"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_FILESYSTEM_STORAGE_CLASS"
                    c:identifier="INFD_IS_FILESYSTEM_STORAGE_CLASS"
                    introspectable="0">
      <source-position filename="infd-filesystem-storage.h" line="35"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PROGRESS_REQUEST"
                    c:identifier="INFD_IS_PROGRESS_REQUEST"
                    introspectable="0">
      <source-position filename="infd-progress-request.h" line="31"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PROGRESS_REQUEST_CLASS"
                    c:identifier="INFD_IS_PROGRESS_REQUEST_CLASS"
                    introspectable="0">
      <source-position filename="infd-progress-request.h" line="32"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_REQUEST"
                    c:identifier="INFD_IS_REQUEST"
                    introspectable="0">
      <source-position filename="infd-request.h" line="30"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_REQUEST_CLASS"
                    c:identifier="INFD_IS_REQUEST_CLASS"
                    introspectable="0">
      <source-position filename="infd-request.h" line="31"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_SERVER_POOL"
                    c:identifier="INFD_IS_SERVER_POOL"
                    introspectable="0">
      <source-position filename="infd-server-pool.h" line="35"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_SERVER_POOL_CLASS"
                    c:identifier="INFD_IS_SERVER_POOL_CLASS"
                    introspectable="0">
      <source-position filename="infd-server-pool.h" line="36"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_SESSION_PROXY"
                    c:identifier="INFD_IS_SESSION_PROXY"
                    introspectable="0">
      <source-position filename="infd-session-proxy.h" line="32"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_SESSION_PROXY_CLASS"
                    c:identifier="INFD_IS_SESSION_PROXY_CLASS"
                    introspectable="0">
      <source-position filename="infd-session-proxy.h" line="33"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_STORAGE"
                    c:identifier="INFD_IS_STORAGE"
                    introspectable="0">
      <source-position filename="infd-storage.h" line="31"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_TCP_SERVER"
                    c:identifier="INFD_IS_TCP_SERVER"
                    introspectable="0">
      <source-position filename="infd-tcp-server.h" line="32"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_TCP_SERVER_CLASS"
                    c:identifier="INFD_IS_TCP_SERVER_CLASS"
                    introspectable="0">
      <source-position filename="infd-tcp-server.h" line="33"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_XML_SERVER"
                    c:identifier="INFD_IS_XML_SERVER"
                    introspectable="0">
      <source-position filename="infd-xml-server.h" line="31"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_XMPP_SERVER"
                    c:identifier="INFD_IS_XMPP_SERVER"
                    introspectable="0">
      <source-position filename="infd-xmpp-server.h" line="37"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_XMPP_SERVER_CLASS"
                    c:identifier="INFD_IS_XMPP_SERVER_CLASS"
                    introspectable="0">
      <source-position filename="infd-xmpp-server.h" line="38"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <record name="NotePlugin" c:type="InfdNotePlugin">
      <source-position filename="infd-note-plugin.h" line="70"/>
      <field name="user_data" writable="1">
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="storage_type" writable="1">
        <type name="utf8" c:type="const gchar*"/>
      </field>
      <field name="note_type" writable="1">
        <type name="utf8" c:type="const gchar*"/>
      </field>
      <field name="session_new" introspectable="0" writable="1">
        <type name="NotePluginSessionNew" c:type="InfdNotePluginSessionNew"/>
      </field>
      <field name="session_read" introspectable="0" writable="1">
        <type name="NotePluginSessionRead" c:type="InfdNotePluginSessionRead"/>
      </field>
      <field name="session_write" writable="1">
        <type name="NotePluginSessionWrite"
              c:type="InfdNotePluginSessionWrite"/>
      </field>
    </record>
    <callback name="NotePluginSessionNew"
              c:type="InfdNotePluginSessionNew"
              introspectable="0">
      <source-position filename="infd-note-plugin.h" line="35"/>
      <return-value>
        <type name="Infinity.Session" c:type="InfSession*"/>
      </return-value>
      <parameters>
        <parameter name="arg0" transfer-ownership="none">
          <type name="Infinity.Io" c:type="InfIo*"/>
        </parameter>
        <parameter name="arg1" transfer-ownership="none">
          <type name="Infinity.CommunicationManager"
                c:type="InfCommunicationManager*"/>
        </parameter>
        <parameter name="arg2" transfer-ownership="none">
          <type name="Infinity.SessionStatus" c:type="InfSessionStatus"/>
        </parameter>
        <parameter name="arg3" transfer-ownership="none">
          <type name="Infinity.CommunicationGroup"
                c:type="InfCommunicationGroup*"/>
        </parameter>
        <parameter name="arg4" transfer-ownership="none">
          <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
        </parameter>
        <parameter name="arg5" transfer-ownership="none">
          <type name="utf8" c:type="const char*"/>
        </parameter>
        <parameter name="arg6"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="NotePluginSessionRead"
              c:type="InfdNotePluginSessionRead"
              introspectable="0"
              throws="1">
      <source-position filename="infd-note-plugin.h" line="43"/>
      <return-value>
        <type name="Infinity.Session" c:type="InfSession*"/>
      </return-value>
      <parameters>
        <parameter name="arg0" transfer-ownership="none">
          <type name="Storage" c:type="InfdStorage*"/>
        </parameter>
        <parameter name="arg1" transfer-ownership="none">
          <type name="Infinity.Io" c:type="InfIo*"/>
        </parameter>
        <parameter name="arg2" transfer-ownership="none">
          <type name="Infinity.CommunicationManager"
                c:type="InfCommunicationManager*"/>
        </parameter>
        <parameter name="arg3" transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="arg4"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="NotePluginSessionWrite"
              c:type="InfdNotePluginSessionWrite"
              throws="1">
      <source-position filename="infd-note-plugin.h" line="50"/>
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="arg0" transfer-ownership="none">
          <type name="Storage" c:type="InfdStorage*"/>
        </parameter>
        <parameter name="arg1" transfer-ownership="none">
          <type name="Infinity.Session" c:type="InfSession*"/>
        </parameter>
        <parameter name="arg2" transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="arg3"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <function-macro name="PROGRESS_REQUEST"
                    c:identifier="INFD_PROGRESS_REQUEST"
                    introspectable="0">
      <source-position filename="infd-progress-request.h" line="29"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROGRESS_REQUEST_CLASS"
                    c:identifier="INFD_PROGRESS_REQUEST_CLASS"
                    introspectable="0">
      <source-position filename="infd-progress-request.h" line="30"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROGRESS_REQUEST_GET_CLASS"
                    c:identifier="INFD_PROGRESS_REQUEST_GET_CLASS"
                    introspectable="0">
      <source-position filename="infd-progress-request.h" line="33"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <class name="ProgressRequest"
           c:symbol-prefix="progress_request"
           c:type="InfdProgressRequest"
           parent="Request"
           glib:type-name="InfdProgressRequest"
           glib:get-type="infd_progress_request_get_type"
           glib:type-struct="ProgressRequestClass">
      <doc xml:space="preserve"
           filename="infd-progress-request.h"
           line="48">#InfdProgressRequest is an opaque data type. You should only access it via
the public API functions.</doc>
      <source-position filename="infd-progress-request.h" line="46"/>
      <implements name="Infinity.Request"/>
      <method name="initiated" c:identifier="infd_progress_request_initiated">
        <doc xml:space="preserve"
             filename="infd-progress-request.c"
             line="179">Initiates the request. A progress request is considered initiated as soon
as the total number of operations is known.</doc>
        <source-position filename="infd-progress-request.h" line="63"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="request" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-progress-request.c"
                 line="181">A #InfdProgressRequest.</doc>
            <type name="ProgressRequest" c:type="InfdProgressRequest*"/>
          </instance-parameter>
          <parameter name="total" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-progress-request.c"
                 line="182">The total number of operations.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="progress" c:identifier="infd_progress_request_progress">
        <doc xml:space="preserve"
             filename="infd-progress-request.c"
             line="207">Indicates that one more operation has been finished and changes the
#InfdProgressRequest:current property accordingly.</doc>
        <source-position filename="infd-progress-request.h" line="67"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="request" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-progress-request.c"
                 line="209">A #InfdProgressRequest.</doc>
            <type name="ProgressRequest" c:type="InfdProgressRequest*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="current" transfer-ownership="none" default-value="0">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="total" transfer-ownership="none" default-value="0">
        <type name="guint" c:type="guint"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="Request" c:type="InfdRequest"/>
      </field>
    </class>
    <record name="ProgressRequestClass"
            c:type="InfdProgressRequestClass"
            glib:is-gtype-struct-for="ProgressRequest">
      <doc xml:space="preserve"
           filename="infd-progress-request.h"
           line="38">This structure does not contain any public fields.</doc>
      <source-position filename="infd-progress-request.h" line="46"/>
      <field name="parent_class" readable="0" private="1">
        <type name="RequestClass" c:type="InfdRequestClass"/>
      </field>
    </record>
    <function-macro name="REQUEST"
                    c:identifier="INFD_REQUEST"
                    introspectable="0">
      <source-position filename="infd-request.h" line="28"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="REQUEST_CLASS"
                    c:identifier="INFD_REQUEST_CLASS"
                    introspectable="0">
      <source-position filename="infd-request.h" line="29"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="REQUEST_GET_CLASS"
                    c:identifier="INFD_REQUEST_GET_CLASS"
                    introspectable="0">
      <source-position filename="infd-request.h" line="32"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <class name="Request"
           c:symbol-prefix="request"
           c:type="InfdRequest"
           parent="GObject.Object"
           glib:type-name="InfdRequest"
           glib:get-type="infd_request_get_type"
           glib:type-struct="RequestClass">
      <doc xml:space="preserve"
           filename="infd-request.h"
           line="34">#InfdRequest is an opaque data type. You should only access it
via the public API functions.</doc>
      <source-position filename="infd-request.h" line="53"/>
      <implements name="Infinity.Request"/>
      <property name="node-id"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                default-value="4294967295">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="requestor"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Infinity.XmlConnection"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="RequestClass"
            c:type="InfdRequestClass"
            glib:is-gtype-struct-for="Request">
      <doc xml:space="preserve"
           filename="infd-request.h"
           line="43">This structure does not contain any public fields.</doc>
      <source-position filename="infd-request.h" line="53"/>
      <field name="parent_class" readable="0" private="1">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <function-macro name="SERVER_POOL"
                    c:identifier="INFD_SERVER_POOL"
                    introspectable="0">
      <source-position filename="infd-server-pool.h" line="33"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="SERVER_POOL_CLASS"
                    c:identifier="INFD_SERVER_POOL_CLASS"
                    introspectable="0">
      <source-position filename="infd-server-pool.h" line="34"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="SERVER_POOL_GET_CLASS"
                    c:identifier="INFD_SERVER_POOL_GET_CLASS"
                    introspectable="0">
      <source-position filename="infd-server-pool.h" line="37"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="SESSION_PROXY"
                    c:identifier="INFD_SESSION_PROXY"
                    introspectable="0">
      <source-position filename="infd-session-proxy.h" line="30"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="SESSION_PROXY_CLASS"
                    c:identifier="INFD_SESSION_PROXY_CLASS"
                    introspectable="0">
      <source-position filename="infd-session-proxy.h" line="31"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="SESSION_PROXY_GET_CLASS"
                    c:identifier="INFD_SESSION_PROXY_GET_CLASS"
                    introspectable="0">
      <source-position filename="infd-session-proxy.h" line="34"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="STORAGE"
                    c:identifier="INFD_STORAGE"
                    introspectable="0">
      <source-position filename="infd-storage.h" line="30"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="STORAGE_GET_IFACE"
                    c:identifier="INFD_STORAGE_GET_IFACE"
                    introspectable="0">
      <source-position filename="infd-storage.h" line="32"/>
      <parameters>
        <parameter name="inst">
        </parameter>
      </parameters>
    </function-macro>
    <class name="ServerPool"
           c:symbol-prefix="server_pool"
           c:type="InfdServerPool"
           parent="GObject.Object"
           glib:type-name="InfdServerPool"
           glib:get-type="infd_server_pool_get_type"
           glib:type-struct="ServerPoolClass">
      <doc xml:space="preserve"
           filename="infd-server-pool.h"
           line="52">#InfdServerPool is an opaque data type. You should only access it via the
public API functions.</doc>
      <source-position filename="infd-server-pool.h" line="50"/>
      <constructor name="new" c:identifier="infd_server_pool_new">
        <doc xml:space="preserve"
             filename="infd-server-pool.c"
             line="383">Creates a new #InfdServerPool.</doc>
        <source-position filename="infd-server-pool.h" line="78"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="infd-server-pool.c"
               line="389">A new #InfdServerPool.</doc>
          <type name="ServerPool" c:type="InfdServerPool*"/>
        </return-value>
        <parameters>
          <parameter name="directory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-server-pool.c"
                 line="385">A #InfdDirectory to which to add incoming connections.</doc>
            <type name="Directory" c:type="InfdDirectory*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="add_local_publisher"
              c:identifier="infd_server_pool_add_local_publisher">
        <doc xml:space="preserve"
             filename="infd-server-pool.c"
             line="450">Publishes a service offered by @server on the local network via
@publisher. This can safely be called when @server is not yet open. The
service will be published as soon as the server opens.</doc>
        <source-position filename="infd-server-pool.h" line="85"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server_pool" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-server-pool.c"
                 line="452">A #InfdServerPool.</doc>
            <type name="ServerPool" c:type="InfdServerPool*"/>
          </instance-parameter>
          <parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-server-pool.c"
                 line="453">A #InfdXmppServer added to @server_pool.</doc>
            <type name="XmppServer" c:type="InfdXmppServer*"/>
          </parameter>
          <parameter name="publisher" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-server-pool.c"
                 line="454">A #InfLocalPublisher.</doc>
            <type name="Infinity.LocalPublisher" c:type="InfLocalPublisher*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_server" c:identifier="infd_server_pool_add_server">
        <doc xml:space="preserve"
             filename="infd-server-pool.c"
             line="407">Adds @server to @server_pool. The server pool accepts incoming connections
and gives them to its directory which processes incoming requests.</doc>
        <source-position filename="infd-server-pool.h" line="81"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server_pool" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-server-pool.c"
                 line="409">A #InfdServerPool.</doc>
            <type name="ServerPool" c:type="InfdServerPool*"/>
          </instance-parameter>
          <parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-server-pool.c"
                 line="410">A #InfdXmlServer.</doc>
            <type name="XmlServer" c:type="InfdXmlServer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="foreach_server"
              c:identifier="infd_server_pool_foreach_server">
        <doc xml:space="preserve"
             filename="infd-server-pool.c"
             line="527">Calls @func for each server in pool registered with
infd_server_pool_add_server().</doc>
        <source-position filename="infd-server-pool.h" line="94"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server_pool" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-server-pool.c"
                 line="529">A #InfdServerPool.</doc>
            <type name="ServerPool" c:type="InfdServerPool*"/>
          </instance-parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <doc xml:space="preserve"
                 filename="infd-server-pool.c"
                 line="530">The function to be called for each server.</doc>
            <type name="ServerPoolForeachServerFunc"
                  c:type="InfdServerPoolForeachServerFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="infd-server-pool.c"
                 line="531">Additional data to pass to @func.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_server"
              c:identifier="infd_server_pool_remove_server">
        <doc xml:space="preserve"
             filename="infd-server-pool.c"
             line="501">Removed @server from @servor_pool. If @server was published via
some publishers then it will be unpublished automatically.</doc>
        <source-position filename="infd-server-pool.h" line="90"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server_pool" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-server-pool.c"
                 line="503">A #InfdServerPool.</doc>
            <type name="ServerPool" c:type="InfdServerPool*"/>
          </instance-parameter>
          <parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-server-pool.c"
                 line="504">A #InfdXmlServer which was previously added to @server_pool.</doc>
            <type name="XmlServer" c:type="InfdXmlServer*"/>
          </parameter>
        </parameters>
      </method>
      <property name="directory"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Directory"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="ServerPoolClass"
            c:type="InfdServerPoolClass"
            glib:is-gtype-struct-for="ServerPool">
      <doc xml:space="preserve"
           filename="infd-server-pool.h"
           line="42">This structure does not contain any public fields.</doc>
      <source-position filename="infd-server-pool.h" line="50"/>
      <field name="parent_class" readable="0" private="1">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <callback name="ServerPoolForeachServerFunc"
              c:type="InfdServerPoolForeachServerFunc">
      <doc xml:space="preserve"
           filename="infd-server-pool.h"
           line="63">This is the callback signature of the callback passed to
infd_server_pool_foreach_server().</doc>
      <source-position filename="infd-server-pool.h" line="71"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="server" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-server-pool.h"
               line="65">The currently iterated server.</doc>
          <type name="XmlServer" c:type="InfdXmlServer*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="1">
          <doc xml:space="preserve"
               filename="infd-server-pool.h"
               line="66">Additional data passed to infd_server_pool_foreach_server().</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <class name="SessionProxy"
           c:symbol-prefix="session_proxy"
           c:type="InfdSessionProxy"
           parent="GObject.Object"
           glib:type-name="InfdSessionProxy"
           glib:get-type="infd_session_proxy_get_type"
           glib:type-struct="SessionProxyClass">
      <doc xml:space="preserve"
           filename="infd-session-proxy.h"
           line="71">#InfdSessionProxy is an opaque data type. You should only access it via the
public API functions.</doc>
      <source-position filename="infd-session-proxy.h" line="69"/>
      <implements name="Infinity.CommunicationObject"/>
      <implements name="Infinity.SessionProxy"/>
      <virtual-method name="add_subscription">
        <doc xml:space="preserve"
             filename="infd-session-proxy.h"
             line="41">Default signal handler for the
#InfdSessionProxy::add-subscription signal.</doc>
        <source-position filename="infd-session-proxy.h" line="58"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <type name="SessionProxy" c:type="InfdSessionProxy*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
          <parameter name="seq_id" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="reject_user_join" introspectable="0">
        <doc xml:space="preserve"
             filename="infd-session-proxy.h"
             line="45">Default signal handler for the
#InfdSessionProxy::reject-user-join signal.</doc>
        <source-position filename="infd-session-proxy.h" line="65"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <type name="SessionProxy" c:type="InfdSessionProxy*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
          <parameter name="user_properties" transfer-ownership="none">
            <array name="GLib.Array" c:type="const GArray*">
              <type name="gpointer" c:type="gpointer"/>
            </array>
          </parameter>
          <parameter name="rejoin_user" transfer-ownership="none">
            <type name="Infinity.User" c:type="InfUser*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="remove_subscription">
        <doc xml:space="preserve"
             filename="infd-session-proxy.h"
             line="43">Default signal handler for the
#InfdSessionProxy::remove-subscription signal.</doc>
        <source-position filename="infd-session-proxy.h" line="62"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <type name="SessionProxy" c:type="InfdSessionProxy*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="has_subscriptions"
              c:identifier="infd_session_proxy_has_subscriptions">
        <doc xml:space="preserve"
             filename="infd-session-proxy.c"
             line="1680">Returns whether there are subscribed connections to the session.</doc>
        <source-position filename="infd-session-proxy.h" line="96"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-session-proxy.c"
               line="1686">Whether there are subscribed connections.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1682">A #InfdSessionProxy.</doc>
            <type name="SessionProxy" c:type="InfdSessionProxy*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_idle"
              c:identifier="infd_session_proxy_is_idle"
              glib:get-property="idle">
        <doc xml:space="preserve"
             filename="infd-session-proxy.c"
             line="1725">Returns whether the session is idle. The session is considered idle when
there are no subscriptions and no synchronizations (in either direction).</doc>
        <source-position filename="infd-session-proxy.h" line="103"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-session-proxy.c"
               line="1732">Whether the session is idle.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1727">A #InfdSessionProxy.</doc>
            <type name="SessionProxy" c:type="InfdSessionProxy*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_subscribed"
              c:identifier="infd_session_proxy_is_subscribed">
        <doc xml:space="preserve"
             filename="infd-session-proxy.c"
             line="1702">Returns %TRUE when @connection is subscribed to the session and %FALSE
otherwise.</doc>
        <source-position filename="infd-session-proxy.h" line="99"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-session-proxy.c"
               line="1710">Whether @connection is subscribed.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1704">A #InfdSessionProxy.</doc>
            <type name="SessionProxy" c:type="InfdSessionProxy*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1705">The connection to check for being subscribed.</doc>
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
        </parameters>
      </method>
      <method name="subscribe_to"
              c:identifier="infd_session_proxy_subscribe_to">
        <doc xml:space="preserve"
             filename="infd-session-proxy.c"
             line="1518">Subscribes @connection to @proxy's session. The first thing that will be
done is a synchronization (see inf_session_synchronize_to()). Then, all
changes to the session are propagated to @connection.

@seq_id should be a unique number for @connection, and the same number must
be passed on the client side to the #InfcSessionProxy object. Normally
#InfdDirectory and #InfcBrowser take care of choosing an appropriate
sequence identifier.

Normally, you want to set @synchronize to %TRUE in which case the whole
session state will be synchronized to @connection (within the subscription
group). However, if for whatever reason the remote site already has a
copy of the session, then you may set @synchronize to %FALSE to skip
synchronization. This happens for example for newly created documents, or
when the remote site synchronized the local site and wants to be
initially subscribed.

If @proxy's session is not in %INF_SESSION_RUNNING status, but in
%INF_SESSION_SYNCHRONIZING, then @connection must be the connection that
synchronizes the session and @synchronize needs to be set to %FALSE. This
causes the synchronizing connection to initially be subscribed. This
needs to be called directly after having created the session proxy (i.e.
without returning to the main loop before) so that the synchronization
connection is added to the subscription group for synchronization.

Otherwise a subscription can only be initiated if @proxy's session is in
state %INF_SESSION_RUNNING.</doc>
        <source-position filename="infd-session-proxy.h" line="86"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1520">A #InfdSessionProxy.</doc>
            <type name="SessionProxy" c:type="InfdSessionProxy*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1521">A #InfXmlConnection that is not yet subscribed.</doc>
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
          <parameter name="seq_id" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1522">The sequence identifier for @connection.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="synchronize" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1523">If %TRUE, then synchronize the session to @connection first.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="unsubscribe" c:identifier="infd_session_proxy_unsubscribe">
        <doc xml:space="preserve"
             filename="infd-session-proxy.c"
             line="1610">Unsubscribes a subscribed connection from @proxy's session. This will
prevent all users joined via @connection to continue modifying the
session's buffer, and it will cancel ongoing synchronization to
@connection, if not yet finished.</doc>
        <source-position filename="infd-session-proxy.h" line="92"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1612">A #InfdSessionProxy.</doc>
            <type name="SessionProxy" c:type="InfdSessionProxy*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1613">The #InfXmlConnection to unsubscribe.</doc>
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
        </parameters>
      </method>
      <property name="idle"
                transfer-ownership="none"
                getter="is_idle"
                default-value="TRUE">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="io"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Infinity.Io"/>
      </property>
      <property name="subscription-group"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Infinity.CommunicationHostedGroup"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <glib:signal name="add-subscription" when="last">
        <doc xml:space="preserve"
             filename="infd-session-proxy.c"
             line="1419">Emitted every time a connection is subscribed to the session.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1422">The subscribed #InfXmlConnection.</doc>
            <type name="Infinity.XmlConnection"/>
          </parameter>
          <parameter name="seq_id" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1423">The sequence identifier for @connection as passed to
infd_session_proxy_subscribe_to().</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="reject-user-join" when="last" introspectable="0">
        <doc xml:space="preserve"
             filename="infd-session-proxy.c"
             line="1461">This signal is emitted before every remote user join. The signal handler
can return %TRUE in which case the #InfdSessionProxy does not allow the
user join with %INF_REQUEST_ERROR_NOT_AUTHORIZED error. If there is more
than one signal handler, then if one of them returns %TRUE the user
join is rejected.

The @user_properties parameter is a #GArray of #GParameter values. It
contains the construct properties for the #InfUser object that would be
created if the user join is not rejected. It must not be modified, but
it can be used to make the decision whether to reject the user join or
not dependent on the parameters, such as allowing the user join only if
the user has a predefined name. The function
inf_session_lookup_user_property() can be used to look up a named
parameter in the array.</doc>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1464">A subscribed #InfXmlConnection requesting the user join.</doc>
            <type name="Infinity.XmlConnection"/>
          </parameter>
          <parameter name="user_properties" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1465">An array with the properties for the new user.</doc>
            <array name="GLib.Array">
              <type name="gpointer" c:type="gpointer"/>
            </array>
          </parameter>
          <parameter name="rejoin_user" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1466">The existing unavailable user that is being rejoined, or
%NULL.</doc>
            <type name="Infinity.User"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="remove-subscription" when="last">
        <doc xml:space="preserve"
             filename="infd-session-proxy.c"
             line="1441">Emitted every time a connection is unsubscribed to the session, or a
subscription is removed because the session is closed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-session-proxy.c"
                 line="1444">The unsubscribed #InfXmlConnection.</doc>
            <type name="Infinity.XmlConnection"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="SessionProxyClass"
            c:type="InfdSessionProxyClass"
            glib:is-gtype-struct-for="SessionProxy">
      <doc xml:space="preserve"
           filename="infd-session-proxy.h"
           line="39">This structure contains the default signal handlers of the
#InfdSessionProxy class.</doc>
      <source-position filename="infd-session-proxy.h" line="69"/>
      <field name="parent_class" readable="0" private="1">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="add_subscription">
        <doc xml:space="preserve"
             filename="infd-session-proxy.h"
             line="41">Default signal handler for the
#InfdSessionProxy::add-subscription signal.</doc>
        <callback name="add_subscription">
          <source-position filename="infd-session-proxy.h" line="58"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="proxy" transfer-ownership="none">
              <type name="SessionProxy" c:type="InfdSessionProxy*"/>
            </parameter>
            <parameter name="connection" transfer-ownership="none">
              <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
            </parameter>
            <parameter name="seq_id" transfer-ownership="none">
              <type name="guint" c:type="guint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="remove_subscription">
        <doc xml:space="preserve"
             filename="infd-session-proxy.h"
             line="43">Default signal handler for the
#InfdSessionProxy::remove-subscription signal.</doc>
        <callback name="remove_subscription">
          <source-position filename="infd-session-proxy.h" line="62"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="proxy" transfer-ownership="none">
              <type name="SessionProxy" c:type="InfdSessionProxy*"/>
            </parameter>
            <parameter name="connection" transfer-ownership="none">
              <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reject_user_join" introspectable="0">
        <doc xml:space="preserve"
             filename="infd-session-proxy.h"
             line="45">Default signal handler for the
#InfdSessionProxy::reject-user-join signal.</doc>
        <callback name="reject_user_join" introspectable="0">
          <source-position filename="infd-session-proxy.h" line="65"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="proxy" transfer-ownership="none">
              <type name="SessionProxy" c:type="InfdSessionProxy*"/>
            </parameter>
            <parameter name="connection" transfer-ownership="none">
              <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
            </parameter>
            <parameter name="user_properties" transfer-ownership="none">
              <array name="GLib.Array" c:type="const GArray*">
                <type name="gpointer" c:type="gpointer"/>
              </array>
            </parameter>
            <parameter name="rejoin_user" transfer-ownership="none">
              <type name="Infinity.User" c:type="InfUser*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <interface name="Storage"
               c:symbol-prefix="storage"
               c:type="InfdStorage"
               glib:type-name="InfdStorage"
               glib:get-type="infd_storage_get_type"
               glib:type-struct="StorageInterface">
      <source-position filename="infd-storage.h" line="94"/>
      <virtual-method name="create_subdirectory"
                      invoker="create_subdirectory"
                      throws="1">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="266">Creates a new subdirectory at the given path that is initially empty.</doc>
        <source-position filename="infd-storage.h" line="74"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="274">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="268">A #InfdStorage.</doc>
            <type name="Storage" c:type="InfdStorage*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="269">A path pointing to non-existing node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="read_acl" invoker="read_acl" throws="1">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="322">Reads the ACL for the node at the path @path from the storage. It returns
a list of #InfdStorageAcl objects.</doc>
        <source-position filename="infd-storage.h" line="86"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="331">A
possibly empty list of #InfdStorageAcl objects. Free with
infd_storage_acl_list_free() when no longer needed.</doc>
          <type name="GLib.SList" c:type="GSList*">
            <type name="StorageAcl"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="324">A #InfdStorage.</doc>
            <type name="Storage" c:type="InfdStorage*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="325">A path pointing to an existing node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="read_subdirectory"
                      invoker="read_subdirectory"
                      throws="1">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="236">Reads a subdirectory from the storage. Returns a list of
InfdStorageNode objects. Both the list and the objects need to
be freed by the caller via infd_storage_node_list_free().</doc>
        <source-position filename="infd-storage.h" line="70"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="246">A
#GSList that contains #InfdStorageNode objects, or %NULL if either the
subdirectory is empty or an error occurred.</doc>
          <type name="GLib.SList" c:type="GSList*">
            <type name="StorageNode"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="238">A #InfdStorage</doc>
            <type name="Storage" c:type="InfdStorage*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="239">A path pointing to a subdirectory node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="remove_node" invoker="remove_node" throws="1">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="292">Removes the node at path from storage. If it is a subdirectory node, all
containing nodes and subdirectory nodes are removed recursively.</doc>
        <source-position filename="infd-storage.h" line="79"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="303">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="294">A #InfdStorage</doc>
            <type name="Storage" c:type="InfdStorage*"/>
          </instance-parameter>
          <parameter name="identifier" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="295">The type of the node to remove, or %NULL to remove a
subdirectory (TODO: This shouldn't be necessary).</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="297">A path pointing to an existing node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="write_acl" invoker="write_acl" throws="1">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="352">Writes the ACL defined by @sheet_set into storage. If @sheet_set is %NULL
this is equivalent to an empty set. Returns %TRUE on success or %FALSE on
error. If the function fails, @error is set.</doc>
        <source-position filename="infd-storage.h" line="90"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="363">%TRUE on success or %FALSE on error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="354">A #InfdStorage.</doc>
            <type name="Storage" c:type="InfdStorage*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="355">A path to an existing node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="sheet_set" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="356">Sheets to set for the node at @path, or %NULL.</doc>
            <type name="Infinity.AclSheetSet" c:type="const InfAclSheetSet*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="create_subdirectory"
              c:identifier="infd_storage_create_subdirectory"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="266">Creates a new subdirectory at the given path that is initially empty.</doc>
        <source-position filename="infd-storage.h" line="139"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="274">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="268">A #InfdStorage.</doc>
            <type name="Storage" c:type="InfdStorage*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="269">A path pointing to non-existing node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="read_acl" c:identifier="infd_storage_read_acl" throws="1">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="322">Reads the ACL for the node at the path @path from the storage. It returns
a list of #InfdStorageAcl objects.</doc>
        <source-position filename="infd-storage.h" line="150"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="331">A
possibly empty list of #InfdStorageAcl objects. Free with
infd_storage_acl_list_free() when no longer needed.</doc>
          <type name="GLib.SList" c:type="GSList*">
            <type name="StorageAcl"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="324">A #InfdStorage.</doc>
            <type name="Storage" c:type="InfdStorage*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="325">A path pointing to an existing node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="read_subdirectory"
              c:identifier="infd_storage_read_subdirectory"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="236">Reads a subdirectory from the storage. Returns a list of
InfdStorageNode objects. Both the list and the objects need to
be freed by the caller via infd_storage_node_list_free().</doc>
        <source-position filename="infd-storage.h" line="134"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="246">A
#GSList that contains #InfdStorageNode objects, or %NULL if either the
subdirectory is empty or an error occurred.</doc>
          <type name="GLib.SList" c:type="GSList*">
            <type name="StorageNode"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="238">A #InfdStorage</doc>
            <type name="Storage" c:type="InfdStorage*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="239">A path pointing to a subdirectory node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_node"
              c:identifier="infd_storage_remove_node"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="292">Removes the node at path from storage. If it is a subdirectory node, all
containing nodes and subdirectory nodes are removed recursively.</doc>
        <source-position filename="infd-storage.h" line="144"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="303">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="294">A #InfdStorage</doc>
            <type name="Storage" c:type="InfdStorage*"/>
          </instance-parameter>
          <parameter name="identifier" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="295">The type of the node to remove, or %NULL to remove a
subdirectory (TODO: This shouldn't be necessary).</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="297">A path pointing to an existing node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="write_acl"
              c:identifier="infd_storage_write_acl"
              throws="1">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="352">Writes the ACL defined by @sheet_set into storage. If @sheet_set is %NULL
this is equivalent to an empty set. Returns %TRUE on success or %FALSE on
error. If the function fails, @error is set.</doc>
        <source-position filename="infd-storage.h" line="155"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="363">%TRUE on success or %FALSE on error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="storage" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="354">A #InfdStorage.</doc>
            <type name="Storage" c:type="InfdStorage*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="355">A path to an existing node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="sheet_set" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="356">Sheets to set for the node at @path, or %NULL.</doc>
            <type name="Infinity.AclSheetSet" c:type="const InfAclSheetSet*"/>
          </parameter>
        </parameters>
      </method>
    </interface>
    <record name="StorageAcl"
            c:type="InfdStorageAcl"
            glib:type-name="InfdStorageAcl"
            glib:get-type="infd_storage_acl_get_type"
            c:symbol-prefix="storage_acl">
      <source-position filename="infd-storage.h" line="59"/>
      <field name="account_id" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="mask" writable="1">
        <type name="Infinity.AclMask" c:type="InfAclMask"/>
      </field>
      <field name="perms" writable="1">
        <type name="Infinity.AclMask" c:type="InfAclMask"/>
      </field>
      <method name="copy" c:identifier="infd_storage_acl_copy">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="174">Creates a copy of a #InfdStorageAcl object.</doc>
        <source-position filename="infd-storage.h" line="125"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="180">A copy of @acl.</doc>
          <type name="StorageAcl" c:type="InfdStorageAcl*"/>
        </return-value>
        <parameters>
          <instance-parameter name="acl" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="176">ACL settings from which to make a copy.</doc>
            <type name="StorageAcl" c:type="const InfdStorageAcl*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="infd_storage_acl_free">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="197">Frees a #InfdStorageAcl allocated with
infd_storage_acl_copy().</doc>
        <source-position filename="infd-storage.h" line="128"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="acl" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="199">A #InfdStorageAcl.</doc>
            <type name="StorageAcl" c:type="InfdStorageAcl*"/>
          </instance-parameter>
        </parameters>
      </method>
      <function name="list_free" c:identifier="infd_storage_acl_list_free">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="213">Frees a singly-linked list of #InfdStorageAcl as returned by
infd_storage_read_acls().</doc>
        <source-position filename="infd-storage.h" line="131"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="acl_list" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="215">A list of #InfdStorageAcl
objects.</doc>
            <type name="GLib.SList" c:type="GSList*">
              <type name="StorageAcl"/>
            </type>
          </parameter>
        </parameters>
      </function>
    </record>
    <record name="StorageInterface"
            c:type="InfdStorageInterface"
            glib:is-gtype-struct-for="Storage">
      <source-position filename="infd-storage.h" line="94"/>
      <field name="parent">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="read_subdirectory">
        <callback name="read_subdirectory" throws="1">
          <source-position filename="infd-storage.h" line="70"/>
          <return-value transfer-ownership="full" nullable="1">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="246">A
#GSList that contains #InfdStorageNode objects, or %NULL if either the
subdirectory is empty or an error occurred.</doc>
            <type name="GLib.SList" c:type="GSList*">
              <type name="StorageNode"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="238">A #InfdStorage</doc>
              <type name="Storage" c:type="InfdStorage*"/>
            </parameter>
            <parameter name="path" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="239">A path pointing to a subdirectory node.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="create_subdirectory">
        <callback name="create_subdirectory" throws="1">
          <source-position filename="infd-storage.h" line="74"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="274">%TRUE on success.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="268">A #InfdStorage.</doc>
              <type name="Storage" c:type="InfdStorage*"/>
            </parameter>
            <parameter name="path" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="269">A path pointing to non-existing node.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="remove_node">
        <callback name="remove_node" throws="1">
          <source-position filename="infd-storage.h" line="79"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="303">%TRUE on success.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="294">A #InfdStorage</doc>
              <type name="Storage" c:type="InfdStorage*"/>
            </parameter>
            <parameter name="identifier" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="295">The type of the node to remove, or %NULL to remove a
subdirectory (TODO: This shouldn't be necessary).</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="path" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="297">A path pointing to an existing node.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="read_acl">
        <callback name="read_acl" throws="1">
          <source-position filename="infd-storage.h" line="86"/>
          <return-value transfer-ownership="full" nullable="1">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="331">A
possibly empty list of #InfdStorageAcl objects. Free with
infd_storage_acl_list_free() when no longer needed.</doc>
            <type name="GLib.SList" c:type="GSList*">
              <type name="StorageAcl"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="324">A #InfdStorage.</doc>
              <type name="Storage" c:type="InfdStorage*"/>
            </parameter>
            <parameter name="path" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="325">A path pointing to an existing node.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="write_acl">
        <callback name="write_acl" throws="1">
          <source-position filename="infd-storage.h" line="90"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="363">%TRUE on success or %FALSE on error.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="storage" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="354">A #InfdStorage.</doc>
              <type name="Storage" c:type="InfdStorage*"/>
            </parameter>
            <parameter name="path" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="355">A path to an existing node.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="sheet_set" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-storage.c"
                   line="356">Sheets to set for the node at @path, or %NULL.</doc>
              <type name="Infinity.AclSheetSet"
                    c:type="const InfAclSheetSet*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="StorageNode"
            c:type="InfdStorageNode"
            glib:type-name="InfdStorageNode"
            glib:get-type="infd_storage_node_get_type"
            c:symbol-prefix="storage_node">
      <source-position filename="infd-storage.h" line="52"/>
      <field name="type" writable="1">
        <type name="StorageNodeType" c:type="InfdStorageNodeType"/>
      </field>
      <field name="name" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="identifier" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <constructor name="new_note" c:identifier="infd_storage_node_new_note">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="75">Creates a new #InfdStorageNode with type
%INFD_STORAGE_NODE_NOTE and the given path and identifier. This
is most likely only going to be used by #InfdStorage
implementations.</doc>
        <source-position filename="infd-storage.h" line="112"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="86">A new #InfdStorageNode.</doc>
          <type name="StorageNode" c:type="InfdStorageNode*"/>
        </return-value>
        <parameters>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="77">Path to the node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="identifier" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="78">Identifier of the note type, for example 'InfText' for text
notes.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_subdirectory"
                   c:identifier="infd_storage_node_new_subdirectory">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="49">Creates a new #InfdStorageNode with type
%INFD_STORAGE_NODE_SUBDIRECTORY and the given path. This
is most likely only going to be used by #InfdStorage
implementations.</doc>
        <source-position filename="infd-storage.h" line="109"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="58">A new #InfdStorageNode.</doc>
          <type name="StorageNode" c:type="InfdStorageNode*"/>
        </return-value>
        <parameters>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="51">Path to the node.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy" c:identifier="infd_storage_node_copy">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="106">Creates a copy of a #InfdStorageNode object.</doc>
        <source-position filename="infd-storage.h" line="116"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="112">A copy of @node.</doc>
          <type name="StorageNode" c:type="InfdStorageNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="node" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="108">Node from which to make a copy.</doc>
            <type name="StorageNode" c:type="const InfdStorageNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="infd_storage_node_free">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="131">Frees a #InfdStorageNode allocated with
infd_storage_node_new_subdirectory(), infd_storage_node_new_note() or
infd_storage_node_copy().</doc>
        <source-position filename="infd-storage.h" line="119"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="node" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="133">A #InfdStorageNode.</doc>
            <type name="StorageNode" c:type="InfdStorageNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <function name="list_free" c:identifier="infd_storage_node_list_free">
        <doc xml:space="preserve"
             filename="infd-storage.c"
             line="151">Frees a singly-linked list of #InfdStorageNode as returned by
infd_storage_read_subdirectory().</doc>
        <source-position filename="infd-storage.h" line="122"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="node_list" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-storage.c"
                 line="153">A list of #InfdStorageNode
objects.</doc>
            <type name="GLib.SList" c:type="GSList*">
              <type name="StorageNode"/>
            </type>
          </parameter>
        </parameters>
      </function>
    </record>
    <enumeration name="StorageNodeType"
                 glib:type-name="InfdStorageNodeType"
                 glib:get-type="infd_storage_node_type_get_type"
                 c:type="InfdStorageNodeType">
      <member name="subdirectory"
              value="0"
              c:identifier="INFD_STORAGE_NODE_SUBDIRECTORY"
              glib:nick="subdirectory"
              glib:name="INFD_STORAGE_NODE_SUBDIRECTORY">
      </member>
      <member name="note"
              value="1"
              c:identifier="INFD_STORAGE_NODE_NOTE"
              glib:nick="note"
              glib:name="INFD_STORAGE_NODE_NOTE">
      </member>
    </enumeration>
    <function-macro name="TCP_SERVER"
                    c:identifier="INFD_TCP_SERVER"
                    introspectable="0">
      <source-position filename="infd-tcp-server.h" line="30"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="TCP_SERVER_CLASS"
                    c:identifier="INFD_TCP_SERVER_CLASS"
                    introspectable="0">
      <source-position filename="infd-tcp-server.h" line="31"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="TCP_SERVER_GET_CLASS"
                    c:identifier="INFD_TCP_SERVER_GET_CLASS"
                    introspectable="0">
      <source-position filename="infd-tcp-server.h" line="34"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <class name="TcpServer"
           c:symbol-prefix="tcp_server"
           c:type="InfdTcpServer"
           parent="GObject.Object"
           glib:type-name="InfdTcpServer"
           glib:get-type="infd_tcp_server_get_type"
           glib:type-struct="TcpServerClass">
      <source-position filename="infd-tcp-server.h" line="56"/>
      <virtual-method name="error">
        <source-position filename="infd-tcp-server.h" line="54"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <type name="TcpServer" c:type="InfdTcpServer*"/>
          </instance-parameter>
          <parameter name="error" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="new_connection">
        <source-position filename="infd-tcp-server.h" line="51"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <type name="TcpServer" c:type="InfdTcpServer*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <type name="Infinity.TcpConnection" c:type="InfTcpConnection*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="bind" c:identifier="infd_tcp_server_bind" throws="1">
        <doc xml:space="preserve"
             filename="infd-tcp-server.c"
             line="536">Binds the server to the address and port given by the
#InfdTcpServer:local-address and #InfdTcpServer:local-port properties. If
the former is %NULL, it will bind on all interfaces on IPv4. If the latter
is 0, a random available port will be assigned. If the function fails,
%FALSE is returned and an error is set.

@server must be in %INFD_TCP_SERVER_CLOSED state for this function to be
called.</doc>
        <source-position filename="infd-tcp-server.h" line="69"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-tcp-server.c"
               line="550">%TRUE on success, or %FALSE if an error occurred.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-tcp-server.c"
                 line="538">A #InfdTcpServer.</doc>
            <type name="TcpServer" c:type="InfdTcpServer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="close" c:identifier="infd_tcp_server_close">
        <doc xml:space="preserve"
             filename="infd-tcp-server.c"
             line="798">Closes a TCP server that is open or bound.</doc>
        <source-position filename="infd-tcp-server.h" line="77"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-tcp-server.c"
                 line="800">A #InfdTcpServer.</doc>
            <type name="TcpServer" c:type="InfdTcpServer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_keepalive"
              c:identifier="infd_tcp_server_get_keepalive"
              glib:get-property="keepalive">
        <doc xml:space="preserve"
             filename="infd-tcp-server.c"
             line="845">Obtains the current keepalive settings for accepted connections.</doc>
        <source-position filename="infd-tcp-server.h" line="84"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-tcp-server.c"
               line="851">A #InfKeepalive representing the keepalive configuration for
accepted connections, owned by @server.</doc>
          <type name="Infinity.Keepalive" c:type="const InfKeepalive*"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-tcp-server.c"
                 line="847">A #InfdTcpServer.</doc>
            <type name="TcpServer" c:type="InfdTcpServer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="open" c:identifier="infd_tcp_server_open" throws="1">
        <doc xml:space="preserve"
             filename="infd-tcp-server.c"
             line="691">Attempts to open @server. This means binding its local address and port
if not already (see infd_tcp_server_bind()) and accepting incoming
connections.

@server needs to be in %INFD_TCP_SERVER_CLOSED or %INFD_TCP_SERVER_BOUND
status for this function to be called. If @server's status is
%INFD_TCP_SERVER_CLOSED, then infd_tcp_server_bind() is called before
actually opening the server.</doc>
        <source-position filename="infd-tcp-server.h" line="73"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-tcp-server.c"
               line="705">%TRUE on success, or %FALSE if an error occurred.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-tcp-server.c"
                 line="693">A #InfdTcpServer.</doc>
            <type name="TcpServer" c:type="InfdTcpServer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_keepalive"
              c:identifier="infd_tcp_server_set_keepalive"
              glib:set-property="keepalive">
        <doc xml:space="preserve"
             filename="infd-tcp-server.c"
             line="828">Sets the keepalive settings for new connections accepted by the server.</doc>
        <source-position filename="infd-tcp-server.h" line="80"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-tcp-server.c"
                 line="830">A #InfdTcpServer.</doc>
            <type name="TcpServer" c:type="InfdTcpServer*"/>
          </instance-parameter>
          <parameter name="keepalive" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-tcp-server.c"
                 line="831">The keepalive settings for accepted connections.</doc>
            <type name="Infinity.Keepalive" c:type="const InfKeepalive*"/>
          </parameter>
        </parameters>
      </method>
      <property name="io"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Infinity.Io"/>
      </property>
      <property name="keepalive"
                writable="1"
                transfer-ownership="none"
                setter="set_keepalive"
                getter="get_keepalive">
        <type name="Infinity.Keepalive"/>
      </property>
      <property name="local-address" writable="1" transfer-ownership="none">
        <type name="Infinity.IpAddress"/>
      </property>
      <property name="local-port"
                writable="1"
                transfer-ownership="none"
                default-value="0">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="status"
                transfer-ownership="none"
                default-value="INFD_TCP_SERVER_CLOSED">
        <type name="TcpServerStatus"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <glib:signal name="error" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="GLib.Error"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="new-connection" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="Infinity.TcpConnection"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="TcpServerClass"
            c:type="InfdTcpServerClass"
            glib:is-gtype-struct-for="TcpServer">
      <source-position filename="infd-tcp-server.h" line="56"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="new_connection">
        <callback name="new_connection">
          <source-position filename="infd-tcp-server.h" line="51"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="server" transfer-ownership="none">
              <type name="TcpServer" c:type="InfdTcpServer*"/>
            </parameter>
            <parameter name="connection" transfer-ownership="none">
              <type name="Infinity.TcpConnection" c:type="InfTcpConnection*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="error">
        <callback name="error">
          <source-position filename="infd-tcp-server.h" line="54"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="server" transfer-ownership="none">
              <type name="TcpServer" c:type="InfdTcpServer*"/>
            </parameter>
            <parameter name="error" transfer-ownership="none">
              <type name="GLib.Error" c:type="GError*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <enumeration name="TcpServerStatus"
                 glib:type-name="InfdTcpServerStatus"
                 glib:get-type="infd_tcp_server_status_get_type"
                 c:type="InfdTcpServerStatus">
      <member name="closed"
              value="0"
              c:identifier="INFD_TCP_SERVER_CLOSED"
              glib:nick="closed"
              glib:name="INFD_TCP_SERVER_CLOSED">
      </member>
      <member name="open"
              value="2"
              c:identifier="INFD_TCP_SERVER_OPEN"
              glib:nick="open"
              glib:name="INFD_TCP_SERVER_OPEN">
      </member>
    </enumeration>
    <function-macro name="XML_SERVER"
                    c:identifier="INFD_XML_SERVER"
                    introspectable="0">
      <source-position filename="infd-xml-server.h" line="30"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="XML_SERVER_GET_IFACE"
                    c:identifier="INFD_XML_SERVER_GET_IFACE"
                    introspectable="0">
      <source-position filename="infd-xml-server.h" line="32"/>
      <parameters>
        <parameter name="inst">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="XMPP_SERVER"
                    c:identifier="INFD_XMPP_SERVER"
                    introspectable="0">
      <source-position filename="infd-xmpp-server.h" line="35"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="XMPP_SERVER_CLASS"
                    c:identifier="INFD_XMPP_SERVER_CLASS"
                    introspectable="0">
      <source-position filename="infd-xmpp-server.h" line="36"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="XMPP_SERVER_GET_CLASS"
                    c:identifier="INFD_XMPP_SERVER_GET_CLASS"
                    introspectable="0">
      <source-position filename="infd-xmpp-server.h" line="39"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <interface name="XmlServer"
               c:symbol-prefix="xml_server"
               c:type="InfdXmlServer"
               glib:type-name="InfdXmlServer"
               glib:get-type="infd_xml_server_get_type"
               glib:type-struct="XmlServerInterface">
      <source-position filename="infd-xml-server.h" line="55"/>
      <virtual-method name="close" invoker="close">
        <doc xml:space="preserve"
             filename="infd-xml-server.c"
             line="86">Closes @server.</doc>
        <source-position filename="infd-xml-server.h" line="50"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xml-server.c"
                 line="88">A #InfdXmlServer.</doc>
            <type name="XmlServer" c:type="InfdXmlServer*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="new_connection" invoker="new_connection">
        <doc xml:space="preserve"
             filename="infd-xml-server.c"
             line="105">Emits the "new-connection" signal on @server.</doc>
        <source-position filename="infd-xml-server.h" line="53"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xml-server.c"
                 line="107">A #InfdXmlServer.</doc>
            <type name="XmlServer" c:type="InfdXmlServer*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xml-server.c"
                 line="108">A #InfXmlConnection.</doc>
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="close" c:identifier="infd_xml_server_close">
        <doc xml:space="preserve"
             filename="infd-xml-server.c"
             line="86">Closes @server.</doc>
        <source-position filename="infd-xml-server.h" line="64"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xml-server.c"
                 line="88">A #InfdXmlServer.</doc>
            <type name="XmlServer" c:type="InfdXmlServer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="new_connection"
              c:identifier="infd_xml_server_new_connection">
        <doc xml:space="preserve"
             filename="infd-xml-server.c"
             line="105">Emits the "new-connection" signal on @server.</doc>
        <source-position filename="infd-xml-server.h" line="67"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xml-server.c"
                 line="107">A #InfdXmlServer.</doc>
            <type name="XmlServer" c:type="InfdXmlServer*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xml-server.c"
                 line="108">A #InfXmlConnection.</doc>
            <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
          </parameter>
        </parameters>
      </method>
      <property name="status"
                transfer-ownership="none"
                default-value="INFD_XML_SERVER_CLOSED">
        <type name="XmlServerStatus"/>
      </property>
      <glib:signal name="new-connection" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="Infinity.XmlConnection"/>
          </parameter>
        </parameters>
      </glib:signal>
    </interface>
    <record name="XmlServerInterface"
            c:type="InfdXmlServerInterface"
            glib:is-gtype-struct-for="XmlServer">
      <source-position filename="infd-xml-server.h" line="55"/>
      <field name="parent">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="close">
        <callback name="close">
          <source-position filename="infd-xml-server.h" line="50"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="server" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-xml-server.c"
                   line="88">A #InfdXmlServer.</doc>
              <type name="XmlServer" c:type="InfdXmlServer*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="new_connection">
        <callback name="new_connection">
          <source-position filename="infd-xml-server.h" line="53"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="server" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-xml-server.c"
                   line="107">A #InfdXmlServer.</doc>
              <type name="XmlServer" c:type="InfdXmlServer*"/>
            </parameter>
            <parameter name="connection" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="infd-xml-server.c"
                   line="108">A #InfXmlConnection.</doc>
              <type name="Infinity.XmlConnection" c:type="InfXmlConnection*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <enumeration name="XmlServerStatus"
                 glib:type-name="InfdXmlServerStatus"
                 glib:get-type="infd_xml_server_status_get_type"
                 c:type="InfdXmlServerStatus">
      <member name="closed"
              value="0"
              c:identifier="INFD_XML_SERVER_CLOSED"
              glib:nick="closed"
              glib:name="INFD_XML_SERVER_CLOSED">
      </member>
      <member name="closing"
              value="1"
              c:identifier="INFD_XML_SERVER_CLOSING"
              glib:nick="closing"
              glib:name="INFD_XML_SERVER_CLOSING">
      </member>
      <member name="open"
              value="2"
              c:identifier="INFD_XML_SERVER_OPEN"
              glib:nick="open"
              glib:name="INFD_XML_SERVER_OPEN">
      </member>
      <member name="opening"
              value="3"
              c:identifier="INFD_XML_SERVER_OPENING"
              glib:nick="opening"
              glib:name="INFD_XML_SERVER_OPENING">
      </member>
    </enumeration>
    <class name="XmppServer"
           c:symbol-prefix="xmpp_server"
           c:type="InfdXmppServer"
           parent="GObject.Object"
           glib:type-name="InfdXmppServer"
           glib:get-type="infd_xmpp_server_get_type"
           glib:type-struct="XmppServerClass">
      <source-position filename="infd-xmpp-server.h" line="50"/>
      <implements name="XmlServer"/>
      <constructor name="new" c:identifier="infd_xmpp_server_new">
        <doc xml:space="preserve"
             filename="infd-xmpp-server.c"
             line="652">Creates a new #InfdXmppServer with @tcp as underlaying TCP server object.
No attempt is being made to open @tcp, if it is not already open. When a
new connection comes in, the XMPP server creates a XMPP connection that
may be used to communicate with the client. Note however that the
resulting connection will be in status OPENING until authentication has
completed.

If @policy is %INF_XMPP_CONNECTION_SECURITY_ONLY_UNSECURED, then @creds may
be %NULL. If @creds is non-%NULL nevertheless, then it is possible to change
the security policy later using infd_xmpp_server_set_security_policy().
@creds can also be changed later while the server is running. So just set
valid credentials before changing @policy to allow TLS.

If @sasl_context is %NULL, the server uses a built-in context that only
supports ANONYMOUS authentication. If @sasl_context is not %NULL, then
@sasl_mechanisms specifies the mechanisms offered to clients. If
@sasl_mechanisms is %NULL, then all available mechanims will be offered.
If @sasl_context is %NULL, then this parameter is ignored.</doc>
        <source-position filename="infd-xmpp-server.h" line="60"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="infd-xmpp-server.c"
               line="679">A new #InfdXmppServer.</doc>
          <type name="XmppServer" c:type="InfdXmppServer*"/>
        </return-value>
        <parameters>
          <parameter name="tcp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xmpp-server.c"
                 line="654">A #InfdTcpServer.</doc>
            <type name="TcpServer" c:type="InfdTcpServer*"/>
          </parameter>
          <parameter name="policy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xmpp-server.c"
                 line="655">The initial security policy.</doc>
            <type name="Infinity.XmppConnectionSecurityPolicy"
                  c:type="InfXmppConnectionSecurityPolicy"/>
          </parameter>
          <parameter name="creds" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xmpp-server.c"
                 line="656">Certificate credentials used to secure any communication.</doc>
            <type name="Infinity.CertificateCredentials"
                  c:type="InfCertificateCredentials*"/>
          </parameter>
          <parameter name="sasl_context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xmpp-server.c"
                 line="657">A SASL context used for authentication.</doc>
            <type name="Infinity.SaslContext" c:type="InfSaslContext*"/>
          </parameter>
          <parameter name="sasl_mechanisms" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xmpp-server.c"
                 line="658">A whitespace-sparated list of SASL mechanisms.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <virtual-method name="error">
        <source-position filename="infd-xmpp-server.h" line="48"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <type name="XmppServer" c:type="InfdXmppServer*"/>
          </instance-parameter>
          <parameter name="error" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_security_policy"
              c:identifier="infd_xmpp_server_get_security_policy"
              glib:get-property="security-policy">
        <doc xml:space="preserve"
             filename="infd-xmpp-server.c"
             line="740">Returns the current security policy for newly accepted
#InfXmppConnection&lt;!-- --&gt;s.</doc>
        <source-position filename="infd-xmpp-server.h" line="71"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-xmpp-server.c"
               line="747">The current security policy.</doc>
          <type name="Infinity.XmppConnectionSecurityPolicy"
                c:type="InfXmppConnectionSecurityPolicy"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xmpp-server.c"
                 line="742">A #InfdXmppServer.</doc>
            <type name="XmppServer" c:type="InfdXmppServer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_security_policy"
              c:identifier="infd_xmpp_server_set_security_policy"
              glib:set-property="security-policy">
        <doc xml:space="preserve"
             filename="infd-xmpp-server.c"
             line="710">Sets the security policy for newly accepted #InfXmppConnection&lt;!-- --&gt;s.
Does not already established connections.</doc>
        <source-position filename="infd-xmpp-server.h" line="67"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="server" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xmpp-server.c"
                 line="712">A #InfdXmppServer.</doc>
            <type name="XmppServer" c:type="InfdXmppServer*"/>
          </instance-parameter>
          <parameter name="policy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="infd-xmpp-server.c"
                 line="713">The new security policy.</doc>
            <type name="Infinity.XmppConnectionSecurityPolicy"
                  c:type="InfXmppConnectionSecurityPolicy"/>
          </parameter>
        </parameters>
      </method>
      <property name="credentials"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="Infinity.CertificateCredentials"/>
      </property>
      <property name="local-hostname"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                default-value="NULL">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="sasl-context"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="Infinity.SaslContext"/>
      </property>
      <property name="sasl-mechanisms"
                writable="1"
                construct="1"
                transfer-ownership="none"
                default-value="NULL">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="security-policy"
                writable="1"
                construct="1"
                transfer-ownership="none"
                setter="set_security_policy"
                getter="get_security_policy"
                default-value="INF_XMPP_CONNECTION_SECURITY_ONLY_UNSECURED">
        <type name="Infinity.XmppConnectionSecurityPolicy"/>
      </property>
      <property name="tcp-server"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="TcpServer"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <glib:signal name="error" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="GLib.Error"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="XmppServerClass"
            c:type="InfdXmppServerClass"
            glib:is-gtype-struct-for="XmppServer">
      <source-position filename="infd-xmpp-server.h" line="50"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="error">
        <callback name="error">
          <source-position filename="infd-xmpp-server.h" line="48"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="server" transfer-ownership="none">
              <type name="XmppServer" c:type="InfdXmppServer*"/>
            </parameter>
            <parameter name="error" transfer-ownership="none">
              <type name="GLib.Error" c:type="GError*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <function name="chat_filesystem_format_read"
              c:identifier="infd_chat_filesystem_format_read"
              throws="1">
      <doc xml:space="preserve"
           filename="infd-chat-filesystem-format.c"
           line="66">Reads a chat session from @path in @storage. The file is expected to have
been saved with infd_chat_filesystem_format_write() before. The @buffer
parameter should be an empty #InfChatBuffer, and the document will be
written into this buffer. If the function succeeds, the buffer can be used
to create an #InfChatSession with inf_chat_session_new(). If the function
fails, %FALSE is returned and @error is set.</doc>
      <source-position filename="infd-chat-filesystem-format.h" line="43"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="infd-chat-filesystem-format.c"
             line="80">%TRUE on success or %FALSE on error.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="storage" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-chat-filesystem-format.c"
               line="68">A #InfdFilesystemStorage.</doc>
          <type name="FilesystemStorage" c:type="InfdFilesystemStorage*"/>
        </parameter>
        <parameter name="path" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-chat-filesystem-format.c"
               line="69">Storage path to retrieve the session from.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-chat-filesystem-format.c"
               line="70">An empty #InfTextBuffer to use as the new session's buffer.</doc>
          <type name="Infinity.ChatBuffer" c:type="InfChatBuffer*"/>
        </parameter>
      </parameters>
    </function>
    <function name="chat_filesystem_format_write"
              c:identifier="infd_chat_filesystem_format_write"
              throws="1">
      <doc xml:space="preserve"
           filename="infd-chat-filesystem-format.c"
           line="183">Writes the given buffer into the filesystem storage at @path. If
successful, the session can then be read back with
infd_chat_filesystem_format_read(). If the function fails, %FALSE is
returned and @error is set.</doc>
      <source-position filename="infd-chat-filesystem-format.h" line="49"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="infd-chat-filesystem-format.c"
             line="195">%TRUE on success or %FALSE on error.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="storage" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-chat-filesystem-format.c"
               line="185">A #InfdFilesystemStorage.</doc>
          <type name="FilesystemStorage" c:type="InfdFilesystemStorage*"/>
        </parameter>
        <parameter name="path" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-chat-filesystem-format.c"
               line="186">Storage path where to write the session to.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-chat-filesystem-format.c"
               line="187">The #InfChatBuffer to write.</doc>
          <type name="Infinity.ChatBuffer" c:type="InfChatBuffer*"/>
        </parameter>
      </parameters>
    </function>
    <docsection name="infd-account-storage">
      <doc xml:space="preserve"
           filename="infd-account-storage.c"
           line="20">#InfdAccountStorage provides an interface for #InfdDirectory to access a
database of user accounts. It provides methods to list and lookup available
accounts, and to add and remove accounts.

Each account is uniquely identified by an account ID, #InfAclAccount.id,
and is assigned a human-readable name, #InfAclAccount.name. Typically, most
operations can be performed with the ID, and for example permissions for
users are stored by referring to the account ID in #InfdDirectory. The
authentication storage can be used to look up a name for the ID, and it is
responsible for storing the account information permanantly.

Interface implementations do not need to support every operation provided
by the API of this interface, however if they support a certain operation,
#InfdDirectory takes advantage of it. The only required operation is to be
able to look up an account name by its ID, and the reverse lookup, i.e.
find all accounts with a given name. The
#InfdAccountStorageInterface.get_support() function returns a bitmask of the
supported operations.

Implementations of this interface can couple the available accounts to
various external sources, such as SQL databases, LDAP or PAM.
Libinfinity also provides a standalone implementation of this interface,
which stores the account list as a file in the file system, see
#InfdFilesystemAccountStorage.</doc>
    </docsection>
    <docsection name="infd-chat-filesystem-format">
      <doc xml:space="preserve"
           filename="infd-chat-filesystem-format.c"
           line="20">The functions in this section are utility functions that can be used when
implementing a #InfdNotePlugin to handle #InfChatSession&lt;!-- --&gt;s. These
functions implement reading and writing the content of an #InfChatSession
to an XML file in the storage.</doc>
    </docsection>
    <docsection name="infd-directory">
      <doc xml:space="preserve"
           filename="infd-directory.c"
           line="20">The #InfdDirectory manages a directory of documents. An item in the
directory is also called &amp;quot;node&amp;quot;. A node may either be a
subdirectory or a document (also called "note"). Notes may be of
different type - there may be plain text notes, rich text notes,
graphics notes, etc.

#InfdStorage defines where the directory structure and the notes are read
from and how they are permanently stored.</doc>
    </docsection>
    <docsection name="infd-filesystem-account-storage">
      <doc xml:space="preserve"
           filename="infd-filesystem-account-storage.c"
           line="20">This class implements the #InfdAccountStorage interface via an underlying
#InfdFilesystemStorage. It uses the &amp;quot;root-directory&amp;quot; of that
underlying storage to store an XML file there which contains the account
information.

This is a simple implementation of an account storage which keeps all
accounts read from the file in memory. When you have more than a thousand
accounts or so you should start thinking of using a more sophisticated
account storage, for example a database backend.</doc>
    </docsection>
    <docsection name="infd-progress-request">
      <doc xml:space="preserve"
           filename="infd-progress-request.c"
           line="20">This class represents a request which consists of multiple steps and
for which progress on the overall operation is reported.</doc>
    </docsection>
    <docsection name="infd-request">
      <doc xml:space="preserve"
           filename="infd-request.c"
           line="20">#InfdRequest represents an asynchronous operation carried out on the
server side. It has the #InfdRequest:requestor property which specifies
which connection triggered the request, if any.</doc>
    </docsection>
    <docsection name="infd-session-proxy">
      <doc xml:space="preserve"
           filename="infd-session-proxy.c"
           line="20">#InfdSessionProxy is a manager for #InfSession that is specific for the
server side. The #InfdSessionProxy manages exactly one #InfSession. It is
usually created by #InfdDirectory when the content of a node is requested.

#InfdSessionProxy allows to perform server-specific operations for the
session it manages, such as joining a local user, or removing a connection
from the list of subscribed connections. In addition it handles requests
made by its counterpart, #InfcSessionProxy, for the client side, such as
remote user joins.

#InfdSessionProxy implements the #InfSessionProxy interface, which can be
used to access the underlying #InfSession or to join a local user.</doc>
    </docsection>
    <function name="storage_acl_list_free"
              c:identifier="infd_storage_acl_list_free"
              moved-to="StorageAcl.list_free">
      <doc xml:space="preserve"
           filename="infd-storage.c"
           line="213">Frees a singly-linked list of #InfdStorageAcl as returned by
infd_storage_read_acls().</doc>
      <source-position filename="infd-storage.h" line="131"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="acl_list" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="215">A list of #InfdStorageAcl
objects.</doc>
          <type name="GLib.SList" c:type="GSList*">
            <type name="StorageAcl"/>
          </type>
        </parameter>
      </parameters>
    </function>
    <function name="storage_node_list_free"
              c:identifier="infd_storage_node_list_free"
              moved-to="StorageNode.list_free">
      <doc xml:space="preserve"
           filename="infd-storage.c"
           line="151">Frees a singly-linked list of #InfdStorageNode as returned by
infd_storage_read_subdirectory().</doc>
      <source-position filename="infd-storage.h" line="122"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="node_list" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="infd-storage.c"
               line="153">A list of #InfdStorageNode
objects.</doc>
          <type name="GLib.SList" c:type="GSList*">
            <type name="StorageNode"/>
          </type>
        </parameter>
      </parameters>
    </function>
  </namespace>
</repository>
