472 } |
472 } |
473 // no property update |
473 // no property update |
474 return property; |
474 return property; |
475 } |
475 } |
476 |
476 |
|
477 static DavProperty* createprop(DavSession *sn, const char *ns, const char *name) { |
|
478 DavProperty *property = dav_session_malloc(sn, sizeof(DavProperty)); |
|
479 property->name = dav_session_strdup(sn, name); |
|
480 property->value = NULL; |
|
481 |
|
482 DavNamespace *namespace = dav_session_malloc(sn, sizeof(DavNamespace)); |
|
483 namespace->prefix = NULL; |
|
484 namespace->name = dav_session_strdup(sn, ns); |
|
485 |
|
486 property->ns = namespace; |
|
487 |
|
488 return property; |
|
489 } |
|
490 |
477 void dav_set_string_property(DavResource *res, char *name, char *value) { |
491 void dav_set_string_property(DavResource *res, char *name, char *value) { |
478 char *pns; |
492 char *pns; |
479 char *pname; |
493 char *pname; |
480 dav_get_property_namespace_str(res->session->context, name, &pns, &pname); |
494 dav_get_property_namespace_str(res->session->context, name, &pns, &pname); |
481 dav_set_string_property_ns(res, pns, pname, value); |
495 dav_set_string_property_ns(res, pns, pname, value); |
483 |
497 |
484 void dav_set_string_property_ns(DavResource *res, char *ns, char *name, char *value) { |
498 void dav_set_string_property_ns(DavResource *res, char *ns, char *name, char *value) { |
485 UcxAllocator *a = res->session->mp->allocator; |
499 UcxAllocator *a = res->session->mp->allocator; |
486 DavResourceData *data = res->data; |
500 DavResourceData *data = res->data; |
487 |
501 |
488 DavProperty *property = dav_session_malloc( |
502 DavProperty *property = createprop(res->session, ns, name); |
489 res->session, |
|
490 sizeof(DavProperty)); |
|
491 property->name = dav_session_strdup(res->session, name); |
|
492 property->value = dav_text_node(res->session, value); |
503 property->value = dav_text_node(res->session, value); |
493 |
|
494 DavNamespace *namespace = dav_session_malloc( |
|
495 res->session, |
|
496 sizeof(DavNamespace)); |
|
497 namespace->prefix = NULL; |
|
498 namespace->name = dav_session_strdup(res->session, ns); |
|
499 property->ns = namespace; |
|
500 |
504 |
501 data->set = ucx_list_append_a(a, data->set, property); |
505 data->set = ucx_list_append_a(a, data->set, property); |
502 } |
506 } |
503 |
507 |
504 void dav_set_property(DavResource *res, char *name, DavXmlNode *value) { |
508 void dav_set_property(DavResource *res, char *name, DavXmlNode *value) { |
510 |
514 |
511 void dav_set_property_ns(DavResource *res, char *ns, char *name, DavXmlNode *value) { |
515 void dav_set_property_ns(DavResource *res, char *ns, char *name, DavXmlNode *value) { |
512 UcxAllocator *a = res->session->mp->allocator; |
516 UcxAllocator *a = res->session->mp->allocator; |
513 DavResourceData *data = res->data; |
517 DavResourceData *data = res->data; |
514 |
518 |
515 DavProperty *property = dav_session_malloc( |
519 DavProperty *property = createprop(res->session, ns, name); |
516 res->session, |
|
517 sizeof(DavProperty)); |
|
518 property->name = dav_session_strdup(res->session, name); |
|
519 property->value = value; // TODO: copy node? |
520 property->value = value; // TODO: copy node? |
520 |
|
521 DavNamespace *namespace = dav_session_malloc( |
|
522 res->session, |
|
523 sizeof(DavNamespace)); |
|
524 namespace->prefix = NULL; |
|
525 namespace->name = dav_session_strdup(res->session, ns); |
|
526 property->ns = namespace; |
|
527 |
521 |
528 data->set = ucx_list_append_a(a, data->set, property); |
522 data->set = ucx_list_append_a(a, data->set, property); |
529 } |
523 } |
530 |
524 |
531 void dav_remove_property(DavResource *res, char *name) { |
525 void dav_remove_property(DavResource *res, char *name) { |
537 |
531 |
538 void dav_remove_property_ns(DavResource *res, char *ns, char *name) { |
532 void dav_remove_property_ns(DavResource *res, char *ns, char *name) { |
539 DavResourceData *data = res->data; |
533 DavResourceData *data = res->data; |
540 UcxAllocator *a = res->session->mp->allocator; |
534 UcxAllocator *a = res->session->mp->allocator; |
541 |
535 |
542 DavProperty *property = dav_session_malloc( |
536 DavProperty *property = createprop(res->session, ns, name); |
543 res->session, |
|
544 sizeof(DavProperty)); |
|
545 property->name = sstrdup_a(a, sstr(name)).ptr; |
|
546 property->value = NULL; |
|
547 |
|
548 DavNamespace *namespace = dav_session_malloc( |
|
549 res->session, |
|
550 sizeof(DavNamespace)); |
|
551 namespace->prefix = NULL; |
|
552 namespace->name = sstrdup_a(a, sstr(ns)).ptr; |
|
553 property->ns = namespace; |
|
554 |
537 |
555 data->remove = ucx_list_append_a(a, data->remove, property); |
538 data->remove = ucx_list_append_a(a, data->remove, property); |
|
539 } |
|
540 |
|
541 void dav_set_encrypted_property_ns(DavResource *res, char *ns, char *name, DavXmlNode *value) { |
|
542 UcxAllocator *a = res->session->mp->allocator; |
|
543 DavResourceData *data = res->data; |
|
544 |
|
545 DavProperty *property = createprop(res->session, ns, name); |
|
546 property->value = value; // TODO: copy node? |
|
547 |
|
548 data->crypto_set = ucx_list_append_a(a, data->crypto_set, property); |
|
549 } |
|
550 |
|
551 void dav_set_encrypted_string_property_ns(DavResource *res, char *ns, char *name, char *value) { |
|
552 UcxAllocator *a = res->session->mp->allocator; |
|
553 DavResourceData *data = res->data; |
|
554 |
|
555 DavProperty *property = createprop(res->session, ns, name); |
|
556 property->value = dav_text_node(res->session, value); |
|
557 |
|
558 data->crypto_set = ucx_list_append_a(a, data->crypto_set, property); |
|
559 } |
|
560 |
|
561 void dav_remove_encrypted_property_ns(DavResource *res, char *ns, char *name) { |
|
562 DavResourceData *data = res->data; |
|
563 UcxAllocator *a = res->session->mp->allocator; |
|
564 |
|
565 DavProperty *property = createprop(res->session, ns, name); |
|
566 |
|
567 data->crypto_remove = ucx_list_append_a(a, data->crypto_remove, property); |
556 } |
568 } |
557 |
569 |
558 static int compare_propname(const void *a, const void *b) { |
570 static int compare_propname(const void *a, const void *b) { |
559 const DavPropName *p1 = a; |
571 const DavPropName *p1 = a; |
560 const DavPropName *p2 = b; |
572 const DavPropName *p2 = b; |