dav/main.c

changeset 15
182af08b4813
parent 14
d1a43035d3a2
child 16
5dbef9e07376
equal deleted inserted replaced
14:d1a43035d3a2 15:182af08b4813
72 return cmd_list(args); 72 return cmd_list(args);
73 } else if(!strcmp(cmd, "get")) { 73 } else if(!strcmp(cmd, "get")) {
74 return cmd_get(args); 74 return cmd_get(args);
75 } else if(!strcmp(cmd, "put")) { 75 } else if(!strcmp(cmd, "put")) {
76 return cmd_put(args); 76 return cmd_put(args);
77 } else if(!strcmp(cmd, "remove") || !strcmp(cmd, "rm")) {
78 return cmd_remove(args);
77 } 79 }
78 80
79 print_usage(argv[0]); 81 print_usage(argv[0]);
80 return -1; 82 return -1;
81 } 83 }
133 135
134 *root = strdup(url); 136 *root = strdup(url);
135 *path = strdup("/"); 137 *path = strdup("/");
136 } 138 }
137 139
138 void print_resource_error(DavSession *sn, DavResource *res) { 140 void print_resource_error(DavSession *sn, char *path) {
139 char *res_url = util_concat_path(sn->base_url, res->path); 141 char *res_url = util_concat_path(sn->base_url, path);
140 switch(sn->error) { 142 switch(sn->error) {
141 default: { 143 default: {
142 fprintf(stderr, "Cannot get resource %s.\n", res_url); 144 fprintf(stderr, "Operation failed for resource %s.\n", res_url);
143 break; 145 break;
144 } 146 }
145 case DAV_NOT_FOUND: { 147 case DAV_NOT_FOUND: {
146 fprintf(stderr, "Resource %s not found.\n", res_url); 148 fprintf(stderr, "Resource %s not found.\n", res_url);
147 break; 149 break;
159 } 161 }
160 162
161 163
162 int cmd_list(CmdArgs *a) { 164 int cmd_list(CmdArgs *a) {
163 if(a->argc == 0) { 165 if(a->argc == 0) {
166 fprintf(stderr, "Too few arguments\n");
164 return -1; 167 return -1;
165 } 168 }
166 169
167 DavSession *sn = NULL; 170 DavSession *sn = NULL;
168 char *url = a->argv[0]; 171 char *url = a->argv[0];
179 182
180 //printf("baseurl: %s\n", sn->base_url); 183 //printf("baseurl: %s\n", sn->base_url);
181 184
182 DavResource *ls = dav_get(sn, path, "U:crypto-key"); 185 DavResource *ls = dav_get(sn, path, "U:crypto-key");
183 if(!ls) { 186 if(!ls) {
184 print_resource_error(sn, ls); 187 print_resource_error(sn, path);
185 return -1; 188 return -1;
186 } 189 }
187 190
188 // parameters 191 // parameters
189 int show_all = cmd_getoption(a, "all") ? 1 : 0; 192 int show_all = cmd_getoption(a, "all") ? 1 : 0;
220 } 223 }
221 224
222 static char* ls_size_str(DavResource *res) { 225 static char* ls_size_str(DavResource *res) {
223 char *str = malloc(16); 226 char *str = malloc(16);
224 uint64_t size = res->contentlength; 227 uint64_t size = res->contentlength;
225 228
226 if(res->iscollection) { 229 if(res->iscollection) {
227 snprintf(str, 16, "%" PRIu64, size); 230 snprintf(str, 16, "");
228 } else if(size < 0x400) { 231 } else if(size < 0x400) {
229 snprintf(str, 16, "%" PRIu64 " Bytes", size); 232 snprintf(str, 16, "%" PRIu64 " bytes", size);
230 } else if(size < 0x100000) { 233 } else if(size < 0x100000) {
231 size /= 0x400; 234 float s = (float)size/0x400;
232 snprintf(str, 16, "%" PRIu64 " KiB", size); 235 int diff = (s*100 - (int)s*100);
236 if(diff > 90) {
237 diff = 0;
238 s += 0.10f;
239 }
240 if(size < 0x2800 && diff != 0) {
241 // size < 10 KiB
242 snprintf(str, 16, "%.1f KiB", s);
243 } else {
244 snprintf(str, 16, "%.0f KiB", s);
245 }
233 } else if(size < 0x40000000) { 246 } else if(size < 0x40000000) {
234 size /= 0x100000; 247 float s = (float)size/0x100000;
235 snprintf(str, 16, "%" PRIu64 "MiB", size); 248 int diff = (s*100 - (int)s*100);
249 if(diff > 90) {
250 diff = 0;
251 s += 0.10f;
252 }
253 if(size < 0xa00000 && diff != 0) {
254 // size < 10 MiB
255 snprintf(str, 16, "%.1f MiB", s);
256 } else {
257 size /= 0x100000;
258 snprintf(str, 16, "%.0f MiB", s);
259 }
236 } else if(size < 0x1000000000ULL) { 260 } else if(size < 0x1000000000ULL) {
237 size /= 0x40000000; 261 float s = (float)size/0x40000000;
238 snprintf(str, 16, "%" PRIu64 "GiB", size); 262 int diff = (s*100 - (int)s*100);
239 } else { 263 if(diff > 90) {
240 size /= 0x1000000000ULL; 264 diff = 0;
241 snprintf(str, 16, "%" PRIu64, "TiB", size); 265 s += 0.10f;
266 }
267 if(size < 0x280000000 && diff != 0) {
268 // size < 10 GiB
269 snprintf(str, 16, "%.1f GiB", s);
270 } else {
271 size /= 0x40000000;
272 snprintf(str, 16, "%.0f GiB", s);
273 }
274 } else {
275 size /= 1024;
276 float s = (float)size/0x40000000;
277 int diff = (s*100 - (int)s*100);
278 if(diff > 90) {
279 diff = 0;
280 s += 0.10f;
281 }
282 if(size < 0x280000000 && diff != 0) {
283 // size < 10 TiB
284 snprintf(str, 16, "%.1f TiB", s);
285 } else {
286 size /= 0x40000000;
287 snprintf(str, 16, "%.0f TiB", s);
288 }
242 } 289 }
243 return str; 290 return str;
244 } 291 }
245 292
246 void ls_print_list_elm(DavResource *res, CmdArgs *a) { 293 void ls_print_list_elm(DavResource *res, CmdArgs *a) {
287 printf("%s\n", res->name); 334 printf("%s\n", res->name);
288 } 335 }
289 336
290 int cmd_get(CmdArgs *a) { 337 int cmd_get(CmdArgs *a) {
291 if(a->argc == 0) { 338 if(a->argc == 0) {
339 fprintf(stderr, "Too few arguments\n");
292 return -1; 340 return -1;
293 } 341 }
294 342
295 DavSession *sn = NULL; 343 DavSession *sn = NULL;
296 char *url = a->argv[0]; 344 char *url = a->argv[0];
305 sn = dav_session_new(ctx, root); 353 sn = dav_session_new(ctx, root);
306 } 354 }
307 355
308 DavResource *res = dav_get(sn, path, "U:crypto-key"); 356 DavResource *res = dav_get(sn, path, "U:crypto-key");
309 if(!res) { 357 if(!res) {
310 print_resource_error(sn, res); 358 print_resource_error(sn, path);
311 return -1; 359 return -1;
312 } 360 }
313 361
314 /* 362 /*
315 * determine the output file 363 * determine the output file
378 return 0; 426 return 0;
379 } 427 }
380 428
381 int cmd_put(CmdArgs *a) { 429 int cmd_put(CmdArgs *a) {
382 if(a->argc < 2) { 430 if(a->argc < 2) {
431 fprintf(stderr, "Too few arguments\n");
383 return -1; 432 return -1;
384 } 433 }
385 434
386 DavSession *sn = NULL; 435 DavSession *sn = NULL;
387 char *url = a->argv[0]; 436 char *url = a->argv[0];
434 } else { 483 } else {
435 dav_set_content(res, in, (dav_read_func)fread); 484 dav_set_content(res, in, (dav_read_func)fread);
436 } 485 }
437 486
438 if(dav_store(res)) { 487 if(dav_store(res)) {
439 print_resource_error(sn, res); 488 print_resource_error(sn, res->path);
440 fprintf(stderr, "Cannot upload file.\n"); 489 fprintf(stderr, "Cannot upload file.\n");
441 fclose(in); 490 fclose(in);
442 return -1; 491 return -1;
443 } 492 }
444 if(enc) { 493 if(enc) {
445 aes_encrypter_close(enc); 494 aes_encrypter_close(enc);
446 } 495 }
447 fclose(in); 496 fclose(in);
448 return 0; 497 return 0;
449 } 498 }
499
500 int cmd_remove(CmdArgs *a) {
501 if(a->argc < 1) {
502 fprintf(stderr, "Too few arguments\n");
503 return -1;
504 }
505
506 DavSession *sn = NULL;
507 char *url = a->argv[0];
508 char *root = NULL;
509 char *path = NULL;
510 url_get_parts(url, &root, &path);
511
512 Repository *repo = get_repository(root);
513 if(repo) {
514 sn = dav_session_new_auth(ctx, repo->url, repo->user, repo->password);
515 } else {
516 sn = dav_session_new(ctx, root);
517 }
518
519 DavResource *res = dav_resource_new(sn, path);
520 if(!res) {
521 fprintf(stderr, "error\n");
522 return -1;
523 }
524
525 if(dav_delete(res)) {
526 print_resource_error(sn, res->path);
527 fprintf(stderr, "Cannot delete resource.\n");
528 return -1;
529 }
530
531 return 0;
532 }

mercurial