--- a/libidav/resource.c Sat Jun 01 10:55:32 2019 +0200 +++ b/libidav/resource.c Sat Jun 15 11:01:37 2019 +0200 @@ -474,6 +474,20 @@ return property; } +static DavProperty* createprop(DavSession *sn, const char *ns, const char *name) { + DavProperty *property = dav_session_malloc(sn, sizeof(DavProperty)); + property->name = dav_session_strdup(sn, name); + property->value = NULL; + + DavNamespace *namespace = dav_session_malloc(sn, sizeof(DavNamespace)); + namespace->prefix = NULL; + namespace->name = dav_session_strdup(sn, ns); + + property->ns = namespace; + + return property; +} + void dav_set_string_property(DavResource *res, char *name, char *value) { char *pns; char *pname; @@ -485,19 +499,9 @@ UcxAllocator *a = res->session->mp->allocator; DavResourceData *data = res->data; - DavProperty *property = dav_session_malloc( - res->session, - sizeof(DavProperty)); - property->name = dav_session_strdup(res->session, name); + DavProperty *property = createprop(res->session, ns, name); property->value = dav_text_node(res->session, value); - DavNamespace *namespace = dav_session_malloc( - res->session, - sizeof(DavNamespace)); - namespace->prefix = NULL; - namespace->name = dav_session_strdup(res->session, ns); - property->ns = namespace; - data->set = ucx_list_append_a(a, data->set, property); } @@ -512,19 +516,9 @@ UcxAllocator *a = res->session->mp->allocator; DavResourceData *data = res->data; - DavProperty *property = dav_session_malloc( - res->session, - sizeof(DavProperty)); - property->name = dav_session_strdup(res->session, name); + DavProperty *property = createprop(res->session, ns, name); property->value = value; // TODO: copy node? - DavNamespace *namespace = dav_session_malloc( - res->session, - sizeof(DavNamespace)); - namespace->prefix = NULL; - namespace->name = dav_session_strdup(res->session, ns); - property->ns = namespace; - data->set = ucx_list_append_a(a, data->set, property); } @@ -539,22 +533,40 @@ DavResourceData *data = res->data; UcxAllocator *a = res->session->mp->allocator; - DavProperty *property = dav_session_malloc( - res->session, - sizeof(DavProperty)); - property->name = sstrdup_a(a, sstr(name)).ptr; - property->value = NULL; - - DavNamespace *namespace = dav_session_malloc( - res->session, - sizeof(DavNamespace)); - namespace->prefix = NULL; - namespace->name = sstrdup_a(a, sstr(ns)).ptr; - property->ns = namespace; + DavProperty *property = createprop(res->session, ns, name); data->remove = ucx_list_append_a(a, data->remove, property); } +void dav_set_encrypted_property_ns(DavResource *res, char *ns, char *name, DavXmlNode *value) { + UcxAllocator *a = res->session->mp->allocator; + DavResourceData *data = res->data; + + DavProperty *property = createprop(res->session, ns, name); + property->value = value; // TODO: copy node? + + data->crypto_set = ucx_list_append_a(a, data->crypto_set, property); +} + +void dav_set_encrypted_string_property_ns(DavResource *res, char *ns, char *name, char *value) { + UcxAllocator *a = res->session->mp->allocator; + DavResourceData *data = res->data; + + DavProperty *property = createprop(res->session, ns, name); + property->value = dav_text_node(res->session, value); + + data->crypto_set = ucx_list_append_a(a, data->crypto_set, property); +} + +void dav_remove_encrypted_property_ns(DavResource *res, char *ns, char *name) { + DavResourceData *data = res->data; + UcxAllocator *a = res->session->mp->allocator; + + DavProperty *property = createprop(res->session, ns, name); + + data->crypto_remove = ucx_list_append_a(a, data->crypto_remove, property); +} + static int compare_propname(const void *a, const void *b) { const DavPropName *p1 = a; const DavPropName *p2 = b;