## EWebDAVSession

EWebDAVSession — A WebDAV, CalDAV and CardDAV session

## Functions

EWebDAVResource * | e_webdav_resource_new ()
EWebDAVResource * | e_webdav_resource_copy ()
void | e_webdav_resource_free ()
gboolean | (*EWebDAVPropstatTraverseFunc) ()
EWebDAVPropertyChange * | e_webdav_property_change_new_set ()
EWebDAVPropertyChange * | e_webdav_property_change_new_remove ()
EWebDAVPropertyChange * | e_webdav_property_change_copy ()
void | e_webdav_property_change_free ()
EWebDAVPrivilege * | e_webdav_privilege_new ()
EWebDAVPrivilege * | e_webdav_privilege_copy ()
void | e_webdav_privilege_free ()
EWebDAVAccessControlEntry * | e_webdav_access_control_entry_new ()
EWebDAVAccessControlEntry * | e_webdav_access_control_entry_copy ()
void | e_webdav_access_control_entry_free ()
void | e_webdav_access_control_entry_append_privilege ()
GSList * | e_webdav_access_control_entry_get_privileges ()
EWebDAVSession * | e_webdav_session_new ()
const gchar * | e_webdav_session_get_last_dav_error_code ()
gboolean | e_webdav_session_get_last_dav_error_is_permission ()
SoupRequestHTTP * | e_webdav_session_new_request ()
gboolean | e_webdav_session_replace_with_detailed_error ()
gchar * | e_webdav_session_ensure_full_uri ()
gboolean | e_webdav_session_options_sync ()
gboolean | e_webdav_session_post_sync ()
gboolean | e_webdav_session_post_with_content_type_sync ()
gboolean | e_webdav_session_propfind_sync ()
gboolean | e_webdav_session_proppatch_sync ()
gboolean | e_webdav_session_report_sync ()
gboolean | e_webdav_session_mkcol_sync ()
gboolean | e_webdav_session_mkcol_addressbook_sync ()
gboolean | e_webdav_session_mkcalendar_sync ()
gboolean | e_webdav_session_get_sync ()
gboolean | e_webdav_session_get_data_sync ()
gboolean | e_webdav_session_put_sync ()
gboolean | e_webdav_session_put_data_sync ()
gboolean | e_webdav_session_delete_sync ()
gboolean | e_webdav_session_copy_sync ()
gboolean | e_webdav_session_move_sync ()
gboolean | e_webdav_session_lock_sync ()
gboolean | e_webdav_session_refresh_lock_sync ()
gboolean | e_webdav_session_unlock_sync ()
gboolean | e_webdav_session_traverse_multistatus_response ()
gboolean | e_webdav_session_traverse_mkcol_response ()
gboolean | e_webdav_session_traverse_mkcalendar_response ()
gboolean | e_webdav_session_getctag_sync ()
gboolean | e_webdav_session_list_sync ()
gboolean | e_webdav_session_update_properties_sync ()
gboolean | e_webdav_session_lock_resource_sync ()
gboolean | e_webdav_session_acl_sync ()
gboolean | e_webdav_session_get_supported_privilege_set_sync ()
gboolean | e_webdav_session_get_current_user_privilege_set_sync ()
gboolean | e_webdav_session_get_acl_sync ()
gboolean | e_webdav_session_get_acl_restrictions_sync ()
gboolean | e_webdav_session_get_principal_collection_set_sync ()
gboolean | e_webdav_session_set_acl_sync ()
gboolean | e_webdav_session_principal_property_search_sync ()
gchar * | e_webdav_session_util_maybe_dequote ()
void | e_webdav_session_util_free_privileges ()
gboolean | e_webdav_session_util_item_href_equal ()

## Types and Values

#define | E_WEBDAV_CAPABILITY_CLASS_1
#define | E_WEBDAV_CAPABILITY_CLASS_2
#define | E_WEBDAV_CAPABILITY_CLASS_3
#define | E_WEBDAV_CAPABILITY_ACCESS_CONTROL
#define | E_WEBDAV_CAPABILITY_BIND
#define | E_WEBDAV_CAPABILITY_EXTENDED_MKCOL
#define | E_WEBDAV_CAPABILITY_ADDRESSBOOK
#define | E_WEBDAV_CAPABILITY_CALENDAR_ACCESS
#define | E_WEBDAV_CAPABILITY_CALENDAR_SCHEDULE
#define | E_WEBDAV_CAPABILITY_CALENDAR_AUTO_SCHEDULE
#define | E_WEBDAV_CAPABILITY_CALENDAR_PROXY
#define | E_WEBDAV_DEPTH_THIS
#define | E_WEBDAV_DEPTH_THIS_AND_CHILDREN
#define | E_WEBDAV_DEPTH_INFINITY
#define | E_WEBDAV_CONTENT_TYPE_XML
#define | E_WEBDAV_CONTENT_TYPE_CALENDAR
#define | E_WEBDAV_CONTENT_TYPE_VCARD
#define | E_WEBDAV_NS_DAV
#define | E_WEBDAV_NS_CALDAV
#define | E_WEBDAV_NS_CARDDAV
#define | E_WEBDAV_NS_CALENDARSERVER
#define | E_WEBDAV_NS_ICAL
enum | EWebDAVResourceKind
enum | EWebDAVResourceSupports
enum | EWebDAVListFlags
enum | EWebDAVPropertyChangeKind
enum | EWebDAVLockScope
#define | E_WEBDAV_COLLATION_ASCII_NUMERIC_SUFFIX
#define | E_WEBDAV_COLLATION_ASCII_NUMERIC
#define | E_WEBDAV_COLLATION_ASCII_CASEMAP_SUFFIX
#define | E_WEBDAV_COLLATION_ASCII_CASEMAP
#define | E_WEBDAV_COLLATION_OCTET_SUFFIX
#define | E_WEBDAV_COLLATION_OCTET
#define | E_WEBDAV_COLLATION_UNICODE_CASEMAP_SUFFIX
#define | E_WEBDAV_COLLATION_UNICODE_CASEMAP
enum | EWebDAVPrivilegeKind
enum | EWebDAVPrivilegeHint
enum | EWebDAVACEPrincipalKind
enum | EWebDAVACEFlag
enum | EWebDAVACLRestrictions
struct | EWebDAVSession

## Object Hierarchy

        GBoxed
        ├── EWebDAVAccessControlEntry
        ├── EWebDAVPrivilege
        ├── EWebDAVPropertyChange
        ╰── EWebDAVResource
        GObject
        ╰── SoupSession
            ╰── ESoupSession
                ╰── EWebDAVSession

## Includes

    #include <libedataserver/libedataserver.h>

## Description

The EWebDAVSession is a class to work with WebDAV (RFC 4918), CalDAV (RFC 4791) or CardDAV (RFC 6352) servers, providing API for common requests/responses, on top of an ESoupSession. It supports also Access Control Protocol (RFC 3744).

## Functions

### e_webdav_resource_new ()

    EWebDAVResource *
    e_webdav_resource_new (EWebDAVResourceKind kind,
                           guint32 supports,
                           const gchar *href,
                           const gchar *etag,
                           const gchar *display_name,
                           const gchar *content_type,
                           gsize content_length,
                           glong creation_date,
                           glong last_modified,
                           const gchar *description,
                           const gchar *color,
                           guint order);

Some values of the resource are not always valid, depending on the `kind` , but also whether server stores such values and whether it had been asked for them to be fetched.

The `etag` for `E_WEBDAV_RESOURCE_KIND_COLLECTION` can be a change tag instead.

#### Parameters

kind | an EWebDAVResourceKind of the resource |
supports | bit-or of EWebDAVResourceSupports values |
href | href of the resource |
etag | optional ETag of the resource, or `NULL`. | [nullable]
display_name | optional display name of the resource, or `NULL`. | [nullable]
content_type | optional Content-Type of the resource, or `NULL`. | [nullable]
content_length | optional Content-Length of the resource, or 0 |
creation_date | optional date of creation of the resource, or 0 |
last_modified | optional last modified time of the resource, or 0 |
description | optional description of the resource, or `NULL`. | [nullable]
color | optional color of the resource, or `NULL`. | [nullable]
order | sort order of the resource, or (guint) -1 |

#### Returns

A newly created EWebDAVResource, prefilled with given values. Free it with `e_webdav_resource_free()`, when no longer needed.

[transfer full]

Since: 3.26

