dav/main.c

Sat, 01 Dec 2012 20:34:55 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 01 Dec 2012 20:34:55 +0100
changeset 4
ae5a98f0545c
parent 3
323689ada09d
child 5
88625853ae74
permissions
-rw-r--r--

added put method

1
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2012 Olaf Wintermann. All rights reserved.
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdio.h>
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <stdlib.h>
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include <string.h>
4
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
32 #include <unistd.h>
1
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include <libxml/xmlerror.h>
4
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
34 #include <sys/types.h>
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
35 #include <sys/stat.h>
1
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 #include "propfind.h"
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 #include "utils.h"
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 #include "main.h"
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 void xmlerrorfnc(void * ctx, const char * msg, ... ) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 // nothing
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 int main(int argc, char **argv) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 xmlGenericErrorFunc fnc = xmlerrorfnc;
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 initGenericErrorDefaultFunc(&fnc);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 if(argc < 2) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 print_usage();
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 return -1;
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 if(!strcmp(argv[1], "list") || !strcmp(argv[1], "ls")) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 return cmd_list(argc - 2, argv + 2);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 } else if(!strcmp(argv[1], "get")) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 return cmd_get(argc - 2, argv + 2);
4
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
58 } else if(!strcmp(argv[1], "put")) {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
59 return cmd_put(argc - 2, argv + 2);
1
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 print_usage();
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 return -1;
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 void print_usage() {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69
4
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
70 void get_file(CURL *curl, char *url, char *path) {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
71 curl_easy_setopt(curl, CURLOPT_URL, url);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
72 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
73
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
74 FILE *out = fopen(path, "w");
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
75
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
76 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
77 curl_easy_setopt(curl, CURLOPT_WRITEDATA, out);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
78
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
79 CURLcode res = curl_easy_perform(curl);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
80
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
81 fclose(out);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
82 // handle some errors (http://curl.haxx.se/libcurl/c/libcurl-errors.html)
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
83 switch(res) {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
84 case CURLE_OK: {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
85 return;
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
86 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
87 case CURLE_REMOTE_ACCESS_DENIED: {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
88
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
89 break;
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
90 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
91 case CURLE_SSL_CONNECT_ERROR: {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
92
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
93 break;
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
94 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
95 case CURLE_LOGIN_DENIED: {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
96
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
97 break;
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
98 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
99 case CURLE_REMOTE_FILE_NOT_FOUND: {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
100
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
101 break;
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
102 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
103 default: {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
104
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
105 break;
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
106 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
107 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
108
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
109 unlink(path);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
110 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
111
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
112 void put_file(CURL *curl, char *url, char *path) {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
113 curl_easy_setopt(curl, CURLOPT_URL, url);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
114 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
115
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
116 curl_easy_setopt(curl, CURLOPT_PUT, 1L);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
117
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
118 struct stat s;
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
119 if(stat(path, &s) != 0) {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
120 perror("stat");
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
121 fprintf(stderr, "file: %s\n", path);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
122 return;
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
123 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
124
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
125 FILE *in = fopen(path, "r");
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
126
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
127 curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
128 curl_easy_setopt(curl, CURLOPT_READFUNCTION, fread);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
129 curl_easy_setopt(curl, CURLOPT_READDATA, in);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
130 curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)s.st_size);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
131
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
132 CURLcode res = curl_easy_perform(curl);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
133 fclose(in);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
134
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
135 if(res != CURLE_OK) {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
136 fprintf(stderr, "put_file: %s\n", curl_easy_strerror(res));
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
137 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
138 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
139
1
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140 int cmd_list(int argc, char **argv) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
141 if(argc == 0) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
142 return -1;
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
143 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
144
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
145 char *url = argv[0]; // TODO: use arg as url or alias
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
147 CURL *curl = curl_easy_init();
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 curl_easy_setopt(curl, CURLOPT_URL, url);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 Propfind *propfind = dav_propfind(curl);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151 UCX_FOREACH(UcxDlist*, propfind->children, ch) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 DavResource *resource = ch->data;
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153 printf("%s\n", resource->name);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156 // TODO: free propfind stuff
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157 curl_easy_cleanup(curl);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 return 0;
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162 int cmd_get(int argc, char **argv) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163 if(argc == 0) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 return -1;
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
165 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167 char *url = argv[0]; // TODO: use arg as url or alias
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
168
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169 CURL *curl = curl_easy_init();
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 curl_easy_setopt(curl, CURLOPT_URL, url);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 Propfind *propfind = dav_propfind(curl);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173 if(propfind->resource->collection) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174 UCX_FOREACH(UcxDlist*, propfind->children, chd) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 DavResource *resource = chd->data;
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
176 if(!resource->collection) {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
177 char *resurl = util_child_url(propfind->url, resource->href);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 get_file(curl, resurl, resource->name);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
179 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
181 } else {
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
182 get_file(curl, propfind->url, propfind->resource->name);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
183 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
184
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
185 // TODO: free propfind stuff
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
186 curl_easy_cleanup(curl);
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
187
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
188 return 0;
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
189 }
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
190
4
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
191 int cmd_put(int argc, char **argv) {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
192 if(argc == 0) {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
193 return -1;
3
323689ada09d disabled ssl cert verification
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
194 }
323689ada09d disabled ssl cert verification
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
195
4
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
196 char *url = argv[0]; // TODO: use arg as url or alias
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
197 char *path;
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
198 if(argc > 0) {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
199 path = argv[1];
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
200 } else {
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
201 fprintf(stderr, "put: missing file argument\n");
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
202 return -1;
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
203 }
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
204
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
205 char *uploadurl = util_upload_url(url, path);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
206
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
207 CURL *curl = curl_easy_init();
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
208
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
209 // TODO: check possible name conflicts
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
210
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
211 put_file(curl, uploadurl, path);
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
212
ae5a98f0545c added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
213 curl_easy_cleanup(curl);
1
1bcaac272cdf added existing source code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
214 }

mercurial