libidav/methods.c

changeset 505
481802342fdf
parent 478
baa63fef5c5c
child 517
8531b63accae
equal deleted inserted replaced
504:bf3695fee719 505:481802342fdf
753 return ret; 753 return ret;
754 } 754 }
755 755
756 UcxBuffer* create_proppatch_request(DavResourceData *data) { 756 UcxBuffer* create_proppatch_request(DavResourceData *data) {
757 UcxBuffer *buf = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND); 757 UcxBuffer *buf = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND);
758 sstr_t s; 758 scstr_t s;
759 759
760 UcxMap *namespaces = ucx_map_new(8); 760 UcxMap *namespaces = ucx_map_new(8);
761 char prefix[8]; 761 char prefix[8];
762 int pfxnum = 0; 762 int pfxnum = 0;
763 UCX_FOREACH(elm, data->set) { 763 UCX_FOREACH(elm, data->set) {
773 snprintf(prefix, 8, "x%d", pfxnum++); 773 snprintf(prefix, 8, "x%d", pfxnum++);
774 ucx_map_cstr_put(namespaces, p->ns->name, strdup(prefix)); 774 ucx_map_cstr_put(namespaces, p->ns->name, strdup(prefix));
775 } 775 }
776 } 776 }
777 777
778 s = S("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); 778 s = SC("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
779 ucx_buffer_write(s.ptr, 1, s.length, buf); 779 ucx_buffer_write(s.ptr, 1, s.length, buf);
780 780
781 // write root element and namespaces 781 // write root element and namespaces
782 s = S("<D:propertyupdate xmlns:D=\"DAV:\""); 782 s = SC("<D:propertyupdate xmlns:D=\"DAV:\"");
783 ucx_buffer_write(s.ptr, 1, s.length, buf); 783 ucx_buffer_write(s.ptr, 1, s.length, buf);
784 UcxMapIterator mapi = ucx_map_iterator(namespaces); 784 UcxMapIterator mapi = ucx_map_iterator(namespaces);
785 UcxKey key; 785 UcxKey key;
786 char *pfxval; 786 char *pfxval;
787 UCX_MAP_FOREACH(key, pfxval, mapi) { 787 UCX_MAP_FOREACH(key, pfxval, mapi) {
788 s = S(" xmlns:"); 788 s = SC(" xmlns:");
789 ucx_buffer_write(s.ptr, 1, s.length, buf); 789 ucx_buffer_write(s.ptr, 1, s.length, buf);
790 s = sstr(pfxval); 790 s = scstr(pfxval);
791 ucx_buffer_write(s.ptr, 1, s.length, buf); 791 ucx_buffer_write(s.ptr, 1, s.length, buf);
792 s = S("=\""); 792 s = SC("=\"");
793 ucx_buffer_write(s.ptr, 1, s.length, buf); 793 ucx_buffer_write(s.ptr, 1, s.length, buf);
794 s = sstrn(key.data, key.len); 794 s = scstrn(key.data, key.len);
795 ucx_buffer_write(s.ptr, 1, s.length, buf); 795 ucx_buffer_write(s.ptr, 1, s.length, buf);
796 s = S("\""); 796 s = SC("\"");
797 ucx_buffer_write(s.ptr, 1, s.length, buf); 797 ucx_buffer_write(s.ptr, 1, s.length, buf);
798 } 798 }
799 s = S(">\n"); 799 s = SC(">\n");
800 ucx_buffer_write(s.ptr, 1, s.length, buf); 800 ucx_buffer_write(s.ptr, 1, s.length, buf);
801 801
802 if(data->set) { 802 if(data->set) {
803 s = S("<D:set>\n<D:prop>\n"); 803 s = SC("<D:set>\n<D:prop>\n");
804 ucx_buffer_write(s.ptr, 1, s.length, buf); 804 ucx_buffer_write(s.ptr, 1, s.length, buf);
805 UCX_FOREACH(elm, data->set) { 805 UCX_FOREACH(elm, data->set) {
806 DavProperty *property = elm->data; 806 DavProperty *property = elm->data;
807 char *prefix = ucx_map_cstr_get(namespaces, property->ns->name); 807 char *prefix = ucx_map_cstr_get(namespaces, property->ns->name);
808 if(!prefix) { 808 if(!prefix) {
809 prefix = "D"; 809 prefix = "D";
810 } 810 }
811 811
812 // begin tag 812 // begin tag
813 s = S("<"); 813 s = SC("<");
814 ucx_buffer_write(s.ptr, 1, s.length, buf); 814 ucx_buffer_write(s.ptr, 1, s.length, buf);
815 s = sstr(prefix); 815 s = scstr(prefix);
816 ucx_buffer_write(s.ptr, 1, s.length, buf); 816 ucx_buffer_write(s.ptr, 1, s.length, buf);
817 s = S(":"); 817 s = SC(":");
818 ucx_buffer_write(s.ptr, 1, s.length, buf); 818 ucx_buffer_write(s.ptr, 1, s.length, buf);
819 s = sstr(property->name); 819 s = scstr(property->name);
820 ucx_buffer_write(s.ptr, 1, s.length, buf); 820 ucx_buffer_write(s.ptr, 1, s.length, buf);
821 s = S(">"); 821 s = SC(">");
822 ucx_buffer_write(s.ptr, 1, s.length, buf); 822 ucx_buffer_write(s.ptr, 1, s.length, buf);
823 823
824 // content 824 // content
825 DavXmlNode *content = property->value; 825 DavXmlNode *content = property->value;
826 if(content->type == DAV_XML_TEXT && !content->next) { 826 if(content->type == DAV_XML_TEXT && !content->next) {
828 } else { 828 } else {
829 dav_print_node(buf, (write_func)ucx_buffer_write, namespaces, content); 829 dav_print_node(buf, (write_func)ucx_buffer_write, namespaces, content);
830 } 830 }
831 831
832 // end tag 832 // end tag
833 s = S("</"); 833 s = SC("</");
834 ucx_buffer_write(s.ptr, 1, s.length, buf); 834 ucx_buffer_write(s.ptr, 1, s.length, buf);
835 s = sstr(prefix); 835 s = scstr(prefix);
836 ucx_buffer_write(s.ptr, 1, s.length, buf); 836 ucx_buffer_write(s.ptr, 1, s.length, buf);
837 s = S(":"); 837 s = SC(":");
838 ucx_buffer_write(s.ptr, 1, s.length, buf); 838 ucx_buffer_write(s.ptr, 1, s.length, buf);
839 s = sstr(property->name); 839 s = scstr(property->name);
840 ucx_buffer_write(s.ptr, 1, s.length, buf); 840 ucx_buffer_write(s.ptr, 1, s.length, buf);
841 s = S(">\n"); 841 s = SC(">\n");
842 ucx_buffer_write(s.ptr, 1, s.length, buf); 842 ucx_buffer_write(s.ptr, 1, s.length, buf);
843 } 843 }
844 s = S("</D:prop>\n</D:set>\n"); 844 s = SC("</D:prop>\n</D:set>\n");
845 ucx_buffer_write(s.ptr, 1, s.length, buf); 845 ucx_buffer_write(s.ptr, 1, s.length, buf);
846 } 846 }
847 if(data->remove) { 847 if(data->remove) {
848 s = S("<D:remove>\n<D:prop>\n"); 848 s = SC("<D:remove>\n<D:prop>\n");
849 ucx_buffer_write(s.ptr, 1, s.length, buf); 849 ucx_buffer_write(s.ptr, 1, s.length, buf);
850 UCX_FOREACH(elm, data->remove) { 850 UCX_FOREACH(elm, data->remove) {
851 DavProperty *property = elm->data; 851 DavProperty *property = elm->data;
852 char *prefix = ucx_map_cstr_get(namespaces, property->ns->name); 852 char *prefix = ucx_map_cstr_get(namespaces, property->ns->name);
853 853
854 s = S("<"); 854 s = SC("<");
855 ucx_buffer_write(s.ptr, 1, s.length, buf); 855 ucx_buffer_write(s.ptr, 1, s.length, buf);
856 s = sstr(prefix); 856 s = scstr(prefix);
857 ucx_buffer_write(s.ptr, 1, s.length, buf); 857 ucx_buffer_write(s.ptr, 1, s.length, buf);
858 s = S(":"); 858 s = SC(":");
859 ucx_buffer_write(s.ptr, 1, s.length, buf); 859 ucx_buffer_write(s.ptr, 1, s.length, buf);
860 s = sstr(property->name); 860 s = scstr(property->name);
861 ucx_buffer_write(s.ptr, 1, s.length, buf); 861 ucx_buffer_write(s.ptr, 1, s.length, buf);
862 s = S(" />\n"); 862 s = SC(" />\n");
863 ucx_buffer_write(s.ptr, 1, s.length, buf); 863 ucx_buffer_write(s.ptr, 1, s.length, buf);
864 } 864 }
865 s = S("</D:prop>\n</D:remove>\n"); 865 s = SC("</D:prop>\n</D:remove>\n");
866 ucx_buffer_write(s.ptr, 1, s.length, buf); 866 ucx_buffer_write(s.ptr, 1, s.length, buf);
867 } 867 }
868 868
869 s = S("</D:propertyupdate>\n"); 869 s = SC("</D:propertyupdate>\n");
870 ucx_buffer_write(s.ptr, 1, s.length, buf); 870 ucx_buffer_write(s.ptr, 1, s.length, buf);
871 871
872 // cleanup namespace map 872 // cleanup namespace map
873 ucx_map_free_content(namespaces, free); 873 ucx_map_free_content(namespaces, free);
874 ucx_map_free(namespaces); 874 ucx_map_free(namespaces);
875 875
876 return buf; 876 return buf;
877 } 877 }
878 878
879 UcxBuffer* create_crypto_proppatch_request(DavSession *sn, DavKey *key, char *name, char *hash) { 879 UcxBuffer* create_crypto_proppatch_request(DavSession *sn, DavKey *key, const char *name, const char *hash) {
880 UcxBuffer *buf = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND); 880 UcxBuffer *buf = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND);
881 sstr_t s; 881 sstr_t s;
882 882
883 s = S("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); 883 s = S("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
884 ucx_buffer_write(s.ptr, 1, s.length, buf); 884 ucx_buffer_write(s.ptr, 1, s.length, buf);

mercurial