### e_webdav_resource_copy ()

    EWebDAVResource *
    e_webdav_resource_copy (const EWebDAVResource *src);

#### Parameters

src | an EWebDAVResource to make a copy of. | [nullable]

#### Returns

A new EWebDAVResource prefilled with the same values as `src` , or `NULL`, when `src` is `NULL`. Free it with `e_webdav_resource_free()`, when no longer needed.

[transfer full][nullable]

Since: 3.26

### e_webdav_resource_free ()

    void
    e_webdav_resource_free (gpointer ptr);

Frees an EWebDAVResource previously created with `e_webdav_resource_new()` or `e_webdav_resource_copy()`. The function does nothing, if `ptr` is `NULL`.

#### Parameters

ptr | an EWebDAVResource. | [nullable]

Since: 3.26

### EWebDAVPropstatTraverseFunc ()

    gboolean
    (*EWebDAVPropstatTraverseFunc) (EWebDAVSession *webdav,
                                    xmlNode *prop_node,
                                    const SoupURI *request_uri,
                                    const gchar *href,
                                    guint status_code,
                                    gpointer user_data);

A callback function for `e_webdav_session_propfind_sync()`, `e_webdav_session_report_sync()` and other XML response with DAV:propstat elements traversal functions.

The `prop_node` points to the actual property (prop) node and it can be examined with `e_xml_find_child()`, `e_xml_find_children_nodes()` and other provided XML helper functions.

#### Parameters

webdav | an EWebDAVSession |
prop_node | an xmlNode |
request_uri | a SoupURI, containing the request URI, maybe redirected by the server |
href | a full URI to which the property belongs, or `NULL`, when not found. | [nullable]
status_code | an HTTP status code for this property |
user_data | user data, as passed to `e_webdav_session_propfind_sync()` |

#### Returns

`TRUE` to continue traversal of the returned response, `FALSE` otherwise.

Since: 3.26

### e_webdav_property_change_new_set ()

    EWebDAVPropertyChange *
    e_webdav_property_change_new_set (const gchar *ns_uri,
                                      const gchar *name,
                                      const gchar *value);

Creates a new EWebDAVPropertyChange of kind `E_WEBDAV_PROPERTY_SET`, which is used to modify or set the property value. The `value` is a string representation of the value to store. It can be `NULL`, but it means an empty value, not to remove it. To remove property use `e_webdav_property_change_new_remove()` instead.

#### Parameters

ns_uri | namespace URI of the property |
name | name of the property |
value | value of the property, or `NULL` for empty value. | [nullable]

#### Returns

A new EWebDAVPropertyChange. Free it with `e_webdav_property_change_free()`, when no longer needed.

[transfer full]

Since: 3.26

### e_webdav_property_change_new_remove ()

    EWebDAVPropertyChange *
    e_webdav_property_change_new_remove (const gchar *ns_uri,
                                         const gchar *name);

Creates a new EWebDAVPropertyChange of kind `E_WEBDAV_PROPERTY_REMOVE`, which is used to remove the given property. To change property value use `e_webdav_property_change_new_set()` instead.

#### Parameters

ns_uri | namespace URI of the property |
name | name of the property |

#### Returns

A new EWebDAVPropertyChange. Free it with `e_webdav_property_change_free()`, when no longer needed.

[transfer full]

Since: 3.26

### e_webdav_property_change_copy ()

    EWebDAVPropertyChange *
    e_webdav_property_change_copy (const EWebDAVPropertyChange *src);

#### Parameters

src | an EWebDAVPropertyChange to make a copy of. | [nullable]

#### Returns

A new EWebDAVPropertyChange prefilled with the same values as `src` , or `NULL`, when `src` is `NULL`. Free it with `e_webdav_property_change_free()`, when no longer needed.

[transfer full][nullable]

Since: 3.26

### e_webdav_property_change_free ()

    void
    e_webdav_property_change_free (gpointer ptr);

Frees an EWebDAVPropertyChange previously created with `e_webdav_property_change_new_set()`, `e_webdav_property_change_new_remove()` or or `e_webdav_property_change_copy()`. The function does nothing, if `ptr` is `NULL`.

#### Parameters

ptr | an EWebDAVPropertyChange. | [nullable]

Since: 3.26

### e_webdav_privilege_new ()

    EWebDAVPrivilege *
    e_webdav_privilege_new (const gchar *ns_uri,
                            const gchar *name,
                            const gchar *description,
                            EWebDAVPrivilegeKind kind,
                            EWebDAVPrivilegeHint hint);

Describes one privilege entry. The `hint` can be `E_WEBDAV_PRIVILEGE_HINT_UNKNOWN` for privileges which are not known to the EWebDAVSession. It's possible, because the servers can define their own privileges. The hint is also tried to pair with known hints when it's `E_WEBDAV_PRIVILEGE_HINT_UNKNOWN`.

The `ns_uri` and `name` can be `NULL` only if the `hint` is one of the known privileges. Otherwise it's an error to pass either of the two as `NULL`.

#### Parameters

ns_uri | a namespace URI. | [nullable]
name | element name. | [nullable]
description | human read-able description, or `NULL`. | [nullable]
kind | an EWebDAVPrivilegeKind |
hint | an EWebDAVPrivilegeHint |

#### Returns

A newly created EWebDAVPrivilege, prefilled with given values. Free it with `e_webdav_privilege_free()`, when no longer needed.

[transfer full]

Since: 3.26

### e_webdav_privilege_copy ()

    EWebDAVPrivilege *
    e_webdav_privilege_copy (const EWebDAVPrivilege *src);

#### Parameters

src | an EWebDAVPrivilege to make a copy of. | [nullable]

#### Returns

A new EWebDAVPrivilege prefilled with the same values as `src` , or `NULL`, when `src` is `NULL`. Free it with `e_webdav_privilege_free()`, when no longer needed.

[transfer full][nullable]

Since: 3.26

### e_webdav_privilege_free ()

    void
    e_webdav_privilege_free (gpointer ptr);

Frees an EWebDAVPrivilege previously created with `e_webdav_privilege_new()` or `e_webdav_privilege_copy()`. The function does nothing, if `ptr` is `NULL`.

#### Parameters

ptr | an EWebDAVPrivilege. | [nullable]

Since: 3.26

### e_webdav_access_control_entry_new ()

    EWebDAVAccessControlEntry *
    e_webdav_access_control_entry_new (EWebDAVACEPrincipalKind principal_kind,
                                       const gchar *principal_href,
                                       guint32 flags,
                                       const gchar *inherited_href);

Describes one Access Control Entry (ACE).

The `flags` should always contain either `E_WEBDAV_ACE_FLAG_GRANT` or `E_WEBDAV_ACE_FLAG_DENY` value.

Use `e_webdav_access_control_entry_append_privilege()` to add respective privileges to the entry.

#### Parameters

principal_kind | an EWebDAVACEPrincipalKind |
principal_href | principal href; should be set only if `principal_kind` is `E_WEBDAV_ACE_PRINCIPAL_HREF` . | [nullable]
flags | bit-or of EWebDAVACEFlag values |
inherited_href | href of the resource from which inherits; should be set only if `flags` contain E_WEBDAV_ACE_FLAG_INHERITED. | [nullable]

#### Returns

A newly created EWebDAVAccessControlEntry, prefilled with given values. Free it with `e_webdav_access_control_entry_free()`, when no longer needed.

[transfer full]

Since: 3.26

### e_webdav_access_control_entry_copy ()

    EWebDAVAccessControlEntry *
    e_webdav_access_control_entry_copy (const EWebDAVAccessControlEntry *src);

#### Parameters

src | an EWebDAVAccessControlEntry to make a copy of. | [nullable]

#### Returns

A new EWebDAVAccessControlEntry prefilled with the same values as `src` , or `NULL`, when `src` is `NULL`. Free it with `e_webdav_access_control_entry_free()`, when no longer needed.

[transfer full][nullable]

Since: 3.26

### e_webdav_access_control_entry_free ()

    void
    e_webdav_access_control_entry_free (gpointer ptr);

Frees an EWebDAVAccessControlEntry previously created with `e_webdav_access_control_entry_new()` or `e_webdav_access_control_entry_copy()`. The function does nothing, if `ptr` is `NULL`.

#### Parameters

ptr | an EWebDAVAccessControlEntry. | [nullable]

Since: 3.26

### e_webdav_access_control_entry_append_privilege ()

    void
    e_webdav_access_control_entry_append_privilege
                                   (EWebDAVAccessControlEntry *ace,
                                    EWebDAVPrivilege *privilege);

