dav/main.c

changeset 16
5dbef9e07376
parent 15
182af08b4813
child 17
11dffb40cd91
--- a/dav/main.c	Thu Aug 15 11:23:25 2013 +0200
+++ b/dav/main.c	Fri Aug 16 12:41:30 2013 +0200
@@ -68,18 +68,27 @@
         return -1;
     }
     
-    if(!strcmp(cmd, "list") || !strcmp(cmd, "ls")) {
-        return cmd_list(args);
-    } else if(!strcmp(cmd, "get")) {
-        return cmd_get(args);
-    } else if(!strcmp(cmd, "put")) {
-        return cmd_put(args);
-    } else if(!strcmp(cmd, "remove") || !strcmp(cmd, "rm")) {
-        return cmd_remove(args);
+    int ret = -1;
+    if(!strcasecmp(cmd, "list") || !strcasecmp(cmd, "ls")) {
+        ret = cmd_list(args);
+    } else if(!strcasecmp(cmd, "get")) {
+        ret = cmd_get(args);
+    } else if(!strcasecmp(cmd, "put")) {
+        ret = cmd_put(args);
+    } else if(
+            !strcasecmp(cmd, "remove") ||
+            !strcasecmp(cmd, "rm") ||
+            !strcasecmp(cmd, "delete"))
+    {
+        ret = cmd_remove(args);
+    } else if(!strcasecmp(cmd, "mkdir") || !strcasecmp(cmd, "mkcol")) {
+        ret = cmd_mkdir(args);
+    } else {
+        print_usage(argv[0]);
     }
+    dav_context_destroy(ctx);
     
-    print_usage(argv[0]);
-    return -1;
+    return ret;
 }
 
 void print_usage(char *cmd) {
@@ -88,6 +97,8 @@
     fprintf(stderr, "        list [-alt] <url>\n");
     fprintf(stderr, "        get [-p] [-k <key>] [-o <file>] <url>\n");
     fprintf(stderr, "        put [-p] [-k <key>] <url> <file>\n");
+    fprintf(stderr, "        mkdir <url>\n");
+    fprintf(stderr, "        remove <url>\n");
     fprintf(stderr, "\n");
     fprintf(stderr, "Options:\n");
     fprintf(stderr,
@@ -156,6 +167,15 @@
             fprintf(stderr, "Access forbidden.\n");
             break;
         }
+        case DAV_METHOD_NOT_ALLOWED: {
+            fprintf(stderr, "Method not allowed.\n");
+        }
+        case DAV_CONFLICT: {
+            fprintf(
+                    stderr,
+                    "Missing intermediate collections for resource %s.\n",
+                    res_url);
+        }
     }
     free(res_url);
 }
@@ -530,3 +550,38 @@
     
     return 0;
 }
+
+int cmd_mkdir(CmdArgs *a) {
+    if(a->argc < 1) {
+        fprintf(stderr, "Too few arguments\n");
+        return -1;
+    }
+    
+    DavSession *sn = NULL;
+    char *url = a->argv[0];
+    char *root = NULL;
+    char *path = NULL;
+    url_get_parts(url, &root, &path);
+    
+    Repository *repo = get_repository(root);
+    if(repo) {
+        sn = dav_session_new_auth(ctx, repo->url, repo->user, repo->password);
+    } else {
+        sn = dav_session_new(ctx, root);
+    }
+    
+    DavResource *res = dav_resource_new(sn, path);
+    if(!res) {
+        fprintf(stderr, "error\n");
+        return -1;
+    }
+    res->iscollection = 1;
+    
+    if(dav_create(res)) {
+        print_resource_error(sn, res->path);
+        fprintf(stderr, "Cannot create collection.\n");
+        return -1;
+    }
+    
+    return 0;
+}

mercurial