Appends a new `privilege` to the list of privileges for the `ace` . The function assumes ownership of the `privilege` , which is freed together with the `ace` .

#### Parameters

ace | an EWebDAVAccessControlEntry |
privilege | an EWebDAVPrivilege. | [transfer full]

Since: 3.26

### e_webdav_access_control_entry_get_privileges ()

    GSList *
    e_webdav_access_control_entry_get_privileges
                                   (EWebDAVAccessControlEntry *ace);

#### Parameters

ace | an EWebDAVAccessControlEntry |

#### Returns

A GSList of EWebDAVPrivilege with the list of privileges for the `ace` . The reurned GSList, together with its data is owned by the `ace` .

[element-type EWebDAVPrivilege][transfer none]

Since: 3.26

### e_webdav_session_new ()

    EWebDAVSession *
    e_webdav_session_new (ESource *source);

Creates a new EWebDAVSession associated with given `source` . The EWebDAVSession uses an ESourceWebdav extension on certain places when it's defined for the `source` .

#### Parameters

source | an ESource |

#### Returns

a new EWebDAVSession; free it with `g_object_unref()`, when no longer needed.

[transfer full]

Since: 3.26

### e_webdav_session_get_last_dav_error_code ()

    const gchar *
    e_webdav_session_get_last_dav_error_code
                                   (EWebDAVSession *webdav);

Returns last DAV error code as returned by the server. Each recognized code is enclosed in "[]" in the returned string, to be able to distinguish between them, in case the server returned multiple codes.

The string is valid until the next request is executed.

#### Parameters

webdav | an EWebDAVSession |

#### Returns

a DAV error from the last request, or `NULL`, when no error had been recognized.

[transfer none][nullable]

Since: 3.36

### e_webdav_session_get_last_dav_error_is_permission ()

    gboolean
    e_webdav_session_get_last_dav_error_is_permission
                                   (EWebDAVSession *webdav);

#### Parameters

webdav | an EWebDAVSession |

#### Returns

whether the last recognized DAV error code contains an error which means that user doesn't have permission for the operation. If there is no DAV error stored, then returns `FALSE`.

Since: 3.36

### e_webdav_session_new_request ()

    SoupRequestHTTP *
    e_webdav_session_new_request (EWebDAVSession *webdav,
                                  const gchar *method,
                                  const gchar *uri,
                                  GError **error);

#### Parameters

webdav | an EWebDAVSession |
method | an HTTP method |
uri | URI to create the request for, or `NULL` to read from ESource. | [nullable]
error | return location for a GError, or `NULL` |

#### Returns

A new SoupRequestHTTP for the given `uri` , or, when `NULL`, for the URI stored in the associated ESource. Free the returned structure with `g_object_unref()`, when no longer needed.

[transfer full]

Since: 3.26

### e_webdav_session_replace_with_detailed_error ()

    gboolean
    e_webdav_session_replace_with_detailed_error
                                   (EWebDAVSession *webdav,
                                    SoupRequestHTTP *request,
                                    const GByteArray *response_data,
                                    gboolean ignore_multistatus,
                                    const gchar *prefix,
                                    GError **inout_error);

Tries to read detailed error information from `response_data` , if not provided, then from `request` 's response_body. If the detailed error cannot be found, then does nothing, otherwise frees the content of `inout_error` , if any, and then populates it with an error message prefixed with `prefix` .

The `prefix` might be of form "Failed to something", because the resulting error message will be: "Failed to something: HTTP error code XXX (reason_phrase): detailed_error". When `prefix` is `NULL`, the error message will be: "Failed with HTTP error code XXX (reason phrase): detailed_error".

As the caller might not be interested in errors, also the `inout_error` can be `NULL`, in which case the function does nothing.

#### Parameters

webdav | an EWebDAVSession |
request | a SoupRequestHTTP |
response_data | received response data, or `NULL`. | [nullable]
ignore_multistatus | whether to ignore multistatus responses |
prefix | error message prefix, used when replacing, or `NULL`. | [nullable]
inout_error | a GError variable to replace content to, or `NULL`. | [inout][nullable][transfer full]

#### Returns

Whether any detailed error had been recognized.

Since: 3.26

### e_webdav_session_ensure_full_uri ()

    gchar *
    e_webdav_session_ensure_full_uri (EWebDAVSession *webdav,
                                      const SoupURI *request_uri,
                                      const gchar *href);

Converts possibly path-only `href` into a full URI under the `request_uri` . When the `request_uri` is `NULL`, the URI defined in associated ESource is used instead, taken from the ESourceWebdav extension, if defined.

Free the returned pointer with `g_free()`, when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
request_uri | a SoupURI to which the `href` belongs, or `NULL`. | [nullable]
href | a possibly path-only href |

#### Returns

The `href` as a full URI.

[transfer full]

Since: 3.24

### e_webdav_session_options_sync ()

    gboolean
    e_webdav_session_options_sync (EWebDAVSession *webdav,
                                   const gchar *uri,
                                   GHashTable **out_capabilities,
                                   GHashTable **out_allows,
                                   GCancellable *cancellable,
                                   GError **error);

Issues OPTIONS request on the provided `uri` , or, in case it's `NULL`, on the URI defined in associated ESource.

The `out_capabilities` contains a set of returned capabilities. Some known are defined as E_WEBDAV_CAPABILITY_CLASS_1, and so on. The 'value' of the GHashTable doesn't have any particular meaning and the strings are compared case insensitively. Free the hash table with `g_hash_table_destroy()`, when no longer needed. The returned value can be `NULL` on success, it's when the server doesn't provide the information.

The `out_allows` contains a set of allowed methods returned by the server. Some known are defined as `SOUP_METHOD_OPTIONS`, and so on. The 'value' of the GHashTable doesn't have any particular meaning and the strings are compared case insensitively. Free the hash table with `g_hash_table_destroy()`, when no longer needed. The returned value can be `NULL` on success, it's when the server doesn't provide the information.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
out_capabilities | return location for DAV capabilities. | [out][transfer full]
out_allows | return location for allowed operations. | [out][transfer full]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_post_sync ()

    gboolean
    e_webdav_session_post_sync (EWebDAVSession *webdav,
                                const gchar *uri,
                                const gchar *data,
                                gsize data_length,
                                gchar **out_content_type,
                                GByteArray **out_content,
                                GCancellable *cancellable,
                                GError **error);

Issues POST request on the provided `uri` , or, in case it's `NULL`, on the URI defined in associated ESource. The Content-Type of the `data` is set to application/xml. To POST the `data` with a different Content-Type use `e_webdav_session_post_with_content_type_sync()`.

The optional `out_content_type` can be used to get content type of the response. Free it with `g_free()`, when no longer needed.

The optional `out_content` can be used to get actual result content. Free it with `g_byte_array_free()`, when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
data | data to post to the server |
data_length | length of `data` , or -1, when `data` is NUL-terminated |
out_content_type | return location for response Content-Type, or `NULL`. | [nullable][transfer full]
out_content | return location for response content, or `NULL`. | [nullable][transfer full]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_post_with_content_type_sync ()

    gboolean
    e_webdav_session_post_with_content_type_sync
                                   (EWebDAVSession *webdav,
                                    const gchar *uri,
                                    const gchar *data,
                                    gsize data_length,
                                    const gchar *in_content_type,
                                    gchar **out_content_type,
                                    GByteArray **out_content,
                                    GCancellable *cancellable,
                                    GError **error);

Issues POST request on the provided `uri` , or, in case it's `NULL`, on the URI defined in associated ESource.

The optional `out_content_type` can be used to get content type of the response. Free it with `g_free()`, when no longer needed.

The optional `out_content` can be used to get actual result content. Free it with `g_byte_array_free()`, when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
data | data to post to the server |
data_length | length of `data` , or -1, when `data` is NUL-terminated |
in_content_type | a Content-Type of the `data` , or `NULL`, to use application/xml. | [nullable]
out_content_type | return location for response Content-Type, or `NULL`. | [nullable][transfer full]
out_content | return location for response content, or `NULL`. | [nullable][transfer full]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.32

### e_webdav_session_propfind_sync ()

    gboolean
    e_webdav_session_propfind_sync (EWebDAVSession *webdav,
                                    const gchar *uri,
                                    const gchar *depth,
                                    const EXmlDocument *xml,
                                    EWebDAVPropstatTraverseFunc func,
                                    gpointer func_user_data,
                                    GCancellable *cancellable,
                                    GError **error);

Issues PROPFIND request on the provided `uri` , or, in case it's `NULL`, on the URI defined in associated ESource. On success, calls `func` for each returned DAV:propstat.

The `xml` can be `NULL`, in which case the server should behave like DAV:allprop request.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
depth | requested depth, can be one of `E_WEBDAV_DEPTH_THIS`, `E_WEBDAV_DEPTH_THIS_AND_CHILDREN` or `E_WEBDAV_DEPTH_INFINITY` |
xml | the request itself, as an EXmlDocument, the root element should be DAV:propfind, or `NULL`. | [nullable]
func | an EWebDAVPropstatTraverseFunc function to call for each DAV:propstat in the multistatus response. | [scope call]
func_user_data | user data passed to `func` . | [closure func]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_proppatch_sync ()

    gboolean
    e_webdav_session_proppatch_sync (EWebDAVSession *webdav,
                                     const gchar *uri,
                                     const EXmlDocument *xml,
                                     GCancellable *cancellable,
                                     GError **error);

Issues PROPPATCH request on the provided `uri` , or, in case it's `NULL`, on the URI defined in associated ESource, with the `changes` . The order of requested changes inside `xml` is significant, unlike on other places.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
xml | an EXmlDocument with request changes, its root element should be DAV:propertyupdate |
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_report_sync ()

    gboolean
    e_webdav_session_report_sync (EWebDAVSession *webdav,
                                  const gchar *uri,
                                  const gchar *depth,
                                  const EXmlDocument *xml,
                                  EWebDAVPropstatTraverseFunc func,
                                  gpointer func_user_data,
                                  gchar **out_content_type,
                                  GByteArray **out_content,
                                  GCancellable *cancellable,
                                  GError **error);

Issues REPORT request on the provided `uri` , or, in case it's `NULL`, on the URI defined in associated ESource. On success, calls `func` for each returned DAV:propstat.

The report can result in a multistatus response, but also to raw data. In case the `func` is provided and the result is a multistatus response, then it is traversed using this `func` .

The optional `out_content_type` can be used to get content type of the response. Free it with `g_free()`, when no longer needed.

The optional `out_content` can be used to get actual result content. Free it with `g_byte_array_free()`, when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
depth | requested depth, can be `NULL`, then no Depth header is sent. | [nullable]
xml | the request itself, as an EXmlDocument |
func | an EWebDAVPropstatTraverseFunc function to call for each DAV:propstat in the multistatus response, or `NULL`. | [nullable][scope call]
func_user_data | user data passed to `func` . | [closure func]
out_content_type | return location for response Content-Type, or `NULL`. | [nullable][transfer full]
out_content | return location for response content, or `NULL`. | [nullable][transfer full]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_mkcol_sync ()

    gboolean
    e_webdav_session_mkcol_sync (EWebDAVSession *webdav,
                                 const gchar *uri,
                                 GCancellable *cancellable,
                                 GError **error);

Creates a new generic collection identified by `uri` on the server. To create specific collections use `e_webdav_session_mkcalendar_sync()` or `e_webdav_session_mkcol_addressbook_sync()`.

#### Parameters

webdav | an EWebDAVSession |
uri | URI of the collection to create |
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_mkcol_addressbook_sync ()

    gboolean
    e_webdav_session_mkcol_addressbook_sync
                                   (EWebDAVSession *webdav,
                                    const gchar *uri,
                                    const gchar *display_name,
                                    const gchar *description,
                                    GCancellable *cancellable,
                                    GError **error);

Creates a new address book collection identified by `uri` on the server.

Note that CardDAV RFC 6352 Section 5.2 forbids to create address book resources under other address book resources (no nested address books are allowed).

#### Parameters

webdav | an EWebDAVSession |
uri | URI of the collection to create |
display_name | a human-readable display name to set, or `NULL`. | [nullable]
description | a human-readable description of the address book, or `NULL`. | [nullable]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_mkcalendar_sync ()

    gboolean
    e_webdav_session_mkcalendar_sync (EWebDAVSession *webdav,
                                      const gchar *uri,
                                      const gchar *display_name,
                                      const gchar *description,
                                      const gchar *color,
                                      guint32 supports,
                                      GCancellable *cancellable,
                                      GError **error);

Creates a new calendar collection identified by `uri` on the server. The `supports` defines what component types can be stored into the created calendar collection. Only `E_WEBDAV_RESOURCE_SUPPORTS_NONE` and values related to iCalendar content can be used here. Using `E_WEBDAV_RESOURCE_SUPPORTS_NONE` means that everything is supported.

Note that CalDAV RFC 4791 Section 4.2 forbids to create calendar resources under other calendar resources (no nested calendars are allowed).

#### Parameters

webdav | an EWebDAVSession |
uri | URI of the collection to create |
display_name | a human-readable display name to set, or `NULL`. | [nullable]
description | a human-readable description of the calendar, or `NULL`. | [nullable]
color | a color to set, in format "#RRGGBB", or `NULL`. | [nullable]
supports | a bit-or of EWebDAVResourceSupports values |
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_get_sync ()

    gboolean
    e_webdav_session_get_sync (EWebDAVSession *webdav,
                               const gchar *uri,
                               gchar **out_href,
                               gchar **out_etag,
                               GOutputStream *out_stream,
                               GCancellable *cancellable,
                               GError **error);

Reads a resource identified by `uri` from the server and writes it to the `stream` . The URI cannot reference a collection.

Free returned pointer of `out_href` and `out_etag` , if not `NULL`, with `g_free()`, when no longer needed.

The `e_webdav_session_get_data_sync()` can be used to read the resource data directly to memory.

#### Parameters

webdav | an EWebDAVSession |
uri | URI of the resource to read |
out_href | optional return location for href of the resource, or `NULL`. | [out][nullable][transfer full]
out_etag | optional return location for etag of the resource, or `NULL`. | [out][nullable][transfer full]
out_stream | a GOutputStream to write data to. | [out caller-allocates]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_get_data_sync ()

    gboolean
    e_webdav_session_get_data_sync (EWebDAVSession *webdav,
                                    const gchar *uri,
                                    gchar **out_href,
                                    gchar **out_etag,
                                    gchar **out_bytes,
                                    gsize *out_length,
                                    GCancellable *cancellable,
                                    GError **error);

Reads a resource identified by `uri` from the server. The URI cannot reference a collection.

The `out_bytes` is filled by actual data being read. If not `NULL`, `out_length` is populated with how many bytes had been read. The `out_bytes` is always NUL-terminated, while this termination byte is not part of `out_length` . Free the `out_bytes` with `g_free()`, when no longer needed.

Free returned pointer of `out_href` and `out_etag` , if not `NULL`, with `g_free()`, when no longer needed.

To read large data use `e_webdav_session_get_sync()` instead.

#### Parameters

webdav | an EWebDAVSession |
uri | URI of the resource to read |
out_href | optional return location for href of the resource, or `NULL`. | [out][nullable][transfer full]
out_etag | optional return location for etag of the resource, or `NULL`. | [out][nullable][transfer full]
out_bytes | return location for bytes being read. | [out][transfer full]
out_length | option return location for length of bytes being read, or `NULL`. | [out][nullable]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_put_sync ()

    gboolean
    e_webdav_session_put_sync (EWebDAVSession *webdav,
                               const gchar *uri,
                               const gchar *etag,
                               const gchar *content_type,
                               GInputStream *stream,
                               gchar **out_href,
                               gchar **out_etag,
                               GCancellable *cancellable,
                               GError **error);

Writes data from `stream` to a resource identified by `uri` to the server. The URI cannot reference a collection.

The `etag` argument is used to avoid clashes when overwriting existing resources. It can contain three values:

- `NULL` - to write completely new resource

- empty string - write new resource or overwrite any existing, regardless changes on the server

- valid ETag - overwrite existing resource only if it wasn't changed on the server.

Note that the actual behaviour is also influenced by “avoid-ifmatch” property of the associated ESource.

The `out_href` , if provided, is filled with the resulting URI of the written resource. It can be different from the `uri` when the server redirected to a different location.

The `out_etag` contains ETag of the resource after it had been saved.

The `stream` should support also GSeekable interface, because the data send can require restart of the send due to redirect or other reasons.

This method uses Transfer-Encoding:chunked, in contrast to the `e_webdav_session_put_data_sync()`, which writes data stored in memory like any other request.

#### Parameters

webdav | an EWebDAVSession |
uri | URI of the resource to write |
etag | an ETag of the resource, if it's an existing resource, or `NULL`. | [nullable]
content_type | Content-Type of the `bytes` to be written |
stream | a GInputStream with data to be written |
out_href | optional return location for href of the resource, or `NULL`. | [out][nullable][transfer full]
out_etag | optional return location for etag of the resource, or `NULL`. | [out][nullable][transfer full]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_put_data_sync ()

    gboolean
    e_webdav_session_put_data_sync (EWebDAVSession *webdav,
                                    const gchar *uri,
                                    const gchar *etag,
                                    const gchar *content_type,
                                    const gchar *bytes,
                                    gsize length,
                                    gchar **out_href,
                                    gchar **out_etag,
                                    GCancellable *cancellable,
                                    GError **error);

Writes data to a resource identified by `uri` to the server. The URI cannot reference a collection.

The `etag` argument is used to avoid clashes when overwriting existing resources. It can contain three values:

- `NULL` - to write completely new resource

- empty string - write new resource or overwrite any existing, regardless changes on the server

- valid ETag - overwrite existing resource only if it wasn't changed on the server.

Note that the actual usage of `etag` is also influenced by “avoid-ifmatch” property of the associated ESource.

The `out_href` , if provided, is filled with the resulting URI of the written resource. It can be different from the `uri` when the server redirected to a different location.

The `out_etag` contains ETag of the resource after it had been saved.

To write large data use `e_webdav_session_put_sync()` instead.

#### Parameters

webdav | an EWebDAVSession |
uri | URI of the resource to write |
etag | an ETag of the resource, if it's an existing resource, or `NULL`. | [nullable]
content_type | Content-Type of the `bytes` to be written |
bytes | actual bytes to be written |
length | how many bytes to write, or -1, when the `bytes` is NUL-terminated |
out_href | optional return location for href of the resource, or `NULL`. | [out][nullable][transfer full]
out_etag | optional return location for etag of the resource, or `NULL`. | [out][nullable][transfer full]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_delete_sync ()

    gboolean
    e_webdav_session_delete_sync (EWebDAVSession *webdav,
                                  const gchar *uri,
                                  const gchar *depth,
                                  const gchar *etag,
                                  GCancellable *cancellable,
                                  GError **error);

Deletes a resource identified by `uri` on the server. The URI can reference a collection, in which case `depth` should be `E_WEBDAV_DEPTH_INFINITY`. Use `depth` `E_WEBDAV_DEPTH_THIS` when deleting a regular resource, or `NULL`, to let the server use default Depth.

The `etag` argument is used to avoid clashes when overwriting existing resources. Use `NULL` `etag` when deleting collection resources or to force the deletion, otherwise provide a valid ETag of a non-collection resource to verify that the version requested to delete is the same as on the server.

Note that the actual usage of `etag` is also influenced by “avoid-ifmatch” property of the associated ESource.

#### Parameters

webdav | an EWebDAVSession |
uri | URI of the resource to delete |
depth | optional requested depth, can be one of `E_WEBDAV_DEPTH_THIS` or `E_WEBDAV_DEPTH_INFINITY`, or `NULL`. | [nullable]
etag | an optional ETag of the resource, or `NULL`. | [nullable]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_copy_sync ()

    gboolean
    e_webdav_session_copy_sync (EWebDAVSession *webdav,
                                const gchar *source_uri,
                                const gchar *destination_uri,
                                const gchar *depth,
                                gboolean can_overwrite,
                                GCancellable *cancellable,
                                GError **error);

Copies a resource identified by `source_uri` to `destination_uri` on the server. The `source_uri` can reference also collections, in which case the `depth` influences whether only the collection itself is copied (`E_WEBDAV_DEPTH_THIS`) or whether the collection with all its children is copied (`E_WEBDAV_DEPTH_INFINITY`).

#### Parameters

webdav | an EWebDAVSession |
source_uri | URI of the resource or collection to copy |
destination_uri | URI of the destination |
depth | requested depth, can be one of `E_WEBDAV_DEPTH_THIS` or `E_WEBDAV_DEPTH_INFINITY` |
can_overwrite | whether can overwrite `destination_uri` , when it exists |
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_move_sync ()

    gboolean
    e_webdav_session_move_sync (EWebDAVSession *webdav,
                                const gchar *source_uri,
                                const gchar *destination_uri,
                                gboolean can_overwrite,
                                GCancellable *cancellable,
                                GError **error);

Moves a resource identified by `source_uri` to `destination_uri` on the server. The `source_uri` can reference also collections.

#### Parameters

webdav | an EWebDAVSession |
source_uri | URI of the resource or collection to copy |
destination_uri | URI of the destination |
can_overwrite | whether can overwrite `destination_uri` , when it exists |
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_lock_sync ()

    gboolean
    e_webdav_session_lock_sync (EWebDAVSession *webdav,
                                const gchar *uri,
                                const gchar *depth,
                                gint32 lock_timeout,
                                const EXmlDocument *xml,
                                gchar **out_lock_token,
                                xmlDoc **out_xml_response,
                                GCancellable *cancellable,
                                GError **error);

Locks a resource identified by `uri` , or, in case it's `NULL`, on the URI defined in associated ESource.

The `out_lock_token` can be refreshed with `e_webdav_session_refresh_lock_sync()`. Release the lock with `e_webdav_session_unlock_sync()`. Free the returned `out_lock_token` with `g_free()`, when no longer needed.

If provided, free the returned `out_xml_response` with `xmlFreeDoc()`, when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to lock, or `NULL` to read from ESource. | [nullable]
depth | requested depth, can be one of `E_WEBDAV_DEPTH_THIS` or `E_WEBDAV_DEPTH_INFINITY` |
lock_timeout | timeout for the lock, in seconds, on 0 to infinity |
xml | an XML describing the lock request, with DAV:lockinfo root element |
out_lock_token | return location of the obtained or refreshed lock token. | [out][transfer full]
out_xml_response | optional return location for the server response as xmlDocPtr. | [out][nullable][transfer full]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_refresh_lock_sync ()

    gboolean
    e_webdav_session_refresh_lock_sync (EWebDAVSession *webdav,
                                        const gchar *uri,
                                        const gchar *lock_token,
                                        gint32 lock_timeout,
                                        GCancellable *cancellable,
                                        GError **error);

Refreshes existing lock `lock_token` for a resource identified by `uri` , or, in case it's `NULL`, on the URI defined in associated ESource. The `lock_token` is returned from `e_webdav_session_lock_sync()` and the `uri` should be the same as that used with `e_webdav_session_lock_sync()`.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to lock, or `NULL` to read from ESource. | [nullable]
lock_token | token of an existing lock |
lock_timeout | timeout for the lock, in seconds, on 0 to infinity |
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_unlock_sync ()

    gboolean
    e_webdav_session_unlock_sync (EWebDAVSession *webdav,
                                  const gchar *uri,
                                  const gchar *lock_token,
                                  GCancellable *cancellable,
                                  GError **error);

Releases (unlocks) existing lock `lock_token` for a resource identified by `uri` , or, in case it's `NULL`, on the URI defined in associated ESource. The `lock_token` is returned from `e_webdav_session_lock_sync()` and the `uri` should be the same as that used with `e_webdav_session_lock_sync()`.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to lock, or `NULL` to read from ESource. | [nullable]
lock_token | token of an existing lock |
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_traverse_multistatus_response ()

    gboolean
    e_webdav_session_traverse_multistatus_response
                                   (EWebDAVSession *webdav,
                                    const SoupMessage *message,
                                    const GByteArray *xml_data,
                                    EWebDAVPropstatTraverseFunc func,
                                    gpointer func_user_data,
                                    GError **error);

Traverses a DAV:multistatus response and calls `func` for each returned DAV:propstat.

The `message` , if provided, is used to verify that the response is a multi-status and that the Content-Type is properly set. It's used to get a request URI as well.

#### Parameters

webdav | an EWebDAVSession |
message | an optional SoupMessage corresponding to the response, or `NULL`. | [nullable]
xml_data | a GByteArray containing DAV:multistatus response |
func | an EWebDAVPropstatTraverseFunc function to call for each DAV:propstat in the multistatus response. | [scope call]
func_user_data | user data passed to `func` . | [closure func]
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_traverse_mkcol_response ()

    gboolean
    e_webdav_session_traverse_mkcol_response
                                   (EWebDAVSession *webdav,
                                    const SoupMessage *message,
                                    const GByteArray *xml_data,
                                    EWebDAVPropstatTraverseFunc func,
                                    gpointer func_user_data,
                                    GError **error);

Traverses a DAV:mkcol-response response and calls `func` for each returned DAV:propstat.

The `message` , if provided, is used to verify that the response is an XML Content-Type. It's used to get the request URI as well.

#### Parameters

webdav | an EWebDAVSession |
message | an optional SoupMessage corresponding to the response, or `NULL`. | [nullable]
xml_data | a GByteArray containing DAV:mkcol-response response |
func | an EWebDAVPropstatTraverseFunc function to call for each DAV:propstat in the response. | [scope call]
func_user_data | user data passed to `func` . | [closure func]
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_traverse_mkcalendar_response ()

    gboolean
    e_webdav_session_traverse_mkcalendar_response
                                   (EWebDAVSession *webdav,
                                    const SoupMessage *message,
                                    const GByteArray *xml_data,
                                    EWebDAVPropstatTraverseFunc func,
                                    gpointer func_user_data,
                                    GError **error);

Traverses a CALDAV:mkcalendar-response response and calls `func` for each returned DAV:propstat.

The `message` , if provided, is used to verify that the response is an XML Content-Type. It's used to get the request URI as well.

#### Parameters

webdav | an EWebDAVSession |
message | an optional SoupMessage corresponding to the response, or `NULL`. | [nullable]
xml_data | a GByteArray containing CALDAV:mkcalendar-response response |
func | an EWebDAVPropstatTraverseFunc function to call for each DAV:propstat in the response. | [scope call]
func_user_data | user data passed to `func` . | [closure func]
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_getctag_sync ()

    gboolean
    e_webdav_session_getctag_sync (EWebDAVSession *webdav,
                                   const gchar *uri,
                                   gchar **out_ctag,
                                   GCancellable *cancellable,
                                   GError **error);

Issues a getctag property request for a collection identified by `uri` , or, in case it's `NULL`, on the URI defined in associated ESource. The ctag is a collection tag, which changes whenever the collection changes (similar to etag). The getctag is an extension, thus the function can fail when the server doesn't support it.

Free the returned `out_ctag` with `g_free()`, when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
out_ctag | return location for the ctag. | [out][transfer full]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_list_sync ()

    gboolean
    e_webdav_session_list_sync (EWebDAVSession *webdav,
                                const gchar *uri,
                                const gchar *depth,
                                guint32 flags,
                                GSList **out_resources,
                                GCancellable *cancellable,
                                GError **error);

Lists content of the `uri` , or, in case it's `NULL`, of the URI defined in associated ESource, which should point to a collection. The `flags` influences which properties are read for the resources.

The `out_resources` is in no particular order.

Free the returned `out_resources` with g_slist_free_full (resources, e_webdav_resource_free); when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
depth | requested depth, can be one of `E_WEBDAV_DEPTH_THIS`, `E_WEBDAV_DEPTH_THIS_AND_CHILDREN` or `E_WEBDAV_DEPTH_INFINITY` |
flags | a bit-or of EWebDAVListFlags, claiming what properties to read |
out_resources | return location for the resources. | [out][transfer full][element-type EWebDAVResource]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_update_properties_sync ()

    gboolean
    e_webdav_session_update_properties_sync
                                   (EWebDAVSession *webdav,
                                    const gchar *uri,
                                    const GSList *changes,
                                    GCancellable *cancellable,
                                    GError **error);

Updates properties (set/remove) on the provided `uri` , or, in case it's `NULL`, on the URI defined in associated ESource, with the `changes` . The order of `changes` is significant, unlike on other places.

This function supports only flat properties, those not under other element. To support more complex property tries use `e_webdav_session_proppatch_sync()` directly.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
changes | a GSList with request changes. | [element-type EWebDAVPropertyChange]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_lock_resource_sync ()

    gboolean
    e_webdav_session_lock_resource_sync (EWebDAVSession *webdav,
                                         const gchar *uri,
                                         EWebDAVLockScope lock_scope,
                                         gint32 lock_timeout,
                                         const gchar *owner,
                                         gchar **out_lock_token,
                                         GCancellable *cancellable,
                                         GError **error);

Locks a resource identified by `uri` , or, in case it's `NULL`, by the URI defined in associated ESource. It obtains a write lock with the given `lock_scope` .

The `owner` is used to identify the lock owner. When it's an http:// or https://, then it's referenced as DAV:href, otherwise the value is treated as plain text. If it's `NULL`, then the user name from the associated ESource is used.

The `out_lock_token` can be refreshed with `e_webdav_session_refresh_lock_sync()`. Release the lock with `e_webdav_session_unlock_sync()`. Free the returned `out_lock_token` with `g_free()`, when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to lock, or `NULL` to read from ESource. | [nullable]
lock_scope | an EWebDAVLockScope to define the scope of the lock |
lock_timeout | timeout for the lock, in seconds, on 0 to infinity |
owner | optional identificator of the owner of the lock, or `NULL`. | [nullable]
out_lock_token | return location of the obtained or refreshed lock token. | [out][transfer full]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_acl_sync ()

    gboolean
    e_webdav_session_acl_sync (EWebDAVSession *webdav,
                               const gchar *uri,
                               const EXmlDocument *xml,
                               GCancellable *cancellable,
                               GError **error);

Issues ACL request on the provided `uri` , or, in case it's `NULL`, on the URI defined in associated ESource.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
xml | the request itself, as an EXmlDocument, the root element should be DAV:acl |
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_get_supported_privilege_set_sync ()

    gboolean
    e_webdav_session_get_supported_privilege_set_sync
                                   (EWebDAVSession *webdav,
                                    const gchar *uri,
                                    GNode **out_privileges,
                                    GCancellable *cancellable,
                                    GError **error);

Gets supported privileges for the `uri` , or, in case it's `NULL`, for the URI defined in associated ESource.

The root node of `out_privileges` has always `NULL` data.

Free the returned `out_privileges` with `e_webdav_session_util_free_privileges()` when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
out_privileges | return location for the tree of supported privileges. | [out][transfer full][element-type EWebDAVPrivilege]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_get_current_user_privilege_set_sync ()

    gboolean
    e_webdav_session_get_current_user_privilege_set_sync
                                   (EWebDAVSession *webdav,
                                    const gchar *uri,
                                    GSList **out_privileges,
                                    GCancellable *cancellable,
                                    GError **error);

Gets current user privileges for the `uri` , or, in case it's `NULL`, for the URI defined in associated ESource.

Free the returned `out_privileges` with g_slist_free_full (privileges, e_webdav_privilege_free); when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
out_privileges | return location for a `GSList` of EWebDAVPrivilege. | [out][transfer full][element-type EWebDAVPrivilege]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_get_acl_sync ()

    gboolean
    e_webdav_session_get_acl_sync (EWebDAVSession *webdav,
                                   const gchar *uri,
                                   GSList **out_entries,
                                   GCancellable *cancellable,
                                   GError **error);

Gets Access Control List (ACL) for the `uri` , or, in case it's `NULL`, for the URI defined in associated ESource.

This function doesn't read general E_WEBDAV_ACE_PRINCIPAL_PROPERTY.

Free the returned `out_entries` with g_slist_free_full (entries, e_webdav_access_control_entry_free); when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
out_entries | return location for a GSList of EWebDAVAccessControlEntry. | [out][transfer full][element-type EWebDAVAccessControlEntry]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_get_acl_restrictions_sync ()

    gboolean
    e_webdav_session_get_acl_restrictions_sync
                                   (EWebDAVSession *webdav,
                                    const gchar *uri,
                                    guint32 *out_restrictions,
                                    EWebDAVACEPrincipalKind *out_principal_kind,
                                    GSList **out_principal_hrefs,
                                    GCancellable *cancellable,
                                    GError **error);

Gets Access Control List (ACL) restrictions for the `uri` , or, in case it's `NULL`, for the URI defined in associated ESource. The `out_principal_kind` is valid only if the `out_restrictions` contains E_WEBDAV_ACL_RESTRICTION_REQUIRED_PRINCIPAL. The `out_principal_hrefs` is valid only if the `out_principal_kind` is valid and when it is E_WEBDAV_ACE_PRINCIPAL_HREF.

Free the returned `out_principal_hrefs` with g_slist_free_full (entries, g_free); when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
out_restrictions | return location for bit-or of EWebDAVACLRestrictions. | [out]
out_principal_kind | return location for principal kind. | [out]
out_principal_hrefs | return location for a GSList of principal href-s. | [out][transfer full][element-type utf8]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_get_principal_collection_set_sync ()

    gboolean
    e_webdav_session_get_principal_collection_set_sync
                                   (EWebDAVSession *webdav,
                                    const gchar *uri,
                                    GSList **out_principal_hrefs,
                                    GCancellable *cancellable,
                                    GError **error);

Gets list of principal collection href for the `uri` , or, in case it's `NULL`, for the URI defined in associated ESource. The `out_principal_hrefs` are root collections that contain the principals that are available on the server that implements this resource.

Free the returned `out_principal_hrefs` with g_slist_free_full (entries, g_free); when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
out_principal_hrefs | return location for a GSList of principal href-s. | [out][transfer full][element-type utf8]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_set_acl_sync ()

    gboolean
    e_webdav_session_set_acl_sync (EWebDAVSession *webdav,
                                   const gchar *uri,
                                   const GSList *entries,
                                   GCancellable *cancellable,
                                   GError **error);

Changes Access Control List (ACL) for the `uri` , or, in case it's `NULL`, for the URI defined in associated ESource.

Make sure that the `entries` satisfy ACL restrictions, as returned by `e_webdav_session_get_acl_restrictions_sync()`. The order in the `entries` is preserved. It cannot contain any `E_WEBDAV_ACE_FLAG_PROTECTED`, nor `E_WEBDAV_ACE_FLAG_INHERITED` , items.

Use `e_webdav_session_get_acl_sync()` to read currently known ACL entries, remove from the list those protected and inherited, and then modify the rest with the required changed.

Note this function doesn't support general `E_WEBDAV_ACE_PRINCIPAL_PROPERTY` and returns `G_IO_ERROR_NOT_SUPPORTED` error when any such is tried to be written.

In case the returned entries contain any `E_WEBDAV_ACE_PRINCIPAL_PROPERTY`, or there's a need to write such Access Control Entry, then do not use `e_webdav_session_get_acl_sync()`, neither `e_webdav_session_set_acl_sync()`, and write more generic implementation.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
entries | entries to write. | [element-type EWebDAVAccessControlEntry]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded.

Since: 3.26

### e_webdav_session_principal_property_search_sync ()

    gboolean
    e_webdav_session_principal_property_search_sync
                                   (EWebDAVSession *webdav,
                                    const gchar *uri,
                                    gboolean apply_to_principal_collection_set,
                                    const gchar *match_ns_uri,
                                    const gchar *match_property,
                                    const gchar *match_value,
                                    GSList **out_principals,
                                    GCancellable *cancellable,
                                    GError **error);

Issues a DAV:principal-property-search for the `uri` , or, in case it's `NULL`, for the URI defined in associated ESource. The DAV:principal-property-search performs a search for all principals whose properties contain character data that matches the search criteria `match_value` in `match_property` property of namespace `match_ns_uri` .

By default, the function searches all members (at any depth) of the collection identified by the `uri` . If `apply_to_principal_collection_set` is set to `TRUE`, the search is applied instead to each collection returned by `e_webdav_session_get_principal_collection_set_sync()` for the `uri` .

The `out_principals` is a GSList of EWebDAVResource, where the kind is set to `E_WEBDAV_RESOURCE_KIND_PRINCIPAL` and only href with displayname are filled. All other members of EWebDAVResource are not set.

Free the returned `out_principals` with g_slist_free_full (principals, e_webdav_resource_free); when no longer needed.

#### Parameters

webdav | an EWebDAVSession |
uri | URI to issue the request for, or `NULL` to read from ESource. | [nullable]
apply_to_principal_collection_set | whether to apply to principal-collection-set |
match_ns_uri | namespace URI of the property to search in, or `NULL` for `E_WEBDAV_NS_DAV`. | [nullable]
match_property | name of the property to search in |
match_value | a string value to search for |
out_principals | return location for matching principals. | [out][transfer full][element-type EWebDAVResource]
cancellable | optional GCancellable object, or `NULL` |
error | return location for a GError, or `NULL` |

#### Returns

Whether succeeded. Note it can report success also when no matching principal had been found.

Since: 3.26

### e_webdav_session_util_maybe_dequote ()

    gchar *
    e_webdav_session_util_maybe_dequote (gchar *text);

Dequotes `text` , if it's enclosed in double-quotes. The function changes `text` , it doesn't allocate new string. The function does nothing when the `text` is not enclosed in double-quotes.

#### Parameters

text | text to dequote. | [inout][nullable]

#### Returns

possibly dequoted `text`

Since: 3.26

### e_webdav_session_util_free_privileges ()

    void
    e_webdav_session_util_free_privileges (GNode *privileges);

Frees `privileges` returned by `e_webdav_session_get_supported_privilege_set_sync()`. The function does nothing, if `privileges` is `NULL`.

#### Parameters

privileges | a tree of EWebDAVPrivilege structures. | [nullable]

Since: 3.26

### e_webdav_session_util_item_href_equal ()

    gboolean
    e_webdav_session_util_item_href_equal (const gchar *href1,
                                           const gchar *href2);

Compares two hrefs and return whether they reference the same item on the server. The comparison is done in a relaxed way, not considering scheme part and comparing the host name case insensitively, while the path case sensitively. It also ignores the username/password information in the hostname part, if it's included. The function doesn't decode any URI-encoded characters.

#### Parameters

href1 | the first href |
href2 | the second href |

#### Returns

whether the two href-s reference the same item

Since: 3.40

## Types and Values

### E_WEBDAV_CAPABILITY_CLASS_1

    #define E_WEBDAV_CAPABILITY_CLASS_1			"1"

### E_WEBDAV_CAPABILITY_CLASS_2

    #define E_WEBDAV_CAPABILITY_CLASS_2			"2"

### E_WEBDAV_CAPABILITY_CLASS_3

    #define E_WEBDAV_CAPABILITY_CLASS_3			"3"

### E_WEBDAV_CAPABILITY_ACCESS_CONTROL

    #define E_WEBDAV_CAPABILITY_ACCESS_CONTROL		"access-control"

### E_WEBDAV_CAPABILITY_BIND

    #define E_WEBDAV_CAPABILITY_BIND			"bind"

### E_WEBDAV_CAPABILITY_EXTENDED_MKCOL

    #define E_WEBDAV_CAPABILITY_EXTENDED_MKCOL		"extended-mkcol"

### E_WEBDAV_CAPABILITY_ADDRESSBOOK

    #define E_WEBDAV_CAPABILITY_ADDRESSBOOK			"addressbook"

### E_WEBDAV_CAPABILITY_CALENDAR_ACCESS

    #define E_WEBDAV_CAPABILITY_CALENDAR_ACCESS		"calendar-access"

### E_WEBDAV_CAPABILITY_CALENDAR_SCHEDULE

    #define E_WEBDAV_CAPABILITY_CALENDAR_SCHEDULE		"calendar-schedule"

### E_WEBDAV_CAPABILITY_CALENDAR_AUTO_SCHEDULE

    #define E_WEBDAV_CAPABILITY_CALENDAR_AUTO_SCHEDULE "calendar-auto-schedule"

### E_WEBDAV_CAPABILITY_CALENDAR_PROXY

    #define E_WEBDAV_CAPABILITY_CALENDAR_PROXY		"calendar-proxy"

### E_WEBDAV_DEPTH_THIS

    #define E_WEBDAV_DEPTH_THIS			"0"

### E_WEBDAV_DEPTH_THIS_AND_CHILDREN

    #define E_WEBDAV_DEPTH_THIS_AND_CHILDREN "1"

### E_WEBDAV_DEPTH_INFINITY

    #define E_WEBDAV_DEPTH_INFINITY			"infinity"

### E_WEBDAV_CONTENT_TYPE_XML

    #define E_WEBDAV_CONTENT_TYPE_XML		"application/xml; charset=\"utf-8\""

### E_WEBDAV_CONTENT_TYPE_CALENDAR

    #define E_WEBDAV_CONTENT_TYPE_CALENDAR		"text/calendar; charset=\"utf-8\""

### E_WEBDAV_CONTENT_TYPE_VCARD

    #define E_WEBDAV_CONTENT_TYPE_VCARD		"text/vcard; charset=\"utf-8\""

### E_WEBDAV_NS_DAV

    #define E_WEBDAV_NS_DAV				"DAV:"

### E_WEBDAV_NS_CALDAV

    #define E_WEBDAV_NS_CALDAV			"urn:ietf:params:xml:ns:caldav"

### E_WEBDAV_NS_CARDDAV

    #define E_WEBDAV_NS_CARDDAV			"urn:ietf:params:xml:ns:carddav"

### E_WEBDAV_NS_CALENDARSERVER

    #define E_WEBDAV_NS_CALENDARSERVER		"http://calendarserver.org/ns/"

### E_WEBDAV_NS_ICAL

    #define E_WEBDAV_NS_ICAL			"http://apple.com/ns/ical/"

### enum EWebDAVResourceKind

#### Members

E_WEBDAV_RESOURCE_KIND_UNKNOWN |  |
E_WEBDAV_RESOURCE_KIND_ADDRESSBOOK |  |
E_WEBDAV_RESOURCE_KIND_CALENDAR |  |
E_WEBDAV_RESOURCE_KIND_PRINCIPAL |  |
E_WEBDAV_RESOURCE_KIND_COLLECTION |  |
E_WEBDAV_RESOURCE_KIND_RESOURCE |  |
E_WEBDAV_RESOURCE_KIND_SUBSCRIBED_ICALENDAR |  |
E_WEBDAV_RESOURCE_KIND_WEBDAV_NOTES |  |

### enum EWebDAVResourceSupports

#### Members

E_WEBDAV_RESOURCE_SUPPORTS_NONE |  |
E_WEBDAV_RESOURCE_SUPPORTS_CONTACTS |  |
E_WEBDAV_RESOURCE_SUPPORTS_EVENTS |  |
E_WEBDAV_RESOURCE_SUPPORTS_MEMOS |  |
E_WEBDAV_RESOURCE_SUPPORTS_TASKS |  |
E_WEBDAV_RESOURCE_SUPPORTS_FREEBUSY |  |
E_WEBDAV_RESOURCE_SUPPORTS_TIMEZONE |  |
E_WEBDAV_RESOURCE_SUPPORTS_WEBDAV_NOTES |  |
E_WEBDAV_RESOURCE_SUPPORTS_LAST |  |

### enum EWebDAVListFlags

#### Members

E_WEBDAV_LIST_ALL |  |
E_WEBDAV_LIST_NONE |  |
E_WEBDAV_LIST_SUPPORTS |  |
E_WEBDAV_LIST_ETAG |  |
E_WEBDAV_LIST_DISPLAY_NAME |  |
E_WEBDAV_LIST_CONTENT_TYPE |  |
E_WEBDAV_LIST_CONTENT_LENGTH |  |
E_WEBDAV_LIST_CREATION_DATE |  |
E_WEBDAV_LIST_LAST_MODIFIED |  |
E_WEBDAV_LIST_DESCRIPTION |  |
E_WEBDAV_LIST_COLOR |  |
E_WEBDAV_LIST_ORDER |  |
E_WEBDAV_LIST_ONLY_CALENDAR |  |
E_WEBDAV_LIST_ONLY_ADDRESSBOOK |  |

### enum EWebDAVPropertyChangeKind

#### Members

E_WEBDAV_PROPERTY_SET |  |
E_WEBDAV_PROPERTY_REMOVE |  |

### enum EWebDAVLockScope

#### Members

E_WEBDAV_LOCK_EXCLUSIVE |  |
E_WEBDAV_LOCK_SHARED |  |

### E_WEBDAV_COLLATION_ASCII_NUMERIC_SUFFIX

    #define E_WEBDAV_COLLATION_ASCII_NUMERIC_SUFFIX "ascii-numeric"

### E_WEBDAV_COLLATION_ASCII_NUMERIC

    #define E_WEBDAV_COLLATION_ASCII_NUMERIC "i;" E_WEBDAV_COLLATION_ASCII_NUMERIC_SUFFIX

### E_WEBDAV_COLLATION_ASCII_CASEMAP_SUFFIX

    #define E_WEBDAV_COLLATION_ASCII_CASEMAP_SUFFIX "ascii-casemap"

### E_WEBDAV_COLLATION_ASCII_CASEMAP

    #define E_WEBDAV_COLLATION_ASCII_CASEMAP "i;" E_WEBDAV_COLLATION_ASCII_CASEMAP_SUFFIX

### E_WEBDAV_COLLATION_OCTET_SUFFIX

    #define E_WEBDAV_COLLATION_OCTET_SUFFIX "octet"

### E_WEBDAV_COLLATION_OCTET

    #define E_WEBDAV_COLLATION_OCTET "i;" E_WEBDAV_COLLATION_OCTET_SUFFIX

### E_WEBDAV_COLLATION_UNICODE_CASEMAP_SUFFIX

    #define E_WEBDAV_COLLATION_UNICODE_CASEMAP_SUFFIX "unicode-casemap"

### E_WEBDAV_COLLATION_UNICODE_CASEMAP

    #define E_WEBDAV_COLLATION_UNICODE_CASEMAP "i;" E_WEBDAV_COLLATION_UNICODE_CASEMAP_SUFFIX

### enum EWebDAVPrivilegeKind

#### Members

E_WEBDAV_PRIVILEGE_KIND_UNKNOWN |  |
E_WEBDAV_PRIVILEGE_KIND_ABSTRACT |  |
E_WEBDAV_PRIVILEGE_KIND_AGGREGATE |  |
E_WEBDAV_PRIVILEGE_KIND_COMMON |  |

### enum EWebDAVPrivilegeHint

#### Members

E_WEBDAV_PRIVILEGE_HINT_UNKNOWN |  |
E_WEBDAV_PRIVILEGE_HINT_READ |  |
E_WEBDAV_PRIVILEGE_HINT_WRITE |  |
E_WEBDAV_PRIVILEGE_HINT_WRITE_PROPERTIES |  |
E_WEBDAV_PRIVILEGE_HINT_WRITE_CONTENT |  |
E_WEBDAV_PRIVILEGE_HINT_UNLOCK |  |
E_WEBDAV_PRIVILEGE_HINT_READ_ACL |  |
E_WEBDAV_PRIVILEGE_HINT_WRITE_ACL |  |
E_WEBDAV_PRIVILEGE_HINT_READ_CURRENT_USER_PRIVILEGE_SET |  |
E_WEBDAV_PRIVILEGE_HINT_BIND |  |
E_WEBDAV_PRIVILEGE_HINT_UNBIND |  |
E_WEBDAV_PRIVILEGE_HINT_ALL |  |
E_WEBDAV_PRIVILEGE_HINT_CALDAV_READ_FREE_BUSY |  |

### enum EWebDAVACEPrincipalKind

#### Members

E_WEBDAV_ACE_PRINCIPAL_UNKNOWN |  |
E_WEBDAV_ACE_PRINCIPAL_HREF |  |
E_WEBDAV_ACE_PRINCIPAL_ALL |  |
E_WEBDAV_ACE_PRINCIPAL_AUTHENTICATED |  |
E_WEBDAV_ACE_PRINCIPAL_UNAUTHENTICATED |  |
E_WEBDAV_ACE_PRINCIPAL_PROPERTY |  |
E_WEBDAV_ACE_PRINCIPAL_SELF |  |
E_WEBDAV_ACE_PRINCIPAL_OWNER |  |

### enum EWebDAVACEFlag

#### Members

E_WEBDAV_ACE_FLAG_UNKNOWN |  |
E_WEBDAV_ACE_FLAG_GRANT |  |
E_WEBDAV_ACE_FLAG_DENY |  |
E_WEBDAV_ACE_FLAG_INVERT |  |
E_WEBDAV_ACE_FLAG_PROTECTED |  |
E_WEBDAV_ACE_FLAG_INHERITED |  |

### enum EWebDAVACLRestrictions

#### Members

E_WEBDAV_ACL_RESTRICTION_NONE |  |
E_WEBDAV_ACL_RESTRICTION_GRANT_ONLY |  |
E_WEBDAV_ACL_RESTRICTION_NO_INVERT |  |
E_WEBDAV_ACL_RESTRICTION_DENY_BEFORE_GRANT |  |
E_WEBDAV_ACL_RESTRICTION_REQUIRED_PRINCIPAL |  |

### struct EWebDAVSession

    struct EWebDAVSession;

Contains only private data that should be read and manipulated using the functions below.

Since: 3.26